// Copyright 2026 Leo Cheng
// SPDX-License-Identifier: Apache-2.0
// Generated by `scripts/gen_idna_classes.py` from the derived property tables
// of RFC 5892, as the `idna` package publishes them for Unicode 15.1.0. Do not edit: run the script.
///|
/// PVALID, CONTEXTJ and CONTEXTO: the code points a label may hold, every other one being DISALLOWED.
let idna_allowed : Array[Int32] = [
0x2D, 0x2D, 0x30, 0x39, 0x61, 0x7A, 0xB7, 0xB7, 0xDF, 0xF6, 0xF8, 0xFF, 0x101,
0x101, 0x103, 0x103, 0x105, 0x105, 0x107, 0x107, 0x109, 0x109, 0x10B, 0x10B, 0x10D,
0x10D, 0x10F, 0x10F, 0x111, 0x111, 0x113, 0x113, 0x115, 0x115, 0x117, 0x117, 0x119,
0x119, 0x11B, 0x11B, 0x11D, 0x11D, 0x11F, 0x11F, 0x121, 0x121, 0x123, 0x123, 0x125,
0x125, 0x127, 0x127, 0x129, 0x129, 0x12B, 0x12B, 0x12D, 0x12D, 0x12F, 0x12F, 0x131,
0x131, 0x135, 0x135, 0x137, 0x138, 0x13A, 0x13A, 0x13C, 0x13C, 0x13E, 0x13E, 0x142,
0x142, 0x144, 0x144, 0x146, 0x146, 0x148, 0x148, 0x14B, 0x14B, 0x14D, 0x14D, 0x14F,
0x14F, 0x151, 0x151, 0x153, 0x153, 0x155, 0x155, 0x157, 0x157, 0x159, 0x159, 0x15B,
0x15B, 0x15D, 0x15D, 0x15F, 0x15F, 0x161, 0x161, 0x163, 0x163, 0x165, 0x165, 0x167,
0x167, 0x169, 0x169, 0x16B, 0x16B, 0x16D, 0x16D, 0x16F, 0x16F, 0x171, 0x171, 0x173,
0x173, 0x175, 0x175, 0x177, 0x177, 0x17A, 0x17A, 0x17C, 0x17C, 0x17E, 0x17E, 0x180,
0x180, 0x183, 0x183, 0x185, 0x185, 0x188, 0x188, 0x18C, 0x18D, 0x192, 0x192, 0x195,
0x195, 0x199, 0x19B, 0x19E, 0x19E, 0x1A1, 0x1A1, 0x1A3, 0x1A3, 0x1A5, 0x1A5, 0x1A8,
0x1A8, 0x1AA, 0x1AB, 0x1AD, 0x1AD, 0x1B0, 0x1B0, 0x1B4, 0x1B4, 0x1B6, 0x1B6, 0x1B9,
0x1BB, 0x1BD, 0x1C3, 0x1CE, 0x1CE, 0x1D0, 0x1D0, 0x1D2, 0x1D2, 0x1D4, 0x1D4, 0x1D6,
0x1D6, 0x1D8, 0x1D8, 0x1DA, 0x1DA, 0x1DC, 0x1DD, 0x1DF, 0x1DF, 0x1E1, 0x1E1, 0x1E3,
0x1E3, 0x1E5, 0x1E5, 0x1E7, 0x1E7, 0x1E9, 0x1E9, 0x1EB, 0x1EB, 0x1ED, 0x1ED, 0x1EF,
0x1F0, 0x1F5, 0x1F5, 0x1F9, 0x1F9, 0x1FB, 0x1FB, 0x1FD, 0x1FD, 0x1FF, 0x1FF, 0x201,
0x201, 0x203, 0x203, 0x205, 0x205, 0x207, 0x207, 0x209, 0x209, 0x20B, 0x20B, 0x20D,
0x20D, 0x20F, 0x20F, 0x211, 0x211, 0x213, 0x213, 0x215, 0x215, 0x217, 0x217, 0x219,
0x219, 0x21B, 0x21B, 0x21D, 0x21D, 0x21F, 0x21F, 0x221, 0x221, 0x223, 0x223, 0x225,
0x225, 0x227, 0x227, 0x229, 0x229, 0x22B, 0x22B, 0x22D, 0x22D, 0x22F, 0x22F, 0x231,
0x231, 0x233, 0x239, 0x23C, 0x23C, 0x23F, 0x240, 0x242, 0x242, 0x247, 0x247, 0x249,
0x249, 0x24B, 0x24B, 0x24D, 0x24D, 0x24F, 0x2AF, 0x2B9, 0x2C1, 0x2C6, 0x2D1, 0x2EC,
0x2EC, 0x2EE, 0x2EE, 0x300, 0x33F, 0x342, 0x342, 0x346, 0x34E, 0x350, 0x36F, 0x371,
0x371, 0x373, 0x373, 0x375, 0x375, 0x377, 0x377, 0x37B, 0x37D, 0x390, 0x390, 0x3AC,
0x3CE, 0x3D7, 0x3D7, 0x3D9, 0x3D9, 0x3DB, 0x3DB, 0x3DD, 0x3DD, 0x3DF, 0x3DF, 0x3E1,
0x3E1, 0x3E3, 0x3E3, 0x3E5, 0x3E5, 0x3E7, 0x3E7, 0x3E9, 0x3E9, 0x3EB, 0x3EB, 0x3ED,
0x3ED, 0x3EF, 0x3EF, 0x3F3, 0x3F3, 0x3F8, 0x3F8, 0x3FB, 0x3FC, 0x430, 0x45F, 0x461,
0x461, 0x463, 0x463, 0x465, 0x465, 0x467, 0x467, 0x469, 0x469, 0x46B, 0x46B, 0x46D,
0x46D, 0x46F, 0x46F, 0x471, 0x471, 0x473, 0x473, 0x475, 0x475, 0x477, 0x477, 0x479,
0x479, 0x47B, 0x47B, 0x47D, 0x47D, 0x47F, 0x47F, 0x481, 0x481, 0x483, 0x487, 0x48B,
0x48B, 0x48D, 0x48D, 0x48F, 0x48F, 0x491, 0x491, 0x493, 0x493, 0x495, 0x495, 0x497,
0x497, 0x499, 0x499, 0x49B, 0x49B, 0x49D, 0x49D, 0x49F, 0x49F, 0x4A1, 0x4A1, 0x4A3,
0x4A3, 0x4A5, 0x4A5, 0x4A7, 0x4A7, 0x4A9, 0x4A9, 0x4AB, 0x4AB, 0x4AD, 0x4AD, 0x4AF,
0x4AF, 0x4B1, 0x4B1, 0x4B3, 0x4B3, 0x4B5, 0x4B5, 0x4B7, 0x4B7, 0x4B9, 0x4B9, 0x4BB,
0x4BB, 0x4BD, 0x4BD, 0x4BF, 0x4BF, 0x4C2, 0x4C2, 0x4C4, 0x4C4, 0x4C6, 0x4C6, 0x4C8,
0x4C8, 0x4CA, 0x4CA, 0x4CC, 0x4CC, 0x4CE, 0x4CF, 0x4D1, 0x4D1, 0x4D3, 0x4D3, 0x4D5,
0x4D5, 0x4D7, 0x4D7, 0x4D9, 0x4D9, 0x4DB, 0x4DB, 0x4DD, 0x4DD, 0x4DF, 0x4DF, 0x4E1,
0x4E1, 0x4E3, 0x4E3, 0x4E5, 0x4E5, 0x4E7, 0x4E7, 0x4E9, 0x4E9, 0x4EB, 0x4EB, 0x4ED,
0x4ED, 0x4EF, 0x4EF, 0x4F1, 0x4F1, 0x4F3, 0x4F3, 0x4F5, 0x4F5, 0x4F7, 0x4F7, 0x4F9,
0x4F9, 0x4FB, 0x4FB, 0x4FD, 0x4FD, 0x4FF, 0x4FF, 0x501, 0x501, 0x503, 0x503, 0x505,
0x505, 0x507, 0x507, 0x509, 0x509, 0x50B, 0x50B, 0x50D, 0x50D, 0x50F, 0x50F, 0x511,
0x511, 0x513, 0x513, 0x515, 0x515, 0x517, 0x517, 0x519, 0x519, 0x51B, 0x51B, 0x51D,
0x51D, 0x51F, 0x51F, 0x521, 0x521, 0x523, 0x523, 0x525, 0x525, 0x527, 0x527, 0x529,
0x529, 0x52B, 0x52B, 0x52D, 0x52D, 0x52F, 0x52F, 0x559, 0x559, 0x560, 0x586, 0x588,
0x588, 0x591, 0x5BD, 0x5BF, 0x5BF, 0x5C1, 0x5C2, 0x5C4, 0x5C5, 0x5C7, 0x5C7, 0x5D0,
0x5EA, 0x5EF, 0x5F4, 0x610, 0x61A, 0x620, 0x63F, 0x641, 0x669, 0x66E, 0x674, 0x679,
0x6D3, 0x6D5, 0x6DC, 0x6DF, 0x6E8, 0x6EA, 0x6FF, 0x710, 0x74A, 0x74D, 0x7B1, 0x7C0,
0x7F5, 0x7FD, 0x7FD, 0x800, 0x82D, 0x840, 0x85B, 0x860, 0x86A, 0x870, 0x887, 0x889,
0x88E, 0x898, 0x8E1, 0x8E3, 0x957, 0x960, 0x963, 0x966, 0x96F, 0x971, 0x983, 0x985,
0x98C, 0x98F, 0x990, 0x993, 0x9A8, 0x9AA, 0x9B0, 0x9B2, 0x9B2, 0x9B6, 0x9B9, 0x9BC,
0x9C4, 0x9C7, 0x9C8, 0x9CB, 0x9CE, 0x9D7, 0x9D7, 0x9E0, 0x9E3, 0x9E6, 0x9F1, 0x9FC,
0x9FC, 0x9FE, 0x9FE, 0xA01, 0xA03, 0xA05, 0xA0A, 0xA0F, 0xA10, 0xA13, 0xA28, 0xA2A,
0xA30, 0xA32, 0xA32, 0xA35, 0xA35, 0xA38, 0xA39, 0xA3C, 0xA3C, 0xA3E, 0xA42, 0xA47,
0xA48, 0xA4B, 0xA4D, 0xA51, 0xA51, 0xA5C, 0xA5C, 0xA66, 0xA75, 0xA81, 0xA83, 0xA85,
0xA8D, 0xA8F, 0xA91, 0xA93, 0xAA8, 0xAAA, 0xAB0, 0xAB2, 0xAB3, 0xAB5, 0xAB9, 0xABC,
0xAC5, 0xAC7, 0xAC9, 0xACB, 0xACD, 0xAD0, 0xAD0, 0xAE0, 0xAE3, 0xAE6, 0xAEF, 0xAF9,
0xAFF, 0xB01, 0xB03, 0xB05, 0xB0C, 0xB0F, 0xB10, 0xB13, 0xB28, 0xB2A, 0xB30, 0xB32,
0xB33, 0xB35, 0xB39, 0xB3C, 0xB44, 0xB47, 0xB48, 0xB4B, 0xB4D, 0xB55, 0xB57, 0xB5F,
0xB63, 0xB66, 0xB6F, 0xB71, 0xB71, 0xB82, 0xB83, 0xB85, 0xB8A, 0xB8E, 0xB90, 0xB92,
0xB95, 0xB99, 0xB9A, 0xB9C, 0xB9C, 0xB9E, 0xB9F, 0xBA3, 0xBA4, 0xBA8, 0xBAA, 0xBAE,
0xBB9, 0xBBE, 0xBC2, 0xBC6, 0xBC8, 0xBCA, 0xBCD, 0xBD0, 0xBD0, 0xBD7, 0xBD7, 0xBE6,
0xBEF, 0xC00, 0xC0C, 0xC0E, 0xC10, 0xC12, 0xC28, 0xC2A, 0xC39, 0xC3C, 0xC44, 0xC46,
0xC48, 0xC4A, 0xC4D, 0xC55, 0xC56, 0xC58, 0xC5A, 0xC5D, 0xC5D, 0xC60, 0xC63, 0xC66,
0xC6F, 0xC80, 0xC83, 0xC85, 0xC8C, 0xC8E, 0xC90, 0xC92, 0xCA8, 0xCAA, 0xCB3, 0xCB5,
0xCB9, 0xCBC, 0xCC4, 0xCC6, 0xCC8, 0xCCA, 0xCCD, 0xCD5, 0xCD6, 0xCDD, 0xCDE, 0xCE0,
0xCE3, 0xCE6, 0xCEF, 0xCF1, 0xCF3, 0xD00, 0xD0C, 0xD0E, 0xD10, 0xD12, 0xD44, 0xD46,
0xD48, 0xD4A, 0xD4E, 0xD54, 0xD57, 0xD5F, 0xD63, 0xD66, 0xD6F, 0xD7A, 0xD7F, 0xD81,
0xD83, 0xD85, 0xD96, 0xD9A, 0xDB1, 0xDB3, 0xDBB, 0xDBD, 0xDBD, 0xDC0, 0xDC6, 0xDCA,
0xDCA, 0xDCF, 0xDD4, 0xDD6, 0xDD6, 0xDD8, 0xDDF, 0xDE6, 0xDEF, 0xDF2, 0xDF3, 0xE01,
0xE32, 0xE34, 0xE3A, 0xE40, 0xE4E, 0xE50, 0xE59, 0xE81, 0xE82, 0xE84, 0xE84, 0xE86,
0xE8A, 0xE8C, 0xEA3, 0xEA5, 0xEA5, 0xEA7, 0xEB2, 0xEB4, 0xEBD, 0xEC0, 0xEC4, 0xEC6,
0xEC6, 0xEC8, 0xECE, 0xED0, 0xED9, 0xEDE, 0xEDF, 0xF00, 0xF00, 0xF0B, 0xF0B, 0xF18,
0xF19, 0xF20, 0xF29, 0xF35, 0xF35, 0xF37, 0xF37, 0xF39, 0xF39, 0xF3E, 0xF42, 0xF44,
0xF47, 0xF49, 0xF4C, 0xF4E, 0xF51, 0xF53, 0xF56, 0xF58, 0xF5B, 0xF5D, 0xF68, 0xF6A,
0xF6C, 0xF71, 0xF72, 0xF74, 0xF74, 0xF7A, 0xF80, 0xF82, 0xF84, 0xF86, 0xF92, 0xF94,
0xF97, 0xF99, 0xF9C, 0xF9E, 0xFA1, 0xFA3, 0xFA6, 0xFA8, 0xFAB, 0xFAD, 0xFB8, 0xFBA,
0xFBC, 0xFC6, 0xFC6, 0x1000, 0x1049, 0x1050, 0x109D, 0x10D0, 0x10FA, 0x10FD, 0x10FF,
0x1200, 0x1248, 0x124A, 0x124D, 0x1250, 0x1256, 0x1258, 0x1258, 0x125A, 0x125D,
0x1260, 0x1288, 0x128A, 0x128D, 0x1290, 0x12B0, 0x12B2, 0x12B5, 0x12B8, 0x12BE,
0x12C0, 0x12C0, 0x12C2, 0x12C5, 0x12C8, 0x12D6, 0x12D8, 0x1310, 0x1312, 0x1315,
0x1318, 0x135A, 0x135D, 0x135F, 0x1380, 0x138F, 0x13A0, 0x13F5, 0x1401, 0x166C,
0x166F, 0x167F, 0x1681, 0x169A, 0x16A0, 0x16EA, 0x16F1, 0x16F8, 0x1700, 0x1715,
0x171F, 0x1734, 0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
0x1780, 0x17B3, 0x17B6, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9,
0x1810, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA, 0x18B0, 0x18F5, 0x1900, 0x191E,
0x1920, 0x192B, 0x1930, 0x193B, 0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB,
0x19B0, 0x19C9, 0x19D0, 0x19D9, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C,
0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD, 0x1ABF, 0x1ACE,
0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73, 0x1B80, 0x1BF3, 0x1C00, 0x1C37,
0x1C40, 0x1C49, 0x1C4D, 0x1C7D, 0x1CD0, 0x1CD2, 0x1CD4, 0x1CFA, 0x1D00, 0x1D2B,
0x1D2F, 0x1D2F, 0x1D3B, 0x1D3B, 0x1D4E, 0x1D4E, 0x1D6B, 0x1D77, 0x1D79, 0x1D9A,
0x1DC0, 0x1DFF, 0x1E01, 0x1E01, 0x1E03, 0x1E03, 0x1E05, 0x1E05, 0x1E07, 0x1E07,
0x1E09, 0x1E09, 0x1E0B, 0x1E0B, 0x1E0D, 0x1E0D, 0x1E0F, 0x1E0F, 0x1E11, 0x1E11,
0x1E13, 0x1E13, 0x1E15, 0x1E15, 0x1E17, 0x1E17, 0x1E19, 0x1E19, 0x1E1B, 0x1E1B,
0x1E1D, 0x1E1D, 0x1E1F, 0x1E1F, 0x1E21, 0x1E21, 0x1E23, 0x1E23, 0x1E25, 0x1E25,
0x1E27, 0x1E27, 0x1E29, 0x1E29, 0x1E2B, 0x1E2B, 0x1E2D, 0x1E2D, 0x1E2F, 0x1E2F,
0x1E31, 0x1E31, 0x1E33, 0x1E33, 0x1E35, 0x1E35, 0x1E37, 0x1E37, 0x1E39, 0x1E39,
0x1E3B, 0x1E3B, 0x1E3D, 0x1E3D, 0x1E3F, 0x1E3F, 0x1E41, 0x1E41, 0x1E43, 0x1E43,
0x1E45, 0x1E45, 0x1E47, 0x1E47, 0x1E49, 0x1E49, 0x1E4B, 0x1E4B, 0x1E4D, 0x1E4D,
0x1E4F, 0x1E4F, 0x1E51, 0x1E51, 0x1E53, 0x1E53, 0x1E55, 0x1E55, 0x1E57, 0x1E57,
0x1E59, 0x1E59, 0x1E5B, 0x1E5B, 0x1E5D, 0x1E5D, 0x1E5F, 0x1E5F, 0x1E61, 0x1E61,
0x1E63, 0x1E63, 0x1E65, 0x1E65, 0x1E67, 0x1E67, 0x1E69, 0x1E69, 0x1E6B, 0x1E6B,
0x1E6D, 0x1E6D, 0x1E6F, 0x1E6F, 0x1E71, 0x1E71, 0x1E73, 0x1E73, 0x1E75, 0x1E75,
0x1E77, 0x1E77, 0x1E79, 0x1E79, 0x1E7B, 0x1E7B, 0x1E7D, 0x1E7D, 0x1E7F, 0x1E7F,
0x1E81, 0x1E81, 0x1E83, 0x1E83, 0x1E85, 0x1E85, 0x1E87, 0x1E87, 0x1E89, 0x1E89,
0x1E8B, 0x1E8B, 0x1E8D, 0x1E8D, 0x1E8F, 0x1E8F, 0x1E91, 0x1E91, 0x1E93, 0x1E93,
0x1E95, 0x1E99, 0x1E9C, 0x1E9D, 0x1E9F, 0x1E9F, 0x1EA1, 0x1EA1, 0x1EA3, 0x1EA3,
0x1EA5, 0x1EA5, 0x1EA7, 0x1EA7, 0x1EA9, 0x1EA9, 0x1EAB, 0x1EAB, 0x1EAD, 0x1EAD,
0x1EAF, 0x1EAF, 0x1EB1, 0x1EB1, 0x1EB3, 0x1EB3, 0x1EB5, 0x1EB5, 0x1EB7, 0x1EB7,
0x1EB9, 0x1EB9, 0x1EBB, 0x1EBB, 0x1EBD, 0x1EBD, 0x1EBF, 0x1EBF, 0x1EC1, 0x1EC1,
0x1EC3, 0x1EC3, 0x1EC5, 0x1EC5, 0x1EC7, 0x1EC7, 0x1EC9, 0x1EC9, 0x1ECB, 0x1ECB,
0x1ECD, 0x1ECD, 0x1ECF, 0x1ECF, 0x1ED1, 0x1ED1, 0x1ED3, 0x1ED3, 0x1ED5, 0x1ED5,
0x1ED7, 0x1ED7, 0x1ED9, 0x1ED9, 0x1EDB, 0x1EDB, 0x1EDD, 0x1EDD, 0x1EDF, 0x1EDF,
0x1EE1, 0x1EE1, 0x1EE3, 0x1EE3, 0x1EE5, 0x1EE5, 0x1EE7, 0x1EE7, 0x1EE9, 0x1EE9,
0x1EEB, 0x1EEB, 0x1EED, 0x1EED, 0x1EEF, 0x1EEF, 0x1EF1, 0x1EF1, 0x1EF3, 0x1EF3,
0x1EF5, 0x1EF5, 0x1EF7, 0x1EF7, 0x1EF9, 0x1EF9, 0x1EFB, 0x1EFB, 0x1EFD, 0x1EFD,
0x1EFF, 0x1F07, 0x1F10, 0x1F15, 0x1F20, 0x1F27, 0x1F30, 0x1F37, 0x1F40, 0x1F45,
0x1F50, 0x1F57, 0x1F60, 0x1F67, 0x1F70, 0x1F70, 0x1F72, 0x1F72, 0x1F74, 0x1F74,
0x1F76, 0x1F76, 0x1F78, 0x1F78, 0x1F7A, 0x1F7A, 0x1F7C, 0x1F7C, 0x1FB0, 0x1FB1,
0x1FB6, 0x1FB6, 0x1FC6, 0x1FC6, 0x1FD0, 0x1FD2, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE2,
0x1FE4, 0x1FE7, 0x1FF6, 0x1FF6, 0x200C, 0x200D, 0x214E, 0x214E, 0x2184, 0x2184,
0x2C30, 0x2C5F, 0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A,
0x2C6C, 0x2C6C, 0x2C71, 0x2C71, 0x2C73, 0x2C74, 0x2C76, 0x2C7B, 0x2C81, 0x2C81,
0x2C83, 0x2C83, 0x2C85, 0x2C85, 0x2C87, 0x2C87, 0x2C89, 0x2C89, 0x2C8B, 0x2C8B,
0x2C8D, 0x2C8D, 0x2C8F, 0x2C8F, 0x2C91, 0x2C91, 0x2C93, 0x2C93, 0x2C95, 0x2C95,
0x2C97, 0x2C97, 0x2C99, 0x2C99, 0x2C9B, 0x2C9B, 0x2C9D, 0x2C9D, 0x2C9F, 0x2C9F,
0x2CA1, 0x2CA1, 0x2CA3, 0x2CA3, 0x2CA5, 0x2CA5, 0x2CA7, 0x2CA7, 0x2CA9, 0x2CA9,
0x2CAB, 0x2CAB, 0x2CAD, 0x2CAD, 0x2CAF, 0x2CAF, 0x2CB1, 0x2CB1, 0x2CB3, 0x2CB3,
0x2CB5, 0x2CB5, 0x2CB7, 0x2CB7, 0x2CB9, 0x2CB9, 0x2CBB, 0x2CBB, 0x2CBD, 0x2CBD,
0x2CBF, 0x2CBF, 0x2CC1, 0x2CC1, 0x2CC3, 0x2CC3, 0x2CC5, 0x2CC5, 0x2CC7, 0x2CC7,
0x2CC9, 0x2CC9, 0x2CCB, 0x2CCB, 0x2CCD, 0x2CCD, 0x2CCF, 0x2CCF, 0x2CD1, 0x2CD1,
0x2CD3, 0x2CD3, 0x2CD5, 0x2CD5, 0x2CD7, 0x2CD7, 0x2CD9, 0x2CD9, 0x2CDB, 0x2CDB,
0x2CDD, 0x2CDD, 0x2CDF, 0x2CDF, 0x2CE1, 0x2CE1, 0x2CE3, 0x2CE4, 0x2CEC, 0x2CEC,
0x2CEE, 0x2CF1, 0x2CF3, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D,
0x2D30, 0x2D67, 0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6,
0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE,
0x2DE0, 0x2DFF, 0x2E2F, 0x2E2F, 0x3005, 0x3007, 0x302A, 0x302D, 0x303C, 0x303C,
0x3041, 0x3096, 0x3099, 0x309A, 0x309D, 0x309E, 0x30A1, 0x30FE, 0x3105, 0x312F,
0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD,
0xA500, 0xA60C, 0xA610, 0xA62B, 0xA641, 0xA641, 0xA643, 0xA643, 0xA645, 0xA645,
0xA647, 0xA647, 0xA649, 0xA649, 0xA64B, 0xA64B, 0xA64D, 0xA64D, 0xA64F, 0xA64F,
0xA651, 0xA651, 0xA653, 0xA653, 0xA655, 0xA655, 0xA657, 0xA657, 0xA659, 0xA659,
0xA65B, 0xA65B, 0xA65D, 0xA65D, 0xA65F, 0xA65F, 0xA661, 0xA661, 0xA663, 0xA663,
0xA665, 0xA665, 0xA667, 0xA667, 0xA669, 0xA669, 0xA66B, 0xA66B, 0xA66D, 0xA66F,
0xA674, 0xA67D, 0xA67F, 0xA67F, 0xA681, 0xA681, 0xA683, 0xA683, 0xA685, 0xA685,
0xA687, 0xA687, 0xA689, 0xA689, 0xA68B, 0xA68B, 0xA68D, 0xA68D, 0xA68F, 0xA68F,
0xA691, 0xA691, 0xA693, 0xA693, 0xA695, 0xA695, 0xA697, 0xA697, 0xA699, 0xA699,
0xA69B, 0xA69B, 0xA69E, 0xA6E5, 0xA6F0, 0xA6F1, 0xA717, 0xA71F, 0xA723, 0xA723,
0xA725, 0xA725, 0xA727, 0xA727, 0xA729, 0xA729, 0xA72B, 0xA72B, 0xA72D, 0xA72D,
0xA72F, 0xA731, 0xA733, 0xA733, 0xA735, 0xA735, 0xA737, 0xA737, 0xA739, 0xA739,
0xA73B, 0xA73B, 0xA73D, 0xA73D, 0xA73F, 0xA73F, 0xA741, 0xA741, 0xA743, 0xA743,
0xA745, 0xA745, 0xA747, 0xA747, 0xA749, 0xA749, 0xA74B, 0xA74B, 0xA74D, 0xA74D,
0xA74F, 0xA74F, 0xA751, 0xA751, 0xA753, 0xA753, 0xA755, 0xA755, 0xA757, 0xA757,
0xA759, 0xA759, 0xA75B, 0xA75B, 0xA75D, 0xA75D, 0xA75F, 0xA75F, 0xA761, 0xA761,
0xA763, 0xA763, 0xA765, 0xA765, 0xA767, 0xA767, 0xA769, 0xA769, 0xA76B, 0xA76B,
0xA76D, 0xA76D, 0xA76F, 0xA76F, 0xA771, 0xA778, 0xA77A, 0xA77A, 0xA77C, 0xA77C,
0xA77F, 0xA77F, 0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785, 0xA787, 0xA788,
0xA78C, 0xA78C, 0xA78E, 0xA78F, 0xA791, 0xA791, 0xA793, 0xA795, 0xA797, 0xA797,
0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F, 0xA7A1, 0xA7A1,
0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7, 0xA7A9, 0xA7A9, 0xA7AF, 0xA7AF,
0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, 0xA7B9, 0xA7B9, 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD,
0xA7BF, 0xA7BF, 0xA7C1, 0xA7C1, 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA,
0xA7D1, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D5, 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9,
0xA7F6, 0xA7F7, 0xA7FA, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873, 0xA880, 0xA8C5,
0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA92D, 0xA930, 0xA953,
0xA980, 0xA9C0, 0xA9CF, 0xA9D9, 0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D,
0xAA50, 0xAA59, 0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF,
0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16, 0xAB20, 0xAB26,
0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB60, 0xAB68, 0xABC0, 0xABEA, 0xABEC, 0xABED,
0xABF0, 0xABF9, 0xAC00, 0xD7A3, 0xFA0E, 0xFA0F, 0xFA11, 0xFA11, 0xFA13, 0xFA14,
0xFA1F, 0xFA1F, 0xFA21, 0xFA21, 0xFA23, 0xFA24, 0xFA27, 0xFA29, 0xFB1E, 0xFB1E,
0xFE20, 0xFE2F, 0xFE73, 0xFE73, 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A,
0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x101FD,
0x101FD, 0x10280, 0x1029C, 0x102A0, 0x102D0, 0x102E0, 0x102E0, 0x10300, 0x1031F,
0x1032D, 0x10340, 0x10342, 0x10349, 0x10350, 0x1037A, 0x10380, 0x1039D, 0x103A0,
0x103C3, 0x103C8, 0x103CF, 0x10428, 0x1049D, 0x104A0, 0x104A9, 0x104D8, 0x104FB,
0x10500, 0x10527, 0x10530, 0x10563, 0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3,
0x105B9, 0x105BB, 0x105BC, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
0x10780, 0x10780, 0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837,
0x10838, 0x1083C, 0x1083C, 0x1083F, 0x10855, 0x10860, 0x10876, 0x10880, 0x1089E,
0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x10900, 0x10915, 0x10920, 0x10939, 0x10980,
0x109B7, 0x109BE, 0x109BF, 0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13,
0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10A60,
0x10A7C, 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6, 0x10B00, 0x10B35,
0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48, 0x10CC0,
0x10CF2, 0x10D00, 0x10D27, 0x10D30, 0x10D39, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC,
0x10EB0, 0x10EB1, 0x10EFD, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70,
0x10F85, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075,
0x1107F, 0x110BA, 0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9, 0x11100,
0x11134, 0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176,
0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA, 0x111DC, 0x111DC, 0x11200,
0x11211, 0x11213, 0x11237, 0x1123E, 0x11241, 0x11280, 0x11286, 0x11288, 0x11288,
0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8, 0x112B0, 0x112EA, 0x112F0,
0x112F9, 0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344, 0x11347,
0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363,
0x11366, 0x1136C, 0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459, 0x1145E,
0x11461, 0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9, 0x11580, 0x115B5,
0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640, 0x11644, 0x11644, 0x11650,
0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9, 0x11700, 0x1171A, 0x1171D, 0x1172B,
0x11730, 0x11739, 0x11740, 0x11746, 0x11800, 0x1183A, 0x118C0, 0x118E9, 0x118FF,
0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x11935,
0x11937, 0x11938, 0x1193B, 0x11943, 0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA,
0x119D7, 0x119DA, 0x119E1, 0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47,
0x11A50, 0x11A99, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A,
0x11C36, 0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F, 0x11C92, 0x11CA7,
0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36, 0x11D3A,
0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59, 0x11D60, 0x11D65,
0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0,
0x11DA9, 0x11EE0, 0x11EF6, 0x11F00, 0x11F10, 0x11F12, 0x11F3A, 0x11F3E, 0x11F42,
0x11F50, 0x11F59, 0x11FB0, 0x11FB0, 0x12000, 0x12399, 0x12480, 0x12543, 0x12F90,
0x12FF0, 0x13000, 0x1342F, 0x13440, 0x13455, 0x14400, 0x14646, 0x16800, 0x16A38,
0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A70, 0x16ABE, 0x16AC0, 0x16AC9, 0x16AD0,
0x16AED, 0x16AF0, 0x16AF4, 0x16B00, 0x16B36, 0x16B40, 0x16B43, 0x16B50, 0x16B59,
0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E60, 0x16E7F, 0x16F00, 0x16F4A, 0x16F4F,
0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE4, 0x16FF0, 0x16FF1,
0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1AFF0, 0x1AFF3, 0x1AFF5,
0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B122, 0x1B132, 0x1B132, 0x1B150, 0x1B152,
0x1B155, 0x1B155, 0x1B164, 0x1B167, 0x1B170, 0x1B2FB, 0x1BC00, 0x1BC6A, 0x1BC70,
0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99, 0x1BC9D, 0x1BC9E, 0x1CF00, 0x1CF2D,
0x1CF30, 0x1CF46, 0x1DA00, 0x1DA36, 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84,
0x1DA84, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF, 0x1DF00, 0x1DF1E, 0x1DF25, 0x1DF2A,
0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026,
0x1E02A, 0x1E08F, 0x1E08F, 0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149,
0x1E14E, 0x1E14E, 0x1E290, 0x1E2AE, 0x1E2C0, 0x1E2F9, 0x1E4D0, 0x1E4F9, 0x1E7E0,
0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4,
0x1E8D0, 0x1E8D6, 0x1E922, 0x1E94B, 0x1E950, 0x1E959, 0x20000, 0x2A6DF, 0x2A700,
0x2B739, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2EBF0, 0x2EE5D,
0x30000, 0x3134A, 0x31350, 0x323AF,
]
///|
/// The join controls, which may only sit where RFC 5892 Appendix A says they may.
let idna_contextj : Array[Int32] = [0x200C, 0x200D]
///|
/// Combining marks, which a label may not begin with.
let idna_marks : Array[Int32] = [
0x300, 0x36F, 0x483, 0x489, 0x591, 0x5BD, 0x5BF, 0x5BF, 0x5C1, 0x5C2, 0x5C4, 0x5C5,
0x5C7, 0x5C7, 0x610, 0x61A, 0x64B, 0x65F, 0x670, 0x670, 0x6D6, 0x6DC, 0x6DF, 0x6E4,
0x6E7, 0x6E8, 0x6EA, 0x6ED, 0x711, 0x711, 0x730, 0x74A, 0x7A6, 0x7B0, 0x7EB, 0x7F3,
0x7FD, 0x7FD, 0x816, 0x819, 0x81B, 0x823, 0x825, 0x827, 0x829, 0x82D, 0x859, 0x85B,
0x898, 0x89F, 0x8CA, 0x8E1, 0x8E3, 0x903, 0x93A, 0x93C, 0x93E, 0x94F, 0x951, 0x957,
0x962, 0x963, 0x981, 0x983, 0x9BC, 0x9BC, 0x9BE, 0x9C4, 0x9C7, 0x9C8, 0x9CB, 0x9CD,
0x9D7, 0x9D7, 0x9E2, 0x9E3, 0x9FE, 0x9FE, 0xA01, 0xA03, 0xA3C, 0xA3C, 0xA3E, 0xA42,
0xA47, 0xA48, 0xA4B, 0xA4D, 0xA51, 0xA51, 0xA70, 0xA71, 0xA75, 0xA75, 0xA81, 0xA83,
0xABC, 0xABC, 0xABE, 0xAC5, 0xAC7, 0xAC9, 0xACB, 0xACD, 0xAE2, 0xAE3, 0xAFA, 0xAFF,
0xB01, 0xB03, 0xB3C, 0xB3C, 0xB3E, 0xB44, 0xB47, 0xB48, 0xB4B, 0xB4D, 0xB55, 0xB57,
0xB62, 0xB63, 0xB82, 0xB82, 0xBBE, 0xBC2, 0xBC6, 0xBC8, 0xBCA, 0xBCD, 0xBD7, 0xBD7,
0xC00, 0xC04, 0xC3C, 0xC3C, 0xC3E, 0xC44, 0xC46, 0xC48, 0xC4A, 0xC4D, 0xC55, 0xC56,
0xC62, 0xC63, 0xC81, 0xC83, 0xCBC, 0xCBC, 0xCBE, 0xCC4, 0xCC6, 0xCC8, 0xCCA, 0xCCD,
0xCD5, 0xCD6, 0xCE2, 0xCE3, 0xCF3, 0xCF3, 0xD00, 0xD03, 0xD3B, 0xD3C, 0xD3E, 0xD44,
0xD46, 0xD48, 0xD4A, 0xD4D, 0xD57, 0xD57, 0xD62, 0xD63, 0xD81, 0xD83, 0xDCA, 0xDCA,
0xDCF, 0xDD4, 0xDD6, 0xDD6, 0xDD8, 0xDDF, 0xDF2, 0xDF3, 0xE31, 0xE31, 0xE34, 0xE3A,
0xE47, 0xE4E, 0xEB1, 0xEB1, 0xEB4, 0xEBC, 0xEC8, 0xECE, 0xF18, 0xF19, 0xF35, 0xF35,
0xF37, 0xF37, 0xF39, 0xF39, 0xF3E, 0xF3F, 0xF71, 0xF84, 0xF86, 0xF87, 0xF8D, 0xF97,
0xF99, 0xFBC, 0xFC6, 0xFC6, 0x102B, 0x103E, 0x1056, 0x1059, 0x105E, 0x1060, 0x1062,
0x1064, 0x1067, 0x106D, 0x1071, 0x1074, 0x1082, 0x108D, 0x108F, 0x108F, 0x109A,
0x109D, 0x135D, 0x135F, 0x1712, 0x1715, 0x1732, 0x1734, 0x1752, 0x1753, 0x1772,
0x1773, 0x17B4, 0x17D3, 0x17DD, 0x17DD, 0x180B, 0x180D, 0x180F, 0x180F, 0x1885,
0x1886, 0x18A9, 0x18A9, 0x1920, 0x192B, 0x1930, 0x193B, 0x1A17, 0x1A1B, 0x1A55,
0x1A5E, 0x1A60, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ACE, 0x1B00, 0x1B04, 0x1B34,
0x1B44, 0x1B6B, 0x1B73, 0x1B80, 0x1B82, 0x1BA1, 0x1BAD, 0x1BE6, 0x1BF3, 0x1C24,
0x1C37, 0x1CD0, 0x1CD2, 0x1CD4, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF7,
0x1CF9, 0x1DC0, 0x1DFF, 0x20D0, 0x20F0, 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0,
0x2DFF, 0x302A, 0x302F, 0x3099, 0x309A, 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA69E,
0xA69F, 0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806, 0xA80B, 0xA80B, 0xA823,
0xA827, 0xA82C, 0xA82C, 0xA880, 0xA881, 0xA8B4, 0xA8C5, 0xA8E0, 0xA8F1, 0xA8FF,
0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA953, 0xA980, 0xA983, 0xA9B3, 0xA9C0, 0xA9E5,
0xA9E5, 0xAA29, 0xAA36, 0xAA43, 0xAA43, 0xAA4C, 0xAA4D, 0xAA7B, 0xAA7D, 0xAAB0,
0xAAB0, 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8, 0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAAEB,
0xAAEF, 0xAAF5, 0xAAF6, 0xABE3, 0xABEA, 0xABEC, 0xABED, 0xFB1E, 0xFB1E, 0xFE00,
0xFE0F, 0xFE20, 0xFE2F, 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01,
0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F,
0x10AE5, 0x10AE6, 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10EFD, 0x10EFF, 0x10F46,
0x10F50, 0x10F82, 0x10F85, 0x11000, 0x11002, 0x11038, 0x11046, 0x11070, 0x11070,
0x11073, 0x11074, 0x1107F, 0x11082, 0x110B0, 0x110BA, 0x110C2, 0x110C2, 0x11100,
0x11102, 0x11127, 0x11134, 0x11145, 0x11146, 0x11173, 0x11173, 0x11180, 0x11182,
0x111B3, 0x111C0, 0x111C9, 0x111CC, 0x111CE, 0x111CF, 0x1122C, 0x11237, 0x1123E,
0x1123E, 0x11241, 0x11241, 0x112DF, 0x112EA, 0x11300, 0x11303, 0x1133B, 0x1133C,
0x1133E, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11357, 0x11357, 0x11362,
0x11363, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11435, 0x11446, 0x1145E, 0x1145E,
0x114B0, 0x114C3, 0x115AF, 0x115B5, 0x115B8, 0x115C0, 0x115DC, 0x115DD, 0x11630,
0x11640, 0x116AB, 0x116B7, 0x1171D, 0x1172B, 0x1182C, 0x1183A, 0x11930, 0x11935,
0x11937, 0x11938, 0x1193B, 0x1193E, 0x11940, 0x11940, 0x11942, 0x11943, 0x119D1,
0x119D7, 0x119DA, 0x119E0, 0x119E4, 0x119E4, 0x11A01, 0x11A0A, 0x11A33, 0x11A39,
0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A5B, 0x11A8A, 0x11A99, 0x11C2F,
0x11C36, 0x11C38, 0x11C3F, 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, 0x11D31, 0x11D36,
0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D8A,
0x11D8E, 0x11D90, 0x11D91, 0x11D93, 0x11D97, 0x11EF3, 0x11EF6, 0x11F00, 0x11F01,
0x11F03, 0x11F03, 0x11F34, 0x11F3A, 0x11F3E, 0x11F42, 0x13440, 0x13440, 0x13447,
0x13455, 0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F4F, 0x16F4F, 0x16F51, 0x16F87,
0x16F8F, 0x16F92, 0x16FE4, 0x16FE4, 0x16FF0, 0x16FF1, 0x1BC9D, 0x1BC9E, 0x1CF00,
0x1CF2D, 0x1CF30, 0x1CF46, 0x1D165, 0x1D169, 0x1D16D, 0x1D172, 0x1D17B, 0x1D182,
0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244, 0x1DA00, 0x1DA36, 0x1DA3B,
0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF,
0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026,
0x1E02A, 0x1E08F, 0x1E08F, 0x1E130, 0x1E136, 0x1E2AE, 0x1E2AE, 0x1E2EC, 0x1E2EF,
0x1E4EC, 0x1E4EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94A, 0xE0100, 0xE01EF,
]
///|
/// Canonical combining class 9, which a join control may follow.
let idna_virama : Array[Int32] = [
0x94D, 0x94D, 0x9CD, 0x9CD, 0xA4D, 0xA4D, 0xACD, 0xACD, 0xB4D, 0xB4D, 0xBCD, 0xBCD,
0xC4D, 0xC4D, 0xCCD, 0xCCD, 0xD3B, 0xD3C, 0xD4D, 0xD4D, 0xDCA, 0xDCA, 0xE3A, 0xE3A,
0xEBA, 0xEBA, 0xF84, 0xF84, 0x1039, 0x103A, 0x1714, 0x1715, 0x1734, 0x1734, 0x17D2,
0x17D2, 0x1A60, 0x1A60, 0x1B44, 0x1B44, 0x1BAA, 0x1BAB, 0x1BF2, 0x1BF3, 0x2D7F,
0x2D7F, 0xA806, 0xA806, 0xA82C, 0xA82C, 0xA8C4, 0xA8C4, 0xA953, 0xA953, 0xA9C0,
0xA9C0, 0xAAF6, 0xAAF6, 0xABED, 0xABED, 0x10A3F, 0x10A3F, 0x11046, 0x11046, 0x11070,
0x11070, 0x1107F, 0x1107F, 0x110B9, 0x110B9, 0x11133, 0x11134, 0x111C0, 0x111C0,
0x11235, 0x11235, 0x112EA, 0x112EA, 0x1134D, 0x1134D, 0x11442, 0x11442, 0x114C2,
0x114C2, 0x115BF, 0x115BF, 0x1163F, 0x1163F, 0x116B6, 0x116B6, 0x1172B, 0x1172B,
0x11839, 0x11839, 0x1193D, 0x1193E, 0x119E0, 0x119E0, 0x11A34, 0x11A34, 0x11A47,
0x11A47, 0x11A99, 0x11A99, 0x11C3F, 0x11C3F, 0x11D44, 0x11D45, 0x11D97, 0x11D97,
0x11F41, 0x11F42,
]
///|
/// Joining types L and D: what may stand before a zero width non-joiner.
let idna_join_left : Array[Int32] = [
0x620, 0x620, 0x626, 0x626, 0x628, 0x628, 0x62A, 0x62E, 0x633, 0x63F, 0x641, 0x647,
0x649, 0x64A, 0x66E, 0x66F, 0x678, 0x687, 0x69A, 0x6BF, 0x6C1, 0x6C2, 0x6CC, 0x6CC,
0x6CE, 0x6CE, 0x6D0, 0x6D1, 0x6FA, 0x6FC, 0x6FF, 0x6FF, 0x712, 0x714, 0x71A, 0x71D,
0x71F, 0x727, 0x729, 0x729, 0x72B, 0x72B, 0x72D, 0x72E, 0x74E, 0x758, 0x75C, 0x76A,
0x76D, 0x770, 0x772, 0x772, 0x775, 0x777, 0x77A, 0x77F, 0x7CA, 0x7EA, 0x841, 0x845,
0x848, 0x848, 0x84A, 0x853, 0x855, 0x855, 0x860, 0x860, 0x862, 0x865, 0x868, 0x868,
0x886, 0x886, 0x889, 0x88D, 0x8A0, 0x8A9, 0x8AF, 0x8B0, 0x8B3, 0x8B8, 0x8BA, 0x8C8,
0x1807, 0x1807, 0x1820, 0x1878, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0xA840, 0xA872,
0x10AC0, 0x10AC4, 0x10ACD, 0x10ACD, 0x10AD3, 0x10ADC, 0x10ADE, 0x10AE0, 0x10AEB,
0x10AEE, 0x10B80, 0x10B80, 0x10B82, 0x10B82, 0x10B86, 0x10B88, 0x10B8A, 0x10B8B,
0x10B8D, 0x10B8D, 0x10B90, 0x10B90, 0x10BAD, 0x10BAE, 0x10D00, 0x10D21, 0x10D23,
0x10D23, 0x10F30, 0x10F32, 0x10F34, 0x10F44, 0x10F51, 0x10F53, 0x10F70, 0x10F73,
0x10F76, 0x10F81, 0x10FB0, 0x10FB0, 0x10FB2, 0x10FB3, 0x10FB8, 0x10FB8, 0x10FBB,
0x10FBC, 0x10FBE, 0x10FBF, 0x10FC1, 0x10FC1, 0x10FC4, 0x10FC4, 0x10FCA, 0x10FCB,
0x1E900, 0x1E943,
]
///|
/// Joining type T, which a zero width non-joiner may skip over.
let idna_join_transparent : Array[Int32] = [
0xAD, 0xAD, 0x300, 0x36F, 0x483, 0x489, 0x591, 0x5BD, 0x5BF, 0x5BF, 0x5C1, 0x5C2,
0x5C4, 0x5C5, 0x5C7, 0x5C7, 0x610, 0x61A, 0x61C, 0x61C, 0x64B, 0x65F, 0x670, 0x670,
0x6D6, 0x6DC, 0x6DF, 0x6E4, 0x6E7, 0x6E8, 0x6EA, 0x6ED, 0x70F, 0x70F, 0x711, 0x711,
0x730, 0x74A, 0x7A6, 0x7B0, 0x7EB, 0x7F3, 0x7FD, 0x7FD, 0x816, 0x819, 0x81B, 0x823,
0x825, 0x827, 0x829, 0x82D, 0x859, 0x85B, 0x898, 0x89F, 0x8CA, 0x8E1, 0x8E3, 0x902,
0x93A, 0x93A, 0x93C, 0x93C, 0x941, 0x948, 0x94D, 0x94D, 0x951, 0x957, 0x962, 0x963,
0x981, 0x981, 0x9BC, 0x9BC, 0x9C1, 0x9C4, 0x9CD, 0x9CD, 0x9E2, 0x9E3, 0x9FE, 0x9FE,
0xA01, 0xA02, 0xA3C, 0xA3C, 0xA41, 0xA42, 0xA47, 0xA48, 0xA4B, 0xA4D, 0xA51, 0xA51,
0xA70, 0xA71, 0xA75, 0xA75, 0xA81, 0xA82, 0xABC, 0xABC, 0xAC1, 0xAC5, 0xAC7, 0xAC8,
0xACD, 0xACD, 0xAE2, 0xAE3, 0xAFA, 0xAFF, 0xB01, 0xB01, 0xB3C, 0xB3C, 0xB3F, 0xB3F,
0xB41, 0xB44, 0xB4D, 0xB4D, 0xB55, 0xB56, 0xB62, 0xB63, 0xB82, 0xB82, 0xBC0, 0xBC0,
0xBCD, 0xBCD, 0xC00, 0xC00, 0xC04, 0xC04, 0xC3C, 0xC3C, 0xC3E, 0xC40, 0xC46, 0xC48,
0xC4A, 0xC4D, 0xC55, 0xC56, 0xC62, 0xC63, 0xC81, 0xC81, 0xCBC, 0xCBC, 0xCBF, 0xCBF,
0xCC6, 0xCC6, 0xCCC, 0xCCD, 0xCE2, 0xCE3, 0xD00, 0xD01, 0xD3B, 0xD3C, 0xD41, 0xD44,
0xD4D, 0xD4D, 0xD62, 0xD63, 0xD81, 0xD81, 0xDCA, 0xDCA, 0xDD2, 0xDD4, 0xDD6, 0xDD6,
0xE31, 0xE31, 0xE34, 0xE3A, 0xE47, 0xE4E, 0xEB1, 0xEB1, 0xEB4, 0xEBC, 0xEC8, 0xECE,
0xF18, 0xF19, 0xF35, 0xF35, 0xF37, 0xF37, 0xF39, 0xF39, 0xF71, 0xF7E, 0xF80, 0xF84,
0xF86, 0xF87, 0xF8D, 0xF97, 0xF99, 0xFBC, 0xFC6, 0xFC6, 0x102D, 0x1030, 0x1032,
0x1037, 0x1039, 0x103A, 0x103D, 0x103E, 0x1058, 0x1059, 0x105E, 0x1060, 0x1071,
0x1074, 0x1082, 0x1082, 0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D, 0x135D,
0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753, 0x1772, 0x1773, 0x17B4,
0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6, 0x17C9, 0x17D3, 0x17DD, 0x17DD, 0x180B,
0x180D, 0x180F, 0x180F, 0x1885, 0x1886, 0x18A9, 0x18A9, 0x1920, 0x1922, 0x1927,
0x1928, 0x1932, 0x1932, 0x1939, 0x193B, 0x1A17, 0x1A18, 0x1A1B, 0x1A1B, 0x1A56,
0x1A56, 0x1A58, 0x1A5E, 0x1A60, 0x1A60, 0x1A62, 0x1A62, 0x1A65, 0x1A6C, 0x1A73,
0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ACE, 0x1B00, 0x1B03, 0x1B34, 0x1B34, 0x1B36,
0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42, 0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2,
0x1BA5, 0x1BA8, 0x1BA9, 0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED,
0x1BED, 0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2, 0x1CD4,
0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF8, 0x1CF9, 0x1DC0,
0x1DFF, 0x200B, 0x200B, 0x200E, 0x200F, 0x202A, 0x202E, 0x2060, 0x2064, 0x206A,
0x206F, 0x20D0, 0x20F0, 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x302A,
0x302D, 0x3099, 0x309A, 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA69E, 0xA69F, 0xA6F0,
0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806, 0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C,
0xA82C, 0xA8C4, 0xA8C5, 0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947,
0xA951, 0xA980, 0xA982, 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD, 0xA9E5,
0xA9E5, 0xAA29, 0xAA2E, 0xAA31, 0xAA32, 0xAA35, 0xAA36, 0xAA43, 0xAA43, 0xAA4C,
0xAA4C, 0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8, 0xAABE,
0xAABF, 0xAAC1, 0xAAC1, 0xAAEC, 0xAAED, 0xAAF6, 0xAAF6, 0xABE5, 0xABE5, 0xABE8,
0xABE8, 0xABED, 0xABED, 0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0xFEFF,
0xFEFF, 0xFFF9, 0xFFFB, 0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10A01,
0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F,
0x10AE5, 0x10AE6, 0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10EFD, 0x10EFF, 0x10F46,
0x10F50, 0x10F82, 0x10F85, 0x11001, 0x11001, 0x11038, 0x11046, 0x11070, 0x11070,
0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA, 0x110C2,
0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B, 0x1112D, 0x11134, 0x11173, 0x11173,
0x11180, 0x11181, 0x111B6, 0x111BE, 0x111C9, 0x111CC, 0x111CF, 0x111CF, 0x1122F,
0x11231, 0x11234, 0x11234, 0x11236, 0x11237, 0x1123E, 0x1123E, 0x11241, 0x11241,
0x112DF, 0x112DF, 0x112E3, 0x112EA, 0x11300, 0x11301, 0x1133B, 0x1133C, 0x11340,
0x11340, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11438, 0x1143F, 0x11442, 0x11444,
0x11446, 0x11446, 0x1145E, 0x1145E, 0x114B3, 0x114B8, 0x114BA, 0x114BA, 0x114BF,
0x114C0, 0x114C2, 0x114C3, 0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0,
0x115DC, 0x115DD, 0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640, 0x116AB,
0x116AB, 0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7, 0x1171D, 0x1171F,
0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837, 0x11839, 0x1183A, 0x1193B,
0x1193C, 0x1193E, 0x1193E, 0x11943, 0x11943, 0x119D4, 0x119D7, 0x119DA, 0x119DB,
0x119E0, 0x119E0, 0x11A01, 0x11A0A, 0x11A33, 0x11A38, 0x11A3B, 0x11A3E, 0x11A47,
0x11A47, 0x11A51, 0x11A56, 0x11A59, 0x11A5B, 0x11A8A, 0x11A96, 0x11A98, 0x11A99,
0x11C30, 0x11C36, 0x11C38, 0x11C3D, 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, 0x11CAA,
0x11CB0, 0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6, 0x11D31, 0x11D36, 0x11D3A, 0x11D3A,
0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D90, 0x11D91, 0x11D95,
0x11D95, 0x11D97, 0x11D97, 0x11EF3, 0x11EF4, 0x11F00, 0x11F01, 0x11F36, 0x11F3A,
0x11F40, 0x11F40, 0x11F42, 0x11F42, 0x13430, 0x13440, 0x13447, 0x13455, 0x16AF0,
0x16AF4, 0x16B30, 0x16B36, 0x16F4F, 0x16F4F, 0x16F8F, 0x16F92, 0x16FE4, 0x16FE4,
0x1BC9D, 0x1BC9E, 0x1BCA0, 0x1BCA3, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167,
0x1D169, 0x1D173, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1D242, 0x1D244,
0x1DA00, 0x1DA36, 0x1DA3B, 0x1DA6C, 0x1DA75, 0x1DA75, 0x1DA84, 0x1DA84, 0x1DA9B,
0x1DA9F, 0x1DAA1, 0x1DAAF, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E08F, 0x1E08F, 0x1E130, 0x1E136, 0x1E2AE,
0x1E2AE, 0x1E2EC, 0x1E2EF, 0x1E4EC, 0x1E4EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94B,
0xE0001, 0xE0001, 0xE0020, 0xE007F, 0xE0100, 0xE01EF,
]
///|
/// Joining types R and D: what may stand after a zero width non-joiner.
let idna_join_right : Array[Int32] = [
0x620, 0x620, 0x622, 0x63F, 0x641, 0x64A, 0x66E, 0x66F, 0x671, 0x673, 0x675, 0x6D3,
0x6D5, 0x6D5, 0x6EE, 0x6EF, 0x6FA, 0x6FC, 0x6FF, 0x6FF, 0x710, 0x710, 0x712, 0x72F,
0x74D, 0x77F, 0x7CA, 0x7EA, 0x840, 0x858, 0x860, 0x860, 0x862, 0x865, 0x867, 0x86A,
0x870, 0x882, 0x886, 0x886, 0x889, 0x88E, 0x8A0, 0x8AC, 0x8AE, 0x8C8, 0x1807, 0x1807,
0x1820, 0x1878, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0xA840, 0xA871, 0x10AC0, 0x10AC5,
0x10AC7, 0x10AC7, 0x10AC9, 0x10ACA, 0x10ACE, 0x10AD6, 0x10AD8, 0x10AE1, 0x10AE4,
0x10AE4, 0x10AEB, 0x10AEF, 0x10B80, 0x10B91, 0x10BA9, 0x10BAE, 0x10D01, 0x10D23,
0x10F30, 0x10F44, 0x10F51, 0x10F54, 0x10F70, 0x10F81, 0x10FB0, 0x10FB0, 0x10FB2,
0x10FB6, 0x10FB8, 0x10FBF, 0x10FC1, 0x10FC4, 0x10FC9, 0x10FCA, 0x1E900, 0x1E943,
]