diff options
Diffstat (limited to 'lib')
50 files changed, 20192 insertions, 12161 deletions
diff --git a/lib/unicode/prop/uprop_is_ahex.c b/lib/unicode/prop/uprop_is_ahex.c index 81465b1..da6fafe 100644 --- a/lib/unicode/prop/uprop_is_ahex.c +++ b/lib/unicode/prop/uprop_is_ahex.c @@ -1,21 +1,116 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, +}; -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, - 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr unsigned char stage2[][128] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; bool uprop_is_ahex(rune ch) { - return ch <= LATIN1_MAX && TESTBIT(bs, ch); + return TESTBIT(stage2[stage1[ch / 1024]], ch % 1024); } diff --git a/lib/unicode/prop/uprop_is_alpha.c b/lib/unicode/prop/uprop_is_alpha.c index 6fcd435..dcaceb4 100644 --- a/lib/unicode/prop/uprop_is_alpha.c +++ b/lib/unicode/prop/uprop_is_alpha.c @@ -1,754 +1,942 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 50, 2, 2, 51, 52, + 53, 54, 55, 56, 57, 57, 57, 57, 57, 58, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 59, 60, 61, 62, 57, 57, 57, + 63, 64, 65, 66, 57, 57, 57, 57, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 67, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 68, 2, 2, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 81, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 2, 2, 82, 83, 84, 85, 2, 2, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 57, 57, 95, 96, 97, 2, 98, 99, 100, 2, 2, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 57, 57, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 57, 124, 125, 57, 126, 127, 128, 129, 57, + 130, 131, 132, 133, 134, 135, 57, 57, 136, 137, 138, 139, 57, 140, 141, 142, + 2, 2, 2, 2, 2, 2, 2, 143, 144, 2, 145, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 146, + 2, 2, 2, 2, 2, 2, 2, 2, 147, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 2, 2, 148, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 149, 150, 151, 152, 57, 57, 57, 57, 153, 57, 154, 155, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 156, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 157, 56, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 158, + 2, 2, 159, 2, 2, 160, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 161, 162, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 163, 164, 165, 2, 2, 166, 167, 168, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 169, 57, + 170, 171, 172, 57, 57, 173, 57, 57, 57, 174, 57, 57, 57, 57, 57, 175, + 2, 176, 177, 57, 57, 57, 57, 57, 57, 57, 57, 57, 178, 179, 57, 57, + 57, 57, 180, 181, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 182, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 183, 2, + 184, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 185, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 186, 2, 2, 2, 2, 187, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 188, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 189, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 190, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002C6), RUNE_C(0x0002D1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x0002EC), RUNE_C(0x0002EC)}, - {RUNE_C(0x0002EE), RUNE_C(0x0002EE)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000370), RUNE_C(0x000374)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037A), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x000481)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x0005B0), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C5)}, - {RUNE_C(0x0005C7), RUNE_C(0x0005C7)}, - {RUNE_C(0x0005D0), RUNE_C(0x0005EA)}, - {RUNE_C(0x0005EF), RUNE_C(0x0005F2)}, - {RUNE_C(0x000610), RUNE_C(0x00061A)}, - {RUNE_C(0x000620), RUNE_C(0x000657)}, - {RUNE_C(0x000659), RUNE_C(0x00065F)}, - {RUNE_C(0x00066E), RUNE_C(0x0006D3)}, - {RUNE_C(0x0006D5), RUNE_C(0x0006DC)}, - {RUNE_C(0x0006E1), RUNE_C(0x0006E8)}, - {RUNE_C(0x0006ED), RUNE_C(0x0006EF)}, - {RUNE_C(0x0006FA), RUNE_C(0x0006FC)}, - {RUNE_C(0x0006FF), RUNE_C(0x0006FF)}, - {RUNE_C(0x000710), RUNE_C(0x00073F)}, - {RUNE_C(0x00074D), RUNE_C(0x0007B1)}, - {RUNE_C(0x0007CA), RUNE_C(0x0007EA)}, - {RUNE_C(0x0007F4), RUNE_C(0x0007F5)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x000800), RUNE_C(0x000817)}, - {RUNE_C(0x00081A), RUNE_C(0x00082C)}, - {RUNE_C(0x000840), RUNE_C(0x000858)}, - {RUNE_C(0x000860), RUNE_C(0x00086A)}, - {RUNE_C(0x000870), RUNE_C(0x000887)}, - {RUNE_C(0x000889), RUNE_C(0x00088E)}, - {RUNE_C(0x0008A0), RUNE_C(0x0008C9)}, - {RUNE_C(0x0008D4), RUNE_C(0x0008DF)}, - {RUNE_C(0x0008E3), RUNE_C(0x0008E9)}, - {RUNE_C(0x0008F0), RUNE_C(0x00093B)}, - {RUNE_C(0x00093D), RUNE_C(0x00094C)}, - {RUNE_C(0x00094E), RUNE_C(0x000950)}, - {RUNE_C(0x000955), RUNE_C(0x000963)}, - {RUNE_C(0x000971), RUNE_C(0x000983)}, - {RUNE_C(0x000985), RUNE_C(0x00098C)}, - {RUNE_C(0x00098F), RUNE_C(0x000990)}, - {RUNE_C(0x000993), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BD), RUNE_C(0x0009C4)}, - {RUNE_C(0x0009C7), RUNE_C(0x0009C8)}, - {RUNE_C(0x0009CB), RUNE_C(0x0009CC)}, - {RUNE_C(0x0009CE), RUNE_C(0x0009CE)}, - {RUNE_C(0x0009D7), RUNE_C(0x0009D7)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009E3)}, - {RUNE_C(0x0009F0), RUNE_C(0x0009F1)}, - {RUNE_C(0x0009FC), RUNE_C(0x0009FC)}, - {RUNE_C(0x000A01), RUNE_C(0x000A03)}, - {RUNE_C(0x000A05), RUNE_C(0x000A0A)}, - {RUNE_C(0x000A0F), RUNE_C(0x000A10)}, - {RUNE_C(0x000A13), RUNE_C(0x000A28)}, - {RUNE_C(0x000A2A), RUNE_C(0x000A30)}, - {RUNE_C(0x000A32), RUNE_C(0x000A33)}, - {RUNE_C(0x000A35), RUNE_C(0x000A36)}, - {RUNE_C(0x000A38), RUNE_C(0x000A39)}, - {RUNE_C(0x000A3E), RUNE_C(0x000A42)}, - {RUNE_C(0x000A47), RUNE_C(0x000A48)}, - {RUNE_C(0x000A4B), RUNE_C(0x000A4C)}, - {RUNE_C(0x000A51), RUNE_C(0x000A51)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5C)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000A70), RUNE_C(0x000A75)}, - {RUNE_C(0x000A81), RUNE_C(0x000A83)}, - {RUNE_C(0x000A85), RUNE_C(0x000A8D)}, - {RUNE_C(0x000A8F), RUNE_C(0x000A91)}, - {RUNE_C(0x000A93), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABD), RUNE_C(0x000AC5)}, - {RUNE_C(0x000AC7), RUNE_C(0x000AC9)}, - {RUNE_C(0x000ACB), RUNE_C(0x000ACC)}, - {RUNE_C(0x000AD0), RUNE_C(0x000AD0)}, - {RUNE_C(0x000AE0), RUNE_C(0x000AE3)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AFC)}, - {RUNE_C(0x000B01), RUNE_C(0x000B03)}, - {RUNE_C(0x000B05), RUNE_C(0x000B0C)}, - {RUNE_C(0x000B0F), RUNE_C(0x000B10)}, - {RUNE_C(0x000B13), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3D), RUNE_C(0x000B44)}, - {RUNE_C(0x000B47), RUNE_C(0x000B48)}, - {RUNE_C(0x000B4B), RUNE_C(0x000B4C)}, - {RUNE_C(0x000B56), RUNE_C(0x000B57)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B63)}, - {RUNE_C(0x000B71), RUNE_C(0x000B71)}, - {RUNE_C(0x000B82), RUNE_C(0x000B83)}, - {RUNE_C(0x000B85), RUNE_C(0x000B8A)}, - {RUNE_C(0x000B8E), RUNE_C(0x000B90)}, - {RUNE_C(0x000B92), RUNE_C(0x000B95)}, - {RUNE_C(0x000B99), RUNE_C(0x000B9A)}, - {RUNE_C(0x000B9C), RUNE_C(0x000B9C)}, - {RUNE_C(0x000B9E), RUNE_C(0x000B9F)}, - {RUNE_C(0x000BA3), RUNE_C(0x000BA4)}, - {RUNE_C(0x000BA8), RUNE_C(0x000BAA)}, - {RUNE_C(0x000BAE), RUNE_C(0x000BB9)}, - {RUNE_C(0x000BBE), RUNE_C(0x000BC2)}, - {RUNE_C(0x000BC6), RUNE_C(0x000BC8)}, - {RUNE_C(0x000BCA), RUNE_C(0x000BCC)}, - {RUNE_C(0x000BD0), RUNE_C(0x000BD0)}, - {RUNE_C(0x000BD7), RUNE_C(0x000BD7)}, - {RUNE_C(0x000C00), RUNE_C(0x000C0C)}, - {RUNE_C(0x000C0E), RUNE_C(0x000C10)}, - {RUNE_C(0x000C12), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3D), RUNE_C(0x000C44)}, - {RUNE_C(0x000C46), RUNE_C(0x000C48)}, - {RUNE_C(0x000C4A), RUNE_C(0x000C4C)}, - {RUNE_C(0x000C55), RUNE_C(0x000C56)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000C5D), RUNE_C(0x000C5D)}, - {RUNE_C(0x000C60), RUNE_C(0x000C63)}, - {RUNE_C(0x000C80), RUNE_C(0x000C83)}, - {RUNE_C(0x000C85), RUNE_C(0x000C8C)}, - {RUNE_C(0x000C8E), RUNE_C(0x000C90)}, - {RUNE_C(0x000C92), RUNE_C(0x000CA8)}, - {RUNE_C(0x000CAA), RUNE_C(0x000CB3)}, - {RUNE_C(0x000CB5), RUNE_C(0x000CB9)}, - {RUNE_C(0x000CBD), RUNE_C(0x000CC4)}, - {RUNE_C(0x000CC6), RUNE_C(0x000CC8)}, - {RUNE_C(0x000CCA), RUNE_C(0x000CCC)}, - {RUNE_C(0x000CD5), RUNE_C(0x000CD6)}, - {RUNE_C(0x000CDD), RUNE_C(0x000CDE)}, - {RUNE_C(0x000CE0), RUNE_C(0x000CE3)}, - {RUNE_C(0x000CF1), RUNE_C(0x000CF3)}, - {RUNE_C(0x000D00), RUNE_C(0x000D0C)}, - {RUNE_C(0x000D0E), RUNE_C(0x000D10)}, - {RUNE_C(0x000D12), RUNE_C(0x000D3A)}, - {RUNE_C(0x000D3D), RUNE_C(0x000D44)}, - {RUNE_C(0x000D46), RUNE_C(0x000D48)}, - {RUNE_C(0x000D4A), RUNE_C(0x000D4C)}, - {RUNE_C(0x000D4E), RUNE_C(0x000D4E)}, - {RUNE_C(0x000D54), RUNE_C(0x000D57)}, - {RUNE_C(0x000D5F), RUNE_C(0x000D63)}, - {RUNE_C(0x000D7A), RUNE_C(0x000D7F)}, - {RUNE_C(0x000D81), RUNE_C(0x000D83)}, - {RUNE_C(0x000D85), RUNE_C(0x000D96)}, - {RUNE_C(0x000D9A), RUNE_C(0x000DB1)}, - {RUNE_C(0x000DB3), RUNE_C(0x000DBB)}, - {RUNE_C(0x000DBD), RUNE_C(0x000DBD)}, - {RUNE_C(0x000DC0), RUNE_C(0x000DC6)}, - {RUNE_C(0x000DCF), RUNE_C(0x000DD4)}, - {RUNE_C(0x000DD6), RUNE_C(0x000DD6)}, - {RUNE_C(0x000DD8), RUNE_C(0x000DDF)}, - {RUNE_C(0x000DF2), RUNE_C(0x000DF3)}, - {RUNE_C(0x000E01), RUNE_C(0x000E3A)}, - {RUNE_C(0x000E40), RUNE_C(0x000E46)}, - {RUNE_C(0x000E4D), RUNE_C(0x000E4D)}, - {RUNE_C(0x000E81), RUNE_C(0x000E82)}, - {RUNE_C(0x000E84), RUNE_C(0x000E84)}, - {RUNE_C(0x000E86), RUNE_C(0x000E8A)}, - {RUNE_C(0x000E8C), RUNE_C(0x000EA3)}, - {RUNE_C(0x000EA5), RUNE_C(0x000EA5)}, - {RUNE_C(0x000EA7), RUNE_C(0x000EB9)}, - {RUNE_C(0x000EBB), RUNE_C(0x000EBD)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000ECD), RUNE_C(0x000ECD)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDF)}, - {RUNE_C(0x000F00), RUNE_C(0x000F00)}, - {RUNE_C(0x000F40), RUNE_C(0x000F47)}, - {RUNE_C(0x000F49), RUNE_C(0x000F6C)}, - {RUNE_C(0x000F71), RUNE_C(0x000F83)}, - {RUNE_C(0x000F88), RUNE_C(0x000F97)}, - {RUNE_C(0x000F99), RUNE_C(0x000FBC)}, - {RUNE_C(0x001000), RUNE_C(0x001036)}, - {RUNE_C(0x001038), RUNE_C(0x001038)}, - {RUNE_C(0x00103B), RUNE_C(0x00103F)}, - {RUNE_C(0x001050), RUNE_C(0x00108F)}, - {RUNE_C(0x00109A), RUNE_C(0x00109D)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x001248)}, - {RUNE_C(0x00124A), RUNE_C(0x00124D)}, - {RUNE_C(0x001250), RUNE_C(0x001256)}, - {RUNE_C(0x001258), RUNE_C(0x001258)}, - {RUNE_C(0x00125A), RUNE_C(0x00125D)}, - {RUNE_C(0x001260), RUNE_C(0x001288)}, - {RUNE_C(0x00128A), RUNE_C(0x00128D)}, - {RUNE_C(0x001290), RUNE_C(0x0012B0)}, - {RUNE_C(0x0012B2), RUNE_C(0x0012B5)}, - {RUNE_C(0x0012B8), RUNE_C(0x0012BE)}, - {RUNE_C(0x0012C0), RUNE_C(0x0012C0)}, - {RUNE_C(0x0012C2), RUNE_C(0x0012C5)}, - {RUNE_C(0x0012C8), RUNE_C(0x0012D6)}, - {RUNE_C(0x0012D8), RUNE_C(0x001310)}, - {RUNE_C(0x001312), RUNE_C(0x001315)}, - {RUNE_C(0x001318), RUNE_C(0x00135A)}, - {RUNE_C(0x001380), RUNE_C(0x00138F)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001401), RUNE_C(0x00166C)}, - {RUNE_C(0x00166F), RUNE_C(0x00167F)}, - {RUNE_C(0x001681), RUNE_C(0x00169A)}, - {RUNE_C(0x0016A0), RUNE_C(0x0016EA)}, - {RUNE_C(0x0016EE), RUNE_C(0x0016F8)}, - {RUNE_C(0x001700), RUNE_C(0x001713)}, - {RUNE_C(0x00171F), RUNE_C(0x001733)}, - {RUNE_C(0x001740), RUNE_C(0x001753)}, - {RUNE_C(0x001760), RUNE_C(0x00176C)}, - {RUNE_C(0x00176E), RUNE_C(0x001770)}, - {RUNE_C(0x001772), RUNE_C(0x001773)}, - {RUNE_C(0x001780), RUNE_C(0x0017B3)}, - {RUNE_C(0x0017B6), RUNE_C(0x0017C8)}, - {RUNE_C(0x0017D7), RUNE_C(0x0017D7)}, - {RUNE_C(0x0017DC), RUNE_C(0x0017DC)}, - {RUNE_C(0x001820), RUNE_C(0x001878)}, - {RUNE_C(0x001880), RUNE_C(0x0018AA)}, - {RUNE_C(0x0018B0), RUNE_C(0x0018F5)}, - {RUNE_C(0x001900), RUNE_C(0x00191E)}, - {RUNE_C(0x001920), RUNE_C(0x00192B)}, - {RUNE_C(0x001930), RUNE_C(0x001938)}, - {RUNE_C(0x001950), RUNE_C(0x00196D)}, - {RUNE_C(0x001970), RUNE_C(0x001974)}, - {RUNE_C(0x001980), RUNE_C(0x0019AB)}, - {RUNE_C(0x0019B0), RUNE_C(0x0019C9)}, - {RUNE_C(0x001A00), RUNE_C(0x001A1B)}, - {RUNE_C(0x001A20), RUNE_C(0x001A5E)}, - {RUNE_C(0x001A61), RUNE_C(0x001A74)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001ABF), RUNE_C(0x001AC0)}, - {RUNE_C(0x001ACC), RUNE_C(0x001ACE)}, - {RUNE_C(0x001B00), RUNE_C(0x001B33)}, - {RUNE_C(0x001B35), RUNE_C(0x001B43)}, - {RUNE_C(0x001B45), RUNE_C(0x001B4C)}, - {RUNE_C(0x001B80), RUNE_C(0x001BA9)}, - {RUNE_C(0x001BAC), RUNE_C(0x001BAF)}, - {RUNE_C(0x001BBA), RUNE_C(0x001BE5)}, - {RUNE_C(0x001BE7), RUNE_C(0x001BF1)}, - {RUNE_C(0x001C00), RUNE_C(0x001C36)}, - {RUNE_C(0x001C4D), RUNE_C(0x001C4F)}, - {RUNE_C(0x001C5A), RUNE_C(0x001C7D)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001CE9), RUNE_C(0x001CEC)}, - {RUNE_C(0x001CEE), RUNE_C(0x001CF3)}, - {RUNE_C(0x001CF5), RUNE_C(0x001CF6)}, - {RUNE_C(0x001CFA), RUNE_C(0x001CFA)}, - {RUNE_C(0x001D00), RUNE_C(0x001DBF)}, - {RUNE_C(0x001DE7), RUNE_C(0x001DF4)}, - {RUNE_C(0x001E00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002119), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x00212D)}, - {RUNE_C(0x00212F), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x002188)}, - {RUNE_C(0x0024B6), RUNE_C(0x0024E9)}, - {RUNE_C(0x002C00), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x002D30), RUNE_C(0x002D67)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002D80), RUNE_C(0x002D96)}, - {RUNE_C(0x002DA0), RUNE_C(0x002DA6)}, - {RUNE_C(0x002DA8), RUNE_C(0x002DAE)}, - {RUNE_C(0x002DB0), RUNE_C(0x002DB6)}, - {RUNE_C(0x002DB8), RUNE_C(0x002DBE)}, - {RUNE_C(0x002DC0), RUNE_C(0x002DC6)}, - {RUNE_C(0x002DC8), RUNE_C(0x002DCE)}, - {RUNE_C(0x002DD0), RUNE_C(0x002DD6)}, - {RUNE_C(0x002DD8), RUNE_C(0x002DDE)}, - {RUNE_C(0x002DE0), RUNE_C(0x002DFF)}, - {RUNE_C(0x002E2F), RUNE_C(0x002E2F)}, - {RUNE_C(0x003005), RUNE_C(0x003007)}, - {RUNE_C(0x003021), RUNE_C(0x003029)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x003038), RUNE_C(0x00303C)}, - {RUNE_C(0x003041), RUNE_C(0x003096)}, - {RUNE_C(0x00309D), RUNE_C(0x00309F)}, - {RUNE_C(0x0030A1), RUNE_C(0x0030FA)}, - {RUNE_C(0x0030FC), RUNE_C(0x0030FF)}, - {RUNE_C(0x003105), RUNE_C(0x00312F)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x0031A0), RUNE_C(0x0031BF)}, - {RUNE_C(0x0031F0), RUNE_C(0x0031FF)}, - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x00A48C)}, - {RUNE_C(0x00A4D0), RUNE_C(0x00A4FD)}, - {RUNE_C(0x00A500), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A610), RUNE_C(0x00A61F)}, - {RUNE_C(0x00A62A), RUNE_C(0x00A62B)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66E)}, - {RUNE_C(0x00A674), RUNE_C(0x00A67B)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A6EF)}, - {RUNE_C(0x00A717), RUNE_C(0x00A71F)}, - {RUNE_C(0x00A722), RUNE_C(0x00A788)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A805)}, - {RUNE_C(0x00A807), RUNE_C(0x00A827)}, - {RUNE_C(0x00A840), RUNE_C(0x00A873)}, - {RUNE_C(0x00A880), RUNE_C(0x00A8C3)}, - {RUNE_C(0x00A8C5), RUNE_C(0x00A8C5)}, - {RUNE_C(0x00A8F2), RUNE_C(0x00A8F7)}, - {RUNE_C(0x00A8FB), RUNE_C(0x00A8FB)}, - {RUNE_C(0x00A8FD), RUNE_C(0x00A8FF)}, - {RUNE_C(0x00A90A), RUNE_C(0x00A92A)}, - {RUNE_C(0x00A930), RUNE_C(0x00A952)}, - {RUNE_C(0x00A960), RUNE_C(0x00A97C)}, - {RUNE_C(0x00A980), RUNE_C(0x00A9B2)}, - {RUNE_C(0x00A9B4), RUNE_C(0x00A9BF)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9CF)}, - {RUNE_C(0x00A9E0), RUNE_C(0x00A9EF)}, - {RUNE_C(0x00A9FA), RUNE_C(0x00A9FE)}, - {RUNE_C(0x00AA00), RUNE_C(0x00AA36)}, - {RUNE_C(0x00AA40), RUNE_C(0x00AA4D)}, - {RUNE_C(0x00AA60), RUNE_C(0x00AA76)}, - {RUNE_C(0x00AA7A), RUNE_C(0x00AABE)}, - {RUNE_C(0x00AAC0), RUNE_C(0x00AAC0)}, - {RUNE_C(0x00AAC2), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AADB), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAE0), RUNE_C(0x00AAEF)}, - {RUNE_C(0x00AAF2), RUNE_C(0x00AAF5)}, - {RUNE_C(0x00AB01), RUNE_C(0x00AB06)}, - {RUNE_C(0x00AB09), RUNE_C(0x00AB0E)}, - {RUNE_C(0x00AB11), RUNE_C(0x00AB16)}, - {RUNE_C(0x00AB20), RUNE_C(0x00AB26)}, - {RUNE_C(0x00AB28), RUNE_C(0x00AB2E)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABEA)}, - {RUNE_C(0x00AC00), RUNE_C(0x00D7A3)}, - {RUNE_C(0x00D7B0), RUNE_C(0x00D7C6)}, - {RUNE_C(0x00D7CB), RUNE_C(0x00D7FB)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB28)}, - {RUNE_C(0x00FB2A), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBB1)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FD3D)}, - {RUNE_C(0x00FD50), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDFB)}, - {RUNE_C(0x00FE70), RUNE_C(0x00FE74)}, - {RUNE_C(0x00FE76), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x00FF66), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x010000), RUNE_C(0x01000B)}, - {RUNE_C(0x01000D), RUNE_C(0x010026)}, - {RUNE_C(0x010028), RUNE_C(0x01003A)}, - {RUNE_C(0x01003C), RUNE_C(0x01003D)}, - {RUNE_C(0x01003F), RUNE_C(0x01004D)}, - {RUNE_C(0x010050), RUNE_C(0x01005D)}, - {RUNE_C(0x010080), RUNE_C(0x0100FA)}, - {RUNE_C(0x010140), RUNE_C(0x010174)}, - {RUNE_C(0x010280), RUNE_C(0x01029C)}, - {RUNE_C(0x0102A0), RUNE_C(0x0102D0)}, - {RUNE_C(0x010300), RUNE_C(0x01031F)}, - {RUNE_C(0x01032D), RUNE_C(0x01034A)}, - {RUNE_C(0x010350), RUNE_C(0x01037A)}, - {RUNE_C(0x010380), RUNE_C(0x01039D)}, - {RUNE_C(0x0103A0), RUNE_C(0x0103C3)}, - {RUNE_C(0x0103C8), RUNE_C(0x0103CF)}, - {RUNE_C(0x0103D1), RUNE_C(0x0103D5)}, - {RUNE_C(0x010400), RUNE_C(0x01049D)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010500), RUNE_C(0x010527)}, - {RUNE_C(0x010530), RUNE_C(0x010563)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010600), RUNE_C(0x010736)}, - {RUNE_C(0x010740), RUNE_C(0x010755)}, - {RUNE_C(0x010760), RUNE_C(0x010767)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010800), RUNE_C(0x010805)}, - {RUNE_C(0x010808), RUNE_C(0x010808)}, - {RUNE_C(0x01080A), RUNE_C(0x010835)}, - {RUNE_C(0x010837), RUNE_C(0x010838)}, - {RUNE_C(0x01083C), RUNE_C(0x01083C)}, - {RUNE_C(0x01083F), RUNE_C(0x010855)}, - {RUNE_C(0x010860), RUNE_C(0x010876)}, - {RUNE_C(0x010880), RUNE_C(0x01089E)}, - {RUNE_C(0x0108E0), RUNE_C(0x0108F2)}, - {RUNE_C(0x0108F4), RUNE_C(0x0108F5)}, - {RUNE_C(0x010900), RUNE_C(0x010915)}, - {RUNE_C(0x010920), RUNE_C(0x010939)}, - {RUNE_C(0x010980), RUNE_C(0x0109B7)}, - {RUNE_C(0x0109BE), RUNE_C(0x0109BF)}, - {RUNE_C(0x010A00), RUNE_C(0x010A03)}, - {RUNE_C(0x010A05), RUNE_C(0x010A06)}, - {RUNE_C(0x010A0C), RUNE_C(0x010A13)}, - {RUNE_C(0x010A15), RUNE_C(0x010A17)}, - {RUNE_C(0x010A19), RUNE_C(0x010A35)}, - {RUNE_C(0x010A60), RUNE_C(0x010A7C)}, - {RUNE_C(0x010A80), RUNE_C(0x010A9C)}, - {RUNE_C(0x010AC0), RUNE_C(0x010AC7)}, - {RUNE_C(0x010AC9), RUNE_C(0x010AE4)}, - {RUNE_C(0x010B00), RUNE_C(0x010B35)}, - {RUNE_C(0x010B40), RUNE_C(0x010B55)}, - {RUNE_C(0x010B60), RUNE_C(0x010B72)}, - {RUNE_C(0x010B80), RUNE_C(0x010B91)}, - {RUNE_C(0x010C00), RUNE_C(0x010C48)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x010D00), RUNE_C(0x010D27)}, - {RUNE_C(0x010E80), RUNE_C(0x010EA9)}, - {RUNE_C(0x010EAB), RUNE_C(0x010EAC)}, - {RUNE_C(0x010EB0), RUNE_C(0x010EB1)}, - {RUNE_C(0x010F00), RUNE_C(0x010F1C)}, - {RUNE_C(0x010F27), RUNE_C(0x010F27)}, - {RUNE_C(0x010F30), RUNE_C(0x010F45)}, - {RUNE_C(0x010F70), RUNE_C(0x010F81)}, - {RUNE_C(0x010FB0), RUNE_C(0x010FC4)}, - {RUNE_C(0x010FE0), RUNE_C(0x010FF6)}, - {RUNE_C(0x011000), RUNE_C(0x011045)}, - {RUNE_C(0x011071), RUNE_C(0x011075)}, - {RUNE_C(0x011080), RUNE_C(0x0110B8)}, - {RUNE_C(0x0110C2), RUNE_C(0x0110C2)}, - {RUNE_C(0x0110D0), RUNE_C(0x0110E8)}, - {RUNE_C(0x011100), RUNE_C(0x011132)}, - {RUNE_C(0x011144), RUNE_C(0x011147)}, - {RUNE_C(0x011150), RUNE_C(0x011172)}, - {RUNE_C(0x011176), RUNE_C(0x011176)}, - {RUNE_C(0x011180), RUNE_C(0x0111BF)}, - {RUNE_C(0x0111C1), RUNE_C(0x0111C4)}, - {RUNE_C(0x0111CE), RUNE_C(0x0111CF)}, - {RUNE_C(0x0111DA), RUNE_C(0x0111DA)}, - {RUNE_C(0x0111DC), RUNE_C(0x0111DC)}, - {RUNE_C(0x011200), RUNE_C(0x011211)}, - {RUNE_C(0x011213), RUNE_C(0x011234)}, - {RUNE_C(0x011237), RUNE_C(0x011237)}, - {RUNE_C(0x01123E), RUNE_C(0x011241)}, - {RUNE_C(0x011280), RUNE_C(0x011286)}, - {RUNE_C(0x011288), RUNE_C(0x011288)}, - {RUNE_C(0x01128A), RUNE_C(0x01128D)}, - {RUNE_C(0x01128F), RUNE_C(0x01129D)}, - {RUNE_C(0x01129F), RUNE_C(0x0112A8)}, - {RUNE_C(0x0112B0), RUNE_C(0x0112E8)}, - {RUNE_C(0x011300), RUNE_C(0x011303)}, - {RUNE_C(0x011305), RUNE_C(0x01130C)}, - {RUNE_C(0x01130F), RUNE_C(0x011310)}, - {RUNE_C(0x011313), RUNE_C(0x011328)}, - {RUNE_C(0x01132A), RUNE_C(0x011330)}, - {RUNE_C(0x011332), RUNE_C(0x011333)}, - {RUNE_C(0x011335), RUNE_C(0x011339)}, - {RUNE_C(0x01133D), RUNE_C(0x011344)}, - {RUNE_C(0x011347), RUNE_C(0x011348)}, - {RUNE_C(0x01134B), RUNE_C(0x01134C)}, - {RUNE_C(0x011350), RUNE_C(0x011350)}, - {RUNE_C(0x011357), RUNE_C(0x011357)}, - {RUNE_C(0x01135D), RUNE_C(0x011363)}, - {RUNE_C(0x011400), RUNE_C(0x011441)}, - {RUNE_C(0x011443), RUNE_C(0x011445)}, - {RUNE_C(0x011447), RUNE_C(0x01144A)}, - {RUNE_C(0x01145F), RUNE_C(0x011461)}, - {RUNE_C(0x011480), RUNE_C(0x0114C1)}, - {RUNE_C(0x0114C4), RUNE_C(0x0114C5)}, - {RUNE_C(0x0114C7), RUNE_C(0x0114C7)}, - {RUNE_C(0x011580), RUNE_C(0x0115B5)}, - {RUNE_C(0x0115B8), RUNE_C(0x0115BE)}, - {RUNE_C(0x0115D8), RUNE_C(0x0115DD)}, - {RUNE_C(0x011600), RUNE_C(0x01163E)}, - {RUNE_C(0x011640), RUNE_C(0x011640)}, - {RUNE_C(0x011644), RUNE_C(0x011644)}, - {RUNE_C(0x011680), RUNE_C(0x0116B5)}, - {RUNE_C(0x0116B8), RUNE_C(0x0116B8)}, - {RUNE_C(0x011700), RUNE_C(0x01171A)}, - {RUNE_C(0x01171D), RUNE_C(0x01172A)}, - {RUNE_C(0x011740), RUNE_C(0x011746)}, - {RUNE_C(0x011800), RUNE_C(0x011838)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118DF)}, - {RUNE_C(0x0118FF), RUNE_C(0x011906)}, - {RUNE_C(0x011909), RUNE_C(0x011909)}, - {RUNE_C(0x01190C), RUNE_C(0x011913)}, - {RUNE_C(0x011915), RUNE_C(0x011916)}, - {RUNE_C(0x011918), RUNE_C(0x011935)}, - {RUNE_C(0x011937), RUNE_C(0x011938)}, - {RUNE_C(0x01193B), RUNE_C(0x01193C)}, - {RUNE_C(0x01193F), RUNE_C(0x011942)}, - {RUNE_C(0x0119A0), RUNE_C(0x0119A7)}, - {RUNE_C(0x0119AA), RUNE_C(0x0119D7)}, - {RUNE_C(0x0119DA), RUNE_C(0x0119DF)}, - {RUNE_C(0x0119E1), RUNE_C(0x0119E1)}, - {RUNE_C(0x0119E3), RUNE_C(0x0119E4)}, - {RUNE_C(0x011A00), RUNE_C(0x011A32)}, - {RUNE_C(0x011A35), RUNE_C(0x011A3E)}, - {RUNE_C(0x011A50), RUNE_C(0x011A97)}, - {RUNE_C(0x011A9D), RUNE_C(0x011A9D)}, - {RUNE_C(0x011AB0), RUNE_C(0x011AF8)}, - {RUNE_C(0x011C00), RUNE_C(0x011C08)}, - {RUNE_C(0x011C0A), RUNE_C(0x011C36)}, - {RUNE_C(0x011C38), RUNE_C(0x011C3E)}, - {RUNE_C(0x011C40), RUNE_C(0x011C40)}, - {RUNE_C(0x011C72), RUNE_C(0x011C8F)}, - {RUNE_C(0x011C92), RUNE_C(0x011CA7)}, - {RUNE_C(0x011CA9), RUNE_C(0x011CB6)}, - {RUNE_C(0x011D00), RUNE_C(0x011D06)}, - {RUNE_C(0x011D08), RUNE_C(0x011D09)}, - {RUNE_C(0x011D0B), RUNE_C(0x011D36)}, - {RUNE_C(0x011D3A), RUNE_C(0x011D3A)}, - {RUNE_C(0x011D3C), RUNE_C(0x011D3D)}, - {RUNE_C(0x011D3F), RUNE_C(0x011D41)}, - {RUNE_C(0x011D43), RUNE_C(0x011D43)}, - {RUNE_C(0x011D46), RUNE_C(0x011D47)}, - {RUNE_C(0x011D60), RUNE_C(0x011D65)}, - {RUNE_C(0x011D67), RUNE_C(0x011D68)}, - {RUNE_C(0x011D6A), RUNE_C(0x011D8E)}, - {RUNE_C(0x011D90), RUNE_C(0x011D91)}, - {RUNE_C(0x011D93), RUNE_C(0x011D96)}, - {RUNE_C(0x011D98), RUNE_C(0x011D98)}, - {RUNE_C(0x011EE0), RUNE_C(0x011EF6)}, - {RUNE_C(0x011F00), RUNE_C(0x011F10)}, - {RUNE_C(0x011F12), RUNE_C(0x011F3A)}, - {RUNE_C(0x011F3E), RUNE_C(0x011F40)}, - {RUNE_C(0x011FB0), RUNE_C(0x011FB0)}, - {RUNE_C(0x012000), RUNE_C(0x012399)}, - {RUNE_C(0x012400), RUNE_C(0x01246E)}, - {RUNE_C(0x012480), RUNE_C(0x012543)}, - {RUNE_C(0x012F90), RUNE_C(0x012FF0)}, - {RUNE_C(0x013000), RUNE_C(0x01342F)}, - {RUNE_C(0x013441), RUNE_C(0x013446)}, - {RUNE_C(0x014400), RUNE_C(0x014646)}, - {RUNE_C(0x016800), RUNE_C(0x016A38)}, - {RUNE_C(0x016A40), RUNE_C(0x016A5E)}, - {RUNE_C(0x016A70), RUNE_C(0x016ABE)}, - {RUNE_C(0x016AD0), RUNE_C(0x016AED)}, - {RUNE_C(0x016B00), RUNE_C(0x016B2F)}, - {RUNE_C(0x016B40), RUNE_C(0x016B43)}, - {RUNE_C(0x016B63), RUNE_C(0x016B77)}, - {RUNE_C(0x016B7D), RUNE_C(0x016B8F)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x016F00), RUNE_C(0x016F4A)}, - {RUNE_C(0x016F4F), RUNE_C(0x016F87)}, - {RUNE_C(0x016F8F), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE3)}, - {RUNE_C(0x016FF0), RUNE_C(0x016FF1)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01B000), RUNE_C(0x01B122)}, - {RUNE_C(0x01B132), RUNE_C(0x01B132)}, - {RUNE_C(0x01B150), RUNE_C(0x01B152)}, - {RUNE_C(0x01B155), RUNE_C(0x01B155)}, - {RUNE_C(0x01B164), RUNE_C(0x01B167)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x01BC00), RUNE_C(0x01BC6A)}, - {RUNE_C(0x01BC70), RUNE_C(0x01BC7C)}, - {RUNE_C(0x01BC80), RUNE_C(0x01BC88)}, - {RUNE_C(0x01BC90), RUNE_C(0x01BC99)}, - {RUNE_C(0x01BC9E), RUNE_C(0x01BC9E)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D734)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E000), RUNE_C(0x01E006)}, - {RUNE_C(0x01E008), RUNE_C(0x01E018)}, - {RUNE_C(0x01E01B), RUNE_C(0x01E021)}, - {RUNE_C(0x01E023), RUNE_C(0x01E024)}, - {RUNE_C(0x01E026), RUNE_C(0x01E02A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E08F), RUNE_C(0x01E08F)}, - {RUNE_C(0x01E100), RUNE_C(0x01E12C)}, - {RUNE_C(0x01E137), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E14E), RUNE_C(0x01E14E)}, - {RUNE_C(0x01E290), RUNE_C(0x01E2AD)}, - {RUNE_C(0x01E2C0), RUNE_C(0x01E2EB)}, - {RUNE_C(0x01E4D0), RUNE_C(0x01E4EB)}, - {RUNE_C(0x01E7E0), RUNE_C(0x01E7E6)}, - {RUNE_C(0x01E7E8), RUNE_C(0x01E7EB)}, - {RUNE_C(0x01E7ED), RUNE_C(0x01E7EE)}, - {RUNE_C(0x01E7F0), RUNE_C(0x01E7FE)}, - {RUNE_C(0x01E800), RUNE_C(0x01E8C4)}, - {RUNE_C(0x01E900), RUNE_C(0x01E943)}, - {RUNE_C(0x01E947), RUNE_C(0x01E947)}, - {RUNE_C(0x01E94B), RUNE_C(0x01E94B)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x01F130), RUNE_C(0x01F149)}, - {RUNE_C(0x01F150), RUNE_C(0x01F169)}, - {RUNE_C(0x01F170), RUNE_C(0x01F189)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xBC}, + {0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xBF, + 0xB6, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00}, + {0x00, 0x00, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xC0, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0x1F, 0xFE, 0xE1, 0x00, 0x9C}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0x30, 0x04}, + {0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x1F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x07, 0xFF, 0xFF}, + {0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0xF0, 0xFF, 0xF8, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, + 0xFF, 0xDF, 0xE1, 0xFF, 0x0F, 0x00, 0xFE, 0xFF}, + {0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xE3, + 0x9F, 0x59, 0x80, 0xB0, 0x0F, 0x00, 0x03, 0x10}, + {0xEE, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xC3, + 0x87, 0x19, 0x02, 0x5E, 0x00, 0x00, 0x3F, 0x00}, + {0xEE, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xE3, + 0xBF, 0x1B, 0x01, 0x00, 0x0F, 0x00, 0x00, 0x1E}, + {0xEE, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xE3, + 0x9F, 0x19, 0xC0, 0xB0, 0x0F, 0x00, 0x02, 0x00}, + {0xEC, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0xC3, + 0xC7, 0x1D, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xE3, + 0xDF, 0x1D, 0x60, 0x27, 0x0F, 0x00, 0x00, 0x00}, + {0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xE3, + 0xDF, 0x1D, 0x60, 0x60, 0x0F, 0x00, 0x0E, 0x00}, + {0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xDF, 0x5D, 0xF0, 0x80, 0x0F, 0x00, 0x00, 0xFC}, + {0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, + 0x7F, 0x80, 0x5F, 0xFF, 0x00, 0x00, 0x0C, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x7F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3B, + 0x5F, 0x20, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF}, + {0x0F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF9, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, + 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF}, + {0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x01}, + {0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xDF, 0x0D, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, + 0xFF, 0x01, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFF, 0x01, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, + 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, + 0xEF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x00, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0x00, 0xE0, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0x6F, 0x04}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0x00}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80}, + {0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x84, 0xFC, 0x2F, 0x3E, 0x50, 0xBD, 0xFF, 0xF3, + 0xE0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00}, + {0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x3E, 0x1F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x0C, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF0, 0x8F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xE8}, + {0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, + 0x00, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x7C}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0xFC}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x05, 0x00, 0x00, 0x38, 0xFF, 0xFF, 0x3C, 0x00}, + {0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xE0, 0xFF, 0xFD, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, + 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7}, + {0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0x00}, + {0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x6F, 0xF0, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x47, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1E, 0xC0, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x9F, 0xC0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00}, + {0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xE3, + 0x9F, 0x19, 0x81, 0xE0, 0x0F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBB, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x7F, + 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x07, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80}, + {0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0x99, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0x1A, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x7F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x20, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xB4, + 0xCB, 0x00, 0x00, 0x00, 0xBF, 0xFD, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x7B, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xE0}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0x43, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x8F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E}, + {0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_alpha(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_bidi_c.c b/lib/unicode/prop/uprop_is_bidi_c.c index 409c20e..d803370 100644 --- a/lib/unicode/prop/uprop_is_bidi_c.c +++ b/lib/unicode/prop/uprop_is_bidi_c.c @@ -1,25 +1,176 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00061C), RUNE_C(0x00061C)}, - {RUNE_C(0x00200E), RUNE_C(0x00200F)}, - {RUNE_C(0x00202A), RUNE_C(0x00202E)}, - {RUNE_C(0x002066), RUNE_C(0x002069)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_bidi_c(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_bidi_m.c b/lib/unicode/prop/uprop_is_bidi_m.c index 9ffd897..6ecf829 100644 --- a/lib/unicode/prop/uprop_is_bidi_m.c +++ b/lib/unicode/prop/uprop_is_bidi_m.c @@ -1,133 +1,256 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x50, - 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 1, + 4, 5, 1, 6, 7, 8, 1, 9, 10, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000F3A), RUNE_C(0x000F3D)}, - {RUNE_C(0x00169B), RUNE_C(0x00169C)}, - {RUNE_C(0x002039), RUNE_C(0x00203A)}, - {RUNE_C(0x002045), RUNE_C(0x002046)}, - {RUNE_C(0x00207D), RUNE_C(0x00207E)}, - {RUNE_C(0x00208D), RUNE_C(0x00208E)}, - {RUNE_C(0x002140), RUNE_C(0x002140)}, - {RUNE_C(0x002201), RUNE_C(0x002204)}, - {RUNE_C(0x002208), RUNE_C(0x00220D)}, - {RUNE_C(0x002211), RUNE_C(0x002211)}, - {RUNE_C(0x002215), RUNE_C(0x002216)}, - {RUNE_C(0x00221A), RUNE_C(0x00221D)}, - {RUNE_C(0x00221F), RUNE_C(0x002222)}, - {RUNE_C(0x002224), RUNE_C(0x002224)}, - {RUNE_C(0x002226), RUNE_C(0x002226)}, - {RUNE_C(0x00222B), RUNE_C(0x002233)}, - {RUNE_C(0x002239), RUNE_C(0x002239)}, - {RUNE_C(0x00223B), RUNE_C(0x00224C)}, - {RUNE_C(0x002252), RUNE_C(0x002255)}, - {RUNE_C(0x00225F), RUNE_C(0x002260)}, - {RUNE_C(0x002262), RUNE_C(0x002262)}, - {RUNE_C(0x002264), RUNE_C(0x00226B)}, - {RUNE_C(0x00226E), RUNE_C(0x00228C)}, - {RUNE_C(0x00228F), RUNE_C(0x002292)}, - {RUNE_C(0x002298), RUNE_C(0x002298)}, - {RUNE_C(0x0022A2), RUNE_C(0x0022A3)}, - {RUNE_C(0x0022A6), RUNE_C(0x0022B8)}, - {RUNE_C(0x0022BE), RUNE_C(0x0022BF)}, - {RUNE_C(0x0022C9), RUNE_C(0x0022CD)}, - {RUNE_C(0x0022D0), RUNE_C(0x0022D1)}, - {RUNE_C(0x0022D6), RUNE_C(0x0022ED)}, - {RUNE_C(0x0022F0), RUNE_C(0x0022FF)}, - {RUNE_C(0x002308), RUNE_C(0x00230B)}, - {RUNE_C(0x002320), RUNE_C(0x002321)}, - {RUNE_C(0x002329), RUNE_C(0x00232A)}, - {RUNE_C(0x002768), RUNE_C(0x002775)}, - {RUNE_C(0x0027C0), RUNE_C(0x0027C0)}, - {RUNE_C(0x0027C3), RUNE_C(0x0027C6)}, - {RUNE_C(0x0027C8), RUNE_C(0x0027C9)}, - {RUNE_C(0x0027CB), RUNE_C(0x0027CD)}, - {RUNE_C(0x0027D3), RUNE_C(0x0027D6)}, - {RUNE_C(0x0027DC), RUNE_C(0x0027DE)}, - {RUNE_C(0x0027E2), RUNE_C(0x0027EF)}, - {RUNE_C(0x002983), RUNE_C(0x002998)}, - {RUNE_C(0x00299B), RUNE_C(0x0029A0)}, - {RUNE_C(0x0029A2), RUNE_C(0x0029AF)}, - {RUNE_C(0x0029B8), RUNE_C(0x0029B8)}, - {RUNE_C(0x0029C0), RUNE_C(0x0029C5)}, - {RUNE_C(0x0029C9), RUNE_C(0x0029C9)}, - {RUNE_C(0x0029CE), RUNE_C(0x0029D2)}, - {RUNE_C(0x0029D4), RUNE_C(0x0029D5)}, - {RUNE_C(0x0029D8), RUNE_C(0x0029DC)}, - {RUNE_C(0x0029E1), RUNE_C(0x0029E1)}, - {RUNE_C(0x0029E3), RUNE_C(0x0029E5)}, - {RUNE_C(0x0029E8), RUNE_C(0x0029E9)}, - {RUNE_C(0x0029F4), RUNE_C(0x0029F9)}, - {RUNE_C(0x0029FC), RUNE_C(0x0029FD)}, - {RUNE_C(0x002A0A), RUNE_C(0x002A1C)}, - {RUNE_C(0x002A1E), RUNE_C(0x002A21)}, - {RUNE_C(0x002A24), RUNE_C(0x002A24)}, - {RUNE_C(0x002A26), RUNE_C(0x002A26)}, - {RUNE_C(0x002A29), RUNE_C(0x002A29)}, - {RUNE_C(0x002A2B), RUNE_C(0x002A2E)}, - {RUNE_C(0x002A34), RUNE_C(0x002A35)}, - {RUNE_C(0x002A3C), RUNE_C(0x002A3E)}, - {RUNE_C(0x002A57), RUNE_C(0x002A58)}, - {RUNE_C(0x002A64), RUNE_C(0x002A65)}, - {RUNE_C(0x002A6A), RUNE_C(0x002A6D)}, - {RUNE_C(0x002A6F), RUNE_C(0x002A70)}, - {RUNE_C(0x002A73), RUNE_C(0x002A74)}, - {RUNE_C(0x002A79), RUNE_C(0x002AA3)}, - {RUNE_C(0x002AA6), RUNE_C(0x002AAD)}, - {RUNE_C(0x002AAF), RUNE_C(0x002AD6)}, - {RUNE_C(0x002ADC), RUNE_C(0x002ADC)}, - {RUNE_C(0x002ADE), RUNE_C(0x002ADE)}, - {RUNE_C(0x002AE2), RUNE_C(0x002AE6)}, - {RUNE_C(0x002AEC), RUNE_C(0x002AEE)}, - {RUNE_C(0x002AF3), RUNE_C(0x002AF3)}, - {RUNE_C(0x002AF7), RUNE_C(0x002AFB)}, - {RUNE_C(0x002AFD), RUNE_C(0x002AFD)}, - {RUNE_C(0x002BFE), RUNE_C(0x002BFE)}, - {RUNE_C(0x002E02), RUNE_C(0x002E05)}, - {RUNE_C(0x002E09), RUNE_C(0x002E0A)}, - {RUNE_C(0x002E0C), RUNE_C(0x002E0D)}, - {RUNE_C(0x002E1C), RUNE_C(0x002E1D)}, - {RUNE_C(0x002E20), RUNE_C(0x002E29)}, - {RUNE_C(0x002E55), RUNE_C(0x002E5C)}, - {RUNE_C(0x003008), RUNE_C(0x003011)}, - {RUNE_C(0x003014), RUNE_C(0x00301B)}, - {RUNE_C(0x00FE59), RUNE_C(0x00FE5E)}, - {RUNE_C(0x00FE64), RUNE_C(0x00FE65)}, - {RUNE_C(0x00FF08), RUNE_C(0x00FF09)}, - {RUNE_C(0x00FF1C), RUNE_C(0x00FF1C)}, - {RUNE_C(0x00FF1E), RUNE_C(0x00FF1E)}, - {RUNE_C(0x00FF3B), RUNE_C(0x00FF3B)}, - {RUNE_C(0x00FF3D), RUNE_C(0x00FF3D)}, - {RUNE_C(0x00FF5B), RUNE_C(0x00FF5B)}, - {RUNE_C(0x00FF5D), RUNE_C(0x00FF5D)}, - {RUNE_C(0x00FF5F), RUNE_C(0x00FF60)}, - {RUNE_C(0x00FF62), RUNE_C(0x00FF63)}, - {RUNE_C(0x01D6DB), RUNE_C(0x01D6DB)}, - {RUNE_C(0x01D715), RUNE_C(0x01D715)}, - {RUNE_C(0x01D74F), RUNE_C(0x01D74F)}, - {RUNE_C(0x01D789), RUNE_C(0x01D789)}, - {RUNE_C(0x01D7C3), RUNE_C(0x01D7C3)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, + 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x1E, 0x3F, 0x62, 0xBC, 0x57, 0xF8, 0x0F, 0xFA, + 0xFF, 0x1F, 0x3C, 0x80, 0xF5, 0xCF, 0xFF, 0xFF, + 0xFF, 0x9F, 0x07, 0x01, 0xCC, 0xFF, 0xFF, 0xC1, + 0x00, 0x3E, 0xC3, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x00, 0x0F, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x79, 0x3B, 0x78, 0x70, 0xFC, 0xFF, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF8, 0xFF, 0xFF, 0xF9, 0xFD, 0xFF, 0x00, 0x01, + 0x3F, 0xC2, 0x37, 0x1F, 0x3A, 0x03, 0xF0, 0x33}, + {0x00, 0xFC, 0xFF, 0xDF, 0x53, 0x7A, 0x30, 0x70, + 0x00, 0x00, 0x80, 0x01, 0x30, 0xBC, 0x19, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xBF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0x50, 0x7C, 0x70, 0x88, 0x2F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40}, + {0x3C, 0x36, 0x00, 0x30, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xFF, 0xF3, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7E, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x50, 0x00, 0x00, 0x00, 0x28, + 0x00, 0x00, 0x00, 0xA8, 0x0D, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_bidi_m(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_cased.c b/lib/unicode/prop/uprop_is_cased.c index 59a5b8d..4c36acd 100644 --- a/lib/unicode/prop/uprop_is_cased.c +++ b/lib/unicode/prop/uprop_is_cased.c @@ -1,178 +1,436 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12, + 13, 14, 6, 6, 15, 6, 6, 6, 6, 6, 6, 6, 16, 17, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 18, 19, 6, 6, 6, 20, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 22, + 6, 6, 6, 6, 23, 24, 6, 25, 6, 6, 6, 6, 26, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 27, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 29, 30, 31, 32, 6, 6, 6, 6, 6, 6, 6, 33, + 34, 6, 6, 6, 6, 6, 6, 6, 6, 35, 6, 6, 6, 6, 6, 6, + 6, 36, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0001BA)}, - {RUNE_C(0x0001BC), RUNE_C(0x0001BF)}, - {RUNE_C(0x0001C4), RUNE_C(0x000293)}, - {RUNE_C(0x000295), RUNE_C(0x0002B8)}, - {RUNE_C(0x0002C0), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000370), RUNE_C(0x000373)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037A), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x000481)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x0010FF)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001D00), RUNE_C(0x001DBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002119), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x00212D)}, - {RUNE_C(0x00212F), RUNE_C(0x002134)}, - {RUNE_C(0x002139), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x00217F)}, - {RUNE_C(0x002183), RUNE_C(0x002184)}, - {RUNE_C(0x0024B6), RUNE_C(0x0024E9)}, - {RUNE_C(0x002C00), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66D)}, - {RUNE_C(0x00A680), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A722), RUNE_C(0x00A787)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A78E)}, - {RUNE_C(0x00A790), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A7F6)}, - {RUNE_C(0x00A7F8), RUNE_C(0x00A7FA)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x010400), RUNE_C(0x01044F)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010780), RUNE_C(0x010780)}, - {RUNE_C(0x010783), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118DF)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D734)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF09)}, - {RUNE_C(0x01DF0B), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E900), RUNE_C(0x01E943)}, - {RUNE_C(0x01F130), RUNE_C(0x01F149)}, - {RUNE_C(0x01F150), RUNE_C(0x01F169)}, - {RUNE_C(0x01F170), RUNE_C(0x01F189)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xBC, + 0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, + 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x84, 0xFC, 0x2F, 0x3E, 0x50, 0xBD, 0x1F, 0xF2, + 0xE0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0x7C, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFB, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cased(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_ci.c b/lib/unicode/prop/uprop_is_ci.c index 33eff8d..ebe10c9 100644 --- a/lib/unicode/prop/uprop_is_ci.c +++ b/lib/unicode/prop/uprop_is_ci.c @@ -1,455 +1,826 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x04, - 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x90, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 2, 2, 2, 2, 31, 2, 2, 2, 2, 2, 2, 2, 32, 33, + 34, 35, 36, 2, 37, 38, 39, 40, 41, 42, 43, 44, 2, 2, 2, 45, + 46, 47, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 48, 49, 50, 51, 52, 2, 2, 2, + 53, 54, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 55, 2, 2, 2, 2, 2, 2, 2, 2, 56, 2, 2, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 69, 70, 2, 2, 2, 2, 71, 72, 73, 74, + 2, 2, 2, 75, 2, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2, 78, + 2, 2, 2, 2, 79, 80, 2, 2, 2, 2, 81, 2, 2, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 2, 92, 93, 2, 94, 95, 96, 97, 2, + 98, 2, 99, 100, 101, 102, 2, 2, 103, 104, 105, 106, 2, 107, 108, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 109, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 110, 111, 2, 2, 2, 2, 2, 2, 2, 112, 113, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 114, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 115, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 116, 2, + 2, 2, 117, 118, 119, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 120, 121, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 122, 123, 124, 2, 2, 125, 2, 2, 2, 126, 2, 2, 2, 2, 2, 2, + 2, 127, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 129, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 130, 2, 131, 132, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x0002B0), RUNE_C(0x00036F)}, - {RUNE_C(0x000374), RUNE_C(0x000375)}, - {RUNE_C(0x00037A), RUNE_C(0x00037A)}, - {RUNE_C(0x000384), RUNE_C(0x000385)}, - {RUNE_C(0x000387), RUNE_C(0x000387)}, - {RUNE_C(0x000483), RUNE_C(0x000489)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x00055F), RUNE_C(0x00055F)}, - {RUNE_C(0x000591), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C5)}, - {RUNE_C(0x0005C7), RUNE_C(0x0005C7)}, - {RUNE_C(0x0005F4), RUNE_C(0x0005F4)}, - {RUNE_C(0x000600), RUNE_C(0x000605)}, - {RUNE_C(0x000610), RUNE_C(0x00061A)}, - {RUNE_C(0x00061C), RUNE_C(0x00061C)}, - {RUNE_C(0x000640), RUNE_C(0x000640)}, - {RUNE_C(0x00064B), RUNE_C(0x00065F)}, - {RUNE_C(0x000670), RUNE_C(0x000670)}, - {RUNE_C(0x0006D6), RUNE_C(0x0006DD)}, - {RUNE_C(0x0006DF), RUNE_C(0x0006E8)}, - {RUNE_C(0x0006EA), RUNE_C(0x0006ED)}, - {RUNE_C(0x00070F), RUNE_C(0x00070F)}, - {RUNE_C(0x000711), RUNE_C(0x000711)}, - {RUNE_C(0x000730), RUNE_C(0x00074A)}, - {RUNE_C(0x0007A6), RUNE_C(0x0007B0)}, - {RUNE_C(0x0007EB), RUNE_C(0x0007F5)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x0007FD), RUNE_C(0x0007FD)}, - {RUNE_C(0x000816), RUNE_C(0x00082D)}, - {RUNE_C(0x000859), RUNE_C(0x00085B)}, - {RUNE_C(0x000888), RUNE_C(0x000888)}, - {RUNE_C(0x000890), RUNE_C(0x000891)}, - {RUNE_C(0x000898), RUNE_C(0x00089F)}, - {RUNE_C(0x0008C9), RUNE_C(0x000902)}, - {RUNE_C(0x00093A), RUNE_C(0x00093A)}, - {RUNE_C(0x00093C), RUNE_C(0x00093C)}, - {RUNE_C(0x000941), RUNE_C(0x000948)}, - {RUNE_C(0x00094D), RUNE_C(0x00094D)}, - {RUNE_C(0x000951), RUNE_C(0x000957)}, - {RUNE_C(0x000962), RUNE_C(0x000963)}, - {RUNE_C(0x000971), RUNE_C(0x000971)}, - {RUNE_C(0x000981), RUNE_C(0x000981)}, - {RUNE_C(0x0009BC), RUNE_C(0x0009BC)}, - {RUNE_C(0x0009C1), RUNE_C(0x0009C4)}, - {RUNE_C(0x0009CD), RUNE_C(0x0009CD)}, - {RUNE_C(0x0009E2), RUNE_C(0x0009E3)}, - {RUNE_C(0x0009FE), RUNE_C(0x0009FE)}, - {RUNE_C(0x000A01), RUNE_C(0x000A02)}, - {RUNE_C(0x000A3C), RUNE_C(0x000A3C)}, - {RUNE_C(0x000A41), RUNE_C(0x000A42)}, - {RUNE_C(0x000A47), RUNE_C(0x000A48)}, - {RUNE_C(0x000A4B), RUNE_C(0x000A4D)}, - {RUNE_C(0x000A51), RUNE_C(0x000A51)}, - {RUNE_C(0x000A70), RUNE_C(0x000A71)}, - {RUNE_C(0x000A75), RUNE_C(0x000A75)}, - {RUNE_C(0x000A81), RUNE_C(0x000A82)}, - {RUNE_C(0x000ABC), RUNE_C(0x000ABC)}, - {RUNE_C(0x000AC1), RUNE_C(0x000AC5)}, - {RUNE_C(0x000AC7), RUNE_C(0x000AC8)}, - {RUNE_C(0x000ACD), RUNE_C(0x000ACD)}, - {RUNE_C(0x000AE2), RUNE_C(0x000AE3)}, - {RUNE_C(0x000AFA), RUNE_C(0x000AFF)}, - {RUNE_C(0x000B01), RUNE_C(0x000B01)}, - {RUNE_C(0x000B3C), RUNE_C(0x000B3C)}, - {RUNE_C(0x000B3F), RUNE_C(0x000B3F)}, - {RUNE_C(0x000B41), RUNE_C(0x000B44)}, - {RUNE_C(0x000B4D), RUNE_C(0x000B4D)}, - {RUNE_C(0x000B55), RUNE_C(0x000B56)}, - {RUNE_C(0x000B62), RUNE_C(0x000B63)}, - {RUNE_C(0x000B82), RUNE_C(0x000B82)}, - {RUNE_C(0x000BC0), RUNE_C(0x000BC0)}, - {RUNE_C(0x000BCD), RUNE_C(0x000BCD)}, - {RUNE_C(0x000C00), RUNE_C(0x000C00)}, - {RUNE_C(0x000C04), RUNE_C(0x000C04)}, - {RUNE_C(0x000C3C), RUNE_C(0x000C3C)}, - {RUNE_C(0x000C3E), RUNE_C(0x000C40)}, - {RUNE_C(0x000C46), RUNE_C(0x000C48)}, - {RUNE_C(0x000C4A), RUNE_C(0x000C4D)}, - {RUNE_C(0x000C55), RUNE_C(0x000C56)}, - {RUNE_C(0x000C62), RUNE_C(0x000C63)}, - {RUNE_C(0x000C81), RUNE_C(0x000C81)}, - {RUNE_C(0x000CBC), RUNE_C(0x000CBC)}, - {RUNE_C(0x000CBF), RUNE_C(0x000CBF)}, - {RUNE_C(0x000CC6), RUNE_C(0x000CC6)}, - {RUNE_C(0x000CCC), RUNE_C(0x000CCD)}, - {RUNE_C(0x000CE2), RUNE_C(0x000CE3)}, - {RUNE_C(0x000D00), RUNE_C(0x000D01)}, - {RUNE_C(0x000D3B), RUNE_C(0x000D3C)}, - {RUNE_C(0x000D41), RUNE_C(0x000D44)}, - {RUNE_C(0x000D4D), RUNE_C(0x000D4D)}, - {RUNE_C(0x000D62), RUNE_C(0x000D63)}, - {RUNE_C(0x000D81), RUNE_C(0x000D81)}, - {RUNE_C(0x000DCA), RUNE_C(0x000DCA)}, - {RUNE_C(0x000DD2), RUNE_C(0x000DD4)}, - {RUNE_C(0x000DD6), RUNE_C(0x000DD6)}, - {RUNE_C(0x000E31), RUNE_C(0x000E31)}, - {RUNE_C(0x000E34), RUNE_C(0x000E3A)}, - {RUNE_C(0x000E46), RUNE_C(0x000E4E)}, - {RUNE_C(0x000EB1), RUNE_C(0x000EB1)}, - {RUNE_C(0x000EB4), RUNE_C(0x000EBC)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000EC8), RUNE_C(0x000ECE)}, - {RUNE_C(0x000F18), RUNE_C(0x000F19)}, - {RUNE_C(0x000F35), RUNE_C(0x000F35)}, - {RUNE_C(0x000F37), RUNE_C(0x000F37)}, - {RUNE_C(0x000F39), RUNE_C(0x000F39)}, - {RUNE_C(0x000F71), RUNE_C(0x000F7E)}, - {RUNE_C(0x000F80), RUNE_C(0x000F84)}, - {RUNE_C(0x000F86), RUNE_C(0x000F87)}, - {RUNE_C(0x000F8D), RUNE_C(0x000F97)}, - {RUNE_C(0x000F99), RUNE_C(0x000FBC)}, - {RUNE_C(0x000FC6), RUNE_C(0x000FC6)}, - {RUNE_C(0x00102D), RUNE_C(0x001030)}, - {RUNE_C(0x001032), RUNE_C(0x001037)}, - {RUNE_C(0x001039), RUNE_C(0x00103A)}, - {RUNE_C(0x00103D), RUNE_C(0x00103E)}, - {RUNE_C(0x001058), RUNE_C(0x001059)}, - {RUNE_C(0x00105E), RUNE_C(0x001060)}, - {RUNE_C(0x001071), RUNE_C(0x001074)}, - {RUNE_C(0x001082), RUNE_C(0x001082)}, - {RUNE_C(0x001085), RUNE_C(0x001086)}, - {RUNE_C(0x00108D), RUNE_C(0x00108D)}, - {RUNE_C(0x00109D), RUNE_C(0x00109D)}, - {RUNE_C(0x0010FC), RUNE_C(0x0010FC)}, - {RUNE_C(0x00135D), RUNE_C(0x00135F)}, - {RUNE_C(0x001712), RUNE_C(0x001714)}, - {RUNE_C(0x001732), RUNE_C(0x001733)}, - {RUNE_C(0x001752), RUNE_C(0x001753)}, - {RUNE_C(0x001772), RUNE_C(0x001773)}, - {RUNE_C(0x0017B4), RUNE_C(0x0017B5)}, - {RUNE_C(0x0017B7), RUNE_C(0x0017BD)}, - {RUNE_C(0x0017C6), RUNE_C(0x0017C6)}, - {RUNE_C(0x0017C9), RUNE_C(0x0017D3)}, - {RUNE_C(0x0017D7), RUNE_C(0x0017D7)}, - {RUNE_C(0x0017DD), RUNE_C(0x0017DD)}, - {RUNE_C(0x00180B), RUNE_C(0x00180F)}, - {RUNE_C(0x001843), RUNE_C(0x001843)}, - {RUNE_C(0x001885), RUNE_C(0x001886)}, - {RUNE_C(0x0018A9), RUNE_C(0x0018A9)}, - {RUNE_C(0x001920), RUNE_C(0x001922)}, - {RUNE_C(0x001927), RUNE_C(0x001928)}, - {RUNE_C(0x001932), RUNE_C(0x001932)}, - {RUNE_C(0x001939), RUNE_C(0x00193B)}, - {RUNE_C(0x001A17), RUNE_C(0x001A18)}, - {RUNE_C(0x001A1B), RUNE_C(0x001A1B)}, - {RUNE_C(0x001A56), RUNE_C(0x001A56)}, - {RUNE_C(0x001A58), RUNE_C(0x001A5E)}, - {RUNE_C(0x001A60), RUNE_C(0x001A60)}, - {RUNE_C(0x001A62), RUNE_C(0x001A62)}, - {RUNE_C(0x001A65), RUNE_C(0x001A6C)}, - {RUNE_C(0x001A73), RUNE_C(0x001A7C)}, - {RUNE_C(0x001A7F), RUNE_C(0x001A7F)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001AB0), RUNE_C(0x001ACE)}, - {RUNE_C(0x001B00), RUNE_C(0x001B03)}, - {RUNE_C(0x001B34), RUNE_C(0x001B34)}, - {RUNE_C(0x001B36), RUNE_C(0x001B3A)}, - {RUNE_C(0x001B3C), RUNE_C(0x001B3C)}, - {RUNE_C(0x001B42), RUNE_C(0x001B42)}, - {RUNE_C(0x001B6B), RUNE_C(0x001B73)}, - {RUNE_C(0x001B80), RUNE_C(0x001B81)}, - {RUNE_C(0x001BA2), RUNE_C(0x001BA5)}, - {RUNE_C(0x001BA8), RUNE_C(0x001BA9)}, - {RUNE_C(0x001BAB), RUNE_C(0x001BAD)}, - {RUNE_C(0x001BE6), RUNE_C(0x001BE6)}, - {RUNE_C(0x001BE8), RUNE_C(0x001BE9)}, - {RUNE_C(0x001BED), RUNE_C(0x001BED)}, - {RUNE_C(0x001BEF), RUNE_C(0x001BF1)}, - {RUNE_C(0x001C2C), RUNE_C(0x001C33)}, - {RUNE_C(0x001C36), RUNE_C(0x001C37)}, - {RUNE_C(0x001C78), RUNE_C(0x001C7D)}, - {RUNE_C(0x001CD0), RUNE_C(0x001CD2)}, - {RUNE_C(0x001CD4), RUNE_C(0x001CE0)}, - {RUNE_C(0x001CE2), RUNE_C(0x001CE8)}, - {RUNE_C(0x001CED), RUNE_C(0x001CED)}, - {RUNE_C(0x001CF4), RUNE_C(0x001CF4)}, - {RUNE_C(0x001CF8), RUNE_C(0x001CF9)}, - {RUNE_C(0x001D2C), RUNE_C(0x001D6A)}, - {RUNE_C(0x001D78), RUNE_C(0x001D78)}, - {RUNE_C(0x001D9B), RUNE_C(0x001DFF)}, - {RUNE_C(0x001FBD), RUNE_C(0x001FBD)}, - {RUNE_C(0x001FBF), RUNE_C(0x001FC1)}, - {RUNE_C(0x001FCD), RUNE_C(0x001FCF)}, - {RUNE_C(0x001FDD), RUNE_C(0x001FDF)}, - {RUNE_C(0x001FED), RUNE_C(0x001FEF)}, - {RUNE_C(0x001FFD), RUNE_C(0x001FFE)}, - {RUNE_C(0x00200B), RUNE_C(0x00200F)}, - {RUNE_C(0x002018), RUNE_C(0x002019)}, - {RUNE_C(0x002024), RUNE_C(0x002024)}, - {RUNE_C(0x002027), RUNE_C(0x002027)}, - {RUNE_C(0x00202A), RUNE_C(0x00202E)}, - {RUNE_C(0x002060), RUNE_C(0x002064)}, - {RUNE_C(0x002066), RUNE_C(0x00206F)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x0020D0), RUNE_C(0x0020F0)}, - {RUNE_C(0x002C7C), RUNE_C(0x002C7D)}, - {RUNE_C(0x002CEF), RUNE_C(0x002CF1)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002D7F), RUNE_C(0x002D7F)}, - {RUNE_C(0x002DE0), RUNE_C(0x002DFF)}, - {RUNE_C(0x002E2F), RUNE_C(0x002E2F)}, - {RUNE_C(0x003005), RUNE_C(0x003005)}, - {RUNE_C(0x00302A), RUNE_C(0x00302D)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x00303B), RUNE_C(0x00303B)}, - {RUNE_C(0x003099), RUNE_C(0x00309E)}, - {RUNE_C(0x0030FC), RUNE_C(0x0030FE)}, - {RUNE_C(0x00A015), RUNE_C(0x00A015)}, - {RUNE_C(0x00A4F8), RUNE_C(0x00A4FD)}, - {RUNE_C(0x00A60C), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A66F), RUNE_C(0x00A672)}, - {RUNE_C(0x00A674), RUNE_C(0x00A67D)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A67F)}, - {RUNE_C(0x00A69C), RUNE_C(0x00A69F)}, - {RUNE_C(0x00A6F0), RUNE_C(0x00A6F1)}, - {RUNE_C(0x00A700), RUNE_C(0x00A721)}, - {RUNE_C(0x00A770), RUNE_C(0x00A770)}, - {RUNE_C(0x00A788), RUNE_C(0x00A78A)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A7F4)}, - {RUNE_C(0x00A7F8), RUNE_C(0x00A7F9)}, - {RUNE_C(0x00A802), RUNE_C(0x00A802)}, - {RUNE_C(0x00A806), RUNE_C(0x00A806)}, - {RUNE_C(0x00A80B), RUNE_C(0x00A80B)}, - {RUNE_C(0x00A825), RUNE_C(0x00A826)}, - {RUNE_C(0x00A82C), RUNE_C(0x00A82C)}, - {RUNE_C(0x00A8C4), RUNE_C(0x00A8C5)}, - {RUNE_C(0x00A8E0), RUNE_C(0x00A8F1)}, - {RUNE_C(0x00A8FF), RUNE_C(0x00A8FF)}, - {RUNE_C(0x00A926), RUNE_C(0x00A92D)}, - {RUNE_C(0x00A947), RUNE_C(0x00A951)}, - {RUNE_C(0x00A980), RUNE_C(0x00A982)}, - {RUNE_C(0x00A9B3), RUNE_C(0x00A9B3)}, - {RUNE_C(0x00A9B6), RUNE_C(0x00A9B9)}, - {RUNE_C(0x00A9BC), RUNE_C(0x00A9BD)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9CF)}, - {RUNE_C(0x00A9E5), RUNE_C(0x00A9E6)}, - {RUNE_C(0x00AA29), RUNE_C(0x00AA2E)}, - {RUNE_C(0x00AA31), RUNE_C(0x00AA32)}, - {RUNE_C(0x00AA35), RUNE_C(0x00AA36)}, - {RUNE_C(0x00AA43), RUNE_C(0x00AA43)}, - {RUNE_C(0x00AA4C), RUNE_C(0x00AA4C)}, - {RUNE_C(0x00AA70), RUNE_C(0x00AA70)}, - {RUNE_C(0x00AA7C), RUNE_C(0x00AA7C)}, - {RUNE_C(0x00AAB0), RUNE_C(0x00AAB0)}, - {RUNE_C(0x00AAB2), RUNE_C(0x00AAB4)}, - {RUNE_C(0x00AAB7), RUNE_C(0x00AAB8)}, - {RUNE_C(0x00AABE), RUNE_C(0x00AABF)}, - {RUNE_C(0x00AAC1), RUNE_C(0x00AAC1)}, - {RUNE_C(0x00AADD), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAEC), RUNE_C(0x00AAED)}, - {RUNE_C(0x00AAF3), RUNE_C(0x00AAF4)}, - {RUNE_C(0x00AAF6), RUNE_C(0x00AAF6)}, - {RUNE_C(0x00AB5B), RUNE_C(0x00AB5F)}, - {RUNE_C(0x00AB69), RUNE_C(0x00AB6B)}, - {RUNE_C(0x00ABE5), RUNE_C(0x00ABE5)}, - {RUNE_C(0x00ABE8), RUNE_C(0x00ABE8)}, - {RUNE_C(0x00ABED), RUNE_C(0x00ABED)}, - {RUNE_C(0x00FB1E), RUNE_C(0x00FB1E)}, - {RUNE_C(0x00FBB2), RUNE_C(0x00FBC2)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE0F)}, - {RUNE_C(0x00FE13), RUNE_C(0x00FE13)}, - {RUNE_C(0x00FE20), RUNE_C(0x00FE2F)}, - {RUNE_C(0x00FE52), RUNE_C(0x00FE52)}, - {RUNE_C(0x00FE55), RUNE_C(0x00FE55)}, - {RUNE_C(0x00FEFF), RUNE_C(0x00FEFF)}, - {RUNE_C(0x00FF07), RUNE_C(0x00FF07)}, - {RUNE_C(0x00FF0E), RUNE_C(0x00FF0E)}, - {RUNE_C(0x00FF1A), RUNE_C(0x00FF1A)}, - {RUNE_C(0x00FF3E), RUNE_C(0x00FF3E)}, - {RUNE_C(0x00FF40), RUNE_C(0x00FF40)}, - {RUNE_C(0x00FF70), RUNE_C(0x00FF70)}, - {RUNE_C(0x00FF9E), RUNE_C(0x00FF9F)}, - {RUNE_C(0x00FFE3), RUNE_C(0x00FFE3)}, - {RUNE_C(0x00FFF9), RUNE_C(0x00FFFB)}, - {RUNE_C(0x0101FD), RUNE_C(0x0101FD)}, - {RUNE_C(0x0102E0), RUNE_C(0x0102E0)}, - {RUNE_C(0x010376), RUNE_C(0x01037A)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010A01), RUNE_C(0x010A03)}, - {RUNE_C(0x010A05), RUNE_C(0x010A06)}, - {RUNE_C(0x010A0C), RUNE_C(0x010A0F)}, - {RUNE_C(0x010A38), RUNE_C(0x010A3A)}, - {RUNE_C(0x010A3F), RUNE_C(0x010A3F)}, - {RUNE_C(0x010AE5), RUNE_C(0x010AE6)}, - {RUNE_C(0x010D24), RUNE_C(0x010D27)}, - {RUNE_C(0x010EAB), RUNE_C(0x010EAC)}, - {RUNE_C(0x010EFD), RUNE_C(0x010EFF)}, - {RUNE_C(0x010F46), RUNE_C(0x010F50)}, - {RUNE_C(0x010F82), RUNE_C(0x010F85)}, - {RUNE_C(0x011001), RUNE_C(0x011001)}, - {RUNE_C(0x011038), RUNE_C(0x011046)}, - {RUNE_C(0x011070), RUNE_C(0x011070)}, - {RUNE_C(0x011073), RUNE_C(0x011074)}, - {RUNE_C(0x01107F), RUNE_C(0x011081)}, - {RUNE_C(0x0110B3), RUNE_C(0x0110B6)}, - {RUNE_C(0x0110B9), RUNE_C(0x0110BA)}, - {RUNE_C(0x0110BD), RUNE_C(0x0110BD)}, - {RUNE_C(0x0110C2), RUNE_C(0x0110C2)}, - {RUNE_C(0x0110CD), RUNE_C(0x0110CD)}, - {RUNE_C(0x011100), RUNE_C(0x011102)}, - {RUNE_C(0x011127), RUNE_C(0x01112B)}, - {RUNE_C(0x01112D), RUNE_C(0x011134)}, - {RUNE_C(0x011173), RUNE_C(0x011173)}, - {RUNE_C(0x011180), RUNE_C(0x011181)}, - {RUNE_C(0x0111B6), RUNE_C(0x0111BE)}, - {RUNE_C(0x0111C9), RUNE_C(0x0111CC)}, - {RUNE_C(0x0111CF), RUNE_C(0x0111CF)}, - {RUNE_C(0x01122F), RUNE_C(0x011231)}, - {RUNE_C(0x011234), RUNE_C(0x011234)}, - {RUNE_C(0x011236), RUNE_C(0x011237)}, - {RUNE_C(0x01123E), RUNE_C(0x01123E)}, - {RUNE_C(0x011241), RUNE_C(0x011241)}, - {RUNE_C(0x0112DF), RUNE_C(0x0112DF)}, - {RUNE_C(0x0112E3), RUNE_C(0x0112EA)}, - {RUNE_C(0x011300), RUNE_C(0x011301)}, - {RUNE_C(0x01133B), RUNE_C(0x01133C)}, - {RUNE_C(0x011340), RUNE_C(0x011340)}, - {RUNE_C(0x011366), RUNE_C(0x01136C)}, - {RUNE_C(0x011370), RUNE_C(0x011374)}, - {RUNE_C(0x011438), RUNE_C(0x01143F)}, - {RUNE_C(0x011442), RUNE_C(0x011444)}, - {RUNE_C(0x011446), RUNE_C(0x011446)}, - {RUNE_C(0x01145E), RUNE_C(0x01145E)}, - {RUNE_C(0x0114B3), RUNE_C(0x0114B8)}, - {RUNE_C(0x0114BA), RUNE_C(0x0114BA)}, - {RUNE_C(0x0114BF), RUNE_C(0x0114C0)}, - {RUNE_C(0x0114C2), RUNE_C(0x0114C3)}, - {RUNE_C(0x0115B2), RUNE_C(0x0115B5)}, - {RUNE_C(0x0115BC), RUNE_C(0x0115BD)}, - {RUNE_C(0x0115BF), RUNE_C(0x0115C0)}, - {RUNE_C(0x0115DC), RUNE_C(0x0115DD)}, - {RUNE_C(0x011633), RUNE_C(0x01163A)}, - {RUNE_C(0x01163D), RUNE_C(0x01163D)}, - {RUNE_C(0x01163F), RUNE_C(0x011640)}, - {RUNE_C(0x0116AB), RUNE_C(0x0116AB)}, - {RUNE_C(0x0116AD), RUNE_C(0x0116AD)}, - {RUNE_C(0x0116B0), RUNE_C(0x0116B5)}, - {RUNE_C(0x0116B7), RUNE_C(0x0116B7)}, - {RUNE_C(0x01171D), RUNE_C(0x01171F)}, - {RUNE_C(0x011722), RUNE_C(0x011725)}, - {RUNE_C(0x011727), RUNE_C(0x01172B)}, - {RUNE_C(0x01182F), RUNE_C(0x011837)}, - {RUNE_C(0x011839), RUNE_C(0x01183A)}, - {RUNE_C(0x01193B), RUNE_C(0x01193C)}, - {RUNE_C(0x01193E), RUNE_C(0x01193E)}, - {RUNE_C(0x011943), RUNE_C(0x011943)}, - {RUNE_C(0x0119D4), RUNE_C(0x0119D7)}, - {RUNE_C(0x0119DA), RUNE_C(0x0119DB)}, - {RUNE_C(0x0119E0), RUNE_C(0x0119E0)}, - {RUNE_C(0x011A01), RUNE_C(0x011A0A)}, - {RUNE_C(0x011A33), RUNE_C(0x011A38)}, - {RUNE_C(0x011A3B), RUNE_C(0x011A3E)}, - {RUNE_C(0x011A47), RUNE_C(0x011A47)}, - {RUNE_C(0x011A51), RUNE_C(0x011A56)}, - {RUNE_C(0x011A59), RUNE_C(0x011A5B)}, - {RUNE_C(0x011A8A), RUNE_C(0x011A96)}, - {RUNE_C(0x011A98), RUNE_C(0x011A99)}, - {RUNE_C(0x011C30), RUNE_C(0x011C36)}, - {RUNE_C(0x011C38), RUNE_C(0x011C3D)}, - {RUNE_C(0x011C3F), RUNE_C(0x011C3F)}, - {RUNE_C(0x011C92), RUNE_C(0x011CA7)}, - {RUNE_C(0x011CAA), RUNE_C(0x011CB0)}, - {RUNE_C(0x011CB2), RUNE_C(0x011CB3)}, - {RUNE_C(0x011CB5), RUNE_C(0x011CB6)}, - {RUNE_C(0x011D31), RUNE_C(0x011D36)}, - {RUNE_C(0x011D3A), RUNE_C(0x011D3A)}, - {RUNE_C(0x011D3C), RUNE_C(0x011D3D)}, - {RUNE_C(0x011D3F), RUNE_C(0x011D45)}, - {RUNE_C(0x011D47), RUNE_C(0x011D47)}, - {RUNE_C(0x011D90), RUNE_C(0x011D91)}, - {RUNE_C(0x011D95), RUNE_C(0x011D95)}, - {RUNE_C(0x011D97), RUNE_C(0x011D97)}, - {RUNE_C(0x011EF3), RUNE_C(0x011EF4)}, - {RUNE_C(0x011F00), RUNE_C(0x011F01)}, - {RUNE_C(0x011F36), RUNE_C(0x011F3A)}, - {RUNE_C(0x011F40), RUNE_C(0x011F40)}, - {RUNE_C(0x011F42), RUNE_C(0x011F42)}, - {RUNE_C(0x013430), RUNE_C(0x013440)}, - {RUNE_C(0x013447), RUNE_C(0x013455)}, - {RUNE_C(0x016AF0), RUNE_C(0x016AF4)}, - {RUNE_C(0x016B30), RUNE_C(0x016B36)}, - {RUNE_C(0x016B40), RUNE_C(0x016B43)}, - {RUNE_C(0x016F4F), RUNE_C(0x016F4F)}, - {RUNE_C(0x016F8F), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE4)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01BC9D), RUNE_C(0x01BC9E)}, - {RUNE_C(0x01BCA0), RUNE_C(0x01BCA3)}, - {RUNE_C(0x01CF00), RUNE_C(0x01CF2D)}, - {RUNE_C(0x01CF30), RUNE_C(0x01CF46)}, - {RUNE_C(0x01D167), RUNE_C(0x01D169)}, - {RUNE_C(0x01D173), RUNE_C(0x01D182)}, - {RUNE_C(0x01D185), RUNE_C(0x01D18B)}, - {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD)}, - {RUNE_C(0x01D242), RUNE_C(0x01D244)}, - {RUNE_C(0x01DA00), RUNE_C(0x01DA36)}, - {RUNE_C(0x01DA3B), RUNE_C(0x01DA6C)}, - {RUNE_C(0x01DA75), RUNE_C(0x01DA75)}, - {RUNE_C(0x01DA84), RUNE_C(0x01DA84)}, - {RUNE_C(0x01DA9B), RUNE_C(0x01DA9F)}, - {RUNE_C(0x01DAA1), RUNE_C(0x01DAAF)}, - {RUNE_C(0x01E000), RUNE_C(0x01E006)}, - {RUNE_C(0x01E008), RUNE_C(0x01E018)}, - {RUNE_C(0x01E01B), RUNE_C(0x01E021)}, - {RUNE_C(0x01E023), RUNE_C(0x01E024)}, - {RUNE_C(0x01E026), RUNE_C(0x01E02A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E08F), RUNE_C(0x01E08F)}, - {RUNE_C(0x01E130), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E2AE), RUNE_C(0x01E2AE)}, - {RUNE_C(0x01E2EC), RUNE_C(0x01E2EF)}, - {RUNE_C(0x01E4EB), RUNE_C(0x01E4EF)}, - {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6)}, - {RUNE_C(0x01E944), RUNE_C(0x01E94B)}, - {RUNE_C(0x01F3FB), RUNE_C(0x01F3FF)}, - {RUNE_C(0x0E0001), RUNE_C(0x0E0001)}, - {RUNE_C(0x0E0020), RUNE_C(0x0E007F)}, - {RUNE_C(0x0E0100), RUNE_C(0x0E01EF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x90, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x30, 0x04}, + {0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00}, + {0x3F, 0x00, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0xBF, 0xFF, 0x3D, 0x00, 0x00}, + {0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x24}, + {0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x01, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, + 0xFE, 0x21, 0xFE, 0x00, 0x0C, 0x00, 0x02, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x1E, 0x20, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x40}, + {0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00}, + {0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0xBE, 0x21, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, + 0x1E, 0x20, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xC1, 0x3D, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, + 0x40, 0x30, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x1E, 0x20, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x07, + 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x1F, + 0x40, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F}, + {0xDF, 0xE0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFD, 0x66, + 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0x1E, 0x00}, + {0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, + 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x3F, + 0x40, 0xFE, 0x8F, 0x20, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x7F, 0xE5, 0x1F, 0xF8, 0x9F}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xFF, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x17, + 0x04, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x3C, 0x3B, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xA3, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xCF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF7, 0xFF, 0xFD, 0x21, 0x10, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01}, + {0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, + 0x03, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x60}, + {0x00, 0xF8, 0x00, 0x03, 0x90, 0x7C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF, 0x02, 0x80}, + {0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x20, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3E, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70}, + {0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF7, 0xBF}, + {0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x03}, + {0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, + 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x33, + 0x00, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x66, 0x00, + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xC1, + 0x02, 0x00, 0x00, 0x20, 0x00, 0x30, 0x58, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0x00, 0x0E, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x08, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + {0x80, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0E}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x6E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, + 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0x00, 0x00, 0x80, 0xEF, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, + 0x00, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xD3, 0x40, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xF8, 0x07, 0x00, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x01, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x5C, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x85, + 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xB0, + 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xA7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xE0, 0xBC, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0x0C, 0x01, 0x00, 0x00, 0x00}, + {0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x79, + 0x80, 0x00, 0x7E, 0x0E, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xFC, 0x7F, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFC, 0x6D, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xB4, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x81, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0x00, 0x00, 0x00, 0x60, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xF8, 0xFF}, + {0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00}, + {0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8}, + {0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_ci(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_cwcf.c b/lib/unicode/prop/uprop_is_cwcf.c index 809e4c5..246c354 100644 --- a/lib/unicode/prop/uprop_is_cwcf.c +++ b/lib/unicode/prop/uprop_is_cwcf.c @@ -1,646 +1,392 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 10, 11, + 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, 6, 17, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 18, 6, 6, 6, 19, + 6, 6, 6, 6, 20, 21, 6, 6, 6, 6, 6, 6, 22, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 24, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x000100)}, - {RUNE_C(0x000102), RUNE_C(0x000102)}, - {RUNE_C(0x000104), RUNE_C(0x000104)}, - {RUNE_C(0x000106), RUNE_C(0x000106)}, - {RUNE_C(0x000108), RUNE_C(0x000108)}, - {RUNE_C(0x00010A), RUNE_C(0x00010A)}, - {RUNE_C(0x00010C), RUNE_C(0x00010C)}, - {RUNE_C(0x00010E), RUNE_C(0x00010E)}, - {RUNE_C(0x000110), RUNE_C(0x000110)}, - {RUNE_C(0x000112), RUNE_C(0x000112)}, - {RUNE_C(0x000114), RUNE_C(0x000114)}, - {RUNE_C(0x000116), RUNE_C(0x000116)}, - {RUNE_C(0x000118), RUNE_C(0x000118)}, - {RUNE_C(0x00011A), RUNE_C(0x00011A)}, - {RUNE_C(0x00011C), RUNE_C(0x00011C)}, - {RUNE_C(0x00011E), RUNE_C(0x00011E)}, - {RUNE_C(0x000120), RUNE_C(0x000120)}, - {RUNE_C(0x000122), RUNE_C(0x000122)}, - {RUNE_C(0x000124), RUNE_C(0x000124)}, - {RUNE_C(0x000126), RUNE_C(0x000126)}, - {RUNE_C(0x000128), RUNE_C(0x000128)}, - {RUNE_C(0x00012A), RUNE_C(0x00012A)}, - {RUNE_C(0x00012C), RUNE_C(0x00012C)}, - {RUNE_C(0x00012E), RUNE_C(0x00012E)}, - {RUNE_C(0x000130), RUNE_C(0x000130)}, - {RUNE_C(0x000132), RUNE_C(0x000132)}, - {RUNE_C(0x000134), RUNE_C(0x000134)}, - {RUNE_C(0x000136), RUNE_C(0x000136)}, - {RUNE_C(0x000139), RUNE_C(0x000139)}, - {RUNE_C(0x00013B), RUNE_C(0x00013B)}, - {RUNE_C(0x00013D), RUNE_C(0x00013D)}, - {RUNE_C(0x00013F), RUNE_C(0x00013F)}, - {RUNE_C(0x000141), RUNE_C(0x000141)}, - {RUNE_C(0x000143), RUNE_C(0x000143)}, - {RUNE_C(0x000145), RUNE_C(0x000145)}, - {RUNE_C(0x000147), RUNE_C(0x000147)}, - {RUNE_C(0x000149), RUNE_C(0x00014A)}, - {RUNE_C(0x00014C), RUNE_C(0x00014C)}, - {RUNE_C(0x00014E), RUNE_C(0x00014E)}, - {RUNE_C(0x000150), RUNE_C(0x000150)}, - {RUNE_C(0x000152), RUNE_C(0x000152)}, - {RUNE_C(0x000154), RUNE_C(0x000154)}, - {RUNE_C(0x000156), RUNE_C(0x000156)}, - {RUNE_C(0x000158), RUNE_C(0x000158)}, - {RUNE_C(0x00015A), RUNE_C(0x00015A)}, - {RUNE_C(0x00015C), RUNE_C(0x00015C)}, - {RUNE_C(0x00015E), RUNE_C(0x00015E)}, - {RUNE_C(0x000160), RUNE_C(0x000160)}, - {RUNE_C(0x000162), RUNE_C(0x000162)}, - {RUNE_C(0x000164), RUNE_C(0x000164)}, - {RUNE_C(0x000166), RUNE_C(0x000166)}, - {RUNE_C(0x000168), RUNE_C(0x000168)}, - {RUNE_C(0x00016A), RUNE_C(0x00016A)}, - {RUNE_C(0x00016C), RUNE_C(0x00016C)}, - {RUNE_C(0x00016E), RUNE_C(0x00016E)}, - {RUNE_C(0x000170), RUNE_C(0x000170)}, - {RUNE_C(0x000172), RUNE_C(0x000172)}, - {RUNE_C(0x000174), RUNE_C(0x000174)}, - {RUNE_C(0x000176), RUNE_C(0x000176)}, - {RUNE_C(0x000178), RUNE_C(0x000179)}, - {RUNE_C(0x00017B), RUNE_C(0x00017B)}, - {RUNE_C(0x00017D), RUNE_C(0x00017D)}, - {RUNE_C(0x00017F), RUNE_C(0x00017F)}, - {RUNE_C(0x000181), RUNE_C(0x000182)}, - {RUNE_C(0x000184), RUNE_C(0x000184)}, - {RUNE_C(0x000186), RUNE_C(0x000187)}, - {RUNE_C(0x000189), RUNE_C(0x00018B)}, - {RUNE_C(0x00018E), RUNE_C(0x000191)}, - {RUNE_C(0x000193), RUNE_C(0x000194)}, - {RUNE_C(0x000196), RUNE_C(0x000198)}, - {RUNE_C(0x00019C), RUNE_C(0x00019D)}, - {RUNE_C(0x00019F), RUNE_C(0x0001A0)}, - {RUNE_C(0x0001A2), RUNE_C(0x0001A2)}, - {RUNE_C(0x0001A4), RUNE_C(0x0001A4)}, - {RUNE_C(0x0001A6), RUNE_C(0x0001A7)}, - {RUNE_C(0x0001A9), RUNE_C(0x0001A9)}, - {RUNE_C(0x0001AC), RUNE_C(0x0001AC)}, - {RUNE_C(0x0001AE), RUNE_C(0x0001AF)}, - {RUNE_C(0x0001B1), RUNE_C(0x0001B3)}, - {RUNE_C(0x0001B5), RUNE_C(0x0001B5)}, - {RUNE_C(0x0001B7), RUNE_C(0x0001B8)}, - {RUNE_C(0x0001BC), RUNE_C(0x0001BC)}, - {RUNE_C(0x0001C4), RUNE_C(0x0001C5)}, - {RUNE_C(0x0001C7), RUNE_C(0x0001C8)}, - {RUNE_C(0x0001CA), RUNE_C(0x0001CB)}, - {RUNE_C(0x0001CD), RUNE_C(0x0001CD)}, - {RUNE_C(0x0001CF), RUNE_C(0x0001CF)}, - {RUNE_C(0x0001D1), RUNE_C(0x0001D1)}, - {RUNE_C(0x0001D3), RUNE_C(0x0001D3)}, - {RUNE_C(0x0001D5), RUNE_C(0x0001D5)}, - {RUNE_C(0x0001D7), RUNE_C(0x0001D7)}, - {RUNE_C(0x0001D9), RUNE_C(0x0001D9)}, - {RUNE_C(0x0001DB), RUNE_C(0x0001DB)}, - {RUNE_C(0x0001DE), RUNE_C(0x0001DE)}, - {RUNE_C(0x0001E0), RUNE_C(0x0001E0)}, - {RUNE_C(0x0001E2), RUNE_C(0x0001E2)}, - {RUNE_C(0x0001E4), RUNE_C(0x0001E4)}, - {RUNE_C(0x0001E6), RUNE_C(0x0001E6)}, - {RUNE_C(0x0001E8), RUNE_C(0x0001E8)}, - {RUNE_C(0x0001EA), RUNE_C(0x0001EA)}, - {RUNE_C(0x0001EC), RUNE_C(0x0001EC)}, - {RUNE_C(0x0001EE), RUNE_C(0x0001EE)}, - {RUNE_C(0x0001F1), RUNE_C(0x0001F2)}, - {RUNE_C(0x0001F4), RUNE_C(0x0001F4)}, - {RUNE_C(0x0001F6), RUNE_C(0x0001F8)}, - {RUNE_C(0x0001FA), RUNE_C(0x0001FA)}, - {RUNE_C(0x0001FC), RUNE_C(0x0001FC)}, - {RUNE_C(0x0001FE), RUNE_C(0x0001FE)}, - {RUNE_C(0x000200), RUNE_C(0x000200)}, - {RUNE_C(0x000202), RUNE_C(0x000202)}, - {RUNE_C(0x000204), RUNE_C(0x000204)}, - {RUNE_C(0x000206), RUNE_C(0x000206)}, - {RUNE_C(0x000208), RUNE_C(0x000208)}, - {RUNE_C(0x00020A), RUNE_C(0x00020A)}, - {RUNE_C(0x00020C), RUNE_C(0x00020C)}, - {RUNE_C(0x00020E), RUNE_C(0x00020E)}, - {RUNE_C(0x000210), RUNE_C(0x000210)}, - {RUNE_C(0x000212), RUNE_C(0x000212)}, - {RUNE_C(0x000214), RUNE_C(0x000214)}, - {RUNE_C(0x000216), RUNE_C(0x000216)}, - {RUNE_C(0x000218), RUNE_C(0x000218)}, - {RUNE_C(0x00021A), RUNE_C(0x00021A)}, - {RUNE_C(0x00021C), RUNE_C(0x00021C)}, - {RUNE_C(0x00021E), RUNE_C(0x00021E)}, - {RUNE_C(0x000220), RUNE_C(0x000220)}, - {RUNE_C(0x000222), RUNE_C(0x000222)}, - {RUNE_C(0x000224), RUNE_C(0x000224)}, - {RUNE_C(0x000226), RUNE_C(0x000226)}, - {RUNE_C(0x000228), RUNE_C(0x000228)}, - {RUNE_C(0x00022A), RUNE_C(0x00022A)}, - {RUNE_C(0x00022C), RUNE_C(0x00022C)}, - {RUNE_C(0x00022E), RUNE_C(0x00022E)}, - {RUNE_C(0x000230), RUNE_C(0x000230)}, - {RUNE_C(0x000232), RUNE_C(0x000232)}, - {RUNE_C(0x00023A), RUNE_C(0x00023B)}, - {RUNE_C(0x00023D), RUNE_C(0x00023E)}, - {RUNE_C(0x000241), RUNE_C(0x000241)}, - {RUNE_C(0x000243), RUNE_C(0x000246)}, - {RUNE_C(0x000248), RUNE_C(0x000248)}, - {RUNE_C(0x00024A), RUNE_C(0x00024A)}, - {RUNE_C(0x00024C), RUNE_C(0x00024C)}, - {RUNE_C(0x00024E), RUNE_C(0x00024E)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000370), RUNE_C(0x000370)}, - {RUNE_C(0x000372), RUNE_C(0x000372)}, - {RUNE_C(0x000376), RUNE_C(0x000376)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x00038F)}, - {RUNE_C(0x000391), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003AB)}, - {RUNE_C(0x0003C2), RUNE_C(0x0003C2)}, - {RUNE_C(0x0003CF), RUNE_C(0x0003D1)}, - {RUNE_C(0x0003D5), RUNE_C(0x0003D6)}, - {RUNE_C(0x0003D8), RUNE_C(0x0003D8)}, - {RUNE_C(0x0003DA), RUNE_C(0x0003DA)}, - {RUNE_C(0x0003DC), RUNE_C(0x0003DC)}, - {RUNE_C(0x0003DE), RUNE_C(0x0003DE)}, - {RUNE_C(0x0003E0), RUNE_C(0x0003E0)}, - {RUNE_C(0x0003E2), RUNE_C(0x0003E2)}, - {RUNE_C(0x0003E4), RUNE_C(0x0003E4)}, - {RUNE_C(0x0003E6), RUNE_C(0x0003E6)}, - {RUNE_C(0x0003E8), RUNE_C(0x0003E8)}, - {RUNE_C(0x0003EA), RUNE_C(0x0003EA)}, - {RUNE_C(0x0003EC), RUNE_C(0x0003EC)}, - {RUNE_C(0x0003EE), RUNE_C(0x0003EE)}, - {RUNE_C(0x0003F0), RUNE_C(0x0003F1)}, - {RUNE_C(0x0003F4), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x0003F7)}, - {RUNE_C(0x0003F9), RUNE_C(0x0003FA)}, - {RUNE_C(0x0003FD), RUNE_C(0x00042F)}, - {RUNE_C(0x000460), RUNE_C(0x000460)}, - {RUNE_C(0x000462), RUNE_C(0x000462)}, - {RUNE_C(0x000464), RUNE_C(0x000464)}, - {RUNE_C(0x000466), RUNE_C(0x000466)}, - {RUNE_C(0x000468), RUNE_C(0x000468)}, - {RUNE_C(0x00046A), RUNE_C(0x00046A)}, - {RUNE_C(0x00046C), RUNE_C(0x00046C)}, - {RUNE_C(0x00046E), RUNE_C(0x00046E)}, - {RUNE_C(0x000470), RUNE_C(0x000470)}, - {RUNE_C(0x000472), RUNE_C(0x000472)}, - {RUNE_C(0x000474), RUNE_C(0x000474)}, - {RUNE_C(0x000476), RUNE_C(0x000476)}, - {RUNE_C(0x000478), RUNE_C(0x000478)}, - {RUNE_C(0x00047A), RUNE_C(0x00047A)}, - {RUNE_C(0x00047C), RUNE_C(0x00047C)}, - {RUNE_C(0x00047E), RUNE_C(0x00047E)}, - {RUNE_C(0x000480), RUNE_C(0x000480)}, - {RUNE_C(0x00048A), RUNE_C(0x00048A)}, - {RUNE_C(0x00048C), RUNE_C(0x00048C)}, - {RUNE_C(0x00048E), RUNE_C(0x00048E)}, - {RUNE_C(0x000490), RUNE_C(0x000490)}, - {RUNE_C(0x000492), RUNE_C(0x000492)}, - {RUNE_C(0x000494), RUNE_C(0x000494)}, - {RUNE_C(0x000496), RUNE_C(0x000496)}, - {RUNE_C(0x000498), RUNE_C(0x000498)}, - {RUNE_C(0x00049A), RUNE_C(0x00049A)}, - {RUNE_C(0x00049C), RUNE_C(0x00049C)}, - {RUNE_C(0x00049E), RUNE_C(0x00049E)}, - {RUNE_C(0x0004A0), RUNE_C(0x0004A0)}, - {RUNE_C(0x0004A2), RUNE_C(0x0004A2)}, - {RUNE_C(0x0004A4), RUNE_C(0x0004A4)}, - {RUNE_C(0x0004A6), RUNE_C(0x0004A6)}, - {RUNE_C(0x0004A8), RUNE_C(0x0004A8)}, - {RUNE_C(0x0004AA), RUNE_C(0x0004AA)}, - {RUNE_C(0x0004AC), RUNE_C(0x0004AC)}, - {RUNE_C(0x0004AE), RUNE_C(0x0004AE)}, - {RUNE_C(0x0004B0), RUNE_C(0x0004B0)}, - {RUNE_C(0x0004B2), RUNE_C(0x0004B2)}, - {RUNE_C(0x0004B4), RUNE_C(0x0004B4)}, - {RUNE_C(0x0004B6), RUNE_C(0x0004B6)}, - {RUNE_C(0x0004B8), RUNE_C(0x0004B8)}, - {RUNE_C(0x0004BA), RUNE_C(0x0004BA)}, - {RUNE_C(0x0004BC), RUNE_C(0x0004BC)}, - {RUNE_C(0x0004BE), RUNE_C(0x0004BE)}, - {RUNE_C(0x0004C0), RUNE_C(0x0004C1)}, - {RUNE_C(0x0004C3), RUNE_C(0x0004C3)}, - {RUNE_C(0x0004C5), RUNE_C(0x0004C5)}, - {RUNE_C(0x0004C7), RUNE_C(0x0004C7)}, - {RUNE_C(0x0004C9), RUNE_C(0x0004C9)}, - {RUNE_C(0x0004CB), RUNE_C(0x0004CB)}, - {RUNE_C(0x0004CD), RUNE_C(0x0004CD)}, - {RUNE_C(0x0004D0), RUNE_C(0x0004D0)}, - {RUNE_C(0x0004D2), RUNE_C(0x0004D2)}, - {RUNE_C(0x0004D4), RUNE_C(0x0004D4)}, - {RUNE_C(0x0004D6), RUNE_C(0x0004D6)}, - {RUNE_C(0x0004D8), RUNE_C(0x0004D8)}, - {RUNE_C(0x0004DA), RUNE_C(0x0004DA)}, - {RUNE_C(0x0004DC), RUNE_C(0x0004DC)}, - {RUNE_C(0x0004DE), RUNE_C(0x0004DE)}, - {RUNE_C(0x0004E0), RUNE_C(0x0004E0)}, - {RUNE_C(0x0004E2), RUNE_C(0x0004E2)}, - {RUNE_C(0x0004E4), RUNE_C(0x0004E4)}, - {RUNE_C(0x0004E6), RUNE_C(0x0004E6)}, - {RUNE_C(0x0004E8), RUNE_C(0x0004E8)}, - {RUNE_C(0x0004EA), RUNE_C(0x0004EA)}, - {RUNE_C(0x0004EC), RUNE_C(0x0004EC)}, - {RUNE_C(0x0004EE), RUNE_C(0x0004EE)}, - {RUNE_C(0x0004F0), RUNE_C(0x0004F0)}, - {RUNE_C(0x0004F2), RUNE_C(0x0004F2)}, - {RUNE_C(0x0004F4), RUNE_C(0x0004F4)}, - {RUNE_C(0x0004F6), RUNE_C(0x0004F6)}, - {RUNE_C(0x0004F8), RUNE_C(0x0004F8)}, - {RUNE_C(0x0004FA), RUNE_C(0x0004FA)}, - {RUNE_C(0x0004FC), RUNE_C(0x0004FC)}, - {RUNE_C(0x0004FE), RUNE_C(0x0004FE)}, - {RUNE_C(0x000500), RUNE_C(0x000500)}, - {RUNE_C(0x000502), RUNE_C(0x000502)}, - {RUNE_C(0x000504), RUNE_C(0x000504)}, - {RUNE_C(0x000506), RUNE_C(0x000506)}, - {RUNE_C(0x000508), RUNE_C(0x000508)}, - {RUNE_C(0x00050A), RUNE_C(0x00050A)}, - {RUNE_C(0x00050C), RUNE_C(0x00050C)}, - {RUNE_C(0x00050E), RUNE_C(0x00050E)}, - {RUNE_C(0x000510), RUNE_C(0x000510)}, - {RUNE_C(0x000512), RUNE_C(0x000512)}, - {RUNE_C(0x000514), RUNE_C(0x000514)}, - {RUNE_C(0x000516), RUNE_C(0x000516)}, - {RUNE_C(0x000518), RUNE_C(0x000518)}, - {RUNE_C(0x00051A), RUNE_C(0x00051A)}, - {RUNE_C(0x00051C), RUNE_C(0x00051C)}, - {RUNE_C(0x00051E), RUNE_C(0x00051E)}, - {RUNE_C(0x000520), RUNE_C(0x000520)}, - {RUNE_C(0x000522), RUNE_C(0x000522)}, - {RUNE_C(0x000524), RUNE_C(0x000524)}, - {RUNE_C(0x000526), RUNE_C(0x000526)}, - {RUNE_C(0x000528), RUNE_C(0x000528)}, - {RUNE_C(0x00052A), RUNE_C(0x00052A)}, - {RUNE_C(0x00052C), RUNE_C(0x00052C)}, - {RUNE_C(0x00052E), RUNE_C(0x00052E)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000587), RUNE_C(0x000587)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001E00)}, - {RUNE_C(0x001E02), RUNE_C(0x001E02)}, - {RUNE_C(0x001E04), RUNE_C(0x001E04)}, - {RUNE_C(0x001E06), RUNE_C(0x001E06)}, - {RUNE_C(0x001E08), RUNE_C(0x001E08)}, - {RUNE_C(0x001E0A), RUNE_C(0x001E0A)}, - {RUNE_C(0x001E0C), RUNE_C(0x001E0C)}, - {RUNE_C(0x001E0E), RUNE_C(0x001E0E)}, - {RUNE_C(0x001E10), RUNE_C(0x001E10)}, - {RUNE_C(0x001E12), RUNE_C(0x001E12)}, - {RUNE_C(0x001E14), RUNE_C(0x001E14)}, - {RUNE_C(0x001E16), RUNE_C(0x001E16)}, - {RUNE_C(0x001E18), RUNE_C(0x001E18)}, - {RUNE_C(0x001E1A), RUNE_C(0x001E1A)}, - {RUNE_C(0x001E1C), RUNE_C(0x001E1C)}, - {RUNE_C(0x001E1E), RUNE_C(0x001E1E)}, - {RUNE_C(0x001E20), RUNE_C(0x001E20)}, - {RUNE_C(0x001E22), RUNE_C(0x001E22)}, - {RUNE_C(0x001E24), RUNE_C(0x001E24)}, - {RUNE_C(0x001E26), RUNE_C(0x001E26)}, - {RUNE_C(0x001E28), RUNE_C(0x001E28)}, - {RUNE_C(0x001E2A), RUNE_C(0x001E2A)}, - {RUNE_C(0x001E2C), RUNE_C(0x001E2C)}, - {RUNE_C(0x001E2E), RUNE_C(0x001E2E)}, - {RUNE_C(0x001E30), RUNE_C(0x001E30)}, - {RUNE_C(0x001E32), RUNE_C(0x001E32)}, - {RUNE_C(0x001E34), RUNE_C(0x001E34)}, - {RUNE_C(0x001E36), RUNE_C(0x001E36)}, - {RUNE_C(0x001E38), RUNE_C(0x001E38)}, - {RUNE_C(0x001E3A), RUNE_C(0x001E3A)}, - {RUNE_C(0x001E3C), RUNE_C(0x001E3C)}, - {RUNE_C(0x001E3E), RUNE_C(0x001E3E)}, - {RUNE_C(0x001E40), RUNE_C(0x001E40)}, - {RUNE_C(0x001E42), RUNE_C(0x001E42)}, - {RUNE_C(0x001E44), RUNE_C(0x001E44)}, - {RUNE_C(0x001E46), RUNE_C(0x001E46)}, - {RUNE_C(0x001E48), RUNE_C(0x001E48)}, - {RUNE_C(0x001E4A), RUNE_C(0x001E4A)}, - {RUNE_C(0x001E4C), RUNE_C(0x001E4C)}, - {RUNE_C(0x001E4E), RUNE_C(0x001E4E)}, - {RUNE_C(0x001E50), RUNE_C(0x001E50)}, - {RUNE_C(0x001E52), RUNE_C(0x001E52)}, - {RUNE_C(0x001E54), RUNE_C(0x001E54)}, - {RUNE_C(0x001E56), RUNE_C(0x001E56)}, - {RUNE_C(0x001E58), RUNE_C(0x001E58)}, - {RUNE_C(0x001E5A), RUNE_C(0x001E5A)}, - {RUNE_C(0x001E5C), RUNE_C(0x001E5C)}, - {RUNE_C(0x001E5E), RUNE_C(0x001E5E)}, - {RUNE_C(0x001E60), RUNE_C(0x001E60)}, - {RUNE_C(0x001E62), RUNE_C(0x001E62)}, - {RUNE_C(0x001E64), RUNE_C(0x001E64)}, - {RUNE_C(0x001E66), RUNE_C(0x001E66)}, - {RUNE_C(0x001E68), RUNE_C(0x001E68)}, - {RUNE_C(0x001E6A), RUNE_C(0x001E6A)}, - {RUNE_C(0x001E6C), RUNE_C(0x001E6C)}, - {RUNE_C(0x001E6E), RUNE_C(0x001E6E)}, - {RUNE_C(0x001E70), RUNE_C(0x001E70)}, - {RUNE_C(0x001E72), RUNE_C(0x001E72)}, - {RUNE_C(0x001E74), RUNE_C(0x001E74)}, - {RUNE_C(0x001E76), RUNE_C(0x001E76)}, - {RUNE_C(0x001E78), RUNE_C(0x001E78)}, - {RUNE_C(0x001E7A), RUNE_C(0x001E7A)}, - {RUNE_C(0x001E7C), RUNE_C(0x001E7C)}, - {RUNE_C(0x001E7E), RUNE_C(0x001E7E)}, - {RUNE_C(0x001E80), RUNE_C(0x001E80)}, - {RUNE_C(0x001E82), RUNE_C(0x001E82)}, - {RUNE_C(0x001E84), RUNE_C(0x001E84)}, - {RUNE_C(0x001E86), RUNE_C(0x001E86)}, - {RUNE_C(0x001E88), RUNE_C(0x001E88)}, - {RUNE_C(0x001E8A), RUNE_C(0x001E8A)}, - {RUNE_C(0x001E8C), RUNE_C(0x001E8C)}, - {RUNE_C(0x001E8E), RUNE_C(0x001E8E)}, - {RUNE_C(0x001E90), RUNE_C(0x001E90)}, - {RUNE_C(0x001E92), RUNE_C(0x001E92)}, - {RUNE_C(0x001E94), RUNE_C(0x001E94)}, - {RUNE_C(0x001E9A), RUNE_C(0x001E9B)}, - {RUNE_C(0x001E9E), RUNE_C(0x001E9E)}, - {RUNE_C(0x001EA0), RUNE_C(0x001EA0)}, - {RUNE_C(0x001EA2), RUNE_C(0x001EA2)}, - {RUNE_C(0x001EA4), RUNE_C(0x001EA4)}, - {RUNE_C(0x001EA6), RUNE_C(0x001EA6)}, - {RUNE_C(0x001EA8), RUNE_C(0x001EA8)}, - {RUNE_C(0x001EAA), RUNE_C(0x001EAA)}, - {RUNE_C(0x001EAC), RUNE_C(0x001EAC)}, - {RUNE_C(0x001EAE), RUNE_C(0x001EAE)}, - {RUNE_C(0x001EB0), RUNE_C(0x001EB0)}, - {RUNE_C(0x001EB2), RUNE_C(0x001EB2)}, - {RUNE_C(0x001EB4), RUNE_C(0x001EB4)}, - {RUNE_C(0x001EB6), RUNE_C(0x001EB6)}, - {RUNE_C(0x001EB8), RUNE_C(0x001EB8)}, - {RUNE_C(0x001EBA), RUNE_C(0x001EBA)}, - {RUNE_C(0x001EBC), RUNE_C(0x001EBC)}, - {RUNE_C(0x001EBE), RUNE_C(0x001EBE)}, - {RUNE_C(0x001EC0), RUNE_C(0x001EC0)}, - {RUNE_C(0x001EC2), RUNE_C(0x001EC2)}, - {RUNE_C(0x001EC4), RUNE_C(0x001EC4)}, - {RUNE_C(0x001EC6), RUNE_C(0x001EC6)}, - {RUNE_C(0x001EC8), RUNE_C(0x001EC8)}, - {RUNE_C(0x001ECA), RUNE_C(0x001ECA)}, - {RUNE_C(0x001ECC), RUNE_C(0x001ECC)}, - {RUNE_C(0x001ECE), RUNE_C(0x001ECE)}, - {RUNE_C(0x001ED0), RUNE_C(0x001ED0)}, - {RUNE_C(0x001ED2), RUNE_C(0x001ED2)}, - {RUNE_C(0x001ED4), RUNE_C(0x001ED4)}, - {RUNE_C(0x001ED6), RUNE_C(0x001ED6)}, - {RUNE_C(0x001ED8), RUNE_C(0x001ED8)}, - {RUNE_C(0x001EDA), RUNE_C(0x001EDA)}, - {RUNE_C(0x001EDC), RUNE_C(0x001EDC)}, - {RUNE_C(0x001EDE), RUNE_C(0x001EDE)}, - {RUNE_C(0x001EE0), RUNE_C(0x001EE0)}, - {RUNE_C(0x001EE2), RUNE_C(0x001EE2)}, - {RUNE_C(0x001EE4), RUNE_C(0x001EE4)}, - {RUNE_C(0x001EE6), RUNE_C(0x001EE6)}, - {RUNE_C(0x001EE8), RUNE_C(0x001EE8)}, - {RUNE_C(0x001EEA), RUNE_C(0x001EEA)}, - {RUNE_C(0x001EEC), RUNE_C(0x001EEC)}, - {RUNE_C(0x001EEE), RUNE_C(0x001EEE)}, - {RUNE_C(0x001EF0), RUNE_C(0x001EF0)}, - {RUNE_C(0x001EF2), RUNE_C(0x001EF2)}, - {RUNE_C(0x001EF4), RUNE_C(0x001EF4)}, - {RUNE_C(0x001EF6), RUNE_C(0x001EF6)}, - {RUNE_C(0x001EF8), RUNE_C(0x001EF8)}, - {RUNE_C(0x001EFA), RUNE_C(0x001EFA)}, - {RUNE_C(0x001EFC), RUNE_C(0x001EFC)}, - {RUNE_C(0x001EFE), RUNE_C(0x001EFE)}, - {RUNE_C(0x001F08), RUNE_C(0x001F0F)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F28), RUNE_C(0x001F2F)}, - {RUNE_C(0x001F38), RUNE_C(0x001F3F)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F5F)}, - {RUNE_C(0x001F68), RUNE_C(0x001F6F)}, - {RUNE_C(0x001F80), RUNE_C(0x001FAF)}, - {RUNE_C(0x001FB2), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB7), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC7), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD8), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE8), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF7), RUNE_C(0x001FFC)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x00212A), RUNE_C(0x00212B)}, - {RUNE_C(0x002132), RUNE_C(0x002132)}, - {RUNE_C(0x002160), RUNE_C(0x00216F)}, - {RUNE_C(0x002183), RUNE_C(0x002183)}, - {RUNE_C(0x0024B6), RUNE_C(0x0024CF)}, - {RUNE_C(0x002C00), RUNE_C(0x002C2F)}, - {RUNE_C(0x002C60), RUNE_C(0x002C60)}, - {RUNE_C(0x002C62), RUNE_C(0x002C64)}, - {RUNE_C(0x002C67), RUNE_C(0x002C67)}, - {RUNE_C(0x002C69), RUNE_C(0x002C69)}, - {RUNE_C(0x002C6B), RUNE_C(0x002C6B)}, - {RUNE_C(0x002C6D), RUNE_C(0x002C70)}, - {RUNE_C(0x002C72), RUNE_C(0x002C72)}, - {RUNE_C(0x002C75), RUNE_C(0x002C75)}, - {RUNE_C(0x002C7E), RUNE_C(0x002C80)}, - {RUNE_C(0x002C82), RUNE_C(0x002C82)}, - {RUNE_C(0x002C84), RUNE_C(0x002C84)}, - {RUNE_C(0x002C86), RUNE_C(0x002C86)}, - {RUNE_C(0x002C88), RUNE_C(0x002C88)}, - {RUNE_C(0x002C8A), RUNE_C(0x002C8A)}, - {RUNE_C(0x002C8C), RUNE_C(0x002C8C)}, - {RUNE_C(0x002C8E), RUNE_C(0x002C8E)}, - {RUNE_C(0x002C90), RUNE_C(0x002C90)}, - {RUNE_C(0x002C92), RUNE_C(0x002C92)}, - {RUNE_C(0x002C94), RUNE_C(0x002C94)}, - {RUNE_C(0x002C96), RUNE_C(0x002C96)}, - {RUNE_C(0x002C98), RUNE_C(0x002C98)}, - {RUNE_C(0x002C9A), RUNE_C(0x002C9A)}, - {RUNE_C(0x002C9C), RUNE_C(0x002C9C)}, - {RUNE_C(0x002C9E), RUNE_C(0x002C9E)}, - {RUNE_C(0x002CA0), RUNE_C(0x002CA0)}, - {RUNE_C(0x002CA2), RUNE_C(0x002CA2)}, - {RUNE_C(0x002CA4), RUNE_C(0x002CA4)}, - {RUNE_C(0x002CA6), RUNE_C(0x002CA6)}, - {RUNE_C(0x002CA8), RUNE_C(0x002CA8)}, - {RUNE_C(0x002CAA), RUNE_C(0x002CAA)}, - {RUNE_C(0x002CAC), RUNE_C(0x002CAC)}, - {RUNE_C(0x002CAE), RUNE_C(0x002CAE)}, - {RUNE_C(0x002CB0), RUNE_C(0x002CB0)}, - {RUNE_C(0x002CB2), RUNE_C(0x002CB2)}, - {RUNE_C(0x002CB4), RUNE_C(0x002CB4)}, - {RUNE_C(0x002CB6), RUNE_C(0x002CB6)}, - {RUNE_C(0x002CB8), RUNE_C(0x002CB8)}, - {RUNE_C(0x002CBA), RUNE_C(0x002CBA)}, - {RUNE_C(0x002CBC), RUNE_C(0x002CBC)}, - {RUNE_C(0x002CBE), RUNE_C(0x002CBE)}, - {RUNE_C(0x002CC0), RUNE_C(0x002CC0)}, - {RUNE_C(0x002CC2), RUNE_C(0x002CC2)}, - {RUNE_C(0x002CC4), RUNE_C(0x002CC4)}, - {RUNE_C(0x002CC6), RUNE_C(0x002CC6)}, - {RUNE_C(0x002CC8), RUNE_C(0x002CC8)}, - {RUNE_C(0x002CCA), RUNE_C(0x002CCA)}, - {RUNE_C(0x002CCC), RUNE_C(0x002CCC)}, - {RUNE_C(0x002CCE), RUNE_C(0x002CCE)}, - {RUNE_C(0x002CD0), RUNE_C(0x002CD0)}, - {RUNE_C(0x002CD2), RUNE_C(0x002CD2)}, - {RUNE_C(0x002CD4), RUNE_C(0x002CD4)}, - {RUNE_C(0x002CD6), RUNE_C(0x002CD6)}, - {RUNE_C(0x002CD8), RUNE_C(0x002CD8)}, - {RUNE_C(0x002CDA), RUNE_C(0x002CDA)}, - {RUNE_C(0x002CDC), RUNE_C(0x002CDC)}, - {RUNE_C(0x002CDE), RUNE_C(0x002CDE)}, - {RUNE_C(0x002CE0), RUNE_C(0x002CE0)}, - {RUNE_C(0x002CE2), RUNE_C(0x002CE2)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEB)}, - {RUNE_C(0x002CED), RUNE_C(0x002CED)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF2)}, - {RUNE_C(0x00A640), RUNE_C(0x00A640)}, - {RUNE_C(0x00A642), RUNE_C(0x00A642)}, - {RUNE_C(0x00A644), RUNE_C(0x00A644)}, - {RUNE_C(0x00A646), RUNE_C(0x00A646)}, - {RUNE_C(0x00A648), RUNE_C(0x00A648)}, - {RUNE_C(0x00A64A), RUNE_C(0x00A64A)}, - {RUNE_C(0x00A64C), RUNE_C(0x00A64C)}, - {RUNE_C(0x00A64E), RUNE_C(0x00A64E)}, - {RUNE_C(0x00A650), RUNE_C(0x00A650)}, - {RUNE_C(0x00A652), RUNE_C(0x00A652)}, - {RUNE_C(0x00A654), RUNE_C(0x00A654)}, - {RUNE_C(0x00A656), RUNE_C(0x00A656)}, - {RUNE_C(0x00A658), RUNE_C(0x00A658)}, - {RUNE_C(0x00A65A), RUNE_C(0x00A65A)}, - {RUNE_C(0x00A65C), RUNE_C(0x00A65C)}, - {RUNE_C(0x00A65E), RUNE_C(0x00A65E)}, - {RUNE_C(0x00A660), RUNE_C(0x00A660)}, - {RUNE_C(0x00A662), RUNE_C(0x00A662)}, - {RUNE_C(0x00A664), RUNE_C(0x00A664)}, - {RUNE_C(0x00A666), RUNE_C(0x00A666)}, - {RUNE_C(0x00A668), RUNE_C(0x00A668)}, - {RUNE_C(0x00A66A), RUNE_C(0x00A66A)}, - {RUNE_C(0x00A66C), RUNE_C(0x00A66C)}, - {RUNE_C(0x00A680), RUNE_C(0x00A680)}, - {RUNE_C(0x00A682), RUNE_C(0x00A682)}, - {RUNE_C(0x00A684), RUNE_C(0x00A684)}, - {RUNE_C(0x00A686), RUNE_C(0x00A686)}, - {RUNE_C(0x00A688), RUNE_C(0x00A688)}, - {RUNE_C(0x00A68A), RUNE_C(0x00A68A)}, - {RUNE_C(0x00A68C), RUNE_C(0x00A68C)}, - {RUNE_C(0x00A68E), RUNE_C(0x00A68E)}, - {RUNE_C(0x00A690), RUNE_C(0x00A690)}, - {RUNE_C(0x00A692), RUNE_C(0x00A692)}, - {RUNE_C(0x00A694), RUNE_C(0x00A694)}, - {RUNE_C(0x00A696), RUNE_C(0x00A696)}, - {RUNE_C(0x00A698), RUNE_C(0x00A698)}, - {RUNE_C(0x00A69A), RUNE_C(0x00A69A)}, - {RUNE_C(0x00A722), RUNE_C(0x00A722)}, - {RUNE_C(0x00A724), RUNE_C(0x00A724)}, - {RUNE_C(0x00A726), RUNE_C(0x00A726)}, - {RUNE_C(0x00A728), RUNE_C(0x00A728)}, - {RUNE_C(0x00A72A), RUNE_C(0x00A72A)}, - {RUNE_C(0x00A72C), RUNE_C(0x00A72C)}, - {RUNE_C(0x00A72E), RUNE_C(0x00A72E)}, - {RUNE_C(0x00A732), RUNE_C(0x00A732)}, - {RUNE_C(0x00A734), RUNE_C(0x00A734)}, - {RUNE_C(0x00A736), RUNE_C(0x00A736)}, - {RUNE_C(0x00A738), RUNE_C(0x00A738)}, - {RUNE_C(0x00A73A), RUNE_C(0x00A73A)}, - {RUNE_C(0x00A73C), RUNE_C(0x00A73C)}, - {RUNE_C(0x00A73E), RUNE_C(0x00A73E)}, - {RUNE_C(0x00A740), RUNE_C(0x00A740)}, - {RUNE_C(0x00A742), RUNE_C(0x00A742)}, - {RUNE_C(0x00A744), RUNE_C(0x00A744)}, - {RUNE_C(0x00A746), RUNE_C(0x00A746)}, - {RUNE_C(0x00A748), RUNE_C(0x00A748)}, - {RUNE_C(0x00A74A), RUNE_C(0x00A74A)}, - {RUNE_C(0x00A74C), RUNE_C(0x00A74C)}, - {RUNE_C(0x00A74E), RUNE_C(0x00A74E)}, - {RUNE_C(0x00A750), RUNE_C(0x00A750)}, - {RUNE_C(0x00A752), RUNE_C(0x00A752)}, - {RUNE_C(0x00A754), RUNE_C(0x00A754)}, - {RUNE_C(0x00A756), RUNE_C(0x00A756)}, - {RUNE_C(0x00A758), RUNE_C(0x00A758)}, - {RUNE_C(0x00A75A), RUNE_C(0x00A75A)}, - {RUNE_C(0x00A75C), RUNE_C(0x00A75C)}, - {RUNE_C(0x00A75E), RUNE_C(0x00A75E)}, - {RUNE_C(0x00A760), RUNE_C(0x00A760)}, - {RUNE_C(0x00A762), RUNE_C(0x00A762)}, - {RUNE_C(0x00A764), RUNE_C(0x00A764)}, - {RUNE_C(0x00A766), RUNE_C(0x00A766)}, - {RUNE_C(0x00A768), RUNE_C(0x00A768)}, - {RUNE_C(0x00A76A), RUNE_C(0x00A76A)}, - {RUNE_C(0x00A76C), RUNE_C(0x00A76C)}, - {RUNE_C(0x00A76E), RUNE_C(0x00A76E)}, - {RUNE_C(0x00A779), RUNE_C(0x00A779)}, - {RUNE_C(0x00A77B), RUNE_C(0x00A77B)}, - {RUNE_C(0x00A77D), RUNE_C(0x00A77E)}, - {RUNE_C(0x00A780), RUNE_C(0x00A780)}, - {RUNE_C(0x00A782), RUNE_C(0x00A782)}, - {RUNE_C(0x00A784), RUNE_C(0x00A784)}, - {RUNE_C(0x00A786), RUNE_C(0x00A786)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A78B)}, - {RUNE_C(0x00A78D), RUNE_C(0x00A78D)}, - {RUNE_C(0x00A790), RUNE_C(0x00A790)}, - {RUNE_C(0x00A792), RUNE_C(0x00A792)}, - {RUNE_C(0x00A796), RUNE_C(0x00A796)}, - {RUNE_C(0x00A798), RUNE_C(0x00A798)}, - {RUNE_C(0x00A79A), RUNE_C(0x00A79A)}, - {RUNE_C(0x00A79C), RUNE_C(0x00A79C)}, - {RUNE_C(0x00A79E), RUNE_C(0x00A79E)}, - {RUNE_C(0x00A7A0), RUNE_C(0x00A7A0)}, - {RUNE_C(0x00A7A2), RUNE_C(0x00A7A2)}, - {RUNE_C(0x00A7A4), RUNE_C(0x00A7A4)}, - {RUNE_C(0x00A7A6), RUNE_C(0x00A7A6)}, - {RUNE_C(0x00A7A8), RUNE_C(0x00A7A8)}, - {RUNE_C(0x00A7AA), RUNE_C(0x00A7AE)}, - {RUNE_C(0x00A7B0), RUNE_C(0x00A7B4)}, - {RUNE_C(0x00A7B6), RUNE_C(0x00A7B6)}, - {RUNE_C(0x00A7B8), RUNE_C(0x00A7B8)}, - {RUNE_C(0x00A7BA), RUNE_C(0x00A7BA)}, - {RUNE_C(0x00A7BC), RUNE_C(0x00A7BC)}, - {RUNE_C(0x00A7BE), RUNE_C(0x00A7BE)}, - {RUNE_C(0x00A7C0), RUNE_C(0x00A7C0)}, - {RUNE_C(0x00A7C2), RUNE_C(0x00A7C2)}, - {RUNE_C(0x00A7C4), RUNE_C(0x00A7C7)}, - {RUNE_C(0x00A7C9), RUNE_C(0x00A7C9)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D0)}, - {RUNE_C(0x00A7D6), RUNE_C(0x00A7D6)}, - {RUNE_C(0x00A7D8), RUNE_C(0x00A7D8)}, - {RUNE_C(0x00A7F5), RUNE_C(0x00A7F5)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x010400), RUNE_C(0x010427)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118BF)}, - {RUNE_C(0x016E40), RUNE_C(0x016E5F)}, - {RUNE_C(0x01E900), RUNE_C(0x01E921)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, + 0xAA, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAB, + 0xD6, 0xCE, 0xDB, 0xB1, 0xD5, 0xD2, 0xAE, 0x11, + 0xB0, 0xAD, 0xAA, 0x4A, 0x55, 0x55, 0xD6, 0x55}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x6C, + 0x7A, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x80, + 0x40, 0xD7, 0xFE, 0xFF, 0xFB, 0x0F, 0x00, 0x00, + 0x04, 0x80, 0x63, 0x55, 0x55, 0x55, 0xB3, 0xE6}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0x01, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xAB, 0x2A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x15, 0x4C, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, + {0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x3F, 0x00, 0xAA, 0x00, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0x1F, + 0x9C, 0x1F, 0x00, 0x0F, 0x00, 0x1F, 0x9C, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x40, 0x0C, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xEA, 0x25, 0xC0, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x05, 0x28, 0x04, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x54, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x6A, + 0x55, 0x28, 0x45, 0x55, 0x55, 0x7D, 0x5F, 0x55, + 0xF5, 0x02, 0x41, 0x01, 0x00, 0x00, 0x20, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cwcf(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_cwcm.c b/lib/unicode/prop/uprop_is_cwcm.c index 9f67ba6..33948db 100644 --- a/lib/unicode/prop/uprop_is_cwcm.c +++ b/lib/unicode/prop/uprop_is_cwcm.c @@ -1,154 +1,400 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12, + 6, 13, 6, 6, 14, 6, 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 17, 18, 6, 6, 6, 19, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6, 21, + 6, 6, 6, 6, 22, 23, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 25, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 26, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 27, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x000137)}, - {RUNE_C(0x000139), RUNE_C(0x00018C)}, - {RUNE_C(0x00018E), RUNE_C(0x00019A)}, - {RUNE_C(0x00019C), RUNE_C(0x0001A9)}, - {RUNE_C(0x0001AC), RUNE_C(0x0001B9)}, - {RUNE_C(0x0001BC), RUNE_C(0x0001BD)}, - {RUNE_C(0x0001BF), RUNE_C(0x0001BF)}, - {RUNE_C(0x0001C4), RUNE_C(0x000220)}, - {RUNE_C(0x000222), RUNE_C(0x000233)}, - {RUNE_C(0x00023A), RUNE_C(0x000254)}, - {RUNE_C(0x000256), RUNE_C(0x000257)}, - {RUNE_C(0x000259), RUNE_C(0x000259)}, - {RUNE_C(0x00025B), RUNE_C(0x00025C)}, - {RUNE_C(0x000260), RUNE_C(0x000261)}, - {RUNE_C(0x000263), RUNE_C(0x000263)}, - {RUNE_C(0x000265), RUNE_C(0x000266)}, - {RUNE_C(0x000268), RUNE_C(0x00026C)}, - {RUNE_C(0x00026F), RUNE_C(0x00026F)}, - {RUNE_C(0x000271), RUNE_C(0x000272)}, - {RUNE_C(0x000275), RUNE_C(0x000275)}, - {RUNE_C(0x00027D), RUNE_C(0x00027D)}, - {RUNE_C(0x000280), RUNE_C(0x000280)}, - {RUNE_C(0x000282), RUNE_C(0x000283)}, - {RUNE_C(0x000287), RUNE_C(0x00028C)}, - {RUNE_C(0x000292), RUNE_C(0x000292)}, - {RUNE_C(0x00029D), RUNE_C(0x00029E)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000370), RUNE_C(0x000373)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037B), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003D1)}, - {RUNE_C(0x0003D5), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x0003FB)}, - {RUNE_C(0x0003FD), RUNE_C(0x000481)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000561), RUNE_C(0x000587)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FD), RUNE_C(0x0010FF)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001D79), RUNE_C(0x001D79)}, - {RUNE_C(0x001D7D), RUNE_C(0x001D7D)}, - {RUNE_C(0x001D8E), RUNE_C(0x001D8E)}, - {RUNE_C(0x001E00), RUNE_C(0x001E9B)}, - {RUNE_C(0x001E9E), RUNE_C(0x001E9E)}, - {RUNE_C(0x001EA0), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x00212A), RUNE_C(0x00212B)}, - {RUNE_C(0x002132), RUNE_C(0x002132)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x00217F)}, - {RUNE_C(0x002183), RUNE_C(0x002184)}, - {RUNE_C(0x0024B6), RUNE_C(0x0024E9)}, - {RUNE_C(0x002C00), RUNE_C(0x002C70)}, - {RUNE_C(0x002C72), RUNE_C(0x002C73)}, - {RUNE_C(0x002C75), RUNE_C(0x002C76)}, - {RUNE_C(0x002C7E), RUNE_C(0x002CE3)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66D)}, - {RUNE_C(0x00A680), RUNE_C(0x00A69B)}, - {RUNE_C(0x00A722), RUNE_C(0x00A72F)}, - {RUNE_C(0x00A732), RUNE_C(0x00A76F)}, - {RUNE_C(0x00A779), RUNE_C(0x00A787)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A78D)}, - {RUNE_C(0x00A790), RUNE_C(0x00A794)}, - {RUNE_C(0x00A796), RUNE_C(0x00A7AE)}, - {RUNE_C(0x00A7B0), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D6), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F5), RUNE_C(0x00A7F6)}, - {RUNE_C(0x00AB53), RUNE_C(0x00AB53)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x010400), RUNE_C(0x01044F)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118DF)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x01E900), RUNE_C(0x01E943)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xDF, 0xFF, 0xF7, 0xFF, 0xF3, 0xFF, 0xB3, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0x0F, 0xFC, + 0xFF, 0xFF, 0xDF, 0x1A, 0x6B, 0x9F, 0x26, 0x20, + 0x8D, 0x1F, 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xB8, + 0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x40, 0x0C, 0x04, 0x00, + 0x00, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6D, 0xC0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, + 0xFF, 0x38, 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, + 0xFF, 0x07, 0xC3, 0x03, 0x00, 0x00, 0x60, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cwcm(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_cwkcf.c b/lib/unicode/prop/uprop_is_cwkcf.c index c93ff02..6474ce9 100644 --- a/lib/unicode/prop/uprop_is_cwkcf.c +++ b/lib/unicode/prop/uprop_is_cwkcf.c @@ -1,856 +1,540 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0xA5, 0x3C, 0x77, - 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 7, 7, 11, 12, + 13, 14, 7, 15, 7, 7, 7, 16, 17, 7, 7, 7, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 7, 7, 7, 7, 7, 27, 7, 28, 29, 30, 31, + 32, 33, 34, 35, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 36, 37, 7, 7, 7, 38, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 35, 39, 40, 35, 41, 42, 43, + 7, 7, 7, 7, 44, 45, 7, 46, 7, 7, 7, 7, 47, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 48, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 49, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 50, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 51, 7, 7, 52, 53, 54, 55, 7, 7, 7, 7, 7, 7, 7, 7, + 56, 7, 7, 7, 7, 7, 7, 7, 7, 57, 7, 7, 7, 7, 58, 7, + 7, 59, 60, 7, 7, 7, 7, 7, 7, 7, 7, 61, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 35, 35, 62, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x000100)}, - {RUNE_C(0x000102), RUNE_C(0x000102)}, - {RUNE_C(0x000104), RUNE_C(0x000104)}, - {RUNE_C(0x000106), RUNE_C(0x000106)}, - {RUNE_C(0x000108), RUNE_C(0x000108)}, - {RUNE_C(0x00010A), RUNE_C(0x00010A)}, - {RUNE_C(0x00010C), RUNE_C(0x00010C)}, - {RUNE_C(0x00010E), RUNE_C(0x00010E)}, - {RUNE_C(0x000110), RUNE_C(0x000110)}, - {RUNE_C(0x000112), RUNE_C(0x000112)}, - {RUNE_C(0x000114), RUNE_C(0x000114)}, - {RUNE_C(0x000116), RUNE_C(0x000116)}, - {RUNE_C(0x000118), RUNE_C(0x000118)}, - {RUNE_C(0x00011A), RUNE_C(0x00011A)}, - {RUNE_C(0x00011C), RUNE_C(0x00011C)}, - {RUNE_C(0x00011E), RUNE_C(0x00011E)}, - {RUNE_C(0x000120), RUNE_C(0x000120)}, - {RUNE_C(0x000122), RUNE_C(0x000122)}, - {RUNE_C(0x000124), RUNE_C(0x000124)}, - {RUNE_C(0x000126), RUNE_C(0x000126)}, - {RUNE_C(0x000128), RUNE_C(0x000128)}, - {RUNE_C(0x00012A), RUNE_C(0x00012A)}, - {RUNE_C(0x00012C), RUNE_C(0x00012C)}, - {RUNE_C(0x00012E), RUNE_C(0x00012E)}, - {RUNE_C(0x000130), RUNE_C(0x000130)}, - {RUNE_C(0x000132), RUNE_C(0x000134)}, - {RUNE_C(0x000136), RUNE_C(0x000136)}, - {RUNE_C(0x000139), RUNE_C(0x000139)}, - {RUNE_C(0x00013B), RUNE_C(0x00013B)}, - {RUNE_C(0x00013D), RUNE_C(0x00013D)}, - {RUNE_C(0x00013F), RUNE_C(0x000141)}, - {RUNE_C(0x000143), RUNE_C(0x000143)}, - {RUNE_C(0x000145), RUNE_C(0x000145)}, - {RUNE_C(0x000147), RUNE_C(0x000147)}, - {RUNE_C(0x000149), RUNE_C(0x00014A)}, - {RUNE_C(0x00014C), RUNE_C(0x00014C)}, - {RUNE_C(0x00014E), RUNE_C(0x00014E)}, - {RUNE_C(0x000150), RUNE_C(0x000150)}, - {RUNE_C(0x000152), RUNE_C(0x000152)}, - {RUNE_C(0x000154), RUNE_C(0x000154)}, - {RUNE_C(0x000156), RUNE_C(0x000156)}, - {RUNE_C(0x000158), RUNE_C(0x000158)}, - {RUNE_C(0x00015A), RUNE_C(0x00015A)}, - {RUNE_C(0x00015C), RUNE_C(0x00015C)}, - {RUNE_C(0x00015E), RUNE_C(0x00015E)}, - {RUNE_C(0x000160), RUNE_C(0x000160)}, - {RUNE_C(0x000162), RUNE_C(0x000162)}, - {RUNE_C(0x000164), RUNE_C(0x000164)}, - {RUNE_C(0x000166), RUNE_C(0x000166)}, - {RUNE_C(0x000168), RUNE_C(0x000168)}, - {RUNE_C(0x00016A), RUNE_C(0x00016A)}, - {RUNE_C(0x00016C), RUNE_C(0x00016C)}, - {RUNE_C(0x00016E), RUNE_C(0x00016E)}, - {RUNE_C(0x000170), RUNE_C(0x000170)}, - {RUNE_C(0x000172), RUNE_C(0x000172)}, - {RUNE_C(0x000174), RUNE_C(0x000174)}, - {RUNE_C(0x000176), RUNE_C(0x000176)}, - {RUNE_C(0x000178), RUNE_C(0x000179)}, - {RUNE_C(0x00017B), RUNE_C(0x00017B)}, - {RUNE_C(0x00017D), RUNE_C(0x00017D)}, - {RUNE_C(0x00017F), RUNE_C(0x00017F)}, - {RUNE_C(0x000181), RUNE_C(0x000182)}, - {RUNE_C(0x000184), RUNE_C(0x000184)}, - {RUNE_C(0x000186), RUNE_C(0x000187)}, - {RUNE_C(0x000189), RUNE_C(0x00018B)}, - {RUNE_C(0x00018E), RUNE_C(0x000191)}, - {RUNE_C(0x000193), RUNE_C(0x000194)}, - {RUNE_C(0x000196), RUNE_C(0x000198)}, - {RUNE_C(0x00019C), RUNE_C(0x00019D)}, - {RUNE_C(0x00019F), RUNE_C(0x0001A0)}, - {RUNE_C(0x0001A2), RUNE_C(0x0001A2)}, - {RUNE_C(0x0001A4), RUNE_C(0x0001A4)}, - {RUNE_C(0x0001A6), RUNE_C(0x0001A7)}, - {RUNE_C(0x0001A9), RUNE_C(0x0001A9)}, - {RUNE_C(0x0001AC), RUNE_C(0x0001AC)}, - {RUNE_C(0x0001AE), RUNE_C(0x0001AF)}, - {RUNE_C(0x0001B1), RUNE_C(0x0001B3)}, - {RUNE_C(0x0001B5), RUNE_C(0x0001B5)}, - {RUNE_C(0x0001B7), RUNE_C(0x0001B8)}, - {RUNE_C(0x0001BC), RUNE_C(0x0001BC)}, - {RUNE_C(0x0001C4), RUNE_C(0x0001CD)}, - {RUNE_C(0x0001CF), RUNE_C(0x0001CF)}, - {RUNE_C(0x0001D1), RUNE_C(0x0001D1)}, - {RUNE_C(0x0001D3), RUNE_C(0x0001D3)}, - {RUNE_C(0x0001D5), RUNE_C(0x0001D5)}, - {RUNE_C(0x0001D7), RUNE_C(0x0001D7)}, - {RUNE_C(0x0001D9), RUNE_C(0x0001D9)}, - {RUNE_C(0x0001DB), RUNE_C(0x0001DB)}, - {RUNE_C(0x0001DE), RUNE_C(0x0001DE)}, - {RUNE_C(0x0001E0), RUNE_C(0x0001E0)}, - {RUNE_C(0x0001E2), RUNE_C(0x0001E2)}, - {RUNE_C(0x0001E4), RUNE_C(0x0001E4)}, - {RUNE_C(0x0001E6), RUNE_C(0x0001E6)}, - {RUNE_C(0x0001E8), RUNE_C(0x0001E8)}, - {RUNE_C(0x0001EA), RUNE_C(0x0001EA)}, - {RUNE_C(0x0001EC), RUNE_C(0x0001EC)}, - {RUNE_C(0x0001EE), RUNE_C(0x0001EE)}, - {RUNE_C(0x0001F1), RUNE_C(0x0001F4)}, - {RUNE_C(0x0001F6), RUNE_C(0x0001F8)}, - {RUNE_C(0x0001FA), RUNE_C(0x0001FA)}, - {RUNE_C(0x0001FC), RUNE_C(0x0001FC)}, - {RUNE_C(0x0001FE), RUNE_C(0x0001FE)}, - {RUNE_C(0x000200), RUNE_C(0x000200)}, - {RUNE_C(0x000202), RUNE_C(0x000202)}, - {RUNE_C(0x000204), RUNE_C(0x000204)}, - {RUNE_C(0x000206), RUNE_C(0x000206)}, - {RUNE_C(0x000208), RUNE_C(0x000208)}, - {RUNE_C(0x00020A), RUNE_C(0x00020A)}, - {RUNE_C(0x00020C), RUNE_C(0x00020C)}, - {RUNE_C(0x00020E), RUNE_C(0x00020E)}, - {RUNE_C(0x000210), RUNE_C(0x000210)}, - {RUNE_C(0x000212), RUNE_C(0x000212)}, - {RUNE_C(0x000214), RUNE_C(0x000214)}, - {RUNE_C(0x000216), RUNE_C(0x000216)}, - {RUNE_C(0x000218), RUNE_C(0x000218)}, - {RUNE_C(0x00021A), RUNE_C(0x00021A)}, - {RUNE_C(0x00021C), RUNE_C(0x00021C)}, - {RUNE_C(0x00021E), RUNE_C(0x00021E)}, - {RUNE_C(0x000220), RUNE_C(0x000220)}, - {RUNE_C(0x000222), RUNE_C(0x000222)}, - {RUNE_C(0x000224), RUNE_C(0x000224)}, - {RUNE_C(0x000226), RUNE_C(0x000226)}, - {RUNE_C(0x000228), RUNE_C(0x000228)}, - {RUNE_C(0x00022A), RUNE_C(0x00022A)}, - {RUNE_C(0x00022C), RUNE_C(0x00022C)}, - {RUNE_C(0x00022E), RUNE_C(0x00022E)}, - {RUNE_C(0x000230), RUNE_C(0x000230)}, - {RUNE_C(0x000232), RUNE_C(0x000232)}, - {RUNE_C(0x00023A), RUNE_C(0x00023B)}, - {RUNE_C(0x00023D), RUNE_C(0x00023E)}, - {RUNE_C(0x000241), RUNE_C(0x000241)}, - {RUNE_C(0x000243), RUNE_C(0x000246)}, - {RUNE_C(0x000248), RUNE_C(0x000248)}, - {RUNE_C(0x00024A), RUNE_C(0x00024A)}, - {RUNE_C(0x00024C), RUNE_C(0x00024C)}, - {RUNE_C(0x00024E), RUNE_C(0x00024E)}, - {RUNE_C(0x0002B0), RUNE_C(0x0002B8)}, - {RUNE_C(0x0002D8), RUNE_C(0x0002DD)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x000340), RUNE_C(0x000341)}, - {RUNE_C(0x000343), RUNE_C(0x000345)}, - {RUNE_C(0x00034F), RUNE_C(0x00034F)}, - {RUNE_C(0x000370), RUNE_C(0x000370)}, - {RUNE_C(0x000372), RUNE_C(0x000372)}, - {RUNE_C(0x000374), RUNE_C(0x000374)}, - {RUNE_C(0x000376), RUNE_C(0x000376)}, - {RUNE_C(0x00037A), RUNE_C(0x00037A)}, - {RUNE_C(0x00037E), RUNE_C(0x00037F)}, - {RUNE_C(0x000384), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x00038F)}, - {RUNE_C(0x000391), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003AB)}, - {RUNE_C(0x0003C2), RUNE_C(0x0003C2)}, - {RUNE_C(0x0003CF), RUNE_C(0x0003D6)}, - {RUNE_C(0x0003D8), RUNE_C(0x0003D8)}, - {RUNE_C(0x0003DA), RUNE_C(0x0003DA)}, - {RUNE_C(0x0003DC), RUNE_C(0x0003DC)}, - {RUNE_C(0x0003DE), RUNE_C(0x0003DE)}, - {RUNE_C(0x0003E0), RUNE_C(0x0003E0)}, - {RUNE_C(0x0003E2), RUNE_C(0x0003E2)}, - {RUNE_C(0x0003E4), RUNE_C(0x0003E4)}, - {RUNE_C(0x0003E6), RUNE_C(0x0003E6)}, - {RUNE_C(0x0003E8), RUNE_C(0x0003E8)}, - {RUNE_C(0x0003EA), RUNE_C(0x0003EA)}, - {RUNE_C(0x0003EC), RUNE_C(0x0003EC)}, - {RUNE_C(0x0003EE), RUNE_C(0x0003EE)}, - {RUNE_C(0x0003F0), RUNE_C(0x0003F2)}, - {RUNE_C(0x0003F4), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x0003F7)}, - {RUNE_C(0x0003F9), RUNE_C(0x0003FA)}, - {RUNE_C(0x0003FD), RUNE_C(0x00042F)}, - {RUNE_C(0x000460), RUNE_C(0x000460)}, - {RUNE_C(0x000462), RUNE_C(0x000462)}, - {RUNE_C(0x000464), RUNE_C(0x000464)}, - {RUNE_C(0x000466), RUNE_C(0x000466)}, - {RUNE_C(0x000468), RUNE_C(0x000468)}, - {RUNE_C(0x00046A), RUNE_C(0x00046A)}, - {RUNE_C(0x00046C), RUNE_C(0x00046C)}, - {RUNE_C(0x00046E), RUNE_C(0x00046E)}, - {RUNE_C(0x000470), RUNE_C(0x000470)}, - {RUNE_C(0x000472), RUNE_C(0x000472)}, - {RUNE_C(0x000474), RUNE_C(0x000474)}, - {RUNE_C(0x000476), RUNE_C(0x000476)}, - {RUNE_C(0x000478), RUNE_C(0x000478)}, - {RUNE_C(0x00047A), RUNE_C(0x00047A)}, - {RUNE_C(0x00047C), RUNE_C(0x00047C)}, - {RUNE_C(0x00047E), RUNE_C(0x00047E)}, - {RUNE_C(0x000480), RUNE_C(0x000480)}, - {RUNE_C(0x00048A), RUNE_C(0x00048A)}, - {RUNE_C(0x00048C), RUNE_C(0x00048C)}, - {RUNE_C(0x00048E), RUNE_C(0x00048E)}, - {RUNE_C(0x000490), RUNE_C(0x000490)}, - {RUNE_C(0x000492), RUNE_C(0x000492)}, - {RUNE_C(0x000494), RUNE_C(0x000494)}, - {RUNE_C(0x000496), RUNE_C(0x000496)}, - {RUNE_C(0x000498), RUNE_C(0x000498)}, - {RUNE_C(0x00049A), RUNE_C(0x00049A)}, - {RUNE_C(0x00049C), RUNE_C(0x00049C)}, - {RUNE_C(0x00049E), RUNE_C(0x00049E)}, - {RUNE_C(0x0004A0), RUNE_C(0x0004A0)}, - {RUNE_C(0x0004A2), RUNE_C(0x0004A2)}, - {RUNE_C(0x0004A4), RUNE_C(0x0004A4)}, - {RUNE_C(0x0004A6), RUNE_C(0x0004A6)}, - {RUNE_C(0x0004A8), RUNE_C(0x0004A8)}, - {RUNE_C(0x0004AA), RUNE_C(0x0004AA)}, - {RUNE_C(0x0004AC), RUNE_C(0x0004AC)}, - {RUNE_C(0x0004AE), RUNE_C(0x0004AE)}, - {RUNE_C(0x0004B0), RUNE_C(0x0004B0)}, - {RUNE_C(0x0004B2), RUNE_C(0x0004B2)}, - {RUNE_C(0x0004B4), RUNE_C(0x0004B4)}, - {RUNE_C(0x0004B6), RUNE_C(0x0004B6)}, - {RUNE_C(0x0004B8), RUNE_C(0x0004B8)}, - {RUNE_C(0x0004BA), RUNE_C(0x0004BA)}, - {RUNE_C(0x0004BC), RUNE_C(0x0004BC)}, - {RUNE_C(0x0004BE), RUNE_C(0x0004BE)}, - {RUNE_C(0x0004C0), RUNE_C(0x0004C1)}, - {RUNE_C(0x0004C3), RUNE_C(0x0004C3)}, - {RUNE_C(0x0004C5), RUNE_C(0x0004C5)}, - {RUNE_C(0x0004C7), RUNE_C(0x0004C7)}, - {RUNE_C(0x0004C9), RUNE_C(0x0004C9)}, - {RUNE_C(0x0004CB), RUNE_C(0x0004CB)}, - {RUNE_C(0x0004CD), RUNE_C(0x0004CD)}, - {RUNE_C(0x0004D0), RUNE_C(0x0004D0)}, - {RUNE_C(0x0004D2), RUNE_C(0x0004D2)}, - {RUNE_C(0x0004D4), RUNE_C(0x0004D4)}, - {RUNE_C(0x0004D6), RUNE_C(0x0004D6)}, - {RUNE_C(0x0004D8), RUNE_C(0x0004D8)}, - {RUNE_C(0x0004DA), RUNE_C(0x0004DA)}, - {RUNE_C(0x0004DC), RUNE_C(0x0004DC)}, - {RUNE_C(0x0004DE), RUNE_C(0x0004DE)}, - {RUNE_C(0x0004E0), RUNE_C(0x0004E0)}, - {RUNE_C(0x0004E2), RUNE_C(0x0004E2)}, - {RUNE_C(0x0004E4), RUNE_C(0x0004E4)}, - {RUNE_C(0x0004E6), RUNE_C(0x0004E6)}, - {RUNE_C(0x0004E8), RUNE_C(0x0004E8)}, - {RUNE_C(0x0004EA), RUNE_C(0x0004EA)}, - {RUNE_C(0x0004EC), RUNE_C(0x0004EC)}, - {RUNE_C(0x0004EE), RUNE_C(0x0004EE)}, - {RUNE_C(0x0004F0), RUNE_C(0x0004F0)}, - {RUNE_C(0x0004F2), RUNE_C(0x0004F2)}, - {RUNE_C(0x0004F4), RUNE_C(0x0004F4)}, - {RUNE_C(0x0004F6), RUNE_C(0x0004F6)}, - {RUNE_C(0x0004F8), RUNE_C(0x0004F8)}, - {RUNE_C(0x0004FA), RUNE_C(0x0004FA)}, - {RUNE_C(0x0004FC), RUNE_C(0x0004FC)}, - {RUNE_C(0x0004FE), RUNE_C(0x0004FE)}, - {RUNE_C(0x000500), RUNE_C(0x000500)}, - {RUNE_C(0x000502), RUNE_C(0x000502)}, - {RUNE_C(0x000504), RUNE_C(0x000504)}, - {RUNE_C(0x000506), RUNE_C(0x000506)}, - {RUNE_C(0x000508), RUNE_C(0x000508)}, - {RUNE_C(0x00050A), RUNE_C(0x00050A)}, - {RUNE_C(0x00050C), RUNE_C(0x00050C)}, - {RUNE_C(0x00050E), RUNE_C(0x00050E)}, - {RUNE_C(0x000510), RUNE_C(0x000510)}, - {RUNE_C(0x000512), RUNE_C(0x000512)}, - {RUNE_C(0x000514), RUNE_C(0x000514)}, - {RUNE_C(0x000516), RUNE_C(0x000516)}, - {RUNE_C(0x000518), RUNE_C(0x000518)}, - {RUNE_C(0x00051A), RUNE_C(0x00051A)}, - {RUNE_C(0x00051C), RUNE_C(0x00051C)}, - {RUNE_C(0x00051E), RUNE_C(0x00051E)}, - {RUNE_C(0x000520), RUNE_C(0x000520)}, - {RUNE_C(0x000522), RUNE_C(0x000522)}, - {RUNE_C(0x000524), RUNE_C(0x000524)}, - {RUNE_C(0x000526), RUNE_C(0x000526)}, - {RUNE_C(0x000528), RUNE_C(0x000528)}, - {RUNE_C(0x00052A), RUNE_C(0x00052A)}, - {RUNE_C(0x00052C), RUNE_C(0x00052C)}, - {RUNE_C(0x00052E), RUNE_C(0x00052E)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000587), RUNE_C(0x000587)}, - {RUNE_C(0x00061C), RUNE_C(0x00061C)}, - {RUNE_C(0x000675), RUNE_C(0x000678)}, - {RUNE_C(0x000958), RUNE_C(0x00095F)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009DF)}, - {RUNE_C(0x000A33), RUNE_C(0x000A33)}, - {RUNE_C(0x000A36), RUNE_C(0x000A36)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5B)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000E33), RUNE_C(0x000E33)}, - {RUNE_C(0x000EB3), RUNE_C(0x000EB3)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDD)}, - {RUNE_C(0x000F0C), RUNE_C(0x000F0C)}, - {RUNE_C(0x000F43), RUNE_C(0x000F43)}, - {RUNE_C(0x000F4D), RUNE_C(0x000F4D)}, - {RUNE_C(0x000F52), RUNE_C(0x000F52)}, - {RUNE_C(0x000F57), RUNE_C(0x000F57)}, - {RUNE_C(0x000F5C), RUNE_C(0x000F5C)}, - {RUNE_C(0x000F69), RUNE_C(0x000F69)}, - {RUNE_C(0x000F73), RUNE_C(0x000F73)}, - {RUNE_C(0x000F75), RUNE_C(0x000F79)}, - {RUNE_C(0x000F81), RUNE_C(0x000F81)}, - {RUNE_C(0x000F93), RUNE_C(0x000F93)}, - {RUNE_C(0x000F9D), RUNE_C(0x000F9D)}, - {RUNE_C(0x000FA2), RUNE_C(0x000FA2)}, - {RUNE_C(0x000FA7), RUNE_C(0x000FA7)}, - {RUNE_C(0x000FAC), RUNE_C(0x000FAC)}, - {RUNE_C(0x000FB9), RUNE_C(0x000FB9)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010FC), RUNE_C(0x0010FC)}, - {RUNE_C(0x00115F), RUNE_C(0x001160)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x0017B4), RUNE_C(0x0017B5)}, - {RUNE_C(0x00180B), RUNE_C(0x00180F)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001D2C), RUNE_C(0x001D2E)}, - {RUNE_C(0x001D30), RUNE_C(0x001D3A)}, - {RUNE_C(0x001D3C), RUNE_C(0x001D4D)}, - {RUNE_C(0x001D4F), RUNE_C(0x001D6A)}, - {RUNE_C(0x001D78), RUNE_C(0x001D78)}, - {RUNE_C(0x001D9B), RUNE_C(0x001DBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001E00)}, - {RUNE_C(0x001E02), RUNE_C(0x001E02)}, - {RUNE_C(0x001E04), RUNE_C(0x001E04)}, - {RUNE_C(0x001E06), RUNE_C(0x001E06)}, - {RUNE_C(0x001E08), RUNE_C(0x001E08)}, - {RUNE_C(0x001E0A), RUNE_C(0x001E0A)}, - {RUNE_C(0x001E0C), RUNE_C(0x001E0C)}, - {RUNE_C(0x001E0E), RUNE_C(0x001E0E)}, - {RUNE_C(0x001E10), RUNE_C(0x001E10)}, - {RUNE_C(0x001E12), RUNE_C(0x001E12)}, - {RUNE_C(0x001E14), RUNE_C(0x001E14)}, - {RUNE_C(0x001E16), RUNE_C(0x001E16)}, - {RUNE_C(0x001E18), RUNE_C(0x001E18)}, - {RUNE_C(0x001E1A), RUNE_C(0x001E1A)}, - {RUNE_C(0x001E1C), RUNE_C(0x001E1C)}, - {RUNE_C(0x001E1E), RUNE_C(0x001E1E)}, - {RUNE_C(0x001E20), RUNE_C(0x001E20)}, - {RUNE_C(0x001E22), RUNE_C(0x001E22)}, - {RUNE_C(0x001E24), RUNE_C(0x001E24)}, - {RUNE_C(0x001E26), RUNE_C(0x001E26)}, - {RUNE_C(0x001E28), RUNE_C(0x001E28)}, - {RUNE_C(0x001E2A), RUNE_C(0x001E2A)}, - {RUNE_C(0x001E2C), RUNE_C(0x001E2C)}, - {RUNE_C(0x001E2E), RUNE_C(0x001E2E)}, - {RUNE_C(0x001E30), RUNE_C(0x001E30)}, - {RUNE_C(0x001E32), RUNE_C(0x001E32)}, - {RUNE_C(0x001E34), RUNE_C(0x001E34)}, - {RUNE_C(0x001E36), RUNE_C(0x001E36)}, - {RUNE_C(0x001E38), RUNE_C(0x001E38)}, - {RUNE_C(0x001E3A), RUNE_C(0x001E3A)}, - {RUNE_C(0x001E3C), RUNE_C(0x001E3C)}, - {RUNE_C(0x001E3E), RUNE_C(0x001E3E)}, - {RUNE_C(0x001E40), RUNE_C(0x001E40)}, - {RUNE_C(0x001E42), RUNE_C(0x001E42)}, - {RUNE_C(0x001E44), RUNE_C(0x001E44)}, - {RUNE_C(0x001E46), RUNE_C(0x001E46)}, - {RUNE_C(0x001E48), RUNE_C(0x001E48)}, - {RUNE_C(0x001E4A), RUNE_C(0x001E4A)}, - {RUNE_C(0x001E4C), RUNE_C(0x001E4C)}, - {RUNE_C(0x001E4E), RUNE_C(0x001E4E)}, - {RUNE_C(0x001E50), RUNE_C(0x001E50)}, - {RUNE_C(0x001E52), RUNE_C(0x001E52)}, - {RUNE_C(0x001E54), RUNE_C(0x001E54)}, - {RUNE_C(0x001E56), RUNE_C(0x001E56)}, - {RUNE_C(0x001E58), RUNE_C(0x001E58)}, - {RUNE_C(0x001E5A), RUNE_C(0x001E5A)}, - {RUNE_C(0x001E5C), RUNE_C(0x001E5C)}, - {RUNE_C(0x001E5E), RUNE_C(0x001E5E)}, - {RUNE_C(0x001E60), RUNE_C(0x001E60)}, - {RUNE_C(0x001E62), RUNE_C(0x001E62)}, - {RUNE_C(0x001E64), RUNE_C(0x001E64)}, - {RUNE_C(0x001E66), RUNE_C(0x001E66)}, - {RUNE_C(0x001E68), RUNE_C(0x001E68)}, - {RUNE_C(0x001E6A), RUNE_C(0x001E6A)}, - {RUNE_C(0x001E6C), RUNE_C(0x001E6C)}, - {RUNE_C(0x001E6E), RUNE_C(0x001E6E)}, - {RUNE_C(0x001E70), RUNE_C(0x001E70)}, - {RUNE_C(0x001E72), RUNE_C(0x001E72)}, - {RUNE_C(0x001E74), RUNE_C(0x001E74)}, - {RUNE_C(0x001E76), RUNE_C(0x001E76)}, - {RUNE_C(0x001E78), RUNE_C(0x001E78)}, - {RUNE_C(0x001E7A), RUNE_C(0x001E7A)}, - {RUNE_C(0x001E7C), RUNE_C(0x001E7C)}, - {RUNE_C(0x001E7E), RUNE_C(0x001E7E)}, - {RUNE_C(0x001E80), RUNE_C(0x001E80)}, - {RUNE_C(0x001E82), RUNE_C(0x001E82)}, - {RUNE_C(0x001E84), RUNE_C(0x001E84)}, - {RUNE_C(0x001E86), RUNE_C(0x001E86)}, - {RUNE_C(0x001E88), RUNE_C(0x001E88)}, - {RUNE_C(0x001E8A), RUNE_C(0x001E8A)}, - {RUNE_C(0x001E8C), RUNE_C(0x001E8C)}, - {RUNE_C(0x001E8E), RUNE_C(0x001E8E)}, - {RUNE_C(0x001E90), RUNE_C(0x001E90)}, - {RUNE_C(0x001E92), RUNE_C(0x001E92)}, - {RUNE_C(0x001E94), RUNE_C(0x001E94)}, - {RUNE_C(0x001E9A), RUNE_C(0x001E9B)}, - {RUNE_C(0x001E9E), RUNE_C(0x001E9E)}, - {RUNE_C(0x001EA0), RUNE_C(0x001EA0)}, - {RUNE_C(0x001EA2), RUNE_C(0x001EA2)}, - {RUNE_C(0x001EA4), RUNE_C(0x001EA4)}, - {RUNE_C(0x001EA6), RUNE_C(0x001EA6)}, - {RUNE_C(0x001EA8), RUNE_C(0x001EA8)}, - {RUNE_C(0x001EAA), RUNE_C(0x001EAA)}, - {RUNE_C(0x001EAC), RUNE_C(0x001EAC)}, - {RUNE_C(0x001EAE), RUNE_C(0x001EAE)}, - {RUNE_C(0x001EB0), RUNE_C(0x001EB0)}, - {RUNE_C(0x001EB2), RUNE_C(0x001EB2)}, - {RUNE_C(0x001EB4), RUNE_C(0x001EB4)}, - {RUNE_C(0x001EB6), RUNE_C(0x001EB6)}, - {RUNE_C(0x001EB8), RUNE_C(0x001EB8)}, - {RUNE_C(0x001EBA), RUNE_C(0x001EBA)}, - {RUNE_C(0x001EBC), RUNE_C(0x001EBC)}, - {RUNE_C(0x001EBE), RUNE_C(0x001EBE)}, - {RUNE_C(0x001EC0), RUNE_C(0x001EC0)}, - {RUNE_C(0x001EC2), RUNE_C(0x001EC2)}, - {RUNE_C(0x001EC4), RUNE_C(0x001EC4)}, - {RUNE_C(0x001EC6), RUNE_C(0x001EC6)}, - {RUNE_C(0x001EC8), RUNE_C(0x001EC8)}, - {RUNE_C(0x001ECA), RUNE_C(0x001ECA)}, - {RUNE_C(0x001ECC), RUNE_C(0x001ECC)}, - {RUNE_C(0x001ECE), RUNE_C(0x001ECE)}, - {RUNE_C(0x001ED0), RUNE_C(0x001ED0)}, - {RUNE_C(0x001ED2), RUNE_C(0x001ED2)}, - {RUNE_C(0x001ED4), RUNE_C(0x001ED4)}, - {RUNE_C(0x001ED6), RUNE_C(0x001ED6)}, - {RUNE_C(0x001ED8), RUNE_C(0x001ED8)}, - {RUNE_C(0x001EDA), RUNE_C(0x001EDA)}, - {RUNE_C(0x001EDC), RUNE_C(0x001EDC)}, - {RUNE_C(0x001EDE), RUNE_C(0x001EDE)}, - {RUNE_C(0x001EE0), RUNE_C(0x001EE0)}, - {RUNE_C(0x001EE2), RUNE_C(0x001EE2)}, - {RUNE_C(0x001EE4), RUNE_C(0x001EE4)}, - {RUNE_C(0x001EE6), RUNE_C(0x001EE6)}, - {RUNE_C(0x001EE8), RUNE_C(0x001EE8)}, - {RUNE_C(0x001EEA), RUNE_C(0x001EEA)}, - {RUNE_C(0x001EEC), RUNE_C(0x001EEC)}, - {RUNE_C(0x001EEE), RUNE_C(0x001EEE)}, - {RUNE_C(0x001EF0), RUNE_C(0x001EF0)}, - {RUNE_C(0x001EF2), RUNE_C(0x001EF2)}, - {RUNE_C(0x001EF4), RUNE_C(0x001EF4)}, - {RUNE_C(0x001EF6), RUNE_C(0x001EF6)}, - {RUNE_C(0x001EF8), RUNE_C(0x001EF8)}, - {RUNE_C(0x001EFA), RUNE_C(0x001EFA)}, - {RUNE_C(0x001EFC), RUNE_C(0x001EFC)}, - {RUNE_C(0x001EFE), RUNE_C(0x001EFE)}, - {RUNE_C(0x001F08), RUNE_C(0x001F0F)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F28), RUNE_C(0x001F2F)}, - {RUNE_C(0x001F38), RUNE_C(0x001F3F)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F5F)}, - {RUNE_C(0x001F68), RUNE_C(0x001F6F)}, - {RUNE_C(0x001F71), RUNE_C(0x001F71)}, - {RUNE_C(0x001F73), RUNE_C(0x001F73)}, - {RUNE_C(0x001F75), RUNE_C(0x001F75)}, - {RUNE_C(0x001F77), RUNE_C(0x001F77)}, - {RUNE_C(0x001F79), RUNE_C(0x001F79)}, - {RUNE_C(0x001F7B), RUNE_C(0x001F7B)}, - {RUNE_C(0x001F7D), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FAF)}, - {RUNE_C(0x001FB2), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB7), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC7), RUNE_C(0x001FCF)}, - {RUNE_C(0x001FD3), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD8), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FDD), RUNE_C(0x001FDF)}, - {RUNE_C(0x001FE3), RUNE_C(0x001FE3)}, - {RUNE_C(0x001FE8), RUNE_C(0x001FEF)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF7), RUNE_C(0x001FFE)}, - {RUNE_C(0x002000), RUNE_C(0x00200F)}, - {RUNE_C(0x002011), RUNE_C(0x002011)}, - {RUNE_C(0x002017), RUNE_C(0x002017)}, - {RUNE_C(0x002024), RUNE_C(0x002026)}, - {RUNE_C(0x00202A), RUNE_C(0x00202F)}, - {RUNE_C(0x002033), RUNE_C(0x002034)}, - {RUNE_C(0x002036), RUNE_C(0x002037)}, - {RUNE_C(0x00203C), RUNE_C(0x00203C)}, - {RUNE_C(0x00203E), RUNE_C(0x00203E)}, - {RUNE_C(0x002047), RUNE_C(0x002049)}, - {RUNE_C(0x002057), RUNE_C(0x002057)}, - {RUNE_C(0x00205F), RUNE_C(0x002071)}, - {RUNE_C(0x002074), RUNE_C(0x00208E)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x0020A8), RUNE_C(0x0020A8)}, - {RUNE_C(0x002100), RUNE_C(0x002103)}, - {RUNE_C(0x002105), RUNE_C(0x002107)}, - {RUNE_C(0x002109), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002116)}, - {RUNE_C(0x002119), RUNE_C(0x00211D)}, - {RUNE_C(0x002120), RUNE_C(0x002122)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x00212D)}, - {RUNE_C(0x00212F), RUNE_C(0x002139)}, - {RUNE_C(0x00213B), RUNE_C(0x002140)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x002150), RUNE_C(0x00217F)}, - {RUNE_C(0x002183), RUNE_C(0x002183)}, - {RUNE_C(0x002189), RUNE_C(0x002189)}, - {RUNE_C(0x00222C), RUNE_C(0x00222D)}, - {RUNE_C(0x00222F), RUNE_C(0x002230)}, - {RUNE_C(0x002329), RUNE_C(0x00232A)}, - {RUNE_C(0x002460), RUNE_C(0x0024EA)}, - {RUNE_C(0x002A0C), RUNE_C(0x002A0C)}, - {RUNE_C(0x002A74), RUNE_C(0x002A76)}, - {RUNE_C(0x002ADC), RUNE_C(0x002ADC)}, - {RUNE_C(0x002C00), RUNE_C(0x002C2F)}, - {RUNE_C(0x002C60), RUNE_C(0x002C60)}, - {RUNE_C(0x002C62), RUNE_C(0x002C64)}, - {RUNE_C(0x002C67), RUNE_C(0x002C67)}, - {RUNE_C(0x002C69), RUNE_C(0x002C69)}, - {RUNE_C(0x002C6B), RUNE_C(0x002C6B)}, - {RUNE_C(0x002C6D), RUNE_C(0x002C70)}, - {RUNE_C(0x002C72), RUNE_C(0x002C72)}, - {RUNE_C(0x002C75), RUNE_C(0x002C75)}, - {RUNE_C(0x002C7C), RUNE_C(0x002C80)}, - {RUNE_C(0x002C82), RUNE_C(0x002C82)}, - {RUNE_C(0x002C84), RUNE_C(0x002C84)}, - {RUNE_C(0x002C86), RUNE_C(0x002C86)}, - {RUNE_C(0x002C88), RUNE_C(0x002C88)}, - {RUNE_C(0x002C8A), RUNE_C(0x002C8A)}, - {RUNE_C(0x002C8C), RUNE_C(0x002C8C)}, - {RUNE_C(0x002C8E), RUNE_C(0x002C8E)}, - {RUNE_C(0x002C90), RUNE_C(0x002C90)}, - {RUNE_C(0x002C92), RUNE_C(0x002C92)}, - {RUNE_C(0x002C94), RUNE_C(0x002C94)}, - {RUNE_C(0x002C96), RUNE_C(0x002C96)}, - {RUNE_C(0x002C98), RUNE_C(0x002C98)}, - {RUNE_C(0x002C9A), RUNE_C(0x002C9A)}, - {RUNE_C(0x002C9C), RUNE_C(0x002C9C)}, - {RUNE_C(0x002C9E), RUNE_C(0x002C9E)}, - {RUNE_C(0x002CA0), RUNE_C(0x002CA0)}, - {RUNE_C(0x002CA2), RUNE_C(0x002CA2)}, - {RUNE_C(0x002CA4), RUNE_C(0x002CA4)}, - {RUNE_C(0x002CA6), RUNE_C(0x002CA6)}, - {RUNE_C(0x002CA8), RUNE_C(0x002CA8)}, - {RUNE_C(0x002CAA), RUNE_C(0x002CAA)}, - {RUNE_C(0x002CAC), RUNE_C(0x002CAC)}, - {RUNE_C(0x002CAE), RUNE_C(0x002CAE)}, - {RUNE_C(0x002CB0), RUNE_C(0x002CB0)}, - {RUNE_C(0x002CB2), RUNE_C(0x002CB2)}, - {RUNE_C(0x002CB4), RUNE_C(0x002CB4)}, - {RUNE_C(0x002CB6), RUNE_C(0x002CB6)}, - {RUNE_C(0x002CB8), RUNE_C(0x002CB8)}, - {RUNE_C(0x002CBA), RUNE_C(0x002CBA)}, - {RUNE_C(0x002CBC), RUNE_C(0x002CBC)}, - {RUNE_C(0x002CBE), RUNE_C(0x002CBE)}, - {RUNE_C(0x002CC0), RUNE_C(0x002CC0)}, - {RUNE_C(0x002CC2), RUNE_C(0x002CC2)}, - {RUNE_C(0x002CC4), RUNE_C(0x002CC4)}, - {RUNE_C(0x002CC6), RUNE_C(0x002CC6)}, - {RUNE_C(0x002CC8), RUNE_C(0x002CC8)}, - {RUNE_C(0x002CCA), RUNE_C(0x002CCA)}, - {RUNE_C(0x002CCC), RUNE_C(0x002CCC)}, - {RUNE_C(0x002CCE), RUNE_C(0x002CCE)}, - {RUNE_C(0x002CD0), RUNE_C(0x002CD0)}, - {RUNE_C(0x002CD2), RUNE_C(0x002CD2)}, - {RUNE_C(0x002CD4), RUNE_C(0x002CD4)}, - {RUNE_C(0x002CD6), RUNE_C(0x002CD6)}, - {RUNE_C(0x002CD8), RUNE_C(0x002CD8)}, - {RUNE_C(0x002CDA), RUNE_C(0x002CDA)}, - {RUNE_C(0x002CDC), RUNE_C(0x002CDC)}, - {RUNE_C(0x002CDE), RUNE_C(0x002CDE)}, - {RUNE_C(0x002CE0), RUNE_C(0x002CE0)}, - {RUNE_C(0x002CE2), RUNE_C(0x002CE2)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEB)}, - {RUNE_C(0x002CED), RUNE_C(0x002CED)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF2)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002E9F), RUNE_C(0x002E9F)}, - {RUNE_C(0x002EF3), RUNE_C(0x002EF3)}, - {RUNE_C(0x002F00), RUNE_C(0x002FD5)}, - {RUNE_C(0x003000), RUNE_C(0x003000)}, - {RUNE_C(0x003036), RUNE_C(0x003036)}, - {RUNE_C(0x003038), RUNE_C(0x00303A)}, - {RUNE_C(0x00309B), RUNE_C(0x00309C)}, - {RUNE_C(0x00309F), RUNE_C(0x00309F)}, - {RUNE_C(0x0030FF), RUNE_C(0x0030FF)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x003192), RUNE_C(0x00319F)}, - {RUNE_C(0x003200), RUNE_C(0x00321E)}, - {RUNE_C(0x003220), RUNE_C(0x003247)}, - {RUNE_C(0x003250), RUNE_C(0x00327E)}, - {RUNE_C(0x003280), RUNE_C(0x0033FF)}, - {RUNE_C(0x00A640), RUNE_C(0x00A640)}, - {RUNE_C(0x00A642), RUNE_C(0x00A642)}, - {RUNE_C(0x00A644), RUNE_C(0x00A644)}, - {RUNE_C(0x00A646), RUNE_C(0x00A646)}, - {RUNE_C(0x00A648), RUNE_C(0x00A648)}, - {RUNE_C(0x00A64A), RUNE_C(0x00A64A)}, - {RUNE_C(0x00A64C), RUNE_C(0x00A64C)}, - {RUNE_C(0x00A64E), RUNE_C(0x00A64E)}, - {RUNE_C(0x00A650), RUNE_C(0x00A650)}, - {RUNE_C(0x00A652), RUNE_C(0x00A652)}, - {RUNE_C(0x00A654), RUNE_C(0x00A654)}, - {RUNE_C(0x00A656), RUNE_C(0x00A656)}, - {RUNE_C(0x00A658), RUNE_C(0x00A658)}, - {RUNE_C(0x00A65A), RUNE_C(0x00A65A)}, - {RUNE_C(0x00A65C), RUNE_C(0x00A65C)}, - {RUNE_C(0x00A65E), RUNE_C(0x00A65E)}, - {RUNE_C(0x00A660), RUNE_C(0x00A660)}, - {RUNE_C(0x00A662), RUNE_C(0x00A662)}, - {RUNE_C(0x00A664), RUNE_C(0x00A664)}, - {RUNE_C(0x00A666), RUNE_C(0x00A666)}, - {RUNE_C(0x00A668), RUNE_C(0x00A668)}, - {RUNE_C(0x00A66A), RUNE_C(0x00A66A)}, - {RUNE_C(0x00A66C), RUNE_C(0x00A66C)}, - {RUNE_C(0x00A680), RUNE_C(0x00A680)}, - {RUNE_C(0x00A682), RUNE_C(0x00A682)}, - {RUNE_C(0x00A684), RUNE_C(0x00A684)}, - {RUNE_C(0x00A686), RUNE_C(0x00A686)}, - {RUNE_C(0x00A688), RUNE_C(0x00A688)}, - {RUNE_C(0x00A68A), RUNE_C(0x00A68A)}, - {RUNE_C(0x00A68C), RUNE_C(0x00A68C)}, - {RUNE_C(0x00A68E), RUNE_C(0x00A68E)}, - {RUNE_C(0x00A690), RUNE_C(0x00A690)}, - {RUNE_C(0x00A692), RUNE_C(0x00A692)}, - {RUNE_C(0x00A694), RUNE_C(0x00A694)}, - {RUNE_C(0x00A696), RUNE_C(0x00A696)}, - {RUNE_C(0x00A698), RUNE_C(0x00A698)}, - {RUNE_C(0x00A69A), RUNE_C(0x00A69A)}, - {RUNE_C(0x00A69C), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A722), RUNE_C(0x00A722)}, - {RUNE_C(0x00A724), RUNE_C(0x00A724)}, - {RUNE_C(0x00A726), RUNE_C(0x00A726)}, - {RUNE_C(0x00A728), RUNE_C(0x00A728)}, - {RUNE_C(0x00A72A), RUNE_C(0x00A72A)}, - {RUNE_C(0x00A72C), RUNE_C(0x00A72C)}, - {RUNE_C(0x00A72E), RUNE_C(0x00A72E)}, - {RUNE_C(0x00A732), RUNE_C(0x00A732)}, - {RUNE_C(0x00A734), RUNE_C(0x00A734)}, - {RUNE_C(0x00A736), RUNE_C(0x00A736)}, - {RUNE_C(0x00A738), RUNE_C(0x00A738)}, - {RUNE_C(0x00A73A), RUNE_C(0x00A73A)}, - {RUNE_C(0x00A73C), RUNE_C(0x00A73C)}, - {RUNE_C(0x00A73E), RUNE_C(0x00A73E)}, - {RUNE_C(0x00A740), RUNE_C(0x00A740)}, - {RUNE_C(0x00A742), RUNE_C(0x00A742)}, - {RUNE_C(0x00A744), RUNE_C(0x00A744)}, - {RUNE_C(0x00A746), RUNE_C(0x00A746)}, - {RUNE_C(0x00A748), RUNE_C(0x00A748)}, - {RUNE_C(0x00A74A), RUNE_C(0x00A74A)}, - {RUNE_C(0x00A74C), RUNE_C(0x00A74C)}, - {RUNE_C(0x00A74E), RUNE_C(0x00A74E)}, - {RUNE_C(0x00A750), RUNE_C(0x00A750)}, - {RUNE_C(0x00A752), RUNE_C(0x00A752)}, - {RUNE_C(0x00A754), RUNE_C(0x00A754)}, - {RUNE_C(0x00A756), RUNE_C(0x00A756)}, - {RUNE_C(0x00A758), RUNE_C(0x00A758)}, - {RUNE_C(0x00A75A), RUNE_C(0x00A75A)}, - {RUNE_C(0x00A75C), RUNE_C(0x00A75C)}, - {RUNE_C(0x00A75E), RUNE_C(0x00A75E)}, - {RUNE_C(0x00A760), RUNE_C(0x00A760)}, - {RUNE_C(0x00A762), RUNE_C(0x00A762)}, - {RUNE_C(0x00A764), RUNE_C(0x00A764)}, - {RUNE_C(0x00A766), RUNE_C(0x00A766)}, - {RUNE_C(0x00A768), RUNE_C(0x00A768)}, - {RUNE_C(0x00A76A), RUNE_C(0x00A76A)}, - {RUNE_C(0x00A76C), RUNE_C(0x00A76C)}, - {RUNE_C(0x00A76E), RUNE_C(0x00A76E)}, - {RUNE_C(0x00A770), RUNE_C(0x00A770)}, - {RUNE_C(0x00A779), RUNE_C(0x00A779)}, - {RUNE_C(0x00A77B), RUNE_C(0x00A77B)}, - {RUNE_C(0x00A77D), RUNE_C(0x00A77E)}, - {RUNE_C(0x00A780), RUNE_C(0x00A780)}, - {RUNE_C(0x00A782), RUNE_C(0x00A782)}, - {RUNE_C(0x00A784), RUNE_C(0x00A784)}, - {RUNE_C(0x00A786), RUNE_C(0x00A786)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A78B)}, - {RUNE_C(0x00A78D), RUNE_C(0x00A78D)}, - {RUNE_C(0x00A790), RUNE_C(0x00A790)}, - {RUNE_C(0x00A792), RUNE_C(0x00A792)}, - {RUNE_C(0x00A796), RUNE_C(0x00A796)}, - {RUNE_C(0x00A798), RUNE_C(0x00A798)}, - {RUNE_C(0x00A79A), RUNE_C(0x00A79A)}, - {RUNE_C(0x00A79C), RUNE_C(0x00A79C)}, - {RUNE_C(0x00A79E), RUNE_C(0x00A79E)}, - {RUNE_C(0x00A7A0), RUNE_C(0x00A7A0)}, - {RUNE_C(0x00A7A2), RUNE_C(0x00A7A2)}, - {RUNE_C(0x00A7A4), RUNE_C(0x00A7A4)}, - {RUNE_C(0x00A7A6), RUNE_C(0x00A7A6)}, - {RUNE_C(0x00A7A8), RUNE_C(0x00A7A8)}, - {RUNE_C(0x00A7AA), RUNE_C(0x00A7AE)}, - {RUNE_C(0x00A7B0), RUNE_C(0x00A7B4)}, - {RUNE_C(0x00A7B6), RUNE_C(0x00A7B6)}, - {RUNE_C(0x00A7B8), RUNE_C(0x00A7B8)}, - {RUNE_C(0x00A7BA), RUNE_C(0x00A7BA)}, - {RUNE_C(0x00A7BC), RUNE_C(0x00A7BC)}, - {RUNE_C(0x00A7BE), RUNE_C(0x00A7BE)}, - {RUNE_C(0x00A7C0), RUNE_C(0x00A7C0)}, - {RUNE_C(0x00A7C2), RUNE_C(0x00A7C2)}, - {RUNE_C(0x00A7C4), RUNE_C(0x00A7C7)}, - {RUNE_C(0x00A7C9), RUNE_C(0x00A7C9)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D0)}, - {RUNE_C(0x00A7D6), RUNE_C(0x00A7D6)}, - {RUNE_C(0x00A7D8), RUNE_C(0x00A7D8)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A7F5)}, - {RUNE_C(0x00A7F8), RUNE_C(0x00A7F9)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB5F)}, - {RUNE_C(0x00AB69), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA0D)}, - {RUNE_C(0x00FA10), RUNE_C(0x00FA10)}, - {RUNE_C(0x00FA12), RUNE_C(0x00FA12)}, - {RUNE_C(0x00FA15), RUNE_C(0x00FA1E)}, - {RUNE_C(0x00FA20), RUNE_C(0x00FA20)}, - {RUNE_C(0x00FA22), RUNE_C(0x00FA22)}, - {RUNE_C(0x00FA25), RUNE_C(0x00FA26)}, - {RUNE_C(0x00FA2A), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB1D)}, - {RUNE_C(0x00FB1F), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBB1)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FD3D)}, - {RUNE_C(0x00FD50), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDFC)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE19)}, - {RUNE_C(0x00FE30), RUNE_C(0x00FE44)}, - {RUNE_C(0x00FE47), RUNE_C(0x00FE52)}, - {RUNE_C(0x00FE54), RUNE_C(0x00FE66)}, - {RUNE_C(0x00FE68), RUNE_C(0x00FE6B)}, - {RUNE_C(0x00FE70), RUNE_C(0x00FE72)}, - {RUNE_C(0x00FE74), RUNE_C(0x00FE74)}, - {RUNE_C(0x00FE76), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FEFF), RUNE_C(0x00FEFF)}, - {RUNE_C(0x00FF01), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x00FFE0), RUNE_C(0x00FFE6)}, - {RUNE_C(0x00FFE8), RUNE_C(0x00FFEE)}, - {RUNE_C(0x00FFF0), RUNE_C(0x00FFF8)}, - {RUNE_C(0x010400), RUNE_C(0x010427)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010781), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118BF)}, - {RUNE_C(0x016E40), RUNE_C(0x016E5F)}, - {RUNE_C(0x01BCA0), RUNE_C(0x01BCA3)}, - {RUNE_C(0x01D15E), RUNE_C(0x01D164)}, - {RUNE_C(0x01D173), RUNE_C(0x01D17A)}, - {RUNE_C(0x01D1BB), RUNE_C(0x01D1C0)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01D7CE), RUNE_C(0x01D7FF)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E900), RUNE_C(0x01E921)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x01F100), RUNE_C(0x01F10A)}, - {RUNE_C(0x01F110), RUNE_C(0x01F12E)}, - {RUNE_C(0x01F130), RUNE_C(0x01F14F)}, - {RUNE_C(0x01F16A), RUNE_C(0x01F16C)}, - {RUNE_C(0x01F190), RUNE_C(0x01F190)}, - {RUNE_C(0x01F200), RUNE_C(0x01F202)}, - {RUNE_C(0x01F210), RUNE_C(0x01F23B)}, - {RUNE_C(0x01F240), RUNE_C(0x01F248)}, - {RUNE_C(0x01F250), RUNE_C(0x01F251)}, - {RUNE_C(0x01FBF0), RUNE_C(0x01FBF9)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x0E0000), RUNE_C(0x0E0FFF)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0xA5, 0x3C, 0x77, + 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x5D, 0xAA, + 0xAB, 0x56, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAB, + 0xD6, 0xCE, 0xDB, 0xB1, 0xD5, 0xD2, 0xAE, 0x11, + 0xF0, 0xBF, 0xAA, 0x4A, 0x55, 0x55, 0xDE, 0x55}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x6C, + 0x7A, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x3F, 0x1F, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x55, 0xC4, + 0xF0, 0xD7, 0xFE, 0xFF, 0xFB, 0x0F, 0x00, 0x00, + 0x04, 0x80, 0x7F, 0x55, 0x55, 0x55, 0xB7, 0xE6}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0x01, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xAB, 0x2A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xB0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, + 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x20, 0x84, 0x10, 0x00, 0x02, 0xE8, 0x03, + 0x02, 0x00, 0x08, 0x20, 0x84, 0x10, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xF7, + 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x15, 0x4C, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, + {0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x3F, 0x00, 0xAA, 0x00, 0xFF, 0xAA, 0x2A, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0xFF, + 0x9F, 0xFF, 0x08, 0xEF, 0x08, 0xFF, 0x9C, 0x7F}, + {0xFF, 0xFF, 0x82, 0x00, 0x70, 0xFC, 0xD8, 0x50, + 0x80, 0x03, 0x80, 0x80, 0xFF, 0xFF, 0xF3, 0xFF, + 0xFF, 0x7F, 0xFF, 0x1F, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFE, 0x6F, 0x3E, 0x57, 0xBD, 0xFF, 0xFB, + 0xE1, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00}, + {0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xEA, 0x25, 0xF0, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x05, 0x28, 0x04, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x35, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x54, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x6A, + 0x55, 0x28, 0x45, 0x55, 0x55, 0x7D, 0x5F, 0x55, + 0xF5, 0x02, 0x41, 0x01, 0x00, 0x00, 0x3C, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0x00, 0x02, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x3F, 0xE5, 0x7F, 0x65, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xA0, 0xFF, 0xFF, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, + 0x9F, 0xFF, 0xF7, 0xFF, 0x7F, 0x0F, 0xD7, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x7F, 0x7F, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xF8, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, + 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cwkcf(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_cwl.c b/lib/unicode/prop/uprop_is_cwl.c index 82152a2..e3792d2 100644 --- a/lib/unicode/prop/uprop_is_cwl.c +++ b/lib/unicode/prop/uprop_is_cwl.c @@ -1,634 +1,384 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 10, 11, + 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 17, + 6, 6, 6, 6, 18, 19, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 22, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x000100)}, - {RUNE_C(0x000102), RUNE_C(0x000102)}, - {RUNE_C(0x000104), RUNE_C(0x000104)}, - {RUNE_C(0x000106), RUNE_C(0x000106)}, - {RUNE_C(0x000108), RUNE_C(0x000108)}, - {RUNE_C(0x00010A), RUNE_C(0x00010A)}, - {RUNE_C(0x00010C), RUNE_C(0x00010C)}, - {RUNE_C(0x00010E), RUNE_C(0x00010E)}, - {RUNE_C(0x000110), RUNE_C(0x000110)}, - {RUNE_C(0x000112), RUNE_C(0x000112)}, - {RUNE_C(0x000114), RUNE_C(0x000114)}, - {RUNE_C(0x000116), RUNE_C(0x000116)}, - {RUNE_C(0x000118), RUNE_C(0x000118)}, - {RUNE_C(0x00011A), RUNE_C(0x00011A)}, - {RUNE_C(0x00011C), RUNE_C(0x00011C)}, - {RUNE_C(0x00011E), RUNE_C(0x00011E)}, - {RUNE_C(0x000120), RUNE_C(0x000120)}, - {RUNE_C(0x000122), RUNE_C(0x000122)}, - {RUNE_C(0x000124), RUNE_C(0x000124)}, - {RUNE_C(0x000126), RUNE_C(0x000126)}, - {RUNE_C(0x000128), RUNE_C(0x000128)}, - {RUNE_C(0x00012A), RUNE_C(0x00012A)}, - {RUNE_C(0x00012C), RUNE_C(0x00012C)}, - {RUNE_C(0x00012E), RUNE_C(0x00012E)}, - {RUNE_C(0x000130), RUNE_C(0x000130)}, - {RUNE_C(0x000132), RUNE_C(0x000132)}, - {RUNE_C(0x000134), RUNE_C(0x000134)}, - {RUNE_C(0x000136), RUNE_C(0x000136)}, - {RUNE_C(0x000139), RUNE_C(0x000139)}, - {RUNE_C(0x00013B), RUNE_C(0x00013B)}, - {RUNE_C(0x00013D), RUNE_C(0x00013D)}, - {RUNE_C(0x00013F), RUNE_C(0x00013F)}, - {RUNE_C(0x000141), RUNE_C(0x000141)}, - {RUNE_C(0x000143), RUNE_C(0x000143)}, - {RUNE_C(0x000145), RUNE_C(0x000145)}, - {RUNE_C(0x000147), RUNE_C(0x000147)}, - {RUNE_C(0x00014A), RUNE_C(0x00014A)}, - {RUNE_C(0x00014C), RUNE_C(0x00014C)}, - {RUNE_C(0x00014E), RUNE_C(0x00014E)}, - {RUNE_C(0x000150), RUNE_C(0x000150)}, - {RUNE_C(0x000152), RUNE_C(0x000152)}, - {RUNE_C(0x000154), RUNE_C(0x000154)}, - {RUNE_C(0x000156), RUNE_C(0x000156)}, - {RUNE_C(0x000158), RUNE_C(0x000158)}, - {RUNE_C(0x00015A), RUNE_C(0x00015A)}, - {RUNE_C(0x00015C), RUNE_C(0x00015C)}, - {RUNE_C(0x00015E), RUNE_C(0x00015E)}, - {RUNE_C(0x000160), RUNE_C(0x000160)}, - {RUNE_C(0x000162), RUNE_C(0x000162)}, - {RUNE_C(0x000164), RUNE_C(0x000164)}, - {RUNE_C(0x000166), RUNE_C(0x000166)}, - {RUNE_C(0x000168), RUNE_C(0x000168)}, - {RUNE_C(0x00016A), RUNE_C(0x00016A)}, - {RUNE_C(0x00016C), RUNE_C(0x00016C)}, - {RUNE_C(0x00016E), RUNE_C(0x00016E)}, - {RUNE_C(0x000170), RUNE_C(0x000170)}, - {RUNE_C(0x000172), RUNE_C(0x000172)}, - {RUNE_C(0x000174), RUNE_C(0x000174)}, - {RUNE_C(0x000176), RUNE_C(0x000176)}, - {RUNE_C(0x000178), RUNE_C(0x000179)}, - {RUNE_C(0x00017B), RUNE_C(0x00017B)}, - {RUNE_C(0x00017D), RUNE_C(0x00017D)}, - {RUNE_C(0x000181), RUNE_C(0x000182)}, - {RUNE_C(0x000184), RUNE_C(0x000184)}, - {RUNE_C(0x000186), RUNE_C(0x000187)}, - {RUNE_C(0x000189), RUNE_C(0x00018B)}, - {RUNE_C(0x00018E), RUNE_C(0x000191)}, - {RUNE_C(0x000193), RUNE_C(0x000194)}, - {RUNE_C(0x000196), RUNE_C(0x000198)}, - {RUNE_C(0x00019C), RUNE_C(0x00019D)}, - {RUNE_C(0x00019F), RUNE_C(0x0001A0)}, - {RUNE_C(0x0001A2), RUNE_C(0x0001A2)}, - {RUNE_C(0x0001A4), RUNE_C(0x0001A4)}, - {RUNE_C(0x0001A6), RUNE_C(0x0001A7)}, - {RUNE_C(0x0001A9), RUNE_C(0x0001A9)}, - {RUNE_C(0x0001AC), RUNE_C(0x0001AC)}, - {RUNE_C(0x0001AE), RUNE_C(0x0001AF)}, - {RUNE_C(0x0001B1), RUNE_C(0x0001B3)}, - {RUNE_C(0x0001B5), RUNE_C(0x0001B5)}, - {RUNE_C(0x0001B7), RUNE_C(0x0001B8)}, - {RUNE_C(0x0001BC), RUNE_C(0x0001BC)}, - {RUNE_C(0x0001C4), RUNE_C(0x0001C5)}, - {RUNE_C(0x0001C7), RUNE_C(0x0001C8)}, - {RUNE_C(0x0001CA), RUNE_C(0x0001CB)}, - {RUNE_C(0x0001CD), RUNE_C(0x0001CD)}, - {RUNE_C(0x0001CF), RUNE_C(0x0001CF)}, - {RUNE_C(0x0001D1), RUNE_C(0x0001D1)}, - {RUNE_C(0x0001D3), RUNE_C(0x0001D3)}, - {RUNE_C(0x0001D5), RUNE_C(0x0001D5)}, - {RUNE_C(0x0001D7), RUNE_C(0x0001D7)}, - {RUNE_C(0x0001D9), RUNE_C(0x0001D9)}, - {RUNE_C(0x0001DB), RUNE_C(0x0001DB)}, - {RUNE_C(0x0001DE), RUNE_C(0x0001DE)}, - {RUNE_C(0x0001E0), RUNE_C(0x0001E0)}, - {RUNE_C(0x0001E2), RUNE_C(0x0001E2)}, - {RUNE_C(0x0001E4), RUNE_C(0x0001E4)}, - {RUNE_C(0x0001E6), RUNE_C(0x0001E6)}, - {RUNE_C(0x0001E8), RUNE_C(0x0001E8)}, - {RUNE_C(0x0001EA), RUNE_C(0x0001EA)}, - {RUNE_C(0x0001EC), RUNE_C(0x0001EC)}, - {RUNE_C(0x0001EE), RUNE_C(0x0001EE)}, - {RUNE_C(0x0001F1), RUNE_C(0x0001F2)}, - {RUNE_C(0x0001F4), RUNE_C(0x0001F4)}, - {RUNE_C(0x0001F6), RUNE_C(0x0001F8)}, - {RUNE_C(0x0001FA), RUNE_C(0x0001FA)}, - {RUNE_C(0x0001FC), RUNE_C(0x0001FC)}, - {RUNE_C(0x0001FE), RUNE_C(0x0001FE)}, - {RUNE_C(0x000200), RUNE_C(0x000200)}, - {RUNE_C(0x000202), RUNE_C(0x000202)}, - {RUNE_C(0x000204), RUNE_C(0x000204)}, - {RUNE_C(0x000206), RUNE_C(0x000206)}, - {RUNE_C(0x000208), RUNE_C(0x000208)}, - {RUNE_C(0x00020A), RUNE_C(0x00020A)}, - {RUNE_C(0x00020C), RUNE_C(0x00020C)}, - {RUNE_C(0x00020E), RUNE_C(0x00020E)}, - {RUNE_C(0x000210), RUNE_C(0x000210)}, - {RUNE_C(0x000212), RUNE_C(0x000212)}, - {RUNE_C(0x000214), RUNE_C(0x000214)}, - {RUNE_C(0x000216), RUNE_C(0x000216)}, - {RUNE_C(0x000218), RUNE_C(0x000218)}, - {RUNE_C(0x00021A), RUNE_C(0x00021A)}, - {RUNE_C(0x00021C), RUNE_C(0x00021C)}, - {RUNE_C(0x00021E), RUNE_C(0x00021E)}, - {RUNE_C(0x000220), RUNE_C(0x000220)}, - {RUNE_C(0x000222), RUNE_C(0x000222)}, - {RUNE_C(0x000224), RUNE_C(0x000224)}, - {RUNE_C(0x000226), RUNE_C(0x000226)}, - {RUNE_C(0x000228), RUNE_C(0x000228)}, - {RUNE_C(0x00022A), RUNE_C(0x00022A)}, - {RUNE_C(0x00022C), RUNE_C(0x00022C)}, - {RUNE_C(0x00022E), RUNE_C(0x00022E)}, - {RUNE_C(0x000230), RUNE_C(0x000230)}, - {RUNE_C(0x000232), RUNE_C(0x000232)}, - {RUNE_C(0x00023A), RUNE_C(0x00023B)}, - {RUNE_C(0x00023D), RUNE_C(0x00023E)}, - {RUNE_C(0x000241), RUNE_C(0x000241)}, - {RUNE_C(0x000243), RUNE_C(0x000246)}, - {RUNE_C(0x000248), RUNE_C(0x000248)}, - {RUNE_C(0x00024A), RUNE_C(0x00024A)}, - {RUNE_C(0x00024C), RUNE_C(0x00024C)}, - {RUNE_C(0x00024E), RUNE_C(0x00024E)}, - {RUNE_C(0x000370), RUNE_C(0x000370)}, - {RUNE_C(0x000372), RUNE_C(0x000372)}, - {RUNE_C(0x000376), RUNE_C(0x000376)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x00038F)}, - {RUNE_C(0x000391), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003AB)}, - {RUNE_C(0x0003CF), RUNE_C(0x0003CF)}, - {RUNE_C(0x0003D8), RUNE_C(0x0003D8)}, - {RUNE_C(0x0003DA), RUNE_C(0x0003DA)}, - {RUNE_C(0x0003DC), RUNE_C(0x0003DC)}, - {RUNE_C(0x0003DE), RUNE_C(0x0003DE)}, - {RUNE_C(0x0003E0), RUNE_C(0x0003E0)}, - {RUNE_C(0x0003E2), RUNE_C(0x0003E2)}, - {RUNE_C(0x0003E4), RUNE_C(0x0003E4)}, - {RUNE_C(0x0003E6), RUNE_C(0x0003E6)}, - {RUNE_C(0x0003E8), RUNE_C(0x0003E8)}, - {RUNE_C(0x0003EA), RUNE_C(0x0003EA)}, - {RUNE_C(0x0003EC), RUNE_C(0x0003EC)}, - {RUNE_C(0x0003EE), RUNE_C(0x0003EE)}, - {RUNE_C(0x0003F4), RUNE_C(0x0003F4)}, - {RUNE_C(0x0003F7), RUNE_C(0x0003F7)}, - {RUNE_C(0x0003F9), RUNE_C(0x0003FA)}, - {RUNE_C(0x0003FD), RUNE_C(0x00042F)}, - {RUNE_C(0x000460), RUNE_C(0x000460)}, - {RUNE_C(0x000462), RUNE_C(0x000462)}, - {RUNE_C(0x000464), RUNE_C(0x000464)}, - {RUNE_C(0x000466), RUNE_C(0x000466)}, - {RUNE_C(0x000468), RUNE_C(0x000468)}, - {RUNE_C(0x00046A), RUNE_C(0x00046A)}, - {RUNE_C(0x00046C), RUNE_C(0x00046C)}, - {RUNE_C(0x00046E), RUNE_C(0x00046E)}, - {RUNE_C(0x000470), RUNE_C(0x000470)}, - {RUNE_C(0x000472), RUNE_C(0x000472)}, - {RUNE_C(0x000474), RUNE_C(0x000474)}, - {RUNE_C(0x000476), RUNE_C(0x000476)}, - {RUNE_C(0x000478), RUNE_C(0x000478)}, - {RUNE_C(0x00047A), RUNE_C(0x00047A)}, - {RUNE_C(0x00047C), RUNE_C(0x00047C)}, - {RUNE_C(0x00047E), RUNE_C(0x00047E)}, - {RUNE_C(0x000480), RUNE_C(0x000480)}, - {RUNE_C(0x00048A), RUNE_C(0x00048A)}, - {RUNE_C(0x00048C), RUNE_C(0x00048C)}, - {RUNE_C(0x00048E), RUNE_C(0x00048E)}, - {RUNE_C(0x000490), RUNE_C(0x000490)}, - {RUNE_C(0x000492), RUNE_C(0x000492)}, - {RUNE_C(0x000494), RUNE_C(0x000494)}, - {RUNE_C(0x000496), RUNE_C(0x000496)}, - {RUNE_C(0x000498), RUNE_C(0x000498)}, - {RUNE_C(0x00049A), RUNE_C(0x00049A)}, - {RUNE_C(0x00049C), RUNE_C(0x00049C)}, - {RUNE_C(0x00049E), RUNE_C(0x00049E)}, - {RUNE_C(0x0004A0), RUNE_C(0x0004A0)}, - {RUNE_C(0x0004A2), RUNE_C(0x0004A2)}, - {RUNE_C(0x0004A4), RUNE_C(0x0004A4)}, - {RUNE_C(0x0004A6), RUNE_C(0x0004A6)}, - {RUNE_C(0x0004A8), RUNE_C(0x0004A8)}, - {RUNE_C(0x0004AA), RUNE_C(0x0004AA)}, - {RUNE_C(0x0004AC), RUNE_C(0x0004AC)}, - {RUNE_C(0x0004AE), RUNE_C(0x0004AE)}, - {RUNE_C(0x0004B0), RUNE_C(0x0004B0)}, - {RUNE_C(0x0004B2), RUNE_C(0x0004B2)}, - {RUNE_C(0x0004B4), RUNE_C(0x0004B4)}, - {RUNE_C(0x0004B6), RUNE_C(0x0004B6)}, - {RUNE_C(0x0004B8), RUNE_C(0x0004B8)}, - {RUNE_C(0x0004BA), RUNE_C(0x0004BA)}, - {RUNE_C(0x0004BC), RUNE_C(0x0004BC)}, - {RUNE_C(0x0004BE), RUNE_C(0x0004BE)}, - {RUNE_C(0x0004C0), RUNE_C(0x0004C1)}, - {RUNE_C(0x0004C3), RUNE_C(0x0004C3)}, - {RUNE_C(0x0004C5), RUNE_C(0x0004C5)}, - {RUNE_C(0x0004C7), RUNE_C(0x0004C7)}, - {RUNE_C(0x0004C9), RUNE_C(0x0004C9)}, - {RUNE_C(0x0004CB), RUNE_C(0x0004CB)}, - {RUNE_C(0x0004CD), RUNE_C(0x0004CD)}, - {RUNE_C(0x0004D0), RUNE_C(0x0004D0)}, - {RUNE_C(0x0004D2), RUNE_C(0x0004D2)}, - {RUNE_C(0x0004D4), RUNE_C(0x0004D4)}, - {RUNE_C(0x0004D6), RUNE_C(0x0004D6)}, - {RUNE_C(0x0004D8), RUNE_C(0x0004D8)}, - {RUNE_C(0x0004DA), RUNE_C(0x0004DA)}, - {RUNE_C(0x0004DC), RUNE_C(0x0004DC)}, - {RUNE_C(0x0004DE), RUNE_C(0x0004DE)}, - {RUNE_C(0x0004E0), RUNE_C(0x0004E0)}, - {RUNE_C(0x0004E2), RUNE_C(0x0004E2)}, - {RUNE_C(0x0004E4), RUNE_C(0x0004E4)}, - {RUNE_C(0x0004E6), RUNE_C(0x0004E6)}, - {RUNE_C(0x0004E8), RUNE_C(0x0004E8)}, - {RUNE_C(0x0004EA), RUNE_C(0x0004EA)}, - {RUNE_C(0x0004EC), RUNE_C(0x0004EC)}, - {RUNE_C(0x0004EE), RUNE_C(0x0004EE)}, - {RUNE_C(0x0004F0), RUNE_C(0x0004F0)}, - {RUNE_C(0x0004F2), RUNE_C(0x0004F2)}, - {RUNE_C(0x0004F4), RUNE_C(0x0004F4)}, - {RUNE_C(0x0004F6), RUNE_C(0x0004F6)}, - {RUNE_C(0x0004F8), RUNE_C(0x0004F8)}, - {RUNE_C(0x0004FA), RUNE_C(0x0004FA)}, - {RUNE_C(0x0004FC), RUNE_C(0x0004FC)}, - {RUNE_C(0x0004FE), RUNE_C(0x0004FE)}, - {RUNE_C(0x000500), RUNE_C(0x000500)}, - {RUNE_C(0x000502), RUNE_C(0x000502)}, - {RUNE_C(0x000504), RUNE_C(0x000504)}, - {RUNE_C(0x000506), RUNE_C(0x000506)}, - {RUNE_C(0x000508), RUNE_C(0x000508)}, - {RUNE_C(0x00050A), RUNE_C(0x00050A)}, - {RUNE_C(0x00050C), RUNE_C(0x00050C)}, - {RUNE_C(0x00050E), RUNE_C(0x00050E)}, - {RUNE_C(0x000510), RUNE_C(0x000510)}, - {RUNE_C(0x000512), RUNE_C(0x000512)}, - {RUNE_C(0x000514), RUNE_C(0x000514)}, - {RUNE_C(0x000516), RUNE_C(0x000516)}, - {RUNE_C(0x000518), RUNE_C(0x000518)}, - {RUNE_C(0x00051A), RUNE_C(0x00051A)}, - {RUNE_C(0x00051C), RUNE_C(0x00051C)}, - {RUNE_C(0x00051E), RUNE_C(0x00051E)}, - {RUNE_C(0x000520), RUNE_C(0x000520)}, - {RUNE_C(0x000522), RUNE_C(0x000522)}, - {RUNE_C(0x000524), RUNE_C(0x000524)}, - {RUNE_C(0x000526), RUNE_C(0x000526)}, - {RUNE_C(0x000528), RUNE_C(0x000528)}, - {RUNE_C(0x00052A), RUNE_C(0x00052A)}, - {RUNE_C(0x00052C), RUNE_C(0x00052C)}, - {RUNE_C(0x00052E), RUNE_C(0x00052E)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001E00)}, - {RUNE_C(0x001E02), RUNE_C(0x001E02)}, - {RUNE_C(0x001E04), RUNE_C(0x001E04)}, - {RUNE_C(0x001E06), RUNE_C(0x001E06)}, - {RUNE_C(0x001E08), RUNE_C(0x001E08)}, - {RUNE_C(0x001E0A), RUNE_C(0x001E0A)}, - {RUNE_C(0x001E0C), RUNE_C(0x001E0C)}, - {RUNE_C(0x001E0E), RUNE_C(0x001E0E)}, - {RUNE_C(0x001E10), RUNE_C(0x001E10)}, - {RUNE_C(0x001E12), RUNE_C(0x001E12)}, - {RUNE_C(0x001E14), RUNE_C(0x001E14)}, - {RUNE_C(0x001E16), RUNE_C(0x001E16)}, - {RUNE_C(0x001E18), RUNE_C(0x001E18)}, - {RUNE_C(0x001E1A), RUNE_C(0x001E1A)}, - {RUNE_C(0x001E1C), RUNE_C(0x001E1C)}, - {RUNE_C(0x001E1E), RUNE_C(0x001E1E)}, - {RUNE_C(0x001E20), RUNE_C(0x001E20)}, - {RUNE_C(0x001E22), RUNE_C(0x001E22)}, - {RUNE_C(0x001E24), RUNE_C(0x001E24)}, - {RUNE_C(0x001E26), RUNE_C(0x001E26)}, - {RUNE_C(0x001E28), RUNE_C(0x001E28)}, - {RUNE_C(0x001E2A), RUNE_C(0x001E2A)}, - {RUNE_C(0x001E2C), RUNE_C(0x001E2C)}, - {RUNE_C(0x001E2E), RUNE_C(0x001E2E)}, - {RUNE_C(0x001E30), RUNE_C(0x001E30)}, - {RUNE_C(0x001E32), RUNE_C(0x001E32)}, - {RUNE_C(0x001E34), RUNE_C(0x001E34)}, - {RUNE_C(0x001E36), RUNE_C(0x001E36)}, - {RUNE_C(0x001E38), RUNE_C(0x001E38)}, - {RUNE_C(0x001E3A), RUNE_C(0x001E3A)}, - {RUNE_C(0x001E3C), RUNE_C(0x001E3C)}, - {RUNE_C(0x001E3E), RUNE_C(0x001E3E)}, - {RUNE_C(0x001E40), RUNE_C(0x001E40)}, - {RUNE_C(0x001E42), RUNE_C(0x001E42)}, - {RUNE_C(0x001E44), RUNE_C(0x001E44)}, - {RUNE_C(0x001E46), RUNE_C(0x001E46)}, - {RUNE_C(0x001E48), RUNE_C(0x001E48)}, - {RUNE_C(0x001E4A), RUNE_C(0x001E4A)}, - {RUNE_C(0x001E4C), RUNE_C(0x001E4C)}, - {RUNE_C(0x001E4E), RUNE_C(0x001E4E)}, - {RUNE_C(0x001E50), RUNE_C(0x001E50)}, - {RUNE_C(0x001E52), RUNE_C(0x001E52)}, - {RUNE_C(0x001E54), RUNE_C(0x001E54)}, - {RUNE_C(0x001E56), RUNE_C(0x001E56)}, - {RUNE_C(0x001E58), RUNE_C(0x001E58)}, - {RUNE_C(0x001E5A), RUNE_C(0x001E5A)}, - {RUNE_C(0x001E5C), RUNE_C(0x001E5C)}, - {RUNE_C(0x001E5E), RUNE_C(0x001E5E)}, - {RUNE_C(0x001E60), RUNE_C(0x001E60)}, - {RUNE_C(0x001E62), RUNE_C(0x001E62)}, - {RUNE_C(0x001E64), RUNE_C(0x001E64)}, - {RUNE_C(0x001E66), RUNE_C(0x001E66)}, - {RUNE_C(0x001E68), RUNE_C(0x001E68)}, - {RUNE_C(0x001E6A), RUNE_C(0x001E6A)}, - {RUNE_C(0x001E6C), RUNE_C(0x001E6C)}, - {RUNE_C(0x001E6E), RUNE_C(0x001E6E)}, - {RUNE_C(0x001E70), RUNE_C(0x001E70)}, - {RUNE_C(0x001E72), RUNE_C(0x001E72)}, - {RUNE_C(0x001E74), RUNE_C(0x001E74)}, - {RUNE_C(0x001E76), RUNE_C(0x001E76)}, - {RUNE_C(0x001E78), RUNE_C(0x001E78)}, - {RUNE_C(0x001E7A), RUNE_C(0x001E7A)}, - {RUNE_C(0x001E7C), RUNE_C(0x001E7C)}, - {RUNE_C(0x001E7E), RUNE_C(0x001E7E)}, - {RUNE_C(0x001E80), RUNE_C(0x001E80)}, - {RUNE_C(0x001E82), RUNE_C(0x001E82)}, - {RUNE_C(0x001E84), RUNE_C(0x001E84)}, - {RUNE_C(0x001E86), RUNE_C(0x001E86)}, - {RUNE_C(0x001E88), RUNE_C(0x001E88)}, - {RUNE_C(0x001E8A), RUNE_C(0x001E8A)}, - {RUNE_C(0x001E8C), RUNE_C(0x001E8C)}, - {RUNE_C(0x001E8E), RUNE_C(0x001E8E)}, - {RUNE_C(0x001E90), RUNE_C(0x001E90)}, - {RUNE_C(0x001E92), RUNE_C(0x001E92)}, - {RUNE_C(0x001E94), RUNE_C(0x001E94)}, - {RUNE_C(0x001E9E), RUNE_C(0x001E9E)}, - {RUNE_C(0x001EA0), RUNE_C(0x001EA0)}, - {RUNE_C(0x001EA2), RUNE_C(0x001EA2)}, - {RUNE_C(0x001EA4), RUNE_C(0x001EA4)}, - {RUNE_C(0x001EA6), RUNE_C(0x001EA6)}, - {RUNE_C(0x001EA8), RUNE_C(0x001EA8)}, - {RUNE_C(0x001EAA), RUNE_C(0x001EAA)}, - {RUNE_C(0x001EAC), RUNE_C(0x001EAC)}, - {RUNE_C(0x001EAE), RUNE_C(0x001EAE)}, - {RUNE_C(0x001EB0), RUNE_C(0x001EB0)}, - {RUNE_C(0x001EB2), RUNE_C(0x001EB2)}, - {RUNE_C(0x001EB4), RUNE_C(0x001EB4)}, - {RUNE_C(0x001EB6), RUNE_C(0x001EB6)}, - {RUNE_C(0x001EB8), RUNE_C(0x001EB8)}, - {RUNE_C(0x001EBA), RUNE_C(0x001EBA)}, - {RUNE_C(0x001EBC), RUNE_C(0x001EBC)}, - {RUNE_C(0x001EBE), RUNE_C(0x001EBE)}, - {RUNE_C(0x001EC0), RUNE_C(0x001EC0)}, - {RUNE_C(0x001EC2), RUNE_C(0x001EC2)}, - {RUNE_C(0x001EC4), RUNE_C(0x001EC4)}, - {RUNE_C(0x001EC6), RUNE_C(0x001EC6)}, - {RUNE_C(0x001EC8), RUNE_C(0x001EC8)}, - {RUNE_C(0x001ECA), RUNE_C(0x001ECA)}, - {RUNE_C(0x001ECC), RUNE_C(0x001ECC)}, - {RUNE_C(0x001ECE), RUNE_C(0x001ECE)}, - {RUNE_C(0x001ED0), RUNE_C(0x001ED0)}, - {RUNE_C(0x001ED2), RUNE_C(0x001ED2)}, - {RUNE_C(0x001ED4), RUNE_C(0x001ED4)}, - {RUNE_C(0x001ED6), RUNE_C(0x001ED6)}, - {RUNE_C(0x001ED8), RUNE_C(0x001ED8)}, - {RUNE_C(0x001EDA), RUNE_C(0x001EDA)}, - {RUNE_C(0x001EDC), RUNE_C(0x001EDC)}, - {RUNE_C(0x001EDE), RUNE_C(0x001EDE)}, - {RUNE_C(0x001EE0), RUNE_C(0x001EE0)}, - {RUNE_C(0x001EE2), RUNE_C(0x001EE2)}, - {RUNE_C(0x001EE4), RUNE_C(0x001EE4)}, - {RUNE_C(0x001EE6), RUNE_C(0x001EE6)}, - {RUNE_C(0x001EE8), RUNE_C(0x001EE8)}, - {RUNE_C(0x001EEA), RUNE_C(0x001EEA)}, - {RUNE_C(0x001EEC), RUNE_C(0x001EEC)}, - {RUNE_C(0x001EEE), RUNE_C(0x001EEE)}, - {RUNE_C(0x001EF0), RUNE_C(0x001EF0)}, - {RUNE_C(0x001EF2), RUNE_C(0x001EF2)}, - {RUNE_C(0x001EF4), RUNE_C(0x001EF4)}, - {RUNE_C(0x001EF6), RUNE_C(0x001EF6)}, - {RUNE_C(0x001EF8), RUNE_C(0x001EF8)}, - {RUNE_C(0x001EFA), RUNE_C(0x001EFA)}, - {RUNE_C(0x001EFC), RUNE_C(0x001EFC)}, - {RUNE_C(0x001EFE), RUNE_C(0x001EFE)}, - {RUNE_C(0x001F08), RUNE_C(0x001F0F)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F28), RUNE_C(0x001F2F)}, - {RUNE_C(0x001F38), RUNE_C(0x001F3F)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F5F)}, - {RUNE_C(0x001F68), RUNE_C(0x001F6F)}, - {RUNE_C(0x001F88), RUNE_C(0x001F8F)}, - {RUNE_C(0x001F98), RUNE_C(0x001F9F)}, - {RUNE_C(0x001FA8), RUNE_C(0x001FAF)}, - {RUNE_C(0x001FB8), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FC8), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD8), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE8), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF8), RUNE_C(0x001FFC)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x00212A), RUNE_C(0x00212B)}, - {RUNE_C(0x002132), RUNE_C(0x002132)}, - {RUNE_C(0x002160), RUNE_C(0x00216F)}, - {RUNE_C(0x002183), RUNE_C(0x002183)}, - {RUNE_C(0x0024B6), RUNE_C(0x0024CF)}, - {RUNE_C(0x002C00), RUNE_C(0x002C2F)}, - {RUNE_C(0x002C60), RUNE_C(0x002C60)}, - {RUNE_C(0x002C62), RUNE_C(0x002C64)}, - {RUNE_C(0x002C67), RUNE_C(0x002C67)}, - {RUNE_C(0x002C69), RUNE_C(0x002C69)}, - {RUNE_C(0x002C6B), RUNE_C(0x002C6B)}, - {RUNE_C(0x002C6D), RUNE_C(0x002C70)}, - {RUNE_C(0x002C72), RUNE_C(0x002C72)}, - {RUNE_C(0x002C75), RUNE_C(0x002C75)}, - {RUNE_C(0x002C7E), RUNE_C(0x002C80)}, - {RUNE_C(0x002C82), RUNE_C(0x002C82)}, - {RUNE_C(0x002C84), RUNE_C(0x002C84)}, - {RUNE_C(0x002C86), RUNE_C(0x002C86)}, - {RUNE_C(0x002C88), RUNE_C(0x002C88)}, - {RUNE_C(0x002C8A), RUNE_C(0x002C8A)}, - {RUNE_C(0x002C8C), RUNE_C(0x002C8C)}, - {RUNE_C(0x002C8E), RUNE_C(0x002C8E)}, - {RUNE_C(0x002C90), RUNE_C(0x002C90)}, - {RUNE_C(0x002C92), RUNE_C(0x002C92)}, - {RUNE_C(0x002C94), RUNE_C(0x002C94)}, - {RUNE_C(0x002C96), RUNE_C(0x002C96)}, - {RUNE_C(0x002C98), RUNE_C(0x002C98)}, - {RUNE_C(0x002C9A), RUNE_C(0x002C9A)}, - {RUNE_C(0x002C9C), RUNE_C(0x002C9C)}, - {RUNE_C(0x002C9E), RUNE_C(0x002C9E)}, - {RUNE_C(0x002CA0), RUNE_C(0x002CA0)}, - {RUNE_C(0x002CA2), RUNE_C(0x002CA2)}, - {RUNE_C(0x002CA4), RUNE_C(0x002CA4)}, - {RUNE_C(0x002CA6), RUNE_C(0x002CA6)}, - {RUNE_C(0x002CA8), RUNE_C(0x002CA8)}, - {RUNE_C(0x002CAA), RUNE_C(0x002CAA)}, - {RUNE_C(0x002CAC), RUNE_C(0x002CAC)}, - {RUNE_C(0x002CAE), RUNE_C(0x002CAE)}, - {RUNE_C(0x002CB0), RUNE_C(0x002CB0)}, - {RUNE_C(0x002CB2), RUNE_C(0x002CB2)}, - {RUNE_C(0x002CB4), RUNE_C(0x002CB4)}, - {RUNE_C(0x002CB6), RUNE_C(0x002CB6)}, - {RUNE_C(0x002CB8), RUNE_C(0x002CB8)}, - {RUNE_C(0x002CBA), RUNE_C(0x002CBA)}, - {RUNE_C(0x002CBC), RUNE_C(0x002CBC)}, - {RUNE_C(0x002CBE), RUNE_C(0x002CBE)}, - {RUNE_C(0x002CC0), RUNE_C(0x002CC0)}, - {RUNE_C(0x002CC2), RUNE_C(0x002CC2)}, - {RUNE_C(0x002CC4), RUNE_C(0x002CC4)}, - {RUNE_C(0x002CC6), RUNE_C(0x002CC6)}, - {RUNE_C(0x002CC8), RUNE_C(0x002CC8)}, - {RUNE_C(0x002CCA), RUNE_C(0x002CCA)}, - {RUNE_C(0x002CCC), RUNE_C(0x002CCC)}, - {RUNE_C(0x002CCE), RUNE_C(0x002CCE)}, - {RUNE_C(0x002CD0), RUNE_C(0x002CD0)}, - {RUNE_C(0x002CD2), RUNE_C(0x002CD2)}, - {RUNE_C(0x002CD4), RUNE_C(0x002CD4)}, - {RUNE_C(0x002CD6), RUNE_C(0x002CD6)}, - {RUNE_C(0x002CD8), RUNE_C(0x002CD8)}, - {RUNE_C(0x002CDA), RUNE_C(0x002CDA)}, - {RUNE_C(0x002CDC), RUNE_C(0x002CDC)}, - {RUNE_C(0x002CDE), RUNE_C(0x002CDE)}, - {RUNE_C(0x002CE0), RUNE_C(0x002CE0)}, - {RUNE_C(0x002CE2), RUNE_C(0x002CE2)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEB)}, - {RUNE_C(0x002CED), RUNE_C(0x002CED)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF2)}, - {RUNE_C(0x00A640), RUNE_C(0x00A640)}, - {RUNE_C(0x00A642), RUNE_C(0x00A642)}, - {RUNE_C(0x00A644), RUNE_C(0x00A644)}, - {RUNE_C(0x00A646), RUNE_C(0x00A646)}, - {RUNE_C(0x00A648), RUNE_C(0x00A648)}, - {RUNE_C(0x00A64A), RUNE_C(0x00A64A)}, - {RUNE_C(0x00A64C), RUNE_C(0x00A64C)}, - {RUNE_C(0x00A64E), RUNE_C(0x00A64E)}, - {RUNE_C(0x00A650), RUNE_C(0x00A650)}, - {RUNE_C(0x00A652), RUNE_C(0x00A652)}, - {RUNE_C(0x00A654), RUNE_C(0x00A654)}, - {RUNE_C(0x00A656), RUNE_C(0x00A656)}, - {RUNE_C(0x00A658), RUNE_C(0x00A658)}, - {RUNE_C(0x00A65A), RUNE_C(0x00A65A)}, - {RUNE_C(0x00A65C), RUNE_C(0x00A65C)}, - {RUNE_C(0x00A65E), RUNE_C(0x00A65E)}, - {RUNE_C(0x00A660), RUNE_C(0x00A660)}, - {RUNE_C(0x00A662), RUNE_C(0x00A662)}, - {RUNE_C(0x00A664), RUNE_C(0x00A664)}, - {RUNE_C(0x00A666), RUNE_C(0x00A666)}, - {RUNE_C(0x00A668), RUNE_C(0x00A668)}, - {RUNE_C(0x00A66A), RUNE_C(0x00A66A)}, - {RUNE_C(0x00A66C), RUNE_C(0x00A66C)}, - {RUNE_C(0x00A680), RUNE_C(0x00A680)}, - {RUNE_C(0x00A682), RUNE_C(0x00A682)}, - {RUNE_C(0x00A684), RUNE_C(0x00A684)}, - {RUNE_C(0x00A686), RUNE_C(0x00A686)}, - {RUNE_C(0x00A688), RUNE_C(0x00A688)}, - {RUNE_C(0x00A68A), RUNE_C(0x00A68A)}, - {RUNE_C(0x00A68C), RUNE_C(0x00A68C)}, - {RUNE_C(0x00A68E), RUNE_C(0x00A68E)}, - {RUNE_C(0x00A690), RUNE_C(0x00A690)}, - {RUNE_C(0x00A692), RUNE_C(0x00A692)}, - {RUNE_C(0x00A694), RUNE_C(0x00A694)}, - {RUNE_C(0x00A696), RUNE_C(0x00A696)}, - {RUNE_C(0x00A698), RUNE_C(0x00A698)}, - {RUNE_C(0x00A69A), RUNE_C(0x00A69A)}, - {RUNE_C(0x00A722), RUNE_C(0x00A722)}, - {RUNE_C(0x00A724), RUNE_C(0x00A724)}, - {RUNE_C(0x00A726), RUNE_C(0x00A726)}, - {RUNE_C(0x00A728), RUNE_C(0x00A728)}, - {RUNE_C(0x00A72A), RUNE_C(0x00A72A)}, - {RUNE_C(0x00A72C), RUNE_C(0x00A72C)}, - {RUNE_C(0x00A72E), RUNE_C(0x00A72E)}, - {RUNE_C(0x00A732), RUNE_C(0x00A732)}, - {RUNE_C(0x00A734), RUNE_C(0x00A734)}, - {RUNE_C(0x00A736), RUNE_C(0x00A736)}, - {RUNE_C(0x00A738), RUNE_C(0x00A738)}, - {RUNE_C(0x00A73A), RUNE_C(0x00A73A)}, - {RUNE_C(0x00A73C), RUNE_C(0x00A73C)}, - {RUNE_C(0x00A73E), RUNE_C(0x00A73E)}, - {RUNE_C(0x00A740), RUNE_C(0x00A740)}, - {RUNE_C(0x00A742), RUNE_C(0x00A742)}, - {RUNE_C(0x00A744), RUNE_C(0x00A744)}, - {RUNE_C(0x00A746), RUNE_C(0x00A746)}, - {RUNE_C(0x00A748), RUNE_C(0x00A748)}, - {RUNE_C(0x00A74A), RUNE_C(0x00A74A)}, - {RUNE_C(0x00A74C), RUNE_C(0x00A74C)}, - {RUNE_C(0x00A74E), RUNE_C(0x00A74E)}, - {RUNE_C(0x00A750), RUNE_C(0x00A750)}, - {RUNE_C(0x00A752), RUNE_C(0x00A752)}, - {RUNE_C(0x00A754), RUNE_C(0x00A754)}, - {RUNE_C(0x00A756), RUNE_C(0x00A756)}, - {RUNE_C(0x00A758), RUNE_C(0x00A758)}, - {RUNE_C(0x00A75A), RUNE_C(0x00A75A)}, - {RUNE_C(0x00A75C), RUNE_C(0x00A75C)}, - {RUNE_C(0x00A75E), RUNE_C(0x00A75E)}, - {RUNE_C(0x00A760), RUNE_C(0x00A760)}, - {RUNE_C(0x00A762), RUNE_C(0x00A762)}, - {RUNE_C(0x00A764), RUNE_C(0x00A764)}, - {RUNE_C(0x00A766), RUNE_C(0x00A766)}, - {RUNE_C(0x00A768), RUNE_C(0x00A768)}, - {RUNE_C(0x00A76A), RUNE_C(0x00A76A)}, - {RUNE_C(0x00A76C), RUNE_C(0x00A76C)}, - {RUNE_C(0x00A76E), RUNE_C(0x00A76E)}, - {RUNE_C(0x00A779), RUNE_C(0x00A779)}, - {RUNE_C(0x00A77B), RUNE_C(0x00A77B)}, - {RUNE_C(0x00A77D), RUNE_C(0x00A77E)}, - {RUNE_C(0x00A780), RUNE_C(0x00A780)}, - {RUNE_C(0x00A782), RUNE_C(0x00A782)}, - {RUNE_C(0x00A784), RUNE_C(0x00A784)}, - {RUNE_C(0x00A786), RUNE_C(0x00A786)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A78B)}, - {RUNE_C(0x00A78D), RUNE_C(0x00A78D)}, - {RUNE_C(0x00A790), RUNE_C(0x00A790)}, - {RUNE_C(0x00A792), RUNE_C(0x00A792)}, - {RUNE_C(0x00A796), RUNE_C(0x00A796)}, - {RUNE_C(0x00A798), RUNE_C(0x00A798)}, - {RUNE_C(0x00A79A), RUNE_C(0x00A79A)}, - {RUNE_C(0x00A79C), RUNE_C(0x00A79C)}, - {RUNE_C(0x00A79E), RUNE_C(0x00A79E)}, - {RUNE_C(0x00A7A0), RUNE_C(0x00A7A0)}, - {RUNE_C(0x00A7A2), RUNE_C(0x00A7A2)}, - {RUNE_C(0x00A7A4), RUNE_C(0x00A7A4)}, - {RUNE_C(0x00A7A6), RUNE_C(0x00A7A6)}, - {RUNE_C(0x00A7A8), RUNE_C(0x00A7A8)}, - {RUNE_C(0x00A7AA), RUNE_C(0x00A7AE)}, - {RUNE_C(0x00A7B0), RUNE_C(0x00A7B4)}, - {RUNE_C(0x00A7B6), RUNE_C(0x00A7B6)}, - {RUNE_C(0x00A7B8), RUNE_C(0x00A7B8)}, - {RUNE_C(0x00A7BA), RUNE_C(0x00A7BA)}, - {RUNE_C(0x00A7BC), RUNE_C(0x00A7BC)}, - {RUNE_C(0x00A7BE), RUNE_C(0x00A7BE)}, - {RUNE_C(0x00A7C0), RUNE_C(0x00A7C0)}, - {RUNE_C(0x00A7C2), RUNE_C(0x00A7C2)}, - {RUNE_C(0x00A7C4), RUNE_C(0x00A7C7)}, - {RUNE_C(0x00A7C9), RUNE_C(0x00A7C9)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D0)}, - {RUNE_C(0x00A7D6), RUNE_C(0x00A7D6)}, - {RUNE_C(0x00A7D8), RUNE_C(0x00A7D8)}, - {RUNE_C(0x00A7F5), RUNE_C(0x00A7F5)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x010400), RUNE_C(0x010427)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118BF)}, - {RUNE_C(0x016E40), RUNE_C(0x016E5F)}, - {RUNE_C(0x01E900), RUNE_C(0x01E921)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xAA, + 0xAA, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x2B, + 0xD6, 0xCE, 0xDB, 0xB1, 0xD5, 0xD2, 0xAE, 0x11, + 0xB0, 0xAD, 0xAA, 0x4A, 0x55, 0x55, 0xD6, 0x55}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x6C, + 0x7A, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x80, + 0x40, 0xD7, 0xFE, 0xFF, 0xFB, 0x0F, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x55, 0x55, 0x55, 0x90, 0xE6}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, + 0x01, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0xAB, 0x2A, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x15, 0x40, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}, + {0x00, 0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, + 0x00, 0x3F, 0x00, 0xAA, 0x00, 0xFF, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x1F, + 0x00, 0x1F, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x40, 0x0C, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xEA, 0x25, 0xC0, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x05, 0x28, 0x04, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x00, 0x00, + 0x55, 0x55, 0x55, 0x05, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0x54, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x6A, + 0x55, 0x28, 0x45, 0x55, 0x55, 0x7D, 0x5F, 0x55, + 0xF5, 0x02, 0x41, 0x01, 0x00, 0x00, 0x20, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cwl(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_cwt.c b/lib/unicode/prop/uprop_is_cwt.c index 8ea2110..b84436d 100644 --- a/lib/unicode/prop/uprop_is_cwt.c +++ b/lib/unicode/prop/uprop_is_cwt.c @@ -1,650 +1,396 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 8, 9, 10, 11, + 6, 12, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 14, 15, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 16, 17, 6, 6, 6, 18, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 19, 6, 6, 6, 20, + 6, 6, 6, 6, 21, 22, 6, 6, 6, 6, 6, 6, 23, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 25, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 26, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000101), RUNE_C(0x000101)}, - {RUNE_C(0x000103), RUNE_C(0x000103)}, - {RUNE_C(0x000105), RUNE_C(0x000105)}, - {RUNE_C(0x000107), RUNE_C(0x000107)}, - {RUNE_C(0x000109), RUNE_C(0x000109)}, - {RUNE_C(0x00010B), RUNE_C(0x00010B)}, - {RUNE_C(0x00010D), RUNE_C(0x00010D)}, - {RUNE_C(0x00010F), RUNE_C(0x00010F)}, - {RUNE_C(0x000111), RUNE_C(0x000111)}, - {RUNE_C(0x000113), RUNE_C(0x000113)}, - {RUNE_C(0x000115), RUNE_C(0x000115)}, - {RUNE_C(0x000117), RUNE_C(0x000117)}, - {RUNE_C(0x000119), RUNE_C(0x000119)}, - {RUNE_C(0x00011B), RUNE_C(0x00011B)}, - {RUNE_C(0x00011D), RUNE_C(0x00011D)}, - {RUNE_C(0x00011F), RUNE_C(0x00011F)}, - {RUNE_C(0x000121), RUNE_C(0x000121)}, - {RUNE_C(0x000123), RUNE_C(0x000123)}, - {RUNE_C(0x000125), RUNE_C(0x000125)}, - {RUNE_C(0x000127), RUNE_C(0x000127)}, - {RUNE_C(0x000129), RUNE_C(0x000129)}, - {RUNE_C(0x00012B), RUNE_C(0x00012B)}, - {RUNE_C(0x00012D), RUNE_C(0x00012D)}, - {RUNE_C(0x00012F), RUNE_C(0x00012F)}, - {RUNE_C(0x000131), RUNE_C(0x000131)}, - {RUNE_C(0x000133), RUNE_C(0x000133)}, - {RUNE_C(0x000135), RUNE_C(0x000135)}, - {RUNE_C(0x000137), RUNE_C(0x000137)}, - {RUNE_C(0x00013A), RUNE_C(0x00013A)}, - {RUNE_C(0x00013C), RUNE_C(0x00013C)}, - {RUNE_C(0x00013E), RUNE_C(0x00013E)}, - {RUNE_C(0x000140), RUNE_C(0x000140)}, - {RUNE_C(0x000142), RUNE_C(0x000142)}, - {RUNE_C(0x000144), RUNE_C(0x000144)}, - {RUNE_C(0x000146), RUNE_C(0x000146)}, - {RUNE_C(0x000148), RUNE_C(0x000149)}, - {RUNE_C(0x00014B), RUNE_C(0x00014B)}, - {RUNE_C(0x00014D), RUNE_C(0x00014D)}, - {RUNE_C(0x00014F), RUNE_C(0x00014F)}, - {RUNE_C(0x000151), RUNE_C(0x000151)}, - {RUNE_C(0x000153), RUNE_C(0x000153)}, - {RUNE_C(0x000155), RUNE_C(0x000155)}, - {RUNE_C(0x000157), RUNE_C(0x000157)}, - {RUNE_C(0x000159), RUNE_C(0x000159)}, - {RUNE_C(0x00015B), RUNE_C(0x00015B)}, - {RUNE_C(0x00015D), RUNE_C(0x00015D)}, - {RUNE_C(0x00015F), RUNE_C(0x00015F)}, - {RUNE_C(0x000161), RUNE_C(0x000161)}, - {RUNE_C(0x000163), RUNE_C(0x000163)}, - {RUNE_C(0x000165), RUNE_C(0x000165)}, - {RUNE_C(0x000167), RUNE_C(0x000167)}, - {RUNE_C(0x000169), RUNE_C(0x000169)}, - {RUNE_C(0x00016B), RUNE_C(0x00016B)}, - {RUNE_C(0x00016D), RUNE_C(0x00016D)}, - {RUNE_C(0x00016F), RUNE_C(0x00016F)}, - {RUNE_C(0x000171), RUNE_C(0x000171)}, - {RUNE_C(0x000173), RUNE_C(0x000173)}, - {RUNE_C(0x000175), RUNE_C(0x000175)}, - {RUNE_C(0x000177), RUNE_C(0x000177)}, - {RUNE_C(0x00017A), RUNE_C(0x00017A)}, - {RUNE_C(0x00017C), RUNE_C(0x00017C)}, - {RUNE_C(0x00017E), RUNE_C(0x000180)}, - {RUNE_C(0x000183), RUNE_C(0x000183)}, - {RUNE_C(0x000185), RUNE_C(0x000185)}, - {RUNE_C(0x000188), RUNE_C(0x000188)}, - {RUNE_C(0x00018C), RUNE_C(0x00018C)}, - {RUNE_C(0x000192), RUNE_C(0x000192)}, - {RUNE_C(0x000195), RUNE_C(0x000195)}, - {RUNE_C(0x000199), RUNE_C(0x00019A)}, - {RUNE_C(0x00019E), RUNE_C(0x00019E)}, - {RUNE_C(0x0001A1), RUNE_C(0x0001A1)}, - {RUNE_C(0x0001A3), RUNE_C(0x0001A3)}, - {RUNE_C(0x0001A5), RUNE_C(0x0001A5)}, - {RUNE_C(0x0001A8), RUNE_C(0x0001A8)}, - {RUNE_C(0x0001AD), RUNE_C(0x0001AD)}, - {RUNE_C(0x0001B0), RUNE_C(0x0001B0)}, - {RUNE_C(0x0001B4), RUNE_C(0x0001B4)}, - {RUNE_C(0x0001B6), RUNE_C(0x0001B6)}, - {RUNE_C(0x0001B9), RUNE_C(0x0001B9)}, - {RUNE_C(0x0001BD), RUNE_C(0x0001BD)}, - {RUNE_C(0x0001BF), RUNE_C(0x0001BF)}, - {RUNE_C(0x0001C4), RUNE_C(0x0001C4)}, - {RUNE_C(0x0001C6), RUNE_C(0x0001C7)}, - {RUNE_C(0x0001C9), RUNE_C(0x0001CA)}, - {RUNE_C(0x0001CC), RUNE_C(0x0001CC)}, - {RUNE_C(0x0001CE), RUNE_C(0x0001CE)}, - {RUNE_C(0x0001D0), RUNE_C(0x0001D0)}, - {RUNE_C(0x0001D2), RUNE_C(0x0001D2)}, - {RUNE_C(0x0001D4), RUNE_C(0x0001D4)}, - {RUNE_C(0x0001D6), RUNE_C(0x0001D6)}, - {RUNE_C(0x0001D8), RUNE_C(0x0001D8)}, - {RUNE_C(0x0001DA), RUNE_C(0x0001DA)}, - {RUNE_C(0x0001DC), RUNE_C(0x0001DD)}, - {RUNE_C(0x0001DF), RUNE_C(0x0001DF)}, - {RUNE_C(0x0001E1), RUNE_C(0x0001E1)}, - {RUNE_C(0x0001E3), RUNE_C(0x0001E3)}, - {RUNE_C(0x0001E5), RUNE_C(0x0001E5)}, - {RUNE_C(0x0001E7), RUNE_C(0x0001E7)}, - {RUNE_C(0x0001E9), RUNE_C(0x0001E9)}, - {RUNE_C(0x0001EB), RUNE_C(0x0001EB)}, - {RUNE_C(0x0001ED), RUNE_C(0x0001ED)}, - {RUNE_C(0x0001EF), RUNE_C(0x0001F1)}, - {RUNE_C(0x0001F3), RUNE_C(0x0001F3)}, - {RUNE_C(0x0001F5), RUNE_C(0x0001F5)}, - {RUNE_C(0x0001F9), RUNE_C(0x0001F9)}, - {RUNE_C(0x0001FB), RUNE_C(0x0001FB)}, - {RUNE_C(0x0001FD), RUNE_C(0x0001FD)}, - {RUNE_C(0x0001FF), RUNE_C(0x0001FF)}, - {RUNE_C(0x000201), RUNE_C(0x000201)}, - {RUNE_C(0x000203), RUNE_C(0x000203)}, - {RUNE_C(0x000205), RUNE_C(0x000205)}, - {RUNE_C(0x000207), RUNE_C(0x000207)}, - {RUNE_C(0x000209), RUNE_C(0x000209)}, - {RUNE_C(0x00020B), RUNE_C(0x00020B)}, - {RUNE_C(0x00020D), RUNE_C(0x00020D)}, - {RUNE_C(0x00020F), RUNE_C(0x00020F)}, - {RUNE_C(0x000211), RUNE_C(0x000211)}, - {RUNE_C(0x000213), RUNE_C(0x000213)}, - {RUNE_C(0x000215), RUNE_C(0x000215)}, - {RUNE_C(0x000217), RUNE_C(0x000217)}, - {RUNE_C(0x000219), RUNE_C(0x000219)}, - {RUNE_C(0x00021B), RUNE_C(0x00021B)}, - {RUNE_C(0x00021D), RUNE_C(0x00021D)}, - {RUNE_C(0x00021F), RUNE_C(0x00021F)}, - {RUNE_C(0x000223), RUNE_C(0x000223)}, - {RUNE_C(0x000225), RUNE_C(0x000225)}, - {RUNE_C(0x000227), RUNE_C(0x000227)}, - {RUNE_C(0x000229), RUNE_C(0x000229)}, - {RUNE_C(0x00022B), RUNE_C(0x00022B)}, - {RUNE_C(0x00022D), RUNE_C(0x00022D)}, - {RUNE_C(0x00022F), RUNE_C(0x00022F)}, - {RUNE_C(0x000231), RUNE_C(0x000231)}, - {RUNE_C(0x000233), RUNE_C(0x000233)}, - {RUNE_C(0x00023C), RUNE_C(0x00023C)}, - {RUNE_C(0x00023F), RUNE_C(0x000240)}, - {RUNE_C(0x000242), RUNE_C(0x000242)}, - {RUNE_C(0x000247), RUNE_C(0x000247)}, - {RUNE_C(0x000249), RUNE_C(0x000249)}, - {RUNE_C(0x00024B), RUNE_C(0x00024B)}, - {RUNE_C(0x00024D), RUNE_C(0x00024D)}, - {RUNE_C(0x00024F), RUNE_C(0x000254)}, - {RUNE_C(0x000256), RUNE_C(0x000257)}, - {RUNE_C(0x000259), RUNE_C(0x000259)}, - {RUNE_C(0x00025B), RUNE_C(0x00025C)}, - {RUNE_C(0x000260), RUNE_C(0x000261)}, - {RUNE_C(0x000263), RUNE_C(0x000263)}, - {RUNE_C(0x000265), RUNE_C(0x000266)}, - {RUNE_C(0x000268), RUNE_C(0x00026C)}, - {RUNE_C(0x00026F), RUNE_C(0x00026F)}, - {RUNE_C(0x000271), RUNE_C(0x000272)}, - {RUNE_C(0x000275), RUNE_C(0x000275)}, - {RUNE_C(0x00027D), RUNE_C(0x00027D)}, - {RUNE_C(0x000280), RUNE_C(0x000280)}, - {RUNE_C(0x000282), RUNE_C(0x000283)}, - {RUNE_C(0x000287), RUNE_C(0x00028C)}, - {RUNE_C(0x000292), RUNE_C(0x000292)}, - {RUNE_C(0x00029D), RUNE_C(0x00029E)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000371), RUNE_C(0x000371)}, - {RUNE_C(0x000373), RUNE_C(0x000373)}, - {RUNE_C(0x000377), RUNE_C(0x000377)}, - {RUNE_C(0x00037B), RUNE_C(0x00037D)}, - {RUNE_C(0x000390), RUNE_C(0x000390)}, - {RUNE_C(0x0003AC), RUNE_C(0x0003CE)}, - {RUNE_C(0x0003D0), RUNE_C(0x0003D1)}, - {RUNE_C(0x0003D5), RUNE_C(0x0003D7)}, - {RUNE_C(0x0003D9), RUNE_C(0x0003D9)}, - {RUNE_C(0x0003DB), RUNE_C(0x0003DB)}, - {RUNE_C(0x0003DD), RUNE_C(0x0003DD)}, - {RUNE_C(0x0003DF), RUNE_C(0x0003DF)}, - {RUNE_C(0x0003E1), RUNE_C(0x0003E1)}, - {RUNE_C(0x0003E3), RUNE_C(0x0003E3)}, - {RUNE_C(0x0003E5), RUNE_C(0x0003E5)}, - {RUNE_C(0x0003E7), RUNE_C(0x0003E7)}, - {RUNE_C(0x0003E9), RUNE_C(0x0003E9)}, - {RUNE_C(0x0003EB), RUNE_C(0x0003EB)}, - {RUNE_C(0x0003ED), RUNE_C(0x0003ED)}, - {RUNE_C(0x0003EF), RUNE_C(0x0003F3)}, - {RUNE_C(0x0003F5), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F8), RUNE_C(0x0003F8)}, - {RUNE_C(0x0003FB), RUNE_C(0x0003FB)}, - {RUNE_C(0x000430), RUNE_C(0x00045F)}, - {RUNE_C(0x000461), RUNE_C(0x000461)}, - {RUNE_C(0x000463), RUNE_C(0x000463)}, - {RUNE_C(0x000465), RUNE_C(0x000465)}, - {RUNE_C(0x000467), RUNE_C(0x000467)}, - {RUNE_C(0x000469), RUNE_C(0x000469)}, - {RUNE_C(0x00046B), RUNE_C(0x00046B)}, - {RUNE_C(0x00046D), RUNE_C(0x00046D)}, - {RUNE_C(0x00046F), RUNE_C(0x00046F)}, - {RUNE_C(0x000471), RUNE_C(0x000471)}, - {RUNE_C(0x000473), RUNE_C(0x000473)}, - {RUNE_C(0x000475), RUNE_C(0x000475)}, - {RUNE_C(0x000477), RUNE_C(0x000477)}, - {RUNE_C(0x000479), RUNE_C(0x000479)}, - {RUNE_C(0x00047B), RUNE_C(0x00047B)}, - {RUNE_C(0x00047D), RUNE_C(0x00047D)}, - {RUNE_C(0x00047F), RUNE_C(0x00047F)}, - {RUNE_C(0x000481), RUNE_C(0x000481)}, - {RUNE_C(0x00048B), RUNE_C(0x00048B)}, - {RUNE_C(0x00048D), RUNE_C(0x00048D)}, - {RUNE_C(0x00048F), RUNE_C(0x00048F)}, - {RUNE_C(0x000491), RUNE_C(0x000491)}, - {RUNE_C(0x000493), RUNE_C(0x000493)}, - {RUNE_C(0x000495), RUNE_C(0x000495)}, - {RUNE_C(0x000497), RUNE_C(0x000497)}, - {RUNE_C(0x000499), RUNE_C(0x000499)}, - {RUNE_C(0x00049B), RUNE_C(0x00049B)}, - {RUNE_C(0x00049D), RUNE_C(0x00049D)}, - {RUNE_C(0x00049F), RUNE_C(0x00049F)}, - {RUNE_C(0x0004A1), RUNE_C(0x0004A1)}, - {RUNE_C(0x0004A3), RUNE_C(0x0004A3)}, - {RUNE_C(0x0004A5), RUNE_C(0x0004A5)}, - {RUNE_C(0x0004A7), RUNE_C(0x0004A7)}, - {RUNE_C(0x0004A9), RUNE_C(0x0004A9)}, - {RUNE_C(0x0004AB), RUNE_C(0x0004AB)}, - {RUNE_C(0x0004AD), RUNE_C(0x0004AD)}, - {RUNE_C(0x0004AF), RUNE_C(0x0004AF)}, - {RUNE_C(0x0004B1), RUNE_C(0x0004B1)}, - {RUNE_C(0x0004B3), RUNE_C(0x0004B3)}, - {RUNE_C(0x0004B5), RUNE_C(0x0004B5)}, - {RUNE_C(0x0004B7), RUNE_C(0x0004B7)}, - {RUNE_C(0x0004B9), RUNE_C(0x0004B9)}, - {RUNE_C(0x0004BB), RUNE_C(0x0004BB)}, - {RUNE_C(0x0004BD), RUNE_C(0x0004BD)}, - {RUNE_C(0x0004BF), RUNE_C(0x0004BF)}, - {RUNE_C(0x0004C2), RUNE_C(0x0004C2)}, - {RUNE_C(0x0004C4), RUNE_C(0x0004C4)}, - {RUNE_C(0x0004C6), RUNE_C(0x0004C6)}, - {RUNE_C(0x0004C8), RUNE_C(0x0004C8)}, - {RUNE_C(0x0004CA), RUNE_C(0x0004CA)}, - {RUNE_C(0x0004CC), RUNE_C(0x0004CC)}, - {RUNE_C(0x0004CE), RUNE_C(0x0004CF)}, - {RUNE_C(0x0004D1), RUNE_C(0x0004D1)}, - {RUNE_C(0x0004D3), RUNE_C(0x0004D3)}, - {RUNE_C(0x0004D5), RUNE_C(0x0004D5)}, - {RUNE_C(0x0004D7), RUNE_C(0x0004D7)}, - {RUNE_C(0x0004D9), RUNE_C(0x0004D9)}, - {RUNE_C(0x0004DB), RUNE_C(0x0004DB)}, - {RUNE_C(0x0004DD), RUNE_C(0x0004DD)}, - {RUNE_C(0x0004DF), RUNE_C(0x0004DF)}, - {RUNE_C(0x0004E1), RUNE_C(0x0004E1)}, - {RUNE_C(0x0004E3), RUNE_C(0x0004E3)}, - {RUNE_C(0x0004E5), RUNE_C(0x0004E5)}, - {RUNE_C(0x0004E7), RUNE_C(0x0004E7)}, - {RUNE_C(0x0004E9), RUNE_C(0x0004E9)}, - {RUNE_C(0x0004EB), RUNE_C(0x0004EB)}, - {RUNE_C(0x0004ED), RUNE_C(0x0004ED)}, - {RUNE_C(0x0004EF), RUNE_C(0x0004EF)}, - {RUNE_C(0x0004F1), RUNE_C(0x0004F1)}, - {RUNE_C(0x0004F3), RUNE_C(0x0004F3)}, - {RUNE_C(0x0004F5), RUNE_C(0x0004F5)}, - {RUNE_C(0x0004F7), RUNE_C(0x0004F7)}, - {RUNE_C(0x0004F9), RUNE_C(0x0004F9)}, - {RUNE_C(0x0004FB), RUNE_C(0x0004FB)}, - {RUNE_C(0x0004FD), RUNE_C(0x0004FD)}, - {RUNE_C(0x0004FF), RUNE_C(0x0004FF)}, - {RUNE_C(0x000501), RUNE_C(0x000501)}, - {RUNE_C(0x000503), RUNE_C(0x000503)}, - {RUNE_C(0x000505), RUNE_C(0x000505)}, - {RUNE_C(0x000507), RUNE_C(0x000507)}, - {RUNE_C(0x000509), RUNE_C(0x000509)}, - {RUNE_C(0x00050B), RUNE_C(0x00050B)}, - {RUNE_C(0x00050D), RUNE_C(0x00050D)}, - {RUNE_C(0x00050F), RUNE_C(0x00050F)}, - {RUNE_C(0x000511), RUNE_C(0x000511)}, - {RUNE_C(0x000513), RUNE_C(0x000513)}, - {RUNE_C(0x000515), RUNE_C(0x000515)}, - {RUNE_C(0x000517), RUNE_C(0x000517)}, - {RUNE_C(0x000519), RUNE_C(0x000519)}, - {RUNE_C(0x00051B), RUNE_C(0x00051B)}, - {RUNE_C(0x00051D), RUNE_C(0x00051D)}, - {RUNE_C(0x00051F), RUNE_C(0x00051F)}, - {RUNE_C(0x000521), RUNE_C(0x000521)}, - {RUNE_C(0x000523), RUNE_C(0x000523)}, - {RUNE_C(0x000525), RUNE_C(0x000525)}, - {RUNE_C(0x000527), RUNE_C(0x000527)}, - {RUNE_C(0x000529), RUNE_C(0x000529)}, - {RUNE_C(0x00052B), RUNE_C(0x00052B)}, - {RUNE_C(0x00052D), RUNE_C(0x00052D)}, - {RUNE_C(0x00052F), RUNE_C(0x00052F)}, - {RUNE_C(0x000561), RUNE_C(0x000587)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001D79), RUNE_C(0x001D79)}, - {RUNE_C(0x001D7D), RUNE_C(0x001D7D)}, - {RUNE_C(0x001D8E), RUNE_C(0x001D8E)}, - {RUNE_C(0x001E01), RUNE_C(0x001E01)}, - {RUNE_C(0x001E03), RUNE_C(0x001E03)}, - {RUNE_C(0x001E05), RUNE_C(0x001E05)}, - {RUNE_C(0x001E07), RUNE_C(0x001E07)}, - {RUNE_C(0x001E09), RUNE_C(0x001E09)}, - {RUNE_C(0x001E0B), RUNE_C(0x001E0B)}, - {RUNE_C(0x001E0D), RUNE_C(0x001E0D)}, - {RUNE_C(0x001E0F), RUNE_C(0x001E0F)}, - {RUNE_C(0x001E11), RUNE_C(0x001E11)}, - {RUNE_C(0x001E13), RUNE_C(0x001E13)}, - {RUNE_C(0x001E15), RUNE_C(0x001E15)}, - {RUNE_C(0x001E17), RUNE_C(0x001E17)}, - {RUNE_C(0x001E19), RUNE_C(0x001E19)}, - {RUNE_C(0x001E1B), RUNE_C(0x001E1B)}, - {RUNE_C(0x001E1D), RUNE_C(0x001E1D)}, - {RUNE_C(0x001E1F), RUNE_C(0x001E1F)}, - {RUNE_C(0x001E21), RUNE_C(0x001E21)}, - {RUNE_C(0x001E23), RUNE_C(0x001E23)}, - {RUNE_C(0x001E25), RUNE_C(0x001E25)}, - {RUNE_C(0x001E27), RUNE_C(0x001E27)}, - {RUNE_C(0x001E29), RUNE_C(0x001E29)}, - {RUNE_C(0x001E2B), RUNE_C(0x001E2B)}, - {RUNE_C(0x001E2D), RUNE_C(0x001E2D)}, - {RUNE_C(0x001E2F), RUNE_C(0x001E2F)}, - {RUNE_C(0x001E31), RUNE_C(0x001E31)}, - {RUNE_C(0x001E33), RUNE_C(0x001E33)}, - {RUNE_C(0x001E35), RUNE_C(0x001E35)}, - {RUNE_C(0x001E37), RUNE_C(0x001E37)}, - {RUNE_C(0x001E39), RUNE_C(0x001E39)}, - {RUNE_C(0x001E3B), RUNE_C(0x001E3B)}, - {RUNE_C(0x001E3D), RUNE_C(0x001E3D)}, - {RUNE_C(0x001E3F), RUNE_C(0x001E3F)}, - {RUNE_C(0x001E41), RUNE_C(0x001E41)}, - {RUNE_C(0x001E43), RUNE_C(0x001E43)}, - {RUNE_C(0x001E45), RUNE_C(0x001E45)}, - {RUNE_C(0x001E47), RUNE_C(0x001E47)}, - {RUNE_C(0x001E49), RUNE_C(0x001E49)}, - {RUNE_C(0x001E4B), RUNE_C(0x001E4B)}, - {RUNE_C(0x001E4D), RUNE_C(0x001E4D)}, - {RUNE_C(0x001E4F), RUNE_C(0x001E4F)}, - {RUNE_C(0x001E51), RUNE_C(0x001E51)}, - {RUNE_C(0x001E53), RUNE_C(0x001E53)}, - {RUNE_C(0x001E55), RUNE_C(0x001E55)}, - {RUNE_C(0x001E57), RUNE_C(0x001E57)}, - {RUNE_C(0x001E59), RUNE_C(0x001E59)}, - {RUNE_C(0x001E5B), RUNE_C(0x001E5B)}, - {RUNE_C(0x001E5D), RUNE_C(0x001E5D)}, - {RUNE_C(0x001E5F), RUNE_C(0x001E5F)}, - {RUNE_C(0x001E61), RUNE_C(0x001E61)}, - {RUNE_C(0x001E63), RUNE_C(0x001E63)}, - {RUNE_C(0x001E65), RUNE_C(0x001E65)}, - {RUNE_C(0x001E67), RUNE_C(0x001E67)}, - {RUNE_C(0x001E69), RUNE_C(0x001E69)}, - {RUNE_C(0x001E6B), RUNE_C(0x001E6B)}, - {RUNE_C(0x001E6D), RUNE_C(0x001E6D)}, - {RUNE_C(0x001E6F), RUNE_C(0x001E6F)}, - {RUNE_C(0x001E71), RUNE_C(0x001E71)}, - {RUNE_C(0x001E73), RUNE_C(0x001E73)}, - {RUNE_C(0x001E75), RUNE_C(0x001E75)}, - {RUNE_C(0x001E77), RUNE_C(0x001E77)}, - {RUNE_C(0x001E79), RUNE_C(0x001E79)}, - {RUNE_C(0x001E7B), RUNE_C(0x001E7B)}, - {RUNE_C(0x001E7D), RUNE_C(0x001E7D)}, - {RUNE_C(0x001E7F), RUNE_C(0x001E7F)}, - {RUNE_C(0x001E81), RUNE_C(0x001E81)}, - {RUNE_C(0x001E83), RUNE_C(0x001E83)}, - {RUNE_C(0x001E85), RUNE_C(0x001E85)}, - {RUNE_C(0x001E87), RUNE_C(0x001E87)}, - {RUNE_C(0x001E89), RUNE_C(0x001E89)}, - {RUNE_C(0x001E8B), RUNE_C(0x001E8B)}, - {RUNE_C(0x001E8D), RUNE_C(0x001E8D)}, - {RUNE_C(0x001E8F), RUNE_C(0x001E8F)}, - {RUNE_C(0x001E91), RUNE_C(0x001E91)}, - {RUNE_C(0x001E93), RUNE_C(0x001E93)}, - {RUNE_C(0x001E95), RUNE_C(0x001E9B)}, - {RUNE_C(0x001EA1), RUNE_C(0x001EA1)}, - {RUNE_C(0x001EA3), RUNE_C(0x001EA3)}, - {RUNE_C(0x001EA5), RUNE_C(0x001EA5)}, - {RUNE_C(0x001EA7), RUNE_C(0x001EA7)}, - {RUNE_C(0x001EA9), RUNE_C(0x001EA9)}, - {RUNE_C(0x001EAB), RUNE_C(0x001EAB)}, - {RUNE_C(0x001EAD), RUNE_C(0x001EAD)}, - {RUNE_C(0x001EAF), RUNE_C(0x001EAF)}, - {RUNE_C(0x001EB1), RUNE_C(0x001EB1)}, - {RUNE_C(0x001EB3), RUNE_C(0x001EB3)}, - {RUNE_C(0x001EB5), RUNE_C(0x001EB5)}, - {RUNE_C(0x001EB7), RUNE_C(0x001EB7)}, - {RUNE_C(0x001EB9), RUNE_C(0x001EB9)}, - {RUNE_C(0x001EBB), RUNE_C(0x001EBB)}, - {RUNE_C(0x001EBD), RUNE_C(0x001EBD)}, - {RUNE_C(0x001EBF), RUNE_C(0x001EBF)}, - {RUNE_C(0x001EC1), RUNE_C(0x001EC1)}, - {RUNE_C(0x001EC3), RUNE_C(0x001EC3)}, - {RUNE_C(0x001EC5), RUNE_C(0x001EC5)}, - {RUNE_C(0x001EC7), RUNE_C(0x001EC7)}, - {RUNE_C(0x001EC9), RUNE_C(0x001EC9)}, - {RUNE_C(0x001ECB), RUNE_C(0x001ECB)}, - {RUNE_C(0x001ECD), RUNE_C(0x001ECD)}, - {RUNE_C(0x001ECF), RUNE_C(0x001ECF)}, - {RUNE_C(0x001ED1), RUNE_C(0x001ED1)}, - {RUNE_C(0x001ED3), RUNE_C(0x001ED3)}, - {RUNE_C(0x001ED5), RUNE_C(0x001ED5)}, - {RUNE_C(0x001ED7), RUNE_C(0x001ED7)}, - {RUNE_C(0x001ED9), RUNE_C(0x001ED9)}, - {RUNE_C(0x001EDB), RUNE_C(0x001EDB)}, - {RUNE_C(0x001EDD), RUNE_C(0x001EDD)}, - {RUNE_C(0x001EDF), RUNE_C(0x001EDF)}, - {RUNE_C(0x001EE1), RUNE_C(0x001EE1)}, - {RUNE_C(0x001EE3), RUNE_C(0x001EE3)}, - {RUNE_C(0x001EE5), RUNE_C(0x001EE5)}, - {RUNE_C(0x001EE7), RUNE_C(0x001EE7)}, - {RUNE_C(0x001EE9), RUNE_C(0x001EE9)}, - {RUNE_C(0x001EEB), RUNE_C(0x001EEB)}, - {RUNE_C(0x001EED), RUNE_C(0x001EED)}, - {RUNE_C(0x001EEF), RUNE_C(0x001EEF)}, - {RUNE_C(0x001EF1), RUNE_C(0x001EF1)}, - {RUNE_C(0x001EF3), RUNE_C(0x001EF3)}, - {RUNE_C(0x001EF5), RUNE_C(0x001EF5)}, - {RUNE_C(0x001EF7), RUNE_C(0x001EF7)}, - {RUNE_C(0x001EF9), RUNE_C(0x001EF9)}, - {RUNE_C(0x001EFB), RUNE_C(0x001EFB)}, - {RUNE_C(0x001EFD), RUNE_C(0x001EFD)}, - {RUNE_C(0x001EFF), RUNE_C(0x001F07)}, - {RUNE_C(0x001F10), RUNE_C(0x001F15)}, - {RUNE_C(0x001F20), RUNE_C(0x001F27)}, - {RUNE_C(0x001F30), RUNE_C(0x001F37)}, - {RUNE_C(0x001F40), RUNE_C(0x001F45)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F60), RUNE_C(0x001F67)}, - {RUNE_C(0x001F70), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001F87)}, - {RUNE_C(0x001F90), RUNE_C(0x001F97)}, - {RUNE_C(0x001FA0), RUNE_C(0x001FA7)}, - {RUNE_C(0x001FB0), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FB7)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FC7)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FD7)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FE7)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FF7)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002170), RUNE_C(0x00217F)}, - {RUNE_C(0x002184), RUNE_C(0x002184)}, - {RUNE_C(0x0024D0), RUNE_C(0x0024E9)}, - {RUNE_C(0x002C30), RUNE_C(0x002C5F)}, - {RUNE_C(0x002C61), RUNE_C(0x002C61)}, - {RUNE_C(0x002C65), RUNE_C(0x002C66)}, - {RUNE_C(0x002C68), RUNE_C(0x002C68)}, - {RUNE_C(0x002C6A), RUNE_C(0x002C6A)}, - {RUNE_C(0x002C6C), RUNE_C(0x002C6C)}, - {RUNE_C(0x002C73), RUNE_C(0x002C73)}, - {RUNE_C(0x002C76), RUNE_C(0x002C76)}, - {RUNE_C(0x002C81), RUNE_C(0x002C81)}, - {RUNE_C(0x002C83), RUNE_C(0x002C83)}, - {RUNE_C(0x002C85), RUNE_C(0x002C85)}, - {RUNE_C(0x002C87), RUNE_C(0x002C87)}, - {RUNE_C(0x002C89), RUNE_C(0x002C89)}, - {RUNE_C(0x002C8B), RUNE_C(0x002C8B)}, - {RUNE_C(0x002C8D), RUNE_C(0x002C8D)}, - {RUNE_C(0x002C8F), RUNE_C(0x002C8F)}, - {RUNE_C(0x002C91), RUNE_C(0x002C91)}, - {RUNE_C(0x002C93), RUNE_C(0x002C93)}, - {RUNE_C(0x002C95), RUNE_C(0x002C95)}, - {RUNE_C(0x002C97), RUNE_C(0x002C97)}, - {RUNE_C(0x002C99), RUNE_C(0x002C99)}, - {RUNE_C(0x002C9B), RUNE_C(0x002C9B)}, - {RUNE_C(0x002C9D), RUNE_C(0x002C9D)}, - {RUNE_C(0x002C9F), RUNE_C(0x002C9F)}, - {RUNE_C(0x002CA1), RUNE_C(0x002CA1)}, - {RUNE_C(0x002CA3), RUNE_C(0x002CA3)}, - {RUNE_C(0x002CA5), RUNE_C(0x002CA5)}, - {RUNE_C(0x002CA7), RUNE_C(0x002CA7)}, - {RUNE_C(0x002CA9), RUNE_C(0x002CA9)}, - {RUNE_C(0x002CAB), RUNE_C(0x002CAB)}, - {RUNE_C(0x002CAD), RUNE_C(0x002CAD)}, - {RUNE_C(0x002CAF), RUNE_C(0x002CAF)}, - {RUNE_C(0x002CB1), RUNE_C(0x002CB1)}, - {RUNE_C(0x002CB3), RUNE_C(0x002CB3)}, - {RUNE_C(0x002CB5), RUNE_C(0x002CB5)}, - {RUNE_C(0x002CB7), RUNE_C(0x002CB7)}, - {RUNE_C(0x002CB9), RUNE_C(0x002CB9)}, - {RUNE_C(0x002CBB), RUNE_C(0x002CBB)}, - {RUNE_C(0x002CBD), RUNE_C(0x002CBD)}, - {RUNE_C(0x002CBF), RUNE_C(0x002CBF)}, - {RUNE_C(0x002CC1), RUNE_C(0x002CC1)}, - {RUNE_C(0x002CC3), RUNE_C(0x002CC3)}, - {RUNE_C(0x002CC5), RUNE_C(0x002CC5)}, - {RUNE_C(0x002CC7), RUNE_C(0x002CC7)}, - {RUNE_C(0x002CC9), RUNE_C(0x002CC9)}, - {RUNE_C(0x002CCB), RUNE_C(0x002CCB)}, - {RUNE_C(0x002CCD), RUNE_C(0x002CCD)}, - {RUNE_C(0x002CCF), RUNE_C(0x002CCF)}, - {RUNE_C(0x002CD1), RUNE_C(0x002CD1)}, - {RUNE_C(0x002CD3), RUNE_C(0x002CD3)}, - {RUNE_C(0x002CD5), RUNE_C(0x002CD5)}, - {RUNE_C(0x002CD7), RUNE_C(0x002CD7)}, - {RUNE_C(0x002CD9), RUNE_C(0x002CD9)}, - {RUNE_C(0x002CDB), RUNE_C(0x002CDB)}, - {RUNE_C(0x002CDD), RUNE_C(0x002CDD)}, - {RUNE_C(0x002CDF), RUNE_C(0x002CDF)}, - {RUNE_C(0x002CE1), RUNE_C(0x002CE1)}, - {RUNE_C(0x002CE3), RUNE_C(0x002CE3)}, - {RUNE_C(0x002CEC), RUNE_C(0x002CEC)}, - {RUNE_C(0x002CEE), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF3), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x00A641), RUNE_C(0x00A641)}, - {RUNE_C(0x00A643), RUNE_C(0x00A643)}, - {RUNE_C(0x00A645), RUNE_C(0x00A645)}, - {RUNE_C(0x00A647), RUNE_C(0x00A647)}, - {RUNE_C(0x00A649), RUNE_C(0x00A649)}, - {RUNE_C(0x00A64B), RUNE_C(0x00A64B)}, - {RUNE_C(0x00A64D), RUNE_C(0x00A64D)}, - {RUNE_C(0x00A64F), RUNE_C(0x00A64F)}, - {RUNE_C(0x00A651), RUNE_C(0x00A651)}, - {RUNE_C(0x00A653), RUNE_C(0x00A653)}, - {RUNE_C(0x00A655), RUNE_C(0x00A655)}, - {RUNE_C(0x00A657), RUNE_C(0x00A657)}, - {RUNE_C(0x00A659), RUNE_C(0x00A659)}, - {RUNE_C(0x00A65B), RUNE_C(0x00A65B)}, - {RUNE_C(0x00A65D), RUNE_C(0x00A65D)}, - {RUNE_C(0x00A65F), RUNE_C(0x00A65F)}, - {RUNE_C(0x00A661), RUNE_C(0x00A661)}, - {RUNE_C(0x00A663), RUNE_C(0x00A663)}, - {RUNE_C(0x00A665), RUNE_C(0x00A665)}, - {RUNE_C(0x00A667), RUNE_C(0x00A667)}, - {RUNE_C(0x00A669), RUNE_C(0x00A669)}, - {RUNE_C(0x00A66B), RUNE_C(0x00A66B)}, - {RUNE_C(0x00A66D), RUNE_C(0x00A66D)}, - {RUNE_C(0x00A681), RUNE_C(0x00A681)}, - {RUNE_C(0x00A683), RUNE_C(0x00A683)}, - {RUNE_C(0x00A685), RUNE_C(0x00A685)}, - {RUNE_C(0x00A687), RUNE_C(0x00A687)}, - {RUNE_C(0x00A689), RUNE_C(0x00A689)}, - {RUNE_C(0x00A68B), RUNE_C(0x00A68B)}, - {RUNE_C(0x00A68D), RUNE_C(0x00A68D)}, - {RUNE_C(0x00A68F), RUNE_C(0x00A68F)}, - {RUNE_C(0x00A691), RUNE_C(0x00A691)}, - {RUNE_C(0x00A693), RUNE_C(0x00A693)}, - {RUNE_C(0x00A695), RUNE_C(0x00A695)}, - {RUNE_C(0x00A697), RUNE_C(0x00A697)}, - {RUNE_C(0x00A699), RUNE_C(0x00A699)}, - {RUNE_C(0x00A69B), RUNE_C(0x00A69B)}, - {RUNE_C(0x00A723), RUNE_C(0x00A723)}, - {RUNE_C(0x00A725), RUNE_C(0x00A725)}, - {RUNE_C(0x00A727), RUNE_C(0x00A727)}, - {RUNE_C(0x00A729), RUNE_C(0x00A729)}, - {RUNE_C(0x00A72B), RUNE_C(0x00A72B)}, - {RUNE_C(0x00A72D), RUNE_C(0x00A72D)}, - {RUNE_C(0x00A72F), RUNE_C(0x00A72F)}, - {RUNE_C(0x00A733), RUNE_C(0x00A733)}, - {RUNE_C(0x00A735), RUNE_C(0x00A735)}, - {RUNE_C(0x00A737), RUNE_C(0x00A737)}, - {RUNE_C(0x00A739), RUNE_C(0x00A739)}, - {RUNE_C(0x00A73B), RUNE_C(0x00A73B)}, - {RUNE_C(0x00A73D), RUNE_C(0x00A73D)}, - {RUNE_C(0x00A73F), RUNE_C(0x00A73F)}, - {RUNE_C(0x00A741), RUNE_C(0x00A741)}, - {RUNE_C(0x00A743), RUNE_C(0x00A743)}, - {RUNE_C(0x00A745), RUNE_C(0x00A745)}, - {RUNE_C(0x00A747), RUNE_C(0x00A747)}, - {RUNE_C(0x00A749), RUNE_C(0x00A749)}, - {RUNE_C(0x00A74B), RUNE_C(0x00A74B)}, - {RUNE_C(0x00A74D), RUNE_C(0x00A74D)}, - {RUNE_C(0x00A74F), RUNE_C(0x00A74F)}, - {RUNE_C(0x00A751), RUNE_C(0x00A751)}, - {RUNE_C(0x00A753), RUNE_C(0x00A753)}, - {RUNE_C(0x00A755), RUNE_C(0x00A755)}, - {RUNE_C(0x00A757), RUNE_C(0x00A757)}, - {RUNE_C(0x00A759), RUNE_C(0x00A759)}, - {RUNE_C(0x00A75B), RUNE_C(0x00A75B)}, - {RUNE_C(0x00A75D), RUNE_C(0x00A75D)}, - {RUNE_C(0x00A75F), RUNE_C(0x00A75F)}, - {RUNE_C(0x00A761), RUNE_C(0x00A761)}, - {RUNE_C(0x00A763), RUNE_C(0x00A763)}, - {RUNE_C(0x00A765), RUNE_C(0x00A765)}, - {RUNE_C(0x00A767), RUNE_C(0x00A767)}, - {RUNE_C(0x00A769), RUNE_C(0x00A769)}, - {RUNE_C(0x00A76B), RUNE_C(0x00A76B)}, - {RUNE_C(0x00A76D), RUNE_C(0x00A76D)}, - {RUNE_C(0x00A76F), RUNE_C(0x00A76F)}, - {RUNE_C(0x00A77A), RUNE_C(0x00A77A)}, - {RUNE_C(0x00A77C), RUNE_C(0x00A77C)}, - {RUNE_C(0x00A77F), RUNE_C(0x00A77F)}, - {RUNE_C(0x00A781), RUNE_C(0x00A781)}, - {RUNE_C(0x00A783), RUNE_C(0x00A783)}, - {RUNE_C(0x00A785), RUNE_C(0x00A785)}, - {RUNE_C(0x00A787), RUNE_C(0x00A787)}, - {RUNE_C(0x00A78C), RUNE_C(0x00A78C)}, - {RUNE_C(0x00A791), RUNE_C(0x00A791)}, - {RUNE_C(0x00A793), RUNE_C(0x00A794)}, - {RUNE_C(0x00A797), RUNE_C(0x00A797)}, - {RUNE_C(0x00A799), RUNE_C(0x00A799)}, - {RUNE_C(0x00A79B), RUNE_C(0x00A79B)}, - {RUNE_C(0x00A79D), RUNE_C(0x00A79D)}, - {RUNE_C(0x00A79F), RUNE_C(0x00A79F)}, - {RUNE_C(0x00A7A1), RUNE_C(0x00A7A1)}, - {RUNE_C(0x00A7A3), RUNE_C(0x00A7A3)}, - {RUNE_C(0x00A7A5), RUNE_C(0x00A7A5)}, - {RUNE_C(0x00A7A7), RUNE_C(0x00A7A7)}, - {RUNE_C(0x00A7A9), RUNE_C(0x00A7A9)}, - {RUNE_C(0x00A7B5), RUNE_C(0x00A7B5)}, - {RUNE_C(0x00A7B7), RUNE_C(0x00A7B7)}, - {RUNE_C(0x00A7B9), RUNE_C(0x00A7B9)}, - {RUNE_C(0x00A7BB), RUNE_C(0x00A7BB)}, - {RUNE_C(0x00A7BD), RUNE_C(0x00A7BD)}, - {RUNE_C(0x00A7BF), RUNE_C(0x00A7BF)}, - {RUNE_C(0x00A7C1), RUNE_C(0x00A7C1)}, - {RUNE_C(0x00A7C3), RUNE_C(0x00A7C3)}, - {RUNE_C(0x00A7C8), RUNE_C(0x00A7C8)}, - {RUNE_C(0x00A7CA), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D1), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D7), RUNE_C(0x00A7D7)}, - {RUNE_C(0x00A7D9), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F6), RUNE_C(0x00A7F6)}, - {RUNE_C(0x00AB53), RUNE_C(0x00AB53)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x010428), RUNE_C(0x01044F)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x0118C0), RUNE_C(0x0118DF)}, - {RUNE_C(0x016E60), RUNE_C(0x016E7F)}, - {RUNE_C(0x01E922), RUNE_C(0x01E943)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, + 0x55, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xD4, + 0x29, 0x11, 0x24, 0x46, 0x2A, 0x21, 0x51, 0xA2, + 0xD0, 0x56, 0x55, 0xB5, 0xAA, 0xAA, 0x2B, 0xAA}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0xAA, 0x0A, 0x90, + 0x85, 0xAA, 0xDF, 0x1A, 0x6B, 0x9F, 0x26, 0x20, + 0x8D, 0x1F, 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x38, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, + 0xFF, 0x7F, 0xE3, 0xAA, 0xAA, 0xAA, 0x2F, 0x09}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, + 0x02, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0x54, 0xD5, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xEA, 0x0F, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, + {0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3F, + 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xDF, 0x40, + 0xDC, 0x00, 0xCF, 0x00, 0xFF, 0x00, 0xDC, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x15, 0x48, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, 0x50, 0x08, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xA8, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x94, + 0xAA, 0x10, 0x9A, 0xAA, 0xAA, 0x02, 0xA0, 0xAA, + 0x0A, 0x05, 0x82, 0x02, 0x00, 0x00, 0x40, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cwt(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_cwu.c b/lib/unicode/prop/uprop_is_cwu.c index 2b32787..891e4e4 100644 --- a/lib/unicode/prop/uprop_is_cwu.c +++ b/lib/unicode/prop/uprop_is_cwu.c @@ -1,651 +1,400 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12, + 6, 13, 6, 6, 14, 6, 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 17, 18, 6, 6, 6, 19, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6, 21, + 6, 6, 6, 6, 22, 23, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 25, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 26, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 27, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000101), RUNE_C(0x000101)}, - {RUNE_C(0x000103), RUNE_C(0x000103)}, - {RUNE_C(0x000105), RUNE_C(0x000105)}, - {RUNE_C(0x000107), RUNE_C(0x000107)}, - {RUNE_C(0x000109), RUNE_C(0x000109)}, - {RUNE_C(0x00010B), RUNE_C(0x00010B)}, - {RUNE_C(0x00010D), RUNE_C(0x00010D)}, - {RUNE_C(0x00010F), RUNE_C(0x00010F)}, - {RUNE_C(0x000111), RUNE_C(0x000111)}, - {RUNE_C(0x000113), RUNE_C(0x000113)}, - {RUNE_C(0x000115), RUNE_C(0x000115)}, - {RUNE_C(0x000117), RUNE_C(0x000117)}, - {RUNE_C(0x000119), RUNE_C(0x000119)}, - {RUNE_C(0x00011B), RUNE_C(0x00011B)}, - {RUNE_C(0x00011D), RUNE_C(0x00011D)}, - {RUNE_C(0x00011F), RUNE_C(0x00011F)}, - {RUNE_C(0x000121), RUNE_C(0x000121)}, - {RUNE_C(0x000123), RUNE_C(0x000123)}, - {RUNE_C(0x000125), RUNE_C(0x000125)}, - {RUNE_C(0x000127), RUNE_C(0x000127)}, - {RUNE_C(0x000129), RUNE_C(0x000129)}, - {RUNE_C(0x00012B), RUNE_C(0x00012B)}, - {RUNE_C(0x00012D), RUNE_C(0x00012D)}, - {RUNE_C(0x00012F), RUNE_C(0x00012F)}, - {RUNE_C(0x000131), RUNE_C(0x000131)}, - {RUNE_C(0x000133), RUNE_C(0x000133)}, - {RUNE_C(0x000135), RUNE_C(0x000135)}, - {RUNE_C(0x000137), RUNE_C(0x000137)}, - {RUNE_C(0x00013A), RUNE_C(0x00013A)}, - {RUNE_C(0x00013C), RUNE_C(0x00013C)}, - {RUNE_C(0x00013E), RUNE_C(0x00013E)}, - {RUNE_C(0x000140), RUNE_C(0x000140)}, - {RUNE_C(0x000142), RUNE_C(0x000142)}, - {RUNE_C(0x000144), RUNE_C(0x000144)}, - {RUNE_C(0x000146), RUNE_C(0x000146)}, - {RUNE_C(0x000148), RUNE_C(0x000149)}, - {RUNE_C(0x00014B), RUNE_C(0x00014B)}, - {RUNE_C(0x00014D), RUNE_C(0x00014D)}, - {RUNE_C(0x00014F), RUNE_C(0x00014F)}, - {RUNE_C(0x000151), RUNE_C(0x000151)}, - {RUNE_C(0x000153), RUNE_C(0x000153)}, - {RUNE_C(0x000155), RUNE_C(0x000155)}, - {RUNE_C(0x000157), RUNE_C(0x000157)}, - {RUNE_C(0x000159), RUNE_C(0x000159)}, - {RUNE_C(0x00015B), RUNE_C(0x00015B)}, - {RUNE_C(0x00015D), RUNE_C(0x00015D)}, - {RUNE_C(0x00015F), RUNE_C(0x00015F)}, - {RUNE_C(0x000161), RUNE_C(0x000161)}, - {RUNE_C(0x000163), RUNE_C(0x000163)}, - {RUNE_C(0x000165), RUNE_C(0x000165)}, - {RUNE_C(0x000167), RUNE_C(0x000167)}, - {RUNE_C(0x000169), RUNE_C(0x000169)}, - {RUNE_C(0x00016B), RUNE_C(0x00016B)}, - {RUNE_C(0x00016D), RUNE_C(0x00016D)}, - {RUNE_C(0x00016F), RUNE_C(0x00016F)}, - {RUNE_C(0x000171), RUNE_C(0x000171)}, - {RUNE_C(0x000173), RUNE_C(0x000173)}, - {RUNE_C(0x000175), RUNE_C(0x000175)}, - {RUNE_C(0x000177), RUNE_C(0x000177)}, - {RUNE_C(0x00017A), RUNE_C(0x00017A)}, - {RUNE_C(0x00017C), RUNE_C(0x00017C)}, - {RUNE_C(0x00017E), RUNE_C(0x000180)}, - {RUNE_C(0x000183), RUNE_C(0x000183)}, - {RUNE_C(0x000185), RUNE_C(0x000185)}, - {RUNE_C(0x000188), RUNE_C(0x000188)}, - {RUNE_C(0x00018C), RUNE_C(0x00018C)}, - {RUNE_C(0x000192), RUNE_C(0x000192)}, - {RUNE_C(0x000195), RUNE_C(0x000195)}, - {RUNE_C(0x000199), RUNE_C(0x00019A)}, - {RUNE_C(0x00019E), RUNE_C(0x00019E)}, - {RUNE_C(0x0001A1), RUNE_C(0x0001A1)}, - {RUNE_C(0x0001A3), RUNE_C(0x0001A3)}, - {RUNE_C(0x0001A5), RUNE_C(0x0001A5)}, - {RUNE_C(0x0001A8), RUNE_C(0x0001A8)}, - {RUNE_C(0x0001AD), RUNE_C(0x0001AD)}, - {RUNE_C(0x0001B0), RUNE_C(0x0001B0)}, - {RUNE_C(0x0001B4), RUNE_C(0x0001B4)}, - {RUNE_C(0x0001B6), RUNE_C(0x0001B6)}, - {RUNE_C(0x0001B9), RUNE_C(0x0001B9)}, - {RUNE_C(0x0001BD), RUNE_C(0x0001BD)}, - {RUNE_C(0x0001BF), RUNE_C(0x0001BF)}, - {RUNE_C(0x0001C5), RUNE_C(0x0001C6)}, - {RUNE_C(0x0001C8), RUNE_C(0x0001C9)}, - {RUNE_C(0x0001CB), RUNE_C(0x0001CC)}, - {RUNE_C(0x0001CE), RUNE_C(0x0001CE)}, - {RUNE_C(0x0001D0), RUNE_C(0x0001D0)}, - {RUNE_C(0x0001D2), RUNE_C(0x0001D2)}, - {RUNE_C(0x0001D4), RUNE_C(0x0001D4)}, - {RUNE_C(0x0001D6), RUNE_C(0x0001D6)}, - {RUNE_C(0x0001D8), RUNE_C(0x0001D8)}, - {RUNE_C(0x0001DA), RUNE_C(0x0001DA)}, - {RUNE_C(0x0001DC), RUNE_C(0x0001DD)}, - {RUNE_C(0x0001DF), RUNE_C(0x0001DF)}, - {RUNE_C(0x0001E1), RUNE_C(0x0001E1)}, - {RUNE_C(0x0001E3), RUNE_C(0x0001E3)}, - {RUNE_C(0x0001E5), RUNE_C(0x0001E5)}, - {RUNE_C(0x0001E7), RUNE_C(0x0001E7)}, - {RUNE_C(0x0001E9), RUNE_C(0x0001E9)}, - {RUNE_C(0x0001EB), RUNE_C(0x0001EB)}, - {RUNE_C(0x0001ED), RUNE_C(0x0001ED)}, - {RUNE_C(0x0001EF), RUNE_C(0x0001F0)}, - {RUNE_C(0x0001F2), RUNE_C(0x0001F3)}, - {RUNE_C(0x0001F5), RUNE_C(0x0001F5)}, - {RUNE_C(0x0001F9), RUNE_C(0x0001F9)}, - {RUNE_C(0x0001FB), RUNE_C(0x0001FB)}, - {RUNE_C(0x0001FD), RUNE_C(0x0001FD)}, - {RUNE_C(0x0001FF), RUNE_C(0x0001FF)}, - {RUNE_C(0x000201), RUNE_C(0x000201)}, - {RUNE_C(0x000203), RUNE_C(0x000203)}, - {RUNE_C(0x000205), RUNE_C(0x000205)}, - {RUNE_C(0x000207), RUNE_C(0x000207)}, - {RUNE_C(0x000209), RUNE_C(0x000209)}, - {RUNE_C(0x00020B), RUNE_C(0x00020B)}, - {RUNE_C(0x00020D), RUNE_C(0x00020D)}, - {RUNE_C(0x00020F), RUNE_C(0x00020F)}, - {RUNE_C(0x000211), RUNE_C(0x000211)}, - {RUNE_C(0x000213), RUNE_C(0x000213)}, - {RUNE_C(0x000215), RUNE_C(0x000215)}, - {RUNE_C(0x000217), RUNE_C(0x000217)}, - {RUNE_C(0x000219), RUNE_C(0x000219)}, - {RUNE_C(0x00021B), RUNE_C(0x00021B)}, - {RUNE_C(0x00021D), RUNE_C(0x00021D)}, - {RUNE_C(0x00021F), RUNE_C(0x00021F)}, - {RUNE_C(0x000223), RUNE_C(0x000223)}, - {RUNE_C(0x000225), RUNE_C(0x000225)}, - {RUNE_C(0x000227), RUNE_C(0x000227)}, - {RUNE_C(0x000229), RUNE_C(0x000229)}, - {RUNE_C(0x00022B), RUNE_C(0x00022B)}, - {RUNE_C(0x00022D), RUNE_C(0x00022D)}, - {RUNE_C(0x00022F), RUNE_C(0x00022F)}, - {RUNE_C(0x000231), RUNE_C(0x000231)}, - {RUNE_C(0x000233), RUNE_C(0x000233)}, - {RUNE_C(0x00023C), RUNE_C(0x00023C)}, - {RUNE_C(0x00023F), RUNE_C(0x000240)}, - {RUNE_C(0x000242), RUNE_C(0x000242)}, - {RUNE_C(0x000247), RUNE_C(0x000247)}, - {RUNE_C(0x000249), RUNE_C(0x000249)}, - {RUNE_C(0x00024B), RUNE_C(0x00024B)}, - {RUNE_C(0x00024D), RUNE_C(0x00024D)}, - {RUNE_C(0x00024F), RUNE_C(0x000254)}, - {RUNE_C(0x000256), RUNE_C(0x000257)}, - {RUNE_C(0x000259), RUNE_C(0x000259)}, - {RUNE_C(0x00025B), RUNE_C(0x00025C)}, - {RUNE_C(0x000260), RUNE_C(0x000261)}, - {RUNE_C(0x000263), RUNE_C(0x000263)}, - {RUNE_C(0x000265), RUNE_C(0x000266)}, - {RUNE_C(0x000268), RUNE_C(0x00026C)}, - {RUNE_C(0x00026F), RUNE_C(0x00026F)}, - {RUNE_C(0x000271), RUNE_C(0x000272)}, - {RUNE_C(0x000275), RUNE_C(0x000275)}, - {RUNE_C(0x00027D), RUNE_C(0x00027D)}, - {RUNE_C(0x000280), RUNE_C(0x000280)}, - {RUNE_C(0x000282), RUNE_C(0x000283)}, - {RUNE_C(0x000287), RUNE_C(0x00028C)}, - {RUNE_C(0x000292), RUNE_C(0x000292)}, - {RUNE_C(0x00029D), RUNE_C(0x00029E)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000371), RUNE_C(0x000371)}, - {RUNE_C(0x000373), RUNE_C(0x000373)}, - {RUNE_C(0x000377), RUNE_C(0x000377)}, - {RUNE_C(0x00037B), RUNE_C(0x00037D)}, - {RUNE_C(0x000390), RUNE_C(0x000390)}, - {RUNE_C(0x0003AC), RUNE_C(0x0003CE)}, - {RUNE_C(0x0003D0), RUNE_C(0x0003D1)}, - {RUNE_C(0x0003D5), RUNE_C(0x0003D7)}, - {RUNE_C(0x0003D9), RUNE_C(0x0003D9)}, - {RUNE_C(0x0003DB), RUNE_C(0x0003DB)}, - {RUNE_C(0x0003DD), RUNE_C(0x0003DD)}, - {RUNE_C(0x0003DF), RUNE_C(0x0003DF)}, - {RUNE_C(0x0003E1), RUNE_C(0x0003E1)}, - {RUNE_C(0x0003E3), RUNE_C(0x0003E3)}, - {RUNE_C(0x0003E5), RUNE_C(0x0003E5)}, - {RUNE_C(0x0003E7), RUNE_C(0x0003E7)}, - {RUNE_C(0x0003E9), RUNE_C(0x0003E9)}, - {RUNE_C(0x0003EB), RUNE_C(0x0003EB)}, - {RUNE_C(0x0003ED), RUNE_C(0x0003ED)}, - {RUNE_C(0x0003EF), RUNE_C(0x0003F3)}, - {RUNE_C(0x0003F5), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F8), RUNE_C(0x0003F8)}, - {RUNE_C(0x0003FB), RUNE_C(0x0003FB)}, - {RUNE_C(0x000430), RUNE_C(0x00045F)}, - {RUNE_C(0x000461), RUNE_C(0x000461)}, - {RUNE_C(0x000463), RUNE_C(0x000463)}, - {RUNE_C(0x000465), RUNE_C(0x000465)}, - {RUNE_C(0x000467), RUNE_C(0x000467)}, - {RUNE_C(0x000469), RUNE_C(0x000469)}, - {RUNE_C(0x00046B), RUNE_C(0x00046B)}, - {RUNE_C(0x00046D), RUNE_C(0x00046D)}, - {RUNE_C(0x00046F), RUNE_C(0x00046F)}, - {RUNE_C(0x000471), RUNE_C(0x000471)}, - {RUNE_C(0x000473), RUNE_C(0x000473)}, - {RUNE_C(0x000475), RUNE_C(0x000475)}, - {RUNE_C(0x000477), RUNE_C(0x000477)}, - {RUNE_C(0x000479), RUNE_C(0x000479)}, - {RUNE_C(0x00047B), RUNE_C(0x00047B)}, - {RUNE_C(0x00047D), RUNE_C(0x00047D)}, - {RUNE_C(0x00047F), RUNE_C(0x00047F)}, - {RUNE_C(0x000481), RUNE_C(0x000481)}, - {RUNE_C(0x00048B), RUNE_C(0x00048B)}, - {RUNE_C(0x00048D), RUNE_C(0x00048D)}, - {RUNE_C(0x00048F), RUNE_C(0x00048F)}, - {RUNE_C(0x000491), RUNE_C(0x000491)}, - {RUNE_C(0x000493), RUNE_C(0x000493)}, - {RUNE_C(0x000495), RUNE_C(0x000495)}, - {RUNE_C(0x000497), RUNE_C(0x000497)}, - {RUNE_C(0x000499), RUNE_C(0x000499)}, - {RUNE_C(0x00049B), RUNE_C(0x00049B)}, - {RUNE_C(0x00049D), RUNE_C(0x00049D)}, - {RUNE_C(0x00049F), RUNE_C(0x00049F)}, - {RUNE_C(0x0004A1), RUNE_C(0x0004A1)}, - {RUNE_C(0x0004A3), RUNE_C(0x0004A3)}, - {RUNE_C(0x0004A5), RUNE_C(0x0004A5)}, - {RUNE_C(0x0004A7), RUNE_C(0x0004A7)}, - {RUNE_C(0x0004A9), RUNE_C(0x0004A9)}, - {RUNE_C(0x0004AB), RUNE_C(0x0004AB)}, - {RUNE_C(0x0004AD), RUNE_C(0x0004AD)}, - {RUNE_C(0x0004AF), RUNE_C(0x0004AF)}, - {RUNE_C(0x0004B1), RUNE_C(0x0004B1)}, - {RUNE_C(0x0004B3), RUNE_C(0x0004B3)}, - {RUNE_C(0x0004B5), RUNE_C(0x0004B5)}, - {RUNE_C(0x0004B7), RUNE_C(0x0004B7)}, - {RUNE_C(0x0004B9), RUNE_C(0x0004B9)}, - {RUNE_C(0x0004BB), RUNE_C(0x0004BB)}, - {RUNE_C(0x0004BD), RUNE_C(0x0004BD)}, - {RUNE_C(0x0004BF), RUNE_C(0x0004BF)}, - {RUNE_C(0x0004C2), RUNE_C(0x0004C2)}, - {RUNE_C(0x0004C4), RUNE_C(0x0004C4)}, - {RUNE_C(0x0004C6), RUNE_C(0x0004C6)}, - {RUNE_C(0x0004C8), RUNE_C(0x0004C8)}, - {RUNE_C(0x0004CA), RUNE_C(0x0004CA)}, - {RUNE_C(0x0004CC), RUNE_C(0x0004CC)}, - {RUNE_C(0x0004CE), RUNE_C(0x0004CF)}, - {RUNE_C(0x0004D1), RUNE_C(0x0004D1)}, - {RUNE_C(0x0004D3), RUNE_C(0x0004D3)}, - {RUNE_C(0x0004D5), RUNE_C(0x0004D5)}, - {RUNE_C(0x0004D7), RUNE_C(0x0004D7)}, - {RUNE_C(0x0004D9), RUNE_C(0x0004D9)}, - {RUNE_C(0x0004DB), RUNE_C(0x0004DB)}, - {RUNE_C(0x0004DD), RUNE_C(0x0004DD)}, - {RUNE_C(0x0004DF), RUNE_C(0x0004DF)}, - {RUNE_C(0x0004E1), RUNE_C(0x0004E1)}, - {RUNE_C(0x0004E3), RUNE_C(0x0004E3)}, - {RUNE_C(0x0004E5), RUNE_C(0x0004E5)}, - {RUNE_C(0x0004E7), RUNE_C(0x0004E7)}, - {RUNE_C(0x0004E9), RUNE_C(0x0004E9)}, - {RUNE_C(0x0004EB), RUNE_C(0x0004EB)}, - {RUNE_C(0x0004ED), RUNE_C(0x0004ED)}, - {RUNE_C(0x0004EF), RUNE_C(0x0004EF)}, - {RUNE_C(0x0004F1), RUNE_C(0x0004F1)}, - {RUNE_C(0x0004F3), RUNE_C(0x0004F3)}, - {RUNE_C(0x0004F5), RUNE_C(0x0004F5)}, - {RUNE_C(0x0004F7), RUNE_C(0x0004F7)}, - {RUNE_C(0x0004F9), RUNE_C(0x0004F9)}, - {RUNE_C(0x0004FB), RUNE_C(0x0004FB)}, - {RUNE_C(0x0004FD), RUNE_C(0x0004FD)}, - {RUNE_C(0x0004FF), RUNE_C(0x0004FF)}, - {RUNE_C(0x000501), RUNE_C(0x000501)}, - {RUNE_C(0x000503), RUNE_C(0x000503)}, - {RUNE_C(0x000505), RUNE_C(0x000505)}, - {RUNE_C(0x000507), RUNE_C(0x000507)}, - {RUNE_C(0x000509), RUNE_C(0x000509)}, - {RUNE_C(0x00050B), RUNE_C(0x00050B)}, - {RUNE_C(0x00050D), RUNE_C(0x00050D)}, - {RUNE_C(0x00050F), RUNE_C(0x00050F)}, - {RUNE_C(0x000511), RUNE_C(0x000511)}, - {RUNE_C(0x000513), RUNE_C(0x000513)}, - {RUNE_C(0x000515), RUNE_C(0x000515)}, - {RUNE_C(0x000517), RUNE_C(0x000517)}, - {RUNE_C(0x000519), RUNE_C(0x000519)}, - {RUNE_C(0x00051B), RUNE_C(0x00051B)}, - {RUNE_C(0x00051D), RUNE_C(0x00051D)}, - {RUNE_C(0x00051F), RUNE_C(0x00051F)}, - {RUNE_C(0x000521), RUNE_C(0x000521)}, - {RUNE_C(0x000523), RUNE_C(0x000523)}, - {RUNE_C(0x000525), RUNE_C(0x000525)}, - {RUNE_C(0x000527), RUNE_C(0x000527)}, - {RUNE_C(0x000529), RUNE_C(0x000529)}, - {RUNE_C(0x00052B), RUNE_C(0x00052B)}, - {RUNE_C(0x00052D), RUNE_C(0x00052D)}, - {RUNE_C(0x00052F), RUNE_C(0x00052F)}, - {RUNE_C(0x000561), RUNE_C(0x000587)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FD), RUNE_C(0x0010FF)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001D79), RUNE_C(0x001D79)}, - {RUNE_C(0x001D7D), RUNE_C(0x001D7D)}, - {RUNE_C(0x001D8E), RUNE_C(0x001D8E)}, - {RUNE_C(0x001E01), RUNE_C(0x001E01)}, - {RUNE_C(0x001E03), RUNE_C(0x001E03)}, - {RUNE_C(0x001E05), RUNE_C(0x001E05)}, - {RUNE_C(0x001E07), RUNE_C(0x001E07)}, - {RUNE_C(0x001E09), RUNE_C(0x001E09)}, - {RUNE_C(0x001E0B), RUNE_C(0x001E0B)}, - {RUNE_C(0x001E0D), RUNE_C(0x001E0D)}, - {RUNE_C(0x001E0F), RUNE_C(0x001E0F)}, - {RUNE_C(0x001E11), RUNE_C(0x001E11)}, - {RUNE_C(0x001E13), RUNE_C(0x001E13)}, - {RUNE_C(0x001E15), RUNE_C(0x001E15)}, - {RUNE_C(0x001E17), RUNE_C(0x001E17)}, - {RUNE_C(0x001E19), RUNE_C(0x001E19)}, - {RUNE_C(0x001E1B), RUNE_C(0x001E1B)}, - {RUNE_C(0x001E1D), RUNE_C(0x001E1D)}, - {RUNE_C(0x001E1F), RUNE_C(0x001E1F)}, - {RUNE_C(0x001E21), RUNE_C(0x001E21)}, - {RUNE_C(0x001E23), RUNE_C(0x001E23)}, - {RUNE_C(0x001E25), RUNE_C(0x001E25)}, - {RUNE_C(0x001E27), RUNE_C(0x001E27)}, - {RUNE_C(0x001E29), RUNE_C(0x001E29)}, - {RUNE_C(0x001E2B), RUNE_C(0x001E2B)}, - {RUNE_C(0x001E2D), RUNE_C(0x001E2D)}, - {RUNE_C(0x001E2F), RUNE_C(0x001E2F)}, - {RUNE_C(0x001E31), RUNE_C(0x001E31)}, - {RUNE_C(0x001E33), RUNE_C(0x001E33)}, - {RUNE_C(0x001E35), RUNE_C(0x001E35)}, - {RUNE_C(0x001E37), RUNE_C(0x001E37)}, - {RUNE_C(0x001E39), RUNE_C(0x001E39)}, - {RUNE_C(0x001E3B), RUNE_C(0x001E3B)}, - {RUNE_C(0x001E3D), RUNE_C(0x001E3D)}, - {RUNE_C(0x001E3F), RUNE_C(0x001E3F)}, - {RUNE_C(0x001E41), RUNE_C(0x001E41)}, - {RUNE_C(0x001E43), RUNE_C(0x001E43)}, - {RUNE_C(0x001E45), RUNE_C(0x001E45)}, - {RUNE_C(0x001E47), RUNE_C(0x001E47)}, - {RUNE_C(0x001E49), RUNE_C(0x001E49)}, - {RUNE_C(0x001E4B), RUNE_C(0x001E4B)}, - {RUNE_C(0x001E4D), RUNE_C(0x001E4D)}, - {RUNE_C(0x001E4F), RUNE_C(0x001E4F)}, - {RUNE_C(0x001E51), RUNE_C(0x001E51)}, - {RUNE_C(0x001E53), RUNE_C(0x001E53)}, - {RUNE_C(0x001E55), RUNE_C(0x001E55)}, - {RUNE_C(0x001E57), RUNE_C(0x001E57)}, - {RUNE_C(0x001E59), RUNE_C(0x001E59)}, - {RUNE_C(0x001E5B), RUNE_C(0x001E5B)}, - {RUNE_C(0x001E5D), RUNE_C(0x001E5D)}, - {RUNE_C(0x001E5F), RUNE_C(0x001E5F)}, - {RUNE_C(0x001E61), RUNE_C(0x001E61)}, - {RUNE_C(0x001E63), RUNE_C(0x001E63)}, - {RUNE_C(0x001E65), RUNE_C(0x001E65)}, - {RUNE_C(0x001E67), RUNE_C(0x001E67)}, - {RUNE_C(0x001E69), RUNE_C(0x001E69)}, - {RUNE_C(0x001E6B), RUNE_C(0x001E6B)}, - {RUNE_C(0x001E6D), RUNE_C(0x001E6D)}, - {RUNE_C(0x001E6F), RUNE_C(0x001E6F)}, - {RUNE_C(0x001E71), RUNE_C(0x001E71)}, - {RUNE_C(0x001E73), RUNE_C(0x001E73)}, - {RUNE_C(0x001E75), RUNE_C(0x001E75)}, - {RUNE_C(0x001E77), RUNE_C(0x001E77)}, - {RUNE_C(0x001E79), RUNE_C(0x001E79)}, - {RUNE_C(0x001E7B), RUNE_C(0x001E7B)}, - {RUNE_C(0x001E7D), RUNE_C(0x001E7D)}, - {RUNE_C(0x001E7F), RUNE_C(0x001E7F)}, - {RUNE_C(0x001E81), RUNE_C(0x001E81)}, - {RUNE_C(0x001E83), RUNE_C(0x001E83)}, - {RUNE_C(0x001E85), RUNE_C(0x001E85)}, - {RUNE_C(0x001E87), RUNE_C(0x001E87)}, - {RUNE_C(0x001E89), RUNE_C(0x001E89)}, - {RUNE_C(0x001E8B), RUNE_C(0x001E8B)}, - {RUNE_C(0x001E8D), RUNE_C(0x001E8D)}, - {RUNE_C(0x001E8F), RUNE_C(0x001E8F)}, - {RUNE_C(0x001E91), RUNE_C(0x001E91)}, - {RUNE_C(0x001E93), RUNE_C(0x001E93)}, - {RUNE_C(0x001E95), RUNE_C(0x001E9B)}, - {RUNE_C(0x001EA1), RUNE_C(0x001EA1)}, - {RUNE_C(0x001EA3), RUNE_C(0x001EA3)}, - {RUNE_C(0x001EA5), RUNE_C(0x001EA5)}, - {RUNE_C(0x001EA7), RUNE_C(0x001EA7)}, - {RUNE_C(0x001EA9), RUNE_C(0x001EA9)}, - {RUNE_C(0x001EAB), RUNE_C(0x001EAB)}, - {RUNE_C(0x001EAD), RUNE_C(0x001EAD)}, - {RUNE_C(0x001EAF), RUNE_C(0x001EAF)}, - {RUNE_C(0x001EB1), RUNE_C(0x001EB1)}, - {RUNE_C(0x001EB3), RUNE_C(0x001EB3)}, - {RUNE_C(0x001EB5), RUNE_C(0x001EB5)}, - {RUNE_C(0x001EB7), RUNE_C(0x001EB7)}, - {RUNE_C(0x001EB9), RUNE_C(0x001EB9)}, - {RUNE_C(0x001EBB), RUNE_C(0x001EBB)}, - {RUNE_C(0x001EBD), RUNE_C(0x001EBD)}, - {RUNE_C(0x001EBF), RUNE_C(0x001EBF)}, - {RUNE_C(0x001EC1), RUNE_C(0x001EC1)}, - {RUNE_C(0x001EC3), RUNE_C(0x001EC3)}, - {RUNE_C(0x001EC5), RUNE_C(0x001EC5)}, - {RUNE_C(0x001EC7), RUNE_C(0x001EC7)}, - {RUNE_C(0x001EC9), RUNE_C(0x001EC9)}, - {RUNE_C(0x001ECB), RUNE_C(0x001ECB)}, - {RUNE_C(0x001ECD), RUNE_C(0x001ECD)}, - {RUNE_C(0x001ECF), RUNE_C(0x001ECF)}, - {RUNE_C(0x001ED1), RUNE_C(0x001ED1)}, - {RUNE_C(0x001ED3), RUNE_C(0x001ED3)}, - {RUNE_C(0x001ED5), RUNE_C(0x001ED5)}, - {RUNE_C(0x001ED7), RUNE_C(0x001ED7)}, - {RUNE_C(0x001ED9), RUNE_C(0x001ED9)}, - {RUNE_C(0x001EDB), RUNE_C(0x001EDB)}, - {RUNE_C(0x001EDD), RUNE_C(0x001EDD)}, - {RUNE_C(0x001EDF), RUNE_C(0x001EDF)}, - {RUNE_C(0x001EE1), RUNE_C(0x001EE1)}, - {RUNE_C(0x001EE3), RUNE_C(0x001EE3)}, - {RUNE_C(0x001EE5), RUNE_C(0x001EE5)}, - {RUNE_C(0x001EE7), RUNE_C(0x001EE7)}, - {RUNE_C(0x001EE9), RUNE_C(0x001EE9)}, - {RUNE_C(0x001EEB), RUNE_C(0x001EEB)}, - {RUNE_C(0x001EED), RUNE_C(0x001EED)}, - {RUNE_C(0x001EEF), RUNE_C(0x001EEF)}, - {RUNE_C(0x001EF1), RUNE_C(0x001EF1)}, - {RUNE_C(0x001EF3), RUNE_C(0x001EF3)}, - {RUNE_C(0x001EF5), RUNE_C(0x001EF5)}, - {RUNE_C(0x001EF7), RUNE_C(0x001EF7)}, - {RUNE_C(0x001EF9), RUNE_C(0x001EF9)}, - {RUNE_C(0x001EFB), RUNE_C(0x001EFB)}, - {RUNE_C(0x001EFD), RUNE_C(0x001EFD)}, - {RUNE_C(0x001EFF), RUNE_C(0x001F07)}, - {RUNE_C(0x001F10), RUNE_C(0x001F15)}, - {RUNE_C(0x001F20), RUNE_C(0x001F27)}, - {RUNE_C(0x001F30), RUNE_C(0x001F37)}, - {RUNE_C(0x001F40), RUNE_C(0x001F45)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F60), RUNE_C(0x001F67)}, - {RUNE_C(0x001F70), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FB7)}, - {RUNE_C(0x001FBC), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FC7)}, - {RUNE_C(0x001FCC), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FD7)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FE7)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FF7)}, - {RUNE_C(0x001FFC), RUNE_C(0x001FFC)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002170), RUNE_C(0x00217F)}, - {RUNE_C(0x002184), RUNE_C(0x002184)}, - {RUNE_C(0x0024D0), RUNE_C(0x0024E9)}, - {RUNE_C(0x002C30), RUNE_C(0x002C5F)}, - {RUNE_C(0x002C61), RUNE_C(0x002C61)}, - {RUNE_C(0x002C65), RUNE_C(0x002C66)}, - {RUNE_C(0x002C68), RUNE_C(0x002C68)}, - {RUNE_C(0x002C6A), RUNE_C(0x002C6A)}, - {RUNE_C(0x002C6C), RUNE_C(0x002C6C)}, - {RUNE_C(0x002C73), RUNE_C(0x002C73)}, - {RUNE_C(0x002C76), RUNE_C(0x002C76)}, - {RUNE_C(0x002C81), RUNE_C(0x002C81)}, - {RUNE_C(0x002C83), RUNE_C(0x002C83)}, - {RUNE_C(0x002C85), RUNE_C(0x002C85)}, - {RUNE_C(0x002C87), RUNE_C(0x002C87)}, - {RUNE_C(0x002C89), RUNE_C(0x002C89)}, - {RUNE_C(0x002C8B), RUNE_C(0x002C8B)}, - {RUNE_C(0x002C8D), RUNE_C(0x002C8D)}, - {RUNE_C(0x002C8F), RUNE_C(0x002C8F)}, - {RUNE_C(0x002C91), RUNE_C(0x002C91)}, - {RUNE_C(0x002C93), RUNE_C(0x002C93)}, - {RUNE_C(0x002C95), RUNE_C(0x002C95)}, - {RUNE_C(0x002C97), RUNE_C(0x002C97)}, - {RUNE_C(0x002C99), RUNE_C(0x002C99)}, - {RUNE_C(0x002C9B), RUNE_C(0x002C9B)}, - {RUNE_C(0x002C9D), RUNE_C(0x002C9D)}, - {RUNE_C(0x002C9F), RUNE_C(0x002C9F)}, - {RUNE_C(0x002CA1), RUNE_C(0x002CA1)}, - {RUNE_C(0x002CA3), RUNE_C(0x002CA3)}, - {RUNE_C(0x002CA5), RUNE_C(0x002CA5)}, - {RUNE_C(0x002CA7), RUNE_C(0x002CA7)}, - {RUNE_C(0x002CA9), RUNE_C(0x002CA9)}, - {RUNE_C(0x002CAB), RUNE_C(0x002CAB)}, - {RUNE_C(0x002CAD), RUNE_C(0x002CAD)}, - {RUNE_C(0x002CAF), RUNE_C(0x002CAF)}, - {RUNE_C(0x002CB1), RUNE_C(0x002CB1)}, - {RUNE_C(0x002CB3), RUNE_C(0x002CB3)}, - {RUNE_C(0x002CB5), RUNE_C(0x002CB5)}, - {RUNE_C(0x002CB7), RUNE_C(0x002CB7)}, - {RUNE_C(0x002CB9), RUNE_C(0x002CB9)}, - {RUNE_C(0x002CBB), RUNE_C(0x002CBB)}, - {RUNE_C(0x002CBD), RUNE_C(0x002CBD)}, - {RUNE_C(0x002CBF), RUNE_C(0x002CBF)}, - {RUNE_C(0x002CC1), RUNE_C(0x002CC1)}, - {RUNE_C(0x002CC3), RUNE_C(0x002CC3)}, - {RUNE_C(0x002CC5), RUNE_C(0x002CC5)}, - {RUNE_C(0x002CC7), RUNE_C(0x002CC7)}, - {RUNE_C(0x002CC9), RUNE_C(0x002CC9)}, - {RUNE_C(0x002CCB), RUNE_C(0x002CCB)}, - {RUNE_C(0x002CCD), RUNE_C(0x002CCD)}, - {RUNE_C(0x002CCF), RUNE_C(0x002CCF)}, - {RUNE_C(0x002CD1), RUNE_C(0x002CD1)}, - {RUNE_C(0x002CD3), RUNE_C(0x002CD3)}, - {RUNE_C(0x002CD5), RUNE_C(0x002CD5)}, - {RUNE_C(0x002CD7), RUNE_C(0x002CD7)}, - {RUNE_C(0x002CD9), RUNE_C(0x002CD9)}, - {RUNE_C(0x002CDB), RUNE_C(0x002CDB)}, - {RUNE_C(0x002CDD), RUNE_C(0x002CDD)}, - {RUNE_C(0x002CDF), RUNE_C(0x002CDF)}, - {RUNE_C(0x002CE1), RUNE_C(0x002CE1)}, - {RUNE_C(0x002CE3), RUNE_C(0x002CE3)}, - {RUNE_C(0x002CEC), RUNE_C(0x002CEC)}, - {RUNE_C(0x002CEE), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF3), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x00A641), RUNE_C(0x00A641)}, - {RUNE_C(0x00A643), RUNE_C(0x00A643)}, - {RUNE_C(0x00A645), RUNE_C(0x00A645)}, - {RUNE_C(0x00A647), RUNE_C(0x00A647)}, - {RUNE_C(0x00A649), RUNE_C(0x00A649)}, - {RUNE_C(0x00A64B), RUNE_C(0x00A64B)}, - {RUNE_C(0x00A64D), RUNE_C(0x00A64D)}, - {RUNE_C(0x00A64F), RUNE_C(0x00A64F)}, - {RUNE_C(0x00A651), RUNE_C(0x00A651)}, - {RUNE_C(0x00A653), RUNE_C(0x00A653)}, - {RUNE_C(0x00A655), RUNE_C(0x00A655)}, - {RUNE_C(0x00A657), RUNE_C(0x00A657)}, - {RUNE_C(0x00A659), RUNE_C(0x00A659)}, - {RUNE_C(0x00A65B), RUNE_C(0x00A65B)}, - {RUNE_C(0x00A65D), RUNE_C(0x00A65D)}, - {RUNE_C(0x00A65F), RUNE_C(0x00A65F)}, - {RUNE_C(0x00A661), RUNE_C(0x00A661)}, - {RUNE_C(0x00A663), RUNE_C(0x00A663)}, - {RUNE_C(0x00A665), RUNE_C(0x00A665)}, - {RUNE_C(0x00A667), RUNE_C(0x00A667)}, - {RUNE_C(0x00A669), RUNE_C(0x00A669)}, - {RUNE_C(0x00A66B), RUNE_C(0x00A66B)}, - {RUNE_C(0x00A66D), RUNE_C(0x00A66D)}, - {RUNE_C(0x00A681), RUNE_C(0x00A681)}, - {RUNE_C(0x00A683), RUNE_C(0x00A683)}, - {RUNE_C(0x00A685), RUNE_C(0x00A685)}, - {RUNE_C(0x00A687), RUNE_C(0x00A687)}, - {RUNE_C(0x00A689), RUNE_C(0x00A689)}, - {RUNE_C(0x00A68B), RUNE_C(0x00A68B)}, - {RUNE_C(0x00A68D), RUNE_C(0x00A68D)}, - {RUNE_C(0x00A68F), RUNE_C(0x00A68F)}, - {RUNE_C(0x00A691), RUNE_C(0x00A691)}, - {RUNE_C(0x00A693), RUNE_C(0x00A693)}, - {RUNE_C(0x00A695), RUNE_C(0x00A695)}, - {RUNE_C(0x00A697), RUNE_C(0x00A697)}, - {RUNE_C(0x00A699), RUNE_C(0x00A699)}, - {RUNE_C(0x00A69B), RUNE_C(0x00A69B)}, - {RUNE_C(0x00A723), RUNE_C(0x00A723)}, - {RUNE_C(0x00A725), RUNE_C(0x00A725)}, - {RUNE_C(0x00A727), RUNE_C(0x00A727)}, - {RUNE_C(0x00A729), RUNE_C(0x00A729)}, - {RUNE_C(0x00A72B), RUNE_C(0x00A72B)}, - {RUNE_C(0x00A72D), RUNE_C(0x00A72D)}, - {RUNE_C(0x00A72F), RUNE_C(0x00A72F)}, - {RUNE_C(0x00A733), RUNE_C(0x00A733)}, - {RUNE_C(0x00A735), RUNE_C(0x00A735)}, - {RUNE_C(0x00A737), RUNE_C(0x00A737)}, - {RUNE_C(0x00A739), RUNE_C(0x00A739)}, - {RUNE_C(0x00A73B), RUNE_C(0x00A73B)}, - {RUNE_C(0x00A73D), RUNE_C(0x00A73D)}, - {RUNE_C(0x00A73F), RUNE_C(0x00A73F)}, - {RUNE_C(0x00A741), RUNE_C(0x00A741)}, - {RUNE_C(0x00A743), RUNE_C(0x00A743)}, - {RUNE_C(0x00A745), RUNE_C(0x00A745)}, - {RUNE_C(0x00A747), RUNE_C(0x00A747)}, - {RUNE_C(0x00A749), RUNE_C(0x00A749)}, - {RUNE_C(0x00A74B), RUNE_C(0x00A74B)}, - {RUNE_C(0x00A74D), RUNE_C(0x00A74D)}, - {RUNE_C(0x00A74F), RUNE_C(0x00A74F)}, - {RUNE_C(0x00A751), RUNE_C(0x00A751)}, - {RUNE_C(0x00A753), RUNE_C(0x00A753)}, - {RUNE_C(0x00A755), RUNE_C(0x00A755)}, - {RUNE_C(0x00A757), RUNE_C(0x00A757)}, - {RUNE_C(0x00A759), RUNE_C(0x00A759)}, - {RUNE_C(0x00A75B), RUNE_C(0x00A75B)}, - {RUNE_C(0x00A75D), RUNE_C(0x00A75D)}, - {RUNE_C(0x00A75F), RUNE_C(0x00A75F)}, - {RUNE_C(0x00A761), RUNE_C(0x00A761)}, - {RUNE_C(0x00A763), RUNE_C(0x00A763)}, - {RUNE_C(0x00A765), RUNE_C(0x00A765)}, - {RUNE_C(0x00A767), RUNE_C(0x00A767)}, - {RUNE_C(0x00A769), RUNE_C(0x00A769)}, - {RUNE_C(0x00A76B), RUNE_C(0x00A76B)}, - {RUNE_C(0x00A76D), RUNE_C(0x00A76D)}, - {RUNE_C(0x00A76F), RUNE_C(0x00A76F)}, - {RUNE_C(0x00A77A), RUNE_C(0x00A77A)}, - {RUNE_C(0x00A77C), RUNE_C(0x00A77C)}, - {RUNE_C(0x00A77F), RUNE_C(0x00A77F)}, - {RUNE_C(0x00A781), RUNE_C(0x00A781)}, - {RUNE_C(0x00A783), RUNE_C(0x00A783)}, - {RUNE_C(0x00A785), RUNE_C(0x00A785)}, - {RUNE_C(0x00A787), RUNE_C(0x00A787)}, - {RUNE_C(0x00A78C), RUNE_C(0x00A78C)}, - {RUNE_C(0x00A791), RUNE_C(0x00A791)}, - {RUNE_C(0x00A793), RUNE_C(0x00A794)}, - {RUNE_C(0x00A797), RUNE_C(0x00A797)}, - {RUNE_C(0x00A799), RUNE_C(0x00A799)}, - {RUNE_C(0x00A79B), RUNE_C(0x00A79B)}, - {RUNE_C(0x00A79D), RUNE_C(0x00A79D)}, - {RUNE_C(0x00A79F), RUNE_C(0x00A79F)}, - {RUNE_C(0x00A7A1), RUNE_C(0x00A7A1)}, - {RUNE_C(0x00A7A3), RUNE_C(0x00A7A3)}, - {RUNE_C(0x00A7A5), RUNE_C(0x00A7A5)}, - {RUNE_C(0x00A7A7), RUNE_C(0x00A7A7)}, - {RUNE_C(0x00A7A9), RUNE_C(0x00A7A9)}, - {RUNE_C(0x00A7B5), RUNE_C(0x00A7B5)}, - {RUNE_C(0x00A7B7), RUNE_C(0x00A7B7)}, - {RUNE_C(0x00A7B9), RUNE_C(0x00A7B9)}, - {RUNE_C(0x00A7BB), RUNE_C(0x00A7BB)}, - {RUNE_C(0x00A7BD), RUNE_C(0x00A7BD)}, - {RUNE_C(0x00A7BF), RUNE_C(0x00A7BF)}, - {RUNE_C(0x00A7C1), RUNE_C(0x00A7C1)}, - {RUNE_C(0x00A7C3), RUNE_C(0x00A7C3)}, - {RUNE_C(0x00A7C8), RUNE_C(0x00A7C8)}, - {RUNE_C(0x00A7CA), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D1), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D7), RUNE_C(0x00A7D7)}, - {RUNE_C(0x00A7D9), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F6), RUNE_C(0x00A7F6)}, - {RUNE_C(0x00AB53), RUNE_C(0x00AB53)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x010428), RUNE_C(0x01044F)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x0118C0), RUNE_C(0x0118DF)}, - {RUNE_C(0x016E60), RUNE_C(0x016E7F)}, - {RUNE_C(0x01E922), RUNE_C(0x01E943)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x54, + 0x55, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xD4, + 0x29, 0x11, 0x24, 0x46, 0x2A, 0x21, 0x51, 0xA2, + 0x60, 0x5B, 0x55, 0xB5, 0xAA, 0xAA, 0x2D, 0xAA}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xA8, 0xAA, 0x0A, 0x90, + 0x85, 0xAA, 0xDF, 0x1A, 0x6B, 0x9F, 0x26, 0x20, + 0x8D, 0x1F, 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x38, + 0x00, 0x00, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, + 0xFF, 0x7F, 0xE3, 0xAA, 0xAA, 0xAA, 0x2F, 0x09}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xAA, 0xAA, 0xAA, + 0x02, 0xA8, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0x54, 0xD5, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xEA, 0x0F, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, + {0xFF, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, + 0x3F, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x50, + 0xDC, 0x10, 0xCF, 0x00, 0xFF, 0x00, 0xDC, 0x10}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x15, 0x48, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0x0A, 0x50, 0x08, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A, 0x00, 0x00, + 0xAA, 0xAA, 0xAA, 0x0A, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xA8, 0xAA, 0xA8, 0xAA, + 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x00, 0x94, + 0xAA, 0x10, 0x9A, 0xAA, 0xAA, 0x02, 0xA0, 0xAA, + 0x0A, 0x05, 0x82, 0x02, 0x00, 0x00, 0x40, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_cwu(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_dash.c b/lib/unicode/prop/uprop_is_dash.c index e49b04a..a191edf 100644 --- a/lib/unicode/prop/uprop_is_dash.c +++ b/lib/unicode/prop/uprop_is_dash.c @@ -1,50 +1,336 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 5, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, + 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00058A), RUNE_C(0x00058A)}, - {RUNE_C(0x0005BE), RUNE_C(0x0005BE)}, - {RUNE_C(0x001400), RUNE_C(0x001400)}, - {RUNE_C(0x001806), RUNE_C(0x001806)}, - {RUNE_C(0x002010), RUNE_C(0x002015)}, - {RUNE_C(0x002053), RUNE_C(0x002053)}, - {RUNE_C(0x00207B), RUNE_C(0x00207B)}, - {RUNE_C(0x00208B), RUNE_C(0x00208B)}, - {RUNE_C(0x002212), RUNE_C(0x002212)}, - {RUNE_C(0x002E17), RUNE_C(0x002E17)}, - {RUNE_C(0x002E1A), RUNE_C(0x002E1A)}, - {RUNE_C(0x002E3A), RUNE_C(0x002E3B)}, - {RUNE_C(0x002E40), RUNE_C(0x002E40)}, - {RUNE_C(0x002E5D), RUNE_C(0x002E5D)}, - {RUNE_C(0x00301C), RUNE_C(0x00301C)}, - {RUNE_C(0x003030), RUNE_C(0x003030)}, - {RUNE_C(0x0030A0), RUNE_C(0x0030A0)}, - {RUNE_C(0x00FE31), RUNE_C(0x00FE32)}, - {RUNE_C(0x00FE58), RUNE_C(0x00FE58)}, - {RUNE_C(0x00FE63), RUNE_C(0x00FE63)}, - {RUNE_C(0x00FF0D), RUNE_C(0x00FF0D)}, - {RUNE_C(0x010EAD), RUNE_C(0x010EAD)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x0C, + 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_dash(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_dep.c b/lib/unicode/prop/uprop_is_dep.c index d696c07..a45e551 100644 --- a/lib/unicode/prop/uprop_is_dep.c +++ b/lib/unicode/prop/uprop_is_dep.c @@ -1,29 +1,216 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000149), RUNE_C(0x000149)}, - {RUNE_C(0x000673), RUNE_C(0x000673)}, - {RUNE_C(0x000F77), RUNE_C(0x000F77)}, - {RUNE_C(0x000F79), RUNE_C(0x000F79)}, - {RUNE_C(0x0017A3), RUNE_C(0x0017A4)}, - {RUNE_C(0x00206A), RUNE_C(0x00206F)}, - {RUNE_C(0x002329), RUNE_C(0x00232A)}, - {RUNE_C(0x0E0001), RUNE_C(0x0E0001)}, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 2, 1, 1, 1, 3, 1, 1, 1, 4, 1, 1, 1, 1, + 5, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_dep(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_di.c b/lib/unicode/prop/uprop_is_di.c index 585ce4f..17c714a 100644 --- a/lib/unicode/prop/uprop_is_di.c +++ b/lib/unicode/prop/uprop_is_di.c @@ -1,44 +1,344 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 1, 1, 1, 1, 1, 5, 6, 1, 1, 1, 1, 1, 1, 1, + 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00034F), RUNE_C(0x00034F)}, - {RUNE_C(0x00061C), RUNE_C(0x00061C)}, - {RUNE_C(0x00115F), RUNE_C(0x001160)}, - {RUNE_C(0x0017B4), RUNE_C(0x0017B5)}, - {RUNE_C(0x00180B), RUNE_C(0x00180F)}, - {RUNE_C(0x00200B), RUNE_C(0x00200F)}, - {RUNE_C(0x00202A), RUNE_C(0x00202E)}, - {RUNE_C(0x002060), RUNE_C(0x00206F)}, - {RUNE_C(0x003164), RUNE_C(0x003164)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE0F)}, - {RUNE_C(0x00FEFF), RUNE_C(0x00FEFF)}, - {RUNE_C(0x00FFA0), RUNE_C(0x00FFA0)}, - {RUNE_C(0x00FFF0), RUNE_C(0x00FFF8)}, - {RUNE_C(0x01BCA0), RUNE_C(0x01BCA3)}, - {RUNE_C(0x01D173), RUNE_C(0x01D17A)}, - {RUNE_C(0x0E0000), RUNE_C(0x0E0FFF)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xF8, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_di(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_dia.c b/lib/unicode/prop/uprop_is_dia.c index f900d3e..9890abe 100644 --- a/lib/unicode/prop/uprop_is_dia.c +++ b/lib/unicode/prop/uprop_is_dia.c @@ -1,217 +1,754 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x90, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 16, 17, 18, 19, 16, 16, 20, 21, 22, 23, 24, 25, + 26, 27, 2, 2, 2, 2, 28, 2, 2, 2, 2, 2, 2, 2, 29, 30, + 2, 2, 31, 2, 32, 33, 34, 35, 36, 37, 38, 39, 2, 2, 2, 40, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 41, 2, 2, 42, 2, 2, 2, + 43, 44, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 45, 46, 47, 48, + 2, 49, 50, 51, 52, 53, 54, 55, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 56, 2, 2, 2, 2, 2, 57, 2, 58, 59, + 2, 2, 2, 2, 2, 60, 2, 2, 2, 2, 2, 2, 2, 2, 2, 61, + 2, 2, 2, 2, 2, 62, 2, 2, 2, 2, 63, 2, 2, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 2, 74, 75, 2, 76, 77, 78, 79, 2, + 68, 2, 80, 60, 81, 82, 2, 2, 77, 2, 83, 84, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 85, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 86, 87, 2, 2, 2, 2, 2, 2, 2, 2, 88, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 89, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 90, 2, + 2, 2, 91, 92, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 93, 2, 87, 2, 2, 94, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 95, 96, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x0002B0), RUNE_C(0x00034E)}, - {RUNE_C(0x000350), RUNE_C(0x000357)}, - {RUNE_C(0x00035D), RUNE_C(0x000362)}, - {RUNE_C(0x000374), RUNE_C(0x000375)}, - {RUNE_C(0x00037A), RUNE_C(0x00037A)}, - {RUNE_C(0x000384), RUNE_C(0x000385)}, - {RUNE_C(0x000483), RUNE_C(0x000487)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x000591), RUNE_C(0x0005A1)}, - {RUNE_C(0x0005A3), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C4)}, - {RUNE_C(0x00064B), RUNE_C(0x000652)}, - {RUNE_C(0x000657), RUNE_C(0x000658)}, - {RUNE_C(0x0006DF), RUNE_C(0x0006E0)}, - {RUNE_C(0x0006E5), RUNE_C(0x0006E6)}, - {RUNE_C(0x0006EA), RUNE_C(0x0006EC)}, - {RUNE_C(0x000730), RUNE_C(0x00074A)}, - {RUNE_C(0x0007A6), RUNE_C(0x0007B0)}, - {RUNE_C(0x0007EB), RUNE_C(0x0007F5)}, - {RUNE_C(0x000818), RUNE_C(0x000819)}, - {RUNE_C(0x000898), RUNE_C(0x00089F)}, - {RUNE_C(0x0008C9), RUNE_C(0x0008D2)}, - {RUNE_C(0x0008E3), RUNE_C(0x0008FE)}, - {RUNE_C(0x00093C), RUNE_C(0x00093C)}, - {RUNE_C(0x00094D), RUNE_C(0x00094D)}, - {RUNE_C(0x000951), RUNE_C(0x000954)}, - {RUNE_C(0x000971), RUNE_C(0x000971)}, - {RUNE_C(0x0009BC), RUNE_C(0x0009BC)}, - {RUNE_C(0x0009CD), RUNE_C(0x0009CD)}, - {RUNE_C(0x000A3C), RUNE_C(0x000A3C)}, - {RUNE_C(0x000A4D), RUNE_C(0x000A4D)}, - {RUNE_C(0x000ABC), RUNE_C(0x000ABC)}, - {RUNE_C(0x000ACD), RUNE_C(0x000ACD)}, - {RUNE_C(0x000AFD), RUNE_C(0x000AFF)}, - {RUNE_C(0x000B3C), RUNE_C(0x000B3C)}, - {RUNE_C(0x000B4D), RUNE_C(0x000B4D)}, - {RUNE_C(0x000B55), RUNE_C(0x000B55)}, - {RUNE_C(0x000BCD), RUNE_C(0x000BCD)}, - {RUNE_C(0x000C3C), RUNE_C(0x000C3C)}, - {RUNE_C(0x000C4D), RUNE_C(0x000C4D)}, - {RUNE_C(0x000CBC), RUNE_C(0x000CBC)}, - {RUNE_C(0x000CCD), RUNE_C(0x000CCD)}, - {RUNE_C(0x000D3B), RUNE_C(0x000D3C)}, - {RUNE_C(0x000D4D), RUNE_C(0x000D4D)}, - {RUNE_C(0x000DCA), RUNE_C(0x000DCA)}, - {RUNE_C(0x000E47), RUNE_C(0x000E4C)}, - {RUNE_C(0x000E4E), RUNE_C(0x000E4E)}, - {RUNE_C(0x000EBA), RUNE_C(0x000EBA)}, - {RUNE_C(0x000EC8), RUNE_C(0x000ECC)}, - {RUNE_C(0x000F18), RUNE_C(0x000F19)}, - {RUNE_C(0x000F35), RUNE_C(0x000F35)}, - {RUNE_C(0x000F37), RUNE_C(0x000F37)}, - {RUNE_C(0x000F39), RUNE_C(0x000F39)}, - {RUNE_C(0x000F3E), RUNE_C(0x000F3F)}, - {RUNE_C(0x000F82), RUNE_C(0x000F84)}, - {RUNE_C(0x000F86), RUNE_C(0x000F87)}, - {RUNE_C(0x000FC6), RUNE_C(0x000FC6)}, - {RUNE_C(0x001037), RUNE_C(0x001037)}, - {RUNE_C(0x001039), RUNE_C(0x00103A)}, - {RUNE_C(0x001063), RUNE_C(0x001064)}, - {RUNE_C(0x001069), RUNE_C(0x00106D)}, - {RUNE_C(0x001087), RUNE_C(0x00108D)}, - {RUNE_C(0x00108F), RUNE_C(0x00108F)}, - {RUNE_C(0x00109A), RUNE_C(0x00109B)}, - {RUNE_C(0x00135D), RUNE_C(0x00135F)}, - {RUNE_C(0x001714), RUNE_C(0x001715)}, - {RUNE_C(0x0017C9), RUNE_C(0x0017D3)}, - {RUNE_C(0x0017DD), RUNE_C(0x0017DD)}, - {RUNE_C(0x001939), RUNE_C(0x00193B)}, - {RUNE_C(0x001A75), RUNE_C(0x001A7C)}, - {RUNE_C(0x001A7F), RUNE_C(0x001A7F)}, - {RUNE_C(0x001AB0), RUNE_C(0x001ABE)}, - {RUNE_C(0x001AC1), RUNE_C(0x001ACB)}, - {RUNE_C(0x001B34), RUNE_C(0x001B34)}, - {RUNE_C(0x001B44), RUNE_C(0x001B44)}, - {RUNE_C(0x001B6B), RUNE_C(0x001B73)}, - {RUNE_C(0x001BAA), RUNE_C(0x001BAB)}, - {RUNE_C(0x001C36), RUNE_C(0x001C37)}, - {RUNE_C(0x001C78), RUNE_C(0x001C7D)}, - {RUNE_C(0x001CD0), RUNE_C(0x001CE8)}, - {RUNE_C(0x001CED), RUNE_C(0x001CED)}, - {RUNE_C(0x001CF4), RUNE_C(0x001CF4)}, - {RUNE_C(0x001CF7), RUNE_C(0x001CF9)}, - {RUNE_C(0x001D2C), RUNE_C(0x001D6A)}, - {RUNE_C(0x001DC4), RUNE_C(0x001DCF)}, - {RUNE_C(0x001DF5), RUNE_C(0x001DFF)}, - {RUNE_C(0x001FBD), RUNE_C(0x001FBD)}, - {RUNE_C(0x001FBF), RUNE_C(0x001FC1)}, - {RUNE_C(0x001FCD), RUNE_C(0x001FCF)}, - {RUNE_C(0x001FDD), RUNE_C(0x001FDF)}, - {RUNE_C(0x001FED), RUNE_C(0x001FEF)}, - {RUNE_C(0x001FFD), RUNE_C(0x001FFE)}, - {RUNE_C(0x002CEF), RUNE_C(0x002CF1)}, - {RUNE_C(0x002E2F), RUNE_C(0x002E2F)}, - {RUNE_C(0x00302A), RUNE_C(0x00302F)}, - {RUNE_C(0x003099), RUNE_C(0x00309C)}, - {RUNE_C(0x0030FC), RUNE_C(0x0030FC)}, - {RUNE_C(0x00A66F), RUNE_C(0x00A66F)}, - {RUNE_C(0x00A67C), RUNE_C(0x00A67D)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A67F)}, - {RUNE_C(0x00A69C), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A6F0), RUNE_C(0x00A6F1)}, - {RUNE_C(0x00A700), RUNE_C(0x00A721)}, - {RUNE_C(0x00A788), RUNE_C(0x00A78A)}, - {RUNE_C(0x00A7F8), RUNE_C(0x00A7F9)}, - {RUNE_C(0x00A8C4), RUNE_C(0x00A8C4)}, - {RUNE_C(0x00A8E0), RUNE_C(0x00A8F1)}, - {RUNE_C(0x00A92B), RUNE_C(0x00A92E)}, - {RUNE_C(0x00A953), RUNE_C(0x00A953)}, - {RUNE_C(0x00A9B3), RUNE_C(0x00A9B3)}, - {RUNE_C(0x00A9C0), RUNE_C(0x00A9C0)}, - {RUNE_C(0x00A9E5), RUNE_C(0x00A9E5)}, - {RUNE_C(0x00AA7B), RUNE_C(0x00AA7D)}, - {RUNE_C(0x00AABF), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AAF6), RUNE_C(0x00AAF6)}, - {RUNE_C(0x00AB5B), RUNE_C(0x00AB5F)}, - {RUNE_C(0x00AB69), RUNE_C(0x00AB6B)}, - {RUNE_C(0x00ABEC), RUNE_C(0x00ABED)}, - {RUNE_C(0x00FB1E), RUNE_C(0x00FB1E)}, - {RUNE_C(0x00FE20), RUNE_C(0x00FE2F)}, - {RUNE_C(0x00FF3E), RUNE_C(0x00FF3E)}, - {RUNE_C(0x00FF40), RUNE_C(0x00FF40)}, - {RUNE_C(0x00FF70), RUNE_C(0x00FF70)}, - {RUNE_C(0x00FF9E), RUNE_C(0x00FF9F)}, - {RUNE_C(0x00FFE3), RUNE_C(0x00FFE3)}, - {RUNE_C(0x0102E0), RUNE_C(0x0102E0)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010AE5), RUNE_C(0x010AE6)}, - {RUNE_C(0x010D22), RUNE_C(0x010D27)}, - {RUNE_C(0x010EFD), RUNE_C(0x010EFF)}, - {RUNE_C(0x010F46), RUNE_C(0x010F50)}, - {RUNE_C(0x010F82), RUNE_C(0x010F85)}, - {RUNE_C(0x011046), RUNE_C(0x011046)}, - {RUNE_C(0x011070), RUNE_C(0x011070)}, - {RUNE_C(0x0110B9), RUNE_C(0x0110BA)}, - {RUNE_C(0x011133), RUNE_C(0x011134)}, - {RUNE_C(0x011173), RUNE_C(0x011173)}, - {RUNE_C(0x0111C0), RUNE_C(0x0111C0)}, - {RUNE_C(0x0111CA), RUNE_C(0x0111CC)}, - {RUNE_C(0x011235), RUNE_C(0x011236)}, - {RUNE_C(0x0112E9), RUNE_C(0x0112EA)}, - {RUNE_C(0x01133C), RUNE_C(0x01133C)}, - {RUNE_C(0x01134D), RUNE_C(0x01134D)}, - {RUNE_C(0x011366), RUNE_C(0x01136C)}, - {RUNE_C(0x011370), RUNE_C(0x011374)}, - {RUNE_C(0x011442), RUNE_C(0x011442)}, - {RUNE_C(0x011446), RUNE_C(0x011446)}, - {RUNE_C(0x0114C2), RUNE_C(0x0114C3)}, - {RUNE_C(0x0115BF), RUNE_C(0x0115C0)}, - {RUNE_C(0x01163F), RUNE_C(0x01163F)}, - {RUNE_C(0x0116B6), RUNE_C(0x0116B7)}, - {RUNE_C(0x01172B), RUNE_C(0x01172B)}, - {RUNE_C(0x011839), RUNE_C(0x01183A)}, - {RUNE_C(0x01193D), RUNE_C(0x01193E)}, - {RUNE_C(0x011943), RUNE_C(0x011943)}, - {RUNE_C(0x0119E0), RUNE_C(0x0119E0)}, - {RUNE_C(0x011A34), RUNE_C(0x011A34)}, - {RUNE_C(0x011A47), RUNE_C(0x011A47)}, - {RUNE_C(0x011A99), RUNE_C(0x011A99)}, - {RUNE_C(0x011C3F), RUNE_C(0x011C3F)}, - {RUNE_C(0x011D42), RUNE_C(0x011D42)}, - {RUNE_C(0x011D44), RUNE_C(0x011D45)}, - {RUNE_C(0x011D97), RUNE_C(0x011D97)}, - {RUNE_C(0x013447), RUNE_C(0x013455)}, - {RUNE_C(0x016AF0), RUNE_C(0x016AF4)}, - {RUNE_C(0x016B30), RUNE_C(0x016B36)}, - {RUNE_C(0x016F8F), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FF0), RUNE_C(0x016FF1)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01CF00), RUNE_C(0x01CF2D)}, - {RUNE_C(0x01CF30), RUNE_C(0x01CF46)}, - {RUNE_C(0x01D167), RUNE_C(0x01D169)}, - {RUNE_C(0x01D16D), RUNE_C(0x01D172)}, - {RUNE_C(0x01D17B), RUNE_C(0x01D182)}, - {RUNE_C(0x01D185), RUNE_C(0x01D18B)}, - {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E130), RUNE_C(0x01E136)}, - {RUNE_C(0x01E2AE), RUNE_C(0x01E2AE)}, - {RUNE_C(0x01E2EC), RUNE_C(0x01E2EF)}, - {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6)}, - {RUNE_C(0x01E944), RUNE_C(0x01E946)}, - {RUNE_C(0x01E948), RUNE_C(0x01E94A)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x90, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xE0, 0x07, 0x00, 0x30, 0x04}, + {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFE, 0xFF, 0xFB, 0xFF, 0xFF, 0xBF, + 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x61, 0x1C, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x3F, 0x00}, + {0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x07, 0x00, 0xF8, 0xFF, 0xFF, 0x7F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x20, 0x1E, 0x00, 0x00, 0x00, 0x02, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0xC2, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x18, 0x3E, 0x00, 0x00}, + {0x80, 0xBF, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFE, 0x0F, 0x20, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x9F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, + 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x21, 0x90, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, + 0x03, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0x60}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xB0}, + {0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xF8, 0x00, 0x0E, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x20, 0x00, 0x00, 0xC0, 0x1F, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0xE3, 0x07, 0xF8}, + {0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_dia(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_ebase.c b/lib/unicode/prop/uprop_is_ebase.c index 912671a..14b91fe 100644 --- a/lib/unicode/prop/uprop_is_ebase.c +++ b/lib/unicode/prop/uprop_is_ebase.c @@ -1,61 +1,208 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00261D), RUNE_C(0x00261D)}, - {RUNE_C(0x0026F9), RUNE_C(0x0026F9)}, - {RUNE_C(0x00270A), RUNE_C(0x00270D)}, - {RUNE_C(0x01F385), RUNE_C(0x01F385)}, - {RUNE_C(0x01F3C2), RUNE_C(0x01F3C4)}, - {RUNE_C(0x01F3C7), RUNE_C(0x01F3C7)}, - {RUNE_C(0x01F3CA), RUNE_C(0x01F3CC)}, - {RUNE_C(0x01F442), RUNE_C(0x01F443)}, - {RUNE_C(0x01F446), RUNE_C(0x01F450)}, - {RUNE_C(0x01F466), RUNE_C(0x01F478)}, - {RUNE_C(0x01F47C), RUNE_C(0x01F47C)}, - {RUNE_C(0x01F481), RUNE_C(0x01F483)}, - {RUNE_C(0x01F485), RUNE_C(0x01F487)}, - {RUNE_C(0x01F48F), RUNE_C(0x01F48F)}, - {RUNE_C(0x01F491), RUNE_C(0x01F491)}, - {RUNE_C(0x01F4AA), RUNE_C(0x01F4AA)}, - {RUNE_C(0x01F574), RUNE_C(0x01F575)}, - {RUNE_C(0x01F57A), RUNE_C(0x01F57A)}, - {RUNE_C(0x01F590), RUNE_C(0x01F590)}, - {RUNE_C(0x01F595), RUNE_C(0x01F596)}, - {RUNE_C(0x01F645), RUNE_C(0x01F647)}, - {RUNE_C(0x01F64B), RUNE_C(0x01F64F)}, - {RUNE_C(0x01F6A3), RUNE_C(0x01F6A3)}, - {RUNE_C(0x01F6B4), RUNE_C(0x01F6B6)}, - {RUNE_C(0x01F6C0), RUNE_C(0x01F6C0)}, - {RUNE_C(0x01F6CC), RUNE_C(0x01F6CC)}, - {RUNE_C(0x01F90C), RUNE_C(0x01F90C)}, - {RUNE_C(0x01F90F), RUNE_C(0x01F90F)}, - {RUNE_C(0x01F918), RUNE_C(0x01F91F)}, - {RUNE_C(0x01F926), RUNE_C(0x01F926)}, - {RUNE_C(0x01F930), RUNE_C(0x01F939)}, - {RUNE_C(0x01F93C), RUNE_C(0x01F93E)}, - {RUNE_C(0x01F977), RUNE_C(0x01F977)}, - {RUNE_C(0x01F9B5), RUNE_C(0x01F9B6)}, - {RUNE_C(0x01F9B8), RUNE_C(0x01F9B9)}, - {RUNE_C(0x01F9BB), RUNE_C(0x01F9BB)}, - {RUNE_C(0x01F9CD), RUNE_C(0x01F9CF)}, - {RUNE_C(0x01F9D1), RUNE_C(0x01F9DD)}, - {RUNE_C(0x01FAC3), RUNE_C(0x01FAC5)}, - {RUNE_C(0x01FAF0), RUNE_C(0x01FAF8)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xCC, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x11, + 0xEE, 0x80, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x04, + 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x70, 0x00, + 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x00, 0xFF, 0x40, 0x00, 0xFF, 0x73, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0B, + 0x00, 0xE0, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_ebase(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_ecomp.c b/lib/unicode/prop/uprop_is_ecomp.c index b4e5a5a..414b0a4 100644 --- a/lib/unicode/prop/uprop_is_ecomp.c +++ b/lib/unicode/prop/uprop_is_ecomp.c @@ -1,35 +1,216 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xFF, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 5, 1, 1, 6, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00200D), RUNE_C(0x00200D)}, - {RUNE_C(0x0020E3), RUNE_C(0x0020E3)}, - {RUNE_C(0x00FE0F), RUNE_C(0x00FE0F)}, - {RUNE_C(0x01F1E6), RUNE_C(0x01F1FF)}, - {RUNE_C(0x01F3FB), RUNE_C(0x01F3FF)}, - {RUNE_C(0x01F9B0), RUNE_C(0x01F9B3)}, - {RUNE_C(0x0E0020), RUNE_C(0x0E007F)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_ecomp(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_emod.c b/lib/unicode/prop/uprop_is_emod.c index 7b50fc8..81a7d55 100644 --- a/lib/unicode/prop/uprop_is_emod.c +++ b/lib/unicode/prop/uprop_is_emod.c @@ -1,22 +1,208 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x01F3FB), RUNE_C(0x01F3FF)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xCC, 0xFF, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x11, + 0xEE, 0x80, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x04, + 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x70, 0x00, + 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x90, 0x00, 0xFF, 0x40, 0x00, 0xFF, 0x73, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x0B, + 0x00, 0xE0, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_emod(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_emoji.c b/lib/unicode/prop/uprop_is_emoji.c index 42aed21..d0f38d9 100644 --- a/lib/unicode/prop/uprop_is_emoji.c +++ b/lib/unicode/prop/uprop_is_emoji.c @@ -1,174 +1,388 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xFF, 0x03, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 3, 1, 4, 5, 6, 7, 8, 1, 9, 1, 10, 1, 1, 1, 1, + 11, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 14, 15, 16, 17, 18, 19, 20, 21, 1, 22, 23, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00203C), RUNE_C(0x00203C)}, - {RUNE_C(0x002049), RUNE_C(0x002049)}, - {RUNE_C(0x002122), RUNE_C(0x002122)}, - {RUNE_C(0x002139), RUNE_C(0x002139)}, - {RUNE_C(0x002194), RUNE_C(0x002199)}, - {RUNE_C(0x0021A9), RUNE_C(0x0021AA)}, - {RUNE_C(0x00231A), RUNE_C(0x00231B)}, - {RUNE_C(0x002328), RUNE_C(0x002328)}, - {RUNE_C(0x0023CF), RUNE_C(0x0023CF)}, - {RUNE_C(0x0023E9), RUNE_C(0x0023F3)}, - {RUNE_C(0x0023F8), RUNE_C(0x0023FA)}, - {RUNE_C(0x0024C2), RUNE_C(0x0024C2)}, - {RUNE_C(0x0025AA), RUNE_C(0x0025AB)}, - {RUNE_C(0x0025B6), RUNE_C(0x0025B6)}, - {RUNE_C(0x0025C0), RUNE_C(0x0025C0)}, - {RUNE_C(0x0025FB), RUNE_C(0x0025FE)}, - {RUNE_C(0x002600), RUNE_C(0x002604)}, - {RUNE_C(0x00260E), RUNE_C(0x00260E)}, - {RUNE_C(0x002611), RUNE_C(0x002611)}, - {RUNE_C(0x002614), RUNE_C(0x002615)}, - {RUNE_C(0x002618), RUNE_C(0x002618)}, - {RUNE_C(0x00261D), RUNE_C(0x00261D)}, - {RUNE_C(0x002620), RUNE_C(0x002620)}, - {RUNE_C(0x002622), RUNE_C(0x002623)}, - {RUNE_C(0x002626), RUNE_C(0x002626)}, - {RUNE_C(0x00262A), RUNE_C(0x00262A)}, - {RUNE_C(0x00262E), RUNE_C(0x00262F)}, - {RUNE_C(0x002638), RUNE_C(0x00263A)}, - {RUNE_C(0x002640), RUNE_C(0x002640)}, - {RUNE_C(0x002642), RUNE_C(0x002642)}, - {RUNE_C(0x002648), RUNE_C(0x002653)}, - {RUNE_C(0x00265F), RUNE_C(0x002660)}, - {RUNE_C(0x002663), RUNE_C(0x002663)}, - {RUNE_C(0x002665), RUNE_C(0x002666)}, - {RUNE_C(0x002668), RUNE_C(0x002668)}, - {RUNE_C(0x00267B), RUNE_C(0x00267B)}, - {RUNE_C(0x00267E), RUNE_C(0x00267F)}, - {RUNE_C(0x002692), RUNE_C(0x002697)}, - {RUNE_C(0x002699), RUNE_C(0x002699)}, - {RUNE_C(0x00269B), RUNE_C(0x00269C)}, - {RUNE_C(0x0026A0), RUNE_C(0x0026A1)}, - {RUNE_C(0x0026A7), RUNE_C(0x0026A7)}, - {RUNE_C(0x0026AA), RUNE_C(0x0026AB)}, - {RUNE_C(0x0026B0), RUNE_C(0x0026B1)}, - {RUNE_C(0x0026BD), RUNE_C(0x0026BE)}, - {RUNE_C(0x0026C4), RUNE_C(0x0026C5)}, - {RUNE_C(0x0026C8), RUNE_C(0x0026C8)}, - {RUNE_C(0x0026CE), RUNE_C(0x0026CF)}, - {RUNE_C(0x0026D1), RUNE_C(0x0026D1)}, - {RUNE_C(0x0026D3), RUNE_C(0x0026D4)}, - {RUNE_C(0x0026E9), RUNE_C(0x0026EA)}, - {RUNE_C(0x0026F0), RUNE_C(0x0026F5)}, - {RUNE_C(0x0026F7), RUNE_C(0x0026FA)}, - {RUNE_C(0x0026FD), RUNE_C(0x0026FD)}, - {RUNE_C(0x002702), RUNE_C(0x002702)}, - {RUNE_C(0x002705), RUNE_C(0x002705)}, - {RUNE_C(0x002708), RUNE_C(0x00270D)}, - {RUNE_C(0x00270F), RUNE_C(0x00270F)}, - {RUNE_C(0x002712), RUNE_C(0x002712)}, - {RUNE_C(0x002714), RUNE_C(0x002714)}, - {RUNE_C(0x002716), RUNE_C(0x002716)}, - {RUNE_C(0x00271D), RUNE_C(0x00271D)}, - {RUNE_C(0x002721), RUNE_C(0x002721)}, - {RUNE_C(0x002728), RUNE_C(0x002728)}, - {RUNE_C(0x002733), RUNE_C(0x002734)}, - {RUNE_C(0x002744), RUNE_C(0x002744)}, - {RUNE_C(0x002747), RUNE_C(0x002747)}, - {RUNE_C(0x00274C), RUNE_C(0x00274C)}, - {RUNE_C(0x00274E), RUNE_C(0x00274E)}, - {RUNE_C(0x002753), RUNE_C(0x002755)}, - {RUNE_C(0x002757), RUNE_C(0x002757)}, - {RUNE_C(0x002763), RUNE_C(0x002764)}, - {RUNE_C(0x002795), RUNE_C(0x002797)}, - {RUNE_C(0x0027A1), RUNE_C(0x0027A1)}, - {RUNE_C(0x0027B0), RUNE_C(0x0027B0)}, - {RUNE_C(0x0027BF), RUNE_C(0x0027BF)}, - {RUNE_C(0x002934), RUNE_C(0x002935)}, - {RUNE_C(0x002B05), RUNE_C(0x002B07)}, - {RUNE_C(0x002B1B), RUNE_C(0x002B1C)}, - {RUNE_C(0x002B50), RUNE_C(0x002B50)}, - {RUNE_C(0x002B55), RUNE_C(0x002B55)}, - {RUNE_C(0x003030), RUNE_C(0x003030)}, - {RUNE_C(0x00303D), RUNE_C(0x00303D)}, - {RUNE_C(0x003297), RUNE_C(0x003297)}, - {RUNE_C(0x003299), RUNE_C(0x003299)}, - {RUNE_C(0x01F004), RUNE_C(0x01F004)}, - {RUNE_C(0x01F0CF), RUNE_C(0x01F0CF)}, - {RUNE_C(0x01F170), RUNE_C(0x01F171)}, - {RUNE_C(0x01F17E), RUNE_C(0x01F17F)}, - {RUNE_C(0x01F18E), RUNE_C(0x01F18E)}, - {RUNE_C(0x01F191), RUNE_C(0x01F19A)}, - {RUNE_C(0x01F1E6), RUNE_C(0x01F1FF)}, - {RUNE_C(0x01F201), RUNE_C(0x01F202)}, - {RUNE_C(0x01F21A), RUNE_C(0x01F21A)}, - {RUNE_C(0x01F22F), RUNE_C(0x01F22F)}, - {RUNE_C(0x01F232), RUNE_C(0x01F23A)}, - {RUNE_C(0x01F250), RUNE_C(0x01F251)}, - {RUNE_C(0x01F300), RUNE_C(0x01F321)}, - {RUNE_C(0x01F324), RUNE_C(0x01F393)}, - {RUNE_C(0x01F396), RUNE_C(0x01F397)}, - {RUNE_C(0x01F399), RUNE_C(0x01F39B)}, - {RUNE_C(0x01F39E), RUNE_C(0x01F3F0)}, - {RUNE_C(0x01F3F3), RUNE_C(0x01F3F5)}, - {RUNE_C(0x01F3F7), RUNE_C(0x01F4FD)}, - {RUNE_C(0x01F4FF), RUNE_C(0x01F53D)}, - {RUNE_C(0x01F549), RUNE_C(0x01F54E)}, - {RUNE_C(0x01F550), RUNE_C(0x01F567)}, - {RUNE_C(0x01F56F), RUNE_C(0x01F570)}, - {RUNE_C(0x01F573), RUNE_C(0x01F57A)}, - {RUNE_C(0x01F587), RUNE_C(0x01F587)}, - {RUNE_C(0x01F58A), RUNE_C(0x01F58D)}, - {RUNE_C(0x01F590), RUNE_C(0x01F590)}, - {RUNE_C(0x01F595), RUNE_C(0x01F596)}, - {RUNE_C(0x01F5A4), RUNE_C(0x01F5A5)}, - {RUNE_C(0x01F5A8), RUNE_C(0x01F5A8)}, - {RUNE_C(0x01F5B1), RUNE_C(0x01F5B2)}, - {RUNE_C(0x01F5BC), RUNE_C(0x01F5BC)}, - {RUNE_C(0x01F5C2), RUNE_C(0x01F5C4)}, - {RUNE_C(0x01F5D1), RUNE_C(0x01F5D3)}, - {RUNE_C(0x01F5DC), RUNE_C(0x01F5DE)}, - {RUNE_C(0x01F5E1), RUNE_C(0x01F5E1)}, - {RUNE_C(0x01F5E3), RUNE_C(0x01F5E3)}, - {RUNE_C(0x01F5E8), RUNE_C(0x01F5E8)}, - {RUNE_C(0x01F5EF), RUNE_C(0x01F5EF)}, - {RUNE_C(0x01F5F3), RUNE_C(0x01F5F3)}, - {RUNE_C(0x01F5FA), RUNE_C(0x01F64F)}, - {RUNE_C(0x01F680), RUNE_C(0x01F6C5)}, - {RUNE_C(0x01F6CB), RUNE_C(0x01F6D2)}, - {RUNE_C(0x01F6D5), RUNE_C(0x01F6D7)}, - {RUNE_C(0x01F6DC), RUNE_C(0x01F6E5)}, - {RUNE_C(0x01F6E9), RUNE_C(0x01F6E9)}, - {RUNE_C(0x01F6EB), RUNE_C(0x01F6EC)}, - {RUNE_C(0x01F6F0), RUNE_C(0x01F6F0)}, - {RUNE_C(0x01F6F3), RUNE_C(0x01F6FC)}, - {RUNE_C(0x01F7E0), RUNE_C(0x01F7EB)}, - {RUNE_C(0x01F7F0), RUNE_C(0x01F7F0)}, - {RUNE_C(0x01F90C), RUNE_C(0x01F93A)}, - {RUNE_C(0x01F93C), RUNE_C(0x01F945)}, - {RUNE_C(0x01F947), RUNE_C(0x01F9FF)}, - {RUNE_C(0x01FA70), RUNE_C(0x01FA7C)}, - {RUNE_C(0x01FA80), RUNE_C(0x01FA88)}, - {RUNE_C(0x01FA90), RUNE_C(0x01FABD)}, - {RUNE_C(0x01FABF), RUNE_C(0x01FAC5)}, - {RUNE_C(0x01FACE), RUNE_C(0x01FADB)}, - {RUNE_C(0x01FAE0), RUNE_C(0x01FAE8)}, - {RUNE_C(0x01FAF0), RUNE_C(0x01FAF8)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0x03, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x40, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78}, + {0x1F, 0x40, 0x32, 0x21, 0x4D, 0xC4, 0x00, 0x07, + 0x05, 0xFF, 0x0F, 0x80, 0x69, 0x01, 0x00, 0xC8, + 0x00, 0x00, 0xFC, 0x1A, 0x83, 0x0C, 0x03, 0x60, + 0x30, 0xC1, 0x1A, 0x00, 0x00, 0x06, 0xBF, 0x27}, + {0x24, 0xBF, 0x54, 0x20, 0x02, 0x01, 0x18, 0x00, + 0x90, 0x50, 0xB8, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0x00, 0x02, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, + 0x00, 0x40, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF}, + {0x06, 0x00, 0x00, 0x04, 0x00, 0x80, 0xFC, 0x07, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xCF, 0xCE, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xB9, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x7E, 0xFF, 0xFF, 0xFF, 0x80, 0xF9, 0x07, + 0x80, 0x3C, 0x61, 0x00, 0x30, 0x01, 0x06, 0x10, + 0x1C, 0x00, 0x0E, 0x70, 0x0A, 0x81, 0x08, 0xFC}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0xF8, 0xE7, 0xF0, 0x3F, 0x1A, 0xF9, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x01, 0x00}, + {0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x3F, 0xC0, 0xFF, 0x0F, 0xFF, 0x01, 0xFF, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_emoji(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_epres.c b/lib/unicode/prop/uprop_is_epres.c index cfd4b4b..eff079f 100644 --- a/lib/unicode/prop/uprop_is_epres.c +++ b/lib/unicode/prop/uprop_is_epres.c @@ -1,102 +1,240 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00231A), RUNE_C(0x00231B)}, - {RUNE_C(0x0023E9), RUNE_C(0x0023EC)}, - {RUNE_C(0x0023F0), RUNE_C(0x0023F0)}, - {RUNE_C(0x0023F3), RUNE_C(0x0023F3)}, - {RUNE_C(0x0025FD), RUNE_C(0x0025FE)}, - {RUNE_C(0x002614), RUNE_C(0x002615)}, - {RUNE_C(0x002648), RUNE_C(0x002653)}, - {RUNE_C(0x00267F), RUNE_C(0x00267F)}, - {RUNE_C(0x002693), RUNE_C(0x002693)}, - {RUNE_C(0x0026A1), RUNE_C(0x0026A1)}, - {RUNE_C(0x0026AA), RUNE_C(0x0026AB)}, - {RUNE_C(0x0026BD), RUNE_C(0x0026BE)}, - {RUNE_C(0x0026C4), RUNE_C(0x0026C5)}, - {RUNE_C(0x0026CE), RUNE_C(0x0026CE)}, - {RUNE_C(0x0026D4), RUNE_C(0x0026D4)}, - {RUNE_C(0x0026EA), RUNE_C(0x0026EA)}, - {RUNE_C(0x0026F2), RUNE_C(0x0026F3)}, - {RUNE_C(0x0026F5), RUNE_C(0x0026F5)}, - {RUNE_C(0x0026FA), RUNE_C(0x0026FA)}, - {RUNE_C(0x0026FD), RUNE_C(0x0026FD)}, - {RUNE_C(0x002705), RUNE_C(0x002705)}, - {RUNE_C(0x00270A), RUNE_C(0x00270B)}, - {RUNE_C(0x002728), RUNE_C(0x002728)}, - {RUNE_C(0x00274C), RUNE_C(0x00274C)}, - {RUNE_C(0x00274E), RUNE_C(0x00274E)}, - {RUNE_C(0x002753), RUNE_C(0x002755)}, - {RUNE_C(0x002757), RUNE_C(0x002757)}, - {RUNE_C(0x002795), RUNE_C(0x002797)}, - {RUNE_C(0x0027B0), RUNE_C(0x0027B0)}, - {RUNE_C(0x0027BF), RUNE_C(0x0027BF)}, - {RUNE_C(0x002B1B), RUNE_C(0x002B1C)}, - {RUNE_C(0x002B50), RUNE_C(0x002B50)}, - {RUNE_C(0x002B55), RUNE_C(0x002B55)}, - {RUNE_C(0x01F004), RUNE_C(0x01F004)}, - {RUNE_C(0x01F0CF), RUNE_C(0x01F0CF)}, - {RUNE_C(0x01F18E), RUNE_C(0x01F18E)}, - {RUNE_C(0x01F191), RUNE_C(0x01F19A)}, - {RUNE_C(0x01F1E6), RUNE_C(0x01F1FF)}, - {RUNE_C(0x01F201), RUNE_C(0x01F201)}, - {RUNE_C(0x01F21A), RUNE_C(0x01F21A)}, - {RUNE_C(0x01F22F), RUNE_C(0x01F22F)}, - {RUNE_C(0x01F232), RUNE_C(0x01F236)}, - {RUNE_C(0x01F238), RUNE_C(0x01F23A)}, - {RUNE_C(0x01F250), RUNE_C(0x01F251)}, - {RUNE_C(0x01F300), RUNE_C(0x01F320)}, - {RUNE_C(0x01F32D), RUNE_C(0x01F335)}, - {RUNE_C(0x01F337), RUNE_C(0x01F37C)}, - {RUNE_C(0x01F37E), RUNE_C(0x01F393)}, - {RUNE_C(0x01F3A0), RUNE_C(0x01F3CA)}, - {RUNE_C(0x01F3CF), RUNE_C(0x01F3D3)}, - {RUNE_C(0x01F3E0), RUNE_C(0x01F3F0)}, - {RUNE_C(0x01F3F4), RUNE_C(0x01F3F4)}, - {RUNE_C(0x01F3F8), RUNE_C(0x01F43E)}, - {RUNE_C(0x01F440), RUNE_C(0x01F440)}, - {RUNE_C(0x01F442), RUNE_C(0x01F4FC)}, - {RUNE_C(0x01F4FF), RUNE_C(0x01F53D)}, - {RUNE_C(0x01F54B), RUNE_C(0x01F54E)}, - {RUNE_C(0x01F550), RUNE_C(0x01F567)}, - {RUNE_C(0x01F57A), RUNE_C(0x01F57A)}, - {RUNE_C(0x01F595), RUNE_C(0x01F596)}, - {RUNE_C(0x01F5A4), RUNE_C(0x01F5A4)}, - {RUNE_C(0x01F5FB), RUNE_C(0x01F64F)}, - {RUNE_C(0x01F680), RUNE_C(0x01F6C5)}, - {RUNE_C(0x01F6CC), RUNE_C(0x01F6CC)}, - {RUNE_C(0x01F6D0), RUNE_C(0x01F6D2)}, - {RUNE_C(0x01F6D5), RUNE_C(0x01F6D7)}, - {RUNE_C(0x01F6DC), RUNE_C(0x01F6DF)}, - {RUNE_C(0x01F6EB), RUNE_C(0x01F6EC)}, - {RUNE_C(0x01F6F4), RUNE_C(0x01F6FC)}, - {RUNE_C(0x01F7E0), RUNE_C(0x01F7EB)}, - {RUNE_C(0x01F7F0), RUNE_C(0x01F7F0)}, - {RUNE_C(0x01F90C), RUNE_C(0x01F93A)}, - {RUNE_C(0x01F93C), RUNE_C(0x01F945)}, - {RUNE_C(0x01F947), RUNE_C(0x01F9FF)}, - {RUNE_C(0x01FA70), RUNE_C(0x01FA7C)}, - {RUNE_C(0x01FA80), RUNE_C(0x01FA88)}, - {RUNE_C(0x01FA90), RUNE_C(0x01FABD)}, - {RUNE_C(0x01FABF), RUNE_C(0x01FAC5)}, - {RUNE_C(0x01FACE), RUNE_C(0x01FADB)}, - {RUNE_C(0x01FAE0), RUNE_C(0x01FAE8)}, - {RUNE_C(0x01FAF0), RUNE_C(0x01FAF8)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 2, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x09, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60}, + {0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x00, 0x00, 0x08, 0x00, 0x02, 0x0C, 0x00, 0x60, + 0x30, 0x40, 0x10, 0x00, 0x00, 0x04, 0x2C, 0x24, + 0x20, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x50, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF}, + {0x02, 0x00, 0x00, 0x04, 0x00, 0x80, 0x7C, 0x07, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xE0, 0xBF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x87, 0x0F, 0x00, 0xFF, 0xFF, 0x11, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x78, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x60, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x10, 0xE7, 0xF0, 0x00, 0x18, 0xF0, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x1F, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x3F, 0xC0, 0xFF, 0x0F, 0xFF, 0x01, 0xFF, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_epres(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_ext.c b/lib/unicode/prop/uprop_is_ext.c index b779cb7..c323328 100644 --- a/lib/unicode/prop/uprop_is_ext.c +++ b/lib/unicode/prop/uprop_is_ext.c @@ -1,60 +1,384 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 5, 1, 1, 6, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, 8, 1, 9, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 11, 1, 1, 1, 1, 1, 12, 1, 1, 13, 14, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, + 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 17, 1, 18, 1, 1, 1, 1, 19, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 1, 21, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 22, 1, 1, 1, 1, 1, 1, 1, 23, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x0002D0), RUNE_C(0x0002D1)}, - {RUNE_C(0x000640), RUNE_C(0x000640)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x000B55), RUNE_C(0x000B55)}, - {RUNE_C(0x000E46), RUNE_C(0x000E46)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x00180A), RUNE_C(0x00180A)}, - {RUNE_C(0x001843), RUNE_C(0x001843)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001C36), RUNE_C(0x001C36)}, - {RUNE_C(0x001C7B), RUNE_C(0x001C7B)}, - {RUNE_C(0x003005), RUNE_C(0x003005)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x00309D), RUNE_C(0x00309E)}, - {RUNE_C(0x0030FC), RUNE_C(0x0030FE)}, - {RUNE_C(0x00A015), RUNE_C(0x00A015)}, - {RUNE_C(0x00A60C), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9CF)}, - {RUNE_C(0x00A9E6), RUNE_C(0x00A9E6)}, - {RUNE_C(0x00AA70), RUNE_C(0x00AA70)}, - {RUNE_C(0x00AADD), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAF3), RUNE_C(0x00AAF4)}, - {RUNE_C(0x00FF70), RUNE_C(0x00FF70)}, - {RUNE_C(0x010781), RUNE_C(0x010782)}, - {RUNE_C(0x01135D), RUNE_C(0x01135D)}, - {RUNE_C(0x0115C6), RUNE_C(0x0115C8)}, - {RUNE_C(0x011A98), RUNE_C(0x011A98)}, - {RUNE_C(0x016B42), RUNE_C(0x016B43)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE3)}, - {RUNE_C(0x01E13C), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E944), RUNE_C(0x01E946)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70}, + {0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_ext(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_extpict.c b/lib/unicode/prop/uprop_is_extpict.c index 5334703..9c20bec 100644 --- a/lib/unicode/prop/uprop_is_extpict.c +++ b/lib/unicode/prop/uprop_is_extpict.c @@ -1,104 +1,380 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 3, 1, 4, 5, 6, 7, 8, 1, 9, 1, 10, 1, 1, 1, 1, + 11, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 13, 14, 15, 16, 13, 17, 18, 19, 20, 21, 13, 1, 13, 13, 13, 22, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00203C), RUNE_C(0x00203C)}, - {RUNE_C(0x002049), RUNE_C(0x002049)}, - {RUNE_C(0x002122), RUNE_C(0x002122)}, - {RUNE_C(0x002139), RUNE_C(0x002139)}, - {RUNE_C(0x002194), RUNE_C(0x002199)}, - {RUNE_C(0x0021A9), RUNE_C(0x0021AA)}, - {RUNE_C(0x00231A), RUNE_C(0x00231B)}, - {RUNE_C(0x002328), RUNE_C(0x002328)}, - {RUNE_C(0x002388), RUNE_C(0x002388)}, - {RUNE_C(0x0023CF), RUNE_C(0x0023CF)}, - {RUNE_C(0x0023E9), RUNE_C(0x0023F3)}, - {RUNE_C(0x0023F8), RUNE_C(0x0023FA)}, - {RUNE_C(0x0024C2), RUNE_C(0x0024C2)}, - {RUNE_C(0x0025AA), RUNE_C(0x0025AB)}, - {RUNE_C(0x0025B6), RUNE_C(0x0025B6)}, - {RUNE_C(0x0025C0), RUNE_C(0x0025C0)}, - {RUNE_C(0x0025FB), RUNE_C(0x0025FE)}, - {RUNE_C(0x002600), RUNE_C(0x002605)}, - {RUNE_C(0x002607), RUNE_C(0x002612)}, - {RUNE_C(0x002614), RUNE_C(0x002685)}, - {RUNE_C(0x002690), RUNE_C(0x002705)}, - {RUNE_C(0x002708), RUNE_C(0x002712)}, - {RUNE_C(0x002714), RUNE_C(0x002714)}, - {RUNE_C(0x002716), RUNE_C(0x002716)}, - {RUNE_C(0x00271D), RUNE_C(0x00271D)}, - {RUNE_C(0x002721), RUNE_C(0x002721)}, - {RUNE_C(0x002728), RUNE_C(0x002728)}, - {RUNE_C(0x002733), RUNE_C(0x002734)}, - {RUNE_C(0x002744), RUNE_C(0x002744)}, - {RUNE_C(0x002747), RUNE_C(0x002747)}, - {RUNE_C(0x00274C), RUNE_C(0x00274C)}, - {RUNE_C(0x00274E), RUNE_C(0x00274E)}, - {RUNE_C(0x002753), RUNE_C(0x002755)}, - {RUNE_C(0x002757), RUNE_C(0x002757)}, - {RUNE_C(0x002763), RUNE_C(0x002767)}, - {RUNE_C(0x002795), RUNE_C(0x002797)}, - {RUNE_C(0x0027A1), RUNE_C(0x0027A1)}, - {RUNE_C(0x0027B0), RUNE_C(0x0027B0)}, - {RUNE_C(0x0027BF), RUNE_C(0x0027BF)}, - {RUNE_C(0x002934), RUNE_C(0x002935)}, - {RUNE_C(0x002B05), RUNE_C(0x002B07)}, - {RUNE_C(0x002B1B), RUNE_C(0x002B1C)}, - {RUNE_C(0x002B50), RUNE_C(0x002B50)}, - {RUNE_C(0x002B55), RUNE_C(0x002B55)}, - {RUNE_C(0x003030), RUNE_C(0x003030)}, - {RUNE_C(0x00303D), RUNE_C(0x00303D)}, - {RUNE_C(0x003297), RUNE_C(0x003297)}, - {RUNE_C(0x003299), RUNE_C(0x003299)}, - {RUNE_C(0x01F000), RUNE_C(0x01F0FF)}, - {RUNE_C(0x01F10D), RUNE_C(0x01F10F)}, - {RUNE_C(0x01F12F), RUNE_C(0x01F12F)}, - {RUNE_C(0x01F16C), RUNE_C(0x01F171)}, - {RUNE_C(0x01F17E), RUNE_C(0x01F17F)}, - {RUNE_C(0x01F18E), RUNE_C(0x01F18E)}, - {RUNE_C(0x01F191), RUNE_C(0x01F19A)}, - {RUNE_C(0x01F1AD), RUNE_C(0x01F1E5)}, - {RUNE_C(0x01F201), RUNE_C(0x01F20F)}, - {RUNE_C(0x01F21A), RUNE_C(0x01F21A)}, - {RUNE_C(0x01F22F), RUNE_C(0x01F22F)}, - {RUNE_C(0x01F232), RUNE_C(0x01F23A)}, - {RUNE_C(0x01F23C), RUNE_C(0x01F23F)}, - {RUNE_C(0x01F249), RUNE_C(0x01F3FA)}, - {RUNE_C(0x01F400), RUNE_C(0x01F53D)}, - {RUNE_C(0x01F546), RUNE_C(0x01F64F)}, - {RUNE_C(0x01F680), RUNE_C(0x01F6FF)}, - {RUNE_C(0x01F774), RUNE_C(0x01F77F)}, - {RUNE_C(0x01F7D5), RUNE_C(0x01F7FF)}, - {RUNE_C(0x01F80C), RUNE_C(0x01F80F)}, - {RUNE_C(0x01F848), RUNE_C(0x01F84F)}, - {RUNE_C(0x01F85A), RUNE_C(0x01F85F)}, - {RUNE_C(0x01F888), RUNE_C(0x01F88F)}, - {RUNE_C(0x01F8AE), RUNE_C(0x01F8FF)}, - {RUNE_C(0x01F90C), RUNE_C(0x01F93A)}, - {RUNE_C(0x01F93C), RUNE_C(0x01F945)}, - {RUNE_C(0x01F947), RUNE_C(0x01FAFF)}, - {RUNE_C(0x01FC00), RUNE_C(0x01FFFD)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0x03, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xFE, 0x0F, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x40, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78}, + {0xBF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x3F, 0xFF, 0x57, 0x20, 0x02, 0x01, 0x18, 0x00, + 0x90, 0x50, 0xB8, 0x00, 0xF8, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0x00, 0x02, 0x00, 0x01, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0xE0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0xC0, + 0x00, 0x40, 0xFE, 0x07, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00}, + {0xFE, 0xFF, 0x00, 0x04, 0x00, 0x80, 0xFC, 0xF7, + 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_extpict(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_gr_base.c b/lib/unicode/prop/uprop_is_gr_base.c index 22666d6..8ad23b1 100644 --- a/lib/unicode/prop/uprop_is_gr_base.c +++ b/lib/unicode/prop/uprop_is_gr_base.c @@ -1,901 +1,984 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, - 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 2, 3, 4, 2, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 2, 2, 30, 31, 32, 33, 2, 2, 2, 2, 2, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 2, 47, 2, 2, 48, 49, + 50, 51, 2, 52, 2, 2, 2, 2, 53, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 54, 55, 2, 56, 57, 58, 59, 60, 2, 61, + 62, 63, 64, 65, 66, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 67, 2, 2, 68, 69, 2, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 79, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 2, 2, 81, 82, 83, 84, 2, 2, 2, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 80, 94, 95, 96, 2, 97, 98, 99, 2, 2, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 80, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 80, 124, 125, 80, 126, 127, 128, 129, 80, + 130, 131, 132, 133, 134, 135, 136, 80, 137, 138, 139, 140, 80, 141, 142, 143, + 2, 2, 2, 2, 2, 2, 2, 144, 145, 2, 146, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 147, + 2, 2, 2, 2, 2, 2, 2, 2, 148, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 2, 2, 2, 2, 149, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 2, 2, 2, 2, 150, 151, 152, 153, 80, 80, 80, 80, 154, 155, 156, 157, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 158, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 159, 160, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 161, + 2, 2, 162, 2, 2, 163, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 164, 165, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 166, 146, + 2, 167, 168, 169, 170, 171, 172, 80, 173, 174, 175, 2, 2, 176, 2, 177, + 2, 2, 2, 2, 178, 179, 80, 80, 80, 80, 80, 80, 80, 80, 180, 80, + 181, 80, 182, 80, 80, 183, 80, 80, 80, 184, 80, 80, 80, 80, 80, 185, + 2, 186, 187, 80, 80, 80, 80, 80, 188, 189, 190, 80, 191, 192, 80, 80, + 193, 194, 2, 195, 196, 80, 2, 2, 2, 2, 2, 2, 2, 197, 198, 199, + 200, 201, 2, 2, 202, 203, 2, 204, 80, 80, 80, 80, 80, 80, 80, 80, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 205, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 206, 2, + 207, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 208, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 209, 2, 2, 2, 2, 59, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 2, 2, 2, 2, 210, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 156, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 211, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0002FF)}, - {RUNE_C(0x000370), RUNE_C(0x000377)}, - {RUNE_C(0x00037A), RUNE_C(0x00037F)}, - {RUNE_C(0x000384), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x000482)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000559), RUNE_C(0x00058A)}, - {RUNE_C(0x00058D), RUNE_C(0x00058F)}, - {RUNE_C(0x0005BE), RUNE_C(0x0005BE)}, - {RUNE_C(0x0005C0), RUNE_C(0x0005C0)}, - {RUNE_C(0x0005C3), RUNE_C(0x0005C3)}, - {RUNE_C(0x0005C6), RUNE_C(0x0005C6)}, - {RUNE_C(0x0005D0), RUNE_C(0x0005EA)}, - {RUNE_C(0x0005EF), RUNE_C(0x0005F4)}, - {RUNE_C(0x000606), RUNE_C(0x00060F)}, - {RUNE_C(0x00061B), RUNE_C(0x00061B)}, - {RUNE_C(0x00061D), RUNE_C(0x00064A)}, - {RUNE_C(0x000660), RUNE_C(0x00066F)}, - {RUNE_C(0x000671), RUNE_C(0x0006D5)}, - {RUNE_C(0x0006DE), RUNE_C(0x0006DE)}, - {RUNE_C(0x0006E5), RUNE_C(0x0006E6)}, - {RUNE_C(0x0006E9), RUNE_C(0x0006E9)}, - {RUNE_C(0x0006EE), RUNE_C(0x00070D)}, - {RUNE_C(0x000710), RUNE_C(0x000710)}, - {RUNE_C(0x000712), RUNE_C(0x00072F)}, - {RUNE_C(0x00074D), RUNE_C(0x0007A5)}, - {RUNE_C(0x0007B1), RUNE_C(0x0007B1)}, - {RUNE_C(0x0007C0), RUNE_C(0x0007EA)}, - {RUNE_C(0x0007F4), RUNE_C(0x0007FA)}, - {RUNE_C(0x0007FE), RUNE_C(0x000815)}, - {RUNE_C(0x00081A), RUNE_C(0x00081A)}, - {RUNE_C(0x000824), RUNE_C(0x000824)}, - {RUNE_C(0x000828), RUNE_C(0x000828)}, - {RUNE_C(0x000830), RUNE_C(0x00083E)}, - {RUNE_C(0x000840), RUNE_C(0x000858)}, - {RUNE_C(0x00085E), RUNE_C(0x00085E)}, - {RUNE_C(0x000860), RUNE_C(0x00086A)}, - {RUNE_C(0x000870), RUNE_C(0x00088E)}, - {RUNE_C(0x0008A0), RUNE_C(0x0008C9)}, - {RUNE_C(0x000903), RUNE_C(0x000939)}, - {RUNE_C(0x00093B), RUNE_C(0x00093B)}, - {RUNE_C(0x00093D), RUNE_C(0x000940)}, - {RUNE_C(0x000949), RUNE_C(0x00094C)}, - {RUNE_C(0x00094E), RUNE_C(0x000950)}, - {RUNE_C(0x000958), RUNE_C(0x000961)}, - {RUNE_C(0x000964), RUNE_C(0x000980)}, - {RUNE_C(0x000982), RUNE_C(0x000983)}, - {RUNE_C(0x000985), RUNE_C(0x00098C)}, - {RUNE_C(0x00098F), RUNE_C(0x000990)}, - {RUNE_C(0x000993), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BD), RUNE_C(0x0009BD)}, - {RUNE_C(0x0009BF), RUNE_C(0x0009C0)}, - {RUNE_C(0x0009C7), RUNE_C(0x0009C8)}, - {RUNE_C(0x0009CB), RUNE_C(0x0009CC)}, - {RUNE_C(0x0009CE), RUNE_C(0x0009CE)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009E1)}, - {RUNE_C(0x0009E6), RUNE_C(0x0009FD)}, - {RUNE_C(0x000A03), RUNE_C(0x000A03)}, - {RUNE_C(0x000A05), RUNE_C(0x000A0A)}, - {RUNE_C(0x000A0F), RUNE_C(0x000A10)}, - {RUNE_C(0x000A13), RUNE_C(0x000A28)}, - {RUNE_C(0x000A2A), RUNE_C(0x000A30)}, - {RUNE_C(0x000A32), RUNE_C(0x000A33)}, - {RUNE_C(0x000A35), RUNE_C(0x000A36)}, - {RUNE_C(0x000A38), RUNE_C(0x000A39)}, - {RUNE_C(0x000A3E), RUNE_C(0x000A40)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5C)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000A66), RUNE_C(0x000A6F)}, - {RUNE_C(0x000A72), RUNE_C(0x000A74)}, - {RUNE_C(0x000A76), RUNE_C(0x000A76)}, - {RUNE_C(0x000A83), RUNE_C(0x000A83)}, - {RUNE_C(0x000A85), RUNE_C(0x000A8D)}, - {RUNE_C(0x000A8F), RUNE_C(0x000A91)}, - {RUNE_C(0x000A93), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABD), RUNE_C(0x000AC0)}, - {RUNE_C(0x000AC9), RUNE_C(0x000AC9)}, - {RUNE_C(0x000ACB), RUNE_C(0x000ACC)}, - {RUNE_C(0x000AD0), RUNE_C(0x000AD0)}, - {RUNE_C(0x000AE0), RUNE_C(0x000AE1)}, - {RUNE_C(0x000AE6), RUNE_C(0x000AF1)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AF9)}, - {RUNE_C(0x000B02), RUNE_C(0x000B03)}, - {RUNE_C(0x000B05), RUNE_C(0x000B0C)}, - {RUNE_C(0x000B0F), RUNE_C(0x000B10)}, - {RUNE_C(0x000B13), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3D), RUNE_C(0x000B3D)}, - {RUNE_C(0x000B40), RUNE_C(0x000B40)}, - {RUNE_C(0x000B47), RUNE_C(0x000B48)}, - {RUNE_C(0x000B4B), RUNE_C(0x000B4C)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B61)}, - {RUNE_C(0x000B66), RUNE_C(0x000B77)}, - {RUNE_C(0x000B83), RUNE_C(0x000B83)}, - {RUNE_C(0x000B85), RUNE_C(0x000B8A)}, - {RUNE_C(0x000B8E), RUNE_C(0x000B90)}, - {RUNE_C(0x000B92), RUNE_C(0x000B95)}, - {RUNE_C(0x000B99), RUNE_C(0x000B9A)}, - {RUNE_C(0x000B9C), RUNE_C(0x000B9C)}, - {RUNE_C(0x000B9E), RUNE_C(0x000B9F)}, - {RUNE_C(0x000BA3), RUNE_C(0x000BA4)}, - {RUNE_C(0x000BA8), RUNE_C(0x000BAA)}, - {RUNE_C(0x000BAE), RUNE_C(0x000BB9)}, - {RUNE_C(0x000BBF), RUNE_C(0x000BBF)}, - {RUNE_C(0x000BC1), RUNE_C(0x000BC2)}, - {RUNE_C(0x000BC6), RUNE_C(0x000BC8)}, - {RUNE_C(0x000BCA), RUNE_C(0x000BCC)}, - {RUNE_C(0x000BD0), RUNE_C(0x000BD0)}, - {RUNE_C(0x000BE6), RUNE_C(0x000BFA)}, - {RUNE_C(0x000C01), RUNE_C(0x000C03)}, - {RUNE_C(0x000C05), RUNE_C(0x000C0C)}, - {RUNE_C(0x000C0E), RUNE_C(0x000C10)}, - {RUNE_C(0x000C12), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3D), RUNE_C(0x000C3D)}, - {RUNE_C(0x000C41), RUNE_C(0x000C44)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000C5D), RUNE_C(0x000C5D)}, - {RUNE_C(0x000C60), RUNE_C(0x000C61)}, - {RUNE_C(0x000C66), RUNE_C(0x000C6F)}, - {RUNE_C(0x000C77), RUNE_C(0x000C80)}, - {RUNE_C(0x000C82), RUNE_C(0x000C8C)}, - {RUNE_C(0x000C8E), RUNE_C(0x000C90)}, - {RUNE_C(0x000C92), RUNE_C(0x000CA8)}, - {RUNE_C(0x000CAA), RUNE_C(0x000CB3)}, - {RUNE_C(0x000CB5), RUNE_C(0x000CB9)}, - {RUNE_C(0x000CBD), RUNE_C(0x000CBE)}, - {RUNE_C(0x000CC0), RUNE_C(0x000CC1)}, - {RUNE_C(0x000CC3), RUNE_C(0x000CC4)}, - {RUNE_C(0x000CC7), RUNE_C(0x000CC8)}, - {RUNE_C(0x000CCA), RUNE_C(0x000CCB)}, - {RUNE_C(0x000CDD), RUNE_C(0x000CDE)}, - {RUNE_C(0x000CE0), RUNE_C(0x000CE1)}, - {RUNE_C(0x000CE6), RUNE_C(0x000CEF)}, - {RUNE_C(0x000CF1), RUNE_C(0x000CF3)}, - {RUNE_C(0x000D02), RUNE_C(0x000D0C)}, - {RUNE_C(0x000D0E), RUNE_C(0x000D10)}, - {RUNE_C(0x000D12), RUNE_C(0x000D3A)}, - {RUNE_C(0x000D3D), RUNE_C(0x000D3D)}, - {RUNE_C(0x000D3F), RUNE_C(0x000D40)}, - {RUNE_C(0x000D46), RUNE_C(0x000D48)}, - {RUNE_C(0x000D4A), RUNE_C(0x000D4C)}, - {RUNE_C(0x000D4E), RUNE_C(0x000D4F)}, - {RUNE_C(0x000D54), RUNE_C(0x000D56)}, - {RUNE_C(0x000D58), RUNE_C(0x000D61)}, - {RUNE_C(0x000D66), RUNE_C(0x000D7F)}, - {RUNE_C(0x000D82), RUNE_C(0x000D83)}, - {RUNE_C(0x000D85), RUNE_C(0x000D96)}, - {RUNE_C(0x000D9A), RUNE_C(0x000DB1)}, - {RUNE_C(0x000DB3), RUNE_C(0x000DBB)}, - {RUNE_C(0x000DBD), RUNE_C(0x000DBD)}, - {RUNE_C(0x000DC0), RUNE_C(0x000DC6)}, - {RUNE_C(0x000DD0), RUNE_C(0x000DD1)}, - {RUNE_C(0x000DD8), RUNE_C(0x000DDE)}, - {RUNE_C(0x000DE6), RUNE_C(0x000DEF)}, - {RUNE_C(0x000DF2), RUNE_C(0x000DF4)}, - {RUNE_C(0x000E01), RUNE_C(0x000E30)}, - {RUNE_C(0x000E32), RUNE_C(0x000E33)}, - {RUNE_C(0x000E3F), RUNE_C(0x000E46)}, - {RUNE_C(0x000E4F), RUNE_C(0x000E5B)}, - {RUNE_C(0x000E81), RUNE_C(0x000E82)}, - {RUNE_C(0x000E84), RUNE_C(0x000E84)}, - {RUNE_C(0x000E86), RUNE_C(0x000E8A)}, - {RUNE_C(0x000E8C), RUNE_C(0x000EA3)}, - {RUNE_C(0x000EA5), RUNE_C(0x000EA5)}, - {RUNE_C(0x000EA7), RUNE_C(0x000EB0)}, - {RUNE_C(0x000EB2), RUNE_C(0x000EB3)}, - {RUNE_C(0x000EBD), RUNE_C(0x000EBD)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000ED0), RUNE_C(0x000ED9)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDF)}, - {RUNE_C(0x000F00), RUNE_C(0x000F17)}, - {RUNE_C(0x000F1A), RUNE_C(0x000F34)}, - {RUNE_C(0x000F36), RUNE_C(0x000F36)}, - {RUNE_C(0x000F38), RUNE_C(0x000F38)}, - {RUNE_C(0x000F3A), RUNE_C(0x000F47)}, - {RUNE_C(0x000F49), RUNE_C(0x000F6C)}, - {RUNE_C(0x000F7F), RUNE_C(0x000F7F)}, - {RUNE_C(0x000F85), RUNE_C(0x000F85)}, - {RUNE_C(0x000F88), RUNE_C(0x000F8C)}, - {RUNE_C(0x000FBE), RUNE_C(0x000FC5)}, - {RUNE_C(0x000FC7), RUNE_C(0x000FCC)}, - {RUNE_C(0x000FCE), RUNE_C(0x000FDA)}, - {RUNE_C(0x001000), RUNE_C(0x00102C)}, - {RUNE_C(0x001031), RUNE_C(0x001031)}, - {RUNE_C(0x001038), RUNE_C(0x001038)}, - {RUNE_C(0x00103B), RUNE_C(0x00103C)}, - {RUNE_C(0x00103F), RUNE_C(0x001057)}, - {RUNE_C(0x00105A), RUNE_C(0x00105D)}, - {RUNE_C(0x001061), RUNE_C(0x001070)}, - {RUNE_C(0x001075), RUNE_C(0x001081)}, - {RUNE_C(0x001083), RUNE_C(0x001084)}, - {RUNE_C(0x001087), RUNE_C(0x00108C)}, - {RUNE_C(0x00108E), RUNE_C(0x00109C)}, - {RUNE_C(0x00109E), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x001248)}, - {RUNE_C(0x00124A), RUNE_C(0x00124D)}, - {RUNE_C(0x001250), RUNE_C(0x001256)}, - {RUNE_C(0x001258), RUNE_C(0x001258)}, - {RUNE_C(0x00125A), RUNE_C(0x00125D)}, - {RUNE_C(0x001260), RUNE_C(0x001288)}, - {RUNE_C(0x00128A), RUNE_C(0x00128D)}, - {RUNE_C(0x001290), RUNE_C(0x0012B0)}, - {RUNE_C(0x0012B2), RUNE_C(0x0012B5)}, - {RUNE_C(0x0012B8), RUNE_C(0x0012BE)}, - {RUNE_C(0x0012C0), RUNE_C(0x0012C0)}, - {RUNE_C(0x0012C2), RUNE_C(0x0012C5)}, - {RUNE_C(0x0012C8), RUNE_C(0x0012D6)}, - {RUNE_C(0x0012D8), RUNE_C(0x001310)}, - {RUNE_C(0x001312), RUNE_C(0x001315)}, - {RUNE_C(0x001318), RUNE_C(0x00135A)}, - {RUNE_C(0x001360), RUNE_C(0x00137C)}, - {RUNE_C(0x001380), RUNE_C(0x001399)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001400), RUNE_C(0x00169C)}, - {RUNE_C(0x0016A0), RUNE_C(0x0016F8)}, - {RUNE_C(0x001700), RUNE_C(0x001711)}, - {RUNE_C(0x001715), RUNE_C(0x001715)}, - {RUNE_C(0x00171F), RUNE_C(0x001731)}, - {RUNE_C(0x001734), RUNE_C(0x001736)}, - {RUNE_C(0x001740), RUNE_C(0x001751)}, - {RUNE_C(0x001760), RUNE_C(0x00176C)}, - {RUNE_C(0x00176E), RUNE_C(0x001770)}, - {RUNE_C(0x001780), RUNE_C(0x0017B3)}, - {RUNE_C(0x0017B6), RUNE_C(0x0017B6)}, - {RUNE_C(0x0017BE), RUNE_C(0x0017C5)}, - {RUNE_C(0x0017C7), RUNE_C(0x0017C8)}, - {RUNE_C(0x0017D4), RUNE_C(0x0017DC)}, - {RUNE_C(0x0017E0), RUNE_C(0x0017E9)}, - {RUNE_C(0x0017F0), RUNE_C(0x0017F9)}, - {RUNE_C(0x001800), RUNE_C(0x00180A)}, - {RUNE_C(0x001810), RUNE_C(0x001819)}, - {RUNE_C(0x001820), RUNE_C(0x001878)}, - {RUNE_C(0x001880), RUNE_C(0x001884)}, - {RUNE_C(0x001887), RUNE_C(0x0018A8)}, - {RUNE_C(0x0018AA), RUNE_C(0x0018AA)}, - {RUNE_C(0x0018B0), RUNE_C(0x0018F5)}, - {RUNE_C(0x001900), RUNE_C(0x00191E)}, - {RUNE_C(0x001923), RUNE_C(0x001926)}, - {RUNE_C(0x001929), RUNE_C(0x00192B)}, - {RUNE_C(0x001930), RUNE_C(0x001931)}, - {RUNE_C(0x001933), RUNE_C(0x001938)}, - {RUNE_C(0x001940), RUNE_C(0x001940)}, - {RUNE_C(0x001944), RUNE_C(0x00196D)}, - {RUNE_C(0x001970), RUNE_C(0x001974)}, - {RUNE_C(0x001980), RUNE_C(0x0019AB)}, - {RUNE_C(0x0019B0), RUNE_C(0x0019C9)}, - {RUNE_C(0x0019D0), RUNE_C(0x0019DA)}, - {RUNE_C(0x0019DE), RUNE_C(0x001A16)}, - {RUNE_C(0x001A19), RUNE_C(0x001A1A)}, - {RUNE_C(0x001A1E), RUNE_C(0x001A55)}, - {RUNE_C(0x001A57), RUNE_C(0x001A57)}, - {RUNE_C(0x001A61), RUNE_C(0x001A61)}, - {RUNE_C(0x001A63), RUNE_C(0x001A64)}, - {RUNE_C(0x001A6D), RUNE_C(0x001A72)}, - {RUNE_C(0x001A80), RUNE_C(0x001A89)}, - {RUNE_C(0x001A90), RUNE_C(0x001A99)}, - {RUNE_C(0x001AA0), RUNE_C(0x001AAD)}, - {RUNE_C(0x001B04), RUNE_C(0x001B33)}, - {RUNE_C(0x001B3B), RUNE_C(0x001B3B)}, - {RUNE_C(0x001B3D), RUNE_C(0x001B41)}, - {RUNE_C(0x001B43), RUNE_C(0x001B4C)}, - {RUNE_C(0x001B50), RUNE_C(0x001B6A)}, - {RUNE_C(0x001B74), RUNE_C(0x001B7E)}, - {RUNE_C(0x001B82), RUNE_C(0x001BA1)}, - {RUNE_C(0x001BA6), RUNE_C(0x001BA7)}, - {RUNE_C(0x001BAA), RUNE_C(0x001BAA)}, - {RUNE_C(0x001BAE), RUNE_C(0x001BE5)}, - {RUNE_C(0x001BE7), RUNE_C(0x001BE7)}, - {RUNE_C(0x001BEA), RUNE_C(0x001BEC)}, - {RUNE_C(0x001BEE), RUNE_C(0x001BEE)}, - {RUNE_C(0x001BF2), RUNE_C(0x001BF3)}, - {RUNE_C(0x001BFC), RUNE_C(0x001C2B)}, - {RUNE_C(0x001C34), RUNE_C(0x001C35)}, - {RUNE_C(0x001C3B), RUNE_C(0x001C49)}, - {RUNE_C(0x001C4D), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CC7)}, - {RUNE_C(0x001CD3), RUNE_C(0x001CD3)}, - {RUNE_C(0x001CE1), RUNE_C(0x001CE1)}, - {RUNE_C(0x001CE9), RUNE_C(0x001CEC)}, - {RUNE_C(0x001CEE), RUNE_C(0x001CF3)}, - {RUNE_C(0x001CF5), RUNE_C(0x001CF7)}, - {RUNE_C(0x001CFA), RUNE_C(0x001CFA)}, - {RUNE_C(0x001D00), RUNE_C(0x001DBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FDD), RUNE_C(0x001FEF)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFE)}, - {RUNE_C(0x002000), RUNE_C(0x00200A)}, - {RUNE_C(0x002010), RUNE_C(0x002027)}, - {RUNE_C(0x00202F), RUNE_C(0x00205F)}, - {RUNE_C(0x002070), RUNE_C(0x002071)}, - {RUNE_C(0x002074), RUNE_C(0x00208E)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x0020A0), RUNE_C(0x0020C0)}, - {RUNE_C(0x002100), RUNE_C(0x00218B)}, - {RUNE_C(0x002190), RUNE_C(0x002426)}, - {RUNE_C(0x002440), RUNE_C(0x00244A)}, - {RUNE_C(0x002460), RUNE_C(0x002B73)}, - {RUNE_C(0x002B76), RUNE_C(0x002B95)}, - {RUNE_C(0x002B97), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF3)}, - {RUNE_C(0x002CF9), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x002D30), RUNE_C(0x002D67)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D70)}, - {RUNE_C(0x002D80), RUNE_C(0x002D96)}, - {RUNE_C(0x002DA0), RUNE_C(0x002DA6)}, - {RUNE_C(0x002DA8), RUNE_C(0x002DAE)}, - {RUNE_C(0x002DB0), RUNE_C(0x002DB6)}, - {RUNE_C(0x002DB8), RUNE_C(0x002DBE)}, - {RUNE_C(0x002DC0), RUNE_C(0x002DC6)}, - {RUNE_C(0x002DC8), RUNE_C(0x002DCE)}, - {RUNE_C(0x002DD0), RUNE_C(0x002DD6)}, - {RUNE_C(0x002DD8), RUNE_C(0x002DDE)}, - {RUNE_C(0x002E00), RUNE_C(0x002E5D)}, - {RUNE_C(0x002E80), RUNE_C(0x002E99)}, - {RUNE_C(0x002E9B), RUNE_C(0x002EF3)}, - {RUNE_C(0x002F00), RUNE_C(0x002FD5)}, - {RUNE_C(0x002FF0), RUNE_C(0x003029)}, - {RUNE_C(0x003030), RUNE_C(0x00303F)}, - {RUNE_C(0x003041), RUNE_C(0x003096)}, - {RUNE_C(0x00309B), RUNE_C(0x0030FF)}, - {RUNE_C(0x003105), RUNE_C(0x00312F)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x003190), RUNE_C(0x0031E3)}, - {RUNE_C(0x0031EF), RUNE_C(0x00321E)}, - {RUNE_C(0x003220), RUNE_C(0x00A48C)}, - {RUNE_C(0x00A490), RUNE_C(0x00A4C6)}, - {RUNE_C(0x00A4D0), RUNE_C(0x00A62B)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66E)}, - {RUNE_C(0x00A673), RUNE_C(0x00A673)}, - {RUNE_C(0x00A67E), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A6A0), RUNE_C(0x00A6EF)}, - {RUNE_C(0x00A6F2), RUNE_C(0x00A6F7)}, - {RUNE_C(0x00A700), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A801)}, - {RUNE_C(0x00A803), RUNE_C(0x00A805)}, - {RUNE_C(0x00A807), RUNE_C(0x00A80A)}, - {RUNE_C(0x00A80C), RUNE_C(0x00A824)}, - {RUNE_C(0x00A827), RUNE_C(0x00A82B)}, - {RUNE_C(0x00A830), RUNE_C(0x00A839)}, - {RUNE_C(0x00A840), RUNE_C(0x00A877)}, - {RUNE_C(0x00A880), RUNE_C(0x00A8C3)}, - {RUNE_C(0x00A8CE), RUNE_C(0x00A8D9)}, - {RUNE_C(0x00A8F2), RUNE_C(0x00A8FE)}, - {RUNE_C(0x00A900), RUNE_C(0x00A925)}, - {RUNE_C(0x00A92E), RUNE_C(0x00A946)}, - {RUNE_C(0x00A952), RUNE_C(0x00A953)}, - {RUNE_C(0x00A95F), RUNE_C(0x00A97C)}, - {RUNE_C(0x00A983), RUNE_C(0x00A9B2)}, - {RUNE_C(0x00A9B4), RUNE_C(0x00A9B5)}, - {RUNE_C(0x00A9BA), RUNE_C(0x00A9BB)}, - {RUNE_C(0x00A9BE), RUNE_C(0x00A9CD)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9D9)}, - {RUNE_C(0x00A9DE), RUNE_C(0x00A9E4)}, - {RUNE_C(0x00A9E6), RUNE_C(0x00A9FE)}, - {RUNE_C(0x00AA00), RUNE_C(0x00AA28)}, - {RUNE_C(0x00AA2F), RUNE_C(0x00AA30)}, - {RUNE_C(0x00AA33), RUNE_C(0x00AA34)}, - {RUNE_C(0x00AA40), RUNE_C(0x00AA42)}, - {RUNE_C(0x00AA44), RUNE_C(0x00AA4B)}, - {RUNE_C(0x00AA4D), RUNE_C(0x00AA4D)}, - {RUNE_C(0x00AA50), RUNE_C(0x00AA59)}, - {RUNE_C(0x00AA5C), RUNE_C(0x00AA7B)}, - {RUNE_C(0x00AA7D), RUNE_C(0x00AAAF)}, - {RUNE_C(0x00AAB1), RUNE_C(0x00AAB1)}, - {RUNE_C(0x00AAB5), RUNE_C(0x00AAB6)}, - {RUNE_C(0x00AAB9), RUNE_C(0x00AABD)}, - {RUNE_C(0x00AAC0), RUNE_C(0x00AAC0)}, - {RUNE_C(0x00AAC2), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AADB), RUNE_C(0x00AAEB)}, - {RUNE_C(0x00AAEE), RUNE_C(0x00AAF5)}, - {RUNE_C(0x00AB01), RUNE_C(0x00AB06)}, - {RUNE_C(0x00AB09), RUNE_C(0x00AB0E)}, - {RUNE_C(0x00AB11), RUNE_C(0x00AB16)}, - {RUNE_C(0x00AB20), RUNE_C(0x00AB26)}, - {RUNE_C(0x00AB28), RUNE_C(0x00AB2E)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB6B)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABE4)}, - {RUNE_C(0x00ABE6), RUNE_C(0x00ABE7)}, - {RUNE_C(0x00ABE9), RUNE_C(0x00ABEC)}, - {RUNE_C(0x00ABF0), RUNE_C(0x00ABF9)}, - {RUNE_C(0x00AC00), RUNE_C(0x00D7A3)}, - {RUNE_C(0x00D7B0), RUNE_C(0x00D7C6)}, - {RUNE_C(0x00D7CB), RUNE_C(0x00D7FB)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB1D)}, - {RUNE_C(0x00FB1F), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBC2)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDCF), RUNE_C(0x00FDCF)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDFF)}, - {RUNE_C(0x00FE10), RUNE_C(0x00FE19)}, - {RUNE_C(0x00FE30), RUNE_C(0x00FE52)}, - {RUNE_C(0x00FE54), RUNE_C(0x00FE66)}, - {RUNE_C(0x00FE68), RUNE_C(0x00FE6B)}, - {RUNE_C(0x00FE70), RUNE_C(0x00FE74)}, - {RUNE_C(0x00FE76), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FF01), RUNE_C(0x00FF9D)}, - {RUNE_C(0x00FFA0), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x00FFE0), RUNE_C(0x00FFE6)}, - {RUNE_C(0x00FFE8), RUNE_C(0x00FFEE)}, - {RUNE_C(0x00FFFC), RUNE_C(0x00FFFD)}, - {RUNE_C(0x010000), RUNE_C(0x01000B)}, - {RUNE_C(0x01000D), RUNE_C(0x010026)}, - {RUNE_C(0x010028), RUNE_C(0x01003A)}, - {RUNE_C(0x01003C), RUNE_C(0x01003D)}, - {RUNE_C(0x01003F), RUNE_C(0x01004D)}, - {RUNE_C(0x010050), RUNE_C(0x01005D)}, - {RUNE_C(0x010080), RUNE_C(0x0100FA)}, - {RUNE_C(0x010100), RUNE_C(0x010102)}, - {RUNE_C(0x010107), RUNE_C(0x010133)}, - {RUNE_C(0x010137), RUNE_C(0x01018E)}, - {RUNE_C(0x010190), RUNE_C(0x01019C)}, - {RUNE_C(0x0101A0), RUNE_C(0x0101A0)}, - {RUNE_C(0x0101D0), RUNE_C(0x0101FC)}, - {RUNE_C(0x010280), RUNE_C(0x01029C)}, - {RUNE_C(0x0102A0), RUNE_C(0x0102D0)}, - {RUNE_C(0x0102E1), RUNE_C(0x0102FB)}, - {RUNE_C(0x010300), RUNE_C(0x010323)}, - {RUNE_C(0x01032D), RUNE_C(0x01034A)}, - {RUNE_C(0x010350), RUNE_C(0x010375)}, - {RUNE_C(0x010380), RUNE_C(0x01039D)}, - {RUNE_C(0x01039F), RUNE_C(0x0103C3)}, - {RUNE_C(0x0103C8), RUNE_C(0x0103D5)}, - {RUNE_C(0x010400), RUNE_C(0x01049D)}, - {RUNE_C(0x0104A0), RUNE_C(0x0104A9)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010500), RUNE_C(0x010527)}, - {RUNE_C(0x010530), RUNE_C(0x010563)}, - {RUNE_C(0x01056F), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010600), RUNE_C(0x010736)}, - {RUNE_C(0x010740), RUNE_C(0x010755)}, - {RUNE_C(0x010760), RUNE_C(0x010767)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010800), RUNE_C(0x010805)}, - {RUNE_C(0x010808), RUNE_C(0x010808)}, - {RUNE_C(0x01080A), RUNE_C(0x010835)}, - {RUNE_C(0x010837), RUNE_C(0x010838)}, - {RUNE_C(0x01083C), RUNE_C(0x01083C)}, - {RUNE_C(0x01083F), RUNE_C(0x010855)}, - {RUNE_C(0x010857), RUNE_C(0x01089E)}, - {RUNE_C(0x0108A7), RUNE_C(0x0108AF)}, - {RUNE_C(0x0108E0), RUNE_C(0x0108F2)}, - {RUNE_C(0x0108F4), RUNE_C(0x0108F5)}, - {RUNE_C(0x0108FB), RUNE_C(0x01091B)}, - {RUNE_C(0x01091F), RUNE_C(0x010939)}, - {RUNE_C(0x01093F), RUNE_C(0x01093F)}, - {RUNE_C(0x010980), RUNE_C(0x0109B7)}, - {RUNE_C(0x0109BC), RUNE_C(0x0109CF)}, - {RUNE_C(0x0109D2), RUNE_C(0x010A00)}, - {RUNE_C(0x010A10), RUNE_C(0x010A13)}, - {RUNE_C(0x010A15), RUNE_C(0x010A17)}, - {RUNE_C(0x010A19), RUNE_C(0x010A35)}, - {RUNE_C(0x010A40), RUNE_C(0x010A48)}, - {RUNE_C(0x010A50), RUNE_C(0x010A58)}, - {RUNE_C(0x010A60), RUNE_C(0x010A9F)}, - {RUNE_C(0x010AC0), RUNE_C(0x010AE4)}, - {RUNE_C(0x010AEB), RUNE_C(0x010AF6)}, - {RUNE_C(0x010B00), RUNE_C(0x010B35)}, - {RUNE_C(0x010B39), RUNE_C(0x010B55)}, - {RUNE_C(0x010B58), RUNE_C(0x010B72)}, - {RUNE_C(0x010B78), RUNE_C(0x010B91)}, - {RUNE_C(0x010B99), RUNE_C(0x010B9C)}, - {RUNE_C(0x010BA9), RUNE_C(0x010BAF)}, - {RUNE_C(0x010C00), RUNE_C(0x010C48)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x010CFA), RUNE_C(0x010D23)}, - {RUNE_C(0x010D30), RUNE_C(0x010D39)}, - {RUNE_C(0x010E60), RUNE_C(0x010E7E)}, - {RUNE_C(0x010E80), RUNE_C(0x010EA9)}, - {RUNE_C(0x010EAD), RUNE_C(0x010EAD)}, - {RUNE_C(0x010EB0), RUNE_C(0x010EB1)}, - {RUNE_C(0x010F00), RUNE_C(0x010F27)}, - {RUNE_C(0x010F30), RUNE_C(0x010F45)}, - {RUNE_C(0x010F51), RUNE_C(0x010F59)}, - {RUNE_C(0x010F70), RUNE_C(0x010F81)}, - {RUNE_C(0x010F86), RUNE_C(0x010F89)}, - {RUNE_C(0x010FB0), RUNE_C(0x010FCB)}, - {RUNE_C(0x010FE0), RUNE_C(0x010FF6)}, - {RUNE_C(0x011000), RUNE_C(0x011000)}, - {RUNE_C(0x011002), RUNE_C(0x011037)}, - {RUNE_C(0x011047), RUNE_C(0x01104D)}, - {RUNE_C(0x011052), RUNE_C(0x01106F)}, - {RUNE_C(0x011071), RUNE_C(0x011072)}, - {RUNE_C(0x011075), RUNE_C(0x011075)}, - {RUNE_C(0x011082), RUNE_C(0x0110B2)}, - {RUNE_C(0x0110B7), RUNE_C(0x0110B8)}, - {RUNE_C(0x0110BB), RUNE_C(0x0110BC)}, - {RUNE_C(0x0110BE), RUNE_C(0x0110C1)}, - {RUNE_C(0x0110D0), RUNE_C(0x0110E8)}, - {RUNE_C(0x0110F0), RUNE_C(0x0110F9)}, - {RUNE_C(0x011103), RUNE_C(0x011126)}, - {RUNE_C(0x01112C), RUNE_C(0x01112C)}, - {RUNE_C(0x011136), RUNE_C(0x011147)}, - {RUNE_C(0x011150), RUNE_C(0x011172)}, - {RUNE_C(0x011174), RUNE_C(0x011176)}, - {RUNE_C(0x011182), RUNE_C(0x0111B5)}, - {RUNE_C(0x0111BF), RUNE_C(0x0111C8)}, - {RUNE_C(0x0111CD), RUNE_C(0x0111CE)}, - {RUNE_C(0x0111D0), RUNE_C(0x0111DF)}, - {RUNE_C(0x0111E1), RUNE_C(0x0111F4)}, - {RUNE_C(0x011200), RUNE_C(0x011211)}, - {RUNE_C(0x011213), RUNE_C(0x01122E)}, - {RUNE_C(0x011232), RUNE_C(0x011233)}, - {RUNE_C(0x011235), RUNE_C(0x011235)}, - {RUNE_C(0x011238), RUNE_C(0x01123D)}, - {RUNE_C(0x01123F), RUNE_C(0x011240)}, - {RUNE_C(0x011280), RUNE_C(0x011286)}, - {RUNE_C(0x011288), RUNE_C(0x011288)}, - {RUNE_C(0x01128A), RUNE_C(0x01128D)}, - {RUNE_C(0x01128F), RUNE_C(0x01129D)}, - {RUNE_C(0x01129F), RUNE_C(0x0112A9)}, - {RUNE_C(0x0112B0), RUNE_C(0x0112DE)}, - {RUNE_C(0x0112E0), RUNE_C(0x0112E2)}, - {RUNE_C(0x0112F0), RUNE_C(0x0112F9)}, - {RUNE_C(0x011302), RUNE_C(0x011303)}, - {RUNE_C(0x011305), RUNE_C(0x01130C)}, - {RUNE_C(0x01130F), RUNE_C(0x011310)}, - {RUNE_C(0x011313), RUNE_C(0x011328)}, - {RUNE_C(0x01132A), RUNE_C(0x011330)}, - {RUNE_C(0x011332), RUNE_C(0x011333)}, - {RUNE_C(0x011335), RUNE_C(0x011339)}, - {RUNE_C(0x01133D), RUNE_C(0x01133D)}, - {RUNE_C(0x01133F), RUNE_C(0x01133F)}, - {RUNE_C(0x011341), RUNE_C(0x011344)}, - {RUNE_C(0x011347), RUNE_C(0x011348)}, - {RUNE_C(0x01134B), RUNE_C(0x01134D)}, - {RUNE_C(0x011350), RUNE_C(0x011350)}, - {RUNE_C(0x01135D), RUNE_C(0x011363)}, - {RUNE_C(0x011400), RUNE_C(0x011437)}, - {RUNE_C(0x011440), RUNE_C(0x011441)}, - {RUNE_C(0x011445), RUNE_C(0x011445)}, - {RUNE_C(0x011447), RUNE_C(0x01145B)}, - {RUNE_C(0x01145D), RUNE_C(0x01145D)}, - {RUNE_C(0x01145F), RUNE_C(0x011461)}, - {RUNE_C(0x011480), RUNE_C(0x0114AF)}, - {RUNE_C(0x0114B1), RUNE_C(0x0114B2)}, - {RUNE_C(0x0114B9), RUNE_C(0x0114B9)}, - {RUNE_C(0x0114BB), RUNE_C(0x0114BC)}, - {RUNE_C(0x0114BE), RUNE_C(0x0114BE)}, - {RUNE_C(0x0114C1), RUNE_C(0x0114C1)}, - {RUNE_C(0x0114C4), RUNE_C(0x0114C7)}, - {RUNE_C(0x0114D0), RUNE_C(0x0114D9)}, - {RUNE_C(0x011580), RUNE_C(0x0115AE)}, - {RUNE_C(0x0115B0), RUNE_C(0x0115B1)}, - {RUNE_C(0x0115B8), RUNE_C(0x0115BB)}, - {RUNE_C(0x0115BE), RUNE_C(0x0115BE)}, - {RUNE_C(0x0115C1), RUNE_C(0x0115DB)}, - {RUNE_C(0x011600), RUNE_C(0x011632)}, - {RUNE_C(0x01163B), RUNE_C(0x01163C)}, - {RUNE_C(0x01163E), RUNE_C(0x01163E)}, - {RUNE_C(0x011641), RUNE_C(0x011644)}, - {RUNE_C(0x011650), RUNE_C(0x011659)}, - {RUNE_C(0x011660), RUNE_C(0x01166C)}, - {RUNE_C(0x011680), RUNE_C(0x0116AA)}, - {RUNE_C(0x0116AC), RUNE_C(0x0116AC)}, - {RUNE_C(0x0116AE), RUNE_C(0x0116AF)}, - {RUNE_C(0x0116B6), RUNE_C(0x0116B6)}, - {RUNE_C(0x0116B8), RUNE_C(0x0116B9)}, - {RUNE_C(0x0116C0), RUNE_C(0x0116C9)}, - {RUNE_C(0x011700), RUNE_C(0x01171A)}, - {RUNE_C(0x011720), RUNE_C(0x011721)}, - {RUNE_C(0x011726), RUNE_C(0x011726)}, - {RUNE_C(0x011730), RUNE_C(0x011746)}, - {RUNE_C(0x011800), RUNE_C(0x01182E)}, - {RUNE_C(0x011838), RUNE_C(0x011838)}, - {RUNE_C(0x01183B), RUNE_C(0x01183B)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118F2)}, - {RUNE_C(0x0118FF), RUNE_C(0x011906)}, - {RUNE_C(0x011909), RUNE_C(0x011909)}, - {RUNE_C(0x01190C), RUNE_C(0x011913)}, - {RUNE_C(0x011915), RUNE_C(0x011916)}, - {RUNE_C(0x011918), RUNE_C(0x01192F)}, - {RUNE_C(0x011931), RUNE_C(0x011935)}, - {RUNE_C(0x011937), RUNE_C(0x011938)}, - {RUNE_C(0x01193D), RUNE_C(0x01193D)}, - {RUNE_C(0x01193F), RUNE_C(0x011942)}, - {RUNE_C(0x011944), RUNE_C(0x011946)}, - {RUNE_C(0x011950), RUNE_C(0x011959)}, - {RUNE_C(0x0119A0), RUNE_C(0x0119A7)}, - {RUNE_C(0x0119AA), RUNE_C(0x0119D3)}, - {RUNE_C(0x0119DC), RUNE_C(0x0119DF)}, - {RUNE_C(0x0119E1), RUNE_C(0x0119E4)}, - {RUNE_C(0x011A00), RUNE_C(0x011A00)}, - {RUNE_C(0x011A0B), RUNE_C(0x011A32)}, - {RUNE_C(0x011A39), RUNE_C(0x011A3A)}, - {RUNE_C(0x011A3F), RUNE_C(0x011A46)}, - {RUNE_C(0x011A50), RUNE_C(0x011A50)}, - {RUNE_C(0x011A57), RUNE_C(0x011A58)}, - {RUNE_C(0x011A5C), RUNE_C(0x011A89)}, - {RUNE_C(0x011A97), RUNE_C(0x011A97)}, - {RUNE_C(0x011A9A), RUNE_C(0x011AA2)}, - {RUNE_C(0x011AB0), RUNE_C(0x011AF8)}, - {RUNE_C(0x011B00), RUNE_C(0x011B09)}, - {RUNE_C(0x011C00), RUNE_C(0x011C08)}, - {RUNE_C(0x011C0A), RUNE_C(0x011C2F)}, - {RUNE_C(0x011C3E), RUNE_C(0x011C3E)}, - {RUNE_C(0x011C40), RUNE_C(0x011C45)}, - {RUNE_C(0x011C50), RUNE_C(0x011C6C)}, - {RUNE_C(0x011C70), RUNE_C(0x011C8F)}, - {RUNE_C(0x011CA9), RUNE_C(0x011CA9)}, - {RUNE_C(0x011CB1), RUNE_C(0x011CB1)}, - {RUNE_C(0x011CB4), RUNE_C(0x011CB4)}, - {RUNE_C(0x011D00), RUNE_C(0x011D06)}, - {RUNE_C(0x011D08), RUNE_C(0x011D09)}, - {RUNE_C(0x011D0B), RUNE_C(0x011D30)}, - {RUNE_C(0x011D46), RUNE_C(0x011D46)}, - {RUNE_C(0x011D50), RUNE_C(0x011D59)}, - {RUNE_C(0x011D60), RUNE_C(0x011D65)}, - {RUNE_C(0x011D67), RUNE_C(0x011D68)}, - {RUNE_C(0x011D6A), RUNE_C(0x011D8E)}, - {RUNE_C(0x011D93), RUNE_C(0x011D94)}, - {RUNE_C(0x011D96), RUNE_C(0x011D96)}, - {RUNE_C(0x011D98), RUNE_C(0x011D98)}, - {RUNE_C(0x011DA0), RUNE_C(0x011DA9)}, - {RUNE_C(0x011EE0), RUNE_C(0x011EF2)}, - {RUNE_C(0x011EF5), RUNE_C(0x011EF8)}, - {RUNE_C(0x011F02), RUNE_C(0x011F10)}, - {RUNE_C(0x011F12), RUNE_C(0x011F35)}, - {RUNE_C(0x011F3E), RUNE_C(0x011F3F)}, - {RUNE_C(0x011F41), RUNE_C(0x011F41)}, - {RUNE_C(0x011F43), RUNE_C(0x011F59)}, - {RUNE_C(0x011FB0), RUNE_C(0x011FB0)}, - {RUNE_C(0x011FC0), RUNE_C(0x011FF1)}, - {RUNE_C(0x011FFF), RUNE_C(0x012399)}, - {RUNE_C(0x012400), RUNE_C(0x01246E)}, - {RUNE_C(0x012470), RUNE_C(0x012474)}, - {RUNE_C(0x012480), RUNE_C(0x012543)}, - {RUNE_C(0x012F90), RUNE_C(0x012FF2)}, - {RUNE_C(0x013000), RUNE_C(0x01342F)}, - {RUNE_C(0x013441), RUNE_C(0x013446)}, - {RUNE_C(0x014400), RUNE_C(0x014646)}, - {RUNE_C(0x016800), RUNE_C(0x016A38)}, - {RUNE_C(0x016A40), RUNE_C(0x016A5E)}, - {RUNE_C(0x016A60), RUNE_C(0x016A69)}, - {RUNE_C(0x016A6E), RUNE_C(0x016ABE)}, - {RUNE_C(0x016AC0), RUNE_C(0x016AC9)}, - {RUNE_C(0x016AD0), RUNE_C(0x016AED)}, - {RUNE_C(0x016AF5), RUNE_C(0x016AF5)}, - {RUNE_C(0x016B00), RUNE_C(0x016B2F)}, - {RUNE_C(0x016B37), RUNE_C(0x016B45)}, - {RUNE_C(0x016B50), RUNE_C(0x016B59)}, - {RUNE_C(0x016B5B), RUNE_C(0x016B61)}, - {RUNE_C(0x016B63), RUNE_C(0x016B77)}, - {RUNE_C(0x016B7D), RUNE_C(0x016B8F)}, - {RUNE_C(0x016E40), RUNE_C(0x016E9A)}, - {RUNE_C(0x016F00), RUNE_C(0x016F4A)}, - {RUNE_C(0x016F50), RUNE_C(0x016F87)}, - {RUNE_C(0x016F93), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE3)}, - {RUNE_C(0x016FF0), RUNE_C(0x016FF1)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01B000), RUNE_C(0x01B122)}, - {RUNE_C(0x01B132), RUNE_C(0x01B132)}, - {RUNE_C(0x01B150), RUNE_C(0x01B152)}, - {RUNE_C(0x01B155), RUNE_C(0x01B155)}, - {RUNE_C(0x01B164), RUNE_C(0x01B167)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x01BC00), RUNE_C(0x01BC6A)}, - {RUNE_C(0x01BC70), RUNE_C(0x01BC7C)}, - {RUNE_C(0x01BC80), RUNE_C(0x01BC88)}, - {RUNE_C(0x01BC90), RUNE_C(0x01BC99)}, - {RUNE_C(0x01BC9C), RUNE_C(0x01BC9C)}, - {RUNE_C(0x01BC9F), RUNE_C(0x01BC9F)}, - {RUNE_C(0x01CF50), RUNE_C(0x01CFC3)}, - {RUNE_C(0x01D000), RUNE_C(0x01D0F5)}, - {RUNE_C(0x01D100), RUNE_C(0x01D126)}, - {RUNE_C(0x01D129), RUNE_C(0x01D164)}, - {RUNE_C(0x01D166), RUNE_C(0x01D166)}, - {RUNE_C(0x01D16A), RUNE_C(0x01D16D)}, - {RUNE_C(0x01D183), RUNE_C(0x01D184)}, - {RUNE_C(0x01D18C), RUNE_C(0x01D1A9)}, - {RUNE_C(0x01D1AE), RUNE_C(0x01D1EA)}, - {RUNE_C(0x01D200), RUNE_C(0x01D241)}, - {RUNE_C(0x01D245), RUNE_C(0x01D245)}, - {RUNE_C(0x01D2C0), RUNE_C(0x01D2D3)}, - {RUNE_C(0x01D2E0), RUNE_C(0x01D2F3)}, - {RUNE_C(0x01D300), RUNE_C(0x01D356)}, - {RUNE_C(0x01D360), RUNE_C(0x01D378)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01D7CE), RUNE_C(0x01D9FF)}, - {RUNE_C(0x01DA37), RUNE_C(0x01DA3A)}, - {RUNE_C(0x01DA6D), RUNE_C(0x01DA74)}, - {RUNE_C(0x01DA76), RUNE_C(0x01DA83)}, - {RUNE_C(0x01DA85), RUNE_C(0x01DA8B)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E100), RUNE_C(0x01E12C)}, - {RUNE_C(0x01E137), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E140), RUNE_C(0x01E149)}, - {RUNE_C(0x01E14E), RUNE_C(0x01E14F)}, - {RUNE_C(0x01E290), RUNE_C(0x01E2AD)}, - {RUNE_C(0x01E2C0), RUNE_C(0x01E2EB)}, - {RUNE_C(0x01E2F0), RUNE_C(0x01E2F9)}, - {RUNE_C(0x01E2FF), RUNE_C(0x01E2FF)}, - {RUNE_C(0x01E4D0), RUNE_C(0x01E4EB)}, - {RUNE_C(0x01E4F0), RUNE_C(0x01E4F9)}, - {RUNE_C(0x01E7E0), RUNE_C(0x01E7E6)}, - {RUNE_C(0x01E7E8), RUNE_C(0x01E7EB)}, - {RUNE_C(0x01E7ED), RUNE_C(0x01E7EE)}, - {RUNE_C(0x01E7F0), RUNE_C(0x01E7FE)}, - {RUNE_C(0x01E800), RUNE_C(0x01E8C4)}, - {RUNE_C(0x01E8C7), RUNE_C(0x01E8CF)}, - {RUNE_C(0x01E900), RUNE_C(0x01E943)}, - {RUNE_C(0x01E94B), RUNE_C(0x01E94B)}, - {RUNE_C(0x01E950), RUNE_C(0x01E959)}, - {RUNE_C(0x01E95E), RUNE_C(0x01E95F)}, - {RUNE_C(0x01EC71), RUNE_C(0x01ECB4)}, - {RUNE_C(0x01ED01), RUNE_C(0x01ED3D)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x01EEF0), RUNE_C(0x01EEF1)}, - {RUNE_C(0x01F000), RUNE_C(0x01F02B)}, - {RUNE_C(0x01F030), RUNE_C(0x01F093)}, - {RUNE_C(0x01F0A0), RUNE_C(0x01F0AE)}, - {RUNE_C(0x01F0B1), RUNE_C(0x01F0BF)}, - {RUNE_C(0x01F0C1), RUNE_C(0x01F0CF)}, - {RUNE_C(0x01F0D1), RUNE_C(0x01F0F5)}, - {RUNE_C(0x01F100), RUNE_C(0x01F1AD)}, - {RUNE_C(0x01F1E6), RUNE_C(0x01F202)}, - {RUNE_C(0x01F210), RUNE_C(0x01F23B)}, - {RUNE_C(0x01F240), RUNE_C(0x01F248)}, - {RUNE_C(0x01F250), RUNE_C(0x01F251)}, - {RUNE_C(0x01F260), RUNE_C(0x01F265)}, - {RUNE_C(0x01F300), RUNE_C(0x01F6D7)}, - {RUNE_C(0x01F6DC), RUNE_C(0x01F6EC)}, - {RUNE_C(0x01F6F0), RUNE_C(0x01F6FC)}, - {RUNE_C(0x01F700), RUNE_C(0x01F776)}, - {RUNE_C(0x01F77B), RUNE_C(0x01F7D9)}, - {RUNE_C(0x01F7E0), RUNE_C(0x01F7EB)}, - {RUNE_C(0x01F7F0), RUNE_C(0x01F7F0)}, - {RUNE_C(0x01F800), RUNE_C(0x01F80B)}, - {RUNE_C(0x01F810), RUNE_C(0x01F847)}, - {RUNE_C(0x01F850), RUNE_C(0x01F859)}, - {RUNE_C(0x01F860), RUNE_C(0x01F887)}, - {RUNE_C(0x01F890), RUNE_C(0x01F8AD)}, - {RUNE_C(0x01F8B0), RUNE_C(0x01F8B1)}, - {RUNE_C(0x01F900), RUNE_C(0x01FA53)}, - {RUNE_C(0x01FA60), RUNE_C(0x01FA6D)}, - {RUNE_C(0x01FA70), RUNE_C(0x01FA7C)}, - {RUNE_C(0x01FA80), RUNE_C(0x01FA88)}, - {RUNE_C(0x01FA90), RUNE_C(0x01FABD)}, - {RUNE_C(0x01FABF), RUNE_C(0x01FAC5)}, - {RUNE_C(0x01FACE), RUNE_C(0x01FADB)}, - {RUNE_C(0x01FAE0), RUNE_C(0x01FAE8)}, - {RUNE_C(0x01FAF0), RUNE_C(0x01FAF8)}, - {RUNE_C(0x01FB00), RUNE_C(0x01FB92)}, - {RUNE_C(0x01FB94), RUNE_C(0x01FBCA)}, - {RUNE_C(0x01FBF0), RUNE_C(0x01FBF9)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xDF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC}, + {0xF0, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x07, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x49, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x1F, 0x00}, + {0xC0, 0xFF, 0x00, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFE, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x40, 0x60, 0xC2, 0xFF, 0xFF}, + {0xFF, 0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x02, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0xC7}, + {0xFF, 0xFF, 0x3F, 0x04, 0x10, 0x01, 0xFF, 0x7F, + 0xFF, 0xFF, 0xFF, 0x41, 0xFF, 0x07, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, + 0x01, 0xDE, 0x01, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF}, + {0xED, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xA3, + 0x81, 0x59, 0x00, 0xB0, 0xC3, 0xFF, 0xFF, 0x3F}, + {0xE8, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xC3, + 0x01, 0x00, 0x00, 0x5E, 0xC0, 0xFF, 0x5C, 0x00}, + {0xE8, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xE3, + 0x01, 0x1A, 0x01, 0x00, 0xC3, 0xFF, 0x03, 0x02}, + {0xEC, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x81, 0x19, 0x00, 0xB0, 0xC3, 0xFF, 0xFF, 0x00}, + {0xE8, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0x83, + 0xC6, 0x1D, 0x01, 0x00, 0xC0, 0xFF, 0xFF, 0x07}, + {0xEE, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0x23, + 0x1E, 0x00, 0x00, 0x27, 0xC3, 0xFF, 0x80, 0xFF}, + {0xFD, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0x63, + 0x9B, 0x0D, 0x00, 0x60, 0xC3, 0xFF, 0x0E, 0x00}, + {0xFC, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xA7, + 0xC1, 0xDD, 0x70, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF}, + {0xEC, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, + 0x7F, 0x00, 0x03, 0x7F, 0xC0, 0xFF, 0x1C, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0x80, + 0x7F, 0x80, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00}, + {0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0x0D, 0x20, + 0x5F, 0x00, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0x5F, 0xFD, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x80}, + {0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0xBF, 0xDF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x02, 0x99, + 0xFF, 0xFF, 0xFF, 0x3C, 0xFE, 0xFF, 0xE1, 0xFF}, + {0x9B, 0xDF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, + 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0x23, 0x80, 0xFF, 0xFF, 0x73, 0x00, + 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xDF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0xC0, + 0xBF, 0x01, 0xF0, 0x1F, 0xFF, 0x03, 0xFF, 0x03}, + {0xFF, 0x07, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x78, 0x0E, 0xFB, 0x01, + 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xBF, 0x00, 0x1A, 0xE0, 0x07, 0x00}, + {0xFF, 0x03, 0xFF, 0x03, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE8, + 0xFB, 0x1F, 0xFF, 0xFF, 0xFF, 0x07, 0xF0, 0x7F}, + {0xFC, 0xFF, 0xFF, 0xFF, 0xC3, 0xC4, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x5C, 0x0C, 0xF0}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x30, 0xF8, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0xFF, 0x00, 0x08, 0x00, 0x02, 0xDE, 0xEF, 0x04}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xDF, 0xFF, 0xCF, 0xEF, 0xFF, 0xFF, 0xDC, 0x7F}, + {0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF3, 0xFF}, + {0xFF, 0x7F, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0xFF, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF}, + {0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x0C, 0xFE}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0x00}, + {0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x08, 0xC0}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xBB, 0xF7, 0xFF, 0xFF, 0x9F, 0x0F, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0xFF, + 0x7F, 0x00, 0x0C, 0x80, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xCC, + 0xFF, 0xBF, 0xFF, 0xC3, 0xDF, 0xFF, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0x19, 0x00, + 0xF7, 0x2F, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xEF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x3E, + 0x05, 0x00, 0x00, 0xF8, 0xFF, 0xCF, 0x3F, 0x00}, + {0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x1E, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xA0, 0xFF, 0xFF, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xF7, 0xFF, 0x7F, 0x0F, 0xDF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x7F, 0x7F, 0x00, 0x30}, + {0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, + 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0xFF, 0x1F, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0xFE, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0xFF, 0xF7}, + {0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, + 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0xF8}, + {0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x83, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, + 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x01, 0x00, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFE, + 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x07, 0xFF}, + {0xFF, 0xFF, 0x03, 0x1E, 0x00, 0xFE, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0x3F, 0x00, 0xFE, 0x03, 0x00, 0x00, 0xFF, 0xFF}, + {0xC3, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x80, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0x26, 0x00}, + {0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xD9, + 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03}, + {0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0x10, 0xC0, 0xFF, + 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x77, 0x00}, + {0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x80, + 0xFF, 0x61, 0xFF, 0xFF, 0xFE, 0xFF, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x7F, 0x2C, 0xBF, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0x07, 0x00, 0xFF, 0x03}, + {0xEC, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xA3, + 0x9E, 0x39, 0x01, 0xE0, 0x0F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xA3, 0xFF, 0xFF, 0xAF, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x5A, + 0xF2, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x03, 0x4F, + 0xFE, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x58, + 0x1E, 0x00, 0xFF, 0x03, 0xFF, 0x1F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x40, 0x03, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x07, 0x43, 0x00, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80}, + {0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBE, 0xA1, + 0x77, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xF0, 0x1E, 0x00, 0x00, 0x00}, + {0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x86, + 0x7F, 0x00, 0x81, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x03, 0x80, 0xFC, 0x07, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x40, + 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x02, 0x12, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x40, 0x00, 0xFF, 0x03, 0xBF, 0xFD, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x58, 0x01, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE7, 0x01}, + {0xFC, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x3F, 0xC0, + 0xFA, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x80}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xC3, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x3F, 0x20, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, + 0x3F, 0x00, 0xFF, 0xFB, 0xFB, 0xFF, 0xFF, 0xE0}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0x93, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x3C, 0x00, 0x00}, + {0x18, 0xF0, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xDF, 0xFF}, + {0xEF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, + 0xFF, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x83}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x9F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x08, 0xFF, 0xC3, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E}, + {0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x7F, 0xFE, 0xFF, + 0xFE, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF}, + {0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, + 0xFF, 0x01, 0x03, 0x00, 0x3F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0x1F, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x0F, 0x01, 0x00}, + {0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x3F, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0x3F, 0xC0, 0xFF, 0x0F, 0xFF, 0x01, 0xFF, 0x01}, + {0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_gr_base(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_gr_ext.c b/lib/unicode/prop/uprop_is_gr_ext.c index 2889b07..22db705 100644 --- a/lib/unicode/prop/uprop_is_gr_ext.c +++ b/lib/unicode/prop/uprop_is_gr_ext.c @@ -1,384 +1,782 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000300), RUNE_C(0x00036F)}, - {RUNE_C(0x000483), RUNE_C(0x000489)}, - {RUNE_C(0x000591), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C5)}, - {RUNE_C(0x0005C7), RUNE_C(0x0005C7)}, - {RUNE_C(0x000610), RUNE_C(0x00061A)}, - {RUNE_C(0x00064B), RUNE_C(0x00065F)}, - {RUNE_C(0x000670), RUNE_C(0x000670)}, - {RUNE_C(0x0006D6), RUNE_C(0x0006DC)}, - {RUNE_C(0x0006DF), RUNE_C(0x0006E4)}, - {RUNE_C(0x0006E7), RUNE_C(0x0006E8)}, - {RUNE_C(0x0006EA), RUNE_C(0x0006ED)}, - {RUNE_C(0x000711), RUNE_C(0x000711)}, - {RUNE_C(0x000730), RUNE_C(0x00074A)}, - {RUNE_C(0x0007A6), RUNE_C(0x0007B0)}, - {RUNE_C(0x0007EB), RUNE_C(0x0007F3)}, - {RUNE_C(0x0007FD), RUNE_C(0x0007FD)}, - {RUNE_C(0x000816), RUNE_C(0x000819)}, - {RUNE_C(0x00081B), RUNE_C(0x000823)}, - {RUNE_C(0x000825), RUNE_C(0x000827)}, - {RUNE_C(0x000829), RUNE_C(0x00082D)}, - {RUNE_C(0x000859), RUNE_C(0x00085B)}, - {RUNE_C(0x000898), RUNE_C(0x00089F)}, - {RUNE_C(0x0008CA), RUNE_C(0x0008E1)}, - {RUNE_C(0x0008E3), RUNE_C(0x000902)}, - {RUNE_C(0x00093A), RUNE_C(0x00093A)}, - {RUNE_C(0x00093C), RUNE_C(0x00093C)}, - {RUNE_C(0x000941), RUNE_C(0x000948)}, - {RUNE_C(0x00094D), RUNE_C(0x00094D)}, - {RUNE_C(0x000951), RUNE_C(0x000957)}, - {RUNE_C(0x000962), RUNE_C(0x000963)}, - {RUNE_C(0x000981), RUNE_C(0x000981)}, - {RUNE_C(0x0009BC), RUNE_C(0x0009BC)}, - {RUNE_C(0x0009BE), RUNE_C(0x0009BE)}, - {RUNE_C(0x0009C1), RUNE_C(0x0009C4)}, - {RUNE_C(0x0009CD), RUNE_C(0x0009CD)}, - {RUNE_C(0x0009D7), RUNE_C(0x0009D7)}, - {RUNE_C(0x0009E2), RUNE_C(0x0009E3)}, - {RUNE_C(0x0009FE), RUNE_C(0x0009FE)}, - {RUNE_C(0x000A01), RUNE_C(0x000A02)}, - {RUNE_C(0x000A3C), RUNE_C(0x000A3C)}, - {RUNE_C(0x000A41), RUNE_C(0x000A42)}, - {RUNE_C(0x000A47), RUNE_C(0x000A48)}, - {RUNE_C(0x000A4B), RUNE_C(0x000A4D)}, - {RUNE_C(0x000A51), RUNE_C(0x000A51)}, - {RUNE_C(0x000A70), RUNE_C(0x000A71)}, - {RUNE_C(0x000A75), RUNE_C(0x000A75)}, - {RUNE_C(0x000A81), RUNE_C(0x000A82)}, - {RUNE_C(0x000ABC), RUNE_C(0x000ABC)}, - {RUNE_C(0x000AC1), RUNE_C(0x000AC5)}, - {RUNE_C(0x000AC7), RUNE_C(0x000AC8)}, - {RUNE_C(0x000ACD), RUNE_C(0x000ACD)}, - {RUNE_C(0x000AE2), RUNE_C(0x000AE3)}, - {RUNE_C(0x000AFA), RUNE_C(0x000AFF)}, - {RUNE_C(0x000B01), RUNE_C(0x000B01)}, - {RUNE_C(0x000B3C), RUNE_C(0x000B3C)}, - {RUNE_C(0x000B3E), RUNE_C(0x000B3F)}, - {RUNE_C(0x000B41), RUNE_C(0x000B44)}, - {RUNE_C(0x000B4D), RUNE_C(0x000B4D)}, - {RUNE_C(0x000B55), RUNE_C(0x000B57)}, - {RUNE_C(0x000B62), RUNE_C(0x000B63)}, - {RUNE_C(0x000B82), RUNE_C(0x000B82)}, - {RUNE_C(0x000BBE), RUNE_C(0x000BBE)}, - {RUNE_C(0x000BC0), RUNE_C(0x000BC0)}, - {RUNE_C(0x000BCD), RUNE_C(0x000BCD)}, - {RUNE_C(0x000BD7), RUNE_C(0x000BD7)}, - {RUNE_C(0x000C00), RUNE_C(0x000C00)}, - {RUNE_C(0x000C04), RUNE_C(0x000C04)}, - {RUNE_C(0x000C3C), RUNE_C(0x000C3C)}, - {RUNE_C(0x000C3E), RUNE_C(0x000C40)}, - {RUNE_C(0x000C46), RUNE_C(0x000C48)}, - {RUNE_C(0x000C4A), RUNE_C(0x000C4D)}, - {RUNE_C(0x000C55), RUNE_C(0x000C56)}, - {RUNE_C(0x000C62), RUNE_C(0x000C63)}, - {RUNE_C(0x000C81), RUNE_C(0x000C81)}, - {RUNE_C(0x000CBC), RUNE_C(0x000CBC)}, - {RUNE_C(0x000CBF), RUNE_C(0x000CBF)}, - {RUNE_C(0x000CC2), RUNE_C(0x000CC2)}, - {RUNE_C(0x000CC6), RUNE_C(0x000CC6)}, - {RUNE_C(0x000CCC), RUNE_C(0x000CCD)}, - {RUNE_C(0x000CD5), RUNE_C(0x000CD6)}, - {RUNE_C(0x000CE2), RUNE_C(0x000CE3)}, - {RUNE_C(0x000D00), RUNE_C(0x000D01)}, - {RUNE_C(0x000D3B), RUNE_C(0x000D3C)}, - {RUNE_C(0x000D3E), RUNE_C(0x000D3E)}, - {RUNE_C(0x000D41), RUNE_C(0x000D44)}, - {RUNE_C(0x000D4D), RUNE_C(0x000D4D)}, - {RUNE_C(0x000D57), RUNE_C(0x000D57)}, - {RUNE_C(0x000D62), RUNE_C(0x000D63)}, - {RUNE_C(0x000D81), RUNE_C(0x000D81)}, - {RUNE_C(0x000DCA), RUNE_C(0x000DCA)}, - {RUNE_C(0x000DCF), RUNE_C(0x000DCF)}, - {RUNE_C(0x000DD2), RUNE_C(0x000DD4)}, - {RUNE_C(0x000DD6), RUNE_C(0x000DD6)}, - {RUNE_C(0x000DDF), RUNE_C(0x000DDF)}, - {RUNE_C(0x000E31), RUNE_C(0x000E31)}, - {RUNE_C(0x000E34), RUNE_C(0x000E3A)}, - {RUNE_C(0x000E47), RUNE_C(0x000E4E)}, - {RUNE_C(0x000EB1), RUNE_C(0x000EB1)}, - {RUNE_C(0x000EB4), RUNE_C(0x000EBC)}, - {RUNE_C(0x000EC8), RUNE_C(0x000ECE)}, - {RUNE_C(0x000F18), RUNE_C(0x000F19)}, - {RUNE_C(0x000F35), RUNE_C(0x000F35)}, - {RUNE_C(0x000F37), RUNE_C(0x000F37)}, - {RUNE_C(0x000F39), RUNE_C(0x000F39)}, - {RUNE_C(0x000F71), RUNE_C(0x000F7E)}, - {RUNE_C(0x000F80), RUNE_C(0x000F84)}, - {RUNE_C(0x000F86), RUNE_C(0x000F87)}, - {RUNE_C(0x000F8D), RUNE_C(0x000F97)}, - {RUNE_C(0x000F99), RUNE_C(0x000FBC)}, - {RUNE_C(0x000FC6), RUNE_C(0x000FC6)}, - {RUNE_C(0x00102D), RUNE_C(0x001030)}, - {RUNE_C(0x001032), RUNE_C(0x001037)}, - {RUNE_C(0x001039), RUNE_C(0x00103A)}, - {RUNE_C(0x00103D), RUNE_C(0x00103E)}, - {RUNE_C(0x001058), RUNE_C(0x001059)}, - {RUNE_C(0x00105E), RUNE_C(0x001060)}, - {RUNE_C(0x001071), RUNE_C(0x001074)}, - {RUNE_C(0x001082), RUNE_C(0x001082)}, - {RUNE_C(0x001085), RUNE_C(0x001086)}, - {RUNE_C(0x00108D), RUNE_C(0x00108D)}, - {RUNE_C(0x00109D), RUNE_C(0x00109D)}, - {RUNE_C(0x00135D), RUNE_C(0x00135F)}, - {RUNE_C(0x001712), RUNE_C(0x001714)}, - {RUNE_C(0x001732), RUNE_C(0x001733)}, - {RUNE_C(0x001752), RUNE_C(0x001753)}, - {RUNE_C(0x001772), RUNE_C(0x001773)}, - {RUNE_C(0x0017B4), RUNE_C(0x0017B5)}, - {RUNE_C(0x0017B7), RUNE_C(0x0017BD)}, - {RUNE_C(0x0017C6), RUNE_C(0x0017C6)}, - {RUNE_C(0x0017C9), RUNE_C(0x0017D3)}, - {RUNE_C(0x0017DD), RUNE_C(0x0017DD)}, - {RUNE_C(0x00180B), RUNE_C(0x00180D)}, - {RUNE_C(0x00180F), RUNE_C(0x00180F)}, - {RUNE_C(0x001885), RUNE_C(0x001886)}, - {RUNE_C(0x0018A9), RUNE_C(0x0018A9)}, - {RUNE_C(0x001920), RUNE_C(0x001922)}, - {RUNE_C(0x001927), RUNE_C(0x001928)}, - {RUNE_C(0x001932), RUNE_C(0x001932)}, - {RUNE_C(0x001939), RUNE_C(0x00193B)}, - {RUNE_C(0x001A17), RUNE_C(0x001A18)}, - {RUNE_C(0x001A1B), RUNE_C(0x001A1B)}, - {RUNE_C(0x001A56), RUNE_C(0x001A56)}, - {RUNE_C(0x001A58), RUNE_C(0x001A5E)}, - {RUNE_C(0x001A60), RUNE_C(0x001A60)}, - {RUNE_C(0x001A62), RUNE_C(0x001A62)}, - {RUNE_C(0x001A65), RUNE_C(0x001A6C)}, - {RUNE_C(0x001A73), RUNE_C(0x001A7C)}, - {RUNE_C(0x001A7F), RUNE_C(0x001A7F)}, - {RUNE_C(0x001AB0), RUNE_C(0x001ACE)}, - {RUNE_C(0x001B00), RUNE_C(0x001B03)}, - {RUNE_C(0x001B34), RUNE_C(0x001B3A)}, - {RUNE_C(0x001B3C), RUNE_C(0x001B3C)}, - {RUNE_C(0x001B42), RUNE_C(0x001B42)}, - {RUNE_C(0x001B6B), RUNE_C(0x001B73)}, - {RUNE_C(0x001B80), RUNE_C(0x001B81)}, - {RUNE_C(0x001BA2), RUNE_C(0x001BA5)}, - {RUNE_C(0x001BA8), RUNE_C(0x001BA9)}, - {RUNE_C(0x001BAB), RUNE_C(0x001BAD)}, - {RUNE_C(0x001BE6), RUNE_C(0x001BE6)}, - {RUNE_C(0x001BE8), RUNE_C(0x001BE9)}, - {RUNE_C(0x001BED), RUNE_C(0x001BED)}, - {RUNE_C(0x001BEF), RUNE_C(0x001BF1)}, - {RUNE_C(0x001C2C), RUNE_C(0x001C33)}, - {RUNE_C(0x001C36), RUNE_C(0x001C37)}, - {RUNE_C(0x001CD0), RUNE_C(0x001CD2)}, - {RUNE_C(0x001CD4), RUNE_C(0x001CE0)}, - {RUNE_C(0x001CE2), RUNE_C(0x001CE8)}, - {RUNE_C(0x001CED), RUNE_C(0x001CED)}, - {RUNE_C(0x001CF4), RUNE_C(0x001CF4)}, - {RUNE_C(0x001CF8), RUNE_C(0x001CF9)}, - {RUNE_C(0x001DC0), RUNE_C(0x001DFF)}, - {RUNE_C(0x00200C), RUNE_C(0x00200C)}, - {RUNE_C(0x0020D0), RUNE_C(0x0020F0)}, - {RUNE_C(0x002CEF), RUNE_C(0x002CF1)}, - {RUNE_C(0x002D7F), RUNE_C(0x002D7F)}, - {RUNE_C(0x002DE0), RUNE_C(0x002DFF)}, - {RUNE_C(0x00302A), RUNE_C(0x00302F)}, - {RUNE_C(0x003099), RUNE_C(0x00309A)}, - {RUNE_C(0x00A66F), RUNE_C(0x00A672)}, - {RUNE_C(0x00A674), RUNE_C(0x00A67D)}, - {RUNE_C(0x00A69E), RUNE_C(0x00A69F)}, - {RUNE_C(0x00A6F0), RUNE_C(0x00A6F1)}, - {RUNE_C(0x00A802), RUNE_C(0x00A802)}, - {RUNE_C(0x00A806), RUNE_C(0x00A806)}, - {RUNE_C(0x00A80B), RUNE_C(0x00A80B)}, - {RUNE_C(0x00A825), RUNE_C(0x00A826)}, - {RUNE_C(0x00A82C), RUNE_C(0x00A82C)}, - {RUNE_C(0x00A8C4), RUNE_C(0x00A8C5)}, - {RUNE_C(0x00A8E0), RUNE_C(0x00A8F1)}, - {RUNE_C(0x00A8FF), RUNE_C(0x00A8FF)}, - {RUNE_C(0x00A926), RUNE_C(0x00A92D)}, - {RUNE_C(0x00A947), RUNE_C(0x00A951)}, - {RUNE_C(0x00A980), RUNE_C(0x00A982)}, - {RUNE_C(0x00A9B3), RUNE_C(0x00A9B3)}, - {RUNE_C(0x00A9B6), RUNE_C(0x00A9B9)}, - {RUNE_C(0x00A9BC), RUNE_C(0x00A9BD)}, - {RUNE_C(0x00A9E5), RUNE_C(0x00A9E5)}, - {RUNE_C(0x00AA29), RUNE_C(0x00AA2E)}, - {RUNE_C(0x00AA31), RUNE_C(0x00AA32)}, - {RUNE_C(0x00AA35), RUNE_C(0x00AA36)}, - {RUNE_C(0x00AA43), RUNE_C(0x00AA43)}, - {RUNE_C(0x00AA4C), RUNE_C(0x00AA4C)}, - {RUNE_C(0x00AA7C), RUNE_C(0x00AA7C)}, - {RUNE_C(0x00AAB0), RUNE_C(0x00AAB0)}, - {RUNE_C(0x00AAB2), RUNE_C(0x00AAB4)}, - {RUNE_C(0x00AAB7), RUNE_C(0x00AAB8)}, - {RUNE_C(0x00AABE), RUNE_C(0x00AABF)}, - {RUNE_C(0x00AAC1), RUNE_C(0x00AAC1)}, - {RUNE_C(0x00AAEC), RUNE_C(0x00AAED)}, - {RUNE_C(0x00AAF6), RUNE_C(0x00AAF6)}, - {RUNE_C(0x00ABE5), RUNE_C(0x00ABE5)}, - {RUNE_C(0x00ABE8), RUNE_C(0x00ABE8)}, - {RUNE_C(0x00ABED), RUNE_C(0x00ABED)}, - {RUNE_C(0x00FB1E), RUNE_C(0x00FB1E)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE0F)}, - {RUNE_C(0x00FE20), RUNE_C(0x00FE2F)}, - {RUNE_C(0x00FF9E), RUNE_C(0x00FF9F)}, - {RUNE_C(0x0101FD), RUNE_C(0x0101FD)}, - {RUNE_C(0x0102E0), RUNE_C(0x0102E0)}, - {RUNE_C(0x010376), RUNE_C(0x01037A)}, - {RUNE_C(0x010A01), RUNE_C(0x010A03)}, - {RUNE_C(0x010A05), RUNE_C(0x010A06)}, - {RUNE_C(0x010A0C), RUNE_C(0x010A0F)}, - {RUNE_C(0x010A38), RUNE_C(0x010A3A)}, - {RUNE_C(0x010A3F), RUNE_C(0x010A3F)}, - {RUNE_C(0x010AE5), RUNE_C(0x010AE6)}, - {RUNE_C(0x010D24), RUNE_C(0x010D27)}, - {RUNE_C(0x010EAB), RUNE_C(0x010EAC)}, - {RUNE_C(0x010EFD), RUNE_C(0x010EFF)}, - {RUNE_C(0x010F46), RUNE_C(0x010F50)}, - {RUNE_C(0x010F82), RUNE_C(0x010F85)}, - {RUNE_C(0x011001), RUNE_C(0x011001)}, - {RUNE_C(0x011038), RUNE_C(0x011046)}, - {RUNE_C(0x011070), RUNE_C(0x011070)}, - {RUNE_C(0x011073), RUNE_C(0x011074)}, - {RUNE_C(0x01107F), RUNE_C(0x011081)}, - {RUNE_C(0x0110B3), RUNE_C(0x0110B6)}, - {RUNE_C(0x0110B9), RUNE_C(0x0110BA)}, - {RUNE_C(0x0110C2), RUNE_C(0x0110C2)}, - {RUNE_C(0x011100), RUNE_C(0x011102)}, - {RUNE_C(0x011127), RUNE_C(0x01112B)}, - {RUNE_C(0x01112D), RUNE_C(0x011134)}, - {RUNE_C(0x011173), RUNE_C(0x011173)}, - {RUNE_C(0x011180), RUNE_C(0x011181)}, - {RUNE_C(0x0111B6), RUNE_C(0x0111BE)}, - {RUNE_C(0x0111C9), RUNE_C(0x0111CC)}, - {RUNE_C(0x0111CF), RUNE_C(0x0111CF)}, - {RUNE_C(0x01122F), RUNE_C(0x011231)}, - {RUNE_C(0x011234), RUNE_C(0x011234)}, - {RUNE_C(0x011236), RUNE_C(0x011237)}, - {RUNE_C(0x01123E), RUNE_C(0x01123E)}, - {RUNE_C(0x011241), RUNE_C(0x011241)}, - {RUNE_C(0x0112DF), RUNE_C(0x0112DF)}, - {RUNE_C(0x0112E3), RUNE_C(0x0112EA)}, - {RUNE_C(0x011300), RUNE_C(0x011301)}, - {RUNE_C(0x01133B), RUNE_C(0x01133C)}, - {RUNE_C(0x01133E), RUNE_C(0x01133E)}, - {RUNE_C(0x011340), RUNE_C(0x011340)}, - {RUNE_C(0x011357), RUNE_C(0x011357)}, - {RUNE_C(0x011366), RUNE_C(0x01136C)}, - {RUNE_C(0x011370), RUNE_C(0x011374)}, - {RUNE_C(0x011438), RUNE_C(0x01143F)}, - {RUNE_C(0x011442), RUNE_C(0x011444)}, - {RUNE_C(0x011446), RUNE_C(0x011446)}, - {RUNE_C(0x01145E), RUNE_C(0x01145E)}, - {RUNE_C(0x0114B0), RUNE_C(0x0114B0)}, - {RUNE_C(0x0114B3), RUNE_C(0x0114B8)}, - {RUNE_C(0x0114BA), RUNE_C(0x0114BA)}, - {RUNE_C(0x0114BD), RUNE_C(0x0114BD)}, - {RUNE_C(0x0114BF), RUNE_C(0x0114C0)}, - {RUNE_C(0x0114C2), RUNE_C(0x0114C3)}, - {RUNE_C(0x0115AF), RUNE_C(0x0115AF)}, - {RUNE_C(0x0115B2), RUNE_C(0x0115B5)}, - {RUNE_C(0x0115BC), RUNE_C(0x0115BD)}, - {RUNE_C(0x0115BF), RUNE_C(0x0115C0)}, - {RUNE_C(0x0115DC), RUNE_C(0x0115DD)}, - {RUNE_C(0x011633), RUNE_C(0x01163A)}, - {RUNE_C(0x01163D), RUNE_C(0x01163D)}, - {RUNE_C(0x01163F), RUNE_C(0x011640)}, - {RUNE_C(0x0116AB), RUNE_C(0x0116AB)}, - {RUNE_C(0x0116AD), RUNE_C(0x0116AD)}, - {RUNE_C(0x0116B0), RUNE_C(0x0116B5)}, - {RUNE_C(0x0116B7), RUNE_C(0x0116B7)}, - {RUNE_C(0x01171D), RUNE_C(0x01171F)}, - {RUNE_C(0x011722), RUNE_C(0x011725)}, - {RUNE_C(0x011727), RUNE_C(0x01172B)}, - {RUNE_C(0x01182F), RUNE_C(0x011837)}, - {RUNE_C(0x011839), RUNE_C(0x01183A)}, - {RUNE_C(0x011930), RUNE_C(0x011930)}, - {RUNE_C(0x01193B), RUNE_C(0x01193C)}, - {RUNE_C(0x01193E), RUNE_C(0x01193E)}, - {RUNE_C(0x011943), RUNE_C(0x011943)}, - {RUNE_C(0x0119D4), RUNE_C(0x0119D7)}, - {RUNE_C(0x0119DA), RUNE_C(0x0119DB)}, - {RUNE_C(0x0119E0), RUNE_C(0x0119E0)}, - {RUNE_C(0x011A01), RUNE_C(0x011A0A)}, - {RUNE_C(0x011A33), RUNE_C(0x011A38)}, - {RUNE_C(0x011A3B), RUNE_C(0x011A3E)}, - {RUNE_C(0x011A47), RUNE_C(0x011A47)}, - {RUNE_C(0x011A51), RUNE_C(0x011A56)}, - {RUNE_C(0x011A59), RUNE_C(0x011A5B)}, - {RUNE_C(0x011A8A), RUNE_C(0x011A96)}, - {RUNE_C(0x011A98), RUNE_C(0x011A99)}, - {RUNE_C(0x011C30), RUNE_C(0x011C36)}, - {RUNE_C(0x011C38), RUNE_C(0x011C3D)}, - {RUNE_C(0x011C3F), RUNE_C(0x011C3F)}, - {RUNE_C(0x011C92), RUNE_C(0x011CA7)}, - {RUNE_C(0x011CAA), RUNE_C(0x011CB0)}, - {RUNE_C(0x011CB2), RUNE_C(0x011CB3)}, - {RUNE_C(0x011CB5), RUNE_C(0x011CB6)}, - {RUNE_C(0x011D31), RUNE_C(0x011D36)}, - {RUNE_C(0x011D3A), RUNE_C(0x011D3A)}, - {RUNE_C(0x011D3C), RUNE_C(0x011D3D)}, - {RUNE_C(0x011D3F), RUNE_C(0x011D45)}, - {RUNE_C(0x011D47), RUNE_C(0x011D47)}, - {RUNE_C(0x011D90), RUNE_C(0x011D91)}, - {RUNE_C(0x011D95), RUNE_C(0x011D95)}, - {RUNE_C(0x011D97), RUNE_C(0x011D97)}, - {RUNE_C(0x011EF3), RUNE_C(0x011EF4)}, - {RUNE_C(0x011F00), RUNE_C(0x011F01)}, - {RUNE_C(0x011F36), RUNE_C(0x011F3A)}, - {RUNE_C(0x011F40), RUNE_C(0x011F40)}, - {RUNE_C(0x011F42), RUNE_C(0x011F42)}, - {RUNE_C(0x013440), RUNE_C(0x013440)}, - {RUNE_C(0x013447), RUNE_C(0x013455)}, - {RUNE_C(0x016AF0), RUNE_C(0x016AF4)}, - {RUNE_C(0x016B30), RUNE_C(0x016B36)}, - {RUNE_C(0x016F4F), RUNE_C(0x016F4F)}, - {RUNE_C(0x016F8F), RUNE_C(0x016F92)}, - {RUNE_C(0x016FE4), RUNE_C(0x016FE4)}, - {RUNE_C(0x01BC9D), RUNE_C(0x01BC9E)}, - {RUNE_C(0x01CF00), RUNE_C(0x01CF2D)}, - {RUNE_C(0x01CF30), RUNE_C(0x01CF46)}, - {RUNE_C(0x01D165), RUNE_C(0x01D165)}, - {RUNE_C(0x01D167), RUNE_C(0x01D169)}, - {RUNE_C(0x01D16E), RUNE_C(0x01D172)}, - {RUNE_C(0x01D17B), RUNE_C(0x01D182)}, - {RUNE_C(0x01D185), RUNE_C(0x01D18B)}, - {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD)}, - {RUNE_C(0x01D242), RUNE_C(0x01D244)}, - {RUNE_C(0x01DA00), RUNE_C(0x01DA36)}, - {RUNE_C(0x01DA3B), RUNE_C(0x01DA6C)}, - {RUNE_C(0x01DA75), RUNE_C(0x01DA75)}, - {RUNE_C(0x01DA84), RUNE_C(0x01DA84)}, - {RUNE_C(0x01DA9B), RUNE_C(0x01DA9F)}, - {RUNE_C(0x01DAA1), RUNE_C(0x01DAAF)}, - {RUNE_C(0x01E000), RUNE_C(0x01E006)}, - {RUNE_C(0x01E008), RUNE_C(0x01E018)}, - {RUNE_C(0x01E01B), RUNE_C(0x01E021)}, - {RUNE_C(0x01E023), RUNE_C(0x01E024)}, - {RUNE_C(0x01E026), RUNE_C(0x01E02A)}, - {RUNE_C(0x01E08F), RUNE_C(0x01E08F)}, - {RUNE_C(0x01E130), RUNE_C(0x01E136)}, - {RUNE_C(0x01E2AE), RUNE_C(0x01E2AE)}, - {RUNE_C(0x01E2EC), RUNE_C(0x01E2EF)}, - {RUNE_C(0x01E4EC), RUNE_C(0x01E4EF)}, - {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6)}, - {RUNE_C(0x01E944), RUNE_C(0x01E94A)}, - {RUNE_C(0x0E0020), RUNE_C(0x0E007F)}, - {RUNE_C(0x0E0100), RUNE_C(0x0E01EF)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 27, 28, + 29, 30, 31, 0, 32, 33, 34, 35, 36, 37, 0, 38, 0, 0, 0, 0, + 39, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 42, 43, 0, 0, 0, 0, + 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 47, 0, 0, + 48, 49, 50, 51, 52, 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 56, 0, 0, 57, + 0, 0, 0, 58, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 62, 0, 0, 0, 0, 63, 0, 0, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 0, 74, 75, 0, 76, 77, 78, 79, 0, + 80, 0, 81, 82, 83, 84, 0, 0, 85, 86, 87, 88, 0, 89, 90, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 92, 93, 0, 0, 0, 0, 0, 0, 0, 94, 95, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, + 0, 0, 98, 99, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 101, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 104, 93, 0, 0, 105, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, + 0, 107, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 109, 0, 110, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, + {0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0x9F, 0x9F, 0x3D, 0x00, 0x00}, + {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x20}, + {0x00, 0x00, 0xC0, 0xFB, 0xEF, 0x3E, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF}, + {0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, + 0xFE, 0x21, 0xFE, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, + 0x1E, 0x20, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x40}, + {0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00}, + {0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0xBE, 0x21, 0x00, 0x00, 0x0C, 0x00, 0x00, 0xFC}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0x1E, 0x20, 0xE0, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x01, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, + 0xC1, 0x3D, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, + 0x44, 0x30, 0x60, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, + 0x1E, 0x20, 0x80, 0x00, 0x0C, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x84, 0x5C, 0x80, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x07, + 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x1F, + 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x7F}, + {0xDF, 0xE0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFD, 0x66, + 0x00, 0x00, 0x00, 0xC3, 0x01, 0x00, 0x1E, 0x00}, + {0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x00, + 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x3F, + 0x40, 0xFE, 0x0F, 0x20, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x7F, 0xE5, 0x1F, 0xF8, 0x9F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x17, + 0x04, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x3C, 0x3B, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0xA3, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xCF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF7, 0xFF, 0xFD, 0x21, 0x10, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF7, 0x3F}, + {0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, + 0x80, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x33, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x66, 0x00, + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xC1, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07}, + {0x6E, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x06, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0x00, 0x00, 0x80, 0xEF, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, + 0x00, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xD3, 0x40, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0xF8, 0x07, 0x00, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, + 0x01, 0x00, 0x80, 0x00, 0xC0, 0x1F, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0x5C, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xA5, + 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3C, 0xB0, + 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xA7, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xBF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xE0, 0xBC, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x58, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF0, 0x0C, 0x01, 0x00, 0x00, 0x00}, + {0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x79, + 0x80, 0x00, 0x7E, 0x0E, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xFC, 0x7F, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFC, 0x6D, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xB4, + 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x81, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA0, 0xC3, 0x07, 0xF8}, + {0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00}, + {0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, +}; bool uprop_is_gr_ext(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_hex.c b/lib/unicode/prop/uprop_is_hex.c index c303e69..d0bf5cc 100644 --- a/lib/unicode/prop/uprop_is_hex.c +++ b/lib/unicode/prop/uprop_is_hex.c @@ -1,31 +1,176 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, - 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00FF10), RUNE_C(0x00FF19)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF26)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF46)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x03, 0x7E, 0x00, 0x00, 0x00, + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_hex(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_id_compat_math_continue.c b/lib/unicode/prop/uprop_is_id_compat_math_continue.c index 51cd8e0..9286202 100644 --- a/lib/unicode/prop/uprop_is_id_compat_math_continue.c +++ b/lib/unicode/prop/uprop_is_id_compat_math_continue.c @@ -1,44 +1,192 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x002070), RUNE_C(0x002070)}, - {RUNE_C(0x002074), RUNE_C(0x00207E)}, - {RUNE_C(0x002080), RUNE_C(0x00208E)}, - {RUNE_C(0x002202), RUNE_C(0x002202)}, - {RUNE_C(0x002207), RUNE_C(0x002207)}, - {RUNE_C(0x00221E), RUNE_C(0x00221E)}, - {RUNE_C(0x01D6C1), RUNE_C(0x01D6C1)}, - {RUNE_C(0x01D6DB), RUNE_C(0x01D6DB)}, - {RUNE_C(0x01D6FB), RUNE_C(0x01D6FB)}, - {RUNE_C(0x01D715), RUNE_C(0x01D715)}, - {RUNE_C(0x01D735), RUNE_C(0x01D735)}, - {RUNE_C(0x01D74F), RUNE_C(0x01D74F)}, - {RUNE_C(0x01D76F), RUNE_C(0x01D76F)}, - {RUNE_C(0x01D789), RUNE_C(0x01D789)}, - {RUNE_C(0x01D7A9), RUNE_C(0x01D7A9)}, - {RUNE_C(0x01D7C3), RUNE_C(0x01D7C3)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x7F, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x84, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_id_compat_math_continue(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_id_compat_math_start.c b/lib/unicode/prop/uprop_is_id_compat_math_start.c index 9da9cdf..b7121c1 100644 --- a/lib/unicode/prop/uprop_is_id_compat_math_start.c +++ b/lib/unicode/prop/uprop_is_id_compat_math_start.c @@ -1,34 +1,176 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x002202), RUNE_C(0x002202)}, - {RUNE_C(0x002207), RUNE_C(0x002207)}, - {RUNE_C(0x00221E), RUNE_C(0x00221E)}, - {RUNE_C(0x01D6C1), RUNE_C(0x01D6C1)}, - {RUNE_C(0x01D6DB), RUNE_C(0x01D6DB)}, - {RUNE_C(0x01D6FB), RUNE_C(0x01D6FB)}, - {RUNE_C(0x01D715), RUNE_C(0x01D715)}, - {RUNE_C(0x01D735), RUNE_C(0x01D735)}, - {RUNE_C(0x01D74F), RUNE_C(0x01D74F)}, - {RUNE_C(0x01D76F), RUNE_C(0x01D76F)}, - {RUNE_C(0x01D789), RUNE_C(0x01D789)}, - {RUNE_C(0x01D7A9), RUNE_C(0x01D7A9)}, - {RUNE_C(0x01D7C3), RUNE_C(0x01D7C3)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x84, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_id_compat_math_start(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_idc.c b/lib/unicode/prop/uprop_is_idc.c index 3b79afd..387628f 100644 --- a/lib/unicode/prop/uprop_is_idc.c +++ b/lib/unicode/prop/uprop_is_idc.c @@ -1,787 +1,950 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, - 0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xA0, 0x04, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 2, 2, 2, 50, 51, + 52, 53, 54, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 2, 57, 58, 59, 56, 56, 56, 56, + 60, 61, 62, 63, 56, 56, 56, 56, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 64, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 2, 2, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 2, 2, 79, 80, 81, 82, 2, 2, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 56, 93, 94, 95, 2, 96, 97, 98, 2, 2, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 56, 56, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 56, 122, 123, 56, 124, 125, 126, 127, 56, + 128, 129, 130, 131, 132, 133, 56, 56, 134, 135, 136, 137, 56, 138, 139, 140, + 2, 2, 2, 2, 2, 2, 2, 141, 142, 2, 143, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 144, + 2, 2, 2, 2, 2, 2, 2, 2, 145, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 2, 2, 2, 2, 146, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 147, 148, 149, 150, 56, 56, 56, 56, 151, 56, 152, 153, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 154, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 155, 55, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 156, + 2, 2, 157, 2, 2, 158, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 159, 160, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 161, 56, + 56, 56, 162, 163, 164, 56, 56, 56, 165, 166, 167, 2, 2, 168, 169, 170, + 56, 56, 56, 56, 171, 172, 56, 56, 56, 56, 56, 56, 56, 56, 173, 56, + 174, 175, 176, 56, 56, 177, 56, 56, 56, 178, 56, 56, 56, 56, 56, 179, + 2, 180, 181, 56, 56, 56, 56, 56, 56, 56, 56, 56, 182, 183, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 184, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 185, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 186, 2, + 187, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 188, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 189, 2, 2, 2, 2, 190, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 191, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 192, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 193, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 2, 194, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002C6), RUNE_C(0x0002D1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x0002EC), RUNE_C(0x0002EC)}, - {RUNE_C(0x0002EE), RUNE_C(0x0002EE)}, - {RUNE_C(0x000300), RUNE_C(0x000374)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037A), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x000481)}, - {RUNE_C(0x000483), RUNE_C(0x000487)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x000591), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C5)}, - {RUNE_C(0x0005C7), RUNE_C(0x0005C7)}, - {RUNE_C(0x0005D0), RUNE_C(0x0005EA)}, - {RUNE_C(0x0005EF), RUNE_C(0x0005F2)}, - {RUNE_C(0x000610), RUNE_C(0x00061A)}, - {RUNE_C(0x000620), RUNE_C(0x000669)}, - {RUNE_C(0x00066E), RUNE_C(0x0006D3)}, - {RUNE_C(0x0006D5), RUNE_C(0x0006DC)}, - {RUNE_C(0x0006DF), RUNE_C(0x0006E8)}, - {RUNE_C(0x0006EA), RUNE_C(0x0006FC)}, - {RUNE_C(0x0006FF), RUNE_C(0x0006FF)}, - {RUNE_C(0x000710), RUNE_C(0x00074A)}, - {RUNE_C(0x00074D), RUNE_C(0x0007B1)}, - {RUNE_C(0x0007C0), RUNE_C(0x0007F5)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x0007FD), RUNE_C(0x0007FD)}, - {RUNE_C(0x000800), RUNE_C(0x00082D)}, - {RUNE_C(0x000840), RUNE_C(0x00085B)}, - {RUNE_C(0x000860), RUNE_C(0x00086A)}, - {RUNE_C(0x000870), RUNE_C(0x000887)}, - {RUNE_C(0x000889), RUNE_C(0x00088E)}, - {RUNE_C(0x000898), RUNE_C(0x0008E1)}, - {RUNE_C(0x0008E3), RUNE_C(0x000963)}, - {RUNE_C(0x000966), RUNE_C(0x00096F)}, - {RUNE_C(0x000971), RUNE_C(0x000983)}, - {RUNE_C(0x000985), RUNE_C(0x00098C)}, - {RUNE_C(0x00098F), RUNE_C(0x000990)}, - {RUNE_C(0x000993), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BC), RUNE_C(0x0009C4)}, - {RUNE_C(0x0009C7), RUNE_C(0x0009C8)}, - {RUNE_C(0x0009CB), RUNE_C(0x0009CE)}, - {RUNE_C(0x0009D7), RUNE_C(0x0009D7)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009E3)}, - {RUNE_C(0x0009E6), RUNE_C(0x0009F1)}, - {RUNE_C(0x0009FC), RUNE_C(0x0009FC)}, - {RUNE_C(0x0009FE), RUNE_C(0x0009FE)}, - {RUNE_C(0x000A01), RUNE_C(0x000A03)}, - {RUNE_C(0x000A05), RUNE_C(0x000A0A)}, - {RUNE_C(0x000A0F), RUNE_C(0x000A10)}, - {RUNE_C(0x000A13), RUNE_C(0x000A28)}, - {RUNE_C(0x000A2A), RUNE_C(0x000A30)}, - {RUNE_C(0x000A32), RUNE_C(0x000A33)}, - {RUNE_C(0x000A35), RUNE_C(0x000A36)}, - {RUNE_C(0x000A38), RUNE_C(0x000A39)}, - {RUNE_C(0x000A3C), RUNE_C(0x000A3C)}, - {RUNE_C(0x000A3E), RUNE_C(0x000A42)}, - {RUNE_C(0x000A47), RUNE_C(0x000A48)}, - {RUNE_C(0x000A4B), RUNE_C(0x000A4D)}, - {RUNE_C(0x000A51), RUNE_C(0x000A51)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5C)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000A66), RUNE_C(0x000A75)}, - {RUNE_C(0x000A81), RUNE_C(0x000A83)}, - {RUNE_C(0x000A85), RUNE_C(0x000A8D)}, - {RUNE_C(0x000A8F), RUNE_C(0x000A91)}, - {RUNE_C(0x000A93), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABC), RUNE_C(0x000AC5)}, - {RUNE_C(0x000AC7), RUNE_C(0x000AC9)}, - {RUNE_C(0x000ACB), RUNE_C(0x000ACD)}, - {RUNE_C(0x000AD0), RUNE_C(0x000AD0)}, - {RUNE_C(0x000AE0), RUNE_C(0x000AE3)}, - {RUNE_C(0x000AE6), RUNE_C(0x000AEF)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AFF)}, - {RUNE_C(0x000B01), RUNE_C(0x000B03)}, - {RUNE_C(0x000B05), RUNE_C(0x000B0C)}, - {RUNE_C(0x000B0F), RUNE_C(0x000B10)}, - {RUNE_C(0x000B13), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3C), RUNE_C(0x000B44)}, - {RUNE_C(0x000B47), RUNE_C(0x000B48)}, - {RUNE_C(0x000B4B), RUNE_C(0x000B4D)}, - {RUNE_C(0x000B55), RUNE_C(0x000B57)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B63)}, - {RUNE_C(0x000B66), RUNE_C(0x000B6F)}, - {RUNE_C(0x000B71), RUNE_C(0x000B71)}, - {RUNE_C(0x000B82), RUNE_C(0x000B83)}, - {RUNE_C(0x000B85), RUNE_C(0x000B8A)}, - {RUNE_C(0x000B8E), RUNE_C(0x000B90)}, - {RUNE_C(0x000B92), RUNE_C(0x000B95)}, - {RUNE_C(0x000B99), RUNE_C(0x000B9A)}, - {RUNE_C(0x000B9C), RUNE_C(0x000B9C)}, - {RUNE_C(0x000B9E), RUNE_C(0x000B9F)}, - {RUNE_C(0x000BA3), RUNE_C(0x000BA4)}, - {RUNE_C(0x000BA8), RUNE_C(0x000BAA)}, - {RUNE_C(0x000BAE), RUNE_C(0x000BB9)}, - {RUNE_C(0x000BBE), RUNE_C(0x000BC2)}, - {RUNE_C(0x000BC6), RUNE_C(0x000BC8)}, - {RUNE_C(0x000BCA), RUNE_C(0x000BCD)}, - {RUNE_C(0x000BD0), RUNE_C(0x000BD0)}, - {RUNE_C(0x000BD7), RUNE_C(0x000BD7)}, - {RUNE_C(0x000BE6), RUNE_C(0x000BEF)}, - {RUNE_C(0x000C00), RUNE_C(0x000C0C)}, - {RUNE_C(0x000C0E), RUNE_C(0x000C10)}, - {RUNE_C(0x000C12), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3C), RUNE_C(0x000C44)}, - {RUNE_C(0x000C46), RUNE_C(0x000C48)}, - {RUNE_C(0x000C4A), RUNE_C(0x000C4D)}, - {RUNE_C(0x000C55), RUNE_C(0x000C56)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000C5D), RUNE_C(0x000C5D)}, - {RUNE_C(0x000C60), RUNE_C(0x000C63)}, - {RUNE_C(0x000C66), RUNE_C(0x000C6F)}, - {RUNE_C(0x000C80), RUNE_C(0x000C83)}, - {RUNE_C(0x000C85), RUNE_C(0x000C8C)}, - {RUNE_C(0x000C8E), RUNE_C(0x000C90)}, - {RUNE_C(0x000C92), RUNE_C(0x000CA8)}, - {RUNE_C(0x000CAA), RUNE_C(0x000CB3)}, - {RUNE_C(0x000CB5), RUNE_C(0x000CB9)}, - {RUNE_C(0x000CBC), RUNE_C(0x000CC4)}, - {RUNE_C(0x000CC6), RUNE_C(0x000CC8)}, - {RUNE_C(0x000CCA), RUNE_C(0x000CCD)}, - {RUNE_C(0x000CD5), RUNE_C(0x000CD6)}, - {RUNE_C(0x000CDD), RUNE_C(0x000CDE)}, - {RUNE_C(0x000CE0), RUNE_C(0x000CE3)}, - {RUNE_C(0x000CE6), RUNE_C(0x000CEF)}, - {RUNE_C(0x000CF1), RUNE_C(0x000CF3)}, - {RUNE_C(0x000D00), RUNE_C(0x000D0C)}, - {RUNE_C(0x000D0E), RUNE_C(0x000D10)}, - {RUNE_C(0x000D12), RUNE_C(0x000D44)}, - {RUNE_C(0x000D46), RUNE_C(0x000D48)}, - {RUNE_C(0x000D4A), RUNE_C(0x000D4E)}, - {RUNE_C(0x000D54), RUNE_C(0x000D57)}, - {RUNE_C(0x000D5F), RUNE_C(0x000D63)}, - {RUNE_C(0x000D66), RUNE_C(0x000D6F)}, - {RUNE_C(0x000D7A), RUNE_C(0x000D7F)}, - {RUNE_C(0x000D81), RUNE_C(0x000D83)}, - {RUNE_C(0x000D85), RUNE_C(0x000D96)}, - {RUNE_C(0x000D9A), RUNE_C(0x000DB1)}, - {RUNE_C(0x000DB3), RUNE_C(0x000DBB)}, - {RUNE_C(0x000DBD), RUNE_C(0x000DBD)}, - {RUNE_C(0x000DC0), RUNE_C(0x000DC6)}, - {RUNE_C(0x000DCA), RUNE_C(0x000DCA)}, - {RUNE_C(0x000DCF), RUNE_C(0x000DD4)}, - {RUNE_C(0x000DD6), RUNE_C(0x000DD6)}, - {RUNE_C(0x000DD8), RUNE_C(0x000DDF)}, - {RUNE_C(0x000DE6), RUNE_C(0x000DEF)}, - {RUNE_C(0x000DF2), RUNE_C(0x000DF3)}, - {RUNE_C(0x000E01), RUNE_C(0x000E3A)}, - {RUNE_C(0x000E40), RUNE_C(0x000E4E)}, - {RUNE_C(0x000E50), RUNE_C(0x000E59)}, - {RUNE_C(0x000E81), RUNE_C(0x000E82)}, - {RUNE_C(0x000E84), RUNE_C(0x000E84)}, - {RUNE_C(0x000E86), RUNE_C(0x000E8A)}, - {RUNE_C(0x000E8C), RUNE_C(0x000EA3)}, - {RUNE_C(0x000EA5), RUNE_C(0x000EA5)}, - {RUNE_C(0x000EA7), RUNE_C(0x000EBD)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000EC8), RUNE_C(0x000ECE)}, - {RUNE_C(0x000ED0), RUNE_C(0x000ED9)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDF)}, - {RUNE_C(0x000F00), RUNE_C(0x000F00)}, - {RUNE_C(0x000F18), RUNE_C(0x000F19)}, - {RUNE_C(0x000F20), RUNE_C(0x000F29)}, - {RUNE_C(0x000F35), RUNE_C(0x000F35)}, - {RUNE_C(0x000F37), RUNE_C(0x000F37)}, - {RUNE_C(0x000F39), RUNE_C(0x000F39)}, - {RUNE_C(0x000F3E), RUNE_C(0x000F47)}, - {RUNE_C(0x000F49), RUNE_C(0x000F6C)}, - {RUNE_C(0x000F71), RUNE_C(0x000F84)}, - {RUNE_C(0x000F86), RUNE_C(0x000F97)}, - {RUNE_C(0x000F99), RUNE_C(0x000FBC)}, - {RUNE_C(0x000FC6), RUNE_C(0x000FC6)}, - {RUNE_C(0x001000), RUNE_C(0x001049)}, - {RUNE_C(0x001050), RUNE_C(0x00109D)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x001248)}, - {RUNE_C(0x00124A), RUNE_C(0x00124D)}, - {RUNE_C(0x001250), RUNE_C(0x001256)}, - {RUNE_C(0x001258), RUNE_C(0x001258)}, - {RUNE_C(0x00125A), RUNE_C(0x00125D)}, - {RUNE_C(0x001260), RUNE_C(0x001288)}, - {RUNE_C(0x00128A), RUNE_C(0x00128D)}, - {RUNE_C(0x001290), RUNE_C(0x0012B0)}, - {RUNE_C(0x0012B2), RUNE_C(0x0012B5)}, - {RUNE_C(0x0012B8), RUNE_C(0x0012BE)}, - {RUNE_C(0x0012C0), RUNE_C(0x0012C0)}, - {RUNE_C(0x0012C2), RUNE_C(0x0012C5)}, - {RUNE_C(0x0012C8), RUNE_C(0x0012D6)}, - {RUNE_C(0x0012D8), RUNE_C(0x001310)}, - {RUNE_C(0x001312), RUNE_C(0x001315)}, - {RUNE_C(0x001318), RUNE_C(0x00135A)}, - {RUNE_C(0x00135D), RUNE_C(0x00135F)}, - {RUNE_C(0x001369), RUNE_C(0x001371)}, - {RUNE_C(0x001380), RUNE_C(0x00138F)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001401), RUNE_C(0x00166C)}, - {RUNE_C(0x00166F), RUNE_C(0x00167F)}, - {RUNE_C(0x001681), RUNE_C(0x00169A)}, - {RUNE_C(0x0016A0), RUNE_C(0x0016EA)}, - {RUNE_C(0x0016EE), RUNE_C(0x0016F8)}, - {RUNE_C(0x001700), RUNE_C(0x001715)}, - {RUNE_C(0x00171F), RUNE_C(0x001734)}, - {RUNE_C(0x001740), RUNE_C(0x001753)}, - {RUNE_C(0x001760), RUNE_C(0x00176C)}, - {RUNE_C(0x00176E), RUNE_C(0x001770)}, - {RUNE_C(0x001772), RUNE_C(0x001773)}, - {RUNE_C(0x001780), RUNE_C(0x0017D3)}, - {RUNE_C(0x0017D7), RUNE_C(0x0017D7)}, - {RUNE_C(0x0017DC), RUNE_C(0x0017DD)}, - {RUNE_C(0x0017E0), RUNE_C(0x0017E9)}, - {RUNE_C(0x00180B), RUNE_C(0x00180D)}, - {RUNE_C(0x00180F), RUNE_C(0x001819)}, - {RUNE_C(0x001820), RUNE_C(0x001878)}, - {RUNE_C(0x001880), RUNE_C(0x0018AA)}, - {RUNE_C(0x0018B0), RUNE_C(0x0018F5)}, - {RUNE_C(0x001900), RUNE_C(0x00191E)}, - {RUNE_C(0x001920), RUNE_C(0x00192B)}, - {RUNE_C(0x001930), RUNE_C(0x00193B)}, - {RUNE_C(0x001946), RUNE_C(0x00196D)}, - {RUNE_C(0x001970), RUNE_C(0x001974)}, - {RUNE_C(0x001980), RUNE_C(0x0019AB)}, - {RUNE_C(0x0019B0), RUNE_C(0x0019C9)}, - {RUNE_C(0x0019D0), RUNE_C(0x0019DA)}, - {RUNE_C(0x001A00), RUNE_C(0x001A1B)}, - {RUNE_C(0x001A20), RUNE_C(0x001A5E)}, - {RUNE_C(0x001A60), RUNE_C(0x001A7C)}, - {RUNE_C(0x001A7F), RUNE_C(0x001A89)}, - {RUNE_C(0x001A90), RUNE_C(0x001A99)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001AB0), RUNE_C(0x001ABD)}, - {RUNE_C(0x001ABF), RUNE_C(0x001ACE)}, - {RUNE_C(0x001B00), RUNE_C(0x001B4C)}, - {RUNE_C(0x001B50), RUNE_C(0x001B59)}, - {RUNE_C(0x001B6B), RUNE_C(0x001B73)}, - {RUNE_C(0x001B80), RUNE_C(0x001BF3)}, - {RUNE_C(0x001C00), RUNE_C(0x001C37)}, - {RUNE_C(0x001C40), RUNE_C(0x001C49)}, - {RUNE_C(0x001C4D), RUNE_C(0x001C7D)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001CD0), RUNE_C(0x001CD2)}, - {RUNE_C(0x001CD4), RUNE_C(0x001CFA)}, - {RUNE_C(0x001D00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x00200C), RUNE_C(0x00200D)}, - {RUNE_C(0x00203F), RUNE_C(0x002040)}, - {RUNE_C(0x002054), RUNE_C(0x002054)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x0020D0), RUNE_C(0x0020DC)}, - {RUNE_C(0x0020E1), RUNE_C(0x0020E1)}, - {RUNE_C(0x0020E5), RUNE_C(0x0020F0)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002118), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x002188)}, - {RUNE_C(0x002C00), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x002D30), RUNE_C(0x002D67)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002D7F), RUNE_C(0x002D96)}, - {RUNE_C(0x002DA0), RUNE_C(0x002DA6)}, - {RUNE_C(0x002DA8), RUNE_C(0x002DAE)}, - {RUNE_C(0x002DB0), RUNE_C(0x002DB6)}, - {RUNE_C(0x002DB8), RUNE_C(0x002DBE)}, - {RUNE_C(0x002DC0), RUNE_C(0x002DC6)}, - {RUNE_C(0x002DC8), RUNE_C(0x002DCE)}, - {RUNE_C(0x002DD0), RUNE_C(0x002DD6)}, - {RUNE_C(0x002DD8), RUNE_C(0x002DDE)}, - {RUNE_C(0x002DE0), RUNE_C(0x002DFF)}, - {RUNE_C(0x003005), RUNE_C(0x003007)}, - {RUNE_C(0x003021), RUNE_C(0x00302F)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x003038), RUNE_C(0x00303C)}, - {RUNE_C(0x003041), RUNE_C(0x003096)}, - {RUNE_C(0x003099), RUNE_C(0x00309F)}, - {RUNE_C(0x0030A1), RUNE_C(0x0030FF)}, - {RUNE_C(0x003105), RUNE_C(0x00312F)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x0031A0), RUNE_C(0x0031BF)}, - {RUNE_C(0x0031F0), RUNE_C(0x0031FF)}, - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x00A48C)}, - {RUNE_C(0x00A4D0), RUNE_C(0x00A4FD)}, - {RUNE_C(0x00A500), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A610), RUNE_C(0x00A62B)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66F)}, - {RUNE_C(0x00A674), RUNE_C(0x00A67D)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A6F1)}, - {RUNE_C(0x00A717), RUNE_C(0x00A71F)}, - {RUNE_C(0x00A722), RUNE_C(0x00A788)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A827)}, - {RUNE_C(0x00A82C), RUNE_C(0x00A82C)}, - {RUNE_C(0x00A840), RUNE_C(0x00A873)}, - {RUNE_C(0x00A880), RUNE_C(0x00A8C5)}, - {RUNE_C(0x00A8D0), RUNE_C(0x00A8D9)}, - {RUNE_C(0x00A8E0), RUNE_C(0x00A8F7)}, - {RUNE_C(0x00A8FB), RUNE_C(0x00A8FB)}, - {RUNE_C(0x00A8FD), RUNE_C(0x00A92D)}, - {RUNE_C(0x00A930), RUNE_C(0x00A953)}, - {RUNE_C(0x00A960), RUNE_C(0x00A97C)}, - {RUNE_C(0x00A980), RUNE_C(0x00A9C0)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9D9)}, - {RUNE_C(0x00A9E0), RUNE_C(0x00A9FE)}, - {RUNE_C(0x00AA00), RUNE_C(0x00AA36)}, - {RUNE_C(0x00AA40), RUNE_C(0x00AA4D)}, - {RUNE_C(0x00AA50), RUNE_C(0x00AA59)}, - {RUNE_C(0x00AA60), RUNE_C(0x00AA76)}, - {RUNE_C(0x00AA7A), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AADB), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAE0), RUNE_C(0x00AAEF)}, - {RUNE_C(0x00AAF2), RUNE_C(0x00AAF6)}, - {RUNE_C(0x00AB01), RUNE_C(0x00AB06)}, - {RUNE_C(0x00AB09), RUNE_C(0x00AB0E)}, - {RUNE_C(0x00AB11), RUNE_C(0x00AB16)}, - {RUNE_C(0x00AB20), RUNE_C(0x00AB26)}, - {RUNE_C(0x00AB28), RUNE_C(0x00AB2E)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABEA)}, - {RUNE_C(0x00ABEC), RUNE_C(0x00ABED)}, - {RUNE_C(0x00ABF0), RUNE_C(0x00ABF9)}, - {RUNE_C(0x00AC00), RUNE_C(0x00D7A3)}, - {RUNE_C(0x00D7B0), RUNE_C(0x00D7C6)}, - {RUNE_C(0x00D7CB), RUNE_C(0x00D7FB)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB28)}, - {RUNE_C(0x00FB2A), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBB1)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FD3D)}, - {RUNE_C(0x00FD50), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDFB)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE0F)}, - {RUNE_C(0x00FE20), RUNE_C(0x00FE2F)}, - {RUNE_C(0x00FE33), RUNE_C(0x00FE34)}, - {RUNE_C(0x00FE4D), RUNE_C(0x00FE4F)}, - {RUNE_C(0x00FE70), RUNE_C(0x00FE74)}, - {RUNE_C(0x00FE76), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FF10), RUNE_C(0x00FF19)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF3F), RUNE_C(0x00FF3F)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x00FF65), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x010000), RUNE_C(0x01000B)}, - {RUNE_C(0x01000D), RUNE_C(0x010026)}, - {RUNE_C(0x010028), RUNE_C(0x01003A)}, - {RUNE_C(0x01003C), RUNE_C(0x01003D)}, - {RUNE_C(0x01003F), RUNE_C(0x01004D)}, - {RUNE_C(0x010050), RUNE_C(0x01005D)}, - {RUNE_C(0x010080), RUNE_C(0x0100FA)}, - {RUNE_C(0x010140), RUNE_C(0x010174)}, - {RUNE_C(0x0101FD), RUNE_C(0x0101FD)}, - {RUNE_C(0x010280), RUNE_C(0x01029C)}, - {RUNE_C(0x0102A0), RUNE_C(0x0102D0)}, - {RUNE_C(0x0102E0), RUNE_C(0x0102E0)}, - {RUNE_C(0x010300), RUNE_C(0x01031F)}, - {RUNE_C(0x01032D), RUNE_C(0x01034A)}, - {RUNE_C(0x010350), RUNE_C(0x01037A)}, - {RUNE_C(0x010380), RUNE_C(0x01039D)}, - {RUNE_C(0x0103A0), RUNE_C(0x0103C3)}, - {RUNE_C(0x0103C8), RUNE_C(0x0103CF)}, - {RUNE_C(0x0103D1), RUNE_C(0x0103D5)}, - {RUNE_C(0x010400), RUNE_C(0x01049D)}, - {RUNE_C(0x0104A0), RUNE_C(0x0104A9)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010500), RUNE_C(0x010527)}, - {RUNE_C(0x010530), RUNE_C(0x010563)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010600), RUNE_C(0x010736)}, - {RUNE_C(0x010740), RUNE_C(0x010755)}, - {RUNE_C(0x010760), RUNE_C(0x010767)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010800), RUNE_C(0x010805)}, - {RUNE_C(0x010808), RUNE_C(0x010808)}, - {RUNE_C(0x01080A), RUNE_C(0x010835)}, - {RUNE_C(0x010837), RUNE_C(0x010838)}, - {RUNE_C(0x01083C), RUNE_C(0x01083C)}, - {RUNE_C(0x01083F), RUNE_C(0x010855)}, - {RUNE_C(0x010860), RUNE_C(0x010876)}, - {RUNE_C(0x010880), RUNE_C(0x01089E)}, - {RUNE_C(0x0108E0), RUNE_C(0x0108F2)}, - {RUNE_C(0x0108F4), RUNE_C(0x0108F5)}, - {RUNE_C(0x010900), RUNE_C(0x010915)}, - {RUNE_C(0x010920), RUNE_C(0x010939)}, - {RUNE_C(0x010980), RUNE_C(0x0109B7)}, - {RUNE_C(0x0109BE), RUNE_C(0x0109BF)}, - {RUNE_C(0x010A00), RUNE_C(0x010A03)}, - {RUNE_C(0x010A05), RUNE_C(0x010A06)}, - {RUNE_C(0x010A0C), RUNE_C(0x010A13)}, - {RUNE_C(0x010A15), RUNE_C(0x010A17)}, - {RUNE_C(0x010A19), RUNE_C(0x010A35)}, - {RUNE_C(0x010A38), RUNE_C(0x010A3A)}, - {RUNE_C(0x010A3F), RUNE_C(0x010A3F)}, - {RUNE_C(0x010A60), RUNE_C(0x010A7C)}, - {RUNE_C(0x010A80), RUNE_C(0x010A9C)}, - {RUNE_C(0x010AC0), RUNE_C(0x010AC7)}, - {RUNE_C(0x010AC9), RUNE_C(0x010AE6)}, - {RUNE_C(0x010B00), RUNE_C(0x010B35)}, - {RUNE_C(0x010B40), RUNE_C(0x010B55)}, - {RUNE_C(0x010B60), RUNE_C(0x010B72)}, - {RUNE_C(0x010B80), RUNE_C(0x010B91)}, - {RUNE_C(0x010C00), RUNE_C(0x010C48)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x010D00), RUNE_C(0x010D27)}, - {RUNE_C(0x010D30), RUNE_C(0x010D39)}, - {RUNE_C(0x010E80), RUNE_C(0x010EA9)}, - {RUNE_C(0x010EAB), RUNE_C(0x010EAC)}, - {RUNE_C(0x010EB0), RUNE_C(0x010EB1)}, - {RUNE_C(0x010EFD), RUNE_C(0x010F1C)}, - {RUNE_C(0x010F27), RUNE_C(0x010F27)}, - {RUNE_C(0x010F30), RUNE_C(0x010F50)}, - {RUNE_C(0x010F70), RUNE_C(0x010F85)}, - {RUNE_C(0x010FB0), RUNE_C(0x010FC4)}, - {RUNE_C(0x010FE0), RUNE_C(0x010FF6)}, - {RUNE_C(0x011000), RUNE_C(0x011046)}, - {RUNE_C(0x011066), RUNE_C(0x011075)}, - {RUNE_C(0x01107F), RUNE_C(0x0110BA)}, - {RUNE_C(0x0110C2), RUNE_C(0x0110C2)}, - {RUNE_C(0x0110D0), RUNE_C(0x0110E8)}, - {RUNE_C(0x0110F0), RUNE_C(0x0110F9)}, - {RUNE_C(0x011100), RUNE_C(0x011134)}, - {RUNE_C(0x011136), RUNE_C(0x01113F)}, - {RUNE_C(0x011144), RUNE_C(0x011147)}, - {RUNE_C(0x011150), RUNE_C(0x011173)}, - {RUNE_C(0x011176), RUNE_C(0x011176)}, - {RUNE_C(0x011180), RUNE_C(0x0111C4)}, - {RUNE_C(0x0111C9), RUNE_C(0x0111CC)}, - {RUNE_C(0x0111CE), RUNE_C(0x0111DA)}, - {RUNE_C(0x0111DC), RUNE_C(0x0111DC)}, - {RUNE_C(0x011200), RUNE_C(0x011211)}, - {RUNE_C(0x011213), RUNE_C(0x011237)}, - {RUNE_C(0x01123E), RUNE_C(0x011241)}, - {RUNE_C(0x011280), RUNE_C(0x011286)}, - {RUNE_C(0x011288), RUNE_C(0x011288)}, - {RUNE_C(0x01128A), RUNE_C(0x01128D)}, - {RUNE_C(0x01128F), RUNE_C(0x01129D)}, - {RUNE_C(0x01129F), RUNE_C(0x0112A8)}, - {RUNE_C(0x0112B0), RUNE_C(0x0112EA)}, - {RUNE_C(0x0112F0), RUNE_C(0x0112F9)}, - {RUNE_C(0x011300), RUNE_C(0x011303)}, - {RUNE_C(0x011305), RUNE_C(0x01130C)}, - {RUNE_C(0x01130F), RUNE_C(0x011310)}, - {RUNE_C(0x011313), RUNE_C(0x011328)}, - {RUNE_C(0x01132A), RUNE_C(0x011330)}, - {RUNE_C(0x011332), RUNE_C(0x011333)}, - {RUNE_C(0x011335), RUNE_C(0x011339)}, - {RUNE_C(0x01133B), RUNE_C(0x011344)}, - {RUNE_C(0x011347), RUNE_C(0x011348)}, - {RUNE_C(0x01134B), RUNE_C(0x01134D)}, - {RUNE_C(0x011350), RUNE_C(0x011350)}, - {RUNE_C(0x011357), RUNE_C(0x011357)}, - {RUNE_C(0x01135D), RUNE_C(0x011363)}, - {RUNE_C(0x011366), RUNE_C(0x01136C)}, - {RUNE_C(0x011370), RUNE_C(0x011374)}, - {RUNE_C(0x011400), RUNE_C(0x01144A)}, - {RUNE_C(0x011450), RUNE_C(0x011459)}, - {RUNE_C(0x01145E), RUNE_C(0x011461)}, - {RUNE_C(0x011480), RUNE_C(0x0114C5)}, - {RUNE_C(0x0114C7), RUNE_C(0x0114C7)}, - {RUNE_C(0x0114D0), RUNE_C(0x0114D9)}, - {RUNE_C(0x011580), RUNE_C(0x0115B5)}, - {RUNE_C(0x0115B8), RUNE_C(0x0115C0)}, - {RUNE_C(0x0115D8), RUNE_C(0x0115DD)}, - {RUNE_C(0x011600), RUNE_C(0x011640)}, - {RUNE_C(0x011644), RUNE_C(0x011644)}, - {RUNE_C(0x011650), RUNE_C(0x011659)}, - {RUNE_C(0x011680), RUNE_C(0x0116B8)}, - {RUNE_C(0x0116C0), RUNE_C(0x0116C9)}, - {RUNE_C(0x011700), RUNE_C(0x01171A)}, - {RUNE_C(0x01171D), RUNE_C(0x01172B)}, - {RUNE_C(0x011730), RUNE_C(0x011739)}, - {RUNE_C(0x011740), RUNE_C(0x011746)}, - {RUNE_C(0x011800), RUNE_C(0x01183A)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118E9)}, - {RUNE_C(0x0118FF), RUNE_C(0x011906)}, - {RUNE_C(0x011909), RUNE_C(0x011909)}, - {RUNE_C(0x01190C), RUNE_C(0x011913)}, - {RUNE_C(0x011915), RUNE_C(0x011916)}, - {RUNE_C(0x011918), RUNE_C(0x011935)}, - {RUNE_C(0x011937), RUNE_C(0x011938)}, - {RUNE_C(0x01193B), RUNE_C(0x011943)}, - {RUNE_C(0x011950), RUNE_C(0x011959)}, - {RUNE_C(0x0119A0), RUNE_C(0x0119A7)}, - {RUNE_C(0x0119AA), RUNE_C(0x0119D7)}, - {RUNE_C(0x0119DA), RUNE_C(0x0119E1)}, - {RUNE_C(0x0119E3), RUNE_C(0x0119E4)}, - {RUNE_C(0x011A00), RUNE_C(0x011A3E)}, - {RUNE_C(0x011A47), RUNE_C(0x011A47)}, - {RUNE_C(0x011A50), RUNE_C(0x011A99)}, - {RUNE_C(0x011A9D), RUNE_C(0x011A9D)}, - {RUNE_C(0x011AB0), RUNE_C(0x011AF8)}, - {RUNE_C(0x011C00), RUNE_C(0x011C08)}, - {RUNE_C(0x011C0A), RUNE_C(0x011C36)}, - {RUNE_C(0x011C38), RUNE_C(0x011C40)}, - {RUNE_C(0x011C50), RUNE_C(0x011C59)}, - {RUNE_C(0x011C72), RUNE_C(0x011C8F)}, - {RUNE_C(0x011C92), RUNE_C(0x011CA7)}, - {RUNE_C(0x011CA9), RUNE_C(0x011CB6)}, - {RUNE_C(0x011D00), RUNE_C(0x011D06)}, - {RUNE_C(0x011D08), RUNE_C(0x011D09)}, - {RUNE_C(0x011D0B), RUNE_C(0x011D36)}, - {RUNE_C(0x011D3A), RUNE_C(0x011D3A)}, - {RUNE_C(0x011D3C), RUNE_C(0x011D3D)}, - {RUNE_C(0x011D3F), RUNE_C(0x011D47)}, - {RUNE_C(0x011D50), RUNE_C(0x011D59)}, - {RUNE_C(0x011D60), RUNE_C(0x011D65)}, - {RUNE_C(0x011D67), RUNE_C(0x011D68)}, - {RUNE_C(0x011D6A), RUNE_C(0x011D8E)}, - {RUNE_C(0x011D90), RUNE_C(0x011D91)}, - {RUNE_C(0x011D93), RUNE_C(0x011D98)}, - {RUNE_C(0x011DA0), RUNE_C(0x011DA9)}, - {RUNE_C(0x011EE0), RUNE_C(0x011EF6)}, - {RUNE_C(0x011F00), RUNE_C(0x011F10)}, - {RUNE_C(0x011F12), RUNE_C(0x011F3A)}, - {RUNE_C(0x011F3E), RUNE_C(0x011F42)}, - {RUNE_C(0x011F50), RUNE_C(0x011F59)}, - {RUNE_C(0x011FB0), RUNE_C(0x011FB0)}, - {RUNE_C(0x012000), RUNE_C(0x012399)}, - {RUNE_C(0x012400), RUNE_C(0x01246E)}, - {RUNE_C(0x012480), RUNE_C(0x012543)}, - {RUNE_C(0x012F90), RUNE_C(0x012FF0)}, - {RUNE_C(0x013000), RUNE_C(0x01342F)}, - {RUNE_C(0x013440), RUNE_C(0x013455)}, - {RUNE_C(0x014400), RUNE_C(0x014646)}, - {RUNE_C(0x016800), RUNE_C(0x016A38)}, - {RUNE_C(0x016A40), RUNE_C(0x016A5E)}, - {RUNE_C(0x016A60), RUNE_C(0x016A69)}, - {RUNE_C(0x016A70), RUNE_C(0x016ABE)}, - {RUNE_C(0x016AC0), RUNE_C(0x016AC9)}, - {RUNE_C(0x016AD0), RUNE_C(0x016AED)}, - {RUNE_C(0x016AF0), RUNE_C(0x016AF4)}, - {RUNE_C(0x016B00), RUNE_C(0x016B36)}, - {RUNE_C(0x016B40), RUNE_C(0x016B43)}, - {RUNE_C(0x016B50), RUNE_C(0x016B59)}, - {RUNE_C(0x016B63), RUNE_C(0x016B77)}, - {RUNE_C(0x016B7D), RUNE_C(0x016B8F)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x016F00), RUNE_C(0x016F4A)}, - {RUNE_C(0x016F4F), RUNE_C(0x016F87)}, - {RUNE_C(0x016F8F), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE4)}, - {RUNE_C(0x016FF0), RUNE_C(0x016FF1)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01B000), RUNE_C(0x01B122)}, - {RUNE_C(0x01B132), RUNE_C(0x01B132)}, - {RUNE_C(0x01B150), RUNE_C(0x01B152)}, - {RUNE_C(0x01B155), RUNE_C(0x01B155)}, - {RUNE_C(0x01B164), RUNE_C(0x01B167)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x01BC00), RUNE_C(0x01BC6A)}, - {RUNE_C(0x01BC70), RUNE_C(0x01BC7C)}, - {RUNE_C(0x01BC80), RUNE_C(0x01BC88)}, - {RUNE_C(0x01BC90), RUNE_C(0x01BC99)}, - {RUNE_C(0x01BC9D), RUNE_C(0x01BC9E)}, - {RUNE_C(0x01CF00), RUNE_C(0x01CF2D)}, - {RUNE_C(0x01CF30), RUNE_C(0x01CF46)}, - {RUNE_C(0x01D165), RUNE_C(0x01D169)}, - {RUNE_C(0x01D16D), RUNE_C(0x01D172)}, - {RUNE_C(0x01D17B), RUNE_C(0x01D182)}, - {RUNE_C(0x01D185), RUNE_C(0x01D18B)}, - {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD)}, - {RUNE_C(0x01D242), RUNE_C(0x01D244)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D734)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01D7CE), RUNE_C(0x01D7FF)}, - {RUNE_C(0x01DA00), RUNE_C(0x01DA36)}, - {RUNE_C(0x01DA3B), RUNE_C(0x01DA6C)}, - {RUNE_C(0x01DA75), RUNE_C(0x01DA75)}, - {RUNE_C(0x01DA84), RUNE_C(0x01DA84)}, - {RUNE_C(0x01DA9B), RUNE_C(0x01DA9F)}, - {RUNE_C(0x01DAA1), RUNE_C(0x01DAAF)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E000), RUNE_C(0x01E006)}, - {RUNE_C(0x01E008), RUNE_C(0x01E018)}, - {RUNE_C(0x01E01B), RUNE_C(0x01E021)}, - {RUNE_C(0x01E023), RUNE_C(0x01E024)}, - {RUNE_C(0x01E026), RUNE_C(0x01E02A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E08F), RUNE_C(0x01E08F)}, - {RUNE_C(0x01E100), RUNE_C(0x01E12C)}, - {RUNE_C(0x01E130), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E140), RUNE_C(0x01E149)}, - {RUNE_C(0x01E14E), RUNE_C(0x01E14E)}, - {RUNE_C(0x01E290), RUNE_C(0x01E2AE)}, - {RUNE_C(0x01E2C0), RUNE_C(0x01E2F9)}, - {RUNE_C(0x01E4D0), RUNE_C(0x01E4F9)}, - {RUNE_C(0x01E7E0), RUNE_C(0x01E7E6)}, - {RUNE_C(0x01E7E8), RUNE_C(0x01E7EB)}, - {RUNE_C(0x01E7ED), RUNE_C(0x01E7EE)}, - {RUNE_C(0x01E7F0), RUNE_C(0x01E7FE)}, - {RUNE_C(0x01E800), RUNE_C(0x01E8C4)}, - {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6)}, - {RUNE_C(0x01E900), RUNE_C(0x01E94B)}, - {RUNE_C(0x01E950), RUNE_C(0x01E959)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x01FBF0), RUNE_C(0x01FBF9)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, - {RUNE_C(0x0E0100), RUNE_C(0x0E01EF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xA0, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xBC}, + {0xC0, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0xFB, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xB6, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00}, + {0x00, 0x00, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0x9F, 0xFF, 0xFD, 0xFF, 0x9F}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x24}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x07, 0xFF, 0xFF}, + {0xFF, 0x7E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0xFF}, + {0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xF3, + 0x9F, 0x79, 0x80, 0xB0, 0xCF, 0xFF, 0x03, 0x50}, + {0xEE, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xD3, + 0x87, 0x39, 0x02, 0x5E, 0xC0, 0xFF, 0x3F, 0x00}, + {0xEE, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, + 0xBF, 0x3B, 0x01, 0x00, 0xCF, 0xFF, 0x00, 0xFE}, + {0xEE, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, + 0x9F, 0x39, 0xE0, 0xB0, 0xCF, 0xFF, 0x02, 0x00}, + {0xEC, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0xC3, + 0xC7, 0x3D, 0x81, 0x00, 0xC0, 0xFF, 0x00, 0x00}, + {0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xF3, + 0xDF, 0x3D, 0x60, 0x27, 0xCF, 0xFF, 0x00, 0x00}, + {0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, + 0xDF, 0x3D, 0x60, 0x60, 0xCF, 0xFF, 0x0E, 0x00}, + {0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xDF, 0x7D, 0xF0, 0x80, 0xCF, 0xFF, 0x00, 0xFC}, + {0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, + 0x7F, 0x84, 0x5F, 0xFF, 0xC0, 0xFF, 0x0C, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0x7F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, + 0x5F, 0x7F, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x03, 0xFF, 0x03, 0xA0, 0xC2, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF}, + {0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, + 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0xFE, 0x03, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF}, + {0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x01}, + {0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x1F, 0x00, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xDF, 0x0D, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x8F, 0x30, 0xFF, 0x03, 0x00, 0x00}, + {0x00, 0xB8, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFF, 0x0F, + 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F}, + {0xFF, 0x03, 0xFF, 0x03, 0x80, 0x00, 0xFF, 0xBF, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0xFF, 0x03, 0x00, 0xF8, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x80}, + {0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x1F, 0xE2, 0xFF, 0x01, 0x00}, + {0x84, 0xFC, 0x2F, 0x3F, 0x50, 0xFD, 0xFF, 0xF3, + 0xE0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x80}, + {0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xE0, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3E, 0x1F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xBF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00}, + {0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xE8}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x80, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, 0x7F, 0xFC}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x38, 0xFF, 0xFF, 0x7C, 0x00}, + {0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xE0, 0xFF, 0xFD, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x00, + 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0x00, 0x00, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x87, + 0xFE, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, + 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7}, + {0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0x00}, + {0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x6F, 0xF0, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x87, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x80}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0xDE, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x03}, + {0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xFB, + 0x9F, 0x39, 0x81, 0xE0, 0xCF, 0x1F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xC3, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, + 0x01, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x11, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F, 0xFF, 0x03, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x80}, + {0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF9, + 0x0F, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0x1B, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, + 0x01, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xB4, + 0xFF, 0x00, 0xFF, 0x03, 0xBF, 0xFD, 0xFF, 0xFF}, + {0xFF, 0x7F, 0xFB, 0x01, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0x07, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0x0F, 0x00, 0xFF, 0x03, 0xF8, 0xFF, 0xFF, 0xE0}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0x63, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0xF8}, + {0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00}, + {0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x3F, + 0xFF, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E}, + {0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_idc(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_ideo.c b/lib/unicode/prop/uprop_is_ideo.c index 611a77a..f63afcb 100644 --- a/lib/unicode/prop/uprop_is_ideo.c +++ b/lib/unicode/prop/uprop_is_ideo.c @@ -1,42 +1,368 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x003006), RUNE_C(0x003007)}, - {RUNE_C(0x003021), RUNE_C(0x003029)}, - {RUNE_C(0x003038), RUNE_C(0x00303A)}, - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x009FFF)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x016FE4), RUNE_C(0x016FE4)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 7, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 11, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 12, 13, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 14, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 2, 2, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 17, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xC0, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_ideo(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_ids.c b/lib/unicode/prop/uprop_is_ids.c index a0ba82a..fc471e5 100644 --- a/lib/unicode/prop/uprop_is_ids.c +++ b/lib/unicode/prop/uprop_is_ids.c @@ -1,681 +1,928 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 50, 2, 2, 51, 52, + 53, 54, 55, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 58, 59, 60, 57, 57, 57, 57, + 61, 62, 63, 64, 57, 57, 57, 57, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 2, 2, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 2, 2, 79, 80, 81, 82, 2, 2, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 57, 57, 92, 93, 94, 2, 95, 96, 97, 2, 2, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 57, 57, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 57, 121, 122, 57, 123, 124, 125, 126, 57, + 127, 128, 129, 130, 131, 132, 57, 57, 133, 134, 135, 136, 57, 137, 138, 139, + 2, 2, 2, 2, 2, 2, 2, 140, 141, 2, 142, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 143, + 2, 2, 2, 2, 2, 2, 2, 2, 144, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 2, 2, 145, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 146, 147, 148, 134, 57, 57, 57, 57, 149, 57, 150, 151, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 152, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 153, 56, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 154, + 2, 2, 155, 2, 2, 156, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 157, 158, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 159, 160, 161, 2, 2, 162, 163, 164, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 165, 57, + 166, 57, 167, 57, 57, 168, 57, 57, 57, 169, 57, 57, 57, 57, 57, 170, + 2, 171, 172, 57, 57, 57, 57, 57, 57, 57, 57, 57, 173, 174, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 175, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 176, 2, + 177, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 178, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 179, 2, 2, 2, 2, 180, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 181, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 182, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 183, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002C6), RUNE_C(0x0002D1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x0002EC), RUNE_C(0x0002EC)}, - {RUNE_C(0x0002EE), RUNE_C(0x0002EE)}, - {RUNE_C(0x000370), RUNE_C(0x000374)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037A), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x000481)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x0005D0), RUNE_C(0x0005EA)}, - {RUNE_C(0x0005EF), RUNE_C(0x0005F2)}, - {RUNE_C(0x000620), RUNE_C(0x00064A)}, - {RUNE_C(0x00066E), RUNE_C(0x00066F)}, - {RUNE_C(0x000671), RUNE_C(0x0006D3)}, - {RUNE_C(0x0006D5), RUNE_C(0x0006D5)}, - {RUNE_C(0x0006E5), RUNE_C(0x0006E6)}, - {RUNE_C(0x0006EE), RUNE_C(0x0006EF)}, - {RUNE_C(0x0006FA), RUNE_C(0x0006FC)}, - {RUNE_C(0x0006FF), RUNE_C(0x0006FF)}, - {RUNE_C(0x000710), RUNE_C(0x000710)}, - {RUNE_C(0x000712), RUNE_C(0x00072F)}, - {RUNE_C(0x00074D), RUNE_C(0x0007A5)}, - {RUNE_C(0x0007B1), RUNE_C(0x0007B1)}, - {RUNE_C(0x0007CA), RUNE_C(0x0007EA)}, - {RUNE_C(0x0007F4), RUNE_C(0x0007F5)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x000800), RUNE_C(0x000815)}, - {RUNE_C(0x00081A), RUNE_C(0x00081A)}, - {RUNE_C(0x000824), RUNE_C(0x000824)}, - {RUNE_C(0x000828), RUNE_C(0x000828)}, - {RUNE_C(0x000840), RUNE_C(0x000858)}, - {RUNE_C(0x000860), RUNE_C(0x00086A)}, - {RUNE_C(0x000870), RUNE_C(0x000887)}, - {RUNE_C(0x000889), RUNE_C(0x00088E)}, - {RUNE_C(0x0008A0), RUNE_C(0x0008C9)}, - {RUNE_C(0x000904), RUNE_C(0x000939)}, - {RUNE_C(0x00093D), RUNE_C(0x00093D)}, - {RUNE_C(0x000950), RUNE_C(0x000950)}, - {RUNE_C(0x000958), RUNE_C(0x000961)}, - {RUNE_C(0x000971), RUNE_C(0x000980)}, - {RUNE_C(0x000985), RUNE_C(0x00098C)}, - {RUNE_C(0x00098F), RUNE_C(0x000990)}, - {RUNE_C(0x000993), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BD), RUNE_C(0x0009BD)}, - {RUNE_C(0x0009CE), RUNE_C(0x0009CE)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009E1)}, - {RUNE_C(0x0009F0), RUNE_C(0x0009F1)}, - {RUNE_C(0x0009FC), RUNE_C(0x0009FC)}, - {RUNE_C(0x000A05), RUNE_C(0x000A0A)}, - {RUNE_C(0x000A0F), RUNE_C(0x000A10)}, - {RUNE_C(0x000A13), RUNE_C(0x000A28)}, - {RUNE_C(0x000A2A), RUNE_C(0x000A30)}, - {RUNE_C(0x000A32), RUNE_C(0x000A33)}, - {RUNE_C(0x000A35), RUNE_C(0x000A36)}, - {RUNE_C(0x000A38), RUNE_C(0x000A39)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5C)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000A72), RUNE_C(0x000A74)}, - {RUNE_C(0x000A85), RUNE_C(0x000A8D)}, - {RUNE_C(0x000A8F), RUNE_C(0x000A91)}, - {RUNE_C(0x000A93), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABD), RUNE_C(0x000ABD)}, - {RUNE_C(0x000AD0), RUNE_C(0x000AD0)}, - {RUNE_C(0x000AE0), RUNE_C(0x000AE1)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AF9)}, - {RUNE_C(0x000B05), RUNE_C(0x000B0C)}, - {RUNE_C(0x000B0F), RUNE_C(0x000B10)}, - {RUNE_C(0x000B13), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3D), RUNE_C(0x000B3D)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B61)}, - {RUNE_C(0x000B71), RUNE_C(0x000B71)}, - {RUNE_C(0x000B83), RUNE_C(0x000B83)}, - {RUNE_C(0x000B85), RUNE_C(0x000B8A)}, - {RUNE_C(0x000B8E), RUNE_C(0x000B90)}, - {RUNE_C(0x000B92), RUNE_C(0x000B95)}, - {RUNE_C(0x000B99), RUNE_C(0x000B9A)}, - {RUNE_C(0x000B9C), RUNE_C(0x000B9C)}, - {RUNE_C(0x000B9E), RUNE_C(0x000B9F)}, - {RUNE_C(0x000BA3), RUNE_C(0x000BA4)}, - {RUNE_C(0x000BA8), RUNE_C(0x000BAA)}, - {RUNE_C(0x000BAE), RUNE_C(0x000BB9)}, - {RUNE_C(0x000BD0), RUNE_C(0x000BD0)}, - {RUNE_C(0x000C05), RUNE_C(0x000C0C)}, - {RUNE_C(0x000C0E), RUNE_C(0x000C10)}, - {RUNE_C(0x000C12), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3D), RUNE_C(0x000C3D)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000C5D), RUNE_C(0x000C5D)}, - {RUNE_C(0x000C60), RUNE_C(0x000C61)}, - {RUNE_C(0x000C80), RUNE_C(0x000C80)}, - {RUNE_C(0x000C85), RUNE_C(0x000C8C)}, - {RUNE_C(0x000C8E), RUNE_C(0x000C90)}, - {RUNE_C(0x000C92), RUNE_C(0x000CA8)}, - {RUNE_C(0x000CAA), RUNE_C(0x000CB3)}, - {RUNE_C(0x000CB5), RUNE_C(0x000CB9)}, - {RUNE_C(0x000CBD), RUNE_C(0x000CBD)}, - {RUNE_C(0x000CDD), RUNE_C(0x000CDE)}, - {RUNE_C(0x000CE0), RUNE_C(0x000CE1)}, - {RUNE_C(0x000CF1), RUNE_C(0x000CF2)}, - {RUNE_C(0x000D04), RUNE_C(0x000D0C)}, - {RUNE_C(0x000D0E), RUNE_C(0x000D10)}, - {RUNE_C(0x000D12), RUNE_C(0x000D3A)}, - {RUNE_C(0x000D3D), RUNE_C(0x000D3D)}, - {RUNE_C(0x000D4E), RUNE_C(0x000D4E)}, - {RUNE_C(0x000D54), RUNE_C(0x000D56)}, - {RUNE_C(0x000D5F), RUNE_C(0x000D61)}, - {RUNE_C(0x000D7A), RUNE_C(0x000D7F)}, - {RUNE_C(0x000D85), RUNE_C(0x000D96)}, - {RUNE_C(0x000D9A), RUNE_C(0x000DB1)}, - {RUNE_C(0x000DB3), RUNE_C(0x000DBB)}, - {RUNE_C(0x000DBD), RUNE_C(0x000DBD)}, - {RUNE_C(0x000DC0), RUNE_C(0x000DC6)}, - {RUNE_C(0x000E01), RUNE_C(0x000E30)}, - {RUNE_C(0x000E32), RUNE_C(0x000E33)}, - {RUNE_C(0x000E40), RUNE_C(0x000E46)}, - {RUNE_C(0x000E81), RUNE_C(0x000E82)}, - {RUNE_C(0x000E84), RUNE_C(0x000E84)}, - {RUNE_C(0x000E86), RUNE_C(0x000E8A)}, - {RUNE_C(0x000E8C), RUNE_C(0x000EA3)}, - {RUNE_C(0x000EA5), RUNE_C(0x000EA5)}, - {RUNE_C(0x000EA7), RUNE_C(0x000EB0)}, - {RUNE_C(0x000EB2), RUNE_C(0x000EB3)}, - {RUNE_C(0x000EBD), RUNE_C(0x000EBD)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDF)}, - {RUNE_C(0x000F00), RUNE_C(0x000F00)}, - {RUNE_C(0x000F40), RUNE_C(0x000F47)}, - {RUNE_C(0x000F49), RUNE_C(0x000F6C)}, - {RUNE_C(0x000F88), RUNE_C(0x000F8C)}, - {RUNE_C(0x001000), RUNE_C(0x00102A)}, - {RUNE_C(0x00103F), RUNE_C(0x00103F)}, - {RUNE_C(0x001050), RUNE_C(0x001055)}, - {RUNE_C(0x00105A), RUNE_C(0x00105D)}, - {RUNE_C(0x001061), RUNE_C(0x001061)}, - {RUNE_C(0x001065), RUNE_C(0x001066)}, - {RUNE_C(0x00106E), RUNE_C(0x001070)}, - {RUNE_C(0x001075), RUNE_C(0x001081)}, - {RUNE_C(0x00108E), RUNE_C(0x00108E)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x001248)}, - {RUNE_C(0x00124A), RUNE_C(0x00124D)}, - {RUNE_C(0x001250), RUNE_C(0x001256)}, - {RUNE_C(0x001258), RUNE_C(0x001258)}, - {RUNE_C(0x00125A), RUNE_C(0x00125D)}, - {RUNE_C(0x001260), RUNE_C(0x001288)}, - {RUNE_C(0x00128A), RUNE_C(0x00128D)}, - {RUNE_C(0x001290), RUNE_C(0x0012B0)}, - {RUNE_C(0x0012B2), RUNE_C(0x0012B5)}, - {RUNE_C(0x0012B8), RUNE_C(0x0012BE)}, - {RUNE_C(0x0012C0), RUNE_C(0x0012C0)}, - {RUNE_C(0x0012C2), RUNE_C(0x0012C5)}, - {RUNE_C(0x0012C8), RUNE_C(0x0012D6)}, - {RUNE_C(0x0012D8), RUNE_C(0x001310)}, - {RUNE_C(0x001312), RUNE_C(0x001315)}, - {RUNE_C(0x001318), RUNE_C(0x00135A)}, - {RUNE_C(0x001380), RUNE_C(0x00138F)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001401), RUNE_C(0x00166C)}, - {RUNE_C(0x00166F), RUNE_C(0x00167F)}, - {RUNE_C(0x001681), RUNE_C(0x00169A)}, - {RUNE_C(0x0016A0), RUNE_C(0x0016EA)}, - {RUNE_C(0x0016EE), RUNE_C(0x0016F8)}, - {RUNE_C(0x001700), RUNE_C(0x001711)}, - {RUNE_C(0x00171F), RUNE_C(0x001731)}, - {RUNE_C(0x001740), RUNE_C(0x001751)}, - {RUNE_C(0x001760), RUNE_C(0x00176C)}, - {RUNE_C(0x00176E), RUNE_C(0x001770)}, - {RUNE_C(0x001780), RUNE_C(0x0017B3)}, - {RUNE_C(0x0017D7), RUNE_C(0x0017D7)}, - {RUNE_C(0x0017DC), RUNE_C(0x0017DC)}, - {RUNE_C(0x001820), RUNE_C(0x001878)}, - {RUNE_C(0x001880), RUNE_C(0x0018A8)}, - {RUNE_C(0x0018AA), RUNE_C(0x0018AA)}, - {RUNE_C(0x0018B0), RUNE_C(0x0018F5)}, - {RUNE_C(0x001900), RUNE_C(0x00191E)}, - {RUNE_C(0x001950), RUNE_C(0x00196D)}, - {RUNE_C(0x001970), RUNE_C(0x001974)}, - {RUNE_C(0x001980), RUNE_C(0x0019AB)}, - {RUNE_C(0x0019B0), RUNE_C(0x0019C9)}, - {RUNE_C(0x001A00), RUNE_C(0x001A16)}, - {RUNE_C(0x001A20), RUNE_C(0x001A54)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001B05), RUNE_C(0x001B33)}, - {RUNE_C(0x001B45), RUNE_C(0x001B4C)}, - {RUNE_C(0x001B83), RUNE_C(0x001BA0)}, - {RUNE_C(0x001BAE), RUNE_C(0x001BAF)}, - {RUNE_C(0x001BBA), RUNE_C(0x001BE5)}, - {RUNE_C(0x001C00), RUNE_C(0x001C23)}, - {RUNE_C(0x001C4D), RUNE_C(0x001C4F)}, - {RUNE_C(0x001C5A), RUNE_C(0x001C7D)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001CE9), RUNE_C(0x001CEC)}, - {RUNE_C(0x001CEE), RUNE_C(0x001CF3)}, - {RUNE_C(0x001CF5), RUNE_C(0x001CF6)}, - {RUNE_C(0x001CFA), RUNE_C(0x001CFA)}, - {RUNE_C(0x001D00), RUNE_C(0x001DBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002118), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x002188)}, - {RUNE_C(0x002C00), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x002D30), RUNE_C(0x002D67)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002D80), RUNE_C(0x002D96)}, - {RUNE_C(0x002DA0), RUNE_C(0x002DA6)}, - {RUNE_C(0x002DA8), RUNE_C(0x002DAE)}, - {RUNE_C(0x002DB0), RUNE_C(0x002DB6)}, - {RUNE_C(0x002DB8), RUNE_C(0x002DBE)}, - {RUNE_C(0x002DC0), RUNE_C(0x002DC6)}, - {RUNE_C(0x002DC8), RUNE_C(0x002DCE)}, - {RUNE_C(0x002DD0), RUNE_C(0x002DD6)}, - {RUNE_C(0x002DD8), RUNE_C(0x002DDE)}, - {RUNE_C(0x003005), RUNE_C(0x003007)}, - {RUNE_C(0x003021), RUNE_C(0x003029)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x003038), RUNE_C(0x00303C)}, - {RUNE_C(0x003041), RUNE_C(0x003096)}, - {RUNE_C(0x00309B), RUNE_C(0x00309F)}, - {RUNE_C(0x0030A1), RUNE_C(0x0030FA)}, - {RUNE_C(0x0030FC), RUNE_C(0x0030FF)}, - {RUNE_C(0x003105), RUNE_C(0x00312F)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x0031A0), RUNE_C(0x0031BF)}, - {RUNE_C(0x0031F0), RUNE_C(0x0031FF)}, - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x00A48C)}, - {RUNE_C(0x00A4D0), RUNE_C(0x00A4FD)}, - {RUNE_C(0x00A500), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A610), RUNE_C(0x00A61F)}, - {RUNE_C(0x00A62A), RUNE_C(0x00A62B)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66E)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A6A0), RUNE_C(0x00A6EF)}, - {RUNE_C(0x00A717), RUNE_C(0x00A71F)}, - {RUNE_C(0x00A722), RUNE_C(0x00A788)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A801)}, - {RUNE_C(0x00A803), RUNE_C(0x00A805)}, - {RUNE_C(0x00A807), RUNE_C(0x00A80A)}, - {RUNE_C(0x00A80C), RUNE_C(0x00A822)}, - {RUNE_C(0x00A840), RUNE_C(0x00A873)}, - {RUNE_C(0x00A882), RUNE_C(0x00A8B3)}, - {RUNE_C(0x00A8F2), RUNE_C(0x00A8F7)}, - {RUNE_C(0x00A8FB), RUNE_C(0x00A8FB)}, - {RUNE_C(0x00A8FD), RUNE_C(0x00A8FE)}, - {RUNE_C(0x00A90A), RUNE_C(0x00A925)}, - {RUNE_C(0x00A930), RUNE_C(0x00A946)}, - {RUNE_C(0x00A960), RUNE_C(0x00A97C)}, - {RUNE_C(0x00A984), RUNE_C(0x00A9B2)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9CF)}, - {RUNE_C(0x00A9E0), RUNE_C(0x00A9E4)}, - {RUNE_C(0x00A9E6), RUNE_C(0x00A9EF)}, - {RUNE_C(0x00A9FA), RUNE_C(0x00A9FE)}, - {RUNE_C(0x00AA00), RUNE_C(0x00AA28)}, - {RUNE_C(0x00AA40), RUNE_C(0x00AA42)}, - {RUNE_C(0x00AA44), RUNE_C(0x00AA4B)}, - {RUNE_C(0x00AA60), RUNE_C(0x00AA76)}, - {RUNE_C(0x00AA7A), RUNE_C(0x00AA7A)}, - {RUNE_C(0x00AA7E), RUNE_C(0x00AAAF)}, - {RUNE_C(0x00AAB1), RUNE_C(0x00AAB1)}, - {RUNE_C(0x00AAB5), RUNE_C(0x00AAB6)}, - {RUNE_C(0x00AAB9), RUNE_C(0x00AABD)}, - {RUNE_C(0x00AAC0), RUNE_C(0x00AAC0)}, - {RUNE_C(0x00AAC2), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AADB), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAE0), RUNE_C(0x00AAEA)}, - {RUNE_C(0x00AAF2), RUNE_C(0x00AAF4)}, - {RUNE_C(0x00AB01), RUNE_C(0x00AB06)}, - {RUNE_C(0x00AB09), RUNE_C(0x00AB0E)}, - {RUNE_C(0x00AB11), RUNE_C(0x00AB16)}, - {RUNE_C(0x00AB20), RUNE_C(0x00AB26)}, - {RUNE_C(0x00AB28), RUNE_C(0x00AB2E)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABE2)}, - {RUNE_C(0x00AC00), RUNE_C(0x00D7A3)}, - {RUNE_C(0x00D7B0), RUNE_C(0x00D7C6)}, - {RUNE_C(0x00D7CB), RUNE_C(0x00D7FB)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB1D)}, - {RUNE_C(0x00FB1F), RUNE_C(0x00FB28)}, - {RUNE_C(0x00FB2A), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBB1)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FD3D)}, - {RUNE_C(0x00FD50), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDFB)}, - {RUNE_C(0x00FE70), RUNE_C(0x00FE74)}, - {RUNE_C(0x00FE76), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x00FF66), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x010000), RUNE_C(0x01000B)}, - {RUNE_C(0x01000D), RUNE_C(0x010026)}, - {RUNE_C(0x010028), RUNE_C(0x01003A)}, - {RUNE_C(0x01003C), RUNE_C(0x01003D)}, - {RUNE_C(0x01003F), RUNE_C(0x01004D)}, - {RUNE_C(0x010050), RUNE_C(0x01005D)}, - {RUNE_C(0x010080), RUNE_C(0x0100FA)}, - {RUNE_C(0x010140), RUNE_C(0x010174)}, - {RUNE_C(0x010280), RUNE_C(0x01029C)}, - {RUNE_C(0x0102A0), RUNE_C(0x0102D0)}, - {RUNE_C(0x010300), RUNE_C(0x01031F)}, - {RUNE_C(0x01032D), RUNE_C(0x01034A)}, - {RUNE_C(0x010350), RUNE_C(0x010375)}, - {RUNE_C(0x010380), RUNE_C(0x01039D)}, - {RUNE_C(0x0103A0), RUNE_C(0x0103C3)}, - {RUNE_C(0x0103C8), RUNE_C(0x0103CF)}, - {RUNE_C(0x0103D1), RUNE_C(0x0103D5)}, - {RUNE_C(0x010400), RUNE_C(0x01049D)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010500), RUNE_C(0x010527)}, - {RUNE_C(0x010530), RUNE_C(0x010563)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010600), RUNE_C(0x010736)}, - {RUNE_C(0x010740), RUNE_C(0x010755)}, - {RUNE_C(0x010760), RUNE_C(0x010767)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010800), RUNE_C(0x010805)}, - {RUNE_C(0x010808), RUNE_C(0x010808)}, - {RUNE_C(0x01080A), RUNE_C(0x010835)}, - {RUNE_C(0x010837), RUNE_C(0x010838)}, - {RUNE_C(0x01083C), RUNE_C(0x01083C)}, - {RUNE_C(0x01083F), RUNE_C(0x010855)}, - {RUNE_C(0x010860), RUNE_C(0x010876)}, - {RUNE_C(0x010880), RUNE_C(0x01089E)}, - {RUNE_C(0x0108E0), RUNE_C(0x0108F2)}, - {RUNE_C(0x0108F4), RUNE_C(0x0108F5)}, - {RUNE_C(0x010900), RUNE_C(0x010915)}, - {RUNE_C(0x010920), RUNE_C(0x010939)}, - {RUNE_C(0x010980), RUNE_C(0x0109B7)}, - {RUNE_C(0x0109BE), RUNE_C(0x0109BF)}, - {RUNE_C(0x010A00), RUNE_C(0x010A00)}, - {RUNE_C(0x010A10), RUNE_C(0x010A13)}, - {RUNE_C(0x010A15), RUNE_C(0x010A17)}, - {RUNE_C(0x010A19), RUNE_C(0x010A35)}, - {RUNE_C(0x010A60), RUNE_C(0x010A7C)}, - {RUNE_C(0x010A80), RUNE_C(0x010A9C)}, - {RUNE_C(0x010AC0), RUNE_C(0x010AC7)}, - {RUNE_C(0x010AC9), RUNE_C(0x010AE4)}, - {RUNE_C(0x010B00), RUNE_C(0x010B35)}, - {RUNE_C(0x010B40), RUNE_C(0x010B55)}, - {RUNE_C(0x010B60), RUNE_C(0x010B72)}, - {RUNE_C(0x010B80), RUNE_C(0x010B91)}, - {RUNE_C(0x010C00), RUNE_C(0x010C48)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x010D00), RUNE_C(0x010D23)}, - {RUNE_C(0x010E80), RUNE_C(0x010EA9)}, - {RUNE_C(0x010EB0), RUNE_C(0x010EB1)}, - {RUNE_C(0x010F00), RUNE_C(0x010F1C)}, - {RUNE_C(0x010F27), RUNE_C(0x010F27)}, - {RUNE_C(0x010F30), RUNE_C(0x010F45)}, - {RUNE_C(0x010F70), RUNE_C(0x010F81)}, - {RUNE_C(0x010FB0), RUNE_C(0x010FC4)}, - {RUNE_C(0x010FE0), RUNE_C(0x010FF6)}, - {RUNE_C(0x011003), RUNE_C(0x011037)}, - {RUNE_C(0x011071), RUNE_C(0x011072)}, - {RUNE_C(0x011075), RUNE_C(0x011075)}, - {RUNE_C(0x011083), RUNE_C(0x0110AF)}, - {RUNE_C(0x0110D0), RUNE_C(0x0110E8)}, - {RUNE_C(0x011103), RUNE_C(0x011126)}, - {RUNE_C(0x011144), RUNE_C(0x011144)}, - {RUNE_C(0x011147), RUNE_C(0x011147)}, - {RUNE_C(0x011150), RUNE_C(0x011172)}, - {RUNE_C(0x011176), RUNE_C(0x011176)}, - {RUNE_C(0x011183), RUNE_C(0x0111B2)}, - {RUNE_C(0x0111C1), RUNE_C(0x0111C4)}, - {RUNE_C(0x0111DA), RUNE_C(0x0111DA)}, - {RUNE_C(0x0111DC), RUNE_C(0x0111DC)}, - {RUNE_C(0x011200), RUNE_C(0x011211)}, - {RUNE_C(0x011213), RUNE_C(0x01122B)}, - {RUNE_C(0x01123F), RUNE_C(0x011240)}, - {RUNE_C(0x011280), RUNE_C(0x011286)}, - {RUNE_C(0x011288), RUNE_C(0x011288)}, - {RUNE_C(0x01128A), RUNE_C(0x01128D)}, - {RUNE_C(0x01128F), RUNE_C(0x01129D)}, - {RUNE_C(0x01129F), RUNE_C(0x0112A8)}, - {RUNE_C(0x0112B0), RUNE_C(0x0112DE)}, - {RUNE_C(0x011305), RUNE_C(0x01130C)}, - {RUNE_C(0x01130F), RUNE_C(0x011310)}, - {RUNE_C(0x011313), RUNE_C(0x011328)}, - {RUNE_C(0x01132A), RUNE_C(0x011330)}, - {RUNE_C(0x011332), RUNE_C(0x011333)}, - {RUNE_C(0x011335), RUNE_C(0x011339)}, - {RUNE_C(0x01133D), RUNE_C(0x01133D)}, - {RUNE_C(0x011350), RUNE_C(0x011350)}, - {RUNE_C(0x01135D), RUNE_C(0x011361)}, - {RUNE_C(0x011400), RUNE_C(0x011434)}, - {RUNE_C(0x011447), RUNE_C(0x01144A)}, - {RUNE_C(0x01145F), RUNE_C(0x011461)}, - {RUNE_C(0x011480), RUNE_C(0x0114AF)}, - {RUNE_C(0x0114C4), RUNE_C(0x0114C5)}, - {RUNE_C(0x0114C7), RUNE_C(0x0114C7)}, - {RUNE_C(0x011580), RUNE_C(0x0115AE)}, - {RUNE_C(0x0115D8), RUNE_C(0x0115DB)}, - {RUNE_C(0x011600), RUNE_C(0x01162F)}, - {RUNE_C(0x011644), RUNE_C(0x011644)}, - {RUNE_C(0x011680), RUNE_C(0x0116AA)}, - {RUNE_C(0x0116B8), RUNE_C(0x0116B8)}, - {RUNE_C(0x011700), RUNE_C(0x01171A)}, - {RUNE_C(0x011740), RUNE_C(0x011746)}, - {RUNE_C(0x011800), RUNE_C(0x01182B)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118DF)}, - {RUNE_C(0x0118FF), RUNE_C(0x011906)}, - {RUNE_C(0x011909), RUNE_C(0x011909)}, - {RUNE_C(0x01190C), RUNE_C(0x011913)}, - {RUNE_C(0x011915), RUNE_C(0x011916)}, - {RUNE_C(0x011918), RUNE_C(0x01192F)}, - {RUNE_C(0x01193F), RUNE_C(0x01193F)}, - {RUNE_C(0x011941), RUNE_C(0x011941)}, - {RUNE_C(0x0119A0), RUNE_C(0x0119A7)}, - {RUNE_C(0x0119AA), RUNE_C(0x0119D0)}, - {RUNE_C(0x0119E1), RUNE_C(0x0119E1)}, - {RUNE_C(0x0119E3), RUNE_C(0x0119E3)}, - {RUNE_C(0x011A00), RUNE_C(0x011A00)}, - {RUNE_C(0x011A0B), RUNE_C(0x011A32)}, - {RUNE_C(0x011A3A), RUNE_C(0x011A3A)}, - {RUNE_C(0x011A50), RUNE_C(0x011A50)}, - {RUNE_C(0x011A5C), RUNE_C(0x011A89)}, - {RUNE_C(0x011A9D), RUNE_C(0x011A9D)}, - {RUNE_C(0x011AB0), RUNE_C(0x011AF8)}, - {RUNE_C(0x011C00), RUNE_C(0x011C08)}, - {RUNE_C(0x011C0A), RUNE_C(0x011C2E)}, - {RUNE_C(0x011C40), RUNE_C(0x011C40)}, - {RUNE_C(0x011C72), RUNE_C(0x011C8F)}, - {RUNE_C(0x011D00), RUNE_C(0x011D06)}, - {RUNE_C(0x011D08), RUNE_C(0x011D09)}, - {RUNE_C(0x011D0B), RUNE_C(0x011D30)}, - {RUNE_C(0x011D46), RUNE_C(0x011D46)}, - {RUNE_C(0x011D60), RUNE_C(0x011D65)}, - {RUNE_C(0x011D67), RUNE_C(0x011D68)}, - {RUNE_C(0x011D6A), RUNE_C(0x011D89)}, - {RUNE_C(0x011D98), RUNE_C(0x011D98)}, - {RUNE_C(0x011EE0), RUNE_C(0x011EF2)}, - {RUNE_C(0x011F02), RUNE_C(0x011F02)}, - {RUNE_C(0x011F04), RUNE_C(0x011F10)}, - {RUNE_C(0x011F12), RUNE_C(0x011F33)}, - {RUNE_C(0x011FB0), RUNE_C(0x011FB0)}, - {RUNE_C(0x012000), RUNE_C(0x012399)}, - {RUNE_C(0x012400), RUNE_C(0x01246E)}, - {RUNE_C(0x012480), RUNE_C(0x012543)}, - {RUNE_C(0x012F90), RUNE_C(0x012FF0)}, - {RUNE_C(0x013000), RUNE_C(0x01342F)}, - {RUNE_C(0x013441), RUNE_C(0x013446)}, - {RUNE_C(0x014400), RUNE_C(0x014646)}, - {RUNE_C(0x016800), RUNE_C(0x016A38)}, - {RUNE_C(0x016A40), RUNE_C(0x016A5E)}, - {RUNE_C(0x016A70), RUNE_C(0x016ABE)}, - {RUNE_C(0x016AD0), RUNE_C(0x016AED)}, - {RUNE_C(0x016B00), RUNE_C(0x016B2F)}, - {RUNE_C(0x016B40), RUNE_C(0x016B43)}, - {RUNE_C(0x016B63), RUNE_C(0x016B77)}, - {RUNE_C(0x016B7D), RUNE_C(0x016B8F)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x016F00), RUNE_C(0x016F4A)}, - {RUNE_C(0x016F50), RUNE_C(0x016F50)}, - {RUNE_C(0x016F93), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE3)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01B000), RUNE_C(0x01B122)}, - {RUNE_C(0x01B132), RUNE_C(0x01B132)}, - {RUNE_C(0x01B150), RUNE_C(0x01B152)}, - {RUNE_C(0x01B155), RUNE_C(0x01B155)}, - {RUNE_C(0x01B164), RUNE_C(0x01B167)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x01BC00), RUNE_C(0x01BC6A)}, - {RUNE_C(0x01BC70), RUNE_C(0x01BC7C)}, - {RUNE_C(0x01BC80), RUNE_C(0x01BC88)}, - {RUNE_C(0x01BC90), RUNE_C(0x01BC99)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D734)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E100), RUNE_C(0x01E12C)}, - {RUNE_C(0x01E137), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E14E), RUNE_C(0x01E14E)}, - {RUNE_C(0x01E290), RUNE_C(0x01E2AD)}, - {RUNE_C(0x01E2C0), RUNE_C(0x01E2EB)}, - {RUNE_C(0x01E4D0), RUNE_C(0x01E4EB)}, - {RUNE_C(0x01E7E0), RUNE_C(0x01E7E6)}, - {RUNE_C(0x01E7E8), RUNE_C(0x01E7EB)}, - {RUNE_C(0x01E7ED), RUNE_C(0x01E7EE)}, - {RUNE_C(0x01E7F0), RUNE_C(0x01E7FE)}, - {RUNE_C(0x01E800), RUNE_C(0x01E8C4)}, - {RUNE_C(0x01E900), RUNE_C(0x01E943)}, - {RUNE_C(0x01E94B), RUNE_C(0x01E94B)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xBC}, + {0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFE, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x2F, 0x00, 0x60, 0xC0, 0x00, 0x9C}, + {0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x02, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0x30, 0x04}, + {0xFF, 0xFF, 0x3F, 0x04, 0x10, 0x01, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x07, 0xFF, 0xFF}, + {0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, + 0x00, 0x00, 0x01, 0xFF, 0x03, 0x00, 0xFE, 0xFF}, + {0xE1, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0x23, + 0x00, 0x40, 0x00, 0xB0, 0x03, 0x00, 0x03, 0x10}, + {0xE0, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0x03, + 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x1C, 0x00}, + {0xE0, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x02}, + {0xE0, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x02, 0x00}, + {0xE8, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0x03, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0x23, + 0x00, 0x00, 0x00, 0x27, 0x03, 0x00, 0x00, 0x00}, + {0xE1, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0x23, + 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x06, 0x00}, + {0xF0, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x27, + 0x00, 0x40, 0x70, 0x80, 0x03, 0x00, 0x00, 0xFC}, + {0xE0, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0x0D, 0x20, + 0x5F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00}, + {0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, + 0x00, 0x00, 0x3F, 0x3C, 0x62, 0xC0, 0xE1, 0xFF}, + {0x03, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, + 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF}, + {0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x01}, + {0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x03, 0x00, + 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xDF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0x00, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0x6F, 0x04}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80}, + {0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x84, 0xFC, 0x2F, 0x3F, 0x50, 0xFD, 0xFF, 0xF3, + 0xE0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00}, + {0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x3E, 0x1F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x0C, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x80}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xBB, 0xF7, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x68}, + {0x00, 0xFC, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xDF, 0xFF, 0x00, 0x7C}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xF7, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0xC4}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x3E, + 0x05, 0x00, 0x00, 0x38, 0xFF, 0x07, 0x1C, 0x00}, + {0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xA0, 0xFF, 0xFD, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, + 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7}, + {0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0x00}, + {0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x90, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x47, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x0F, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x00, 0x00, 0x01, 0xE0, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x80, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80}, + {0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0x00, 0x80, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x0A, 0x00, 0x00, 0x00}, + {0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x04, + 0x00, 0x00, 0x01, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x03, 0x00, 0x20, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x40, 0x00, 0x00, 0x00, 0xBF, 0xFD, 0xFF, 0xFF}, + {0xFF, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xF4, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E}, + {0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_ids(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_idsb.c b/lib/unicode/prop/uprop_is_idsb.c index ebbfdfe..e34b849 100644 --- a/lib/unicode/prop/uprop_is_idsb.c +++ b/lib/unicode/prop/uprop_is_idsb.c @@ -1,24 +1,176 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x002FF0), RUNE_C(0x002FF1)}, - {RUNE_C(0x002FF4), RUNE_C(0x002FFD)}, - {RUNE_C(0x0031EF), RUNE_C(0x0031EF)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00}, +}; bool uprop_is_idsb(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_incb.c b/lib/unicode/prop/uprop_is_incb.c index d9e01c8..01ae4d1 100644 --- a/lib/unicode/prop/uprop_is_incb.c +++ b/lib/unicode/prop/uprop_is_incb.c @@ -1,221 +1,734 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000300), RUNE_C(0x00034E)}, - {RUNE_C(0x000350), RUNE_C(0x00036F)}, - {RUNE_C(0x000483), RUNE_C(0x000487)}, - {RUNE_C(0x000591), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C5)}, - {RUNE_C(0x0005C7), RUNE_C(0x0005C7)}, - {RUNE_C(0x000610), RUNE_C(0x00061A)}, - {RUNE_C(0x00064B), RUNE_C(0x00065F)}, - {RUNE_C(0x000670), RUNE_C(0x000670)}, - {RUNE_C(0x0006D6), RUNE_C(0x0006DC)}, - {RUNE_C(0x0006DF), RUNE_C(0x0006E4)}, - {RUNE_C(0x0006E7), RUNE_C(0x0006E8)}, - {RUNE_C(0x0006EA), RUNE_C(0x0006ED)}, - {RUNE_C(0x000711), RUNE_C(0x000711)}, - {RUNE_C(0x000730), RUNE_C(0x00074A)}, - {RUNE_C(0x0007EB), RUNE_C(0x0007F3)}, - {RUNE_C(0x0007FD), RUNE_C(0x0007FD)}, - {RUNE_C(0x000816), RUNE_C(0x000819)}, - {RUNE_C(0x00081B), RUNE_C(0x000823)}, - {RUNE_C(0x000825), RUNE_C(0x000827)}, - {RUNE_C(0x000829), RUNE_C(0x00082D)}, - {RUNE_C(0x000859), RUNE_C(0x00085B)}, - {RUNE_C(0x000898), RUNE_C(0x00089F)}, - {RUNE_C(0x0008CA), RUNE_C(0x0008E1)}, - {RUNE_C(0x0008E3), RUNE_C(0x0008FF)}, - {RUNE_C(0x000915), RUNE_C(0x000939)}, - {RUNE_C(0x00093C), RUNE_C(0x00093C)}, - {RUNE_C(0x00094D), RUNE_C(0x00094D)}, - {RUNE_C(0x000951), RUNE_C(0x000954)}, - {RUNE_C(0x000958), RUNE_C(0x00095F)}, - {RUNE_C(0x000978), RUNE_C(0x00097F)}, - {RUNE_C(0x000995), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BC), RUNE_C(0x0009BC)}, - {RUNE_C(0x0009CD), RUNE_C(0x0009CD)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009DF)}, - {RUNE_C(0x0009F0), RUNE_C(0x0009F1)}, - {RUNE_C(0x0009FE), RUNE_C(0x0009FE)}, - {RUNE_C(0x000A3C), RUNE_C(0x000A3C)}, - {RUNE_C(0x000A95), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABC), RUNE_C(0x000ABC)}, - {RUNE_C(0x000ACD), RUNE_C(0x000ACD)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AF9)}, - {RUNE_C(0x000B15), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3C), RUNE_C(0x000B3C)}, - {RUNE_C(0x000B4D), RUNE_C(0x000B4D)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B5F)}, - {RUNE_C(0x000B71), RUNE_C(0x000B71)}, - {RUNE_C(0x000C15), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3C), RUNE_C(0x000C3C)}, - {RUNE_C(0x000C4D), RUNE_C(0x000C4D)}, - {RUNE_C(0x000C55), RUNE_C(0x000C56)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000CBC), RUNE_C(0x000CBC)}, - {RUNE_C(0x000D15), RUNE_C(0x000D3C)}, - {RUNE_C(0x000D4D), RUNE_C(0x000D4D)}, - {RUNE_C(0x000E38), RUNE_C(0x000E3A)}, - {RUNE_C(0x000E48), RUNE_C(0x000E4B)}, - {RUNE_C(0x000EB8), RUNE_C(0x000EBA)}, - {RUNE_C(0x000EC8), RUNE_C(0x000ECB)}, - {RUNE_C(0x000F18), RUNE_C(0x000F19)}, - {RUNE_C(0x000F35), RUNE_C(0x000F35)}, - {RUNE_C(0x000F37), RUNE_C(0x000F37)}, - {RUNE_C(0x000F39), RUNE_C(0x000F39)}, - {RUNE_C(0x000F71), RUNE_C(0x000F72)}, - {RUNE_C(0x000F74), RUNE_C(0x000F74)}, - {RUNE_C(0x000F7A), RUNE_C(0x000F7D)}, - {RUNE_C(0x000F80), RUNE_C(0x000F80)}, - {RUNE_C(0x000F82), RUNE_C(0x000F84)}, - {RUNE_C(0x000F86), RUNE_C(0x000F87)}, - {RUNE_C(0x000FC6), RUNE_C(0x000FC6)}, - {RUNE_C(0x001037), RUNE_C(0x001037)}, - {RUNE_C(0x001039), RUNE_C(0x00103A)}, - {RUNE_C(0x00108D), RUNE_C(0x00108D)}, - {RUNE_C(0x00135D), RUNE_C(0x00135F)}, - {RUNE_C(0x001714), RUNE_C(0x001714)}, - {RUNE_C(0x0017D2), RUNE_C(0x0017D2)}, - {RUNE_C(0x0017DD), RUNE_C(0x0017DD)}, - {RUNE_C(0x0018A9), RUNE_C(0x0018A9)}, - {RUNE_C(0x001939), RUNE_C(0x00193B)}, - {RUNE_C(0x001A17), RUNE_C(0x001A18)}, - {RUNE_C(0x001A60), RUNE_C(0x001A60)}, - {RUNE_C(0x001A75), RUNE_C(0x001A7C)}, - {RUNE_C(0x001A7F), RUNE_C(0x001A7F)}, - {RUNE_C(0x001AB0), RUNE_C(0x001ABD)}, - {RUNE_C(0x001ABF), RUNE_C(0x001ACE)}, - {RUNE_C(0x001B34), RUNE_C(0x001B34)}, - {RUNE_C(0x001B6B), RUNE_C(0x001B73)}, - {RUNE_C(0x001BAB), RUNE_C(0x001BAB)}, - {RUNE_C(0x001BE6), RUNE_C(0x001BE6)}, - {RUNE_C(0x001C37), RUNE_C(0x001C37)}, - {RUNE_C(0x001CD0), RUNE_C(0x001CD2)}, - {RUNE_C(0x001CD4), RUNE_C(0x001CE0)}, - {RUNE_C(0x001CE2), RUNE_C(0x001CE8)}, - {RUNE_C(0x001CED), RUNE_C(0x001CED)}, - {RUNE_C(0x001CF4), RUNE_C(0x001CF4)}, - {RUNE_C(0x001CF8), RUNE_C(0x001CF9)}, - {RUNE_C(0x001DC0), RUNE_C(0x001DFF)}, - {RUNE_C(0x00200D), RUNE_C(0x00200D)}, - {RUNE_C(0x0020D0), RUNE_C(0x0020DC)}, - {RUNE_C(0x0020E1), RUNE_C(0x0020E1)}, - {RUNE_C(0x0020E5), RUNE_C(0x0020F0)}, - {RUNE_C(0x002CEF), RUNE_C(0x002CF1)}, - {RUNE_C(0x002D7F), RUNE_C(0x002D7F)}, - {RUNE_C(0x002DE0), RUNE_C(0x002DFF)}, - {RUNE_C(0x00302A), RUNE_C(0x00302F)}, - {RUNE_C(0x003099), RUNE_C(0x00309A)}, - {RUNE_C(0x00A66F), RUNE_C(0x00A66F)}, - {RUNE_C(0x00A674), RUNE_C(0x00A67D)}, - {RUNE_C(0x00A69E), RUNE_C(0x00A69F)}, - {RUNE_C(0x00A6F0), RUNE_C(0x00A6F1)}, - {RUNE_C(0x00A82C), RUNE_C(0x00A82C)}, - {RUNE_C(0x00A8E0), RUNE_C(0x00A8F1)}, - {RUNE_C(0x00A92B), RUNE_C(0x00A92D)}, - {RUNE_C(0x00A9B3), RUNE_C(0x00A9B3)}, - {RUNE_C(0x00AAB0), RUNE_C(0x00AAB0)}, - {RUNE_C(0x00AAB2), RUNE_C(0x00AAB4)}, - {RUNE_C(0x00AAB7), RUNE_C(0x00AAB8)}, - {RUNE_C(0x00AABE), RUNE_C(0x00AABF)}, - {RUNE_C(0x00AAC1), RUNE_C(0x00AAC1)}, - {RUNE_C(0x00AAF6), RUNE_C(0x00AAF6)}, - {RUNE_C(0x00ABED), RUNE_C(0x00ABED)}, - {RUNE_C(0x00FB1E), RUNE_C(0x00FB1E)}, - {RUNE_C(0x00FE20), RUNE_C(0x00FE2F)}, - {RUNE_C(0x0101FD), RUNE_C(0x0101FD)}, - {RUNE_C(0x0102E0), RUNE_C(0x0102E0)}, - {RUNE_C(0x010376), RUNE_C(0x01037A)}, - {RUNE_C(0x010A0D), RUNE_C(0x010A0D)}, - {RUNE_C(0x010A0F), RUNE_C(0x010A0F)}, - {RUNE_C(0x010A38), RUNE_C(0x010A3A)}, - {RUNE_C(0x010A3F), RUNE_C(0x010A3F)}, - {RUNE_C(0x010AE5), RUNE_C(0x010AE6)}, - {RUNE_C(0x010D24), RUNE_C(0x010D27)}, - {RUNE_C(0x010EAB), RUNE_C(0x010EAC)}, - {RUNE_C(0x010EFD), RUNE_C(0x010EFF)}, - {RUNE_C(0x010F46), RUNE_C(0x010F50)}, - {RUNE_C(0x010F82), RUNE_C(0x010F85)}, - {RUNE_C(0x011070), RUNE_C(0x011070)}, - {RUNE_C(0x01107F), RUNE_C(0x01107F)}, - {RUNE_C(0x0110BA), RUNE_C(0x0110BA)}, - {RUNE_C(0x011100), RUNE_C(0x011102)}, - {RUNE_C(0x011133), RUNE_C(0x011134)}, - {RUNE_C(0x011173), RUNE_C(0x011173)}, - {RUNE_C(0x0111CA), RUNE_C(0x0111CA)}, - {RUNE_C(0x011236), RUNE_C(0x011236)}, - {RUNE_C(0x0112E9), RUNE_C(0x0112EA)}, - {RUNE_C(0x01133B), RUNE_C(0x01133C)}, - {RUNE_C(0x011366), RUNE_C(0x01136C)}, - {RUNE_C(0x011370), RUNE_C(0x011374)}, - {RUNE_C(0x011446), RUNE_C(0x011446)}, - {RUNE_C(0x01145E), RUNE_C(0x01145E)}, - {RUNE_C(0x0114C3), RUNE_C(0x0114C3)}, - {RUNE_C(0x0115C0), RUNE_C(0x0115C0)}, - {RUNE_C(0x0116B7), RUNE_C(0x0116B7)}, - {RUNE_C(0x01172B), RUNE_C(0x01172B)}, - {RUNE_C(0x01183A), RUNE_C(0x01183A)}, - {RUNE_C(0x01193E), RUNE_C(0x01193E)}, - {RUNE_C(0x011943), RUNE_C(0x011943)}, - {RUNE_C(0x011A34), RUNE_C(0x011A34)}, - {RUNE_C(0x011A47), RUNE_C(0x011A47)}, - {RUNE_C(0x011A99), RUNE_C(0x011A99)}, - {RUNE_C(0x011D42), RUNE_C(0x011D42)}, - {RUNE_C(0x011D44), RUNE_C(0x011D45)}, - {RUNE_C(0x011D97), RUNE_C(0x011D97)}, - {RUNE_C(0x011F42), RUNE_C(0x011F42)}, - {RUNE_C(0x016AF0), RUNE_C(0x016AF4)}, - {RUNE_C(0x016B30), RUNE_C(0x016B36)}, - {RUNE_C(0x01BC9E), RUNE_C(0x01BC9E)}, - {RUNE_C(0x01D165), RUNE_C(0x01D165)}, - {RUNE_C(0x01D167), RUNE_C(0x01D169)}, - {RUNE_C(0x01D16E), RUNE_C(0x01D172)}, - {RUNE_C(0x01D17B), RUNE_C(0x01D182)}, - {RUNE_C(0x01D185), RUNE_C(0x01D18B)}, - {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD)}, - {RUNE_C(0x01D242), RUNE_C(0x01D244)}, - {RUNE_C(0x01E000), RUNE_C(0x01E006)}, - {RUNE_C(0x01E008), RUNE_C(0x01E018)}, - {RUNE_C(0x01E01B), RUNE_C(0x01E021)}, - {RUNE_C(0x01E023), RUNE_C(0x01E024)}, - {RUNE_C(0x01E026), RUNE_C(0x01E02A)}, - {RUNE_C(0x01E08F), RUNE_C(0x01E08F)}, - {RUNE_C(0x01E130), RUNE_C(0x01E136)}, - {RUNE_C(0x01E2AE), RUNE_C(0x01E2AE)}, - {RUNE_C(0x01E2EC), RUNE_C(0x01E2EF)}, - {RUNE_C(0x01E4EC), RUNE_C(0x01E4EF)}, - {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6)}, - {RUNE_C(0x01E944), RUNE_C(0x01E94A)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 0, 15, 12, 16, 0, 17, 17, 18, 19, + 20, 21, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 23, 24, + 0, 25, 26, 0, 27, 28, 29, 30, 31, 32, 0, 33, 0, 0, 0, 0, + 21, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 37, 0, 0, 0, 0, + 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 41, 0, 0, + 42, 43, 44, 45, 0, 46, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 49, 0, 0, 0, + 0, 0, 0, 50, 0, 51, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 54, 0, 0, 0, 0, 55, 0, 0, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 0, 66, 67, 0, 68, 0, 31, 69, 0, + 60, 0, 70, 0, 71, 72, 0, 0, 0, 0, 73, 74, 0, 0, 75, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 76, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 78, 79, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 82, 77, 0, 0, 83, 0, 0, 0, 84, 0, 0, 0, 0, 0, 0, + 0, 85, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, + {0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0x9F, 0x9F, 0x3D, 0x00, 0x00}, + {0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x20}, + {0x00, 0x00, 0xC0, 0xFB, 0xEF, 0x3E, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x13, + 0x00, 0x20, 0x1E, 0xFF, 0x00, 0x00, 0x00, 0xFF}, + {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFD, 0xC5, 0x13, + 0x00, 0x20, 0x00, 0xB0, 0x00, 0x00, 0x03, 0x40}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFD, 0xED, 0x13, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, + {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFD, 0xED, 0x13, + 0x00, 0x20, 0x00, 0xB0, 0x00, 0x00, 0x02, 0x00}, + {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFD, 0xFF, 0x13, + 0x00, 0x20, 0x60, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xA0, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x3C}, + {0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xE0, 0x9F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xBF, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF7, 0xFF, 0xFD, 0x21, 0x10, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x1F, 0xE2, 0xFF, 0x01, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3F}, + {0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xC1, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x07}, + {0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xA0, 0xC3, 0x07, 0xF8}, + {0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_incb(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_loe.c b/lib/unicode/prop/uprop_is_loe.c index 625b0f6..b62250f 100644 --- a/lib/unicode/prop/uprop_is_loe.c +++ b/lib/unicode/prop/uprop_is_loe.c @@ -1,28 +1,184 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000E40), RUNE_C(0x000E44)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x0019B5), RUNE_C(0x0019B7)}, - {RUNE_C(0x0019BA), RUNE_C(0x0019BA)}, - {RUNE_C(0x00AAB5), RUNE_C(0x00AAB6)}, - {RUNE_C(0x00AAB9), RUNE_C(0x00AAB9)}, - {RUNE_C(0x00AABB), RUNE_C(0x00AABC)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x1A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_loe(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_lower.c b/lib/unicode/prop/uprop_is_lower.c index 474ae32..f7e67a8 100644 --- a/lib/unicode/prop/uprop_is_lower.c +++ b/lib/unicode/prop/uprop_is_lower.c @@ -1,693 +1,432 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, - 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12, + 13, 14, 6, 6, 15, 6, 6, 6, 6, 6, 6, 6, 16, 17, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 18, 19, 6, 6, 6, 20, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 21, 6, 6, 6, 22, + 6, 6, 6, 6, 23, 24, 6, 25, 6, 6, 6, 6, 26, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 27, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 28, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 29, 30, 31, 32, 6, 6, 6, 6, 6, 6, 6, 33, + 34, 6, 6, 6, 6, 6, 6, 6, 6, 35, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000101), RUNE_C(0x000101)}, - {RUNE_C(0x000103), RUNE_C(0x000103)}, - {RUNE_C(0x000105), RUNE_C(0x000105)}, - {RUNE_C(0x000107), RUNE_C(0x000107)}, - {RUNE_C(0x000109), RUNE_C(0x000109)}, - {RUNE_C(0x00010B), RUNE_C(0x00010B)}, - {RUNE_C(0x00010D), RUNE_C(0x00010D)}, - {RUNE_C(0x00010F), RUNE_C(0x00010F)}, - {RUNE_C(0x000111), RUNE_C(0x000111)}, - {RUNE_C(0x000113), RUNE_C(0x000113)}, - {RUNE_C(0x000115), RUNE_C(0x000115)}, - {RUNE_C(0x000117), RUNE_C(0x000117)}, - {RUNE_C(0x000119), RUNE_C(0x000119)}, - {RUNE_C(0x00011B), RUNE_C(0x00011B)}, - {RUNE_C(0x00011D), RUNE_C(0x00011D)}, - {RUNE_C(0x00011F), RUNE_C(0x00011F)}, - {RUNE_C(0x000121), RUNE_C(0x000121)}, - {RUNE_C(0x000123), RUNE_C(0x000123)}, - {RUNE_C(0x000125), RUNE_C(0x000125)}, - {RUNE_C(0x000127), RUNE_C(0x000127)}, - {RUNE_C(0x000129), RUNE_C(0x000129)}, - {RUNE_C(0x00012B), RUNE_C(0x00012B)}, - {RUNE_C(0x00012D), RUNE_C(0x00012D)}, - {RUNE_C(0x00012F), RUNE_C(0x00012F)}, - {RUNE_C(0x000131), RUNE_C(0x000131)}, - {RUNE_C(0x000133), RUNE_C(0x000133)}, - {RUNE_C(0x000135), RUNE_C(0x000135)}, - {RUNE_C(0x000137), RUNE_C(0x000138)}, - {RUNE_C(0x00013A), RUNE_C(0x00013A)}, - {RUNE_C(0x00013C), RUNE_C(0x00013C)}, - {RUNE_C(0x00013E), RUNE_C(0x00013E)}, - {RUNE_C(0x000140), RUNE_C(0x000140)}, - {RUNE_C(0x000142), RUNE_C(0x000142)}, - {RUNE_C(0x000144), RUNE_C(0x000144)}, - {RUNE_C(0x000146), RUNE_C(0x000146)}, - {RUNE_C(0x000148), RUNE_C(0x000149)}, - {RUNE_C(0x00014B), RUNE_C(0x00014B)}, - {RUNE_C(0x00014D), RUNE_C(0x00014D)}, - {RUNE_C(0x00014F), RUNE_C(0x00014F)}, - {RUNE_C(0x000151), RUNE_C(0x000151)}, - {RUNE_C(0x000153), RUNE_C(0x000153)}, - {RUNE_C(0x000155), RUNE_C(0x000155)}, - {RUNE_C(0x000157), RUNE_C(0x000157)}, - {RUNE_C(0x000159), RUNE_C(0x000159)}, - {RUNE_C(0x00015B), RUNE_C(0x00015B)}, - {RUNE_C(0x00015D), RUNE_C(0x00015D)}, - {RUNE_C(0x00015F), RUNE_C(0x00015F)}, - {RUNE_C(0x000161), RUNE_C(0x000161)}, - {RUNE_C(0x000163), RUNE_C(0x000163)}, - {RUNE_C(0x000165), RUNE_C(0x000165)}, - {RUNE_C(0x000167), RUNE_C(0x000167)}, - {RUNE_C(0x000169), RUNE_C(0x000169)}, - {RUNE_C(0x00016B), RUNE_C(0x00016B)}, - {RUNE_C(0x00016D), RUNE_C(0x00016D)}, - {RUNE_C(0x00016F), RUNE_C(0x00016F)}, - {RUNE_C(0x000171), RUNE_C(0x000171)}, - {RUNE_C(0x000173), RUNE_C(0x000173)}, - {RUNE_C(0x000175), RUNE_C(0x000175)}, - {RUNE_C(0x000177), RUNE_C(0x000177)}, - {RUNE_C(0x00017A), RUNE_C(0x00017A)}, - {RUNE_C(0x00017C), RUNE_C(0x00017C)}, - {RUNE_C(0x00017E), RUNE_C(0x000180)}, - {RUNE_C(0x000183), RUNE_C(0x000183)}, - {RUNE_C(0x000185), RUNE_C(0x000185)}, - {RUNE_C(0x000188), RUNE_C(0x000188)}, - {RUNE_C(0x00018C), RUNE_C(0x00018D)}, - {RUNE_C(0x000192), RUNE_C(0x000192)}, - {RUNE_C(0x000195), RUNE_C(0x000195)}, - {RUNE_C(0x000199), RUNE_C(0x00019B)}, - {RUNE_C(0x00019E), RUNE_C(0x00019E)}, - {RUNE_C(0x0001A1), RUNE_C(0x0001A1)}, - {RUNE_C(0x0001A3), RUNE_C(0x0001A3)}, - {RUNE_C(0x0001A5), RUNE_C(0x0001A5)}, - {RUNE_C(0x0001A8), RUNE_C(0x0001A8)}, - {RUNE_C(0x0001AA), RUNE_C(0x0001AB)}, - {RUNE_C(0x0001AD), RUNE_C(0x0001AD)}, - {RUNE_C(0x0001B0), RUNE_C(0x0001B0)}, - {RUNE_C(0x0001B4), RUNE_C(0x0001B4)}, - {RUNE_C(0x0001B6), RUNE_C(0x0001B6)}, - {RUNE_C(0x0001B9), RUNE_C(0x0001BA)}, - {RUNE_C(0x0001BD), RUNE_C(0x0001BF)}, - {RUNE_C(0x0001C6), RUNE_C(0x0001C6)}, - {RUNE_C(0x0001C9), RUNE_C(0x0001C9)}, - {RUNE_C(0x0001CC), RUNE_C(0x0001CC)}, - {RUNE_C(0x0001CE), RUNE_C(0x0001CE)}, - {RUNE_C(0x0001D0), RUNE_C(0x0001D0)}, - {RUNE_C(0x0001D2), RUNE_C(0x0001D2)}, - {RUNE_C(0x0001D4), RUNE_C(0x0001D4)}, - {RUNE_C(0x0001D6), RUNE_C(0x0001D6)}, - {RUNE_C(0x0001D8), RUNE_C(0x0001D8)}, - {RUNE_C(0x0001DA), RUNE_C(0x0001DA)}, - {RUNE_C(0x0001DC), RUNE_C(0x0001DD)}, - {RUNE_C(0x0001DF), RUNE_C(0x0001DF)}, - {RUNE_C(0x0001E1), RUNE_C(0x0001E1)}, - {RUNE_C(0x0001E3), RUNE_C(0x0001E3)}, - {RUNE_C(0x0001E5), RUNE_C(0x0001E5)}, - {RUNE_C(0x0001E7), RUNE_C(0x0001E7)}, - {RUNE_C(0x0001E9), RUNE_C(0x0001E9)}, - {RUNE_C(0x0001EB), RUNE_C(0x0001EB)}, - {RUNE_C(0x0001ED), RUNE_C(0x0001ED)}, - {RUNE_C(0x0001EF), RUNE_C(0x0001F0)}, - {RUNE_C(0x0001F3), RUNE_C(0x0001F3)}, - {RUNE_C(0x0001F5), RUNE_C(0x0001F5)}, - {RUNE_C(0x0001F9), RUNE_C(0x0001F9)}, - {RUNE_C(0x0001FB), RUNE_C(0x0001FB)}, - {RUNE_C(0x0001FD), RUNE_C(0x0001FD)}, - {RUNE_C(0x0001FF), RUNE_C(0x0001FF)}, - {RUNE_C(0x000201), RUNE_C(0x000201)}, - {RUNE_C(0x000203), RUNE_C(0x000203)}, - {RUNE_C(0x000205), RUNE_C(0x000205)}, - {RUNE_C(0x000207), RUNE_C(0x000207)}, - {RUNE_C(0x000209), RUNE_C(0x000209)}, - {RUNE_C(0x00020B), RUNE_C(0x00020B)}, - {RUNE_C(0x00020D), RUNE_C(0x00020D)}, - {RUNE_C(0x00020F), RUNE_C(0x00020F)}, - {RUNE_C(0x000211), RUNE_C(0x000211)}, - {RUNE_C(0x000213), RUNE_C(0x000213)}, - {RUNE_C(0x000215), RUNE_C(0x000215)}, - {RUNE_C(0x000217), RUNE_C(0x000217)}, - {RUNE_C(0x000219), RUNE_C(0x000219)}, - {RUNE_C(0x00021B), RUNE_C(0x00021B)}, - {RUNE_C(0x00021D), RUNE_C(0x00021D)}, - {RUNE_C(0x00021F), RUNE_C(0x00021F)}, - {RUNE_C(0x000221), RUNE_C(0x000221)}, - {RUNE_C(0x000223), RUNE_C(0x000223)}, - {RUNE_C(0x000225), RUNE_C(0x000225)}, - {RUNE_C(0x000227), RUNE_C(0x000227)}, - {RUNE_C(0x000229), RUNE_C(0x000229)}, - {RUNE_C(0x00022B), RUNE_C(0x00022B)}, - {RUNE_C(0x00022D), RUNE_C(0x00022D)}, - {RUNE_C(0x00022F), RUNE_C(0x00022F)}, - {RUNE_C(0x000231), RUNE_C(0x000231)}, - {RUNE_C(0x000233), RUNE_C(0x000239)}, - {RUNE_C(0x00023C), RUNE_C(0x00023C)}, - {RUNE_C(0x00023F), RUNE_C(0x000240)}, - {RUNE_C(0x000242), RUNE_C(0x000242)}, - {RUNE_C(0x000247), RUNE_C(0x000247)}, - {RUNE_C(0x000249), RUNE_C(0x000249)}, - {RUNE_C(0x00024B), RUNE_C(0x00024B)}, - {RUNE_C(0x00024D), RUNE_C(0x00024D)}, - {RUNE_C(0x00024F), RUNE_C(0x000293)}, - {RUNE_C(0x000295), RUNE_C(0x0002B8)}, - {RUNE_C(0x0002C0), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x000345), RUNE_C(0x000345)}, - {RUNE_C(0x000371), RUNE_C(0x000371)}, - {RUNE_C(0x000373), RUNE_C(0x000373)}, - {RUNE_C(0x000377), RUNE_C(0x000377)}, - {RUNE_C(0x00037A), RUNE_C(0x00037D)}, - {RUNE_C(0x000390), RUNE_C(0x000390)}, - {RUNE_C(0x0003AC), RUNE_C(0x0003CE)}, - {RUNE_C(0x0003D0), RUNE_C(0x0003D1)}, - {RUNE_C(0x0003D5), RUNE_C(0x0003D7)}, - {RUNE_C(0x0003D9), RUNE_C(0x0003D9)}, - {RUNE_C(0x0003DB), RUNE_C(0x0003DB)}, - {RUNE_C(0x0003DD), RUNE_C(0x0003DD)}, - {RUNE_C(0x0003DF), RUNE_C(0x0003DF)}, - {RUNE_C(0x0003E1), RUNE_C(0x0003E1)}, - {RUNE_C(0x0003E3), RUNE_C(0x0003E3)}, - {RUNE_C(0x0003E5), RUNE_C(0x0003E5)}, - {RUNE_C(0x0003E7), RUNE_C(0x0003E7)}, - {RUNE_C(0x0003E9), RUNE_C(0x0003E9)}, - {RUNE_C(0x0003EB), RUNE_C(0x0003EB)}, - {RUNE_C(0x0003ED), RUNE_C(0x0003ED)}, - {RUNE_C(0x0003EF), RUNE_C(0x0003F3)}, - {RUNE_C(0x0003F5), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F8), RUNE_C(0x0003F8)}, - {RUNE_C(0x0003FB), RUNE_C(0x0003FC)}, - {RUNE_C(0x000430), RUNE_C(0x00045F)}, - {RUNE_C(0x000461), RUNE_C(0x000461)}, - {RUNE_C(0x000463), RUNE_C(0x000463)}, - {RUNE_C(0x000465), RUNE_C(0x000465)}, - {RUNE_C(0x000467), RUNE_C(0x000467)}, - {RUNE_C(0x000469), RUNE_C(0x000469)}, - {RUNE_C(0x00046B), RUNE_C(0x00046B)}, - {RUNE_C(0x00046D), RUNE_C(0x00046D)}, - {RUNE_C(0x00046F), RUNE_C(0x00046F)}, - {RUNE_C(0x000471), RUNE_C(0x000471)}, - {RUNE_C(0x000473), RUNE_C(0x000473)}, - {RUNE_C(0x000475), RUNE_C(0x000475)}, - {RUNE_C(0x000477), RUNE_C(0x000477)}, - {RUNE_C(0x000479), RUNE_C(0x000479)}, - {RUNE_C(0x00047B), RUNE_C(0x00047B)}, - {RUNE_C(0x00047D), RUNE_C(0x00047D)}, - {RUNE_C(0x00047F), RUNE_C(0x00047F)}, - {RUNE_C(0x000481), RUNE_C(0x000481)}, - {RUNE_C(0x00048B), RUNE_C(0x00048B)}, - {RUNE_C(0x00048D), RUNE_C(0x00048D)}, - {RUNE_C(0x00048F), RUNE_C(0x00048F)}, - {RUNE_C(0x000491), RUNE_C(0x000491)}, - {RUNE_C(0x000493), RUNE_C(0x000493)}, - {RUNE_C(0x000495), RUNE_C(0x000495)}, - {RUNE_C(0x000497), RUNE_C(0x000497)}, - {RUNE_C(0x000499), RUNE_C(0x000499)}, - {RUNE_C(0x00049B), RUNE_C(0x00049B)}, - {RUNE_C(0x00049D), RUNE_C(0x00049D)}, - {RUNE_C(0x00049F), RUNE_C(0x00049F)}, - {RUNE_C(0x0004A1), RUNE_C(0x0004A1)}, - {RUNE_C(0x0004A3), RUNE_C(0x0004A3)}, - {RUNE_C(0x0004A5), RUNE_C(0x0004A5)}, - {RUNE_C(0x0004A7), RUNE_C(0x0004A7)}, - {RUNE_C(0x0004A9), RUNE_C(0x0004A9)}, - {RUNE_C(0x0004AB), RUNE_C(0x0004AB)}, - {RUNE_C(0x0004AD), RUNE_C(0x0004AD)}, - {RUNE_C(0x0004AF), RUNE_C(0x0004AF)}, - {RUNE_C(0x0004B1), RUNE_C(0x0004B1)}, - {RUNE_C(0x0004B3), RUNE_C(0x0004B3)}, - {RUNE_C(0x0004B5), RUNE_C(0x0004B5)}, - {RUNE_C(0x0004B7), RUNE_C(0x0004B7)}, - {RUNE_C(0x0004B9), RUNE_C(0x0004B9)}, - {RUNE_C(0x0004BB), RUNE_C(0x0004BB)}, - {RUNE_C(0x0004BD), RUNE_C(0x0004BD)}, - {RUNE_C(0x0004BF), RUNE_C(0x0004BF)}, - {RUNE_C(0x0004C2), RUNE_C(0x0004C2)}, - {RUNE_C(0x0004C4), RUNE_C(0x0004C4)}, - {RUNE_C(0x0004C6), RUNE_C(0x0004C6)}, - {RUNE_C(0x0004C8), RUNE_C(0x0004C8)}, - {RUNE_C(0x0004CA), RUNE_C(0x0004CA)}, - {RUNE_C(0x0004CC), RUNE_C(0x0004CC)}, - {RUNE_C(0x0004CE), RUNE_C(0x0004CF)}, - {RUNE_C(0x0004D1), RUNE_C(0x0004D1)}, - {RUNE_C(0x0004D3), RUNE_C(0x0004D3)}, - {RUNE_C(0x0004D5), RUNE_C(0x0004D5)}, - {RUNE_C(0x0004D7), RUNE_C(0x0004D7)}, - {RUNE_C(0x0004D9), RUNE_C(0x0004D9)}, - {RUNE_C(0x0004DB), RUNE_C(0x0004DB)}, - {RUNE_C(0x0004DD), RUNE_C(0x0004DD)}, - {RUNE_C(0x0004DF), RUNE_C(0x0004DF)}, - {RUNE_C(0x0004E1), RUNE_C(0x0004E1)}, - {RUNE_C(0x0004E3), RUNE_C(0x0004E3)}, - {RUNE_C(0x0004E5), RUNE_C(0x0004E5)}, - {RUNE_C(0x0004E7), RUNE_C(0x0004E7)}, - {RUNE_C(0x0004E9), RUNE_C(0x0004E9)}, - {RUNE_C(0x0004EB), RUNE_C(0x0004EB)}, - {RUNE_C(0x0004ED), RUNE_C(0x0004ED)}, - {RUNE_C(0x0004EF), RUNE_C(0x0004EF)}, - {RUNE_C(0x0004F1), RUNE_C(0x0004F1)}, - {RUNE_C(0x0004F3), RUNE_C(0x0004F3)}, - {RUNE_C(0x0004F5), RUNE_C(0x0004F5)}, - {RUNE_C(0x0004F7), RUNE_C(0x0004F7)}, - {RUNE_C(0x0004F9), RUNE_C(0x0004F9)}, - {RUNE_C(0x0004FB), RUNE_C(0x0004FB)}, - {RUNE_C(0x0004FD), RUNE_C(0x0004FD)}, - {RUNE_C(0x0004FF), RUNE_C(0x0004FF)}, - {RUNE_C(0x000501), RUNE_C(0x000501)}, - {RUNE_C(0x000503), RUNE_C(0x000503)}, - {RUNE_C(0x000505), RUNE_C(0x000505)}, - {RUNE_C(0x000507), RUNE_C(0x000507)}, - {RUNE_C(0x000509), RUNE_C(0x000509)}, - {RUNE_C(0x00050B), RUNE_C(0x00050B)}, - {RUNE_C(0x00050D), RUNE_C(0x00050D)}, - {RUNE_C(0x00050F), RUNE_C(0x00050F)}, - {RUNE_C(0x000511), RUNE_C(0x000511)}, - {RUNE_C(0x000513), RUNE_C(0x000513)}, - {RUNE_C(0x000515), RUNE_C(0x000515)}, - {RUNE_C(0x000517), RUNE_C(0x000517)}, - {RUNE_C(0x000519), RUNE_C(0x000519)}, - {RUNE_C(0x00051B), RUNE_C(0x00051B)}, - {RUNE_C(0x00051D), RUNE_C(0x00051D)}, - {RUNE_C(0x00051F), RUNE_C(0x00051F)}, - {RUNE_C(0x000521), RUNE_C(0x000521)}, - {RUNE_C(0x000523), RUNE_C(0x000523)}, - {RUNE_C(0x000525), RUNE_C(0x000525)}, - {RUNE_C(0x000527), RUNE_C(0x000527)}, - {RUNE_C(0x000529), RUNE_C(0x000529)}, - {RUNE_C(0x00052B), RUNE_C(0x00052B)}, - {RUNE_C(0x00052D), RUNE_C(0x00052D)}, - {RUNE_C(0x00052F), RUNE_C(0x00052F)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x0010FF)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001D00), RUNE_C(0x001DBF)}, - {RUNE_C(0x001E01), RUNE_C(0x001E01)}, - {RUNE_C(0x001E03), RUNE_C(0x001E03)}, - {RUNE_C(0x001E05), RUNE_C(0x001E05)}, - {RUNE_C(0x001E07), RUNE_C(0x001E07)}, - {RUNE_C(0x001E09), RUNE_C(0x001E09)}, - {RUNE_C(0x001E0B), RUNE_C(0x001E0B)}, - {RUNE_C(0x001E0D), RUNE_C(0x001E0D)}, - {RUNE_C(0x001E0F), RUNE_C(0x001E0F)}, - {RUNE_C(0x001E11), RUNE_C(0x001E11)}, - {RUNE_C(0x001E13), RUNE_C(0x001E13)}, - {RUNE_C(0x001E15), RUNE_C(0x001E15)}, - {RUNE_C(0x001E17), RUNE_C(0x001E17)}, - {RUNE_C(0x001E19), RUNE_C(0x001E19)}, - {RUNE_C(0x001E1B), RUNE_C(0x001E1B)}, - {RUNE_C(0x001E1D), RUNE_C(0x001E1D)}, - {RUNE_C(0x001E1F), RUNE_C(0x001E1F)}, - {RUNE_C(0x001E21), RUNE_C(0x001E21)}, - {RUNE_C(0x001E23), RUNE_C(0x001E23)}, - {RUNE_C(0x001E25), RUNE_C(0x001E25)}, - {RUNE_C(0x001E27), RUNE_C(0x001E27)}, - {RUNE_C(0x001E29), RUNE_C(0x001E29)}, - {RUNE_C(0x001E2B), RUNE_C(0x001E2B)}, - {RUNE_C(0x001E2D), RUNE_C(0x001E2D)}, - {RUNE_C(0x001E2F), RUNE_C(0x001E2F)}, - {RUNE_C(0x001E31), RUNE_C(0x001E31)}, - {RUNE_C(0x001E33), RUNE_C(0x001E33)}, - {RUNE_C(0x001E35), RUNE_C(0x001E35)}, - {RUNE_C(0x001E37), RUNE_C(0x001E37)}, - {RUNE_C(0x001E39), RUNE_C(0x001E39)}, - {RUNE_C(0x001E3B), RUNE_C(0x001E3B)}, - {RUNE_C(0x001E3D), RUNE_C(0x001E3D)}, - {RUNE_C(0x001E3F), RUNE_C(0x001E3F)}, - {RUNE_C(0x001E41), RUNE_C(0x001E41)}, - {RUNE_C(0x001E43), RUNE_C(0x001E43)}, - {RUNE_C(0x001E45), RUNE_C(0x001E45)}, - {RUNE_C(0x001E47), RUNE_C(0x001E47)}, - {RUNE_C(0x001E49), RUNE_C(0x001E49)}, - {RUNE_C(0x001E4B), RUNE_C(0x001E4B)}, - {RUNE_C(0x001E4D), RUNE_C(0x001E4D)}, - {RUNE_C(0x001E4F), RUNE_C(0x001E4F)}, - {RUNE_C(0x001E51), RUNE_C(0x001E51)}, - {RUNE_C(0x001E53), RUNE_C(0x001E53)}, - {RUNE_C(0x001E55), RUNE_C(0x001E55)}, - {RUNE_C(0x001E57), RUNE_C(0x001E57)}, - {RUNE_C(0x001E59), RUNE_C(0x001E59)}, - {RUNE_C(0x001E5B), RUNE_C(0x001E5B)}, - {RUNE_C(0x001E5D), RUNE_C(0x001E5D)}, - {RUNE_C(0x001E5F), RUNE_C(0x001E5F)}, - {RUNE_C(0x001E61), RUNE_C(0x001E61)}, - {RUNE_C(0x001E63), RUNE_C(0x001E63)}, - {RUNE_C(0x001E65), RUNE_C(0x001E65)}, - {RUNE_C(0x001E67), RUNE_C(0x001E67)}, - {RUNE_C(0x001E69), RUNE_C(0x001E69)}, - {RUNE_C(0x001E6B), RUNE_C(0x001E6B)}, - {RUNE_C(0x001E6D), RUNE_C(0x001E6D)}, - {RUNE_C(0x001E6F), RUNE_C(0x001E6F)}, - {RUNE_C(0x001E71), RUNE_C(0x001E71)}, - {RUNE_C(0x001E73), RUNE_C(0x001E73)}, - {RUNE_C(0x001E75), RUNE_C(0x001E75)}, - {RUNE_C(0x001E77), RUNE_C(0x001E77)}, - {RUNE_C(0x001E79), RUNE_C(0x001E79)}, - {RUNE_C(0x001E7B), RUNE_C(0x001E7B)}, - {RUNE_C(0x001E7D), RUNE_C(0x001E7D)}, - {RUNE_C(0x001E7F), RUNE_C(0x001E7F)}, - {RUNE_C(0x001E81), RUNE_C(0x001E81)}, - {RUNE_C(0x001E83), RUNE_C(0x001E83)}, - {RUNE_C(0x001E85), RUNE_C(0x001E85)}, - {RUNE_C(0x001E87), RUNE_C(0x001E87)}, - {RUNE_C(0x001E89), RUNE_C(0x001E89)}, - {RUNE_C(0x001E8B), RUNE_C(0x001E8B)}, - {RUNE_C(0x001E8D), RUNE_C(0x001E8D)}, - {RUNE_C(0x001E8F), RUNE_C(0x001E8F)}, - {RUNE_C(0x001E91), RUNE_C(0x001E91)}, - {RUNE_C(0x001E93), RUNE_C(0x001E93)}, - {RUNE_C(0x001E95), RUNE_C(0x001E9D)}, - {RUNE_C(0x001E9F), RUNE_C(0x001E9F)}, - {RUNE_C(0x001EA1), RUNE_C(0x001EA1)}, - {RUNE_C(0x001EA3), RUNE_C(0x001EA3)}, - {RUNE_C(0x001EA5), RUNE_C(0x001EA5)}, - {RUNE_C(0x001EA7), RUNE_C(0x001EA7)}, - {RUNE_C(0x001EA9), RUNE_C(0x001EA9)}, - {RUNE_C(0x001EAB), RUNE_C(0x001EAB)}, - {RUNE_C(0x001EAD), RUNE_C(0x001EAD)}, - {RUNE_C(0x001EAF), RUNE_C(0x001EAF)}, - {RUNE_C(0x001EB1), RUNE_C(0x001EB1)}, - {RUNE_C(0x001EB3), RUNE_C(0x001EB3)}, - {RUNE_C(0x001EB5), RUNE_C(0x001EB5)}, - {RUNE_C(0x001EB7), RUNE_C(0x001EB7)}, - {RUNE_C(0x001EB9), RUNE_C(0x001EB9)}, - {RUNE_C(0x001EBB), RUNE_C(0x001EBB)}, - {RUNE_C(0x001EBD), RUNE_C(0x001EBD)}, - {RUNE_C(0x001EBF), RUNE_C(0x001EBF)}, - {RUNE_C(0x001EC1), RUNE_C(0x001EC1)}, - {RUNE_C(0x001EC3), RUNE_C(0x001EC3)}, - {RUNE_C(0x001EC5), RUNE_C(0x001EC5)}, - {RUNE_C(0x001EC7), RUNE_C(0x001EC7)}, - {RUNE_C(0x001EC9), RUNE_C(0x001EC9)}, - {RUNE_C(0x001ECB), RUNE_C(0x001ECB)}, - {RUNE_C(0x001ECD), RUNE_C(0x001ECD)}, - {RUNE_C(0x001ECF), RUNE_C(0x001ECF)}, - {RUNE_C(0x001ED1), RUNE_C(0x001ED1)}, - {RUNE_C(0x001ED3), RUNE_C(0x001ED3)}, - {RUNE_C(0x001ED5), RUNE_C(0x001ED5)}, - {RUNE_C(0x001ED7), RUNE_C(0x001ED7)}, - {RUNE_C(0x001ED9), RUNE_C(0x001ED9)}, - {RUNE_C(0x001EDB), RUNE_C(0x001EDB)}, - {RUNE_C(0x001EDD), RUNE_C(0x001EDD)}, - {RUNE_C(0x001EDF), RUNE_C(0x001EDF)}, - {RUNE_C(0x001EE1), RUNE_C(0x001EE1)}, - {RUNE_C(0x001EE3), RUNE_C(0x001EE3)}, - {RUNE_C(0x001EE5), RUNE_C(0x001EE5)}, - {RUNE_C(0x001EE7), RUNE_C(0x001EE7)}, - {RUNE_C(0x001EE9), RUNE_C(0x001EE9)}, - {RUNE_C(0x001EEB), RUNE_C(0x001EEB)}, - {RUNE_C(0x001EED), RUNE_C(0x001EED)}, - {RUNE_C(0x001EEF), RUNE_C(0x001EEF)}, - {RUNE_C(0x001EF1), RUNE_C(0x001EF1)}, - {RUNE_C(0x001EF3), RUNE_C(0x001EF3)}, - {RUNE_C(0x001EF5), RUNE_C(0x001EF5)}, - {RUNE_C(0x001EF7), RUNE_C(0x001EF7)}, - {RUNE_C(0x001EF9), RUNE_C(0x001EF9)}, - {RUNE_C(0x001EFB), RUNE_C(0x001EFB)}, - {RUNE_C(0x001EFD), RUNE_C(0x001EFD)}, - {RUNE_C(0x001EFF), RUNE_C(0x001F07)}, - {RUNE_C(0x001F10), RUNE_C(0x001F15)}, - {RUNE_C(0x001F20), RUNE_C(0x001F27)}, - {RUNE_C(0x001F30), RUNE_C(0x001F37)}, - {RUNE_C(0x001F40), RUNE_C(0x001F45)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F60), RUNE_C(0x001F67)}, - {RUNE_C(0x001F70), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001F87)}, - {RUNE_C(0x001F90), RUNE_C(0x001F97)}, - {RUNE_C(0x001FA0), RUNE_C(0x001FA7)}, - {RUNE_C(0x001FB0), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FB7)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FC7)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FD7)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FE7)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FF7)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x00210A), RUNE_C(0x00210A)}, - {RUNE_C(0x00210E), RUNE_C(0x00210F)}, - {RUNE_C(0x002113), RUNE_C(0x002113)}, - {RUNE_C(0x00212F), RUNE_C(0x00212F)}, - {RUNE_C(0x002134), RUNE_C(0x002134)}, - {RUNE_C(0x002139), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213D)}, - {RUNE_C(0x002146), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002170), RUNE_C(0x00217F)}, - {RUNE_C(0x002184), RUNE_C(0x002184)}, - {RUNE_C(0x0024D0), RUNE_C(0x0024E9)}, - {RUNE_C(0x002C30), RUNE_C(0x002C5F)}, - {RUNE_C(0x002C61), RUNE_C(0x002C61)}, - {RUNE_C(0x002C65), RUNE_C(0x002C66)}, - {RUNE_C(0x002C68), RUNE_C(0x002C68)}, - {RUNE_C(0x002C6A), RUNE_C(0x002C6A)}, - {RUNE_C(0x002C6C), RUNE_C(0x002C6C)}, - {RUNE_C(0x002C71), RUNE_C(0x002C71)}, - {RUNE_C(0x002C73), RUNE_C(0x002C74)}, - {RUNE_C(0x002C76), RUNE_C(0x002C7D)}, - {RUNE_C(0x002C81), RUNE_C(0x002C81)}, - {RUNE_C(0x002C83), RUNE_C(0x002C83)}, - {RUNE_C(0x002C85), RUNE_C(0x002C85)}, - {RUNE_C(0x002C87), RUNE_C(0x002C87)}, - {RUNE_C(0x002C89), RUNE_C(0x002C89)}, - {RUNE_C(0x002C8B), RUNE_C(0x002C8B)}, - {RUNE_C(0x002C8D), RUNE_C(0x002C8D)}, - {RUNE_C(0x002C8F), RUNE_C(0x002C8F)}, - {RUNE_C(0x002C91), RUNE_C(0x002C91)}, - {RUNE_C(0x002C93), RUNE_C(0x002C93)}, - {RUNE_C(0x002C95), RUNE_C(0x002C95)}, - {RUNE_C(0x002C97), RUNE_C(0x002C97)}, - {RUNE_C(0x002C99), RUNE_C(0x002C99)}, - {RUNE_C(0x002C9B), RUNE_C(0x002C9B)}, - {RUNE_C(0x002C9D), RUNE_C(0x002C9D)}, - {RUNE_C(0x002C9F), RUNE_C(0x002C9F)}, - {RUNE_C(0x002CA1), RUNE_C(0x002CA1)}, - {RUNE_C(0x002CA3), RUNE_C(0x002CA3)}, - {RUNE_C(0x002CA5), RUNE_C(0x002CA5)}, - {RUNE_C(0x002CA7), RUNE_C(0x002CA7)}, - {RUNE_C(0x002CA9), RUNE_C(0x002CA9)}, - {RUNE_C(0x002CAB), RUNE_C(0x002CAB)}, - {RUNE_C(0x002CAD), RUNE_C(0x002CAD)}, - {RUNE_C(0x002CAF), RUNE_C(0x002CAF)}, - {RUNE_C(0x002CB1), RUNE_C(0x002CB1)}, - {RUNE_C(0x002CB3), RUNE_C(0x002CB3)}, - {RUNE_C(0x002CB5), RUNE_C(0x002CB5)}, - {RUNE_C(0x002CB7), RUNE_C(0x002CB7)}, - {RUNE_C(0x002CB9), RUNE_C(0x002CB9)}, - {RUNE_C(0x002CBB), RUNE_C(0x002CBB)}, - {RUNE_C(0x002CBD), RUNE_C(0x002CBD)}, - {RUNE_C(0x002CBF), RUNE_C(0x002CBF)}, - {RUNE_C(0x002CC1), RUNE_C(0x002CC1)}, - {RUNE_C(0x002CC3), RUNE_C(0x002CC3)}, - {RUNE_C(0x002CC5), RUNE_C(0x002CC5)}, - {RUNE_C(0x002CC7), RUNE_C(0x002CC7)}, - {RUNE_C(0x002CC9), RUNE_C(0x002CC9)}, - {RUNE_C(0x002CCB), RUNE_C(0x002CCB)}, - {RUNE_C(0x002CCD), RUNE_C(0x002CCD)}, - {RUNE_C(0x002CCF), RUNE_C(0x002CCF)}, - {RUNE_C(0x002CD1), RUNE_C(0x002CD1)}, - {RUNE_C(0x002CD3), RUNE_C(0x002CD3)}, - {RUNE_C(0x002CD5), RUNE_C(0x002CD5)}, - {RUNE_C(0x002CD7), RUNE_C(0x002CD7)}, - {RUNE_C(0x002CD9), RUNE_C(0x002CD9)}, - {RUNE_C(0x002CDB), RUNE_C(0x002CDB)}, - {RUNE_C(0x002CDD), RUNE_C(0x002CDD)}, - {RUNE_C(0x002CDF), RUNE_C(0x002CDF)}, - {RUNE_C(0x002CE1), RUNE_C(0x002CE1)}, - {RUNE_C(0x002CE3), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEC), RUNE_C(0x002CEC)}, - {RUNE_C(0x002CEE), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF3), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x00A641), RUNE_C(0x00A641)}, - {RUNE_C(0x00A643), RUNE_C(0x00A643)}, - {RUNE_C(0x00A645), RUNE_C(0x00A645)}, - {RUNE_C(0x00A647), RUNE_C(0x00A647)}, - {RUNE_C(0x00A649), RUNE_C(0x00A649)}, - {RUNE_C(0x00A64B), RUNE_C(0x00A64B)}, - {RUNE_C(0x00A64D), RUNE_C(0x00A64D)}, - {RUNE_C(0x00A64F), RUNE_C(0x00A64F)}, - {RUNE_C(0x00A651), RUNE_C(0x00A651)}, - {RUNE_C(0x00A653), RUNE_C(0x00A653)}, - {RUNE_C(0x00A655), RUNE_C(0x00A655)}, - {RUNE_C(0x00A657), RUNE_C(0x00A657)}, - {RUNE_C(0x00A659), RUNE_C(0x00A659)}, - {RUNE_C(0x00A65B), RUNE_C(0x00A65B)}, - {RUNE_C(0x00A65D), RUNE_C(0x00A65D)}, - {RUNE_C(0x00A65F), RUNE_C(0x00A65F)}, - {RUNE_C(0x00A661), RUNE_C(0x00A661)}, - {RUNE_C(0x00A663), RUNE_C(0x00A663)}, - {RUNE_C(0x00A665), RUNE_C(0x00A665)}, - {RUNE_C(0x00A667), RUNE_C(0x00A667)}, - {RUNE_C(0x00A669), RUNE_C(0x00A669)}, - {RUNE_C(0x00A66B), RUNE_C(0x00A66B)}, - {RUNE_C(0x00A66D), RUNE_C(0x00A66D)}, - {RUNE_C(0x00A681), RUNE_C(0x00A681)}, - {RUNE_C(0x00A683), RUNE_C(0x00A683)}, - {RUNE_C(0x00A685), RUNE_C(0x00A685)}, - {RUNE_C(0x00A687), RUNE_C(0x00A687)}, - {RUNE_C(0x00A689), RUNE_C(0x00A689)}, - {RUNE_C(0x00A68B), RUNE_C(0x00A68B)}, - {RUNE_C(0x00A68D), RUNE_C(0x00A68D)}, - {RUNE_C(0x00A68F), RUNE_C(0x00A68F)}, - {RUNE_C(0x00A691), RUNE_C(0x00A691)}, - {RUNE_C(0x00A693), RUNE_C(0x00A693)}, - {RUNE_C(0x00A695), RUNE_C(0x00A695)}, - {RUNE_C(0x00A697), RUNE_C(0x00A697)}, - {RUNE_C(0x00A699), RUNE_C(0x00A699)}, - {RUNE_C(0x00A69B), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A723), RUNE_C(0x00A723)}, - {RUNE_C(0x00A725), RUNE_C(0x00A725)}, - {RUNE_C(0x00A727), RUNE_C(0x00A727)}, - {RUNE_C(0x00A729), RUNE_C(0x00A729)}, - {RUNE_C(0x00A72B), RUNE_C(0x00A72B)}, - {RUNE_C(0x00A72D), RUNE_C(0x00A72D)}, - {RUNE_C(0x00A72F), RUNE_C(0x00A731)}, - {RUNE_C(0x00A733), RUNE_C(0x00A733)}, - {RUNE_C(0x00A735), RUNE_C(0x00A735)}, - {RUNE_C(0x00A737), RUNE_C(0x00A737)}, - {RUNE_C(0x00A739), RUNE_C(0x00A739)}, - {RUNE_C(0x00A73B), RUNE_C(0x00A73B)}, - {RUNE_C(0x00A73D), RUNE_C(0x00A73D)}, - {RUNE_C(0x00A73F), RUNE_C(0x00A73F)}, - {RUNE_C(0x00A741), RUNE_C(0x00A741)}, - {RUNE_C(0x00A743), RUNE_C(0x00A743)}, - {RUNE_C(0x00A745), RUNE_C(0x00A745)}, - {RUNE_C(0x00A747), RUNE_C(0x00A747)}, - {RUNE_C(0x00A749), RUNE_C(0x00A749)}, - {RUNE_C(0x00A74B), RUNE_C(0x00A74B)}, - {RUNE_C(0x00A74D), RUNE_C(0x00A74D)}, - {RUNE_C(0x00A74F), RUNE_C(0x00A74F)}, - {RUNE_C(0x00A751), RUNE_C(0x00A751)}, - {RUNE_C(0x00A753), RUNE_C(0x00A753)}, - {RUNE_C(0x00A755), RUNE_C(0x00A755)}, - {RUNE_C(0x00A757), RUNE_C(0x00A757)}, - {RUNE_C(0x00A759), RUNE_C(0x00A759)}, - {RUNE_C(0x00A75B), RUNE_C(0x00A75B)}, - {RUNE_C(0x00A75D), RUNE_C(0x00A75D)}, - {RUNE_C(0x00A75F), RUNE_C(0x00A75F)}, - {RUNE_C(0x00A761), RUNE_C(0x00A761)}, - {RUNE_C(0x00A763), RUNE_C(0x00A763)}, - {RUNE_C(0x00A765), RUNE_C(0x00A765)}, - {RUNE_C(0x00A767), RUNE_C(0x00A767)}, - {RUNE_C(0x00A769), RUNE_C(0x00A769)}, - {RUNE_C(0x00A76B), RUNE_C(0x00A76B)}, - {RUNE_C(0x00A76D), RUNE_C(0x00A76D)}, - {RUNE_C(0x00A76F), RUNE_C(0x00A778)}, - {RUNE_C(0x00A77A), RUNE_C(0x00A77A)}, - {RUNE_C(0x00A77C), RUNE_C(0x00A77C)}, - {RUNE_C(0x00A77F), RUNE_C(0x00A77F)}, - {RUNE_C(0x00A781), RUNE_C(0x00A781)}, - {RUNE_C(0x00A783), RUNE_C(0x00A783)}, - {RUNE_C(0x00A785), RUNE_C(0x00A785)}, - {RUNE_C(0x00A787), RUNE_C(0x00A787)}, - {RUNE_C(0x00A78C), RUNE_C(0x00A78C)}, - {RUNE_C(0x00A78E), RUNE_C(0x00A78E)}, - {RUNE_C(0x00A791), RUNE_C(0x00A791)}, - {RUNE_C(0x00A793), RUNE_C(0x00A795)}, - {RUNE_C(0x00A797), RUNE_C(0x00A797)}, - {RUNE_C(0x00A799), RUNE_C(0x00A799)}, - {RUNE_C(0x00A79B), RUNE_C(0x00A79B)}, - {RUNE_C(0x00A79D), RUNE_C(0x00A79D)}, - {RUNE_C(0x00A79F), RUNE_C(0x00A79F)}, - {RUNE_C(0x00A7A1), RUNE_C(0x00A7A1)}, - {RUNE_C(0x00A7A3), RUNE_C(0x00A7A3)}, - {RUNE_C(0x00A7A5), RUNE_C(0x00A7A5)}, - {RUNE_C(0x00A7A7), RUNE_C(0x00A7A7)}, - {RUNE_C(0x00A7A9), RUNE_C(0x00A7A9)}, - {RUNE_C(0x00A7AF), RUNE_C(0x00A7AF)}, - {RUNE_C(0x00A7B5), RUNE_C(0x00A7B5)}, - {RUNE_C(0x00A7B7), RUNE_C(0x00A7B7)}, - {RUNE_C(0x00A7B9), RUNE_C(0x00A7B9)}, - {RUNE_C(0x00A7BB), RUNE_C(0x00A7BB)}, - {RUNE_C(0x00A7BD), RUNE_C(0x00A7BD)}, - {RUNE_C(0x00A7BF), RUNE_C(0x00A7BF)}, - {RUNE_C(0x00A7C1), RUNE_C(0x00A7C1)}, - {RUNE_C(0x00A7C3), RUNE_C(0x00A7C3)}, - {RUNE_C(0x00A7C8), RUNE_C(0x00A7C8)}, - {RUNE_C(0x00A7CA), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D1), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D5)}, - {RUNE_C(0x00A7D7), RUNE_C(0x00A7D7)}, - {RUNE_C(0x00A7D9), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A7F4)}, - {RUNE_C(0x00A7F6), RUNE_C(0x00A7F6)}, - {RUNE_C(0x00A7F8), RUNE_C(0x00A7FA)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABBF)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x010428), RUNE_C(0x01044F)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010780), RUNE_C(0x010780)}, - {RUNE_C(0x010783), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x0118C0), RUNE_C(0x0118DF)}, - {RUNE_C(0x016E60), RUNE_C(0x016E7F)}, - {RUNE_C(0x01D41A), RUNE_C(0x01D433)}, - {RUNE_C(0x01D44E), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D467)}, - {RUNE_C(0x01D482), RUNE_C(0x01D49B)}, - {RUNE_C(0x01D4B6), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D4CF)}, - {RUNE_C(0x01D4EA), RUNE_C(0x01D503)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D537)}, - {RUNE_C(0x01D552), RUNE_C(0x01D56B)}, - {RUNE_C(0x01D586), RUNE_C(0x01D59F)}, - {RUNE_C(0x01D5BA), RUNE_C(0x01D5D3)}, - {RUNE_C(0x01D5EE), RUNE_C(0x01D607)}, - {RUNE_C(0x01D622), RUNE_C(0x01D63B)}, - {RUNE_C(0x01D656), RUNE_C(0x01D66F)}, - {RUNE_C(0x01D68A), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6E1)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D71B)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D755)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D78F)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7C9)}, - {RUNE_C(0x01D7CB), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF09)}, - {RUNE_C(0x01DF0B), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E922), RUNE_C(0x01E943)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0x03, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xBC, + 0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, + 0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xC4, 0x08, 0x00, 0x40, 0x8C, 0x14, 0x32, + 0xC0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0x7C, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xB9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0xC0, 0xDF, 0xFF, 0xFF, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xEB, + 0xEF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF}, + {0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, + 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, 0xFF}, + {0xFF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x0F, + 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, + 0xFC, 0xFF, 0xFF, 0xF7, 0x03, 0x00, 0x00, 0xF0}, + {0xFF, 0xFF, 0xDF, 0x0F, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFD, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, + 0xF7, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFB, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_lower(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_math.c b/lib/unicode/prop/uprop_is_math.c index ca2318b..d732b99 100644 --- a/lib/unicode/prop/uprop_is_math.c +++ b/lib/unicode/prop/uprop_is_math.c @@ -1,157 +1,368 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x70, - 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 4, 5, 6, 7, 1, 8, 9, 10, 1, 6, 6, 11, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 13, 14, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 15, 16, 17, 18, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x0003D0), RUNE_C(0x0003D2)}, - {RUNE_C(0x0003D5), RUNE_C(0x0003D5)}, - {RUNE_C(0x0003F0), RUNE_C(0x0003F1)}, - {RUNE_C(0x0003F4), RUNE_C(0x0003F6)}, - {RUNE_C(0x000606), RUNE_C(0x000608)}, - {RUNE_C(0x002016), RUNE_C(0x002016)}, - {RUNE_C(0x002032), RUNE_C(0x002034)}, - {RUNE_C(0x002040), RUNE_C(0x002040)}, - {RUNE_C(0x002044), RUNE_C(0x002044)}, - {RUNE_C(0x002052), RUNE_C(0x002052)}, - {RUNE_C(0x002061), RUNE_C(0x002064)}, - {RUNE_C(0x00207A), RUNE_C(0x00207E)}, - {RUNE_C(0x00208A), RUNE_C(0x00208E)}, - {RUNE_C(0x0020D0), RUNE_C(0x0020DC)}, - {RUNE_C(0x0020E1), RUNE_C(0x0020E1)}, - {RUNE_C(0x0020E5), RUNE_C(0x0020E6)}, - {RUNE_C(0x0020EB), RUNE_C(0x0020EF)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002118), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002128), RUNE_C(0x002129)}, - {RUNE_C(0x00212C), RUNE_C(0x00212D)}, - {RUNE_C(0x00212F), RUNE_C(0x002131)}, - {RUNE_C(0x002133), RUNE_C(0x002138)}, - {RUNE_C(0x00213C), RUNE_C(0x002149)}, - {RUNE_C(0x00214B), RUNE_C(0x00214B)}, - {RUNE_C(0x002190), RUNE_C(0x0021A7)}, - {RUNE_C(0x0021A9), RUNE_C(0x0021AE)}, - {RUNE_C(0x0021B0), RUNE_C(0x0021B1)}, - {RUNE_C(0x0021B6), RUNE_C(0x0021B7)}, - {RUNE_C(0x0021BC), RUNE_C(0x0021DB)}, - {RUNE_C(0x0021DD), RUNE_C(0x0021DD)}, - {RUNE_C(0x0021E4), RUNE_C(0x0021E5)}, - {RUNE_C(0x0021F4), RUNE_C(0x0022FF)}, - {RUNE_C(0x002308), RUNE_C(0x00230B)}, - {RUNE_C(0x002320), RUNE_C(0x002321)}, - {RUNE_C(0x00237C), RUNE_C(0x00237C)}, - {RUNE_C(0x00239B), RUNE_C(0x0023B5)}, - {RUNE_C(0x0023B7), RUNE_C(0x0023B7)}, - {RUNE_C(0x0023D0), RUNE_C(0x0023D0)}, - {RUNE_C(0x0023DC), RUNE_C(0x0023E2)}, - {RUNE_C(0x0025A0), RUNE_C(0x0025A1)}, - {RUNE_C(0x0025AE), RUNE_C(0x0025B7)}, - {RUNE_C(0x0025BC), RUNE_C(0x0025C1)}, - {RUNE_C(0x0025C6), RUNE_C(0x0025C7)}, - {RUNE_C(0x0025CA), RUNE_C(0x0025CB)}, - {RUNE_C(0x0025CF), RUNE_C(0x0025D3)}, - {RUNE_C(0x0025E2), RUNE_C(0x0025E2)}, - {RUNE_C(0x0025E4), RUNE_C(0x0025E4)}, - {RUNE_C(0x0025E7), RUNE_C(0x0025EC)}, - {RUNE_C(0x0025F8), RUNE_C(0x0025FF)}, - {RUNE_C(0x002605), RUNE_C(0x002606)}, - {RUNE_C(0x002640), RUNE_C(0x002640)}, - {RUNE_C(0x002642), RUNE_C(0x002642)}, - {RUNE_C(0x002660), RUNE_C(0x002663)}, - {RUNE_C(0x00266D), RUNE_C(0x00266F)}, - {RUNE_C(0x0027C0), RUNE_C(0x0027FF)}, - {RUNE_C(0x002900), RUNE_C(0x002AFF)}, - {RUNE_C(0x002B30), RUNE_C(0x002B44)}, - {RUNE_C(0x002B47), RUNE_C(0x002B4C)}, - {RUNE_C(0x00FB29), RUNE_C(0x00FB29)}, - {RUNE_C(0x00FE61), RUNE_C(0x00FE66)}, - {RUNE_C(0x00FE68), RUNE_C(0x00FE68)}, - {RUNE_C(0x00FF0B), RUNE_C(0x00FF0B)}, - {RUNE_C(0x00FF1C), RUNE_C(0x00FF1E)}, - {RUNE_C(0x00FF3C), RUNE_C(0x00FF3C)}, - {RUNE_C(0x00FF3E), RUNE_C(0x00FF3E)}, - {RUNE_C(0x00FF5C), RUNE_C(0x00FF5C)}, - {RUNE_C(0x00FF5E), RUNE_C(0x00FF5E)}, - {RUNE_C(0x00FFE2), RUNE_C(0x00FFE2)}, - {RUNE_C(0x00FFE9), RUNE_C(0x00FFEC)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01D7CE), RUNE_C(0x01D7FF)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x01EEF0), RUNE_C(0x01EEF1)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x73, 0x00}, + {0xC0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x1C, 0x00, + 0x11, 0x00, 0x04, 0x00, 0x1E, 0x00, 0x00, 0x7C, + 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x1F, 0x62, 0xF8, 0x00, 0x00}, + {0x84, 0xFC, 0x2F, 0x3F, 0x10, 0xB3, 0xFB, 0xF1, + 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7E, 0xC3, 0xF0, + 0xFF, 0xFF, 0xFF, 0x2F, 0x30, 0x00, 0xF0, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x0F, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xBF, 0x00, + 0x00, 0x00, 0x01, 0xF0, 0x07, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0xFF, 0xF0, + 0xC3, 0x8C, 0x0F, 0x00, 0x94, 0x1F, 0x00, 0xFF}, + {0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x9F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7E, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x08, 0x00, 0x70, 0x00, 0x00, 0x00, 0x50, + 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x1E, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E, + 0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_math(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_pat_syn.c b/lib/unicode/prop/uprop_is_pat_syn.c index c2beece..3b50711 100644 --- a/lib/unicode/prop/uprop_is_pat_syn.c +++ b/lib/unicode/prop/uprop_is_pat_syn.c @@ -1,41 +1,332 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0xFC, - 0x01, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x78, - 0x00, 0x00, 0x00, 0x00, 0xFE, 0x5A, 0x43, 0x88, - 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 3, 4, 4, 5, 4, 4, 6, 4, 4, 4, 4, 1, 1, 7, 1, + 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x002010), RUNE_C(0x002027)}, - {RUNE_C(0x002030), RUNE_C(0x00203E)}, - {RUNE_C(0x002041), RUNE_C(0x002053)}, - {RUNE_C(0x002055), RUNE_C(0x00205E)}, - {RUNE_C(0x002190), RUNE_C(0x00245F)}, - {RUNE_C(0x002500), RUNE_C(0x002775)}, - {RUNE_C(0x002794), RUNE_C(0x002BFF)}, - {RUNE_C(0x002E00), RUNE_C(0x002E7F)}, - {RUNE_C(0x003001), RUNE_C(0x003003)}, - {RUNE_C(0x003008), RUNE_C(0x003020)}, - {RUNE_C(0x003030), RUNE_C(0x003030)}, - {RUNE_C(0x00FD3E), RUNE_C(0x00FD3F)}, - {RUNE_C(0x00FE45), RUNE_C(0x00FE46)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0xFC, + 0x01, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x78, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x5A, 0x43, 0x88, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x7F, + 0xFE, 0xFF, 0xEF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x0E, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_pat_syn(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_pat_ws.c b/lib/unicode/prop/uprop_is_pat_ws.c index 8f701b5..554865d 100644 --- a/lib/unicode/prop/uprop_is_pat_ws.c +++ b/lib/unicode/prop/uprop_is_pat_ws.c @@ -1,30 +1,176 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x3E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00200E), RUNE_C(0x00200F)}, - {RUNE_C(0x002028), RUNE_C(0x002029)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x3E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xC0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_pat_ws(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_pcm.c b/lib/unicode/prop/uprop_is_pcm.c index b1c243f..480e79e 100644 --- a/lib/unicode/prop/uprop_is_pcm.c +++ b/lib/unicode/prop/uprop_is_pcm.c @@ -1,28 +1,184 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000600), RUNE_C(0x000605)}, - {RUNE_C(0x0006DD), RUNE_C(0x0006DD)}, - {RUNE_C(0x00070F), RUNE_C(0x00070F)}, - {RUNE_C(0x000890), RUNE_C(0x000891)}, - {RUNE_C(0x0008E2), RUNE_C(0x0008E2)}, - {RUNE_C(0x0110BD), RUNE_C(0x0110BD)}, - {RUNE_C(0x0110CD), RUNE_C(0x0110CD)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_pcm(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_qmark.c b/lib/unicode/prop/uprop_is_qmark.c index c62e106..11d45fd 100644 --- a/lib/unicode/prop/uprop_is_qmark.c +++ b/lib/unicode/prop/uprop_is_qmark.c @@ -1,37 +1,200 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 3, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x002018), RUNE_C(0x00201F)}, - {RUNE_C(0x002039), RUNE_C(0x00203A)}, - {RUNE_C(0x002E42), RUNE_C(0x002E42)}, - {RUNE_C(0x00300C), RUNE_C(0x00300F)}, - {RUNE_C(0x00301D), RUNE_C(0x00301F)}, - {RUNE_C(0x00FE41), RUNE_C(0x00FE44)}, - {RUNE_C(0x00FF02), RUNE_C(0x00FF02)}, - {RUNE_C(0x00FF07), RUNE_C(0x00FF07)}, - {RUNE_C(0x00FF62), RUNE_C(0x00FF63)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xF0, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_qmark(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_radical.c b/lib/unicode/prop/uprop_is_radical.c index 028a64a..e59620c 100644 --- a/lib/unicode/prop/uprop_is_radical.c +++ b/lib/unicode/prop/uprop_is_radical.c @@ -1,24 +1,116 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x002E80), RUNE_C(0x002E99)}, - {RUNE_C(0x002E9B), RUNE_C(0x002EF3)}, - {RUNE_C(0x002F00), RUNE_C(0x002FD5)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][128] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_radical(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 1024]], ch % 1024); } diff --git a/lib/unicode/prop/uprop_is_sd.c b/lib/unicode/prop/uprop_is_sd.c index 0cbcb5c..6716ae3 100644 --- a/lib/unicode/prop/uprop_is_sd.c +++ b/lib/unicode/prop/uprop_is_sd.c @@ -1,61 +1,248 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, + 6, 3, 3, 3, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 9, 3, 3, 3, 10, + 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00012F), RUNE_C(0x00012F)}, - {RUNE_C(0x000249), RUNE_C(0x000249)}, - {RUNE_C(0x000268), RUNE_C(0x000268)}, - {RUNE_C(0x00029D), RUNE_C(0x00029D)}, - {RUNE_C(0x0002B2), RUNE_C(0x0002B2)}, - {RUNE_C(0x0003F3), RUNE_C(0x0003F3)}, - {RUNE_C(0x000456), RUNE_C(0x000456)}, - {RUNE_C(0x000458), RUNE_C(0x000458)}, - {RUNE_C(0x001D62), RUNE_C(0x001D62)}, - {RUNE_C(0x001D96), RUNE_C(0x001D96)}, - {RUNE_C(0x001DA4), RUNE_C(0x001DA4)}, - {RUNE_C(0x001DA8), RUNE_C(0x001DA8)}, - {RUNE_C(0x001E2D), RUNE_C(0x001E2D)}, - {RUNE_C(0x001ECB), RUNE_C(0x001ECB)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x002148), RUNE_C(0x002149)}, - {RUNE_C(0x002C7C), RUNE_C(0x002C7C)}, - {RUNE_C(0x01D422), RUNE_C(0x01D423)}, - {RUNE_C(0x01D456), RUNE_C(0x01D457)}, - {RUNE_C(0x01D48A), RUNE_C(0x01D48B)}, - {RUNE_C(0x01D4BE), RUNE_C(0x01D4BF)}, - {RUNE_C(0x01D4F2), RUNE_C(0x01D4F3)}, - {RUNE_C(0x01D526), RUNE_C(0x01D527)}, - {RUNE_C(0x01D55A), RUNE_C(0x01D55B)}, - {RUNE_C(0x01D58E), RUNE_C(0x01D58F)}, - {RUNE_C(0x01D5C2), RUNE_C(0x01D5C3)}, - {RUNE_C(0x01D5F6), RUNE_C(0x01D5F7)}, - {RUNE_C(0x01D62A), RUNE_C(0x01D62B)}, - {RUNE_C(0x01D65E), RUNE_C(0x01D65F)}, - {RUNE_C(0x01D692), RUNE_C(0x01D693)}, - {RUNE_C(0x01DF1A), RUNE_C(0x01DF1A)}, - {RUNE_C(0x01E04C), RUNE_C(0x01E04D)}, - {RUNE_C(0x01E068), RUNE_C(0x01E068)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x10, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_sd(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_sterm.c b/lib/unicode/prop/uprop_is_sterm.c index 90966c4..109c4e1 100644 --- a/lib/unicode/prop/uprop_is_sterm.c +++ b/lib/unicode/prop/uprop_is_sterm.c @@ -1,106 +1,468 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 1, + 7, 1, 1, 8, 1, 1, 9, 10, 11, 12, 13, 14, 15, 1, 1, 1, + 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 17, 1, + 18, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 19, 1, 20, 1, 21, 22, 23, 24, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 26, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 1, 1, 28, + 29, 30, 31, 1, 32, 33, 34, 35, 1, 36, 37, 1, 34, 1, 38, 39, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 40, 41, 1, 1, 42, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 43, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 44, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000589), RUNE_C(0x000589)}, - {RUNE_C(0x00061D), RUNE_C(0x00061F)}, - {RUNE_C(0x0006D4), RUNE_C(0x0006D4)}, - {RUNE_C(0x000700), RUNE_C(0x000702)}, - {RUNE_C(0x0007F9), RUNE_C(0x0007F9)}, - {RUNE_C(0x000837), RUNE_C(0x000837)}, - {RUNE_C(0x000839), RUNE_C(0x000839)}, - {RUNE_C(0x00083D), RUNE_C(0x00083E)}, - {RUNE_C(0x000964), RUNE_C(0x000965)}, - {RUNE_C(0x00104A), RUNE_C(0x00104B)}, - {RUNE_C(0x001362), RUNE_C(0x001362)}, - {RUNE_C(0x001367), RUNE_C(0x001368)}, - {RUNE_C(0x00166E), RUNE_C(0x00166E)}, - {RUNE_C(0x001735), RUNE_C(0x001736)}, - {RUNE_C(0x0017D4), RUNE_C(0x0017D5)}, - {RUNE_C(0x001803), RUNE_C(0x001803)}, - {RUNE_C(0x001809), RUNE_C(0x001809)}, - {RUNE_C(0x001944), RUNE_C(0x001945)}, - {RUNE_C(0x001AA8), RUNE_C(0x001AAB)}, - {RUNE_C(0x001B5A), RUNE_C(0x001B5B)}, - {RUNE_C(0x001B5E), RUNE_C(0x001B5F)}, - {RUNE_C(0x001B7D), RUNE_C(0x001B7E)}, - {RUNE_C(0x001C3B), RUNE_C(0x001C3C)}, - {RUNE_C(0x001C7E), RUNE_C(0x001C7F)}, - {RUNE_C(0x00203C), RUNE_C(0x00203D)}, - {RUNE_C(0x002047), RUNE_C(0x002049)}, - {RUNE_C(0x002E2E), RUNE_C(0x002E2E)}, - {RUNE_C(0x002E3C), RUNE_C(0x002E3C)}, - {RUNE_C(0x002E53), RUNE_C(0x002E54)}, - {RUNE_C(0x003002), RUNE_C(0x003002)}, - {RUNE_C(0x00A4FF), RUNE_C(0x00A4FF)}, - {RUNE_C(0x00A60E), RUNE_C(0x00A60F)}, - {RUNE_C(0x00A6F3), RUNE_C(0x00A6F3)}, - {RUNE_C(0x00A6F7), RUNE_C(0x00A6F7)}, - {RUNE_C(0x00A876), RUNE_C(0x00A877)}, - {RUNE_C(0x00A8CE), RUNE_C(0x00A8CF)}, - {RUNE_C(0x00A92F), RUNE_C(0x00A92F)}, - {RUNE_C(0x00A9C8), RUNE_C(0x00A9C9)}, - {RUNE_C(0x00AA5D), RUNE_C(0x00AA5F)}, - {RUNE_C(0x00AAF0), RUNE_C(0x00AAF1)}, - {RUNE_C(0x00ABEB), RUNE_C(0x00ABEB)}, - {RUNE_C(0x00FE52), RUNE_C(0x00FE52)}, - {RUNE_C(0x00FE56), RUNE_C(0x00FE57)}, - {RUNE_C(0x00FF01), RUNE_C(0x00FF01)}, - {RUNE_C(0x00FF0E), RUNE_C(0x00FF0E)}, - {RUNE_C(0x00FF1F), RUNE_C(0x00FF1F)}, - {RUNE_C(0x00FF61), RUNE_C(0x00FF61)}, - {RUNE_C(0x010A56), RUNE_C(0x010A57)}, - {RUNE_C(0x010F55), RUNE_C(0x010F59)}, - {RUNE_C(0x010F86), RUNE_C(0x010F89)}, - {RUNE_C(0x011047), RUNE_C(0x011048)}, - {RUNE_C(0x0110BE), RUNE_C(0x0110C1)}, - {RUNE_C(0x011141), RUNE_C(0x011143)}, - {RUNE_C(0x0111C5), RUNE_C(0x0111C6)}, - {RUNE_C(0x0111CD), RUNE_C(0x0111CD)}, - {RUNE_C(0x0111DE), RUNE_C(0x0111DF)}, - {RUNE_C(0x011238), RUNE_C(0x011239)}, - {RUNE_C(0x01123B), RUNE_C(0x01123C)}, - {RUNE_C(0x0112A9), RUNE_C(0x0112A9)}, - {RUNE_C(0x01144B), RUNE_C(0x01144C)}, - {RUNE_C(0x0115C2), RUNE_C(0x0115C3)}, - {RUNE_C(0x0115C9), RUNE_C(0x0115D7)}, - {RUNE_C(0x011641), RUNE_C(0x011642)}, - {RUNE_C(0x01173C), RUNE_C(0x01173E)}, - {RUNE_C(0x011944), RUNE_C(0x011944)}, - {RUNE_C(0x011946), RUNE_C(0x011946)}, - {RUNE_C(0x011A42), RUNE_C(0x011A43)}, - {RUNE_C(0x011A9B), RUNE_C(0x011A9C)}, - {RUNE_C(0x011C41), RUNE_C(0x011C42)}, - {RUNE_C(0x011EF7), RUNE_C(0x011EF8)}, - {RUNE_C(0x011F43), RUNE_C(0x011F44)}, - {RUNE_C(0x016A6E), RUNE_C(0x016A6F)}, - {RUNE_C(0x016AF5), RUNE_C(0x016AF5)}, - {RUNE_C(0x016B37), RUNE_C(0x016B38)}, - {RUNE_C(0x016B44), RUNE_C(0x016B44)}, - {RUNE_C(0x016E98), RUNE_C(0x016E98)}, - {RUNE_C(0x01BC9F), RUNE_C(0x01BC9F)}, - {RUNE_C(0x01DA88), RUNE_C(0x01DA88)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x62, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xCC, 0x00, 0x00, 0x00, 0x60, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, + 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80}, + {0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x02, 0x40, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_sterm(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_term.c b/lib/unicode/prop/uprop_is_term.c index 1475fbc..68d409b 100644 --- a/lib/unicode/prop/uprop_is_term.c +++ b/lib/unicode/prop/uprop_is_term.c @@ -1,131 +1,700 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x02, 0x50, 0x00, 0x8C, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 4, 5, 6, 7, 8, + 9, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 12, 1, + 13, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 15, 16, 17, 18, + 19, 1, 20, 1, 1, 21, 22, 1, 23, 1, 1, 1, 1, 1, 1, 1, + 24, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, + 26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 27, 1, 1, 28, 29, 1, 1, + 30, 31, 32, 33, 34, 35, 1, 36, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 38, 1, + 1, 1, 1, 1, 1, 1, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, + 40, 1, 41, 1, 42, 43, 44, 45, 1, 1, 1, 1, 1, 1, 46, 47, + 48, 49, 50, 51, 52, 53, 1, 1, 54, 1, 1, 55, 56, 1, 57, 1, + 1, 1, 58, 1, 59, 60, 1, 1, 61, 1, 1, 1, 1, 62, 63, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 65, 66, 67, 1, 1, 1, 1, 1, 1, 68, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 41, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00037E), RUNE_C(0x00037E)}, - {RUNE_C(0x000387), RUNE_C(0x000387)}, - {RUNE_C(0x000589), RUNE_C(0x000589)}, - {RUNE_C(0x0005C3), RUNE_C(0x0005C3)}, - {RUNE_C(0x00060C), RUNE_C(0x00060C)}, - {RUNE_C(0x00061B), RUNE_C(0x00061B)}, - {RUNE_C(0x00061D), RUNE_C(0x00061F)}, - {RUNE_C(0x0006D4), RUNE_C(0x0006D4)}, - {RUNE_C(0x000700), RUNE_C(0x00070A)}, - {RUNE_C(0x00070C), RUNE_C(0x00070C)}, - {RUNE_C(0x0007F8), RUNE_C(0x0007F9)}, - {RUNE_C(0x000830), RUNE_C(0x00083E)}, - {RUNE_C(0x00085E), RUNE_C(0x00085E)}, - {RUNE_C(0x000964), RUNE_C(0x000965)}, - {RUNE_C(0x000E5A), RUNE_C(0x000E5B)}, - {RUNE_C(0x000F08), RUNE_C(0x000F08)}, - {RUNE_C(0x000F0D), RUNE_C(0x000F12)}, - {RUNE_C(0x00104A), RUNE_C(0x00104B)}, - {RUNE_C(0x001361), RUNE_C(0x001368)}, - {RUNE_C(0x00166E), RUNE_C(0x00166E)}, - {RUNE_C(0x0016EB), RUNE_C(0x0016ED)}, - {RUNE_C(0x001735), RUNE_C(0x001736)}, - {RUNE_C(0x0017D4), RUNE_C(0x0017D6)}, - {RUNE_C(0x0017DA), RUNE_C(0x0017DA)}, - {RUNE_C(0x001802), RUNE_C(0x001805)}, - {RUNE_C(0x001808), RUNE_C(0x001809)}, - {RUNE_C(0x001944), RUNE_C(0x001945)}, - {RUNE_C(0x001AA8), RUNE_C(0x001AAB)}, - {RUNE_C(0x001B5A), RUNE_C(0x001B5B)}, - {RUNE_C(0x001B5D), RUNE_C(0x001B5F)}, - {RUNE_C(0x001B7D), RUNE_C(0x001B7E)}, - {RUNE_C(0x001C3B), RUNE_C(0x001C3F)}, - {RUNE_C(0x001C7E), RUNE_C(0x001C7F)}, - {RUNE_C(0x00203C), RUNE_C(0x00203D)}, - {RUNE_C(0x002047), RUNE_C(0x002049)}, - {RUNE_C(0x002E2E), RUNE_C(0x002E2E)}, - {RUNE_C(0x002E3C), RUNE_C(0x002E3C)}, - {RUNE_C(0x002E41), RUNE_C(0x002E41)}, - {RUNE_C(0x002E4C), RUNE_C(0x002E4C)}, - {RUNE_C(0x002E4E), RUNE_C(0x002E4F)}, - {RUNE_C(0x002E53), RUNE_C(0x002E54)}, - {RUNE_C(0x003001), RUNE_C(0x003002)}, - {RUNE_C(0x00A4FE), RUNE_C(0x00A4FF)}, - {RUNE_C(0x00A60D), RUNE_C(0x00A60F)}, - {RUNE_C(0x00A6F3), RUNE_C(0x00A6F7)}, - {RUNE_C(0x00A876), RUNE_C(0x00A877)}, - {RUNE_C(0x00A8CE), RUNE_C(0x00A8CF)}, - {RUNE_C(0x00A92F), RUNE_C(0x00A92F)}, - {RUNE_C(0x00A9C7), RUNE_C(0x00A9C9)}, - {RUNE_C(0x00AA5D), RUNE_C(0x00AA5F)}, - {RUNE_C(0x00AADF), RUNE_C(0x00AADF)}, - {RUNE_C(0x00AAF0), RUNE_C(0x00AAF1)}, - {RUNE_C(0x00ABEB), RUNE_C(0x00ABEB)}, - {RUNE_C(0x00FE50), RUNE_C(0x00FE52)}, - {RUNE_C(0x00FE54), RUNE_C(0x00FE57)}, - {RUNE_C(0x00FF01), RUNE_C(0x00FF01)}, - {RUNE_C(0x00FF0C), RUNE_C(0x00FF0C)}, - {RUNE_C(0x00FF0E), RUNE_C(0x00FF0E)}, - {RUNE_C(0x00FF1A), RUNE_C(0x00FF1B)}, - {RUNE_C(0x00FF1F), RUNE_C(0x00FF1F)}, - {RUNE_C(0x00FF61), RUNE_C(0x00FF61)}, - {RUNE_C(0x00FF64), RUNE_C(0x00FF64)}, - {RUNE_C(0x01039F), RUNE_C(0x01039F)}, - {RUNE_C(0x0103D0), RUNE_C(0x0103D0)}, - {RUNE_C(0x010857), RUNE_C(0x010857)}, - {RUNE_C(0x01091F), RUNE_C(0x01091F)}, - {RUNE_C(0x010A56), RUNE_C(0x010A57)}, - {RUNE_C(0x010AF0), RUNE_C(0x010AF5)}, - {RUNE_C(0x010B3A), RUNE_C(0x010B3F)}, - {RUNE_C(0x010B99), RUNE_C(0x010B9C)}, - {RUNE_C(0x010F55), RUNE_C(0x010F59)}, - {RUNE_C(0x010F86), RUNE_C(0x010F89)}, - {RUNE_C(0x011047), RUNE_C(0x01104D)}, - {RUNE_C(0x0110BE), RUNE_C(0x0110C1)}, - {RUNE_C(0x011141), RUNE_C(0x011143)}, - {RUNE_C(0x0111C5), RUNE_C(0x0111C6)}, - {RUNE_C(0x0111CD), RUNE_C(0x0111CD)}, - {RUNE_C(0x0111DE), RUNE_C(0x0111DF)}, - {RUNE_C(0x011238), RUNE_C(0x01123C)}, - {RUNE_C(0x0112A9), RUNE_C(0x0112A9)}, - {RUNE_C(0x01144B), RUNE_C(0x01144D)}, - {RUNE_C(0x01145A), RUNE_C(0x01145B)}, - {RUNE_C(0x0115C2), RUNE_C(0x0115C5)}, - {RUNE_C(0x0115C9), RUNE_C(0x0115D7)}, - {RUNE_C(0x011641), RUNE_C(0x011642)}, - {RUNE_C(0x01173C), RUNE_C(0x01173E)}, - {RUNE_C(0x011944), RUNE_C(0x011944)}, - {RUNE_C(0x011946), RUNE_C(0x011946)}, - {RUNE_C(0x011A42), RUNE_C(0x011A43)}, - {RUNE_C(0x011A9B), RUNE_C(0x011A9C)}, - {RUNE_C(0x011AA1), RUNE_C(0x011AA2)}, - {RUNE_C(0x011C41), RUNE_C(0x011C43)}, - {RUNE_C(0x011C71), RUNE_C(0x011C71)}, - {RUNE_C(0x011EF7), RUNE_C(0x011EF8)}, - {RUNE_C(0x011F43), RUNE_C(0x011F44)}, - {RUNE_C(0x012470), RUNE_C(0x012474)}, - {RUNE_C(0x016A6E), RUNE_C(0x016A6F)}, - {RUNE_C(0x016AF5), RUNE_C(0x016AF5)}, - {RUNE_C(0x016B37), RUNE_C(0x016B39)}, - {RUNE_C(0x016B44), RUNE_C(0x016B44)}, - {RUNE_C(0x016E97), RUNE_C(0x016E98)}, - {RUNE_C(0x01BC9F), RUNE_C(0x01BC9F)}, - {RUNE_C(0x01DA87), RUNE_C(0x01DA8A)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x02, 0x50, 0x00, 0x8C, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40}, + {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x10, 0x00, 0xE8, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xE1, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x70, 0x04, 0x00, 0x00, 0x00, 0x00}, + {0x3C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xEC, 0x00, 0x00, 0x00, 0x60}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, + 0x02, 0xD0, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0}, + {0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x02, 0x50, 0x00, 0x8C, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x60, 0x20, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x38, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3C, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_term(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_uideo.c b/lib/unicode/prop/uprop_is_uideo.c index a178b69..55b25b6 100644 --- a/lib/unicode/prop/uprop_is_uideo.c +++ b/lib/unicode/prop/uprop_is_uideo.c @@ -1,38 +1,336 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x009FFF)}, - {RUNE_C(0x00FA0E), RUNE_C(0x00FA0F)}, - {RUNE_C(0x00FA11), RUNE_C(0x00FA11)}, - {RUNE_C(0x00FA13), RUNE_C(0x00FA14)}, - {RUNE_C(0x00FA1F), RUNE_C(0x00FA1F)}, - {RUNE_C(0x00FA21), RUNE_C(0x00FA21)}, - {RUNE_C(0x00FA23), RUNE_C(0x00FA24)}, - {RUNE_C(0x00FA27), RUNE_C(0x00FA29)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 5, 6, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 1, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xC0, 0x1A, 0x80, 0x9A, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, +}; bool uprop_is_uideo(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_upper.c b/lib/unicode/prop/uprop_is_upper.c index 1ed0436..221a90d 100644 --- a/lib/unicode/prop/uprop_is_upper.c +++ b/lib/unicode/prop/uprop_is_upper.c @@ -1,676 +1,420 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 3, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 7, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 11, 12, + 6, 13, 6, 6, 14, 6, 6, 6, 6, 6, 6, 6, 15, 16, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 17, 18, 6, 6, 6, 19, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 20, 6, 6, 6, 21, + 6, 6, 6, 6, 22, 23, 6, 6, 6, 6, 6, 6, 24, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 25, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 26, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 27, 28, 29, 30, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 31, 6, 6, 6, 6, 6, 6, + 6, 32, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x000100)}, - {RUNE_C(0x000102), RUNE_C(0x000102)}, - {RUNE_C(0x000104), RUNE_C(0x000104)}, - {RUNE_C(0x000106), RUNE_C(0x000106)}, - {RUNE_C(0x000108), RUNE_C(0x000108)}, - {RUNE_C(0x00010A), RUNE_C(0x00010A)}, - {RUNE_C(0x00010C), RUNE_C(0x00010C)}, - {RUNE_C(0x00010E), RUNE_C(0x00010E)}, - {RUNE_C(0x000110), RUNE_C(0x000110)}, - {RUNE_C(0x000112), RUNE_C(0x000112)}, - {RUNE_C(0x000114), RUNE_C(0x000114)}, - {RUNE_C(0x000116), RUNE_C(0x000116)}, - {RUNE_C(0x000118), RUNE_C(0x000118)}, - {RUNE_C(0x00011A), RUNE_C(0x00011A)}, - {RUNE_C(0x00011C), RUNE_C(0x00011C)}, - {RUNE_C(0x00011E), RUNE_C(0x00011E)}, - {RUNE_C(0x000120), RUNE_C(0x000120)}, - {RUNE_C(0x000122), RUNE_C(0x000122)}, - {RUNE_C(0x000124), RUNE_C(0x000124)}, - {RUNE_C(0x000126), RUNE_C(0x000126)}, - {RUNE_C(0x000128), RUNE_C(0x000128)}, - {RUNE_C(0x00012A), RUNE_C(0x00012A)}, - {RUNE_C(0x00012C), RUNE_C(0x00012C)}, - {RUNE_C(0x00012E), RUNE_C(0x00012E)}, - {RUNE_C(0x000130), RUNE_C(0x000130)}, - {RUNE_C(0x000132), RUNE_C(0x000132)}, - {RUNE_C(0x000134), RUNE_C(0x000134)}, - {RUNE_C(0x000136), RUNE_C(0x000136)}, - {RUNE_C(0x000139), RUNE_C(0x000139)}, - {RUNE_C(0x00013B), RUNE_C(0x00013B)}, - {RUNE_C(0x00013D), RUNE_C(0x00013D)}, - {RUNE_C(0x00013F), RUNE_C(0x00013F)}, - {RUNE_C(0x000141), RUNE_C(0x000141)}, - {RUNE_C(0x000143), RUNE_C(0x000143)}, - {RUNE_C(0x000145), RUNE_C(0x000145)}, - {RUNE_C(0x000147), RUNE_C(0x000147)}, - {RUNE_C(0x00014A), RUNE_C(0x00014A)}, - {RUNE_C(0x00014C), RUNE_C(0x00014C)}, - {RUNE_C(0x00014E), RUNE_C(0x00014E)}, - {RUNE_C(0x000150), RUNE_C(0x000150)}, - {RUNE_C(0x000152), RUNE_C(0x000152)}, - {RUNE_C(0x000154), RUNE_C(0x000154)}, - {RUNE_C(0x000156), RUNE_C(0x000156)}, - {RUNE_C(0x000158), RUNE_C(0x000158)}, - {RUNE_C(0x00015A), RUNE_C(0x00015A)}, - {RUNE_C(0x00015C), RUNE_C(0x00015C)}, - {RUNE_C(0x00015E), RUNE_C(0x00015E)}, - {RUNE_C(0x000160), RUNE_C(0x000160)}, - {RUNE_C(0x000162), RUNE_C(0x000162)}, - {RUNE_C(0x000164), RUNE_C(0x000164)}, - {RUNE_C(0x000166), RUNE_C(0x000166)}, - {RUNE_C(0x000168), RUNE_C(0x000168)}, - {RUNE_C(0x00016A), RUNE_C(0x00016A)}, - {RUNE_C(0x00016C), RUNE_C(0x00016C)}, - {RUNE_C(0x00016E), RUNE_C(0x00016E)}, - {RUNE_C(0x000170), RUNE_C(0x000170)}, - {RUNE_C(0x000172), RUNE_C(0x000172)}, - {RUNE_C(0x000174), RUNE_C(0x000174)}, - {RUNE_C(0x000176), RUNE_C(0x000176)}, - {RUNE_C(0x000178), RUNE_C(0x000179)}, - {RUNE_C(0x00017B), RUNE_C(0x00017B)}, - {RUNE_C(0x00017D), RUNE_C(0x00017D)}, - {RUNE_C(0x000181), RUNE_C(0x000182)}, - {RUNE_C(0x000184), RUNE_C(0x000184)}, - {RUNE_C(0x000186), RUNE_C(0x000187)}, - {RUNE_C(0x000189), RUNE_C(0x00018B)}, - {RUNE_C(0x00018E), RUNE_C(0x000191)}, - {RUNE_C(0x000193), RUNE_C(0x000194)}, - {RUNE_C(0x000196), RUNE_C(0x000198)}, - {RUNE_C(0x00019C), RUNE_C(0x00019D)}, - {RUNE_C(0x00019F), RUNE_C(0x0001A0)}, - {RUNE_C(0x0001A2), RUNE_C(0x0001A2)}, - {RUNE_C(0x0001A4), RUNE_C(0x0001A4)}, - {RUNE_C(0x0001A6), RUNE_C(0x0001A7)}, - {RUNE_C(0x0001A9), RUNE_C(0x0001A9)}, - {RUNE_C(0x0001AC), RUNE_C(0x0001AC)}, - {RUNE_C(0x0001AE), RUNE_C(0x0001AF)}, - {RUNE_C(0x0001B1), RUNE_C(0x0001B3)}, - {RUNE_C(0x0001B5), RUNE_C(0x0001B5)}, - {RUNE_C(0x0001B7), RUNE_C(0x0001B8)}, - {RUNE_C(0x0001BC), RUNE_C(0x0001BC)}, - {RUNE_C(0x0001C4), RUNE_C(0x0001C4)}, - {RUNE_C(0x0001C7), RUNE_C(0x0001C7)}, - {RUNE_C(0x0001CA), RUNE_C(0x0001CA)}, - {RUNE_C(0x0001CD), RUNE_C(0x0001CD)}, - {RUNE_C(0x0001CF), RUNE_C(0x0001CF)}, - {RUNE_C(0x0001D1), RUNE_C(0x0001D1)}, - {RUNE_C(0x0001D3), RUNE_C(0x0001D3)}, - {RUNE_C(0x0001D5), RUNE_C(0x0001D5)}, - {RUNE_C(0x0001D7), RUNE_C(0x0001D7)}, - {RUNE_C(0x0001D9), RUNE_C(0x0001D9)}, - {RUNE_C(0x0001DB), RUNE_C(0x0001DB)}, - {RUNE_C(0x0001DE), RUNE_C(0x0001DE)}, - {RUNE_C(0x0001E0), RUNE_C(0x0001E0)}, - {RUNE_C(0x0001E2), RUNE_C(0x0001E2)}, - {RUNE_C(0x0001E4), RUNE_C(0x0001E4)}, - {RUNE_C(0x0001E6), RUNE_C(0x0001E6)}, - {RUNE_C(0x0001E8), RUNE_C(0x0001E8)}, - {RUNE_C(0x0001EA), RUNE_C(0x0001EA)}, - {RUNE_C(0x0001EC), RUNE_C(0x0001EC)}, - {RUNE_C(0x0001EE), RUNE_C(0x0001EE)}, - {RUNE_C(0x0001F1), RUNE_C(0x0001F1)}, - {RUNE_C(0x0001F4), RUNE_C(0x0001F4)}, - {RUNE_C(0x0001F6), RUNE_C(0x0001F8)}, - {RUNE_C(0x0001FA), RUNE_C(0x0001FA)}, - {RUNE_C(0x0001FC), RUNE_C(0x0001FC)}, - {RUNE_C(0x0001FE), RUNE_C(0x0001FE)}, - {RUNE_C(0x000200), RUNE_C(0x000200)}, - {RUNE_C(0x000202), RUNE_C(0x000202)}, - {RUNE_C(0x000204), RUNE_C(0x000204)}, - {RUNE_C(0x000206), RUNE_C(0x000206)}, - {RUNE_C(0x000208), RUNE_C(0x000208)}, - {RUNE_C(0x00020A), RUNE_C(0x00020A)}, - {RUNE_C(0x00020C), RUNE_C(0x00020C)}, - {RUNE_C(0x00020E), RUNE_C(0x00020E)}, - {RUNE_C(0x000210), RUNE_C(0x000210)}, - {RUNE_C(0x000212), RUNE_C(0x000212)}, - {RUNE_C(0x000214), RUNE_C(0x000214)}, - {RUNE_C(0x000216), RUNE_C(0x000216)}, - {RUNE_C(0x000218), RUNE_C(0x000218)}, - {RUNE_C(0x00021A), RUNE_C(0x00021A)}, - {RUNE_C(0x00021C), RUNE_C(0x00021C)}, - {RUNE_C(0x00021E), RUNE_C(0x00021E)}, - {RUNE_C(0x000220), RUNE_C(0x000220)}, - {RUNE_C(0x000222), RUNE_C(0x000222)}, - {RUNE_C(0x000224), RUNE_C(0x000224)}, - {RUNE_C(0x000226), RUNE_C(0x000226)}, - {RUNE_C(0x000228), RUNE_C(0x000228)}, - {RUNE_C(0x00022A), RUNE_C(0x00022A)}, - {RUNE_C(0x00022C), RUNE_C(0x00022C)}, - {RUNE_C(0x00022E), RUNE_C(0x00022E)}, - {RUNE_C(0x000230), RUNE_C(0x000230)}, - {RUNE_C(0x000232), RUNE_C(0x000232)}, - {RUNE_C(0x00023A), RUNE_C(0x00023B)}, - {RUNE_C(0x00023D), RUNE_C(0x00023E)}, - {RUNE_C(0x000241), RUNE_C(0x000241)}, - {RUNE_C(0x000243), RUNE_C(0x000246)}, - {RUNE_C(0x000248), RUNE_C(0x000248)}, - {RUNE_C(0x00024A), RUNE_C(0x00024A)}, - {RUNE_C(0x00024C), RUNE_C(0x00024C)}, - {RUNE_C(0x00024E), RUNE_C(0x00024E)}, - {RUNE_C(0x000370), RUNE_C(0x000370)}, - {RUNE_C(0x000372), RUNE_C(0x000372)}, - {RUNE_C(0x000376), RUNE_C(0x000376)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x00038F)}, - {RUNE_C(0x000391), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003AB)}, - {RUNE_C(0x0003CF), RUNE_C(0x0003CF)}, - {RUNE_C(0x0003D2), RUNE_C(0x0003D4)}, - {RUNE_C(0x0003D8), RUNE_C(0x0003D8)}, - {RUNE_C(0x0003DA), RUNE_C(0x0003DA)}, - {RUNE_C(0x0003DC), RUNE_C(0x0003DC)}, - {RUNE_C(0x0003DE), RUNE_C(0x0003DE)}, - {RUNE_C(0x0003E0), RUNE_C(0x0003E0)}, - {RUNE_C(0x0003E2), RUNE_C(0x0003E2)}, - {RUNE_C(0x0003E4), RUNE_C(0x0003E4)}, - {RUNE_C(0x0003E6), RUNE_C(0x0003E6)}, - {RUNE_C(0x0003E8), RUNE_C(0x0003E8)}, - {RUNE_C(0x0003EA), RUNE_C(0x0003EA)}, - {RUNE_C(0x0003EC), RUNE_C(0x0003EC)}, - {RUNE_C(0x0003EE), RUNE_C(0x0003EE)}, - {RUNE_C(0x0003F4), RUNE_C(0x0003F4)}, - {RUNE_C(0x0003F7), RUNE_C(0x0003F7)}, - {RUNE_C(0x0003F9), RUNE_C(0x0003FA)}, - {RUNE_C(0x0003FD), RUNE_C(0x00042F)}, - {RUNE_C(0x000460), RUNE_C(0x000460)}, - {RUNE_C(0x000462), RUNE_C(0x000462)}, - {RUNE_C(0x000464), RUNE_C(0x000464)}, - {RUNE_C(0x000466), RUNE_C(0x000466)}, - {RUNE_C(0x000468), RUNE_C(0x000468)}, - {RUNE_C(0x00046A), RUNE_C(0x00046A)}, - {RUNE_C(0x00046C), RUNE_C(0x00046C)}, - {RUNE_C(0x00046E), RUNE_C(0x00046E)}, - {RUNE_C(0x000470), RUNE_C(0x000470)}, - {RUNE_C(0x000472), RUNE_C(0x000472)}, - {RUNE_C(0x000474), RUNE_C(0x000474)}, - {RUNE_C(0x000476), RUNE_C(0x000476)}, - {RUNE_C(0x000478), RUNE_C(0x000478)}, - {RUNE_C(0x00047A), RUNE_C(0x00047A)}, - {RUNE_C(0x00047C), RUNE_C(0x00047C)}, - {RUNE_C(0x00047E), RUNE_C(0x00047E)}, - {RUNE_C(0x000480), RUNE_C(0x000480)}, - {RUNE_C(0x00048A), RUNE_C(0x00048A)}, - {RUNE_C(0x00048C), RUNE_C(0x00048C)}, - {RUNE_C(0x00048E), RUNE_C(0x00048E)}, - {RUNE_C(0x000490), RUNE_C(0x000490)}, - {RUNE_C(0x000492), RUNE_C(0x000492)}, - {RUNE_C(0x000494), RUNE_C(0x000494)}, - {RUNE_C(0x000496), RUNE_C(0x000496)}, - {RUNE_C(0x000498), RUNE_C(0x000498)}, - {RUNE_C(0x00049A), RUNE_C(0x00049A)}, - {RUNE_C(0x00049C), RUNE_C(0x00049C)}, - {RUNE_C(0x00049E), RUNE_C(0x00049E)}, - {RUNE_C(0x0004A0), RUNE_C(0x0004A0)}, - {RUNE_C(0x0004A2), RUNE_C(0x0004A2)}, - {RUNE_C(0x0004A4), RUNE_C(0x0004A4)}, - {RUNE_C(0x0004A6), RUNE_C(0x0004A6)}, - {RUNE_C(0x0004A8), RUNE_C(0x0004A8)}, - {RUNE_C(0x0004AA), RUNE_C(0x0004AA)}, - {RUNE_C(0x0004AC), RUNE_C(0x0004AC)}, - {RUNE_C(0x0004AE), RUNE_C(0x0004AE)}, - {RUNE_C(0x0004B0), RUNE_C(0x0004B0)}, - {RUNE_C(0x0004B2), RUNE_C(0x0004B2)}, - {RUNE_C(0x0004B4), RUNE_C(0x0004B4)}, - {RUNE_C(0x0004B6), RUNE_C(0x0004B6)}, - {RUNE_C(0x0004B8), RUNE_C(0x0004B8)}, - {RUNE_C(0x0004BA), RUNE_C(0x0004BA)}, - {RUNE_C(0x0004BC), RUNE_C(0x0004BC)}, - {RUNE_C(0x0004BE), RUNE_C(0x0004BE)}, - {RUNE_C(0x0004C0), RUNE_C(0x0004C1)}, - {RUNE_C(0x0004C3), RUNE_C(0x0004C3)}, - {RUNE_C(0x0004C5), RUNE_C(0x0004C5)}, - {RUNE_C(0x0004C7), RUNE_C(0x0004C7)}, - {RUNE_C(0x0004C9), RUNE_C(0x0004C9)}, - {RUNE_C(0x0004CB), RUNE_C(0x0004CB)}, - {RUNE_C(0x0004CD), RUNE_C(0x0004CD)}, - {RUNE_C(0x0004D0), RUNE_C(0x0004D0)}, - {RUNE_C(0x0004D2), RUNE_C(0x0004D2)}, - {RUNE_C(0x0004D4), RUNE_C(0x0004D4)}, - {RUNE_C(0x0004D6), RUNE_C(0x0004D6)}, - {RUNE_C(0x0004D8), RUNE_C(0x0004D8)}, - {RUNE_C(0x0004DA), RUNE_C(0x0004DA)}, - {RUNE_C(0x0004DC), RUNE_C(0x0004DC)}, - {RUNE_C(0x0004DE), RUNE_C(0x0004DE)}, - {RUNE_C(0x0004E0), RUNE_C(0x0004E0)}, - {RUNE_C(0x0004E2), RUNE_C(0x0004E2)}, - {RUNE_C(0x0004E4), RUNE_C(0x0004E4)}, - {RUNE_C(0x0004E6), RUNE_C(0x0004E6)}, - {RUNE_C(0x0004E8), RUNE_C(0x0004E8)}, - {RUNE_C(0x0004EA), RUNE_C(0x0004EA)}, - {RUNE_C(0x0004EC), RUNE_C(0x0004EC)}, - {RUNE_C(0x0004EE), RUNE_C(0x0004EE)}, - {RUNE_C(0x0004F0), RUNE_C(0x0004F0)}, - {RUNE_C(0x0004F2), RUNE_C(0x0004F2)}, - {RUNE_C(0x0004F4), RUNE_C(0x0004F4)}, - {RUNE_C(0x0004F6), RUNE_C(0x0004F6)}, - {RUNE_C(0x0004F8), RUNE_C(0x0004F8)}, - {RUNE_C(0x0004FA), RUNE_C(0x0004FA)}, - {RUNE_C(0x0004FC), RUNE_C(0x0004FC)}, - {RUNE_C(0x0004FE), RUNE_C(0x0004FE)}, - {RUNE_C(0x000500), RUNE_C(0x000500)}, - {RUNE_C(0x000502), RUNE_C(0x000502)}, - {RUNE_C(0x000504), RUNE_C(0x000504)}, - {RUNE_C(0x000506), RUNE_C(0x000506)}, - {RUNE_C(0x000508), RUNE_C(0x000508)}, - {RUNE_C(0x00050A), RUNE_C(0x00050A)}, - {RUNE_C(0x00050C), RUNE_C(0x00050C)}, - {RUNE_C(0x00050E), RUNE_C(0x00050E)}, - {RUNE_C(0x000510), RUNE_C(0x000510)}, - {RUNE_C(0x000512), RUNE_C(0x000512)}, - {RUNE_C(0x000514), RUNE_C(0x000514)}, - {RUNE_C(0x000516), RUNE_C(0x000516)}, - {RUNE_C(0x000518), RUNE_C(0x000518)}, - {RUNE_C(0x00051A), RUNE_C(0x00051A)}, - {RUNE_C(0x00051C), RUNE_C(0x00051C)}, - {RUNE_C(0x00051E), RUNE_C(0x00051E)}, - {RUNE_C(0x000520), RUNE_C(0x000520)}, - {RUNE_C(0x000522), RUNE_C(0x000522)}, - {RUNE_C(0x000524), RUNE_C(0x000524)}, - {RUNE_C(0x000526), RUNE_C(0x000526)}, - {RUNE_C(0x000528), RUNE_C(0x000528)}, - {RUNE_C(0x00052A), RUNE_C(0x00052A)}, - {RUNE_C(0x00052C), RUNE_C(0x00052C)}, - {RUNE_C(0x00052E), RUNE_C(0x00052E)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001E00)}, - {RUNE_C(0x001E02), RUNE_C(0x001E02)}, - {RUNE_C(0x001E04), RUNE_C(0x001E04)}, - {RUNE_C(0x001E06), RUNE_C(0x001E06)}, - {RUNE_C(0x001E08), RUNE_C(0x001E08)}, - {RUNE_C(0x001E0A), RUNE_C(0x001E0A)}, - {RUNE_C(0x001E0C), RUNE_C(0x001E0C)}, - {RUNE_C(0x001E0E), RUNE_C(0x001E0E)}, - {RUNE_C(0x001E10), RUNE_C(0x001E10)}, - {RUNE_C(0x001E12), RUNE_C(0x001E12)}, - {RUNE_C(0x001E14), RUNE_C(0x001E14)}, - {RUNE_C(0x001E16), RUNE_C(0x001E16)}, - {RUNE_C(0x001E18), RUNE_C(0x001E18)}, - {RUNE_C(0x001E1A), RUNE_C(0x001E1A)}, - {RUNE_C(0x001E1C), RUNE_C(0x001E1C)}, - {RUNE_C(0x001E1E), RUNE_C(0x001E1E)}, - {RUNE_C(0x001E20), RUNE_C(0x001E20)}, - {RUNE_C(0x001E22), RUNE_C(0x001E22)}, - {RUNE_C(0x001E24), RUNE_C(0x001E24)}, - {RUNE_C(0x001E26), RUNE_C(0x001E26)}, - {RUNE_C(0x001E28), RUNE_C(0x001E28)}, - {RUNE_C(0x001E2A), RUNE_C(0x001E2A)}, - {RUNE_C(0x001E2C), RUNE_C(0x001E2C)}, - {RUNE_C(0x001E2E), RUNE_C(0x001E2E)}, - {RUNE_C(0x001E30), RUNE_C(0x001E30)}, - {RUNE_C(0x001E32), RUNE_C(0x001E32)}, - {RUNE_C(0x001E34), RUNE_C(0x001E34)}, - {RUNE_C(0x001E36), RUNE_C(0x001E36)}, - {RUNE_C(0x001E38), RUNE_C(0x001E38)}, - {RUNE_C(0x001E3A), RUNE_C(0x001E3A)}, - {RUNE_C(0x001E3C), RUNE_C(0x001E3C)}, - {RUNE_C(0x001E3E), RUNE_C(0x001E3E)}, - {RUNE_C(0x001E40), RUNE_C(0x001E40)}, - {RUNE_C(0x001E42), RUNE_C(0x001E42)}, - {RUNE_C(0x001E44), RUNE_C(0x001E44)}, - {RUNE_C(0x001E46), RUNE_C(0x001E46)}, - {RUNE_C(0x001E48), RUNE_C(0x001E48)}, - {RUNE_C(0x001E4A), RUNE_C(0x001E4A)}, - {RUNE_C(0x001E4C), RUNE_C(0x001E4C)}, - {RUNE_C(0x001E4E), RUNE_C(0x001E4E)}, - {RUNE_C(0x001E50), RUNE_C(0x001E50)}, - {RUNE_C(0x001E52), RUNE_C(0x001E52)}, - {RUNE_C(0x001E54), RUNE_C(0x001E54)}, - {RUNE_C(0x001E56), RUNE_C(0x001E56)}, - {RUNE_C(0x001E58), RUNE_C(0x001E58)}, - {RUNE_C(0x001E5A), RUNE_C(0x001E5A)}, - {RUNE_C(0x001E5C), RUNE_C(0x001E5C)}, - {RUNE_C(0x001E5E), RUNE_C(0x001E5E)}, - {RUNE_C(0x001E60), RUNE_C(0x001E60)}, - {RUNE_C(0x001E62), RUNE_C(0x001E62)}, - {RUNE_C(0x001E64), RUNE_C(0x001E64)}, - {RUNE_C(0x001E66), RUNE_C(0x001E66)}, - {RUNE_C(0x001E68), RUNE_C(0x001E68)}, - {RUNE_C(0x001E6A), RUNE_C(0x001E6A)}, - {RUNE_C(0x001E6C), RUNE_C(0x001E6C)}, - {RUNE_C(0x001E6E), RUNE_C(0x001E6E)}, - {RUNE_C(0x001E70), RUNE_C(0x001E70)}, - {RUNE_C(0x001E72), RUNE_C(0x001E72)}, - {RUNE_C(0x001E74), RUNE_C(0x001E74)}, - {RUNE_C(0x001E76), RUNE_C(0x001E76)}, - {RUNE_C(0x001E78), RUNE_C(0x001E78)}, - {RUNE_C(0x001E7A), RUNE_C(0x001E7A)}, - {RUNE_C(0x001E7C), RUNE_C(0x001E7C)}, - {RUNE_C(0x001E7E), RUNE_C(0x001E7E)}, - {RUNE_C(0x001E80), RUNE_C(0x001E80)}, - {RUNE_C(0x001E82), RUNE_C(0x001E82)}, - {RUNE_C(0x001E84), RUNE_C(0x001E84)}, - {RUNE_C(0x001E86), RUNE_C(0x001E86)}, - {RUNE_C(0x001E88), RUNE_C(0x001E88)}, - {RUNE_C(0x001E8A), RUNE_C(0x001E8A)}, - {RUNE_C(0x001E8C), RUNE_C(0x001E8C)}, - {RUNE_C(0x001E8E), RUNE_C(0x001E8E)}, - {RUNE_C(0x001E90), RUNE_C(0x001E90)}, - {RUNE_C(0x001E92), RUNE_C(0x001E92)}, - {RUNE_C(0x001E94), RUNE_C(0x001E94)}, - {RUNE_C(0x001E9E), RUNE_C(0x001E9E)}, - {RUNE_C(0x001EA0), RUNE_C(0x001EA0)}, - {RUNE_C(0x001EA2), RUNE_C(0x001EA2)}, - {RUNE_C(0x001EA4), RUNE_C(0x001EA4)}, - {RUNE_C(0x001EA6), RUNE_C(0x001EA6)}, - {RUNE_C(0x001EA8), RUNE_C(0x001EA8)}, - {RUNE_C(0x001EAA), RUNE_C(0x001EAA)}, - {RUNE_C(0x001EAC), RUNE_C(0x001EAC)}, - {RUNE_C(0x001EAE), RUNE_C(0x001EAE)}, - {RUNE_C(0x001EB0), RUNE_C(0x001EB0)}, - {RUNE_C(0x001EB2), RUNE_C(0x001EB2)}, - {RUNE_C(0x001EB4), RUNE_C(0x001EB4)}, - {RUNE_C(0x001EB6), RUNE_C(0x001EB6)}, - {RUNE_C(0x001EB8), RUNE_C(0x001EB8)}, - {RUNE_C(0x001EBA), RUNE_C(0x001EBA)}, - {RUNE_C(0x001EBC), RUNE_C(0x001EBC)}, - {RUNE_C(0x001EBE), RUNE_C(0x001EBE)}, - {RUNE_C(0x001EC0), RUNE_C(0x001EC0)}, - {RUNE_C(0x001EC2), RUNE_C(0x001EC2)}, - {RUNE_C(0x001EC4), RUNE_C(0x001EC4)}, - {RUNE_C(0x001EC6), RUNE_C(0x001EC6)}, - {RUNE_C(0x001EC8), RUNE_C(0x001EC8)}, - {RUNE_C(0x001ECA), RUNE_C(0x001ECA)}, - {RUNE_C(0x001ECC), RUNE_C(0x001ECC)}, - {RUNE_C(0x001ECE), RUNE_C(0x001ECE)}, - {RUNE_C(0x001ED0), RUNE_C(0x001ED0)}, - {RUNE_C(0x001ED2), RUNE_C(0x001ED2)}, - {RUNE_C(0x001ED4), RUNE_C(0x001ED4)}, - {RUNE_C(0x001ED6), RUNE_C(0x001ED6)}, - {RUNE_C(0x001ED8), RUNE_C(0x001ED8)}, - {RUNE_C(0x001EDA), RUNE_C(0x001EDA)}, - {RUNE_C(0x001EDC), RUNE_C(0x001EDC)}, - {RUNE_C(0x001EDE), RUNE_C(0x001EDE)}, - {RUNE_C(0x001EE0), RUNE_C(0x001EE0)}, - {RUNE_C(0x001EE2), RUNE_C(0x001EE2)}, - {RUNE_C(0x001EE4), RUNE_C(0x001EE4)}, - {RUNE_C(0x001EE6), RUNE_C(0x001EE6)}, - {RUNE_C(0x001EE8), RUNE_C(0x001EE8)}, - {RUNE_C(0x001EEA), RUNE_C(0x001EEA)}, - {RUNE_C(0x001EEC), RUNE_C(0x001EEC)}, - {RUNE_C(0x001EEE), RUNE_C(0x001EEE)}, - {RUNE_C(0x001EF0), RUNE_C(0x001EF0)}, - {RUNE_C(0x001EF2), RUNE_C(0x001EF2)}, - {RUNE_C(0x001EF4), RUNE_C(0x001EF4)}, - {RUNE_C(0x001EF6), RUNE_C(0x001EF6)}, - {RUNE_C(0x001EF8), RUNE_C(0x001EF8)}, - {RUNE_C(0x001EFA), RUNE_C(0x001EFA)}, - {RUNE_C(0x001EFC), RUNE_C(0x001EFC)}, - {RUNE_C(0x001EFE), RUNE_C(0x001EFE)}, - {RUNE_C(0x001F08), RUNE_C(0x001F0F)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F28), RUNE_C(0x001F2F)}, - {RUNE_C(0x001F38), RUNE_C(0x001F3F)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F5F)}, - {RUNE_C(0x001F68), RUNE_C(0x001F6F)}, - {RUNE_C(0x001FB8), RUNE_C(0x001FBB)}, - {RUNE_C(0x001FC8), RUNE_C(0x001FCB)}, - {RUNE_C(0x001FD8), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE8), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF8), RUNE_C(0x001FFB)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210B), RUNE_C(0x00210D)}, - {RUNE_C(0x002110), RUNE_C(0x002112)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002119), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x00212D)}, - {RUNE_C(0x002130), RUNE_C(0x002133)}, - {RUNE_C(0x00213E), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002145)}, - {RUNE_C(0x002160), RUNE_C(0x00216F)}, - {RUNE_C(0x002183), RUNE_C(0x002183)}, - {RUNE_C(0x0024B6), RUNE_C(0x0024CF)}, - {RUNE_C(0x002C00), RUNE_C(0x002C2F)}, - {RUNE_C(0x002C60), RUNE_C(0x002C60)}, - {RUNE_C(0x002C62), RUNE_C(0x002C64)}, - {RUNE_C(0x002C67), RUNE_C(0x002C67)}, - {RUNE_C(0x002C69), RUNE_C(0x002C69)}, - {RUNE_C(0x002C6B), RUNE_C(0x002C6B)}, - {RUNE_C(0x002C6D), RUNE_C(0x002C70)}, - {RUNE_C(0x002C72), RUNE_C(0x002C72)}, - {RUNE_C(0x002C75), RUNE_C(0x002C75)}, - {RUNE_C(0x002C7E), RUNE_C(0x002C80)}, - {RUNE_C(0x002C82), RUNE_C(0x002C82)}, - {RUNE_C(0x002C84), RUNE_C(0x002C84)}, - {RUNE_C(0x002C86), RUNE_C(0x002C86)}, - {RUNE_C(0x002C88), RUNE_C(0x002C88)}, - {RUNE_C(0x002C8A), RUNE_C(0x002C8A)}, - {RUNE_C(0x002C8C), RUNE_C(0x002C8C)}, - {RUNE_C(0x002C8E), RUNE_C(0x002C8E)}, - {RUNE_C(0x002C90), RUNE_C(0x002C90)}, - {RUNE_C(0x002C92), RUNE_C(0x002C92)}, - {RUNE_C(0x002C94), RUNE_C(0x002C94)}, - {RUNE_C(0x002C96), RUNE_C(0x002C96)}, - {RUNE_C(0x002C98), RUNE_C(0x002C98)}, - {RUNE_C(0x002C9A), RUNE_C(0x002C9A)}, - {RUNE_C(0x002C9C), RUNE_C(0x002C9C)}, - {RUNE_C(0x002C9E), RUNE_C(0x002C9E)}, - {RUNE_C(0x002CA0), RUNE_C(0x002CA0)}, - {RUNE_C(0x002CA2), RUNE_C(0x002CA2)}, - {RUNE_C(0x002CA4), RUNE_C(0x002CA4)}, - {RUNE_C(0x002CA6), RUNE_C(0x002CA6)}, - {RUNE_C(0x002CA8), RUNE_C(0x002CA8)}, - {RUNE_C(0x002CAA), RUNE_C(0x002CAA)}, - {RUNE_C(0x002CAC), RUNE_C(0x002CAC)}, - {RUNE_C(0x002CAE), RUNE_C(0x002CAE)}, - {RUNE_C(0x002CB0), RUNE_C(0x002CB0)}, - {RUNE_C(0x002CB2), RUNE_C(0x002CB2)}, - {RUNE_C(0x002CB4), RUNE_C(0x002CB4)}, - {RUNE_C(0x002CB6), RUNE_C(0x002CB6)}, - {RUNE_C(0x002CB8), RUNE_C(0x002CB8)}, - {RUNE_C(0x002CBA), RUNE_C(0x002CBA)}, - {RUNE_C(0x002CBC), RUNE_C(0x002CBC)}, - {RUNE_C(0x002CBE), RUNE_C(0x002CBE)}, - {RUNE_C(0x002CC0), RUNE_C(0x002CC0)}, - {RUNE_C(0x002CC2), RUNE_C(0x002CC2)}, - {RUNE_C(0x002CC4), RUNE_C(0x002CC4)}, - {RUNE_C(0x002CC6), RUNE_C(0x002CC6)}, - {RUNE_C(0x002CC8), RUNE_C(0x002CC8)}, - {RUNE_C(0x002CCA), RUNE_C(0x002CCA)}, - {RUNE_C(0x002CCC), RUNE_C(0x002CCC)}, - {RUNE_C(0x002CCE), RUNE_C(0x002CCE)}, - {RUNE_C(0x002CD0), RUNE_C(0x002CD0)}, - {RUNE_C(0x002CD2), RUNE_C(0x002CD2)}, - {RUNE_C(0x002CD4), RUNE_C(0x002CD4)}, - {RUNE_C(0x002CD6), RUNE_C(0x002CD6)}, - {RUNE_C(0x002CD8), RUNE_C(0x002CD8)}, - {RUNE_C(0x002CDA), RUNE_C(0x002CDA)}, - {RUNE_C(0x002CDC), RUNE_C(0x002CDC)}, - {RUNE_C(0x002CDE), RUNE_C(0x002CDE)}, - {RUNE_C(0x002CE0), RUNE_C(0x002CE0)}, - {RUNE_C(0x002CE2), RUNE_C(0x002CE2)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEB)}, - {RUNE_C(0x002CED), RUNE_C(0x002CED)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF2)}, - {RUNE_C(0x00A640), RUNE_C(0x00A640)}, - {RUNE_C(0x00A642), RUNE_C(0x00A642)}, - {RUNE_C(0x00A644), RUNE_C(0x00A644)}, - {RUNE_C(0x00A646), RUNE_C(0x00A646)}, - {RUNE_C(0x00A648), RUNE_C(0x00A648)}, - {RUNE_C(0x00A64A), RUNE_C(0x00A64A)}, - {RUNE_C(0x00A64C), RUNE_C(0x00A64C)}, - {RUNE_C(0x00A64E), RUNE_C(0x00A64E)}, - {RUNE_C(0x00A650), RUNE_C(0x00A650)}, - {RUNE_C(0x00A652), RUNE_C(0x00A652)}, - {RUNE_C(0x00A654), RUNE_C(0x00A654)}, - {RUNE_C(0x00A656), RUNE_C(0x00A656)}, - {RUNE_C(0x00A658), RUNE_C(0x00A658)}, - {RUNE_C(0x00A65A), RUNE_C(0x00A65A)}, - {RUNE_C(0x00A65C), RUNE_C(0x00A65C)}, - {RUNE_C(0x00A65E), RUNE_C(0x00A65E)}, - {RUNE_C(0x00A660), RUNE_C(0x00A660)}, - {RUNE_C(0x00A662), RUNE_C(0x00A662)}, - {RUNE_C(0x00A664), RUNE_C(0x00A664)}, - {RUNE_C(0x00A666), RUNE_C(0x00A666)}, - {RUNE_C(0x00A668), RUNE_C(0x00A668)}, - {RUNE_C(0x00A66A), RUNE_C(0x00A66A)}, - {RUNE_C(0x00A66C), RUNE_C(0x00A66C)}, - {RUNE_C(0x00A680), RUNE_C(0x00A680)}, - {RUNE_C(0x00A682), RUNE_C(0x00A682)}, - {RUNE_C(0x00A684), RUNE_C(0x00A684)}, - {RUNE_C(0x00A686), RUNE_C(0x00A686)}, - {RUNE_C(0x00A688), RUNE_C(0x00A688)}, - {RUNE_C(0x00A68A), RUNE_C(0x00A68A)}, - {RUNE_C(0x00A68C), RUNE_C(0x00A68C)}, - {RUNE_C(0x00A68E), RUNE_C(0x00A68E)}, - {RUNE_C(0x00A690), RUNE_C(0x00A690)}, - {RUNE_C(0x00A692), RUNE_C(0x00A692)}, - {RUNE_C(0x00A694), RUNE_C(0x00A694)}, - {RUNE_C(0x00A696), RUNE_C(0x00A696)}, - {RUNE_C(0x00A698), RUNE_C(0x00A698)}, - {RUNE_C(0x00A69A), RUNE_C(0x00A69A)}, - {RUNE_C(0x00A722), RUNE_C(0x00A722)}, - {RUNE_C(0x00A724), RUNE_C(0x00A724)}, - {RUNE_C(0x00A726), RUNE_C(0x00A726)}, - {RUNE_C(0x00A728), RUNE_C(0x00A728)}, - {RUNE_C(0x00A72A), RUNE_C(0x00A72A)}, - {RUNE_C(0x00A72C), RUNE_C(0x00A72C)}, - {RUNE_C(0x00A72E), RUNE_C(0x00A72E)}, - {RUNE_C(0x00A732), RUNE_C(0x00A732)}, - {RUNE_C(0x00A734), RUNE_C(0x00A734)}, - {RUNE_C(0x00A736), RUNE_C(0x00A736)}, - {RUNE_C(0x00A738), RUNE_C(0x00A738)}, - {RUNE_C(0x00A73A), RUNE_C(0x00A73A)}, - {RUNE_C(0x00A73C), RUNE_C(0x00A73C)}, - {RUNE_C(0x00A73E), RUNE_C(0x00A73E)}, - {RUNE_C(0x00A740), RUNE_C(0x00A740)}, - {RUNE_C(0x00A742), RUNE_C(0x00A742)}, - {RUNE_C(0x00A744), RUNE_C(0x00A744)}, - {RUNE_C(0x00A746), RUNE_C(0x00A746)}, - {RUNE_C(0x00A748), RUNE_C(0x00A748)}, - {RUNE_C(0x00A74A), RUNE_C(0x00A74A)}, - {RUNE_C(0x00A74C), RUNE_C(0x00A74C)}, - {RUNE_C(0x00A74E), RUNE_C(0x00A74E)}, - {RUNE_C(0x00A750), RUNE_C(0x00A750)}, - {RUNE_C(0x00A752), RUNE_C(0x00A752)}, - {RUNE_C(0x00A754), RUNE_C(0x00A754)}, - {RUNE_C(0x00A756), RUNE_C(0x00A756)}, - {RUNE_C(0x00A758), RUNE_C(0x00A758)}, - {RUNE_C(0x00A75A), RUNE_C(0x00A75A)}, - {RUNE_C(0x00A75C), RUNE_C(0x00A75C)}, - {RUNE_C(0x00A75E), RUNE_C(0x00A75E)}, - {RUNE_C(0x00A760), RUNE_C(0x00A760)}, - {RUNE_C(0x00A762), RUNE_C(0x00A762)}, - {RUNE_C(0x00A764), RUNE_C(0x00A764)}, - {RUNE_C(0x00A766), RUNE_C(0x00A766)}, - {RUNE_C(0x00A768), RUNE_C(0x00A768)}, - {RUNE_C(0x00A76A), RUNE_C(0x00A76A)}, - {RUNE_C(0x00A76C), RUNE_C(0x00A76C)}, - {RUNE_C(0x00A76E), RUNE_C(0x00A76E)}, - {RUNE_C(0x00A779), RUNE_C(0x00A779)}, - {RUNE_C(0x00A77B), RUNE_C(0x00A77B)}, - {RUNE_C(0x00A77D), RUNE_C(0x00A77E)}, - {RUNE_C(0x00A780), RUNE_C(0x00A780)}, - {RUNE_C(0x00A782), RUNE_C(0x00A782)}, - {RUNE_C(0x00A784), RUNE_C(0x00A784)}, - {RUNE_C(0x00A786), RUNE_C(0x00A786)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A78B)}, - {RUNE_C(0x00A78D), RUNE_C(0x00A78D)}, - {RUNE_C(0x00A790), RUNE_C(0x00A790)}, - {RUNE_C(0x00A792), RUNE_C(0x00A792)}, - {RUNE_C(0x00A796), RUNE_C(0x00A796)}, - {RUNE_C(0x00A798), RUNE_C(0x00A798)}, - {RUNE_C(0x00A79A), RUNE_C(0x00A79A)}, - {RUNE_C(0x00A79C), RUNE_C(0x00A79C)}, - {RUNE_C(0x00A79E), RUNE_C(0x00A79E)}, - {RUNE_C(0x00A7A0), RUNE_C(0x00A7A0)}, - {RUNE_C(0x00A7A2), RUNE_C(0x00A7A2)}, - {RUNE_C(0x00A7A4), RUNE_C(0x00A7A4)}, - {RUNE_C(0x00A7A6), RUNE_C(0x00A7A6)}, - {RUNE_C(0x00A7A8), RUNE_C(0x00A7A8)}, - {RUNE_C(0x00A7AA), RUNE_C(0x00A7AE)}, - {RUNE_C(0x00A7B0), RUNE_C(0x00A7B4)}, - {RUNE_C(0x00A7B6), RUNE_C(0x00A7B6)}, - {RUNE_C(0x00A7B8), RUNE_C(0x00A7B8)}, - {RUNE_C(0x00A7BA), RUNE_C(0x00A7BA)}, - {RUNE_C(0x00A7BC), RUNE_C(0x00A7BC)}, - {RUNE_C(0x00A7BE), RUNE_C(0x00A7BE)}, - {RUNE_C(0x00A7C0), RUNE_C(0x00A7C0)}, - {RUNE_C(0x00A7C2), RUNE_C(0x00A7C2)}, - {RUNE_C(0x00A7C4), RUNE_C(0x00A7C7)}, - {RUNE_C(0x00A7C9), RUNE_C(0x00A7C9)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D0)}, - {RUNE_C(0x00A7D6), RUNE_C(0x00A7D6)}, - {RUNE_C(0x00A7D8), RUNE_C(0x00A7D8)}, - {RUNE_C(0x00A7F5), RUNE_C(0x00A7F5)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x010400), RUNE_C(0x010427)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118BF)}, - {RUNE_C(0x016E40), RUNE_C(0x016E5F)}, - {RUNE_C(0x01D400), RUNE_C(0x01D419)}, - {RUNE_C(0x01D434), RUNE_C(0x01D44D)}, - {RUNE_C(0x01D468), RUNE_C(0x01D481)}, - {RUNE_C(0x01D49C), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B5)}, - {RUNE_C(0x01D4D0), RUNE_C(0x01D4E9)}, - {RUNE_C(0x01D504), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D538), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D56C), RUNE_C(0x01D585)}, - {RUNE_C(0x01D5A0), RUNE_C(0x01D5B9)}, - {RUNE_C(0x01D5D4), RUNE_C(0x01D5ED)}, - {RUNE_C(0x01D608), RUNE_C(0x01D621)}, - {RUNE_C(0x01D63C), RUNE_C(0x01D655)}, - {RUNE_C(0x01D670), RUNE_C(0x01D689)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6E2), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D71C), RUNE_C(0x01D734)}, - {RUNE_C(0x01D756), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D790), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7CA), RUNE_C(0x01D7CA)}, - {RUNE_C(0x01E900), RUNE_C(0x01E921)}, - {RUNE_C(0x01F130), RUNE_C(0x01F149)}, - {RUNE_C(0x01F150), RUNE_C(0x01F169)}, - {RUNE_C(0x01F170), RUNE_C(0x01F189)}, +static constexpr unsigned char stage2[][32] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xDF, 0xFF, 0xF7, 0xFF, 0xF3, 0xFF, 0xB3, + 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0x0F, 0xFC, + 0xFF, 0xFF, 0xDF, 0x1A, 0x6B, 0x9F, 0x26, 0x20, + 0x8D, 0x1F, 0x04, 0x60, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xB8, + 0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x84, 0x38, 0x27, 0x3E, 0x50, 0x3D, 0x0F, 0xC0, + 0x20, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6D, 0xC0, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFC, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, + 0xFF, 0x38, 0xDF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, + 0xFF, 0x07, 0xC3, 0x03, 0x00, 0x00, 0x60, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF7, + 0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, 0xFF, + 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0x03, 0x00, 0x00, 0xD0, 0x64, 0xDE, 0x3F, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00}, + {0xB0, 0xE7, 0xDF, 0x1F, 0x00, 0x00, 0x00, 0x7B, + 0x5F, 0xFC, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0x00, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0xF0, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, + 0x01, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x1F, 0x00, + 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_upper(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 256]], ch % 256); } diff --git a/lib/unicode/prop/uprop_is_vs.c b/lib/unicode/prop/uprop_is_vs.c index 3133d6b..4f0f9bb 100644 --- a/lib/unicode/prop/uprop_is_vs.c +++ b/lib/unicode/prop/uprop_is_vs.c @@ -1,25 +1,184 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x00180B), RUNE_C(0x00180D)}, - {RUNE_C(0x00180F), RUNE_C(0x00180F)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE0F)}, - {RUNE_C(0x0E0100), RUNE_C(0x0E01EF)}, +static constexpr uint8_t stage1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) +static constexpr unsigned char stage2[][64] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, +}; bool uprop_is_vs(rune ch) { - return mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_wspace.c b/lib/unicode/prop/uprop_is_wspace.c index c4644a2..716b09b 100644 --- a/lib/unicode/prop/uprop_is_wspace.c +++ b/lib/unicode/prop/uprop_is_wspace.c @@ -1,34 +1,192 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x3E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +static constexpr uint8_t stage1[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x001680), RUNE_C(0x001680)}, - {RUNE_C(0x002000), RUNE_C(0x00200A)}, - {RUNE_C(0x002028), RUNE_C(0x002029)}, - {RUNE_C(0x00202F), RUNE_C(0x00202F)}, - {RUNE_C(0x00205F), RUNE_C(0x00205F)}, - {RUNE_C(0x003000), RUNE_C(0x003000)}, +static constexpr unsigned char stage2[][64] = { + {0x00, 0x3E, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xC7, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_wspace(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 512]], ch % 512); } diff --git a/lib/unicode/prop/uprop_is_xidc.c b/lib/unicode/prop/uprop_is_xidc.c index 5503caa..12600f8 100644 --- a/lib/unicode/prop/uprop_is_xidc.c +++ b/lib/unicode/prop/uprop_is_xidc.c @@ -1,794 +1,952 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, - 0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xA0, 0x04, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 2, 2, 2, 50, 51, + 52, 53, 54, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 2, 57, 58, 59, 56, 56, 56, 56, + 60, 61, 62, 63, 56, 56, 56, 56, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 64, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 2, 2, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 2, 2, 79, 80, 81, 82, 83, 2, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 56, 94, 95, 96, 2, 97, 98, 99, 2, 2, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 56, 56, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 56, 123, 124, 56, 125, 126, 127, 128, 56, + 129, 130, 131, 132, 133, 134, 56, 56, 135, 136, 137, 138, 56, 139, 140, 141, + 2, 2, 2, 2, 2, 2, 2, 142, 143, 2, 144, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 145, + 2, 2, 2, 2, 2, 2, 2, 2, 146, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 2, 2, 2, 2, 147, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 148, 149, 150, 151, 56, 56, 56, 56, 152, 56, 153, 154, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 155, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 156, 55, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 157, + 2, 2, 158, 2, 2, 159, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 160, 161, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 162, 56, + 56, 56, 163, 164, 165, 56, 56, 56, 166, 167, 168, 2, 2, 169, 170, 171, + 56, 56, 56, 56, 172, 173, 56, 56, 56, 56, 56, 56, 56, 56, 174, 56, + 175, 176, 177, 56, 56, 178, 56, 56, 56, 179, 56, 56, 56, 56, 56, 180, + 2, 181, 182, 56, 56, 56, 56, 56, 56, 56, 56, 56, 183, 184, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 185, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 186, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 187, 2, + 188, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 189, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 190, 2, 2, 2, 2, 191, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 192, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 193, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 194, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 2, 195, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002C6), RUNE_C(0x0002D1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x0002EC), RUNE_C(0x0002EC)}, - {RUNE_C(0x0002EE), RUNE_C(0x0002EE)}, - {RUNE_C(0x000300), RUNE_C(0x000374)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037B), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x000481)}, - {RUNE_C(0x000483), RUNE_C(0x000487)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x000591), RUNE_C(0x0005BD)}, - {RUNE_C(0x0005BF), RUNE_C(0x0005BF)}, - {RUNE_C(0x0005C1), RUNE_C(0x0005C2)}, - {RUNE_C(0x0005C4), RUNE_C(0x0005C5)}, - {RUNE_C(0x0005C7), RUNE_C(0x0005C7)}, - {RUNE_C(0x0005D0), RUNE_C(0x0005EA)}, - {RUNE_C(0x0005EF), RUNE_C(0x0005F2)}, - {RUNE_C(0x000610), RUNE_C(0x00061A)}, - {RUNE_C(0x000620), RUNE_C(0x000669)}, - {RUNE_C(0x00066E), RUNE_C(0x0006D3)}, - {RUNE_C(0x0006D5), RUNE_C(0x0006DC)}, - {RUNE_C(0x0006DF), RUNE_C(0x0006E8)}, - {RUNE_C(0x0006EA), RUNE_C(0x0006FC)}, - {RUNE_C(0x0006FF), RUNE_C(0x0006FF)}, - {RUNE_C(0x000710), RUNE_C(0x00074A)}, - {RUNE_C(0x00074D), RUNE_C(0x0007B1)}, - {RUNE_C(0x0007C0), RUNE_C(0x0007F5)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x0007FD), RUNE_C(0x0007FD)}, - {RUNE_C(0x000800), RUNE_C(0x00082D)}, - {RUNE_C(0x000840), RUNE_C(0x00085B)}, - {RUNE_C(0x000860), RUNE_C(0x00086A)}, - {RUNE_C(0x000870), RUNE_C(0x000887)}, - {RUNE_C(0x000889), RUNE_C(0x00088E)}, - {RUNE_C(0x000898), RUNE_C(0x0008E1)}, - {RUNE_C(0x0008E3), RUNE_C(0x000963)}, - {RUNE_C(0x000966), RUNE_C(0x00096F)}, - {RUNE_C(0x000971), RUNE_C(0x000983)}, - {RUNE_C(0x000985), RUNE_C(0x00098C)}, - {RUNE_C(0x00098F), RUNE_C(0x000990)}, - {RUNE_C(0x000993), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BC), RUNE_C(0x0009C4)}, - {RUNE_C(0x0009C7), RUNE_C(0x0009C8)}, - {RUNE_C(0x0009CB), RUNE_C(0x0009CE)}, - {RUNE_C(0x0009D7), RUNE_C(0x0009D7)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009E3)}, - {RUNE_C(0x0009E6), RUNE_C(0x0009F1)}, - {RUNE_C(0x0009FC), RUNE_C(0x0009FC)}, - {RUNE_C(0x0009FE), RUNE_C(0x0009FE)}, - {RUNE_C(0x000A01), RUNE_C(0x000A03)}, - {RUNE_C(0x000A05), RUNE_C(0x000A0A)}, - {RUNE_C(0x000A0F), RUNE_C(0x000A10)}, - {RUNE_C(0x000A13), RUNE_C(0x000A28)}, - {RUNE_C(0x000A2A), RUNE_C(0x000A30)}, - {RUNE_C(0x000A32), RUNE_C(0x000A33)}, - {RUNE_C(0x000A35), RUNE_C(0x000A36)}, - {RUNE_C(0x000A38), RUNE_C(0x000A39)}, - {RUNE_C(0x000A3C), RUNE_C(0x000A3C)}, - {RUNE_C(0x000A3E), RUNE_C(0x000A42)}, - {RUNE_C(0x000A47), RUNE_C(0x000A48)}, - {RUNE_C(0x000A4B), RUNE_C(0x000A4D)}, - {RUNE_C(0x000A51), RUNE_C(0x000A51)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5C)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000A66), RUNE_C(0x000A75)}, - {RUNE_C(0x000A81), RUNE_C(0x000A83)}, - {RUNE_C(0x000A85), RUNE_C(0x000A8D)}, - {RUNE_C(0x000A8F), RUNE_C(0x000A91)}, - {RUNE_C(0x000A93), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABC), RUNE_C(0x000AC5)}, - {RUNE_C(0x000AC7), RUNE_C(0x000AC9)}, - {RUNE_C(0x000ACB), RUNE_C(0x000ACD)}, - {RUNE_C(0x000AD0), RUNE_C(0x000AD0)}, - {RUNE_C(0x000AE0), RUNE_C(0x000AE3)}, - {RUNE_C(0x000AE6), RUNE_C(0x000AEF)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AFF)}, - {RUNE_C(0x000B01), RUNE_C(0x000B03)}, - {RUNE_C(0x000B05), RUNE_C(0x000B0C)}, - {RUNE_C(0x000B0F), RUNE_C(0x000B10)}, - {RUNE_C(0x000B13), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3C), RUNE_C(0x000B44)}, - {RUNE_C(0x000B47), RUNE_C(0x000B48)}, - {RUNE_C(0x000B4B), RUNE_C(0x000B4D)}, - {RUNE_C(0x000B55), RUNE_C(0x000B57)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B63)}, - {RUNE_C(0x000B66), RUNE_C(0x000B6F)}, - {RUNE_C(0x000B71), RUNE_C(0x000B71)}, - {RUNE_C(0x000B82), RUNE_C(0x000B83)}, - {RUNE_C(0x000B85), RUNE_C(0x000B8A)}, - {RUNE_C(0x000B8E), RUNE_C(0x000B90)}, - {RUNE_C(0x000B92), RUNE_C(0x000B95)}, - {RUNE_C(0x000B99), RUNE_C(0x000B9A)}, - {RUNE_C(0x000B9C), RUNE_C(0x000B9C)}, - {RUNE_C(0x000B9E), RUNE_C(0x000B9F)}, - {RUNE_C(0x000BA3), RUNE_C(0x000BA4)}, - {RUNE_C(0x000BA8), RUNE_C(0x000BAA)}, - {RUNE_C(0x000BAE), RUNE_C(0x000BB9)}, - {RUNE_C(0x000BBE), RUNE_C(0x000BC2)}, - {RUNE_C(0x000BC6), RUNE_C(0x000BC8)}, - {RUNE_C(0x000BCA), RUNE_C(0x000BCD)}, - {RUNE_C(0x000BD0), RUNE_C(0x000BD0)}, - {RUNE_C(0x000BD7), RUNE_C(0x000BD7)}, - {RUNE_C(0x000BE6), RUNE_C(0x000BEF)}, - {RUNE_C(0x000C00), RUNE_C(0x000C0C)}, - {RUNE_C(0x000C0E), RUNE_C(0x000C10)}, - {RUNE_C(0x000C12), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3C), RUNE_C(0x000C44)}, - {RUNE_C(0x000C46), RUNE_C(0x000C48)}, - {RUNE_C(0x000C4A), RUNE_C(0x000C4D)}, - {RUNE_C(0x000C55), RUNE_C(0x000C56)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000C5D), RUNE_C(0x000C5D)}, - {RUNE_C(0x000C60), RUNE_C(0x000C63)}, - {RUNE_C(0x000C66), RUNE_C(0x000C6F)}, - {RUNE_C(0x000C80), RUNE_C(0x000C83)}, - {RUNE_C(0x000C85), RUNE_C(0x000C8C)}, - {RUNE_C(0x000C8E), RUNE_C(0x000C90)}, - {RUNE_C(0x000C92), RUNE_C(0x000CA8)}, - {RUNE_C(0x000CAA), RUNE_C(0x000CB3)}, - {RUNE_C(0x000CB5), RUNE_C(0x000CB9)}, - {RUNE_C(0x000CBC), RUNE_C(0x000CC4)}, - {RUNE_C(0x000CC6), RUNE_C(0x000CC8)}, - {RUNE_C(0x000CCA), RUNE_C(0x000CCD)}, - {RUNE_C(0x000CD5), RUNE_C(0x000CD6)}, - {RUNE_C(0x000CDD), RUNE_C(0x000CDE)}, - {RUNE_C(0x000CE0), RUNE_C(0x000CE3)}, - {RUNE_C(0x000CE6), RUNE_C(0x000CEF)}, - {RUNE_C(0x000CF1), RUNE_C(0x000CF3)}, - {RUNE_C(0x000D00), RUNE_C(0x000D0C)}, - {RUNE_C(0x000D0E), RUNE_C(0x000D10)}, - {RUNE_C(0x000D12), RUNE_C(0x000D44)}, - {RUNE_C(0x000D46), RUNE_C(0x000D48)}, - {RUNE_C(0x000D4A), RUNE_C(0x000D4E)}, - {RUNE_C(0x000D54), RUNE_C(0x000D57)}, - {RUNE_C(0x000D5F), RUNE_C(0x000D63)}, - {RUNE_C(0x000D66), RUNE_C(0x000D6F)}, - {RUNE_C(0x000D7A), RUNE_C(0x000D7F)}, - {RUNE_C(0x000D81), RUNE_C(0x000D83)}, - {RUNE_C(0x000D85), RUNE_C(0x000D96)}, - {RUNE_C(0x000D9A), RUNE_C(0x000DB1)}, - {RUNE_C(0x000DB3), RUNE_C(0x000DBB)}, - {RUNE_C(0x000DBD), RUNE_C(0x000DBD)}, - {RUNE_C(0x000DC0), RUNE_C(0x000DC6)}, - {RUNE_C(0x000DCA), RUNE_C(0x000DCA)}, - {RUNE_C(0x000DCF), RUNE_C(0x000DD4)}, - {RUNE_C(0x000DD6), RUNE_C(0x000DD6)}, - {RUNE_C(0x000DD8), RUNE_C(0x000DDF)}, - {RUNE_C(0x000DE6), RUNE_C(0x000DEF)}, - {RUNE_C(0x000DF2), RUNE_C(0x000DF3)}, - {RUNE_C(0x000E01), RUNE_C(0x000E3A)}, - {RUNE_C(0x000E40), RUNE_C(0x000E4E)}, - {RUNE_C(0x000E50), RUNE_C(0x000E59)}, - {RUNE_C(0x000E81), RUNE_C(0x000E82)}, - {RUNE_C(0x000E84), RUNE_C(0x000E84)}, - {RUNE_C(0x000E86), RUNE_C(0x000E8A)}, - {RUNE_C(0x000E8C), RUNE_C(0x000EA3)}, - {RUNE_C(0x000EA5), RUNE_C(0x000EA5)}, - {RUNE_C(0x000EA7), RUNE_C(0x000EBD)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000EC8), RUNE_C(0x000ECE)}, - {RUNE_C(0x000ED0), RUNE_C(0x000ED9)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDF)}, - {RUNE_C(0x000F00), RUNE_C(0x000F00)}, - {RUNE_C(0x000F18), RUNE_C(0x000F19)}, - {RUNE_C(0x000F20), RUNE_C(0x000F29)}, - {RUNE_C(0x000F35), RUNE_C(0x000F35)}, - {RUNE_C(0x000F37), RUNE_C(0x000F37)}, - {RUNE_C(0x000F39), RUNE_C(0x000F39)}, - {RUNE_C(0x000F3E), RUNE_C(0x000F47)}, - {RUNE_C(0x000F49), RUNE_C(0x000F6C)}, - {RUNE_C(0x000F71), RUNE_C(0x000F84)}, - {RUNE_C(0x000F86), RUNE_C(0x000F97)}, - {RUNE_C(0x000F99), RUNE_C(0x000FBC)}, - {RUNE_C(0x000FC6), RUNE_C(0x000FC6)}, - {RUNE_C(0x001000), RUNE_C(0x001049)}, - {RUNE_C(0x001050), RUNE_C(0x00109D)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x001248)}, - {RUNE_C(0x00124A), RUNE_C(0x00124D)}, - {RUNE_C(0x001250), RUNE_C(0x001256)}, - {RUNE_C(0x001258), RUNE_C(0x001258)}, - {RUNE_C(0x00125A), RUNE_C(0x00125D)}, - {RUNE_C(0x001260), RUNE_C(0x001288)}, - {RUNE_C(0x00128A), RUNE_C(0x00128D)}, - {RUNE_C(0x001290), RUNE_C(0x0012B0)}, - {RUNE_C(0x0012B2), RUNE_C(0x0012B5)}, - {RUNE_C(0x0012B8), RUNE_C(0x0012BE)}, - {RUNE_C(0x0012C0), RUNE_C(0x0012C0)}, - {RUNE_C(0x0012C2), RUNE_C(0x0012C5)}, - {RUNE_C(0x0012C8), RUNE_C(0x0012D6)}, - {RUNE_C(0x0012D8), RUNE_C(0x001310)}, - {RUNE_C(0x001312), RUNE_C(0x001315)}, - {RUNE_C(0x001318), RUNE_C(0x00135A)}, - {RUNE_C(0x00135D), RUNE_C(0x00135F)}, - {RUNE_C(0x001369), RUNE_C(0x001371)}, - {RUNE_C(0x001380), RUNE_C(0x00138F)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001401), RUNE_C(0x00166C)}, - {RUNE_C(0x00166F), RUNE_C(0x00167F)}, - {RUNE_C(0x001681), RUNE_C(0x00169A)}, - {RUNE_C(0x0016A0), RUNE_C(0x0016EA)}, - {RUNE_C(0x0016EE), RUNE_C(0x0016F8)}, - {RUNE_C(0x001700), RUNE_C(0x001715)}, - {RUNE_C(0x00171F), RUNE_C(0x001734)}, - {RUNE_C(0x001740), RUNE_C(0x001753)}, - {RUNE_C(0x001760), RUNE_C(0x00176C)}, - {RUNE_C(0x00176E), RUNE_C(0x001770)}, - {RUNE_C(0x001772), RUNE_C(0x001773)}, - {RUNE_C(0x001780), RUNE_C(0x0017D3)}, - {RUNE_C(0x0017D7), RUNE_C(0x0017D7)}, - {RUNE_C(0x0017DC), RUNE_C(0x0017DD)}, - {RUNE_C(0x0017E0), RUNE_C(0x0017E9)}, - {RUNE_C(0x00180B), RUNE_C(0x00180D)}, - {RUNE_C(0x00180F), RUNE_C(0x001819)}, - {RUNE_C(0x001820), RUNE_C(0x001878)}, - {RUNE_C(0x001880), RUNE_C(0x0018AA)}, - {RUNE_C(0x0018B0), RUNE_C(0x0018F5)}, - {RUNE_C(0x001900), RUNE_C(0x00191E)}, - {RUNE_C(0x001920), RUNE_C(0x00192B)}, - {RUNE_C(0x001930), RUNE_C(0x00193B)}, - {RUNE_C(0x001946), RUNE_C(0x00196D)}, - {RUNE_C(0x001970), RUNE_C(0x001974)}, - {RUNE_C(0x001980), RUNE_C(0x0019AB)}, - {RUNE_C(0x0019B0), RUNE_C(0x0019C9)}, - {RUNE_C(0x0019D0), RUNE_C(0x0019DA)}, - {RUNE_C(0x001A00), RUNE_C(0x001A1B)}, - {RUNE_C(0x001A20), RUNE_C(0x001A5E)}, - {RUNE_C(0x001A60), RUNE_C(0x001A7C)}, - {RUNE_C(0x001A7F), RUNE_C(0x001A89)}, - {RUNE_C(0x001A90), RUNE_C(0x001A99)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001AB0), RUNE_C(0x001ABD)}, - {RUNE_C(0x001ABF), RUNE_C(0x001ACE)}, - {RUNE_C(0x001B00), RUNE_C(0x001B4C)}, - {RUNE_C(0x001B50), RUNE_C(0x001B59)}, - {RUNE_C(0x001B6B), RUNE_C(0x001B73)}, - {RUNE_C(0x001B80), RUNE_C(0x001BF3)}, - {RUNE_C(0x001C00), RUNE_C(0x001C37)}, - {RUNE_C(0x001C40), RUNE_C(0x001C49)}, - {RUNE_C(0x001C4D), RUNE_C(0x001C7D)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001CD0), RUNE_C(0x001CD2)}, - {RUNE_C(0x001CD4), RUNE_C(0x001CFA)}, - {RUNE_C(0x001D00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x00200C), RUNE_C(0x00200D)}, - {RUNE_C(0x00203F), RUNE_C(0x002040)}, - {RUNE_C(0x002054), RUNE_C(0x002054)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x0020D0), RUNE_C(0x0020DC)}, - {RUNE_C(0x0020E1), RUNE_C(0x0020E1)}, - {RUNE_C(0x0020E5), RUNE_C(0x0020F0)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002118), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x002188)}, - {RUNE_C(0x002C00), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x002D30), RUNE_C(0x002D67)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002D7F), RUNE_C(0x002D96)}, - {RUNE_C(0x002DA0), RUNE_C(0x002DA6)}, - {RUNE_C(0x002DA8), RUNE_C(0x002DAE)}, - {RUNE_C(0x002DB0), RUNE_C(0x002DB6)}, - {RUNE_C(0x002DB8), RUNE_C(0x002DBE)}, - {RUNE_C(0x002DC0), RUNE_C(0x002DC6)}, - {RUNE_C(0x002DC8), RUNE_C(0x002DCE)}, - {RUNE_C(0x002DD0), RUNE_C(0x002DD6)}, - {RUNE_C(0x002DD8), RUNE_C(0x002DDE)}, - {RUNE_C(0x002DE0), RUNE_C(0x002DFF)}, - {RUNE_C(0x003005), RUNE_C(0x003007)}, - {RUNE_C(0x003021), RUNE_C(0x00302F)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x003038), RUNE_C(0x00303C)}, - {RUNE_C(0x003041), RUNE_C(0x003096)}, - {RUNE_C(0x003099), RUNE_C(0x00309A)}, - {RUNE_C(0x00309D), RUNE_C(0x00309F)}, - {RUNE_C(0x0030A1), RUNE_C(0x0030FF)}, - {RUNE_C(0x003105), RUNE_C(0x00312F)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x0031A0), RUNE_C(0x0031BF)}, - {RUNE_C(0x0031F0), RUNE_C(0x0031FF)}, - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x00A48C)}, - {RUNE_C(0x00A4D0), RUNE_C(0x00A4FD)}, - {RUNE_C(0x00A500), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A610), RUNE_C(0x00A62B)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66F)}, - {RUNE_C(0x00A674), RUNE_C(0x00A67D)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A6F1)}, - {RUNE_C(0x00A717), RUNE_C(0x00A71F)}, - {RUNE_C(0x00A722), RUNE_C(0x00A788)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A827)}, - {RUNE_C(0x00A82C), RUNE_C(0x00A82C)}, - {RUNE_C(0x00A840), RUNE_C(0x00A873)}, - {RUNE_C(0x00A880), RUNE_C(0x00A8C5)}, - {RUNE_C(0x00A8D0), RUNE_C(0x00A8D9)}, - {RUNE_C(0x00A8E0), RUNE_C(0x00A8F7)}, - {RUNE_C(0x00A8FB), RUNE_C(0x00A8FB)}, - {RUNE_C(0x00A8FD), RUNE_C(0x00A92D)}, - {RUNE_C(0x00A930), RUNE_C(0x00A953)}, - {RUNE_C(0x00A960), RUNE_C(0x00A97C)}, - {RUNE_C(0x00A980), RUNE_C(0x00A9C0)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9D9)}, - {RUNE_C(0x00A9E0), RUNE_C(0x00A9FE)}, - {RUNE_C(0x00AA00), RUNE_C(0x00AA36)}, - {RUNE_C(0x00AA40), RUNE_C(0x00AA4D)}, - {RUNE_C(0x00AA50), RUNE_C(0x00AA59)}, - {RUNE_C(0x00AA60), RUNE_C(0x00AA76)}, - {RUNE_C(0x00AA7A), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AADB), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAE0), RUNE_C(0x00AAEF)}, - {RUNE_C(0x00AAF2), RUNE_C(0x00AAF6)}, - {RUNE_C(0x00AB01), RUNE_C(0x00AB06)}, - {RUNE_C(0x00AB09), RUNE_C(0x00AB0E)}, - {RUNE_C(0x00AB11), RUNE_C(0x00AB16)}, - {RUNE_C(0x00AB20), RUNE_C(0x00AB26)}, - {RUNE_C(0x00AB28), RUNE_C(0x00AB2E)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABEA)}, - {RUNE_C(0x00ABEC), RUNE_C(0x00ABED)}, - {RUNE_C(0x00ABF0), RUNE_C(0x00ABF9)}, - {RUNE_C(0x00AC00), RUNE_C(0x00D7A3)}, - {RUNE_C(0x00D7B0), RUNE_C(0x00D7C6)}, - {RUNE_C(0x00D7CB), RUNE_C(0x00D7FB)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB28)}, - {RUNE_C(0x00FB2A), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBB1)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FC5D)}, - {RUNE_C(0x00FC64), RUNE_C(0x00FD3D)}, - {RUNE_C(0x00FD50), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDF9)}, - {RUNE_C(0x00FE00), RUNE_C(0x00FE0F)}, - {RUNE_C(0x00FE20), RUNE_C(0x00FE2F)}, - {RUNE_C(0x00FE33), RUNE_C(0x00FE34)}, - {RUNE_C(0x00FE4D), RUNE_C(0x00FE4F)}, - {RUNE_C(0x00FE71), RUNE_C(0x00FE71)}, - {RUNE_C(0x00FE73), RUNE_C(0x00FE73)}, - {RUNE_C(0x00FE77), RUNE_C(0x00FE77)}, - {RUNE_C(0x00FE79), RUNE_C(0x00FE79)}, - {RUNE_C(0x00FE7B), RUNE_C(0x00FE7B)}, - {RUNE_C(0x00FE7D), RUNE_C(0x00FE7D)}, - {RUNE_C(0x00FE7F), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FF10), RUNE_C(0x00FF19)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF3F), RUNE_C(0x00FF3F)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x00FF65), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x010000), RUNE_C(0x01000B)}, - {RUNE_C(0x01000D), RUNE_C(0x010026)}, - {RUNE_C(0x010028), RUNE_C(0x01003A)}, - {RUNE_C(0x01003C), RUNE_C(0x01003D)}, - {RUNE_C(0x01003F), RUNE_C(0x01004D)}, - {RUNE_C(0x010050), RUNE_C(0x01005D)}, - {RUNE_C(0x010080), RUNE_C(0x0100FA)}, - {RUNE_C(0x010140), RUNE_C(0x010174)}, - {RUNE_C(0x0101FD), RUNE_C(0x0101FD)}, - {RUNE_C(0x010280), RUNE_C(0x01029C)}, - {RUNE_C(0x0102A0), RUNE_C(0x0102D0)}, - {RUNE_C(0x0102E0), RUNE_C(0x0102E0)}, - {RUNE_C(0x010300), RUNE_C(0x01031F)}, - {RUNE_C(0x01032D), RUNE_C(0x01034A)}, - {RUNE_C(0x010350), RUNE_C(0x01037A)}, - {RUNE_C(0x010380), RUNE_C(0x01039D)}, - {RUNE_C(0x0103A0), RUNE_C(0x0103C3)}, - {RUNE_C(0x0103C8), RUNE_C(0x0103CF)}, - {RUNE_C(0x0103D1), RUNE_C(0x0103D5)}, - {RUNE_C(0x010400), RUNE_C(0x01049D)}, - {RUNE_C(0x0104A0), RUNE_C(0x0104A9)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010500), RUNE_C(0x010527)}, - {RUNE_C(0x010530), RUNE_C(0x010563)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010600), RUNE_C(0x010736)}, - {RUNE_C(0x010740), RUNE_C(0x010755)}, - {RUNE_C(0x010760), RUNE_C(0x010767)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010800), RUNE_C(0x010805)}, - {RUNE_C(0x010808), RUNE_C(0x010808)}, - {RUNE_C(0x01080A), RUNE_C(0x010835)}, - {RUNE_C(0x010837), RUNE_C(0x010838)}, - {RUNE_C(0x01083C), RUNE_C(0x01083C)}, - {RUNE_C(0x01083F), RUNE_C(0x010855)}, - {RUNE_C(0x010860), RUNE_C(0x010876)}, - {RUNE_C(0x010880), RUNE_C(0x01089E)}, - {RUNE_C(0x0108E0), RUNE_C(0x0108F2)}, - {RUNE_C(0x0108F4), RUNE_C(0x0108F5)}, - {RUNE_C(0x010900), RUNE_C(0x010915)}, - {RUNE_C(0x010920), RUNE_C(0x010939)}, - {RUNE_C(0x010980), RUNE_C(0x0109B7)}, - {RUNE_C(0x0109BE), RUNE_C(0x0109BF)}, - {RUNE_C(0x010A00), RUNE_C(0x010A03)}, - {RUNE_C(0x010A05), RUNE_C(0x010A06)}, - {RUNE_C(0x010A0C), RUNE_C(0x010A13)}, - {RUNE_C(0x010A15), RUNE_C(0x010A17)}, - {RUNE_C(0x010A19), RUNE_C(0x010A35)}, - {RUNE_C(0x010A38), RUNE_C(0x010A3A)}, - {RUNE_C(0x010A3F), RUNE_C(0x010A3F)}, - {RUNE_C(0x010A60), RUNE_C(0x010A7C)}, - {RUNE_C(0x010A80), RUNE_C(0x010A9C)}, - {RUNE_C(0x010AC0), RUNE_C(0x010AC7)}, - {RUNE_C(0x010AC9), RUNE_C(0x010AE6)}, - {RUNE_C(0x010B00), RUNE_C(0x010B35)}, - {RUNE_C(0x010B40), RUNE_C(0x010B55)}, - {RUNE_C(0x010B60), RUNE_C(0x010B72)}, - {RUNE_C(0x010B80), RUNE_C(0x010B91)}, - {RUNE_C(0x010C00), RUNE_C(0x010C48)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x010D00), RUNE_C(0x010D27)}, - {RUNE_C(0x010D30), RUNE_C(0x010D39)}, - {RUNE_C(0x010E80), RUNE_C(0x010EA9)}, - {RUNE_C(0x010EAB), RUNE_C(0x010EAC)}, - {RUNE_C(0x010EB0), RUNE_C(0x010EB1)}, - {RUNE_C(0x010EFD), RUNE_C(0x010F1C)}, - {RUNE_C(0x010F27), RUNE_C(0x010F27)}, - {RUNE_C(0x010F30), RUNE_C(0x010F50)}, - {RUNE_C(0x010F70), RUNE_C(0x010F85)}, - {RUNE_C(0x010FB0), RUNE_C(0x010FC4)}, - {RUNE_C(0x010FE0), RUNE_C(0x010FF6)}, - {RUNE_C(0x011000), RUNE_C(0x011046)}, - {RUNE_C(0x011066), RUNE_C(0x011075)}, - {RUNE_C(0x01107F), RUNE_C(0x0110BA)}, - {RUNE_C(0x0110C2), RUNE_C(0x0110C2)}, - {RUNE_C(0x0110D0), RUNE_C(0x0110E8)}, - {RUNE_C(0x0110F0), RUNE_C(0x0110F9)}, - {RUNE_C(0x011100), RUNE_C(0x011134)}, - {RUNE_C(0x011136), RUNE_C(0x01113F)}, - {RUNE_C(0x011144), RUNE_C(0x011147)}, - {RUNE_C(0x011150), RUNE_C(0x011173)}, - {RUNE_C(0x011176), RUNE_C(0x011176)}, - {RUNE_C(0x011180), RUNE_C(0x0111C4)}, - {RUNE_C(0x0111C9), RUNE_C(0x0111CC)}, - {RUNE_C(0x0111CE), RUNE_C(0x0111DA)}, - {RUNE_C(0x0111DC), RUNE_C(0x0111DC)}, - {RUNE_C(0x011200), RUNE_C(0x011211)}, - {RUNE_C(0x011213), RUNE_C(0x011237)}, - {RUNE_C(0x01123E), RUNE_C(0x011241)}, - {RUNE_C(0x011280), RUNE_C(0x011286)}, - {RUNE_C(0x011288), RUNE_C(0x011288)}, - {RUNE_C(0x01128A), RUNE_C(0x01128D)}, - {RUNE_C(0x01128F), RUNE_C(0x01129D)}, - {RUNE_C(0x01129F), RUNE_C(0x0112A8)}, - {RUNE_C(0x0112B0), RUNE_C(0x0112EA)}, - {RUNE_C(0x0112F0), RUNE_C(0x0112F9)}, - {RUNE_C(0x011300), RUNE_C(0x011303)}, - {RUNE_C(0x011305), RUNE_C(0x01130C)}, - {RUNE_C(0x01130F), RUNE_C(0x011310)}, - {RUNE_C(0x011313), RUNE_C(0x011328)}, - {RUNE_C(0x01132A), RUNE_C(0x011330)}, - {RUNE_C(0x011332), RUNE_C(0x011333)}, - {RUNE_C(0x011335), RUNE_C(0x011339)}, - {RUNE_C(0x01133B), RUNE_C(0x011344)}, - {RUNE_C(0x011347), RUNE_C(0x011348)}, - {RUNE_C(0x01134B), RUNE_C(0x01134D)}, - {RUNE_C(0x011350), RUNE_C(0x011350)}, - {RUNE_C(0x011357), RUNE_C(0x011357)}, - {RUNE_C(0x01135D), RUNE_C(0x011363)}, - {RUNE_C(0x011366), RUNE_C(0x01136C)}, - {RUNE_C(0x011370), RUNE_C(0x011374)}, - {RUNE_C(0x011400), RUNE_C(0x01144A)}, - {RUNE_C(0x011450), RUNE_C(0x011459)}, - {RUNE_C(0x01145E), RUNE_C(0x011461)}, - {RUNE_C(0x011480), RUNE_C(0x0114C5)}, - {RUNE_C(0x0114C7), RUNE_C(0x0114C7)}, - {RUNE_C(0x0114D0), RUNE_C(0x0114D9)}, - {RUNE_C(0x011580), RUNE_C(0x0115B5)}, - {RUNE_C(0x0115B8), RUNE_C(0x0115C0)}, - {RUNE_C(0x0115D8), RUNE_C(0x0115DD)}, - {RUNE_C(0x011600), RUNE_C(0x011640)}, - {RUNE_C(0x011644), RUNE_C(0x011644)}, - {RUNE_C(0x011650), RUNE_C(0x011659)}, - {RUNE_C(0x011680), RUNE_C(0x0116B8)}, - {RUNE_C(0x0116C0), RUNE_C(0x0116C9)}, - {RUNE_C(0x011700), RUNE_C(0x01171A)}, - {RUNE_C(0x01171D), RUNE_C(0x01172B)}, - {RUNE_C(0x011730), RUNE_C(0x011739)}, - {RUNE_C(0x011740), RUNE_C(0x011746)}, - {RUNE_C(0x011800), RUNE_C(0x01183A)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118E9)}, - {RUNE_C(0x0118FF), RUNE_C(0x011906)}, - {RUNE_C(0x011909), RUNE_C(0x011909)}, - {RUNE_C(0x01190C), RUNE_C(0x011913)}, - {RUNE_C(0x011915), RUNE_C(0x011916)}, - {RUNE_C(0x011918), RUNE_C(0x011935)}, - {RUNE_C(0x011937), RUNE_C(0x011938)}, - {RUNE_C(0x01193B), RUNE_C(0x011943)}, - {RUNE_C(0x011950), RUNE_C(0x011959)}, - {RUNE_C(0x0119A0), RUNE_C(0x0119A7)}, - {RUNE_C(0x0119AA), RUNE_C(0x0119D7)}, - {RUNE_C(0x0119DA), RUNE_C(0x0119E1)}, - {RUNE_C(0x0119E3), RUNE_C(0x0119E4)}, - {RUNE_C(0x011A00), RUNE_C(0x011A3E)}, - {RUNE_C(0x011A47), RUNE_C(0x011A47)}, - {RUNE_C(0x011A50), RUNE_C(0x011A99)}, - {RUNE_C(0x011A9D), RUNE_C(0x011A9D)}, - {RUNE_C(0x011AB0), RUNE_C(0x011AF8)}, - {RUNE_C(0x011C00), RUNE_C(0x011C08)}, - {RUNE_C(0x011C0A), RUNE_C(0x011C36)}, - {RUNE_C(0x011C38), RUNE_C(0x011C40)}, - {RUNE_C(0x011C50), RUNE_C(0x011C59)}, - {RUNE_C(0x011C72), RUNE_C(0x011C8F)}, - {RUNE_C(0x011C92), RUNE_C(0x011CA7)}, - {RUNE_C(0x011CA9), RUNE_C(0x011CB6)}, - {RUNE_C(0x011D00), RUNE_C(0x011D06)}, - {RUNE_C(0x011D08), RUNE_C(0x011D09)}, - {RUNE_C(0x011D0B), RUNE_C(0x011D36)}, - {RUNE_C(0x011D3A), RUNE_C(0x011D3A)}, - {RUNE_C(0x011D3C), RUNE_C(0x011D3D)}, - {RUNE_C(0x011D3F), RUNE_C(0x011D47)}, - {RUNE_C(0x011D50), RUNE_C(0x011D59)}, - {RUNE_C(0x011D60), RUNE_C(0x011D65)}, - {RUNE_C(0x011D67), RUNE_C(0x011D68)}, - {RUNE_C(0x011D6A), RUNE_C(0x011D8E)}, - {RUNE_C(0x011D90), RUNE_C(0x011D91)}, - {RUNE_C(0x011D93), RUNE_C(0x011D98)}, - {RUNE_C(0x011DA0), RUNE_C(0x011DA9)}, - {RUNE_C(0x011EE0), RUNE_C(0x011EF6)}, - {RUNE_C(0x011F00), RUNE_C(0x011F10)}, - {RUNE_C(0x011F12), RUNE_C(0x011F3A)}, - {RUNE_C(0x011F3E), RUNE_C(0x011F42)}, - {RUNE_C(0x011F50), RUNE_C(0x011F59)}, - {RUNE_C(0x011FB0), RUNE_C(0x011FB0)}, - {RUNE_C(0x012000), RUNE_C(0x012399)}, - {RUNE_C(0x012400), RUNE_C(0x01246E)}, - {RUNE_C(0x012480), RUNE_C(0x012543)}, - {RUNE_C(0x012F90), RUNE_C(0x012FF0)}, - {RUNE_C(0x013000), RUNE_C(0x01342F)}, - {RUNE_C(0x013440), RUNE_C(0x013455)}, - {RUNE_C(0x014400), RUNE_C(0x014646)}, - {RUNE_C(0x016800), RUNE_C(0x016A38)}, - {RUNE_C(0x016A40), RUNE_C(0x016A5E)}, - {RUNE_C(0x016A60), RUNE_C(0x016A69)}, - {RUNE_C(0x016A70), RUNE_C(0x016ABE)}, - {RUNE_C(0x016AC0), RUNE_C(0x016AC9)}, - {RUNE_C(0x016AD0), RUNE_C(0x016AED)}, - {RUNE_C(0x016AF0), RUNE_C(0x016AF4)}, - {RUNE_C(0x016B00), RUNE_C(0x016B36)}, - {RUNE_C(0x016B40), RUNE_C(0x016B43)}, - {RUNE_C(0x016B50), RUNE_C(0x016B59)}, - {RUNE_C(0x016B63), RUNE_C(0x016B77)}, - {RUNE_C(0x016B7D), RUNE_C(0x016B8F)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x016F00), RUNE_C(0x016F4A)}, - {RUNE_C(0x016F4F), RUNE_C(0x016F87)}, - {RUNE_C(0x016F8F), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE4)}, - {RUNE_C(0x016FF0), RUNE_C(0x016FF1)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01B000), RUNE_C(0x01B122)}, - {RUNE_C(0x01B132), RUNE_C(0x01B132)}, - {RUNE_C(0x01B150), RUNE_C(0x01B152)}, - {RUNE_C(0x01B155), RUNE_C(0x01B155)}, - {RUNE_C(0x01B164), RUNE_C(0x01B167)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x01BC00), RUNE_C(0x01BC6A)}, - {RUNE_C(0x01BC70), RUNE_C(0x01BC7C)}, - {RUNE_C(0x01BC80), RUNE_C(0x01BC88)}, - {RUNE_C(0x01BC90), RUNE_C(0x01BC99)}, - {RUNE_C(0x01BC9D), RUNE_C(0x01BC9E)}, - {RUNE_C(0x01CF00), RUNE_C(0x01CF2D)}, - {RUNE_C(0x01CF30), RUNE_C(0x01CF46)}, - {RUNE_C(0x01D165), RUNE_C(0x01D169)}, - {RUNE_C(0x01D16D), RUNE_C(0x01D172)}, - {RUNE_C(0x01D17B), RUNE_C(0x01D182)}, - {RUNE_C(0x01D185), RUNE_C(0x01D18B)}, - {RUNE_C(0x01D1AA), RUNE_C(0x01D1AD)}, - {RUNE_C(0x01D242), RUNE_C(0x01D244)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D734)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01D7CE), RUNE_C(0x01D7FF)}, - {RUNE_C(0x01DA00), RUNE_C(0x01DA36)}, - {RUNE_C(0x01DA3B), RUNE_C(0x01DA6C)}, - {RUNE_C(0x01DA75), RUNE_C(0x01DA75)}, - {RUNE_C(0x01DA84), RUNE_C(0x01DA84)}, - {RUNE_C(0x01DA9B), RUNE_C(0x01DA9F)}, - {RUNE_C(0x01DAA1), RUNE_C(0x01DAAF)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E000), RUNE_C(0x01E006)}, - {RUNE_C(0x01E008), RUNE_C(0x01E018)}, - {RUNE_C(0x01E01B), RUNE_C(0x01E021)}, - {RUNE_C(0x01E023), RUNE_C(0x01E024)}, - {RUNE_C(0x01E026), RUNE_C(0x01E02A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E08F), RUNE_C(0x01E08F)}, - {RUNE_C(0x01E100), RUNE_C(0x01E12C)}, - {RUNE_C(0x01E130), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E140), RUNE_C(0x01E149)}, - {RUNE_C(0x01E14E), RUNE_C(0x01E14E)}, - {RUNE_C(0x01E290), RUNE_C(0x01E2AE)}, - {RUNE_C(0x01E2C0), RUNE_C(0x01E2F9)}, - {RUNE_C(0x01E4D0), RUNE_C(0x01E4F9)}, - {RUNE_C(0x01E7E0), RUNE_C(0x01E7E6)}, - {RUNE_C(0x01E7E8), RUNE_C(0x01E7EB)}, - {RUNE_C(0x01E7ED), RUNE_C(0x01E7EE)}, - {RUNE_C(0x01E7F0), RUNE_C(0x01E7FE)}, - {RUNE_C(0x01E800), RUNE_C(0x01E8C4)}, - {RUNE_C(0x01E8D0), RUNE_C(0x01E8D6)}, - {RUNE_C(0x01E900), RUNE_C(0x01E94B)}, - {RUNE_C(0x01E950), RUNE_C(0x01E959)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x01FBF0), RUNE_C(0x01FBF9)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, - {RUNE_C(0x0E0100), RUNE_C(0x0E01EF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, + 0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xA0, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xB8}, + {0xC0, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0xFB, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, + 0xB6, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00}, + {0x00, 0x00, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xEF, 0x9F, 0xFF, 0xFD, 0xFF, 0x9F}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x24}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0x07, 0xFF, 0xFF}, + {0xFF, 0x7E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFE, 0xFF}, + {0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0xF3, + 0x9F, 0x79, 0x80, 0xB0, 0xCF, 0xFF, 0x03, 0x50}, + {0xEE, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0xD3, + 0x87, 0x39, 0x02, 0x5E, 0xC0, 0xFF, 0x3F, 0x00}, + {0xEE, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, + 0xBF, 0x3B, 0x01, 0x00, 0xCF, 0xFF, 0x00, 0xFE}, + {0xEE, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xF3, + 0x9F, 0x39, 0xE0, 0xB0, 0xCF, 0xFF, 0x02, 0x00}, + {0xEC, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0xC3, + 0xC7, 0x3D, 0x81, 0x00, 0xC0, 0xFF, 0x00, 0x00}, + {0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0xF3, + 0xDF, 0x3D, 0x60, 0x27, 0xCF, 0xFF, 0x00, 0x00}, + {0xEF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0xF3, + 0xDF, 0x3D, 0x60, 0x60, 0xCF, 0xFF, 0x0E, 0x00}, + {0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xDF, 0x7D, 0xF0, 0x80, 0xCF, 0xFF, 0x00, 0xFC}, + {0xEE, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, + 0x7F, 0x84, 0x5F, 0xFF, 0xC0, 0xFF, 0x0C, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0xFF, 0x7F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0xFF, 0x3F, + 0x5F, 0x7F, 0xFF, 0xF3, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x03, 0xFF, 0x03, 0xA0, 0xC2, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF}, + {0xDF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, + 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xE7, 0x00, 0xFE, 0x03, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF}, + {0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x01}, + {0xFF, 0xFF, 0x3F, 0x80, 0xFF, 0xFF, 0x1F, 0x00, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xDF, 0x0D, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x8F, 0x30, 0xFF, 0x03, 0x00, 0x00}, + {0x00, 0xB8, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x0F, 0xFF, 0x0F, + 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0x03, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x9F}, + {0xFF, 0x03, 0xFF, 0x03, 0x80, 0x00, 0xFF, 0xBF, + 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x1F, 0xFF, 0x03, 0x00, 0xF8, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x80}, + {0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0x1F, 0xE2, 0xFF, 0x01, 0x00}, + {0x84, 0xFC, 0x2F, 0x3F, 0x50, 0xFD, 0xFF, 0xF3, + 0xE0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x80}, + {0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xE0, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x3E, 0x1F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xE6, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xBF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00}, + {0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x10, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x00, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xE8}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x80, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, 0x7F, 0xFC}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x07, 0x00, 0x00, 0x38, 0xFF, 0xFF, 0x7C, 0x00}, + {0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x37, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xE0, 0xFF, 0xFD, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x00, + 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xAA}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0x00, 0x00, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x87, + 0xFE, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, + 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7}, + {0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0x00}, + {0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x6F, 0xF0, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x87, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x80}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0xDE, 0xFF, 0x17, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x03}, + {0xEF, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0xFB, + 0x9F, 0x39, 0x81, 0xE0, 0xCF, 0x1F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xC3, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, + 0x01, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x11, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xE7, 0xFF, 0x0F, 0xFF, 0x03, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x80}, + {0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF9, + 0x0F, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFC, 0x1B, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x23, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, + 0x01, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFE, 0x7F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xB4, + 0xFF, 0x00, 0xFF, 0x03, 0xBF, 0xFD, 0xFF, 0xFF}, + {0xFF, 0x7F, 0xFB, 0x01, 0xFF, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, + 0x07, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0x0F, 0x00, 0xFF, 0x03, 0xF8, 0xFF, 0xFF, 0xE0}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x03, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0x63, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x07, 0xF8}, + {0xE7, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF8, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x20, 0x00}, + {0x10, 0x00, 0x00, 0xF8, 0xFE, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFF, 0xFF, 0xF9, 0xDB, 0x07, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0x3F, + 0xFF, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x0F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E}, + {0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_xidc(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } diff --git a/lib/unicode/prop/uprop_is_xids.c b/lib/unicode/prop/uprop_is_xids.c index 3b29835..5896b82 100644 --- a/lib/unicode/prop/uprop_is_xids.c +++ b/lib/unicode/prop/uprop_is_xids.c @@ -1,688 +1,930 @@ /* This file is autogenerated by gen/prop/bool-props; DO NOT EDIT. */ -#include "_bsearch.h" #include "bitset.h" -#include "rune.h" #include "unicode/prop.h" -/* clang-format off */ - -static constexpr bitset(bs, LATIN1_MAX) = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, - 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, +static constexpr uint8_t stage1[] = { + 0, 1, 2, 2, 2, 3, 4, 5, 2, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 2, 2, 31, 32, 33, 34, 35, 2, 2, 2, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 2, 50, 2, 2, 51, 52, + 53, 54, 55, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 58, 59, 60, 57, 57, 57, 57, + 61, 62, 63, 64, 57, 57, 57, 57, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 65, 2, 2, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 78, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 2, 2, 79, 80, 81, 82, 83, 2, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 57, 57, 93, 94, 95, 2, 96, 97, 98, 2, 2, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 57, 57, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 57, 122, 123, 57, 124, 125, 126, 127, 57, + 128, 129, 130, 131, 132, 133, 57, 57, 134, 135, 136, 137, 57, 138, 139, 140, + 2, 2, 2, 2, 2, 2, 2, 141, 142, 2, 143, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 144, + 2, 2, 2, 2, 2, 2, 2, 2, 145, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 2, 2, 2, 2, 146, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 147, 148, 149, 135, 57, 57, 57, 57, 150, 57, 151, 152, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 153, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 154, 56, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 155, + 2, 2, 156, 2, 2, 157, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 158, 159, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 160, 161, 162, 2, 2, 163, 164, 165, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 166, 57, + 167, 57, 168, 57, 57, 169, 57, 57, 57, 170, 57, 57, 57, 57, 57, 171, + 2, 172, 173, 57, 57, 57, 57, 57, 57, 57, 57, 57, 174, 175, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 176, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 177, 2, + 178, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 179, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 180, 2, 2, 2, 2, 181, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 182, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 183, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 184, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, }; -static const struct { - rune lo, hi; -} lookup[] = { - {RUNE_C(0x000100), RUNE_C(0x0002C1)}, - {RUNE_C(0x0002C6), RUNE_C(0x0002D1)}, - {RUNE_C(0x0002E0), RUNE_C(0x0002E4)}, - {RUNE_C(0x0002EC), RUNE_C(0x0002EC)}, - {RUNE_C(0x0002EE), RUNE_C(0x0002EE)}, - {RUNE_C(0x000370), RUNE_C(0x000374)}, - {RUNE_C(0x000376), RUNE_C(0x000377)}, - {RUNE_C(0x00037B), RUNE_C(0x00037D)}, - {RUNE_C(0x00037F), RUNE_C(0x00037F)}, - {RUNE_C(0x000386), RUNE_C(0x000386)}, - {RUNE_C(0x000388), RUNE_C(0x00038A)}, - {RUNE_C(0x00038C), RUNE_C(0x00038C)}, - {RUNE_C(0x00038E), RUNE_C(0x0003A1)}, - {RUNE_C(0x0003A3), RUNE_C(0x0003F5)}, - {RUNE_C(0x0003F7), RUNE_C(0x000481)}, - {RUNE_C(0x00048A), RUNE_C(0x00052F)}, - {RUNE_C(0x000531), RUNE_C(0x000556)}, - {RUNE_C(0x000559), RUNE_C(0x000559)}, - {RUNE_C(0x000560), RUNE_C(0x000588)}, - {RUNE_C(0x0005D0), RUNE_C(0x0005EA)}, - {RUNE_C(0x0005EF), RUNE_C(0x0005F2)}, - {RUNE_C(0x000620), RUNE_C(0x00064A)}, - {RUNE_C(0x00066E), RUNE_C(0x00066F)}, - {RUNE_C(0x000671), RUNE_C(0x0006D3)}, - {RUNE_C(0x0006D5), RUNE_C(0x0006D5)}, - {RUNE_C(0x0006E5), RUNE_C(0x0006E6)}, - {RUNE_C(0x0006EE), RUNE_C(0x0006EF)}, - {RUNE_C(0x0006FA), RUNE_C(0x0006FC)}, - {RUNE_C(0x0006FF), RUNE_C(0x0006FF)}, - {RUNE_C(0x000710), RUNE_C(0x000710)}, - {RUNE_C(0x000712), RUNE_C(0x00072F)}, - {RUNE_C(0x00074D), RUNE_C(0x0007A5)}, - {RUNE_C(0x0007B1), RUNE_C(0x0007B1)}, - {RUNE_C(0x0007CA), RUNE_C(0x0007EA)}, - {RUNE_C(0x0007F4), RUNE_C(0x0007F5)}, - {RUNE_C(0x0007FA), RUNE_C(0x0007FA)}, - {RUNE_C(0x000800), RUNE_C(0x000815)}, - {RUNE_C(0x00081A), RUNE_C(0x00081A)}, - {RUNE_C(0x000824), RUNE_C(0x000824)}, - {RUNE_C(0x000828), RUNE_C(0x000828)}, - {RUNE_C(0x000840), RUNE_C(0x000858)}, - {RUNE_C(0x000860), RUNE_C(0x00086A)}, - {RUNE_C(0x000870), RUNE_C(0x000887)}, - {RUNE_C(0x000889), RUNE_C(0x00088E)}, - {RUNE_C(0x0008A0), RUNE_C(0x0008C9)}, - {RUNE_C(0x000904), RUNE_C(0x000939)}, - {RUNE_C(0x00093D), RUNE_C(0x00093D)}, - {RUNE_C(0x000950), RUNE_C(0x000950)}, - {RUNE_C(0x000958), RUNE_C(0x000961)}, - {RUNE_C(0x000971), RUNE_C(0x000980)}, - {RUNE_C(0x000985), RUNE_C(0x00098C)}, - {RUNE_C(0x00098F), RUNE_C(0x000990)}, - {RUNE_C(0x000993), RUNE_C(0x0009A8)}, - {RUNE_C(0x0009AA), RUNE_C(0x0009B0)}, - {RUNE_C(0x0009B2), RUNE_C(0x0009B2)}, - {RUNE_C(0x0009B6), RUNE_C(0x0009B9)}, - {RUNE_C(0x0009BD), RUNE_C(0x0009BD)}, - {RUNE_C(0x0009CE), RUNE_C(0x0009CE)}, - {RUNE_C(0x0009DC), RUNE_C(0x0009DD)}, - {RUNE_C(0x0009DF), RUNE_C(0x0009E1)}, - {RUNE_C(0x0009F0), RUNE_C(0x0009F1)}, - {RUNE_C(0x0009FC), RUNE_C(0x0009FC)}, - {RUNE_C(0x000A05), RUNE_C(0x000A0A)}, - {RUNE_C(0x000A0F), RUNE_C(0x000A10)}, - {RUNE_C(0x000A13), RUNE_C(0x000A28)}, - {RUNE_C(0x000A2A), RUNE_C(0x000A30)}, - {RUNE_C(0x000A32), RUNE_C(0x000A33)}, - {RUNE_C(0x000A35), RUNE_C(0x000A36)}, - {RUNE_C(0x000A38), RUNE_C(0x000A39)}, - {RUNE_C(0x000A59), RUNE_C(0x000A5C)}, - {RUNE_C(0x000A5E), RUNE_C(0x000A5E)}, - {RUNE_C(0x000A72), RUNE_C(0x000A74)}, - {RUNE_C(0x000A85), RUNE_C(0x000A8D)}, - {RUNE_C(0x000A8F), RUNE_C(0x000A91)}, - {RUNE_C(0x000A93), RUNE_C(0x000AA8)}, - {RUNE_C(0x000AAA), RUNE_C(0x000AB0)}, - {RUNE_C(0x000AB2), RUNE_C(0x000AB3)}, - {RUNE_C(0x000AB5), RUNE_C(0x000AB9)}, - {RUNE_C(0x000ABD), RUNE_C(0x000ABD)}, - {RUNE_C(0x000AD0), RUNE_C(0x000AD0)}, - {RUNE_C(0x000AE0), RUNE_C(0x000AE1)}, - {RUNE_C(0x000AF9), RUNE_C(0x000AF9)}, - {RUNE_C(0x000B05), RUNE_C(0x000B0C)}, - {RUNE_C(0x000B0F), RUNE_C(0x000B10)}, - {RUNE_C(0x000B13), RUNE_C(0x000B28)}, - {RUNE_C(0x000B2A), RUNE_C(0x000B30)}, - {RUNE_C(0x000B32), RUNE_C(0x000B33)}, - {RUNE_C(0x000B35), RUNE_C(0x000B39)}, - {RUNE_C(0x000B3D), RUNE_C(0x000B3D)}, - {RUNE_C(0x000B5C), RUNE_C(0x000B5D)}, - {RUNE_C(0x000B5F), RUNE_C(0x000B61)}, - {RUNE_C(0x000B71), RUNE_C(0x000B71)}, - {RUNE_C(0x000B83), RUNE_C(0x000B83)}, - {RUNE_C(0x000B85), RUNE_C(0x000B8A)}, - {RUNE_C(0x000B8E), RUNE_C(0x000B90)}, - {RUNE_C(0x000B92), RUNE_C(0x000B95)}, - {RUNE_C(0x000B99), RUNE_C(0x000B9A)}, - {RUNE_C(0x000B9C), RUNE_C(0x000B9C)}, - {RUNE_C(0x000B9E), RUNE_C(0x000B9F)}, - {RUNE_C(0x000BA3), RUNE_C(0x000BA4)}, - {RUNE_C(0x000BA8), RUNE_C(0x000BAA)}, - {RUNE_C(0x000BAE), RUNE_C(0x000BB9)}, - {RUNE_C(0x000BD0), RUNE_C(0x000BD0)}, - {RUNE_C(0x000C05), RUNE_C(0x000C0C)}, - {RUNE_C(0x000C0E), RUNE_C(0x000C10)}, - {RUNE_C(0x000C12), RUNE_C(0x000C28)}, - {RUNE_C(0x000C2A), RUNE_C(0x000C39)}, - {RUNE_C(0x000C3D), RUNE_C(0x000C3D)}, - {RUNE_C(0x000C58), RUNE_C(0x000C5A)}, - {RUNE_C(0x000C5D), RUNE_C(0x000C5D)}, - {RUNE_C(0x000C60), RUNE_C(0x000C61)}, - {RUNE_C(0x000C80), RUNE_C(0x000C80)}, - {RUNE_C(0x000C85), RUNE_C(0x000C8C)}, - {RUNE_C(0x000C8E), RUNE_C(0x000C90)}, - {RUNE_C(0x000C92), RUNE_C(0x000CA8)}, - {RUNE_C(0x000CAA), RUNE_C(0x000CB3)}, - {RUNE_C(0x000CB5), RUNE_C(0x000CB9)}, - {RUNE_C(0x000CBD), RUNE_C(0x000CBD)}, - {RUNE_C(0x000CDD), RUNE_C(0x000CDE)}, - {RUNE_C(0x000CE0), RUNE_C(0x000CE1)}, - {RUNE_C(0x000CF1), RUNE_C(0x000CF2)}, - {RUNE_C(0x000D04), RUNE_C(0x000D0C)}, - {RUNE_C(0x000D0E), RUNE_C(0x000D10)}, - {RUNE_C(0x000D12), RUNE_C(0x000D3A)}, - {RUNE_C(0x000D3D), RUNE_C(0x000D3D)}, - {RUNE_C(0x000D4E), RUNE_C(0x000D4E)}, - {RUNE_C(0x000D54), RUNE_C(0x000D56)}, - {RUNE_C(0x000D5F), RUNE_C(0x000D61)}, - {RUNE_C(0x000D7A), RUNE_C(0x000D7F)}, - {RUNE_C(0x000D85), RUNE_C(0x000D96)}, - {RUNE_C(0x000D9A), RUNE_C(0x000DB1)}, - {RUNE_C(0x000DB3), RUNE_C(0x000DBB)}, - {RUNE_C(0x000DBD), RUNE_C(0x000DBD)}, - {RUNE_C(0x000DC0), RUNE_C(0x000DC6)}, - {RUNE_C(0x000E01), RUNE_C(0x000E30)}, - {RUNE_C(0x000E32), RUNE_C(0x000E32)}, - {RUNE_C(0x000E40), RUNE_C(0x000E46)}, - {RUNE_C(0x000E81), RUNE_C(0x000E82)}, - {RUNE_C(0x000E84), RUNE_C(0x000E84)}, - {RUNE_C(0x000E86), RUNE_C(0x000E8A)}, - {RUNE_C(0x000E8C), RUNE_C(0x000EA3)}, - {RUNE_C(0x000EA5), RUNE_C(0x000EA5)}, - {RUNE_C(0x000EA7), RUNE_C(0x000EB0)}, - {RUNE_C(0x000EB2), RUNE_C(0x000EB2)}, - {RUNE_C(0x000EBD), RUNE_C(0x000EBD)}, - {RUNE_C(0x000EC0), RUNE_C(0x000EC4)}, - {RUNE_C(0x000EC6), RUNE_C(0x000EC6)}, - {RUNE_C(0x000EDC), RUNE_C(0x000EDF)}, - {RUNE_C(0x000F00), RUNE_C(0x000F00)}, - {RUNE_C(0x000F40), RUNE_C(0x000F47)}, - {RUNE_C(0x000F49), RUNE_C(0x000F6C)}, - {RUNE_C(0x000F88), RUNE_C(0x000F8C)}, - {RUNE_C(0x001000), RUNE_C(0x00102A)}, - {RUNE_C(0x00103F), RUNE_C(0x00103F)}, - {RUNE_C(0x001050), RUNE_C(0x001055)}, - {RUNE_C(0x00105A), RUNE_C(0x00105D)}, - {RUNE_C(0x001061), RUNE_C(0x001061)}, - {RUNE_C(0x001065), RUNE_C(0x001066)}, - {RUNE_C(0x00106E), RUNE_C(0x001070)}, - {RUNE_C(0x001075), RUNE_C(0x001081)}, - {RUNE_C(0x00108E), RUNE_C(0x00108E)}, - {RUNE_C(0x0010A0), RUNE_C(0x0010C5)}, - {RUNE_C(0x0010C7), RUNE_C(0x0010C7)}, - {RUNE_C(0x0010CD), RUNE_C(0x0010CD)}, - {RUNE_C(0x0010D0), RUNE_C(0x0010FA)}, - {RUNE_C(0x0010FC), RUNE_C(0x001248)}, - {RUNE_C(0x00124A), RUNE_C(0x00124D)}, - {RUNE_C(0x001250), RUNE_C(0x001256)}, - {RUNE_C(0x001258), RUNE_C(0x001258)}, - {RUNE_C(0x00125A), RUNE_C(0x00125D)}, - {RUNE_C(0x001260), RUNE_C(0x001288)}, - {RUNE_C(0x00128A), RUNE_C(0x00128D)}, - {RUNE_C(0x001290), RUNE_C(0x0012B0)}, - {RUNE_C(0x0012B2), RUNE_C(0x0012B5)}, - {RUNE_C(0x0012B8), RUNE_C(0x0012BE)}, - {RUNE_C(0x0012C0), RUNE_C(0x0012C0)}, - {RUNE_C(0x0012C2), RUNE_C(0x0012C5)}, - {RUNE_C(0x0012C8), RUNE_C(0x0012D6)}, - {RUNE_C(0x0012D8), RUNE_C(0x001310)}, - {RUNE_C(0x001312), RUNE_C(0x001315)}, - {RUNE_C(0x001318), RUNE_C(0x00135A)}, - {RUNE_C(0x001380), RUNE_C(0x00138F)}, - {RUNE_C(0x0013A0), RUNE_C(0x0013F5)}, - {RUNE_C(0x0013F8), RUNE_C(0x0013FD)}, - {RUNE_C(0x001401), RUNE_C(0x00166C)}, - {RUNE_C(0x00166F), RUNE_C(0x00167F)}, - {RUNE_C(0x001681), RUNE_C(0x00169A)}, - {RUNE_C(0x0016A0), RUNE_C(0x0016EA)}, - {RUNE_C(0x0016EE), RUNE_C(0x0016F8)}, - {RUNE_C(0x001700), RUNE_C(0x001711)}, - {RUNE_C(0x00171F), RUNE_C(0x001731)}, - {RUNE_C(0x001740), RUNE_C(0x001751)}, - {RUNE_C(0x001760), RUNE_C(0x00176C)}, - {RUNE_C(0x00176E), RUNE_C(0x001770)}, - {RUNE_C(0x001780), RUNE_C(0x0017B3)}, - {RUNE_C(0x0017D7), RUNE_C(0x0017D7)}, - {RUNE_C(0x0017DC), RUNE_C(0x0017DC)}, - {RUNE_C(0x001820), RUNE_C(0x001878)}, - {RUNE_C(0x001880), RUNE_C(0x0018A8)}, - {RUNE_C(0x0018AA), RUNE_C(0x0018AA)}, - {RUNE_C(0x0018B0), RUNE_C(0x0018F5)}, - {RUNE_C(0x001900), RUNE_C(0x00191E)}, - {RUNE_C(0x001950), RUNE_C(0x00196D)}, - {RUNE_C(0x001970), RUNE_C(0x001974)}, - {RUNE_C(0x001980), RUNE_C(0x0019AB)}, - {RUNE_C(0x0019B0), RUNE_C(0x0019C9)}, - {RUNE_C(0x001A00), RUNE_C(0x001A16)}, - {RUNE_C(0x001A20), RUNE_C(0x001A54)}, - {RUNE_C(0x001AA7), RUNE_C(0x001AA7)}, - {RUNE_C(0x001B05), RUNE_C(0x001B33)}, - {RUNE_C(0x001B45), RUNE_C(0x001B4C)}, - {RUNE_C(0x001B83), RUNE_C(0x001BA0)}, - {RUNE_C(0x001BAE), RUNE_C(0x001BAF)}, - {RUNE_C(0x001BBA), RUNE_C(0x001BE5)}, - {RUNE_C(0x001C00), RUNE_C(0x001C23)}, - {RUNE_C(0x001C4D), RUNE_C(0x001C4F)}, - {RUNE_C(0x001C5A), RUNE_C(0x001C7D)}, - {RUNE_C(0x001C80), RUNE_C(0x001C88)}, - {RUNE_C(0x001C90), RUNE_C(0x001CBA)}, - {RUNE_C(0x001CBD), RUNE_C(0x001CBF)}, - {RUNE_C(0x001CE9), RUNE_C(0x001CEC)}, - {RUNE_C(0x001CEE), RUNE_C(0x001CF3)}, - {RUNE_C(0x001CF5), RUNE_C(0x001CF6)}, - {RUNE_C(0x001CFA), RUNE_C(0x001CFA)}, - {RUNE_C(0x001D00), RUNE_C(0x001DBF)}, - {RUNE_C(0x001E00), RUNE_C(0x001F15)}, - {RUNE_C(0x001F18), RUNE_C(0x001F1D)}, - {RUNE_C(0x001F20), RUNE_C(0x001F45)}, - {RUNE_C(0x001F48), RUNE_C(0x001F4D)}, - {RUNE_C(0x001F50), RUNE_C(0x001F57)}, - {RUNE_C(0x001F59), RUNE_C(0x001F59)}, - {RUNE_C(0x001F5B), RUNE_C(0x001F5B)}, - {RUNE_C(0x001F5D), RUNE_C(0x001F5D)}, - {RUNE_C(0x001F5F), RUNE_C(0x001F7D)}, - {RUNE_C(0x001F80), RUNE_C(0x001FB4)}, - {RUNE_C(0x001FB6), RUNE_C(0x001FBC)}, - {RUNE_C(0x001FBE), RUNE_C(0x001FBE)}, - {RUNE_C(0x001FC2), RUNE_C(0x001FC4)}, - {RUNE_C(0x001FC6), RUNE_C(0x001FCC)}, - {RUNE_C(0x001FD0), RUNE_C(0x001FD3)}, - {RUNE_C(0x001FD6), RUNE_C(0x001FDB)}, - {RUNE_C(0x001FE0), RUNE_C(0x001FEC)}, - {RUNE_C(0x001FF2), RUNE_C(0x001FF4)}, - {RUNE_C(0x001FF6), RUNE_C(0x001FFC)}, - {RUNE_C(0x002071), RUNE_C(0x002071)}, - {RUNE_C(0x00207F), RUNE_C(0x00207F)}, - {RUNE_C(0x002090), RUNE_C(0x00209C)}, - {RUNE_C(0x002102), RUNE_C(0x002102)}, - {RUNE_C(0x002107), RUNE_C(0x002107)}, - {RUNE_C(0x00210A), RUNE_C(0x002113)}, - {RUNE_C(0x002115), RUNE_C(0x002115)}, - {RUNE_C(0x002118), RUNE_C(0x00211D)}, - {RUNE_C(0x002124), RUNE_C(0x002124)}, - {RUNE_C(0x002126), RUNE_C(0x002126)}, - {RUNE_C(0x002128), RUNE_C(0x002128)}, - {RUNE_C(0x00212A), RUNE_C(0x002139)}, - {RUNE_C(0x00213C), RUNE_C(0x00213F)}, - {RUNE_C(0x002145), RUNE_C(0x002149)}, - {RUNE_C(0x00214E), RUNE_C(0x00214E)}, - {RUNE_C(0x002160), RUNE_C(0x002188)}, - {RUNE_C(0x002C00), RUNE_C(0x002CE4)}, - {RUNE_C(0x002CEB), RUNE_C(0x002CEE)}, - {RUNE_C(0x002CF2), RUNE_C(0x002CF3)}, - {RUNE_C(0x002D00), RUNE_C(0x002D25)}, - {RUNE_C(0x002D27), RUNE_C(0x002D27)}, - {RUNE_C(0x002D2D), RUNE_C(0x002D2D)}, - {RUNE_C(0x002D30), RUNE_C(0x002D67)}, - {RUNE_C(0x002D6F), RUNE_C(0x002D6F)}, - {RUNE_C(0x002D80), RUNE_C(0x002D96)}, - {RUNE_C(0x002DA0), RUNE_C(0x002DA6)}, - {RUNE_C(0x002DA8), RUNE_C(0x002DAE)}, - {RUNE_C(0x002DB0), RUNE_C(0x002DB6)}, - {RUNE_C(0x002DB8), RUNE_C(0x002DBE)}, - {RUNE_C(0x002DC0), RUNE_C(0x002DC6)}, - {RUNE_C(0x002DC8), RUNE_C(0x002DCE)}, - {RUNE_C(0x002DD0), RUNE_C(0x002DD6)}, - {RUNE_C(0x002DD8), RUNE_C(0x002DDE)}, - {RUNE_C(0x003005), RUNE_C(0x003007)}, - {RUNE_C(0x003021), RUNE_C(0x003029)}, - {RUNE_C(0x003031), RUNE_C(0x003035)}, - {RUNE_C(0x003038), RUNE_C(0x00303C)}, - {RUNE_C(0x003041), RUNE_C(0x003096)}, - {RUNE_C(0x00309D), RUNE_C(0x00309F)}, - {RUNE_C(0x0030A1), RUNE_C(0x0030FA)}, - {RUNE_C(0x0030FC), RUNE_C(0x0030FF)}, - {RUNE_C(0x003105), RUNE_C(0x00312F)}, - {RUNE_C(0x003131), RUNE_C(0x00318E)}, - {RUNE_C(0x0031A0), RUNE_C(0x0031BF)}, - {RUNE_C(0x0031F0), RUNE_C(0x0031FF)}, - {RUNE_C(0x003400), RUNE_C(0x004DBF)}, - {RUNE_C(0x004E00), RUNE_C(0x00A48C)}, - {RUNE_C(0x00A4D0), RUNE_C(0x00A4FD)}, - {RUNE_C(0x00A500), RUNE_C(0x00A60C)}, - {RUNE_C(0x00A610), RUNE_C(0x00A61F)}, - {RUNE_C(0x00A62A), RUNE_C(0x00A62B)}, - {RUNE_C(0x00A640), RUNE_C(0x00A66E)}, - {RUNE_C(0x00A67F), RUNE_C(0x00A69D)}, - {RUNE_C(0x00A6A0), RUNE_C(0x00A6EF)}, - {RUNE_C(0x00A717), RUNE_C(0x00A71F)}, - {RUNE_C(0x00A722), RUNE_C(0x00A788)}, - {RUNE_C(0x00A78B), RUNE_C(0x00A7CA)}, - {RUNE_C(0x00A7D0), RUNE_C(0x00A7D1)}, - {RUNE_C(0x00A7D3), RUNE_C(0x00A7D3)}, - {RUNE_C(0x00A7D5), RUNE_C(0x00A7D9)}, - {RUNE_C(0x00A7F2), RUNE_C(0x00A801)}, - {RUNE_C(0x00A803), RUNE_C(0x00A805)}, - {RUNE_C(0x00A807), RUNE_C(0x00A80A)}, - {RUNE_C(0x00A80C), RUNE_C(0x00A822)}, - {RUNE_C(0x00A840), RUNE_C(0x00A873)}, - {RUNE_C(0x00A882), RUNE_C(0x00A8B3)}, - {RUNE_C(0x00A8F2), RUNE_C(0x00A8F7)}, - {RUNE_C(0x00A8FB), RUNE_C(0x00A8FB)}, - {RUNE_C(0x00A8FD), RUNE_C(0x00A8FE)}, - {RUNE_C(0x00A90A), RUNE_C(0x00A925)}, - {RUNE_C(0x00A930), RUNE_C(0x00A946)}, - {RUNE_C(0x00A960), RUNE_C(0x00A97C)}, - {RUNE_C(0x00A984), RUNE_C(0x00A9B2)}, - {RUNE_C(0x00A9CF), RUNE_C(0x00A9CF)}, - {RUNE_C(0x00A9E0), RUNE_C(0x00A9E4)}, - {RUNE_C(0x00A9E6), RUNE_C(0x00A9EF)}, - {RUNE_C(0x00A9FA), RUNE_C(0x00A9FE)}, - {RUNE_C(0x00AA00), RUNE_C(0x00AA28)}, - {RUNE_C(0x00AA40), RUNE_C(0x00AA42)}, - {RUNE_C(0x00AA44), RUNE_C(0x00AA4B)}, - {RUNE_C(0x00AA60), RUNE_C(0x00AA76)}, - {RUNE_C(0x00AA7A), RUNE_C(0x00AA7A)}, - {RUNE_C(0x00AA7E), RUNE_C(0x00AAAF)}, - {RUNE_C(0x00AAB1), RUNE_C(0x00AAB1)}, - {RUNE_C(0x00AAB5), RUNE_C(0x00AAB6)}, - {RUNE_C(0x00AAB9), RUNE_C(0x00AABD)}, - {RUNE_C(0x00AAC0), RUNE_C(0x00AAC0)}, - {RUNE_C(0x00AAC2), RUNE_C(0x00AAC2)}, - {RUNE_C(0x00AADB), RUNE_C(0x00AADD)}, - {RUNE_C(0x00AAE0), RUNE_C(0x00AAEA)}, - {RUNE_C(0x00AAF2), RUNE_C(0x00AAF4)}, - {RUNE_C(0x00AB01), RUNE_C(0x00AB06)}, - {RUNE_C(0x00AB09), RUNE_C(0x00AB0E)}, - {RUNE_C(0x00AB11), RUNE_C(0x00AB16)}, - {RUNE_C(0x00AB20), RUNE_C(0x00AB26)}, - {RUNE_C(0x00AB28), RUNE_C(0x00AB2E)}, - {RUNE_C(0x00AB30), RUNE_C(0x00AB5A)}, - {RUNE_C(0x00AB5C), RUNE_C(0x00AB69)}, - {RUNE_C(0x00AB70), RUNE_C(0x00ABE2)}, - {RUNE_C(0x00AC00), RUNE_C(0x00D7A3)}, - {RUNE_C(0x00D7B0), RUNE_C(0x00D7C6)}, - {RUNE_C(0x00D7CB), RUNE_C(0x00D7FB)}, - {RUNE_C(0x00F900), RUNE_C(0x00FA6D)}, - {RUNE_C(0x00FA70), RUNE_C(0x00FAD9)}, - {RUNE_C(0x00FB00), RUNE_C(0x00FB06)}, - {RUNE_C(0x00FB13), RUNE_C(0x00FB17)}, - {RUNE_C(0x00FB1D), RUNE_C(0x00FB1D)}, - {RUNE_C(0x00FB1F), RUNE_C(0x00FB28)}, - {RUNE_C(0x00FB2A), RUNE_C(0x00FB36)}, - {RUNE_C(0x00FB38), RUNE_C(0x00FB3C)}, - {RUNE_C(0x00FB3E), RUNE_C(0x00FB3E)}, - {RUNE_C(0x00FB40), RUNE_C(0x00FB41)}, - {RUNE_C(0x00FB43), RUNE_C(0x00FB44)}, - {RUNE_C(0x00FB46), RUNE_C(0x00FBB1)}, - {RUNE_C(0x00FBD3), RUNE_C(0x00FC5D)}, - {RUNE_C(0x00FC64), RUNE_C(0x00FD3D)}, - {RUNE_C(0x00FD50), RUNE_C(0x00FD8F)}, - {RUNE_C(0x00FD92), RUNE_C(0x00FDC7)}, - {RUNE_C(0x00FDF0), RUNE_C(0x00FDF9)}, - {RUNE_C(0x00FE71), RUNE_C(0x00FE71)}, - {RUNE_C(0x00FE73), RUNE_C(0x00FE73)}, - {RUNE_C(0x00FE77), RUNE_C(0x00FE77)}, - {RUNE_C(0x00FE79), RUNE_C(0x00FE79)}, - {RUNE_C(0x00FE7B), RUNE_C(0x00FE7B)}, - {RUNE_C(0x00FE7D), RUNE_C(0x00FE7D)}, - {RUNE_C(0x00FE7F), RUNE_C(0x00FEFC)}, - {RUNE_C(0x00FF21), RUNE_C(0x00FF3A)}, - {RUNE_C(0x00FF41), RUNE_C(0x00FF5A)}, - {RUNE_C(0x00FF66), RUNE_C(0x00FF9D)}, - {RUNE_C(0x00FFA0), RUNE_C(0x00FFBE)}, - {RUNE_C(0x00FFC2), RUNE_C(0x00FFC7)}, - {RUNE_C(0x00FFCA), RUNE_C(0x00FFCF)}, - {RUNE_C(0x00FFD2), RUNE_C(0x00FFD7)}, - {RUNE_C(0x00FFDA), RUNE_C(0x00FFDC)}, - {RUNE_C(0x010000), RUNE_C(0x01000B)}, - {RUNE_C(0x01000D), RUNE_C(0x010026)}, - {RUNE_C(0x010028), RUNE_C(0x01003A)}, - {RUNE_C(0x01003C), RUNE_C(0x01003D)}, - {RUNE_C(0x01003F), RUNE_C(0x01004D)}, - {RUNE_C(0x010050), RUNE_C(0x01005D)}, - {RUNE_C(0x010080), RUNE_C(0x0100FA)}, - {RUNE_C(0x010140), RUNE_C(0x010174)}, - {RUNE_C(0x010280), RUNE_C(0x01029C)}, - {RUNE_C(0x0102A0), RUNE_C(0x0102D0)}, - {RUNE_C(0x010300), RUNE_C(0x01031F)}, - {RUNE_C(0x01032D), RUNE_C(0x01034A)}, - {RUNE_C(0x010350), RUNE_C(0x010375)}, - {RUNE_C(0x010380), RUNE_C(0x01039D)}, - {RUNE_C(0x0103A0), RUNE_C(0x0103C3)}, - {RUNE_C(0x0103C8), RUNE_C(0x0103CF)}, - {RUNE_C(0x0103D1), RUNE_C(0x0103D5)}, - {RUNE_C(0x010400), RUNE_C(0x01049D)}, - {RUNE_C(0x0104B0), RUNE_C(0x0104D3)}, - {RUNE_C(0x0104D8), RUNE_C(0x0104FB)}, - {RUNE_C(0x010500), RUNE_C(0x010527)}, - {RUNE_C(0x010530), RUNE_C(0x010563)}, - {RUNE_C(0x010570), RUNE_C(0x01057A)}, - {RUNE_C(0x01057C), RUNE_C(0x01058A)}, - {RUNE_C(0x01058C), RUNE_C(0x010592)}, - {RUNE_C(0x010594), RUNE_C(0x010595)}, - {RUNE_C(0x010597), RUNE_C(0x0105A1)}, - {RUNE_C(0x0105A3), RUNE_C(0x0105B1)}, - {RUNE_C(0x0105B3), RUNE_C(0x0105B9)}, - {RUNE_C(0x0105BB), RUNE_C(0x0105BC)}, - {RUNE_C(0x010600), RUNE_C(0x010736)}, - {RUNE_C(0x010740), RUNE_C(0x010755)}, - {RUNE_C(0x010760), RUNE_C(0x010767)}, - {RUNE_C(0x010780), RUNE_C(0x010785)}, - {RUNE_C(0x010787), RUNE_C(0x0107B0)}, - {RUNE_C(0x0107B2), RUNE_C(0x0107BA)}, - {RUNE_C(0x010800), RUNE_C(0x010805)}, - {RUNE_C(0x010808), RUNE_C(0x010808)}, - {RUNE_C(0x01080A), RUNE_C(0x010835)}, - {RUNE_C(0x010837), RUNE_C(0x010838)}, - {RUNE_C(0x01083C), RUNE_C(0x01083C)}, - {RUNE_C(0x01083F), RUNE_C(0x010855)}, - {RUNE_C(0x010860), RUNE_C(0x010876)}, - {RUNE_C(0x010880), RUNE_C(0x01089E)}, - {RUNE_C(0x0108E0), RUNE_C(0x0108F2)}, - {RUNE_C(0x0108F4), RUNE_C(0x0108F5)}, - {RUNE_C(0x010900), RUNE_C(0x010915)}, - {RUNE_C(0x010920), RUNE_C(0x010939)}, - {RUNE_C(0x010980), RUNE_C(0x0109B7)}, - {RUNE_C(0x0109BE), RUNE_C(0x0109BF)}, - {RUNE_C(0x010A00), RUNE_C(0x010A00)}, - {RUNE_C(0x010A10), RUNE_C(0x010A13)}, - {RUNE_C(0x010A15), RUNE_C(0x010A17)}, - {RUNE_C(0x010A19), RUNE_C(0x010A35)}, - {RUNE_C(0x010A60), RUNE_C(0x010A7C)}, - {RUNE_C(0x010A80), RUNE_C(0x010A9C)}, - {RUNE_C(0x010AC0), RUNE_C(0x010AC7)}, - {RUNE_C(0x010AC9), RUNE_C(0x010AE4)}, - {RUNE_C(0x010B00), RUNE_C(0x010B35)}, - {RUNE_C(0x010B40), RUNE_C(0x010B55)}, - {RUNE_C(0x010B60), RUNE_C(0x010B72)}, - {RUNE_C(0x010B80), RUNE_C(0x010B91)}, - {RUNE_C(0x010C00), RUNE_C(0x010C48)}, - {RUNE_C(0x010C80), RUNE_C(0x010CB2)}, - {RUNE_C(0x010CC0), RUNE_C(0x010CF2)}, - {RUNE_C(0x010D00), RUNE_C(0x010D23)}, - {RUNE_C(0x010E80), RUNE_C(0x010EA9)}, - {RUNE_C(0x010EB0), RUNE_C(0x010EB1)}, - {RUNE_C(0x010F00), RUNE_C(0x010F1C)}, - {RUNE_C(0x010F27), RUNE_C(0x010F27)}, - {RUNE_C(0x010F30), RUNE_C(0x010F45)}, - {RUNE_C(0x010F70), RUNE_C(0x010F81)}, - {RUNE_C(0x010FB0), RUNE_C(0x010FC4)}, - {RUNE_C(0x010FE0), RUNE_C(0x010FF6)}, - {RUNE_C(0x011003), RUNE_C(0x011037)}, - {RUNE_C(0x011071), RUNE_C(0x011072)}, - {RUNE_C(0x011075), RUNE_C(0x011075)}, - {RUNE_C(0x011083), RUNE_C(0x0110AF)}, - {RUNE_C(0x0110D0), RUNE_C(0x0110E8)}, - {RUNE_C(0x011103), RUNE_C(0x011126)}, - {RUNE_C(0x011144), RUNE_C(0x011144)}, - {RUNE_C(0x011147), RUNE_C(0x011147)}, - {RUNE_C(0x011150), RUNE_C(0x011172)}, - {RUNE_C(0x011176), RUNE_C(0x011176)}, - {RUNE_C(0x011183), RUNE_C(0x0111B2)}, - {RUNE_C(0x0111C1), RUNE_C(0x0111C4)}, - {RUNE_C(0x0111DA), RUNE_C(0x0111DA)}, - {RUNE_C(0x0111DC), RUNE_C(0x0111DC)}, - {RUNE_C(0x011200), RUNE_C(0x011211)}, - {RUNE_C(0x011213), RUNE_C(0x01122B)}, - {RUNE_C(0x01123F), RUNE_C(0x011240)}, - {RUNE_C(0x011280), RUNE_C(0x011286)}, - {RUNE_C(0x011288), RUNE_C(0x011288)}, - {RUNE_C(0x01128A), RUNE_C(0x01128D)}, - {RUNE_C(0x01128F), RUNE_C(0x01129D)}, - {RUNE_C(0x01129F), RUNE_C(0x0112A8)}, - {RUNE_C(0x0112B0), RUNE_C(0x0112DE)}, - {RUNE_C(0x011305), RUNE_C(0x01130C)}, - {RUNE_C(0x01130F), RUNE_C(0x011310)}, - {RUNE_C(0x011313), RUNE_C(0x011328)}, - {RUNE_C(0x01132A), RUNE_C(0x011330)}, - {RUNE_C(0x011332), RUNE_C(0x011333)}, - {RUNE_C(0x011335), RUNE_C(0x011339)}, - {RUNE_C(0x01133D), RUNE_C(0x01133D)}, - {RUNE_C(0x011350), RUNE_C(0x011350)}, - {RUNE_C(0x01135D), RUNE_C(0x011361)}, - {RUNE_C(0x011400), RUNE_C(0x011434)}, - {RUNE_C(0x011447), RUNE_C(0x01144A)}, - {RUNE_C(0x01145F), RUNE_C(0x011461)}, - {RUNE_C(0x011480), RUNE_C(0x0114AF)}, - {RUNE_C(0x0114C4), RUNE_C(0x0114C5)}, - {RUNE_C(0x0114C7), RUNE_C(0x0114C7)}, - {RUNE_C(0x011580), RUNE_C(0x0115AE)}, - {RUNE_C(0x0115D8), RUNE_C(0x0115DB)}, - {RUNE_C(0x011600), RUNE_C(0x01162F)}, - {RUNE_C(0x011644), RUNE_C(0x011644)}, - {RUNE_C(0x011680), RUNE_C(0x0116AA)}, - {RUNE_C(0x0116B8), RUNE_C(0x0116B8)}, - {RUNE_C(0x011700), RUNE_C(0x01171A)}, - {RUNE_C(0x011740), RUNE_C(0x011746)}, - {RUNE_C(0x011800), RUNE_C(0x01182B)}, - {RUNE_C(0x0118A0), RUNE_C(0x0118DF)}, - {RUNE_C(0x0118FF), RUNE_C(0x011906)}, - {RUNE_C(0x011909), RUNE_C(0x011909)}, - {RUNE_C(0x01190C), RUNE_C(0x011913)}, - {RUNE_C(0x011915), RUNE_C(0x011916)}, - {RUNE_C(0x011918), RUNE_C(0x01192F)}, - {RUNE_C(0x01193F), RUNE_C(0x01193F)}, - {RUNE_C(0x011941), RUNE_C(0x011941)}, - {RUNE_C(0x0119A0), RUNE_C(0x0119A7)}, - {RUNE_C(0x0119AA), RUNE_C(0x0119D0)}, - {RUNE_C(0x0119E1), RUNE_C(0x0119E1)}, - {RUNE_C(0x0119E3), RUNE_C(0x0119E3)}, - {RUNE_C(0x011A00), RUNE_C(0x011A00)}, - {RUNE_C(0x011A0B), RUNE_C(0x011A32)}, - {RUNE_C(0x011A3A), RUNE_C(0x011A3A)}, - {RUNE_C(0x011A50), RUNE_C(0x011A50)}, - {RUNE_C(0x011A5C), RUNE_C(0x011A89)}, - {RUNE_C(0x011A9D), RUNE_C(0x011A9D)}, - {RUNE_C(0x011AB0), RUNE_C(0x011AF8)}, - {RUNE_C(0x011C00), RUNE_C(0x011C08)}, - {RUNE_C(0x011C0A), RUNE_C(0x011C2E)}, - {RUNE_C(0x011C40), RUNE_C(0x011C40)}, - {RUNE_C(0x011C72), RUNE_C(0x011C8F)}, - {RUNE_C(0x011D00), RUNE_C(0x011D06)}, - {RUNE_C(0x011D08), RUNE_C(0x011D09)}, - {RUNE_C(0x011D0B), RUNE_C(0x011D30)}, - {RUNE_C(0x011D46), RUNE_C(0x011D46)}, - {RUNE_C(0x011D60), RUNE_C(0x011D65)}, - {RUNE_C(0x011D67), RUNE_C(0x011D68)}, - {RUNE_C(0x011D6A), RUNE_C(0x011D89)}, - {RUNE_C(0x011D98), RUNE_C(0x011D98)}, - {RUNE_C(0x011EE0), RUNE_C(0x011EF2)}, - {RUNE_C(0x011F02), RUNE_C(0x011F02)}, - {RUNE_C(0x011F04), RUNE_C(0x011F10)}, - {RUNE_C(0x011F12), RUNE_C(0x011F33)}, - {RUNE_C(0x011FB0), RUNE_C(0x011FB0)}, - {RUNE_C(0x012000), RUNE_C(0x012399)}, - {RUNE_C(0x012400), RUNE_C(0x01246E)}, - {RUNE_C(0x012480), RUNE_C(0x012543)}, - {RUNE_C(0x012F90), RUNE_C(0x012FF0)}, - {RUNE_C(0x013000), RUNE_C(0x01342F)}, - {RUNE_C(0x013441), RUNE_C(0x013446)}, - {RUNE_C(0x014400), RUNE_C(0x014646)}, - {RUNE_C(0x016800), RUNE_C(0x016A38)}, - {RUNE_C(0x016A40), RUNE_C(0x016A5E)}, - {RUNE_C(0x016A70), RUNE_C(0x016ABE)}, - {RUNE_C(0x016AD0), RUNE_C(0x016AED)}, - {RUNE_C(0x016B00), RUNE_C(0x016B2F)}, - {RUNE_C(0x016B40), RUNE_C(0x016B43)}, - {RUNE_C(0x016B63), RUNE_C(0x016B77)}, - {RUNE_C(0x016B7D), RUNE_C(0x016B8F)}, - {RUNE_C(0x016E40), RUNE_C(0x016E7F)}, - {RUNE_C(0x016F00), RUNE_C(0x016F4A)}, - {RUNE_C(0x016F50), RUNE_C(0x016F50)}, - {RUNE_C(0x016F93), RUNE_C(0x016F9F)}, - {RUNE_C(0x016FE0), RUNE_C(0x016FE1)}, - {RUNE_C(0x016FE3), RUNE_C(0x016FE3)}, - {RUNE_C(0x017000), RUNE_C(0x0187F7)}, - {RUNE_C(0x018800), RUNE_C(0x018CD5)}, - {RUNE_C(0x018D00), RUNE_C(0x018D08)}, - {RUNE_C(0x01AFF0), RUNE_C(0x01AFF3)}, - {RUNE_C(0x01AFF5), RUNE_C(0x01AFFB)}, - {RUNE_C(0x01AFFD), RUNE_C(0x01AFFE)}, - {RUNE_C(0x01B000), RUNE_C(0x01B122)}, - {RUNE_C(0x01B132), RUNE_C(0x01B132)}, - {RUNE_C(0x01B150), RUNE_C(0x01B152)}, - {RUNE_C(0x01B155), RUNE_C(0x01B155)}, - {RUNE_C(0x01B164), RUNE_C(0x01B167)}, - {RUNE_C(0x01B170), RUNE_C(0x01B2FB)}, - {RUNE_C(0x01BC00), RUNE_C(0x01BC6A)}, - {RUNE_C(0x01BC70), RUNE_C(0x01BC7C)}, - {RUNE_C(0x01BC80), RUNE_C(0x01BC88)}, - {RUNE_C(0x01BC90), RUNE_C(0x01BC99)}, - {RUNE_C(0x01D400), RUNE_C(0x01D454)}, - {RUNE_C(0x01D456), RUNE_C(0x01D49C)}, - {RUNE_C(0x01D49E), RUNE_C(0x01D49F)}, - {RUNE_C(0x01D4A2), RUNE_C(0x01D4A2)}, - {RUNE_C(0x01D4A5), RUNE_C(0x01D4A6)}, - {RUNE_C(0x01D4A9), RUNE_C(0x01D4AC)}, - {RUNE_C(0x01D4AE), RUNE_C(0x01D4B9)}, - {RUNE_C(0x01D4BB), RUNE_C(0x01D4BB)}, - {RUNE_C(0x01D4BD), RUNE_C(0x01D4C3)}, - {RUNE_C(0x01D4C5), RUNE_C(0x01D505)}, - {RUNE_C(0x01D507), RUNE_C(0x01D50A)}, - {RUNE_C(0x01D50D), RUNE_C(0x01D514)}, - {RUNE_C(0x01D516), RUNE_C(0x01D51C)}, - {RUNE_C(0x01D51E), RUNE_C(0x01D539)}, - {RUNE_C(0x01D53B), RUNE_C(0x01D53E)}, - {RUNE_C(0x01D540), RUNE_C(0x01D544)}, - {RUNE_C(0x01D546), RUNE_C(0x01D546)}, - {RUNE_C(0x01D54A), RUNE_C(0x01D550)}, - {RUNE_C(0x01D552), RUNE_C(0x01D6A5)}, - {RUNE_C(0x01D6A8), RUNE_C(0x01D6C0)}, - {RUNE_C(0x01D6C2), RUNE_C(0x01D6DA)}, - {RUNE_C(0x01D6DC), RUNE_C(0x01D6FA)}, - {RUNE_C(0x01D6FC), RUNE_C(0x01D714)}, - {RUNE_C(0x01D716), RUNE_C(0x01D734)}, - {RUNE_C(0x01D736), RUNE_C(0x01D74E)}, - {RUNE_C(0x01D750), RUNE_C(0x01D76E)}, - {RUNE_C(0x01D770), RUNE_C(0x01D788)}, - {RUNE_C(0x01D78A), RUNE_C(0x01D7A8)}, - {RUNE_C(0x01D7AA), RUNE_C(0x01D7C2)}, - {RUNE_C(0x01D7C4), RUNE_C(0x01D7CB)}, - {RUNE_C(0x01DF00), RUNE_C(0x01DF1E)}, - {RUNE_C(0x01DF25), RUNE_C(0x01DF2A)}, - {RUNE_C(0x01E030), RUNE_C(0x01E06D)}, - {RUNE_C(0x01E100), RUNE_C(0x01E12C)}, - {RUNE_C(0x01E137), RUNE_C(0x01E13D)}, - {RUNE_C(0x01E14E), RUNE_C(0x01E14E)}, - {RUNE_C(0x01E290), RUNE_C(0x01E2AD)}, - {RUNE_C(0x01E2C0), RUNE_C(0x01E2EB)}, - {RUNE_C(0x01E4D0), RUNE_C(0x01E4EB)}, - {RUNE_C(0x01E7E0), RUNE_C(0x01E7E6)}, - {RUNE_C(0x01E7E8), RUNE_C(0x01E7EB)}, - {RUNE_C(0x01E7ED), RUNE_C(0x01E7EE)}, - {RUNE_C(0x01E7F0), RUNE_C(0x01E7FE)}, - {RUNE_C(0x01E800), RUNE_C(0x01E8C4)}, - {RUNE_C(0x01E900), RUNE_C(0x01E943)}, - {RUNE_C(0x01E94B), RUNE_C(0x01E94B)}, - {RUNE_C(0x01EE00), RUNE_C(0x01EE03)}, - {RUNE_C(0x01EE05), RUNE_C(0x01EE1F)}, - {RUNE_C(0x01EE21), RUNE_C(0x01EE22)}, - {RUNE_C(0x01EE24), RUNE_C(0x01EE24)}, - {RUNE_C(0x01EE27), RUNE_C(0x01EE27)}, - {RUNE_C(0x01EE29), RUNE_C(0x01EE32)}, - {RUNE_C(0x01EE34), RUNE_C(0x01EE37)}, - {RUNE_C(0x01EE39), RUNE_C(0x01EE39)}, - {RUNE_C(0x01EE3B), RUNE_C(0x01EE3B)}, - {RUNE_C(0x01EE42), RUNE_C(0x01EE42)}, - {RUNE_C(0x01EE47), RUNE_C(0x01EE47)}, - {RUNE_C(0x01EE49), RUNE_C(0x01EE49)}, - {RUNE_C(0x01EE4B), RUNE_C(0x01EE4B)}, - {RUNE_C(0x01EE4D), RUNE_C(0x01EE4F)}, - {RUNE_C(0x01EE51), RUNE_C(0x01EE52)}, - {RUNE_C(0x01EE54), RUNE_C(0x01EE54)}, - {RUNE_C(0x01EE57), RUNE_C(0x01EE57)}, - {RUNE_C(0x01EE59), RUNE_C(0x01EE59)}, - {RUNE_C(0x01EE5B), RUNE_C(0x01EE5B)}, - {RUNE_C(0x01EE5D), RUNE_C(0x01EE5D)}, - {RUNE_C(0x01EE5F), RUNE_C(0x01EE5F)}, - {RUNE_C(0x01EE61), RUNE_C(0x01EE62)}, - {RUNE_C(0x01EE64), RUNE_C(0x01EE64)}, - {RUNE_C(0x01EE67), RUNE_C(0x01EE6A)}, - {RUNE_C(0x01EE6C), RUNE_C(0x01EE72)}, - {RUNE_C(0x01EE74), RUNE_C(0x01EE77)}, - {RUNE_C(0x01EE79), RUNE_C(0x01EE7C)}, - {RUNE_C(0x01EE7E), RUNE_C(0x01EE7E)}, - {RUNE_C(0x01EE80), RUNE_C(0x01EE89)}, - {RUNE_C(0x01EE8B), RUNE_C(0x01EE9B)}, - {RUNE_C(0x01EEA1), RUNE_C(0x01EEA3)}, - {RUNE_C(0x01EEA5), RUNE_C(0x01EEA9)}, - {RUNE_C(0x01EEAB), RUNE_C(0x01EEBB)}, - {RUNE_C(0x020000), RUNE_C(0x02A6DF)}, - {RUNE_C(0x02A700), RUNE_C(0x02B739)}, - {RUNE_C(0x02B740), RUNE_C(0x02B81D)}, - {RUNE_C(0x02B820), RUNE_C(0x02CEA1)}, - {RUNE_C(0x02CEB0), RUNE_C(0x02EBE0)}, - {RUNE_C(0x02EBF0), RUNE_C(0x02EE5D)}, - {RUNE_C(0x02F800), RUNE_C(0x02FA1D)}, - {RUNE_C(0x030000), RUNE_C(0x03134A)}, - {RUNE_C(0x031350), RUNE_C(0x0323AF)}, +static constexpr unsigned char stage2[][16] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0xFF, 0xFF, 0x07, 0xFE, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, + 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xC3, 0xFF, 0x03, 0x00, 0x1F, 0x50, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xB8}, + {0x40, 0xD7, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF}, + {0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0x7F, 0x02, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x87, 0x07, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0x00, 0x00, 0x00, 0xC0, 0xFE, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x2F, 0x00, 0x60, 0xC0, 0x00, 0x9C}, + {0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x02, 0x00, + 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0x30, 0x04}, + {0xFF, 0xFF, 0x3F, 0x04, 0x10, 0x01, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0x07, 0xFF, 0xFF}, + {0xFF, 0x7E, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x23, + 0x00, 0x00, 0x01, 0xFF, 0x03, 0x00, 0xFE, 0xFF}, + {0xE1, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xC5, 0x23, + 0x00, 0x40, 0x00, 0xB0, 0x03, 0x00, 0x03, 0x10}, + {0xE0, 0x87, 0xF9, 0xFF, 0xFF, 0xFD, 0x6D, 0x03, + 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x1C, 0x00}, + {0xE0, 0xBF, 0xFB, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x02}, + {0xE0, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x00, 0x00, 0x00, 0xB0, 0x03, 0x00, 0x02, 0x00}, + {0xE8, 0xC7, 0x3D, 0xD6, 0x18, 0xC7, 0xFF, 0x03, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xFF, 0x23, + 0x00, 0x00, 0x00, 0x27, 0x03, 0x00, 0x00, 0x00}, + {0xE1, 0xDF, 0xFD, 0xFF, 0xFF, 0xFD, 0xEF, 0x23, + 0x00, 0x00, 0x00, 0x60, 0x03, 0x00, 0x06, 0x00}, + {0xF0, 0xDF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0x27, + 0x00, 0x40, 0x70, 0x80, 0x03, 0x00, 0x00, 0xFC}, + {0xE0, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFB, 0x2F, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xD6, 0xF7, 0xFF, 0xFF, 0xAF, 0xFF, 0x05, 0x20, + 0x5F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00}, + {0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x80, + 0x00, 0x00, 0x3F, 0x3C, 0x62, 0xC0, 0xE1, 0xFF}, + {0x03, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xBF, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x3D, 0x7F, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x7F, + 0x3D, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x3F}, + {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFF, 0xFF}, + {0xFE, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x01}, + {0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x03, 0x00, + 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xDF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, + 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0xC0, 0x00, 0xFC, + 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0xE0, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0x6F, 0x04}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x3F, 0x3F, 0xFF, 0xAA, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x5F, + 0xDC, 0x1F, 0xCF, 0x0F, 0xFF, 0x1F, 0xDC, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80}, + {0x00, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x84, 0xFC, 0x2F, 0x3F, 0x50, 0xFD, 0xFF, 0xF3, + 0xE0, 0x43, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x78, 0x0C, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x20, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00}, + {0xFF, 0xFF, 0x7F, 0x00, 0x7F, 0x7F, 0x7F, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x3E, 0x1F, + 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0x7F, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F}, + {0xFF, 0x1F, 0xFF, 0xFF, 0x00, 0x0C, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x80}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00}, + {0x00, 0x00, 0x80, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xEB, 0x03, 0x00, 0x00, 0xFC, 0xFF}, + {0xBB, 0xF7, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00}, + {0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x68}, + {0x00, 0xFC, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x00, 0x80, 0x00, 0x00, 0xDF, 0xFF, 0x00, 0x7C}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, + 0xF7, 0x0F, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0xC4}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x62, 0x3E, + 0x05, 0x00, 0x00, 0x38, 0xFF, 0x07, 0x1C, 0x00}, + {0x7E, 0x7E, 0x7E, 0x00, 0x7F, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF7, 0xFF, 0x03, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, + 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0x00, 0xF8, 0xA0, 0xFF, 0xFD, 0x7F, 0x5F, + 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, + 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xAA}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F}, + {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x07, + 0xFE, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0x7F, + 0xFC, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xEF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xB7, + 0xFF, 0x3F, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0xF7}, + {0xFF, 0xF7, 0xB7, 0xFF, 0xFB, 0xFF, 0xFB, 0x1B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00}, + {0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x3F, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x91, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x37, 0x00}, + {0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x01, 0x00, 0xEF, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFE, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, + 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x00, 0xFF, 0xFF, + 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, + {0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, + 0x90, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x47, 0x00}, + {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, + 0x1E, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x0F, 0x00, 0x80, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xBD, 0xFF, 0xBF, 0xFF, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00}, + {0xE0, 0x9F, 0xF9, 0xFF, 0xFF, 0xFD, 0xED, 0x23, + 0x00, 0x00, 0x01, 0xE0, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, + 0x80, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80}, + {0x7F, 0xF2, 0x6F, 0xFF, 0xFF, 0xFF, 0x00, 0x80, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0xFF, 0xFF, + 0xFF, 0xFF, 0x01, 0x00, 0x0A, 0x00, 0x00, 0x00}, + {0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x04, + 0x00, 0x00, 0x01, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0x03, 0x00, 0x20, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF}, + {0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x7F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, + 0x40, 0x00, 0x00, 0x00, 0xBF, 0xFD, 0xFF, 0xFF}, + {0xFF, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x07, 0x00}, + {0xF4, 0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, + 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xE0}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x27, 0x00, 0xF0, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0x1F}, + {0xFF, 0x01, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xDF, 0x64, 0xDE, 0xFF, 0xEB, + 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xBF, 0xE7, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0x7B, + 0x5F, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, + 0xFD, 0xFF, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xF7}, + {0xFF, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, + 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF}, + {0xFF, 0xFD, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, + 0xF7, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x7F, 0xE0, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, + 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7F, 0x6F, 0xFF, 0x7F}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xEF, 0xFF, 0xFF, 0xFF, 0x96, 0xFE, 0xF7, 0x0A, + 0x84, 0xEA, 0x96, 0xAA, 0x96, 0xF7, 0xF7, 0x5E}, + {0xFF, 0xFB, 0xFF, 0x0F, 0xEE, 0xFB, 0xFF, 0x0F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; -_MLIB_DEFINE_BSEARCH_CONTAINS(lookup) - bool uprop_is_xids(rune ch) { - return ch <= LATIN1_MAX ? TESTBIT(bs, ch) : mlib_lookup_contains(ch); + return TESTBIT(stage2[stage1[ch / 128]], ch % 128); } |