// Bootstring parameter values for Punycode

///|
let base : UInt = 36U

///|
let tmin : UInt = 1U

///|
let tmax : UInt = 26U

///|
let skew : UInt = 38U

///|
let damp : UInt = 700U

///|
let initial_bias : UInt = 72U

///|
let initial_n : UInt = 0x80U // 128

///| Delimiter between literal portion and encoded portion
let delimiter : Char = '-'

///| Bias adaptation function
fn adapt(delta : UInt, num_points : UInt, first_time : Bool) -> UInt {
  let mut delta = delta
  delta /= if first_time { damp } else { 2U }
  delta += delta / num_points
  let mut k = 0U
  while delta > (base - tmin) * tmax / 2U {
    delta /= base - tmin
    k += base
  }
  k + (base - tmin + 1U) * delta / (delta + skew)
}