From 982ced5e3769fa00b271cccf303b7db1bde1d003 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Fri, 22 May 2026 23:26:02 -0400 Subject: [PATCH 01/11] =?UTF-8?q?=F0=9F=A7=BC=20optimize=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index bdd0d97..0bc07e7 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,55 @@ -CC = clang +CC = /usr/local/opt/llvm/bin/clang +WASM_OPT ?= wasm-opt TARGET = clayterm.wasm SRC = src/module.c -CFLAGS = --target=wasm32 -nostdlib -O2 \ +CFLAGS = --target=wasm32 -nostdlib -Oz \ + -ffunction-sections -fdata-sections \ + -mbulk-memory \ -DCLAY_IMPLEMENTATION -DCLAY_WASM \ -Isrc -I. +EXPORTS = \ + -Wl,--export=__heap_base \ + -Wl,--export=clayterm_size \ + -Wl,--export=init \ + -Wl,--export=reduce \ + -Wl,--export=output \ + -Wl,--export=length \ + -Wl,--export=measure \ + -Wl,--export=Clay_SetPointerState \ + -Wl,--export=pointer_over_count \ + -Wl,--export=pointer_over_id_string_length \ + -Wl,--export=pointer_over_id_string_ptr \ + -Wl,--export=get_element_bounds \ + -Wl,--export=error_count \ + -Wl,--export=error_type \ + -Wl,--export=error_message_length \ + -Wl,--export=error_message_ptr \ + -Wl,--export=input_size \ + -Wl,--export=input_init \ + -Wl,--export=input_scan \ + -Wl,--export=input_count \ + -Wl,--export=input_event \ + -Wl,--export=input_delay + LDFLAGS = -Wl,--no-entry \ -Wl,--import-memory \ -Wl,--stack-first \ - -Wl,--export-all \ + -Wl,--strip-all \ + -Wl,--gc-sections \ -Wl,--undefined=Clay__MeasureText \ - -Wl,--undefined=Clay__QueryScrollOffset + -Wl,--undefined=Clay__QueryScrollOffset \ + $(EXPORTS) all: $(TARGET) wasm.ts - @echo "Built $(TARGET) ($$(wc -c < $(TARGET)) bytes)" + @echo "Built $(TARGET) ($$(wc -c < $(TARGET)) bytes raw, $$(gzip -c $(TARGET) | wc -c) bytes gzip)" DEPS = $(wildcard src/*.c src/*.h) $(TARGET): $(DEPS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC) + $(WASM_OPT) -Oz --enable-bulk-memory -o $@ $@ wasm.ts: $(TARGET) deno run --allow-read --allow-write tasks/bundle-wasm.ts From c14f591f295c49cb2147f31a081d0b282ccfb4ce Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Fri, 22 May 2026 23:40:11 -0400 Subject: [PATCH 02/11] =?UTF-8?q?=F0=9F=A7=BC=20compress=20bundled=20wasm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/bundle-wasm.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tasks/bundle-wasm.ts b/tasks/bundle-wasm.ts index b6b033d..ab69236 100644 --- a/tasks/bundle-wasm.ts +++ b/tasks/bundle-wasm.ts @@ -1,13 +1,19 @@ import { encodeBase64 } from "@std/encoding/base64"; const wasm = await Deno.readFile("clayterm.wasm"); -const base64 = encodeBase64(wasm); + +const cs = new CompressionStream("deflate-raw"); +const compressed = await new Response( + new Blob([wasm]).stream().pipeThrough(cs), +).arrayBuffer(); + +const base64 = encodeBase64(new Uint8Array(compressed)); const source = `const bin = atob("${base64}"); -const bytes = new Uint8Array(bin.length); -for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i); -export const compiled = await WebAssembly.compile(bytes); +const compressed = Uint8Array.from(bin, c => c.charCodeAt(0)); +const stream = new Blob([compressed]).stream().pipeThrough(new DecompressionStream("deflate-raw")); +export const compiled = await WebAssembly.compile(await new Response(stream).arrayBuffer()); `; await Deno.writeTextFile("wasm.ts", source); -console.log(`wrote wasm.ts (${wasm.length} bytes encoded)`); +console.log(`wrote wasm.ts (${wasm.length} → ${compressed.byteLength} bytes compressed, ${Math.round(compressed.byteLength / wasm.length * 100)}%)`); From 82c9050bdf48ed4f3d5e92164ccf796c90fd4bf9 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 23 May 2026 00:16:58 -0400 Subject: [PATCH 03/11] =?UTF-8?q?=F0=9F=A7=BC=20optimize=20wcwidth.c=20siz?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/wcwidth.c | 1256 +++++++------------------------------------------ 1 file changed, 158 insertions(+), 1098 deletions(-) diff --git a/src/wcwidth.c b/src/wcwidth.c index b821866..a3a0faa 100644 --- a/src/wcwidth.c +++ b/src/wcwidth.c @@ -1,1096 +1,165 @@ /* wcwidth.c - Unicode character width lookup - * Extracted from termbox2 (https://github.com/termbox/termbox2) - * Table covers Unicode 15.0 + * Derived from termbox2 (https://github.com/termbox/termbox2), Unicode 15.0 * - * To verify or update, the canonical sources are: - * - https://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt - * Defines W (wide=2) and F (fullwidth=2) - * - https://www.unicode.org/Public/UNIDATA/UnicodeData.txt - * General_Category=Mn/Me for combining marks (width=0) - * - https://www.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt - * Default_Ignorable_Code_Point for zero-width + * Minimal variant: only width-0 (combining) and width-2 (wide CJK) entries. + * All other assigned and unassigned codepoints default to width 1. + * Sources: EastAsianWidth.txt (W/F → 2), UnicodeData.txt Mn/Me (→ 0), + * DerivedCoreProperties.txt Default_Ignorable (→ 0) + * + * Encoding: two split tables (w=0 and w=2), each stored as parallel + * uint32_t lo[] + uint16_t count[] arrays where hi = lo + count. */ #include -static struct { - uint32_t lo; - uint32_t hi; - int w; -} wcwidth_table[] = {{0x000001, 0x00001f, -1}, {0x000020, 0x00007e, 1}, - {0x00007f, 0x00009f, -1}, {0x0000a0, 0x0002ff, 1}, - {0x000300, 0x00036f, 0}, {0x000370, 0x000377, 1}, - {0x000378, 0x000379, -1}, {0x00037a, 0x00037f, 1}, - {0x000380, 0x000383, -1}, {0x000384, 0x00038a, 1}, - {0x00038b, 0x00038b, -1}, {0x00038c, 0x00038c, 1}, - {0x00038d, 0x00038d, -1}, {0x00038e, 0x0003a1, 1}, - {0x0003a2, 0x0003a2, -1}, {0x0003a3, 0x000482, 1}, - {0x000483, 0x000489, 0}, {0x00048a, 0x00052f, 1}, - {0x000530, 0x000530, -1}, {0x000531, 0x000556, 1}, - {0x000557, 0x000558, -1}, {0x000559, 0x00058a, 1}, - {0x00058b, 0x00058c, -1}, {0x00058d, 0x00058f, 1}, - {0x000590, 0x000590, -1}, {0x000591, 0x0005bd, 0}, - {0x0005be, 0x0005be, 1}, {0x0005bf, 0x0005bf, 0}, - {0x0005c0, 0x0005c0, 1}, {0x0005c1, 0x0005c2, 0}, - {0x0005c3, 0x0005c3, 1}, {0x0005c4, 0x0005c5, 0}, - {0x0005c6, 0x0005c6, 1}, {0x0005c7, 0x0005c7, 0}, - {0x0005c8, 0x0005cf, -1}, {0x0005d0, 0x0005ea, 1}, - {0x0005eb, 0x0005ee, -1}, {0x0005ef, 0x0005f4, 1}, - {0x0005f5, 0x0005ff, -1}, {0x000600, 0x00060f, 1}, - {0x000610, 0x00061a, 0}, {0x00061b, 0x00061b, 1}, - {0x00061c, 0x00061c, 0}, {0x00061d, 0x00064a, 1}, - {0x00064b, 0x00065f, 0}, {0x000660, 0x00066f, 1}, - {0x000670, 0x000670, 0}, {0x000671, 0x0006d5, 1}, - {0x0006d6, 0x0006dc, 0}, {0x0006dd, 0x0006de, 1}, - {0x0006df, 0x0006e4, 0}, {0x0006e5, 0x0006e6, 1}, - {0x0006e7, 0x0006e8, 0}, {0x0006e9, 0x0006e9, 1}, - {0x0006ea, 0x0006ed, 0}, {0x0006ee, 0x00070d, 1}, - {0x00070e, 0x00070e, -1}, {0x00070f, 0x000710, 1}, - {0x000711, 0x000711, 0}, {0x000712, 0x00072f, 1}, - {0x000730, 0x00074a, 0}, {0x00074b, 0x00074c, -1}, - {0x00074d, 0x0007a5, 1}, {0x0007a6, 0x0007b0, 0}, - {0x0007b1, 0x0007b1, 1}, {0x0007b2, 0x0007bf, -1}, - {0x0007c0, 0x0007ea, 1}, {0x0007eb, 0x0007f3, 0}, - {0x0007f4, 0x0007fa, 1}, {0x0007fb, 0x0007fc, -1}, - {0x0007fd, 0x0007fd, 0}, {0x0007fe, 0x000815, 1}, - {0x000816, 0x000819, 0}, {0x00081a, 0x00081a, 1}, - {0x00081b, 0x000823, 0}, {0x000824, 0x000824, 1}, - {0x000825, 0x000827, 0}, {0x000828, 0x000828, 1}, - {0x000829, 0x00082d, 0}, {0x00082e, 0x00082f, -1}, - {0x000830, 0x00083e, 1}, {0x00083f, 0x00083f, -1}, - {0x000840, 0x000858, 1}, {0x000859, 0x00085b, 0}, - {0x00085c, 0x00085d, -1}, {0x00085e, 0x00085e, 1}, - {0x00085f, 0x00085f, -1}, {0x000860, 0x00086a, 1}, - {0x00086b, 0x00086f, -1}, {0x000870, 0x00088e, 1}, - {0x00088f, 0x00088f, -1}, {0x000890, 0x000891, 1}, - {0x000892, 0x000896, -1}, {0x000897, 0x00089f, 0}, - {0x0008a0, 0x0008c9, 1}, {0x0008ca, 0x0008e1, 0}, - {0x0008e2, 0x0008e2, 1}, {0x0008e3, 0x000902, 0}, - {0x000903, 0x000939, 1}, {0x00093a, 0x00093a, 0}, - {0x00093b, 0x00093b, 1}, {0x00093c, 0x00093c, 0}, - {0x00093d, 0x000940, 1}, {0x000941, 0x000948, 0}, - {0x000949, 0x00094c, 1}, {0x00094d, 0x00094d, 0}, - {0x00094e, 0x000950, 1}, {0x000951, 0x000957, 0}, - {0x000958, 0x000961, 1}, {0x000962, 0x000963, 0}, - {0x000964, 0x000980, 1}, {0x000981, 0x000981, 0}, - {0x000982, 0x000983, 1}, {0x000984, 0x000984, -1}, - {0x000985, 0x00098c, 1}, {0x00098d, 0x00098e, -1}, - {0x00098f, 0x000990, 1}, {0x000991, 0x000992, -1}, - {0x000993, 0x0009a8, 1}, {0x0009a9, 0x0009a9, -1}, - {0x0009aa, 0x0009b0, 1}, {0x0009b1, 0x0009b1, -1}, - {0x0009b2, 0x0009b2, 1}, {0x0009b3, 0x0009b5, -1}, - {0x0009b6, 0x0009b9, 1}, {0x0009ba, 0x0009bb, -1}, - {0x0009bc, 0x0009bc, 0}, {0x0009bd, 0x0009c0, 1}, - {0x0009c1, 0x0009c4, 0}, {0x0009c5, 0x0009c6, -1}, - {0x0009c7, 0x0009c8, 1}, {0x0009c9, 0x0009ca, -1}, - {0x0009cb, 0x0009cc, 1}, {0x0009cd, 0x0009cd, 0}, - {0x0009ce, 0x0009ce, 1}, {0x0009cf, 0x0009d6, -1}, - {0x0009d7, 0x0009d7, 1}, {0x0009d8, 0x0009db, -1}, - {0x0009dc, 0x0009dd, 1}, {0x0009de, 0x0009de, -1}, - {0x0009df, 0x0009e1, 1}, {0x0009e2, 0x0009e3, 0}, - {0x0009e4, 0x0009e5, -1}, {0x0009e6, 0x0009fd, 1}, - {0x0009fe, 0x0009fe, 0}, {0x0009ff, 0x000a00, -1}, - {0x000a01, 0x000a02, 0}, {0x000a03, 0x000a03, 1}, - {0x000a04, 0x000a04, -1}, {0x000a05, 0x000a0a, 1}, - {0x000a0b, 0x000a0e, -1}, {0x000a0f, 0x000a10, 1}, - {0x000a11, 0x000a12, -1}, {0x000a13, 0x000a28, 1}, - {0x000a29, 0x000a29, -1}, {0x000a2a, 0x000a30, 1}, - {0x000a31, 0x000a31, -1}, {0x000a32, 0x000a33, 1}, - {0x000a34, 0x000a34, -1}, {0x000a35, 0x000a36, 1}, - {0x000a37, 0x000a37, -1}, {0x000a38, 0x000a39, 1}, - {0x000a3a, 0x000a3b, -1}, {0x000a3c, 0x000a3c, 0}, - {0x000a3d, 0x000a3d, -1}, {0x000a3e, 0x000a40, 1}, - {0x000a41, 0x000a42, 0}, {0x000a43, 0x000a46, -1}, - {0x000a47, 0x000a48, 0}, {0x000a49, 0x000a4a, -1}, - {0x000a4b, 0x000a4d, 0}, {0x000a4e, 0x000a50, -1}, - {0x000a51, 0x000a51, 0}, {0x000a52, 0x000a58, -1}, - {0x000a59, 0x000a5c, 1}, {0x000a5d, 0x000a5d, -1}, - {0x000a5e, 0x000a5e, 1}, {0x000a5f, 0x000a65, -1}, - {0x000a66, 0x000a6f, 1}, {0x000a70, 0x000a71, 0}, - {0x000a72, 0x000a74, 1}, {0x000a75, 0x000a75, 0}, - {0x000a76, 0x000a76, 1}, {0x000a77, 0x000a80, -1}, - {0x000a81, 0x000a82, 0}, {0x000a83, 0x000a83, 1}, - {0x000a84, 0x000a84, -1}, {0x000a85, 0x000a8d, 1}, - {0x000a8e, 0x000a8e, -1}, {0x000a8f, 0x000a91, 1}, - {0x000a92, 0x000a92, -1}, {0x000a93, 0x000aa8, 1}, - {0x000aa9, 0x000aa9, -1}, {0x000aaa, 0x000ab0, 1}, - {0x000ab1, 0x000ab1, -1}, {0x000ab2, 0x000ab3, 1}, - {0x000ab4, 0x000ab4, -1}, {0x000ab5, 0x000ab9, 1}, - {0x000aba, 0x000abb, -1}, {0x000abc, 0x000abc, 0}, - {0x000abd, 0x000ac0, 1}, {0x000ac1, 0x000ac5, 0}, - {0x000ac6, 0x000ac6, -1}, {0x000ac7, 0x000ac8, 0}, - {0x000ac9, 0x000ac9, 1}, {0x000aca, 0x000aca, -1}, - {0x000acb, 0x000acc, 1}, {0x000acd, 0x000acd, 0}, - {0x000ace, 0x000acf, -1}, {0x000ad0, 0x000ad0, 1}, - {0x000ad1, 0x000adf, -1}, {0x000ae0, 0x000ae1, 1}, - {0x000ae2, 0x000ae3, 0}, {0x000ae4, 0x000ae5, -1}, - {0x000ae6, 0x000af1, 1}, {0x000af2, 0x000af8, -1}, - {0x000af9, 0x000af9, 1}, {0x000afa, 0x000aff, 0}, - {0x000b00, 0x000b00, -1}, {0x000b01, 0x000b01, 0}, - {0x000b02, 0x000b03, 1}, {0x000b04, 0x000b04, -1}, - {0x000b05, 0x000b0c, 1}, {0x000b0d, 0x000b0e, -1}, - {0x000b0f, 0x000b10, 1}, {0x000b11, 0x000b12, -1}, - {0x000b13, 0x000b28, 1}, {0x000b29, 0x000b29, -1}, - {0x000b2a, 0x000b30, 1}, {0x000b31, 0x000b31, -1}, - {0x000b32, 0x000b33, 1}, {0x000b34, 0x000b34, -1}, - {0x000b35, 0x000b39, 1}, {0x000b3a, 0x000b3b, -1}, - {0x000b3c, 0x000b3c, 0}, {0x000b3d, 0x000b3e, 1}, - {0x000b3f, 0x000b3f, 0}, {0x000b40, 0x000b40, 1}, - {0x000b41, 0x000b44, 0}, {0x000b45, 0x000b46, -1}, - {0x000b47, 0x000b48, 1}, {0x000b49, 0x000b4a, -1}, - {0x000b4b, 0x000b4c, 1}, {0x000b4d, 0x000b4d, 0}, - {0x000b4e, 0x000b54, -1}, {0x000b55, 0x000b56, 0}, - {0x000b57, 0x000b57, 1}, {0x000b58, 0x000b5b, -1}, - {0x000b5c, 0x000b5d, 1}, {0x000b5e, 0x000b5e, -1}, - {0x000b5f, 0x000b61, 1}, {0x000b62, 0x000b63, 0}, - {0x000b64, 0x000b65, -1}, {0x000b66, 0x000b77, 1}, - {0x000b78, 0x000b81, -1}, {0x000b82, 0x000b82, 0}, - {0x000b83, 0x000b83, 1}, {0x000b84, 0x000b84, -1}, - {0x000b85, 0x000b8a, 1}, {0x000b8b, 0x000b8d, -1}, - {0x000b8e, 0x000b90, 1}, {0x000b91, 0x000b91, -1}, - {0x000b92, 0x000b95, 1}, {0x000b96, 0x000b98, -1}, - {0x000b99, 0x000b9a, 1}, {0x000b9b, 0x000b9b, -1}, - {0x000b9c, 0x000b9c, 1}, {0x000b9d, 0x000b9d, -1}, - {0x000b9e, 0x000b9f, 1}, {0x000ba0, 0x000ba2, -1}, - {0x000ba3, 0x000ba4, 1}, {0x000ba5, 0x000ba7, -1}, - {0x000ba8, 0x000baa, 1}, {0x000bab, 0x000bad, -1}, - {0x000bae, 0x000bb9, 1}, {0x000bba, 0x000bbd, -1}, - {0x000bbe, 0x000bbf, 1}, {0x000bc0, 0x000bc0, 0}, - {0x000bc1, 0x000bc2, 1}, {0x000bc3, 0x000bc5, -1}, - {0x000bc6, 0x000bc8, 1}, {0x000bc9, 0x000bc9, -1}, - {0x000bca, 0x000bcc, 1}, {0x000bcd, 0x000bcd, 0}, - {0x000bce, 0x000bcf, -1}, {0x000bd0, 0x000bd0, 1}, - {0x000bd1, 0x000bd6, -1}, {0x000bd7, 0x000bd7, 1}, - {0x000bd8, 0x000be5, -1}, {0x000be6, 0x000bfa, 1}, - {0x000bfb, 0x000bff, -1}, {0x000c00, 0x000c00, 0}, - {0x000c01, 0x000c03, 1}, {0x000c04, 0x000c04, 0}, - {0x000c05, 0x000c0c, 1}, {0x000c0d, 0x000c0d, -1}, - {0x000c0e, 0x000c10, 1}, {0x000c11, 0x000c11, -1}, - {0x000c12, 0x000c28, 1}, {0x000c29, 0x000c29, -1}, - {0x000c2a, 0x000c39, 1}, {0x000c3a, 0x000c3b, -1}, - {0x000c3c, 0x000c3c, 0}, {0x000c3d, 0x000c3d, 1}, - {0x000c3e, 0x000c40, 0}, {0x000c41, 0x000c44, 1}, - {0x000c45, 0x000c45, -1}, {0x000c46, 0x000c48, 0}, - {0x000c49, 0x000c49, -1}, {0x000c4a, 0x000c4d, 0}, - {0x000c4e, 0x000c54, -1}, {0x000c55, 0x000c56, 0}, - {0x000c57, 0x000c57, -1}, {0x000c58, 0x000c5a, 1}, - {0x000c5b, 0x000c5c, -1}, {0x000c5d, 0x000c5d, 1}, - {0x000c5e, 0x000c5f, -1}, {0x000c60, 0x000c61, 1}, - {0x000c62, 0x000c63, 0}, {0x000c64, 0x000c65, -1}, - {0x000c66, 0x000c6f, 1}, {0x000c70, 0x000c76, -1}, - {0x000c77, 0x000c80, 1}, {0x000c81, 0x000c81, 0}, - {0x000c82, 0x000c8c, 1}, {0x000c8d, 0x000c8d, -1}, - {0x000c8e, 0x000c90, 1}, {0x000c91, 0x000c91, -1}, - {0x000c92, 0x000ca8, 1}, {0x000ca9, 0x000ca9, -1}, - {0x000caa, 0x000cb3, 1}, {0x000cb4, 0x000cb4, -1}, - {0x000cb5, 0x000cb9, 1}, {0x000cba, 0x000cbb, -1}, - {0x000cbc, 0x000cbc, 0}, {0x000cbd, 0x000cbe, 1}, - {0x000cbf, 0x000cbf, 0}, {0x000cc0, 0x000cc4, 1}, - {0x000cc5, 0x000cc5, -1}, {0x000cc6, 0x000cc6, 0}, - {0x000cc7, 0x000cc8, 1}, {0x000cc9, 0x000cc9, -1}, - {0x000cca, 0x000ccb, 1}, {0x000ccc, 0x000ccd, 0}, - {0x000cce, 0x000cd4, -1}, {0x000cd5, 0x000cd6, 1}, - {0x000cd7, 0x000cdc, -1}, {0x000cdd, 0x000cde, 1}, - {0x000cdf, 0x000cdf, -1}, {0x000ce0, 0x000ce1, 1}, - {0x000ce2, 0x000ce3, 0}, {0x000ce4, 0x000ce5, -1}, - {0x000ce6, 0x000cef, 1}, {0x000cf0, 0x000cf0, -1}, - {0x000cf1, 0x000cf3, 1}, {0x000cf4, 0x000cff, -1}, - {0x000d00, 0x000d01, 0}, {0x000d02, 0x000d0c, 1}, - {0x000d0d, 0x000d0d, -1}, {0x000d0e, 0x000d10, 1}, - {0x000d11, 0x000d11, -1}, {0x000d12, 0x000d3a, 1}, - {0x000d3b, 0x000d3c, 0}, {0x000d3d, 0x000d40, 1}, - {0x000d41, 0x000d44, 0}, {0x000d45, 0x000d45, -1}, - {0x000d46, 0x000d48, 1}, {0x000d49, 0x000d49, -1}, - {0x000d4a, 0x000d4c, 1}, {0x000d4d, 0x000d4d, 0}, - {0x000d4e, 0x000d4f, 1}, {0x000d50, 0x000d53, -1}, - {0x000d54, 0x000d61, 1}, {0x000d62, 0x000d63, 0}, - {0x000d64, 0x000d65, -1}, {0x000d66, 0x000d7f, 1}, - {0x000d80, 0x000d80, -1}, {0x000d81, 0x000d81, 0}, - {0x000d82, 0x000d83, 1}, {0x000d84, 0x000d84, -1}, - {0x000d85, 0x000d96, 1}, {0x000d97, 0x000d99, -1}, - {0x000d9a, 0x000db1, 1}, {0x000db2, 0x000db2, -1}, - {0x000db3, 0x000dbb, 1}, {0x000dbc, 0x000dbc, -1}, - {0x000dbd, 0x000dbd, 1}, {0x000dbe, 0x000dbf, -1}, - {0x000dc0, 0x000dc6, 1}, {0x000dc7, 0x000dc9, -1}, - {0x000dca, 0x000dca, 0}, {0x000dcb, 0x000dce, -1}, - {0x000dcf, 0x000dd1, 1}, {0x000dd2, 0x000dd4, 0}, - {0x000dd5, 0x000dd5, -1}, {0x000dd6, 0x000dd6, 0}, - {0x000dd7, 0x000dd7, -1}, {0x000dd8, 0x000ddf, 1}, - {0x000de0, 0x000de5, -1}, {0x000de6, 0x000def, 1}, - {0x000df0, 0x000df1, -1}, {0x000df2, 0x000df4, 1}, - {0x000df5, 0x000e00, -1}, {0x000e01, 0x000e30, 1}, - {0x000e31, 0x000e31, 0}, {0x000e32, 0x000e33, 1}, - {0x000e34, 0x000e3a, 0}, {0x000e3b, 0x000e3e, -1}, - {0x000e3f, 0x000e46, 1}, {0x000e47, 0x000e4e, 0}, - {0x000e4f, 0x000e5b, 1}, {0x000e5c, 0x000e80, -1}, - {0x000e81, 0x000e82, 1}, {0x000e83, 0x000e83, -1}, - {0x000e84, 0x000e84, 1}, {0x000e85, 0x000e85, -1}, - {0x000e86, 0x000e8a, 1}, {0x000e8b, 0x000e8b, -1}, - {0x000e8c, 0x000ea3, 1}, {0x000ea4, 0x000ea4, -1}, - {0x000ea5, 0x000ea5, 1}, {0x000ea6, 0x000ea6, -1}, - {0x000ea7, 0x000eb0, 1}, {0x000eb1, 0x000eb1, 0}, - {0x000eb2, 0x000eb3, 1}, {0x000eb4, 0x000ebc, 0}, - {0x000ebd, 0x000ebd, 1}, {0x000ebe, 0x000ebf, -1}, - {0x000ec0, 0x000ec4, 1}, {0x000ec5, 0x000ec5, -1}, - {0x000ec6, 0x000ec6, 1}, {0x000ec7, 0x000ec7, -1}, - {0x000ec8, 0x000ece, 0}, {0x000ecf, 0x000ecf, -1}, - {0x000ed0, 0x000ed9, 1}, {0x000eda, 0x000edb, -1}, - {0x000edc, 0x000edf, 1}, {0x000ee0, 0x000eff, -1}, - {0x000f00, 0x000f17, 1}, {0x000f18, 0x000f19, 0}, - {0x000f1a, 0x000f34, 1}, {0x000f35, 0x000f35, 0}, - {0x000f36, 0x000f36, 1}, {0x000f37, 0x000f37, 0}, - {0x000f38, 0x000f38, 1}, {0x000f39, 0x000f39, 0}, - {0x000f3a, 0x000f47, 1}, {0x000f48, 0x000f48, -1}, - {0x000f49, 0x000f6c, 1}, {0x000f6d, 0x000f70, -1}, - {0x000f71, 0x000f7e, 0}, {0x000f7f, 0x000f7f, 1}, - {0x000f80, 0x000f84, 0}, {0x000f85, 0x000f85, 1}, - {0x000f86, 0x000f87, 0}, {0x000f88, 0x000f8c, 1}, - {0x000f8d, 0x000f97, 0}, {0x000f98, 0x000f98, -1}, - {0x000f99, 0x000fbc, 0}, {0x000fbd, 0x000fbd, -1}, - {0x000fbe, 0x000fc5, 1}, {0x000fc6, 0x000fc6, 0}, - {0x000fc7, 0x000fcc, 1}, {0x000fcd, 0x000fcd, -1}, - {0x000fce, 0x000fda, 1}, {0x000fdb, 0x000fff, -1}, - {0x001000, 0x00102c, 1}, {0x00102d, 0x001030, 0}, - {0x001031, 0x001031, 1}, {0x001032, 0x001037, 0}, - {0x001038, 0x001038, 1}, {0x001039, 0x00103a, 0}, - {0x00103b, 0x00103c, 1}, {0x00103d, 0x00103e, 0}, - {0x00103f, 0x001057, 1}, {0x001058, 0x001059, 0}, - {0x00105a, 0x00105d, 1}, {0x00105e, 0x001060, 0}, - {0x001061, 0x001070, 1}, {0x001071, 0x001074, 0}, - {0x001075, 0x001081, 1}, {0x001082, 0x001082, 0}, - {0x001083, 0x001084, 1}, {0x001085, 0x001086, 0}, - {0x001087, 0x00108c, 1}, {0x00108d, 0x00108d, 0}, - {0x00108e, 0x00109c, 1}, {0x00109d, 0x00109d, 0}, - {0x00109e, 0x0010c5, 1}, {0x0010c6, 0x0010c6, -1}, - {0x0010c7, 0x0010c7, 1}, {0x0010c8, 0x0010cc, -1}, - {0x0010cd, 0x0010cd, 1}, {0x0010ce, 0x0010cf, -1}, - {0x0010d0, 0x0010ff, 1}, {0x001100, 0x00115f, 2}, - {0x001160, 0x0011ff, 0}, {0x001200, 0x001248, 1}, - {0x001249, 0x001249, -1}, {0x00124a, 0x00124d, 1}, - {0x00124e, 0x00124f, -1}, {0x001250, 0x001256, 1}, - {0x001257, 0x001257, -1}, {0x001258, 0x001258, 1}, - {0x001259, 0x001259, -1}, {0x00125a, 0x00125d, 1}, - {0x00125e, 0x00125f, -1}, {0x001260, 0x001288, 1}, - {0x001289, 0x001289, -1}, {0x00128a, 0x00128d, 1}, - {0x00128e, 0x00128f, -1}, {0x001290, 0x0012b0, 1}, - {0x0012b1, 0x0012b1, -1}, {0x0012b2, 0x0012b5, 1}, - {0x0012b6, 0x0012b7, -1}, {0x0012b8, 0x0012be, 1}, - {0x0012bf, 0x0012bf, -1}, {0x0012c0, 0x0012c0, 1}, - {0x0012c1, 0x0012c1, -1}, {0x0012c2, 0x0012c5, 1}, - {0x0012c6, 0x0012c7, -1}, {0x0012c8, 0x0012d6, 1}, - {0x0012d7, 0x0012d7, -1}, {0x0012d8, 0x001310, 1}, - {0x001311, 0x001311, -1}, {0x001312, 0x001315, 1}, - {0x001316, 0x001317, -1}, {0x001318, 0x00135a, 1}, - {0x00135b, 0x00135c, -1}, {0x00135d, 0x00135f, 0}, - {0x001360, 0x00137c, 1}, {0x00137d, 0x00137f, -1}, - {0x001380, 0x001399, 1}, {0x00139a, 0x00139f, -1}, - {0x0013a0, 0x0013f5, 1}, {0x0013f6, 0x0013f7, -1}, - {0x0013f8, 0x0013fd, 1}, {0x0013fe, 0x0013ff, -1}, - {0x001400, 0x00169c, 1}, {0x00169d, 0x00169f, -1}, - {0x0016a0, 0x0016f8, 1}, {0x0016f9, 0x0016ff, -1}, - {0x001700, 0x001711, 1}, {0x001712, 0x001714, 0}, - {0x001715, 0x001715, 1}, {0x001716, 0x00171e, -1}, - {0x00171f, 0x001731, 1}, {0x001732, 0x001733, 0}, - {0x001734, 0x001736, 1}, {0x001737, 0x00173f, -1}, - {0x001740, 0x001751, 1}, {0x001752, 0x001753, 0}, - {0x001754, 0x00175f, -1}, {0x001760, 0x00176c, 1}, - {0x00176d, 0x00176d, -1}, {0x00176e, 0x001770, 1}, - {0x001771, 0x001771, -1}, {0x001772, 0x001773, 0}, - {0x001774, 0x00177f, -1}, {0x001780, 0x0017b3, 1}, - {0x0017b4, 0x0017b5, 0}, {0x0017b6, 0x0017b6, 1}, - {0x0017b7, 0x0017bd, 0}, {0x0017be, 0x0017c5, 1}, - {0x0017c6, 0x0017c6, 0}, {0x0017c7, 0x0017c8, 1}, - {0x0017c9, 0x0017d3, 0}, {0x0017d4, 0x0017dc, 1}, - {0x0017dd, 0x0017dd, 0}, {0x0017de, 0x0017df, -1}, - {0x0017e0, 0x0017e9, 1}, {0x0017ea, 0x0017ef, -1}, - {0x0017f0, 0x0017f9, 1}, {0x0017fa, 0x0017ff, -1}, - {0x001800, 0x00180a, 1}, {0x00180b, 0x00180f, 0}, - {0x001810, 0x001819, 1}, {0x00181a, 0x00181f, -1}, - {0x001820, 0x001878, 1}, {0x001879, 0x00187f, -1}, - {0x001880, 0x001884, 1}, {0x001885, 0x001886, 0}, - {0x001887, 0x0018a8, 1}, {0x0018a9, 0x0018a9, 0}, - {0x0018aa, 0x0018aa, 1}, {0x0018ab, 0x0018af, -1}, - {0x0018b0, 0x0018f5, 1}, {0x0018f6, 0x0018ff, -1}, - {0x001900, 0x00191e, 1}, {0x00191f, 0x00191f, -1}, - {0x001920, 0x001922, 0}, {0x001923, 0x001926, 1}, - {0x001927, 0x001928, 0}, {0x001929, 0x00192b, 1}, - {0x00192c, 0x00192f, -1}, {0x001930, 0x001931, 1}, - {0x001932, 0x001932, 0}, {0x001933, 0x001938, 1}, - {0x001939, 0x00193b, 0}, {0x00193c, 0x00193f, -1}, - {0x001940, 0x001940, 1}, {0x001941, 0x001943, -1}, - {0x001944, 0x00196d, 1}, {0x00196e, 0x00196f, -1}, - {0x001970, 0x001974, 1}, {0x001975, 0x00197f, -1}, - {0x001980, 0x0019ab, 1}, {0x0019ac, 0x0019af, -1}, - {0x0019b0, 0x0019c9, 1}, {0x0019ca, 0x0019cf, -1}, - {0x0019d0, 0x0019da, 1}, {0x0019db, 0x0019dd, -1}, - {0x0019de, 0x001a16, 1}, {0x001a17, 0x001a18, 0}, - {0x001a19, 0x001a1a, 1}, {0x001a1b, 0x001a1b, 0}, - {0x001a1c, 0x001a1d, -1}, {0x001a1e, 0x001a55, 1}, - {0x001a56, 0x001a56, 0}, {0x001a57, 0x001a57, 1}, - {0x001a58, 0x001a5e, 0}, {0x001a5f, 0x001a5f, -1}, - {0x001a60, 0x001a60, 0}, {0x001a61, 0x001a61, 1}, - {0x001a62, 0x001a62, 0}, {0x001a63, 0x001a64, 1}, - {0x001a65, 0x001a6c, 0}, {0x001a6d, 0x001a72, 1}, - {0x001a73, 0x001a7c, 0}, {0x001a7d, 0x001a7e, -1}, - {0x001a7f, 0x001a7f, 0}, {0x001a80, 0x001a89, 1}, - {0x001a8a, 0x001a8f, -1}, {0x001a90, 0x001a99, 1}, - {0x001a9a, 0x001a9f, -1}, {0x001aa0, 0x001aad, 1}, - {0x001aae, 0x001aaf, -1}, {0x001ab0, 0x001ace, 0}, - {0x001acf, 0x001aff, -1}, {0x001b00, 0x001b03, 0}, - {0x001b04, 0x001b33, 1}, {0x001b34, 0x001b34, 0}, - {0x001b35, 0x001b35, 1}, {0x001b36, 0x001b3a, 0}, - {0x001b3b, 0x001b3b, 1}, {0x001b3c, 0x001b3c, 0}, - {0x001b3d, 0x001b41, 1}, {0x001b42, 0x001b42, 0}, - {0x001b43, 0x001b4c, 1}, {0x001b4d, 0x001b4d, -1}, - {0x001b4e, 0x001b6a, 1}, {0x001b6b, 0x001b73, 0}, - {0x001b74, 0x001b7f, 1}, {0x001b80, 0x001b81, 0}, - {0x001b82, 0x001ba1, 1}, {0x001ba2, 0x001ba5, 0}, - {0x001ba6, 0x001ba7, 1}, {0x001ba8, 0x001ba9, 0}, - {0x001baa, 0x001baa, 1}, {0x001bab, 0x001bad, 0}, - {0x001bae, 0x001be5, 1}, {0x001be6, 0x001be6, 0}, - {0x001be7, 0x001be7, 1}, {0x001be8, 0x001be9, 0}, - {0x001bea, 0x001bec, 1}, {0x001bed, 0x001bed, 0}, - {0x001bee, 0x001bee, 1}, {0x001bef, 0x001bf1, 0}, - {0x001bf2, 0x001bf3, 1}, {0x001bf4, 0x001bfb, -1}, - {0x001bfc, 0x001c2b, 1}, {0x001c2c, 0x001c33, 0}, - {0x001c34, 0x001c35, 1}, {0x001c36, 0x001c37, 0}, - {0x001c38, 0x001c3a, -1}, {0x001c3b, 0x001c49, 1}, - {0x001c4a, 0x001c4c, -1}, {0x001c4d, 0x001c8a, 1}, - {0x001c8b, 0x001c8f, -1}, {0x001c90, 0x001cba, 1}, - {0x001cbb, 0x001cbc, -1}, {0x001cbd, 0x001cc7, 1}, - {0x001cc8, 0x001ccf, -1}, {0x001cd0, 0x001cd2, 0}, - {0x001cd3, 0x001cd3, 1}, {0x001cd4, 0x001ce0, 0}, - {0x001ce1, 0x001ce1, 1}, {0x001ce2, 0x001ce8, 0}, - {0x001ce9, 0x001cec, 1}, {0x001ced, 0x001ced, 0}, - {0x001cee, 0x001cf3, 1}, {0x001cf4, 0x001cf4, 0}, - {0x001cf5, 0x001cf7, 1}, {0x001cf8, 0x001cf9, 0}, - {0x001cfa, 0x001cfa, 1}, {0x001cfb, 0x001cff, -1}, - {0x001d00, 0x001dbf, 1}, {0x001dc0, 0x001dff, 0}, - {0x001e00, 0x001f15, 1}, {0x001f16, 0x001f17, -1}, - {0x001f18, 0x001f1d, 1}, {0x001f1e, 0x001f1f, -1}, - {0x001f20, 0x001f45, 1}, {0x001f46, 0x001f47, -1}, - {0x001f48, 0x001f4d, 1}, {0x001f4e, 0x001f4f, -1}, - {0x001f50, 0x001f57, 1}, {0x001f58, 0x001f58, -1}, - {0x001f59, 0x001f59, 1}, {0x001f5a, 0x001f5a, -1}, - {0x001f5b, 0x001f5b, 1}, {0x001f5c, 0x001f5c, -1}, - {0x001f5d, 0x001f5d, 1}, {0x001f5e, 0x001f5e, -1}, - {0x001f5f, 0x001f7d, 1}, {0x001f7e, 0x001f7f, -1}, - {0x001f80, 0x001fb4, 1}, {0x001fb5, 0x001fb5, -1}, - {0x001fb6, 0x001fc4, 1}, {0x001fc5, 0x001fc5, -1}, - {0x001fc6, 0x001fd3, 1}, {0x001fd4, 0x001fd5, -1}, - {0x001fd6, 0x001fdb, 1}, {0x001fdc, 0x001fdc, -1}, - {0x001fdd, 0x001fef, 1}, {0x001ff0, 0x001ff1, -1}, - {0x001ff2, 0x001ff4, 1}, {0x001ff5, 0x001ff5, -1}, - {0x001ff6, 0x001ffe, 1}, {0x001fff, 0x001fff, -1}, - {0x002000, 0x00200a, 1}, {0x00200b, 0x00200f, 0}, - {0x002010, 0x002027, 1}, {0x002028, 0x002029, -1}, - {0x00202a, 0x00202e, 0}, {0x00202f, 0x00205f, 1}, - {0x002060, 0x002064, 0}, {0x002065, 0x002065, -1}, - {0x002066, 0x00206f, 0}, {0x002070, 0x002071, 1}, - {0x002072, 0x002073, -1}, {0x002074, 0x00208e, 1}, - {0x00208f, 0x00208f, -1}, {0x002090, 0x00209c, 1}, - {0x00209d, 0x00209f, -1}, {0x0020a0, 0x0020c0, 1}, - {0x0020c1, 0x0020cf, -1}, {0x0020d0, 0x0020f0, 0}, - {0x0020f1, 0x0020ff, -1}, {0x002100, 0x00218b, 1}, - {0x00218c, 0x00218f, -1}, {0x002190, 0x002319, 1}, - {0x00231a, 0x00231b, 2}, {0x00231c, 0x002328, 1}, - {0x002329, 0x00232a, 2}, {0x00232b, 0x0023e8, 1}, - {0x0023e9, 0x0023ec, 2}, {0x0023ed, 0x0023ef, 1}, - {0x0023f0, 0x0023f0, 2}, {0x0023f1, 0x0023f2, 1}, - {0x0023f3, 0x0023f3, 2}, {0x0023f4, 0x002429, 1}, - {0x00242a, 0x00243f, -1}, {0x002440, 0x00244a, 1}, - {0x00244b, 0x00245f, -1}, {0x002460, 0x0025fc, 1}, - {0x0025fd, 0x0025fe, 2}, {0x0025ff, 0x002613, 1}, - {0x002614, 0x002615, 2}, {0x002616, 0x00262f, 1}, - {0x002630, 0x002637, 2}, {0x002638, 0x002647, 1}, - {0x002648, 0x002653, 2}, {0x002654, 0x00267e, 1}, - {0x00267f, 0x00267f, 2}, {0x002680, 0x002689, 1}, - {0x00268a, 0x00268f, 2}, {0x002690, 0x002692, 1}, - {0x002693, 0x002693, 2}, {0x002694, 0x0026a0, 1}, - {0x0026a1, 0x0026a1, 2}, {0x0026a2, 0x0026a9, 1}, - {0x0026aa, 0x0026ab, 2}, {0x0026ac, 0x0026bc, 1}, - {0x0026bd, 0x0026be, 2}, {0x0026bf, 0x0026c3, 1}, - {0x0026c4, 0x0026c5, 2}, {0x0026c6, 0x0026cd, 1}, - {0x0026ce, 0x0026ce, 2}, {0x0026cf, 0x0026d3, 1}, - {0x0026d4, 0x0026d4, 2}, {0x0026d5, 0x0026e9, 1}, - {0x0026ea, 0x0026ea, 2}, {0x0026eb, 0x0026f1, 1}, - {0x0026f2, 0x0026f3, 2}, {0x0026f4, 0x0026f4, 1}, - {0x0026f5, 0x0026f5, 2}, {0x0026f6, 0x0026f9, 1}, - {0x0026fa, 0x0026fa, 2}, {0x0026fb, 0x0026fc, 1}, - {0x0026fd, 0x0026fd, 2}, {0x0026fe, 0x002704, 1}, - {0x002705, 0x002705, 2}, {0x002706, 0x002709, 1}, - {0x00270a, 0x00270b, 2}, {0x00270c, 0x002727, 1}, - {0x002728, 0x002728, 2}, {0x002729, 0x00274b, 1}, - {0x00274c, 0x00274c, 2}, {0x00274d, 0x00274d, 1}, - {0x00274e, 0x00274e, 2}, {0x00274f, 0x002752, 1}, - {0x002753, 0x002755, 2}, {0x002756, 0x002756, 1}, - {0x002757, 0x002757, 2}, {0x002758, 0x002794, 1}, - {0x002795, 0x002797, 2}, {0x002798, 0x0027af, 1}, - {0x0027b0, 0x0027b0, 2}, {0x0027b1, 0x0027be, 1}, - {0x0027bf, 0x0027bf, 2}, {0x0027c0, 0x002b1a, 1}, - {0x002b1b, 0x002b1c, 2}, {0x002b1d, 0x002b4f, 1}, - {0x002b50, 0x002b50, 2}, {0x002b51, 0x002b54, 1}, - {0x002b55, 0x002b55, 2}, {0x002b56, 0x002b73, 1}, - {0x002b74, 0x002b75, -1}, {0x002b76, 0x002b95, 1}, - {0x002b96, 0x002b96, -1}, {0x002b97, 0x002cee, 1}, - {0x002cef, 0x002cf1, 0}, {0x002cf2, 0x002cf3, 1}, - {0x002cf4, 0x002cf8, -1}, {0x002cf9, 0x002d25, 1}, - {0x002d26, 0x002d26, -1}, {0x002d27, 0x002d27, 1}, - {0x002d28, 0x002d2c, -1}, {0x002d2d, 0x002d2d, 1}, - {0x002d2e, 0x002d2f, -1}, {0x002d30, 0x002d67, 1}, - {0x002d68, 0x002d6e, -1}, {0x002d6f, 0x002d70, 1}, - {0x002d71, 0x002d7e, -1}, {0x002d7f, 0x002d7f, 0}, - {0x002d80, 0x002d96, 1}, {0x002d97, 0x002d9f, -1}, - {0x002da0, 0x002da6, 1}, {0x002da7, 0x002da7, -1}, - {0x002da8, 0x002dae, 1}, {0x002daf, 0x002daf, -1}, - {0x002db0, 0x002db6, 1}, {0x002db7, 0x002db7, -1}, - {0x002db8, 0x002dbe, 1}, {0x002dbf, 0x002dbf, -1}, - {0x002dc0, 0x002dc6, 1}, {0x002dc7, 0x002dc7, -1}, - {0x002dc8, 0x002dce, 1}, {0x002dcf, 0x002dcf, -1}, - {0x002dd0, 0x002dd6, 1}, {0x002dd7, 0x002dd7, -1}, - {0x002dd8, 0x002dde, 1}, {0x002ddf, 0x002ddf, -1}, - {0x002de0, 0x002dff, 0}, {0x002e00, 0x002e5d, 1}, - {0x002e5e, 0x002e7f, -1}, {0x002e80, 0x002e99, 2}, - {0x002e9a, 0x002e9a, -1}, {0x002e9b, 0x002ef3, 2}, - {0x002ef4, 0x002eff, -1}, {0x002f00, 0x002fd5, 2}, - {0x002fd6, 0x002fef, -1}, {0x002ff0, 0x003029, 2}, - {0x00302a, 0x00302d, 0}, {0x00302e, 0x00303e, 2}, - {0x00303f, 0x00303f, 1}, {0x003040, 0x003040, -1}, - {0x003041, 0x003096, 2}, {0x003097, 0x003098, -1}, - {0x003099, 0x00309a, 0}, {0x00309b, 0x0030ff, 2}, - {0x003100, 0x003104, -1}, {0x003105, 0x00312f, 2}, - {0x003130, 0x003130, -1}, {0x003131, 0x003163, 2}, - {0x003164, 0x003164, 0}, {0x003165, 0x00318e, 2}, - {0x00318f, 0x00318f, -1}, {0x003190, 0x0031e5, 2}, - {0x0031e6, 0x0031ee, -1}, {0x0031ef, 0x00321e, 2}, - {0x00321f, 0x00321f, -1}, {0x003220, 0x00a48c, 2}, - {0x00a48d, 0x00a48f, -1}, {0x00a490, 0x00a4c6, 2}, - {0x00a4c7, 0x00a4cf, -1}, {0x00a4d0, 0x00a62b, 1}, - {0x00a62c, 0x00a63f, -1}, {0x00a640, 0x00a66e, 1}, - {0x00a66f, 0x00a672, 0}, {0x00a673, 0x00a673, 1}, - {0x00a674, 0x00a67d, 0}, {0x00a67e, 0x00a69d, 1}, - {0x00a69e, 0x00a69f, 0}, {0x00a6a0, 0x00a6ef, 1}, - {0x00a6f0, 0x00a6f1, 0}, {0x00a6f2, 0x00a6f7, 1}, - {0x00a6f8, 0x00a6ff, -1}, {0x00a700, 0x00a7cd, 1}, - {0x00a7ce, 0x00a7cf, -1}, {0x00a7d0, 0x00a7d1, 1}, - {0x00a7d2, 0x00a7d2, -1}, {0x00a7d3, 0x00a7d3, 1}, - {0x00a7d4, 0x00a7d4, -1}, {0x00a7d5, 0x00a7dc, 1}, - {0x00a7dd, 0x00a7f1, -1}, {0x00a7f2, 0x00a801, 1}, - {0x00a802, 0x00a802, 0}, {0x00a803, 0x00a805, 1}, - {0x00a806, 0x00a806, 0}, {0x00a807, 0x00a80a, 1}, - {0x00a80b, 0x00a80b, 0}, {0x00a80c, 0x00a824, 1}, - {0x00a825, 0x00a826, 0}, {0x00a827, 0x00a82b, 1}, - {0x00a82c, 0x00a82c, 0}, {0x00a82d, 0x00a82f, -1}, - {0x00a830, 0x00a839, 1}, {0x00a83a, 0x00a83f, -1}, - {0x00a840, 0x00a877, 1}, {0x00a878, 0x00a87f, -1}, - {0x00a880, 0x00a8c3, 1}, {0x00a8c4, 0x00a8c5, 0}, - {0x00a8c6, 0x00a8cd, -1}, {0x00a8ce, 0x00a8d9, 1}, - {0x00a8da, 0x00a8df, -1}, {0x00a8e0, 0x00a8f1, 0}, - {0x00a8f2, 0x00a8fe, 1}, {0x00a8ff, 0x00a8ff, 0}, - {0x00a900, 0x00a925, 1}, {0x00a926, 0x00a92d, 0}, - {0x00a92e, 0x00a946, 1}, {0x00a947, 0x00a951, 0}, - {0x00a952, 0x00a953, 1}, {0x00a954, 0x00a95e, -1}, - {0x00a95f, 0x00a95f, 1}, {0x00a960, 0x00a97c, 2}, - {0x00a97d, 0x00a97f, -1}, {0x00a980, 0x00a982, 0}, - {0x00a983, 0x00a9b2, 1}, {0x00a9b3, 0x00a9b3, 0}, - {0x00a9b4, 0x00a9b5, 1}, {0x00a9b6, 0x00a9b9, 0}, - {0x00a9ba, 0x00a9bb, 1}, {0x00a9bc, 0x00a9bd, 0}, - {0x00a9be, 0x00a9cd, 1}, {0x00a9ce, 0x00a9ce, -1}, - {0x00a9cf, 0x00a9d9, 1}, {0x00a9da, 0x00a9dd, -1}, - {0x00a9de, 0x00a9e4, 1}, {0x00a9e5, 0x00a9e5, 0}, - {0x00a9e6, 0x00a9fe, 1}, {0x00a9ff, 0x00a9ff, -1}, - {0x00aa00, 0x00aa28, 1}, {0x00aa29, 0x00aa2e, 0}, - {0x00aa2f, 0x00aa30, 1}, {0x00aa31, 0x00aa32, 0}, - {0x00aa33, 0x00aa34, 1}, {0x00aa35, 0x00aa36, 0}, - {0x00aa37, 0x00aa3f, -1}, {0x00aa40, 0x00aa42, 1}, - {0x00aa43, 0x00aa43, 0}, {0x00aa44, 0x00aa4b, 1}, - {0x00aa4c, 0x00aa4c, 0}, {0x00aa4d, 0x00aa4d, 1}, - {0x00aa4e, 0x00aa4f, -1}, {0x00aa50, 0x00aa59, 1}, - {0x00aa5a, 0x00aa5b, -1}, {0x00aa5c, 0x00aa7b, 1}, - {0x00aa7c, 0x00aa7c, 0}, {0x00aa7d, 0x00aaaf, 1}, - {0x00aab0, 0x00aab0, 0}, {0x00aab1, 0x00aab1, 1}, - {0x00aab2, 0x00aab4, 0}, {0x00aab5, 0x00aab6, 1}, - {0x00aab7, 0x00aab8, 0}, {0x00aab9, 0x00aabd, 1}, - {0x00aabe, 0x00aabf, 0}, {0x00aac0, 0x00aac0, 1}, - {0x00aac1, 0x00aac1, 0}, {0x00aac2, 0x00aac2, 1}, - {0x00aac3, 0x00aada, -1}, {0x00aadb, 0x00aaeb, 1}, - {0x00aaec, 0x00aaed, 0}, {0x00aaee, 0x00aaf5, 1}, - {0x00aaf6, 0x00aaf6, 0}, {0x00aaf7, 0x00ab00, -1}, - {0x00ab01, 0x00ab06, 1}, {0x00ab07, 0x00ab08, -1}, - {0x00ab09, 0x00ab0e, 1}, {0x00ab0f, 0x00ab10, -1}, - {0x00ab11, 0x00ab16, 1}, {0x00ab17, 0x00ab1f, -1}, - {0x00ab20, 0x00ab26, 1}, {0x00ab27, 0x00ab27, -1}, - {0x00ab28, 0x00ab2e, 1}, {0x00ab2f, 0x00ab2f, -1}, - {0x00ab30, 0x00ab6b, 1}, {0x00ab6c, 0x00ab6f, -1}, - {0x00ab70, 0x00abe4, 1}, {0x00abe5, 0x00abe5, 0}, - {0x00abe6, 0x00abe7, 1}, {0x00abe8, 0x00abe8, 0}, - {0x00abe9, 0x00abec, 1}, {0x00abed, 0x00abed, 0}, - {0x00abee, 0x00abef, -1}, {0x00abf0, 0x00abf9, 1}, - {0x00abfa, 0x00abff, -1}, {0x00ac00, 0x00d7a3, 2}, - {0x00d7a4, 0x00d7af, -1}, {0x00d7b0, 0x00d7c6, 0}, - {0x00d7c7, 0x00d7ca, -1}, {0x00d7cb, 0x00d7fb, 0}, - {0x00d7fc, 0x00dfff, -1}, {0x00e000, 0x00f8ff, 1}, - {0x00f900, 0x00fa6d, 2}, {0x00fa6e, 0x00fa6f, -1}, - {0x00fa70, 0x00fad9, 2}, {0x00fada, 0x00faff, -1}, - {0x00fb00, 0x00fb06, 1}, {0x00fb07, 0x00fb12, -1}, - {0x00fb13, 0x00fb17, 1}, {0x00fb18, 0x00fb1c, -1}, - {0x00fb1d, 0x00fb1d, 1}, {0x00fb1e, 0x00fb1e, 0}, - {0x00fb1f, 0x00fb36, 1}, {0x00fb37, 0x00fb37, -1}, - {0x00fb38, 0x00fb3c, 1}, {0x00fb3d, 0x00fb3d, -1}, - {0x00fb3e, 0x00fb3e, 1}, {0x00fb3f, 0x00fb3f, -1}, - {0x00fb40, 0x00fb41, 1}, {0x00fb42, 0x00fb42, -1}, - {0x00fb43, 0x00fb44, 1}, {0x00fb45, 0x00fb45, -1}, - {0x00fb46, 0x00fbc2, 1}, {0x00fbc3, 0x00fbd2, -1}, - {0x00fbd3, 0x00fd8f, 1}, {0x00fd90, 0x00fd91, -1}, - {0x00fd92, 0x00fdc7, 1}, {0x00fdc8, 0x00fdce, -1}, - {0x00fdcf, 0x00fdcf, 1}, {0x00fdd0, 0x00fdef, -1}, - {0x00fdf0, 0x00fdff, 1}, {0x00fe00, 0x00fe0f, 0}, - {0x00fe10, 0x00fe19, 2}, {0x00fe1a, 0x00fe1f, -1}, - {0x00fe20, 0x00fe2f, 0}, {0x00fe30, 0x00fe52, 2}, - {0x00fe53, 0x00fe53, -1}, {0x00fe54, 0x00fe66, 2}, - {0x00fe67, 0x00fe67, -1}, {0x00fe68, 0x00fe6b, 2}, - {0x00fe6c, 0x00fe6f, -1}, {0x00fe70, 0x00fe74, 1}, - {0x00fe75, 0x00fe75, -1}, {0x00fe76, 0x00fefc, 1}, - {0x00fefd, 0x00fefe, -1}, {0x00feff, 0x00feff, 0}, - {0x00ff00, 0x00ff00, -1}, {0x00ff01, 0x00ff60, 2}, - {0x00ff61, 0x00ff9f, 1}, {0x00ffa0, 0x00ffa0, 0}, - {0x00ffa1, 0x00ffbe, 1}, {0x00ffbf, 0x00ffc1, -1}, - {0x00ffc2, 0x00ffc7, 1}, {0x00ffc8, 0x00ffc9, -1}, - {0x00ffca, 0x00ffcf, 1}, {0x00ffd0, 0x00ffd1, -1}, - {0x00ffd2, 0x00ffd7, 1}, {0x00ffd8, 0x00ffd9, -1}, - {0x00ffda, 0x00ffdc, 1}, {0x00ffdd, 0x00ffdf, -1}, - {0x00ffe0, 0x00ffe6, 2}, {0x00ffe7, 0x00ffe7, -1}, - {0x00ffe8, 0x00ffee, 1}, {0x00ffef, 0x00fff8, -1}, - {0x00fff9, 0x00fffd, 1}, {0x00fffe, 0x00ffff, -1}, - {0x010000, 0x01000b, 1}, {0x01000c, 0x01000c, -1}, - {0x01000d, 0x010026, 1}, {0x010027, 0x010027, -1}, - {0x010028, 0x01003a, 1}, {0x01003b, 0x01003b, -1}, - {0x01003c, 0x01003d, 1}, {0x01003e, 0x01003e, -1}, - {0x01003f, 0x01004d, 1}, {0x01004e, 0x01004f, -1}, - {0x010050, 0x01005d, 1}, {0x01005e, 0x01007f, -1}, - {0x010080, 0x0100fa, 1}, {0x0100fb, 0x0100ff, -1}, - {0x010100, 0x010102, 1}, {0x010103, 0x010106, -1}, - {0x010107, 0x010133, 1}, {0x010134, 0x010136, -1}, - {0x010137, 0x01018e, 1}, {0x01018f, 0x01018f, -1}, - {0x010190, 0x01019c, 1}, {0x01019d, 0x01019f, -1}, - {0x0101a0, 0x0101a0, 1}, {0x0101a1, 0x0101cf, -1}, - {0x0101d0, 0x0101fc, 1}, {0x0101fd, 0x0101fd, 0}, - {0x0101fe, 0x01027f, -1}, {0x010280, 0x01029c, 1}, - {0x01029d, 0x01029f, -1}, {0x0102a0, 0x0102d0, 1}, - {0x0102d1, 0x0102df, -1}, {0x0102e0, 0x0102e0, 0}, - {0x0102e1, 0x0102fb, 1}, {0x0102fc, 0x0102ff, -1}, - {0x010300, 0x010323, 1}, {0x010324, 0x01032c, -1}, - {0x01032d, 0x01034a, 1}, {0x01034b, 0x01034f, -1}, - {0x010350, 0x010375, 1}, {0x010376, 0x01037a, 0}, - {0x01037b, 0x01037f, -1}, {0x010380, 0x01039d, 1}, - {0x01039e, 0x01039e, -1}, {0x01039f, 0x0103c3, 1}, - {0x0103c4, 0x0103c7, -1}, {0x0103c8, 0x0103d5, 1}, - {0x0103d6, 0x0103ff, -1}, {0x010400, 0x01049d, 1}, - {0x01049e, 0x01049f, -1}, {0x0104a0, 0x0104a9, 1}, - {0x0104aa, 0x0104af, -1}, {0x0104b0, 0x0104d3, 1}, - {0x0104d4, 0x0104d7, -1}, {0x0104d8, 0x0104fb, 1}, - {0x0104fc, 0x0104ff, -1}, {0x010500, 0x010527, 1}, - {0x010528, 0x01052f, -1}, {0x010530, 0x010563, 1}, - {0x010564, 0x01056e, -1}, {0x01056f, 0x01057a, 1}, - {0x01057b, 0x01057b, -1}, {0x01057c, 0x01058a, 1}, - {0x01058b, 0x01058b, -1}, {0x01058c, 0x010592, 1}, - {0x010593, 0x010593, -1}, {0x010594, 0x010595, 1}, - {0x010596, 0x010596, -1}, {0x010597, 0x0105a1, 1}, - {0x0105a2, 0x0105a2, -1}, {0x0105a3, 0x0105b1, 1}, - {0x0105b2, 0x0105b2, -1}, {0x0105b3, 0x0105b9, 1}, - {0x0105ba, 0x0105ba, -1}, {0x0105bb, 0x0105bc, 1}, - {0x0105bd, 0x0105bf, -1}, {0x0105c0, 0x0105f3, 1}, - {0x0105f4, 0x0105ff, -1}, {0x010600, 0x010736, 1}, - {0x010737, 0x01073f, -1}, {0x010740, 0x010755, 1}, - {0x010756, 0x01075f, -1}, {0x010760, 0x010767, 1}, - {0x010768, 0x01077f, -1}, {0x010780, 0x010785, 1}, - {0x010786, 0x010786, -1}, {0x010787, 0x0107b0, 1}, - {0x0107b1, 0x0107b1, -1}, {0x0107b2, 0x0107ba, 1}, - {0x0107bb, 0x0107ff, -1}, {0x010800, 0x010805, 1}, - {0x010806, 0x010807, -1}, {0x010808, 0x010808, 1}, - {0x010809, 0x010809, -1}, {0x01080a, 0x010835, 1}, - {0x010836, 0x010836, -1}, {0x010837, 0x010838, 1}, - {0x010839, 0x01083b, -1}, {0x01083c, 0x01083c, 1}, - {0x01083d, 0x01083e, -1}, {0x01083f, 0x010855, 1}, - {0x010856, 0x010856, -1}, {0x010857, 0x01089e, 1}, - {0x01089f, 0x0108a6, -1}, {0x0108a7, 0x0108af, 1}, - {0x0108b0, 0x0108df, -1}, {0x0108e0, 0x0108f2, 1}, - {0x0108f3, 0x0108f3, -1}, {0x0108f4, 0x0108f5, 1}, - {0x0108f6, 0x0108fa, -1}, {0x0108fb, 0x01091b, 1}, - {0x01091c, 0x01091e, -1}, {0x01091f, 0x010939, 1}, - {0x01093a, 0x01093e, -1}, {0x01093f, 0x01093f, 1}, - {0x010940, 0x01097f, -1}, {0x010980, 0x0109b7, 1}, - {0x0109b8, 0x0109bb, -1}, {0x0109bc, 0x0109cf, 1}, - {0x0109d0, 0x0109d1, -1}, {0x0109d2, 0x010a00, 1}, - {0x010a01, 0x010a03, 0}, {0x010a04, 0x010a04, -1}, - {0x010a05, 0x010a06, 0}, {0x010a07, 0x010a0b, -1}, - {0x010a0c, 0x010a0f, 0}, {0x010a10, 0x010a13, 1}, - {0x010a14, 0x010a14, -1}, {0x010a15, 0x010a17, 1}, - {0x010a18, 0x010a18, -1}, {0x010a19, 0x010a35, 1}, - {0x010a36, 0x010a37, -1}, {0x010a38, 0x010a3a, 0}, - {0x010a3b, 0x010a3e, -1}, {0x010a3f, 0x010a3f, 0}, - {0x010a40, 0x010a48, 1}, {0x010a49, 0x010a4f, -1}, - {0x010a50, 0x010a58, 1}, {0x010a59, 0x010a5f, -1}, - {0x010a60, 0x010a9f, 1}, {0x010aa0, 0x010abf, -1}, - {0x010ac0, 0x010ae4, 1}, {0x010ae5, 0x010ae6, 0}, - {0x010ae7, 0x010aea, -1}, {0x010aeb, 0x010af6, 1}, - {0x010af7, 0x010aff, -1}, {0x010b00, 0x010b35, 1}, - {0x010b36, 0x010b38, -1}, {0x010b39, 0x010b55, 1}, - {0x010b56, 0x010b57, -1}, {0x010b58, 0x010b72, 1}, - {0x010b73, 0x010b77, -1}, {0x010b78, 0x010b91, 1}, - {0x010b92, 0x010b98, -1}, {0x010b99, 0x010b9c, 1}, - {0x010b9d, 0x010ba8, -1}, {0x010ba9, 0x010baf, 1}, - {0x010bb0, 0x010bff, -1}, {0x010c00, 0x010c48, 1}, - {0x010c49, 0x010c7f, -1}, {0x010c80, 0x010cb2, 1}, - {0x010cb3, 0x010cbf, -1}, {0x010cc0, 0x010cf2, 1}, - {0x010cf3, 0x010cf9, -1}, {0x010cfa, 0x010d23, 1}, - {0x010d24, 0x010d27, 0}, {0x010d28, 0x010d2f, -1}, - {0x010d30, 0x010d39, 1}, {0x010d3a, 0x010d3f, -1}, - {0x010d40, 0x010d65, 1}, {0x010d66, 0x010d68, -1}, - {0x010d69, 0x010d6d, 0}, {0x010d6e, 0x010d85, 1}, - {0x010d86, 0x010d8d, -1}, {0x010d8e, 0x010d8f, 1}, - {0x010d90, 0x010e5f, -1}, {0x010e60, 0x010e7e, 1}, - {0x010e7f, 0x010e7f, -1}, {0x010e80, 0x010ea9, 1}, - {0x010eaa, 0x010eaa, -1}, {0x010eab, 0x010eac, 0}, - {0x010ead, 0x010ead, 1}, {0x010eae, 0x010eaf, -1}, - {0x010eb0, 0x010eb1, 1}, {0x010eb2, 0x010ec1, -1}, - {0x010ec2, 0x010ec4, 1}, {0x010ec5, 0x010efb, -1}, - {0x010efc, 0x010eff, 0}, {0x010f00, 0x010f27, 1}, - {0x010f28, 0x010f2f, -1}, {0x010f30, 0x010f45, 1}, - {0x010f46, 0x010f50, 0}, {0x010f51, 0x010f59, 1}, - {0x010f5a, 0x010f6f, -1}, {0x010f70, 0x010f81, 1}, - {0x010f82, 0x010f85, 0}, {0x010f86, 0x010f89, 1}, - {0x010f8a, 0x010faf, -1}, {0x010fb0, 0x010fcb, 1}, - {0x010fcc, 0x010fdf, -1}, {0x010fe0, 0x010ff6, 1}, - {0x010ff7, 0x010fff, -1}, {0x011000, 0x011000, 1}, - {0x011001, 0x011001, 0}, {0x011002, 0x011037, 1}, - {0x011038, 0x011046, 0}, {0x011047, 0x01104d, 1}, - {0x01104e, 0x011051, -1}, {0x011052, 0x01106f, 1}, - {0x011070, 0x011070, 0}, {0x011071, 0x011072, 1}, - {0x011073, 0x011074, 0}, {0x011075, 0x011075, 1}, - {0x011076, 0x01107e, -1}, {0x01107f, 0x011081, 0}, - {0x011082, 0x0110b2, 1}, {0x0110b3, 0x0110b6, 0}, - {0x0110b7, 0x0110b8, 1}, {0x0110b9, 0x0110ba, 0}, - {0x0110bb, 0x0110c1, 1}, {0x0110c2, 0x0110c2, 0}, - {0x0110c3, 0x0110cc, -1}, {0x0110cd, 0x0110cd, 1}, - {0x0110ce, 0x0110cf, -1}, {0x0110d0, 0x0110e8, 1}, - {0x0110e9, 0x0110ef, -1}, {0x0110f0, 0x0110f9, 1}, - {0x0110fa, 0x0110ff, -1}, {0x011100, 0x011102, 0}, - {0x011103, 0x011126, 1}, {0x011127, 0x01112b, 0}, - {0x01112c, 0x01112c, 1}, {0x01112d, 0x011134, 0}, - {0x011135, 0x011135, -1}, {0x011136, 0x011147, 1}, - {0x011148, 0x01114f, -1}, {0x011150, 0x011172, 1}, - {0x011173, 0x011173, 0}, {0x011174, 0x011176, 1}, - {0x011177, 0x01117f, -1}, {0x011180, 0x011181, 0}, - {0x011182, 0x0111b5, 1}, {0x0111b6, 0x0111be, 0}, - {0x0111bf, 0x0111c8, 1}, {0x0111c9, 0x0111cc, 0}, - {0x0111cd, 0x0111ce, 1}, {0x0111cf, 0x0111cf, 0}, - {0x0111d0, 0x0111df, 1}, {0x0111e0, 0x0111e0, -1}, - {0x0111e1, 0x0111f4, 1}, {0x0111f5, 0x0111ff, -1}, - {0x011200, 0x011211, 1}, {0x011212, 0x011212, -1}, - {0x011213, 0x01122e, 1}, {0x01122f, 0x011231, 0}, - {0x011232, 0x011233, 1}, {0x011234, 0x011234, 0}, - {0x011235, 0x011235, 1}, {0x011236, 0x011237, 0}, - {0x011238, 0x01123d, 1}, {0x01123e, 0x01123e, 0}, - {0x01123f, 0x011240, 1}, {0x011241, 0x011241, 0}, - {0x011242, 0x01127f, -1}, {0x011280, 0x011286, 1}, - {0x011287, 0x011287, -1}, {0x011288, 0x011288, 1}, - {0x011289, 0x011289, -1}, {0x01128a, 0x01128d, 1}, - {0x01128e, 0x01128e, -1}, {0x01128f, 0x01129d, 1}, - {0x01129e, 0x01129e, -1}, {0x01129f, 0x0112a9, 1}, - {0x0112aa, 0x0112af, -1}, {0x0112b0, 0x0112de, 1}, - {0x0112df, 0x0112df, 0}, {0x0112e0, 0x0112e2, 1}, - {0x0112e3, 0x0112ea, 0}, {0x0112eb, 0x0112ef, -1}, - {0x0112f0, 0x0112f9, 1}, {0x0112fa, 0x0112ff, -1}, - {0x011300, 0x011301, 0}, {0x011302, 0x011303, 1}, - {0x011304, 0x011304, -1}, {0x011305, 0x01130c, 1}, - {0x01130d, 0x01130e, -1}, {0x01130f, 0x011310, 1}, - {0x011311, 0x011312, -1}, {0x011313, 0x011328, 1}, - {0x011329, 0x011329, -1}, {0x01132a, 0x011330, 1}, - {0x011331, 0x011331, -1}, {0x011332, 0x011333, 1}, - {0x011334, 0x011334, -1}, {0x011335, 0x011339, 1}, - {0x01133a, 0x01133a, -1}, {0x01133b, 0x01133c, 0}, - {0x01133d, 0x01133f, 1}, {0x011340, 0x011340, 0}, - {0x011341, 0x011344, 1}, {0x011345, 0x011346, -1}, - {0x011347, 0x011348, 1}, {0x011349, 0x01134a, -1}, - {0x01134b, 0x01134d, 1}, {0x01134e, 0x01134f, -1}, - {0x011350, 0x011350, 1}, {0x011351, 0x011356, -1}, - {0x011357, 0x011357, 1}, {0x011358, 0x01135c, -1}, - {0x01135d, 0x011363, 1}, {0x011364, 0x011365, -1}, - {0x011366, 0x01136c, 0}, {0x01136d, 0x01136f, -1}, - {0x011370, 0x011374, 0}, {0x011375, 0x01137f, -1}, - {0x011380, 0x011389, 1}, {0x01138a, 0x01138a, -1}, - {0x01138b, 0x01138b, 1}, {0x01138c, 0x01138d, -1}, - {0x01138e, 0x01138e, 1}, {0x01138f, 0x01138f, -1}, - {0x011390, 0x0113b5, 1}, {0x0113b6, 0x0113b6, -1}, - {0x0113b7, 0x0113ba, 1}, {0x0113bb, 0x0113c0, 0}, - {0x0113c1, 0x0113c1, -1}, {0x0113c2, 0x0113c2, 1}, - {0x0113c3, 0x0113c4, -1}, {0x0113c5, 0x0113c5, 1}, - {0x0113c6, 0x0113c6, -1}, {0x0113c7, 0x0113ca, 1}, - {0x0113cb, 0x0113cb, -1}, {0x0113cc, 0x0113cd, 1}, - {0x0113ce, 0x0113ce, 0}, {0x0113cf, 0x0113cf, 1}, - {0x0113d0, 0x0113d0, 0}, {0x0113d1, 0x0113d1, 1}, - {0x0113d2, 0x0113d2, 0}, {0x0113d3, 0x0113d5, 1}, - {0x0113d6, 0x0113d6, -1}, {0x0113d7, 0x0113d8, 1}, - {0x0113d9, 0x0113e0, -1}, {0x0113e1, 0x0113e2, 0}, - {0x0113e3, 0x0113ff, -1}, {0x011400, 0x011437, 1}, - {0x011438, 0x01143f, 0}, {0x011440, 0x011441, 1}, - {0x011442, 0x011444, 0}, {0x011445, 0x011445, 1}, - {0x011446, 0x011446, 0}, {0x011447, 0x01145b, 1}, - {0x01145c, 0x01145c, -1}, {0x01145d, 0x01145d, 1}, - {0x01145e, 0x01145e, 0}, {0x01145f, 0x011461, 1}, - {0x011462, 0x01147f, -1}, {0x011480, 0x0114b2, 1}, - {0x0114b3, 0x0114b8, 0}, {0x0114b9, 0x0114b9, 1}, - {0x0114ba, 0x0114ba, 0}, {0x0114bb, 0x0114be, 1}, - {0x0114bf, 0x0114c0, 0}, {0x0114c1, 0x0114c1, 1}, - {0x0114c2, 0x0114c3, 0}, {0x0114c4, 0x0114c7, 1}, - {0x0114c8, 0x0114cf, -1}, {0x0114d0, 0x0114d9, 1}, - {0x0114da, 0x01157f, -1}, {0x011580, 0x0115b1, 1}, - {0x0115b2, 0x0115b5, 0}, {0x0115b6, 0x0115b7, -1}, - {0x0115b8, 0x0115bb, 1}, {0x0115bc, 0x0115bd, 0}, - {0x0115be, 0x0115be, 1}, {0x0115bf, 0x0115c0, 0}, - {0x0115c1, 0x0115db, 1}, {0x0115dc, 0x0115dd, 0}, - {0x0115de, 0x0115ff, -1}, {0x011600, 0x011632, 1}, - {0x011633, 0x01163a, 0}, {0x01163b, 0x01163c, 1}, - {0x01163d, 0x01163d, 0}, {0x01163e, 0x01163e, 1}, - {0x01163f, 0x011640, 0}, {0x011641, 0x011644, 1}, - {0x011645, 0x01164f, -1}, {0x011650, 0x011659, 1}, - {0x01165a, 0x01165f, -1}, {0x011660, 0x01166c, 1}, - {0x01166d, 0x01167f, -1}, {0x011680, 0x0116aa, 1}, - {0x0116ab, 0x0116ab, 0}, {0x0116ac, 0x0116ac, 1}, - {0x0116ad, 0x0116ad, 0}, {0x0116ae, 0x0116af, 1}, - {0x0116b0, 0x0116b5, 0}, {0x0116b6, 0x0116b6, 1}, - {0x0116b7, 0x0116b7, 0}, {0x0116b8, 0x0116b9, 1}, - {0x0116ba, 0x0116bf, -1}, {0x0116c0, 0x0116c9, 1}, - {0x0116ca, 0x0116cf, -1}, {0x0116d0, 0x0116e3, 1}, - {0x0116e4, 0x0116ff, -1}, {0x011700, 0x01171a, 1}, - {0x01171b, 0x01171c, -1}, {0x01171d, 0x01171d, 0}, - {0x01171e, 0x01171e, 1}, {0x01171f, 0x01171f, 0}, - {0x011720, 0x011721, 1}, {0x011722, 0x011725, 0}, - {0x011726, 0x011726, 1}, {0x011727, 0x01172b, 0}, - {0x01172c, 0x01172f, -1}, {0x011730, 0x011746, 1}, - {0x011747, 0x0117ff, -1}, {0x011800, 0x01182e, 1}, - {0x01182f, 0x011837, 0}, {0x011838, 0x011838, 1}, - {0x011839, 0x01183a, 0}, {0x01183b, 0x01183b, 1}, - {0x01183c, 0x01189f, -1}, {0x0118a0, 0x0118f2, 1}, - {0x0118f3, 0x0118fe, -1}, {0x0118ff, 0x011906, 1}, - {0x011907, 0x011908, -1}, {0x011909, 0x011909, 1}, - {0x01190a, 0x01190b, -1}, {0x01190c, 0x011913, 1}, - {0x011914, 0x011914, -1}, {0x011915, 0x011916, 1}, - {0x011917, 0x011917, -1}, {0x011918, 0x011935, 1}, - {0x011936, 0x011936, -1}, {0x011937, 0x011938, 1}, - {0x011939, 0x01193a, -1}, {0x01193b, 0x01193c, 0}, - {0x01193d, 0x01193d, 1}, {0x01193e, 0x01193e, 0}, - {0x01193f, 0x011942, 1}, {0x011943, 0x011943, 0}, - {0x011944, 0x011946, 1}, {0x011947, 0x01194f, -1}, - {0x011950, 0x011959, 1}, {0x01195a, 0x01199f, -1}, - {0x0119a0, 0x0119a7, 1}, {0x0119a8, 0x0119a9, -1}, - {0x0119aa, 0x0119d3, 1}, {0x0119d4, 0x0119d7, 0}, - {0x0119d8, 0x0119d9, -1}, {0x0119da, 0x0119db, 0}, - {0x0119dc, 0x0119df, 1}, {0x0119e0, 0x0119e0, 0}, - {0x0119e1, 0x0119e4, 1}, {0x0119e5, 0x0119ff, -1}, - {0x011a00, 0x011a00, 1}, {0x011a01, 0x011a0a, 0}, - {0x011a0b, 0x011a32, 1}, {0x011a33, 0x011a38, 0}, - {0x011a39, 0x011a3a, 1}, {0x011a3b, 0x011a3e, 0}, - {0x011a3f, 0x011a46, 1}, {0x011a47, 0x011a47, 0}, - {0x011a48, 0x011a4f, -1}, {0x011a50, 0x011a50, 1}, - {0x011a51, 0x011a56, 0}, {0x011a57, 0x011a58, 1}, - {0x011a59, 0x011a5b, 0}, {0x011a5c, 0x011a89, 1}, - {0x011a8a, 0x011a96, 0}, {0x011a97, 0x011a97, 1}, - {0x011a98, 0x011a99, 0}, {0x011a9a, 0x011aa2, 1}, - {0x011aa3, 0x011aaf, -1}, {0x011ab0, 0x011af8, 1}, - {0x011af9, 0x011aff, -1}, {0x011b00, 0x011b09, 1}, - {0x011b0a, 0x011bbf, -1}, {0x011bc0, 0x011be1, 1}, - {0x011be2, 0x011bef, -1}, {0x011bf0, 0x011bf9, 1}, - {0x011bfa, 0x011bff, -1}, {0x011c00, 0x011c08, 1}, - {0x011c09, 0x011c09, -1}, {0x011c0a, 0x011c2f, 1}, - {0x011c30, 0x011c36, 0}, {0x011c37, 0x011c37, -1}, - {0x011c38, 0x011c3d, 0}, {0x011c3e, 0x011c3e, 1}, - {0x011c3f, 0x011c3f, 0}, {0x011c40, 0x011c45, 1}, - {0x011c46, 0x011c4f, -1}, {0x011c50, 0x011c6c, 1}, - {0x011c6d, 0x011c6f, -1}, {0x011c70, 0x011c8f, 1}, - {0x011c90, 0x011c91, -1}, {0x011c92, 0x011ca7, 0}, - {0x011ca8, 0x011ca8, -1}, {0x011ca9, 0x011ca9, 1}, - {0x011caa, 0x011cb0, 0}, {0x011cb1, 0x011cb1, 1}, - {0x011cb2, 0x011cb3, 0}, {0x011cb4, 0x011cb4, 1}, - {0x011cb5, 0x011cb6, 0}, {0x011cb7, 0x011cff, -1}, - {0x011d00, 0x011d06, 1}, {0x011d07, 0x011d07, -1}, - {0x011d08, 0x011d09, 1}, {0x011d0a, 0x011d0a, -1}, - {0x011d0b, 0x011d30, 1}, {0x011d31, 0x011d36, 0}, - {0x011d37, 0x011d39, -1}, {0x011d3a, 0x011d3a, 0}, - {0x011d3b, 0x011d3b, -1}, {0x011d3c, 0x011d3d, 0}, - {0x011d3e, 0x011d3e, -1}, {0x011d3f, 0x011d45, 0}, - {0x011d46, 0x011d46, 1}, {0x011d47, 0x011d47, 0}, - {0x011d48, 0x011d4f, -1}, {0x011d50, 0x011d59, 1}, - {0x011d5a, 0x011d5f, -1}, {0x011d60, 0x011d65, 1}, - {0x011d66, 0x011d66, -1}, {0x011d67, 0x011d68, 1}, - {0x011d69, 0x011d69, -1}, {0x011d6a, 0x011d8e, 1}, - {0x011d8f, 0x011d8f, -1}, {0x011d90, 0x011d91, 0}, - {0x011d92, 0x011d92, -1}, {0x011d93, 0x011d94, 1}, - {0x011d95, 0x011d95, 0}, {0x011d96, 0x011d96, 1}, - {0x011d97, 0x011d97, 0}, {0x011d98, 0x011d98, 1}, - {0x011d99, 0x011d9f, -1}, {0x011da0, 0x011da9, 1}, - {0x011daa, 0x011edf, -1}, {0x011ee0, 0x011ef2, 1}, - {0x011ef3, 0x011ef4, 0}, {0x011ef5, 0x011ef8, 1}, - {0x011ef9, 0x011eff, -1}, {0x011f00, 0x011f01, 0}, - {0x011f02, 0x011f10, 1}, {0x011f11, 0x011f11, -1}, - {0x011f12, 0x011f35, 1}, {0x011f36, 0x011f3a, 0}, - {0x011f3b, 0x011f3d, -1}, {0x011f3e, 0x011f3f, 1}, - {0x011f40, 0x011f40, 0}, {0x011f41, 0x011f41, 1}, - {0x011f42, 0x011f42, 0}, {0x011f43, 0x011f59, 1}, - {0x011f5a, 0x011f5a, 0}, {0x011f5b, 0x011faf, -1}, - {0x011fb0, 0x011fb0, 1}, {0x011fb1, 0x011fbf, -1}, - {0x011fc0, 0x011ff1, 1}, {0x011ff2, 0x011ffe, -1}, - {0x011fff, 0x012399, 1}, {0x01239a, 0x0123ff, -1}, - {0x012400, 0x01246e, 1}, {0x01246f, 0x01246f, -1}, - {0x012470, 0x012474, 1}, {0x012475, 0x01247f, -1}, - {0x012480, 0x012543, 1}, {0x012544, 0x012f8f, -1}, - {0x012f90, 0x012ff2, 1}, {0x012ff3, 0x012fff, -1}, - {0x013000, 0x01343f, 1}, {0x013440, 0x013440, 0}, - {0x013441, 0x013446, 1}, {0x013447, 0x013455, 0}, - {0x013456, 0x01345f, -1}, {0x013460, 0x0143fa, 1}, - {0x0143fb, 0x0143ff, -1}, {0x014400, 0x014646, 1}, - {0x014647, 0x0160ff, -1}, {0x016100, 0x01611d, 1}, - {0x01611e, 0x016129, 0}, {0x01612a, 0x01612c, 1}, - {0x01612d, 0x01612f, 0}, {0x016130, 0x016139, 1}, - {0x01613a, 0x0167ff, -1}, {0x016800, 0x016a38, 1}, - {0x016a39, 0x016a3f, -1}, {0x016a40, 0x016a5e, 1}, - {0x016a5f, 0x016a5f, -1}, {0x016a60, 0x016a69, 1}, - {0x016a6a, 0x016a6d, -1}, {0x016a6e, 0x016abe, 1}, - {0x016abf, 0x016abf, -1}, {0x016ac0, 0x016ac9, 1}, - {0x016aca, 0x016acf, -1}, {0x016ad0, 0x016aed, 1}, - {0x016aee, 0x016aef, -1}, {0x016af0, 0x016af4, 0}, - {0x016af5, 0x016af5, 1}, {0x016af6, 0x016aff, -1}, - {0x016b00, 0x016b2f, 1}, {0x016b30, 0x016b36, 0}, - {0x016b37, 0x016b45, 1}, {0x016b46, 0x016b4f, -1}, - {0x016b50, 0x016b59, 1}, {0x016b5a, 0x016b5a, -1}, - {0x016b5b, 0x016b61, 1}, {0x016b62, 0x016b62, -1}, - {0x016b63, 0x016b77, 1}, {0x016b78, 0x016b7c, -1}, - {0x016b7d, 0x016b8f, 1}, {0x016b90, 0x016d3f, -1}, - {0x016d40, 0x016d79, 1}, {0x016d7a, 0x016e3f, -1}, - {0x016e40, 0x016e9a, 1}, {0x016e9b, 0x016eff, -1}, - {0x016f00, 0x016f4a, 1}, {0x016f4b, 0x016f4e, -1}, - {0x016f4f, 0x016f4f, 0}, {0x016f50, 0x016f87, 1}, - {0x016f88, 0x016f8e, -1}, {0x016f8f, 0x016f92, 0}, - {0x016f93, 0x016f9f, 1}, {0x016fa0, 0x016fdf, -1}, - {0x016fe0, 0x016fe3, 2}, {0x016fe4, 0x016fe4, 0}, - {0x016fe5, 0x016fef, -1}, {0x016ff0, 0x016ff1, 2}, - {0x016ff2, 0x016fff, -1}, {0x017000, 0x0187f7, 2}, - {0x0187f8, 0x0187ff, -1}, {0x018800, 0x018cd5, 2}, - {0x018cd6, 0x018cfe, -1}, {0x018cff, 0x018d08, 2}, - {0x018d09, 0x01afef, -1}, {0x01aff0, 0x01aff3, 2}, - {0x01aff4, 0x01aff4, -1}, {0x01aff5, 0x01affb, 2}, - {0x01affc, 0x01affc, -1}, {0x01affd, 0x01affe, 2}, - {0x01afff, 0x01afff, -1}, {0x01b000, 0x01b122, 2}, - {0x01b123, 0x01b131, -1}, {0x01b132, 0x01b132, 2}, - {0x01b133, 0x01b14f, -1}, {0x01b150, 0x01b152, 2}, - {0x01b153, 0x01b154, -1}, {0x01b155, 0x01b155, 2}, - {0x01b156, 0x01b163, -1}, {0x01b164, 0x01b167, 2}, - {0x01b168, 0x01b16f, -1}, {0x01b170, 0x01b2fb, 2}, - {0x01b2fc, 0x01bbff, -1}, {0x01bc00, 0x01bc6a, 1}, - {0x01bc6b, 0x01bc6f, -1}, {0x01bc70, 0x01bc7c, 1}, - {0x01bc7d, 0x01bc7f, -1}, {0x01bc80, 0x01bc88, 1}, - {0x01bc89, 0x01bc8f, -1}, {0x01bc90, 0x01bc99, 1}, - {0x01bc9a, 0x01bc9b, -1}, {0x01bc9c, 0x01bc9c, 1}, - {0x01bc9d, 0x01bc9e, 0}, {0x01bc9f, 0x01bc9f, 1}, - {0x01bca0, 0x01bca3, 0}, {0x01bca4, 0x01cbff, -1}, - {0x01cc00, 0x01ccf9, 1}, {0x01ccfa, 0x01ccff, -1}, - {0x01cd00, 0x01ceb3, 1}, {0x01ceb4, 0x01ceff, -1}, - {0x01cf00, 0x01cf2d, 0}, {0x01cf2e, 0x01cf2f, -1}, - {0x01cf30, 0x01cf46, 0}, {0x01cf47, 0x01cf4f, -1}, - {0x01cf50, 0x01cfc3, 1}, {0x01cfc4, 0x01cfff, -1}, - {0x01d000, 0x01d0f5, 1}, {0x01d0f6, 0x01d0ff, -1}, - {0x01d100, 0x01d126, 1}, {0x01d127, 0x01d128, -1}, - {0x01d129, 0x01d166, 1}, {0x01d167, 0x01d169, 0}, - {0x01d16a, 0x01d172, 1}, {0x01d173, 0x01d182, 0}, - {0x01d183, 0x01d184, 1}, {0x01d185, 0x01d18b, 0}, - {0x01d18c, 0x01d1a9, 1}, {0x01d1aa, 0x01d1ad, 0}, - {0x01d1ae, 0x01d1ea, 1}, {0x01d1eb, 0x01d1ff, -1}, - {0x01d200, 0x01d241, 1}, {0x01d242, 0x01d244, 0}, - {0x01d245, 0x01d245, 1}, {0x01d246, 0x01d2bf, -1}, - {0x01d2c0, 0x01d2d3, 1}, {0x01d2d4, 0x01d2df, -1}, - {0x01d2e0, 0x01d2f3, 1}, {0x01d2f4, 0x01d2ff, -1}, - {0x01d300, 0x01d356, 2}, {0x01d357, 0x01d35f, -1}, - {0x01d360, 0x01d376, 2}, {0x01d377, 0x01d378, 1}, - {0x01d379, 0x01d3ff, -1}, {0x01d400, 0x01d454, 1}, - {0x01d455, 0x01d455, -1}, {0x01d456, 0x01d49c, 1}, - {0x01d49d, 0x01d49d, -1}, {0x01d49e, 0x01d49f, 1}, - {0x01d4a0, 0x01d4a1, -1}, {0x01d4a2, 0x01d4a2, 1}, - {0x01d4a3, 0x01d4a4, -1}, {0x01d4a5, 0x01d4a6, 1}, - {0x01d4a7, 0x01d4a8, -1}, {0x01d4a9, 0x01d4ac, 1}, - {0x01d4ad, 0x01d4ad, -1}, {0x01d4ae, 0x01d4b9, 1}, - {0x01d4ba, 0x01d4ba, -1}, {0x01d4bb, 0x01d4bb, 1}, - {0x01d4bc, 0x01d4bc, -1}, {0x01d4bd, 0x01d4c3, 1}, - {0x01d4c4, 0x01d4c4, -1}, {0x01d4c5, 0x01d505, 1}, - {0x01d506, 0x01d506, -1}, {0x01d507, 0x01d50a, 1}, - {0x01d50b, 0x01d50c, -1}, {0x01d50d, 0x01d514, 1}, - {0x01d515, 0x01d515, -1}, {0x01d516, 0x01d51c, 1}, - {0x01d51d, 0x01d51d, -1}, {0x01d51e, 0x01d539, 1}, - {0x01d53a, 0x01d53a, -1}, {0x01d53b, 0x01d53e, 1}, - {0x01d53f, 0x01d53f, -1}, {0x01d540, 0x01d544, 1}, - {0x01d545, 0x01d545, -1}, {0x01d546, 0x01d546, 1}, - {0x01d547, 0x01d549, -1}, {0x01d54a, 0x01d550, 1}, - {0x01d551, 0x01d551, -1}, {0x01d552, 0x01d6a5, 1}, - {0x01d6a6, 0x01d6a7, -1}, {0x01d6a8, 0x01d7cb, 1}, - {0x01d7cc, 0x01d7cd, -1}, {0x01d7ce, 0x01d9ff, 1}, - {0x01da00, 0x01da36, 0}, {0x01da37, 0x01da3a, 1}, - {0x01da3b, 0x01da6c, 0}, {0x01da6d, 0x01da74, 1}, - {0x01da75, 0x01da75, 0}, {0x01da76, 0x01da83, 1}, - {0x01da84, 0x01da84, 0}, {0x01da85, 0x01da8b, 1}, - {0x01da8c, 0x01da9a, -1}, {0x01da9b, 0x01da9f, 0}, - {0x01daa0, 0x01daa0, -1}, {0x01daa1, 0x01daaf, 0}, - {0x01dab0, 0x01deff, -1}, {0x01df00, 0x01df1e, 1}, - {0x01df1f, 0x01df24, -1}, {0x01df25, 0x01df2a, 1}, - {0x01df2b, 0x01dfff, -1}, {0x01e000, 0x01e006, 0}, - {0x01e007, 0x01e007, -1}, {0x01e008, 0x01e018, 0}, - {0x01e019, 0x01e01a, -1}, {0x01e01b, 0x01e021, 0}, - {0x01e022, 0x01e022, -1}, {0x01e023, 0x01e024, 0}, - {0x01e025, 0x01e025, -1}, {0x01e026, 0x01e02a, 0}, - {0x01e02b, 0x01e02f, -1}, {0x01e030, 0x01e06d, 1}, - {0x01e06e, 0x01e08e, -1}, {0x01e08f, 0x01e08f, 0}, - {0x01e090, 0x01e0ff, -1}, {0x01e100, 0x01e12c, 1}, - {0x01e12d, 0x01e12f, -1}, {0x01e130, 0x01e136, 0}, - {0x01e137, 0x01e13d, 1}, {0x01e13e, 0x01e13f, -1}, - {0x01e140, 0x01e149, 1}, {0x01e14a, 0x01e14d, -1}, - {0x01e14e, 0x01e14f, 1}, {0x01e150, 0x01e28f, -1}, - {0x01e290, 0x01e2ad, 1}, {0x01e2ae, 0x01e2ae, 0}, - {0x01e2af, 0x01e2bf, -1}, {0x01e2c0, 0x01e2eb, 1}, - {0x01e2ec, 0x01e2ef, 0}, {0x01e2f0, 0x01e2f9, 1}, - {0x01e2fa, 0x01e2fe, -1}, {0x01e2ff, 0x01e2ff, 1}, - {0x01e300, 0x01e4cf, -1}, {0x01e4d0, 0x01e4eb, 1}, - {0x01e4ec, 0x01e4ef, 0}, {0x01e4f0, 0x01e4f9, 1}, - {0x01e4fa, 0x01e5cf, -1}, {0x01e5d0, 0x01e5ed, 1}, - {0x01e5ee, 0x01e5ef, 0}, {0x01e5f0, 0x01e5fa, 1}, - {0x01e5fb, 0x01e5fe, -1}, {0x01e5ff, 0x01e5ff, 1}, - {0x01e600, 0x01e7df, -1}, {0x01e7e0, 0x01e7e6, 1}, - {0x01e7e7, 0x01e7e7, -1}, {0x01e7e8, 0x01e7eb, 1}, - {0x01e7ec, 0x01e7ec, -1}, {0x01e7ed, 0x01e7ee, 1}, - {0x01e7ef, 0x01e7ef, -1}, {0x01e7f0, 0x01e7fe, 1}, - {0x01e7ff, 0x01e7ff, -1}, {0x01e800, 0x01e8c4, 1}, - {0x01e8c5, 0x01e8c6, -1}, {0x01e8c7, 0x01e8cf, 1}, - {0x01e8d0, 0x01e8d6, 0}, {0x01e8d7, 0x01e8ff, -1}, - {0x01e900, 0x01e943, 1}, {0x01e944, 0x01e94a, 0}, - {0x01e94b, 0x01e94b, 1}, {0x01e94c, 0x01e94f, -1}, - {0x01e950, 0x01e959, 1}, {0x01e95a, 0x01e95d, -1}, - {0x01e95e, 0x01e95f, 1}, {0x01e960, 0x01ec70, -1}, - {0x01ec71, 0x01ecb4, 1}, {0x01ecb5, 0x01ed00, -1}, - {0x01ed01, 0x01ed3d, 1}, {0x01ed3e, 0x01edff, -1}, - {0x01ee00, 0x01ee03, 1}, {0x01ee04, 0x01ee04, -1}, - {0x01ee05, 0x01ee1f, 1}, {0x01ee20, 0x01ee20, -1}, - {0x01ee21, 0x01ee22, 1}, {0x01ee23, 0x01ee23, -1}, - {0x01ee24, 0x01ee24, 1}, {0x01ee25, 0x01ee26, -1}, - {0x01ee27, 0x01ee27, 1}, {0x01ee28, 0x01ee28, -1}, - {0x01ee29, 0x01ee32, 1}, {0x01ee33, 0x01ee33, -1}, - {0x01ee34, 0x01ee37, 1}, {0x01ee38, 0x01ee38, -1}, - {0x01ee39, 0x01ee39, 1}, {0x01ee3a, 0x01ee3a, -1}, - {0x01ee3b, 0x01ee3b, 1}, {0x01ee3c, 0x01ee41, -1}, - {0x01ee42, 0x01ee42, 1}, {0x01ee43, 0x01ee46, -1}, - {0x01ee47, 0x01ee47, 1}, {0x01ee48, 0x01ee48, -1}, - {0x01ee49, 0x01ee49, 1}, {0x01ee4a, 0x01ee4a, -1}, - {0x01ee4b, 0x01ee4b, 1}, {0x01ee4c, 0x01ee4c, -1}, - {0x01ee4d, 0x01ee4f, 1}, {0x01ee50, 0x01ee50, -1}, - {0x01ee51, 0x01ee52, 1}, {0x01ee53, 0x01ee53, -1}, - {0x01ee54, 0x01ee54, 1}, {0x01ee55, 0x01ee56, -1}, - {0x01ee57, 0x01ee57, 1}, {0x01ee58, 0x01ee58, -1}, - {0x01ee59, 0x01ee59, 1}, {0x01ee5a, 0x01ee5a, -1}, - {0x01ee5b, 0x01ee5b, 1}, {0x01ee5c, 0x01ee5c, -1}, - {0x01ee5d, 0x01ee5d, 1}, {0x01ee5e, 0x01ee5e, -1}, - {0x01ee5f, 0x01ee5f, 1}, {0x01ee60, 0x01ee60, -1}, - {0x01ee61, 0x01ee62, 1}, {0x01ee63, 0x01ee63, -1}, - {0x01ee64, 0x01ee64, 1}, {0x01ee65, 0x01ee66, -1}, - {0x01ee67, 0x01ee6a, 1}, {0x01ee6b, 0x01ee6b, -1}, - {0x01ee6c, 0x01ee72, 1}, {0x01ee73, 0x01ee73, -1}, - {0x01ee74, 0x01ee77, 1}, {0x01ee78, 0x01ee78, -1}, - {0x01ee79, 0x01ee7c, 1}, {0x01ee7d, 0x01ee7d, -1}, - {0x01ee7e, 0x01ee7e, 1}, {0x01ee7f, 0x01ee7f, -1}, - {0x01ee80, 0x01ee89, 1}, {0x01ee8a, 0x01ee8a, -1}, - {0x01ee8b, 0x01ee9b, 1}, {0x01ee9c, 0x01eea0, -1}, - {0x01eea1, 0x01eea3, 1}, {0x01eea4, 0x01eea4, -1}, - {0x01eea5, 0x01eea9, 1}, {0x01eeaa, 0x01eeaa, -1}, - {0x01eeab, 0x01eebb, 1}, {0x01eebc, 0x01eeef, -1}, - {0x01eef0, 0x01eef1, 1}, {0x01eef2, 0x01efff, -1}, - {0x01f000, 0x01f003, 1}, {0x01f004, 0x01f004, 2}, - {0x01f005, 0x01f02b, 1}, {0x01f02c, 0x01f02f, -1}, - {0x01f030, 0x01f093, 1}, {0x01f094, 0x01f09f, -1}, - {0x01f0a0, 0x01f0ae, 1}, {0x01f0af, 0x01f0b0, -1}, - {0x01f0b1, 0x01f0bf, 1}, {0x01f0c0, 0x01f0c0, -1}, - {0x01f0c1, 0x01f0ce, 1}, {0x01f0cf, 0x01f0cf, 2}, - {0x01f0d0, 0x01f0d0, -1}, {0x01f0d1, 0x01f0f5, 1}, - {0x01f0f6, 0x01f0ff, -1}, {0x01f100, 0x01f18d, 1}, - {0x01f18e, 0x01f18e, 2}, {0x01f18f, 0x01f190, 1}, - {0x01f191, 0x01f19a, 2}, {0x01f19b, 0x01f1ad, 1}, - {0x01f1ae, 0x01f1e5, -1}, {0x01f1e6, 0x01f1ff, 1}, - {0x01f200, 0x01f202, 2}, {0x01f203, 0x01f20f, -1}, - {0x01f210, 0x01f23b, 2}, {0x01f23c, 0x01f23f, -1}, - {0x01f240, 0x01f248, 2}, {0x01f249, 0x01f24f, -1}, - {0x01f250, 0x01f251, 2}, {0x01f252, 0x01f25f, -1}, - {0x01f260, 0x01f265, 2}, {0x01f266, 0x01f2ff, -1}, - {0x01f300, 0x01f320, 2}, {0x01f321, 0x01f32c, 1}, - {0x01f32d, 0x01f335, 2}, {0x01f336, 0x01f336, 1}, - {0x01f337, 0x01f37c, 2}, {0x01f37d, 0x01f37d, 1}, - {0x01f37e, 0x01f393, 2}, {0x01f394, 0x01f39f, 1}, - {0x01f3a0, 0x01f3ca, 2}, {0x01f3cb, 0x01f3ce, 1}, - {0x01f3cf, 0x01f3d3, 2}, {0x01f3d4, 0x01f3df, 1}, - {0x01f3e0, 0x01f3f0, 2}, {0x01f3f1, 0x01f3f3, 1}, - {0x01f3f4, 0x01f3f4, 2}, {0x01f3f5, 0x01f3f7, 1}, - {0x01f3f8, 0x01f43e, 2}, {0x01f43f, 0x01f43f, 1}, - {0x01f440, 0x01f440, 2}, {0x01f441, 0x01f441, 1}, - {0x01f442, 0x01f4fc, 2}, {0x01f4fd, 0x01f4fe, 1}, - {0x01f4ff, 0x01f53d, 2}, {0x01f53e, 0x01f54a, 1}, - {0x01f54b, 0x01f54e, 2}, {0x01f54f, 0x01f54f, 1}, - {0x01f550, 0x01f567, 2}, {0x01f568, 0x01f579, 1}, - {0x01f57a, 0x01f57a, 2}, {0x01f57b, 0x01f594, 1}, - {0x01f595, 0x01f596, 2}, {0x01f597, 0x01f5a3, 1}, - {0x01f5a4, 0x01f5a4, 2}, {0x01f5a5, 0x01f5fa, 1}, - {0x01f5fb, 0x01f64f, 2}, {0x01f650, 0x01f67f, 1}, - {0x01f680, 0x01f6c5, 2}, {0x01f6c6, 0x01f6cb, 1}, - {0x01f6cc, 0x01f6cc, 2}, {0x01f6cd, 0x01f6cf, 1}, - {0x01f6d0, 0x01f6d2, 2}, {0x01f6d3, 0x01f6d4, 1}, - {0x01f6d5, 0x01f6d7, 2}, {0x01f6d8, 0x01f6db, -1}, - {0x01f6dc, 0x01f6df, 2}, {0x01f6e0, 0x01f6ea, 1}, - {0x01f6eb, 0x01f6ec, 2}, {0x01f6ed, 0x01f6ef, -1}, - {0x01f6f0, 0x01f6f3, 1}, {0x01f6f4, 0x01f6fc, 2}, - {0x01f6fd, 0x01f6ff, -1}, {0x01f700, 0x01f776, 1}, - {0x01f777, 0x01f77a, -1}, {0x01f77b, 0x01f7d9, 1}, - {0x01f7da, 0x01f7df, -1}, {0x01f7e0, 0x01f7eb, 2}, - {0x01f7ec, 0x01f7ef, -1}, {0x01f7f0, 0x01f7f0, 2}, - {0x01f7f1, 0x01f7ff, -1}, {0x01f800, 0x01f80b, 1}, - {0x01f80c, 0x01f80f, -1}, {0x01f810, 0x01f847, 1}, - {0x01f848, 0x01f84f, -1}, {0x01f850, 0x01f859, 1}, - {0x01f85a, 0x01f85f, -1}, {0x01f860, 0x01f887, 1}, - {0x01f888, 0x01f88f, -1}, {0x01f890, 0x01f8ad, 1}, - {0x01f8ae, 0x01f8af, -1}, {0x01f8b0, 0x01f8bb, 1}, - {0x01f8bc, 0x01f8bf, -1}, {0x01f8c0, 0x01f8c1, 1}, - {0x01f8c2, 0x01f8ff, -1}, {0x01f900, 0x01f90b, 1}, - {0x01f90c, 0x01f93a, 2}, {0x01f93b, 0x01f93b, 1}, - {0x01f93c, 0x01f945, 2}, {0x01f946, 0x01f946, 1}, - {0x01f947, 0x01f9ff, 2}, {0x01fa00, 0x01fa53, 1}, - {0x01fa54, 0x01fa5f, -1}, {0x01fa60, 0x01fa6d, 1}, - {0x01fa6e, 0x01fa6f, -1}, {0x01fa70, 0x01fa7c, 2}, - {0x01fa7d, 0x01fa7f, -1}, {0x01fa80, 0x01fa89, 2}, - {0x01fa8a, 0x01fa8e, -1}, {0x01fa8f, 0x01fac6, 2}, - {0x01fac7, 0x01facd, -1}, {0x01face, 0x01fadc, 2}, - {0x01fadd, 0x01fade, -1}, {0x01fadf, 0x01fae9, 2}, - {0x01faea, 0x01faef, -1}, {0x01faf0, 0x01faf8, 2}, - {0x01faf9, 0x01faff, -1}, {0x01fb00, 0x01fb92, 1}, - {0x01fb93, 0x01fb93, -1}, {0x01fb94, 0x01fbf9, 1}, - {0x01fbfa, 0x01ffff, -1}, {0x020000, 0x02a6df, 2}, - {0x02a6e0, 0x02a6ff, -1}, {0x02a700, 0x02b739, 2}, - {0x02b73a, 0x02b73f, -1}, {0x02b740, 0x02b81d, 2}, - {0x02b81e, 0x02b81f, -1}, {0x02b820, 0x02cea1, 2}, - {0x02cea2, 0x02ceaf, -1}, {0x02ceb0, 0x02ebe0, 2}, - {0x02ebe1, 0x02ebef, -1}, {0x02ebf0, 0x02ee5d, 2}, - {0x02ee5e, 0x02f7ff, -1}, {0x02f800, 0x02fa1d, 2}, - {0x02fa1e, 0x02ffff, -1}, {0x030000, 0x03134a, 2}, - {0x03134b, 0x03134f, -1}, {0x031350, 0x0323af, 2}, - {0x0323b0, 0x0e0000, -1}, {0x0e0001, 0x0e0001, 0}, - {0x0e0002, 0x0e001f, -1}, {0x0e0020, 0x0e007f, 0}, - {0x0e0080, 0x0e00ff, -1}, {0x0e0100, 0x0e01ef, 0}, - {0x0e01f0, 0x0effff, -1}, {0x0f0000, 0x0ffffd, 1}, - {0x0ffffe, 0x0fffff, -1}, {0x100000, 0x10fffd, 1}, - {0x10fffe, 0x10ffff, -1}}; +static const uint32_t wcw0_lo[] = { + 0x000300, 0x000483, 0x000591, 0x0005bf, 0x0005c1, 0x0005c4, 0x0005c7, 0x000610, + 0x00061c, 0x00064b, 0x000670, 0x0006d6, 0x0006df, 0x0006e7, 0x0006ea, 0x000711, + 0x000730, 0x0007a6, 0x0007eb, 0x0007fd, 0x000816, 0x00081b, 0x000825, 0x000829, + 0x000859, 0x000897, 0x0008ca, 0x0008e3, 0x00093a, 0x00093c, 0x000941, 0x00094d, + 0x000951, 0x000962, 0x000981, 0x0009bc, 0x0009c1, 0x0009cd, 0x0009e2, 0x0009fe, + 0x000a01, 0x000a3c, 0x000a41, 0x000a47, 0x000a4b, 0x000a51, 0x000a70, 0x000a75, + 0x000a81, 0x000abc, 0x000ac1, 0x000ac7, 0x000acd, 0x000ae2, 0x000afa, 0x000b01, + 0x000b3c, 0x000b3f, 0x000b41, 0x000b4d, 0x000b55, 0x000b62, 0x000b82, 0x000bc0, + 0x000bcd, 0x000c00, 0x000c04, 0x000c3c, 0x000c3e, 0x000c46, 0x000c4a, 0x000c55, + 0x000c62, 0x000c81, 0x000cbc, 0x000cbf, 0x000cc6, 0x000ccc, 0x000ce2, 0x000d00, + 0x000d3b, 0x000d41, 0x000d4d, 0x000d62, 0x000d81, 0x000dca, 0x000dd2, 0x000dd6, + 0x000e31, 0x000e34, 0x000e47, 0x000eb1, 0x000eb4, 0x000ec8, 0x000f18, 0x000f35, + 0x000f37, 0x000f39, 0x000f71, 0x000f80, 0x000f86, 0x000f8d, 0x000f99, 0x000fc6, + 0x00102d, 0x001032, 0x001039, 0x00103d, 0x001058, 0x00105e, 0x001071, 0x001082, + 0x001085, 0x00108d, 0x00109d, 0x001160, 0x00135d, 0x001712, 0x001732, 0x001752, + 0x001772, 0x0017b4, 0x0017b7, 0x0017c6, 0x0017c9, 0x0017dd, 0x00180b, 0x001885, + 0x0018a9, 0x001920, 0x001927, 0x001932, 0x001939, 0x001a17, 0x001a1b, 0x001a56, + 0x001a58, 0x001a60, 0x001a62, 0x001a65, 0x001a73, 0x001a7f, 0x001ab0, 0x001b00, + 0x001b34, 0x001b36, 0x001b3c, 0x001b42, 0x001b6b, 0x001b80, 0x001ba2, 0x001ba8, + 0x001bab, 0x001be6, 0x001be8, 0x001bed, 0x001bef, 0x001c2c, 0x001c36, 0x001cd0, + 0x001cd4, 0x001ce2, 0x001ced, 0x001cf4, 0x001cf8, 0x001dc0, 0x00200b, 0x00202a, + 0x002060, 0x002066, 0x0020d0, 0x002cef, 0x002d7f, 0x002de0, 0x00302a, 0x003099, + 0x003164, 0x00a66f, 0x00a674, 0x00a69e, 0x00a6f0, 0x00a802, 0x00a806, 0x00a80b, + 0x00a825, 0x00a82c, 0x00a8c4, 0x00a8e0, 0x00a8ff, 0x00a926, 0x00a947, 0x00a980, + 0x00a9b3, 0x00a9b6, 0x00a9bc, 0x00a9e5, 0x00aa29, 0x00aa31, 0x00aa35, 0x00aa43, + 0x00aa4c, 0x00aa7c, 0x00aab0, 0x00aab2, 0x00aab7, 0x00aabe, 0x00aac1, 0x00aaec, + 0x00aaf6, 0x00abe5, 0x00abe8, 0x00abed, 0x00d7b0, 0x00d7cb, 0x00fb1e, 0x00fe00, + 0x00fe20, 0x00feff, 0x00ffa0, 0x0101fd, 0x0102e0, 0x010376, 0x010a01, 0x010a05, + 0x010a0c, 0x010a38, 0x010a3f, 0x010ae5, 0x010d24, 0x010d69, 0x010eab, 0x010efc, + 0x010f46, 0x010f82, 0x011001, 0x011038, 0x011070, 0x011073, 0x01107f, 0x0110b3, + 0x0110b9, 0x0110c2, 0x011100, 0x011127, 0x01112d, 0x011173, 0x011180, 0x0111b6, + 0x0111c9, 0x0111cf, 0x01122f, 0x011234, 0x011236, 0x01123e, 0x011241, 0x0112df, + 0x0112e3, 0x011300, 0x01133b, 0x011340, 0x011366, 0x011370, 0x0113bb, 0x0113ce, + 0x0113d0, 0x0113d2, 0x0113e1, 0x011438, 0x011442, 0x011446, 0x01145e, 0x0114b3, + 0x0114ba, 0x0114bf, 0x0114c2, 0x0115b2, 0x0115bc, 0x0115bf, 0x0115dc, 0x011633, + 0x01163d, 0x01163f, 0x0116ab, 0x0116ad, 0x0116b0, 0x0116b7, 0x01171d, 0x01171f, + 0x011722, 0x011727, 0x01182f, 0x011839, 0x01193b, 0x01193e, 0x011943, 0x0119d4, + 0x0119da, 0x0119e0, 0x011a01, 0x011a33, 0x011a3b, 0x011a47, 0x011a51, 0x011a59, + 0x011a8a, 0x011a98, 0x011c30, 0x011c38, 0x011c3f, 0x011c92, 0x011caa, 0x011cb2, + 0x011cb5, 0x011d31, 0x011d3a, 0x011d3c, 0x011d3f, 0x011d47, 0x011d90, 0x011d95, + 0x011d97, 0x011ef3, 0x011f00, 0x011f36, 0x011f40, 0x011f42, 0x011f5a, 0x013440, + 0x013447, 0x01611e, 0x01612d, 0x016af0, 0x016b30, 0x016f4f, 0x016f8f, 0x016fe4, + 0x01bc9d, 0x01bca0, 0x01cf00, 0x01cf30, 0x01d167, 0x01d173, 0x01d185, 0x01d1aa, + 0x01d242, 0x01da00, 0x01da3b, 0x01da75, 0x01da84, 0x01da9b, 0x01daa1, 0x01e000, + 0x01e008, 0x01e01b, 0x01e023, 0x01e026, 0x01e08f, 0x01e130, 0x01e2ae, 0x01e2ec, + 0x01e4ec, 0x01e5ee, 0x01e8d0, 0x01e944, 0x0e0001, 0x0e0020, 0x0e0100 +}; +static const uint16_t wcw0_cnt[] = { + 0x006f, 0x0006, 0x002c, 0x0000, 0x0001, 0x0001, 0x0000, 0x000a, + 0x0000, 0x0014, 0x0000, 0x0006, 0x0005, 0x0001, 0x0003, 0x0000, + 0x001a, 0x000a, 0x0008, 0x0000, 0x0003, 0x0008, 0x0002, 0x0004, + 0x0002, 0x0008, 0x0017, 0x001f, 0x0000, 0x0000, 0x0007, 0x0000, + 0x0006, 0x0001, 0x0000, 0x0000, 0x0003, 0x0000, 0x0001, 0x0000, + 0x0001, 0x0000, 0x0001, 0x0001, 0x0002, 0x0000, 0x0001, 0x0000, + 0x0001, 0x0000, 0x0004, 0x0001, 0x0000, 0x0001, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0003, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0002, 0x0003, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, + 0x0001, 0x0003, 0x0000, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, + 0x0000, 0x0006, 0x0007, 0x0000, 0x0008, 0x0006, 0x0001, 0x0000, + 0x0000, 0x0000, 0x000d, 0x0004, 0x0001, 0x000a, 0x0023, 0x0000, + 0x0003, 0x0005, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0000, + 0x0001, 0x0000, 0x0000, 0x009f, 0x0002, 0x0002, 0x0001, 0x0001, + 0x0001, 0x0001, 0x0006, 0x0000, 0x000a, 0x0000, 0x0004, 0x0001, + 0x0000, 0x0002, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0000, + 0x0006, 0x0000, 0x0000, 0x0007, 0x0009, 0x0000, 0x001e, 0x0003, + 0x0000, 0x0004, 0x0000, 0x0000, 0x0008, 0x0001, 0x0003, 0x0001, + 0x0002, 0x0000, 0x0001, 0x0000, 0x0002, 0x0007, 0x0001, 0x0002, + 0x000c, 0x0006, 0x0000, 0x0000, 0x0001, 0x003f, 0x0004, 0x0004, + 0x0004, 0x0009, 0x0020, 0x0002, 0x0000, 0x001f, 0x0003, 0x0001, + 0x0000, 0x0003, 0x0009, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0001, 0x0000, 0x0001, 0x0011, 0x0000, 0x0007, 0x000a, 0x0002, + 0x0000, 0x0003, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0001, 0x0000, 0x0001, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0030, 0x0000, 0x000f, + 0x000f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0002, 0x0001, + 0x0003, 0x0002, 0x0000, 0x0001, 0x0003, 0x0004, 0x0001, 0x0003, + 0x000a, 0x0003, 0x0000, 0x000e, 0x0000, 0x0001, 0x0002, 0x0003, + 0x0001, 0x0000, 0x0002, 0x0004, 0x0007, 0x0000, 0x0001, 0x0008, + 0x0003, 0x0000, 0x0002, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0007, 0x0001, 0x0001, 0x0000, 0x0006, 0x0004, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0007, 0x0002, 0x0000, 0x0000, 0x0005, + 0x0000, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001, 0x0007, + 0x0000, 0x0001, 0x0000, 0x0000, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0003, 0x0004, 0x0008, 0x0001, 0x0001, 0x0000, 0x0000, 0x0003, + 0x0001, 0x0000, 0x0009, 0x0005, 0x0003, 0x0000, 0x0005, 0x0002, + 0x000c, 0x0001, 0x0006, 0x0005, 0x0000, 0x0015, 0x0006, 0x0001, + 0x0001, 0x0005, 0x0000, 0x0001, 0x0006, 0x0000, 0x0001, 0x0000, + 0x0000, 0x0001, 0x0001, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, + 0x000e, 0x000b, 0x0002, 0x0004, 0x0006, 0x0000, 0x0003, 0x0000, + 0x0001, 0x0003, 0x002d, 0x0016, 0x0002, 0x000f, 0x0006, 0x0003, + 0x0002, 0x0036, 0x0031, 0x0000, 0x0000, 0x0004, 0x000e, 0x0006, + 0x0010, 0x0006, 0x0001, 0x0004, 0x0000, 0x0006, 0x0000, 0x0003, + 0x0003, 0x0001, 0x0006, 0x0006, 0x0000, 0x005f, 0x00ef +}; +#define WCW0_LEN 367 + +static const uint32_t wcw2_lo[] = { + 0x001100, 0x00231a, 0x002329, 0x0023e9, 0x0023f0, 0x0023f3, 0x0025fd, 0x002614, + 0x002630, 0x002648, 0x00267f, 0x00268a, 0x002693, 0x0026a1, 0x0026aa, 0x0026bd, + 0x0026c4, 0x0026ce, 0x0026d4, 0x0026ea, 0x0026f2, 0x0026f5, 0x0026fa, 0x0026fd, + 0x002705, 0x00270a, 0x002728, 0x00274c, 0x00274e, 0x002753, 0x002757, 0x002795, + 0x0027b0, 0x0027bf, 0x002b1b, 0x002b50, 0x002b55, 0x002e80, 0x002e9b, 0x002f00, + 0x002ff0, 0x00302e, 0x003041, 0x00309b, 0x003105, 0x003131, 0x003165, 0x003190, + 0x0031ef, 0x003220, 0x00a490, 0x00a960, 0x00ac00, 0x00f900, 0x00fa70, 0x00fe10, + 0x00fe30, 0x00fe54, 0x00fe68, 0x00ff01, 0x00ffe0, 0x016fe0, 0x016ff0, 0x017000, + 0x018800, 0x018cff, 0x01aff0, 0x01aff5, 0x01affd, 0x01b000, 0x01b132, 0x01b150, + 0x01b155, 0x01b164, 0x01b170, 0x01d300, 0x01d360, 0x01f004, 0x01f0cf, 0x01f18e, + 0x01f191, 0x01f200, 0x01f210, 0x01f240, 0x01f250, 0x01f260, 0x01f300, 0x01f32d, + 0x01f337, 0x01f37e, 0x01f3a0, 0x01f3cf, 0x01f3e0, 0x01f3f4, 0x01f3f8, 0x01f440, + 0x01f442, 0x01f4ff, 0x01f54b, 0x01f550, 0x01f57a, 0x01f595, 0x01f5a4, 0x01f5fb, + 0x01f680, 0x01f6cc, 0x01f6d0, 0x01f6d5, 0x01f6dc, 0x01f6eb, 0x01f6f4, 0x01f7e0, + 0x01f7f0, 0x01f90c, 0x01f93c, 0x01f947, 0x01fa70, 0x01fa80, 0x01fa8f, 0x01face, + 0x01fadf, 0x01faf0, 0x020000, 0x02a700, 0x02b740, 0x02b820, 0x02ceb0, 0x02ebf0, + 0x02f800, 0x030000, 0x031350 +}; +static const uint16_t wcw2_cnt[] = { + 0x005f, 0x0001, 0x0001, 0x0003, 0x0000, 0x0000, 0x0001, 0x0001, + 0x0007, 0x000b, 0x0000, 0x0005, 0x0000, 0x0000, 0x0001, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0002, + 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0019, 0x0058, 0x00d5, + 0x0039, 0x0010, 0x0055, 0x0064, 0x002a, 0x0032, 0x0029, 0x0055, + 0x002f, 0x726c, 0x0036, 0x001c, 0x2ba3, 0x016d, 0x0069, 0x0009, + 0x0022, 0x0012, 0x0003, 0x005f, 0x0006, 0x0003, 0x0001, 0x17f7, + 0x04d5, 0x0009, 0x0003, 0x0006, 0x0001, 0x0122, 0x0000, 0x0002, + 0x0000, 0x0003, 0x018b, 0x0056, 0x0016, 0x0000, 0x0000, 0x0000, + 0x0009, 0x0002, 0x002b, 0x0008, 0x0001, 0x0005, 0x0020, 0x0008, + 0x0045, 0x0015, 0x002a, 0x0004, 0x0010, 0x0000, 0x0046, 0x0000, + 0x00ba, 0x003e, 0x0003, 0x0017, 0x0000, 0x0001, 0x0000, 0x0054, + 0x0045, 0x0000, 0x0002, 0x0002, 0x0003, 0x0001, 0x0008, 0x000b, + 0x0000, 0x002e, 0x0009, 0x00b8, 0x000c, 0x0009, 0x0037, 0x000e, + 0x000a, 0x0008, 0xa6df, 0x1039, 0x00dd, 0x1681, 0x1d30, 0x026d, + 0x021d, 0x134a, 0x105f +}; +#define WCW2_LEN 131 -#define WCWIDTH_TABLE_LEN 2143 +static int wcrange(const uint32_t *lo, const uint16_t *cnt, int n, uint32_t ch) { + int l = 0, h = n - 1; + while (l <= h) { + int m = (l + h) / 2; + if (ch < lo[m]) h = m - 1; + else if (ch > lo[m] + cnt[m]) l = m + 1; + else return 1; + } + return 0; +} int wcwidth(uint32_t ch) { if (ch >= 0x20 && ch <= 0x7e) @@ -1099,18 +168,9 @@ int wcwidth(uint32_t ch) { return 1; if (ch < 0x20 || (ch > 0x7e && ch < 0xa0)) return ch == 0 ? 0 : -1; - - int lo = 0, hi = WCWIDTH_TABLE_LEN - 1; - while (lo <= hi) { - int mid = (lo + hi) / 2; - if (ch < wcwidth_table[mid].lo) - hi = mid - 1; - else if (ch > wcwidth_table[mid].hi) - lo = mid + 1; - else - return wcwidth_table[mid].w; - } - return -1; + if (wcrange(wcw0_lo, wcw0_cnt, WCW0_LEN, ch)) return 0; + if (wcrange(wcw2_lo, wcw2_cnt, WCW2_LEN, ch)) return 2; + return 1; } int iswprint(uint32_t ch) { return wcwidth(ch) >= 0; } From f8c5c1b0456c0829289da9b1a654f5206200087d Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 23 May 2026 00:17:17 -0400 Subject: [PATCH 04/11] =?UTF-8?q?=E2=9A=99=EF=B8=8F=20update=20npm=20setti?= =?UTF-8?q?ngs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- src/wcwidth.c | 276 ++++++++++++++++++++++--------------------- tasks/build-npm.ts | 8 +- tasks/bundle-wasm.ts | 6 +- 4 files changed, 151 insertions(+), 141 deletions(-) diff --git a/Makefile b/Makefile index 0bc07e7..cb6e391 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CC = /usr/local/opt/llvm/bin/clang +CC = clang WASM_OPT ?= wasm-opt TARGET = clayterm.wasm SRC = src/module.c diff --git a/src/wcwidth.c b/src/wcwidth.c index a3a0faa..11922f5 100644 --- a/src/wcwidth.c +++ b/src/wcwidth.c @@ -13,150 +13,152 @@ #include static const uint32_t wcw0_lo[] = { - 0x000300, 0x000483, 0x000591, 0x0005bf, 0x0005c1, 0x0005c4, 0x0005c7, 0x000610, - 0x00061c, 0x00064b, 0x000670, 0x0006d6, 0x0006df, 0x0006e7, 0x0006ea, 0x000711, - 0x000730, 0x0007a6, 0x0007eb, 0x0007fd, 0x000816, 0x00081b, 0x000825, 0x000829, - 0x000859, 0x000897, 0x0008ca, 0x0008e3, 0x00093a, 0x00093c, 0x000941, 0x00094d, - 0x000951, 0x000962, 0x000981, 0x0009bc, 0x0009c1, 0x0009cd, 0x0009e2, 0x0009fe, - 0x000a01, 0x000a3c, 0x000a41, 0x000a47, 0x000a4b, 0x000a51, 0x000a70, 0x000a75, - 0x000a81, 0x000abc, 0x000ac1, 0x000ac7, 0x000acd, 0x000ae2, 0x000afa, 0x000b01, - 0x000b3c, 0x000b3f, 0x000b41, 0x000b4d, 0x000b55, 0x000b62, 0x000b82, 0x000bc0, - 0x000bcd, 0x000c00, 0x000c04, 0x000c3c, 0x000c3e, 0x000c46, 0x000c4a, 0x000c55, - 0x000c62, 0x000c81, 0x000cbc, 0x000cbf, 0x000cc6, 0x000ccc, 0x000ce2, 0x000d00, - 0x000d3b, 0x000d41, 0x000d4d, 0x000d62, 0x000d81, 0x000dca, 0x000dd2, 0x000dd6, - 0x000e31, 0x000e34, 0x000e47, 0x000eb1, 0x000eb4, 0x000ec8, 0x000f18, 0x000f35, - 0x000f37, 0x000f39, 0x000f71, 0x000f80, 0x000f86, 0x000f8d, 0x000f99, 0x000fc6, - 0x00102d, 0x001032, 0x001039, 0x00103d, 0x001058, 0x00105e, 0x001071, 0x001082, - 0x001085, 0x00108d, 0x00109d, 0x001160, 0x00135d, 0x001712, 0x001732, 0x001752, - 0x001772, 0x0017b4, 0x0017b7, 0x0017c6, 0x0017c9, 0x0017dd, 0x00180b, 0x001885, - 0x0018a9, 0x001920, 0x001927, 0x001932, 0x001939, 0x001a17, 0x001a1b, 0x001a56, - 0x001a58, 0x001a60, 0x001a62, 0x001a65, 0x001a73, 0x001a7f, 0x001ab0, 0x001b00, - 0x001b34, 0x001b36, 0x001b3c, 0x001b42, 0x001b6b, 0x001b80, 0x001ba2, 0x001ba8, - 0x001bab, 0x001be6, 0x001be8, 0x001bed, 0x001bef, 0x001c2c, 0x001c36, 0x001cd0, - 0x001cd4, 0x001ce2, 0x001ced, 0x001cf4, 0x001cf8, 0x001dc0, 0x00200b, 0x00202a, - 0x002060, 0x002066, 0x0020d0, 0x002cef, 0x002d7f, 0x002de0, 0x00302a, 0x003099, - 0x003164, 0x00a66f, 0x00a674, 0x00a69e, 0x00a6f0, 0x00a802, 0x00a806, 0x00a80b, - 0x00a825, 0x00a82c, 0x00a8c4, 0x00a8e0, 0x00a8ff, 0x00a926, 0x00a947, 0x00a980, - 0x00a9b3, 0x00a9b6, 0x00a9bc, 0x00a9e5, 0x00aa29, 0x00aa31, 0x00aa35, 0x00aa43, - 0x00aa4c, 0x00aa7c, 0x00aab0, 0x00aab2, 0x00aab7, 0x00aabe, 0x00aac1, 0x00aaec, - 0x00aaf6, 0x00abe5, 0x00abe8, 0x00abed, 0x00d7b0, 0x00d7cb, 0x00fb1e, 0x00fe00, - 0x00fe20, 0x00feff, 0x00ffa0, 0x0101fd, 0x0102e0, 0x010376, 0x010a01, 0x010a05, - 0x010a0c, 0x010a38, 0x010a3f, 0x010ae5, 0x010d24, 0x010d69, 0x010eab, 0x010efc, - 0x010f46, 0x010f82, 0x011001, 0x011038, 0x011070, 0x011073, 0x01107f, 0x0110b3, - 0x0110b9, 0x0110c2, 0x011100, 0x011127, 0x01112d, 0x011173, 0x011180, 0x0111b6, - 0x0111c9, 0x0111cf, 0x01122f, 0x011234, 0x011236, 0x01123e, 0x011241, 0x0112df, - 0x0112e3, 0x011300, 0x01133b, 0x011340, 0x011366, 0x011370, 0x0113bb, 0x0113ce, - 0x0113d0, 0x0113d2, 0x0113e1, 0x011438, 0x011442, 0x011446, 0x01145e, 0x0114b3, - 0x0114ba, 0x0114bf, 0x0114c2, 0x0115b2, 0x0115bc, 0x0115bf, 0x0115dc, 0x011633, - 0x01163d, 0x01163f, 0x0116ab, 0x0116ad, 0x0116b0, 0x0116b7, 0x01171d, 0x01171f, - 0x011722, 0x011727, 0x01182f, 0x011839, 0x01193b, 0x01193e, 0x011943, 0x0119d4, - 0x0119da, 0x0119e0, 0x011a01, 0x011a33, 0x011a3b, 0x011a47, 0x011a51, 0x011a59, - 0x011a8a, 0x011a98, 0x011c30, 0x011c38, 0x011c3f, 0x011c92, 0x011caa, 0x011cb2, - 0x011cb5, 0x011d31, 0x011d3a, 0x011d3c, 0x011d3f, 0x011d47, 0x011d90, 0x011d95, - 0x011d97, 0x011ef3, 0x011f00, 0x011f36, 0x011f40, 0x011f42, 0x011f5a, 0x013440, - 0x013447, 0x01611e, 0x01612d, 0x016af0, 0x016b30, 0x016f4f, 0x016f8f, 0x016fe4, - 0x01bc9d, 0x01bca0, 0x01cf00, 0x01cf30, 0x01d167, 0x01d173, 0x01d185, 0x01d1aa, - 0x01d242, 0x01da00, 0x01da3b, 0x01da75, 0x01da84, 0x01da9b, 0x01daa1, 0x01e000, - 0x01e008, 0x01e01b, 0x01e023, 0x01e026, 0x01e08f, 0x01e130, 0x01e2ae, 0x01e2ec, - 0x01e4ec, 0x01e5ee, 0x01e8d0, 0x01e944, 0x0e0001, 0x0e0020, 0x0e0100 -}; + 0x000300, 0x000483, 0x000591, 0x0005bf, 0x0005c1, 0x0005c4, 0x0005c7, + 0x000610, 0x00061c, 0x00064b, 0x000670, 0x0006d6, 0x0006df, 0x0006e7, + 0x0006ea, 0x000711, 0x000730, 0x0007a6, 0x0007eb, 0x0007fd, 0x000816, + 0x00081b, 0x000825, 0x000829, 0x000859, 0x000897, 0x0008ca, 0x0008e3, + 0x00093a, 0x00093c, 0x000941, 0x00094d, 0x000951, 0x000962, 0x000981, + 0x0009bc, 0x0009c1, 0x0009cd, 0x0009e2, 0x0009fe, 0x000a01, 0x000a3c, + 0x000a41, 0x000a47, 0x000a4b, 0x000a51, 0x000a70, 0x000a75, 0x000a81, + 0x000abc, 0x000ac1, 0x000ac7, 0x000acd, 0x000ae2, 0x000afa, 0x000b01, + 0x000b3c, 0x000b3f, 0x000b41, 0x000b4d, 0x000b55, 0x000b62, 0x000b82, + 0x000bc0, 0x000bcd, 0x000c00, 0x000c04, 0x000c3c, 0x000c3e, 0x000c46, + 0x000c4a, 0x000c55, 0x000c62, 0x000c81, 0x000cbc, 0x000cbf, 0x000cc6, + 0x000ccc, 0x000ce2, 0x000d00, 0x000d3b, 0x000d41, 0x000d4d, 0x000d62, + 0x000d81, 0x000dca, 0x000dd2, 0x000dd6, 0x000e31, 0x000e34, 0x000e47, + 0x000eb1, 0x000eb4, 0x000ec8, 0x000f18, 0x000f35, 0x000f37, 0x000f39, + 0x000f71, 0x000f80, 0x000f86, 0x000f8d, 0x000f99, 0x000fc6, 0x00102d, + 0x001032, 0x001039, 0x00103d, 0x001058, 0x00105e, 0x001071, 0x001082, + 0x001085, 0x00108d, 0x00109d, 0x001160, 0x00135d, 0x001712, 0x001732, + 0x001752, 0x001772, 0x0017b4, 0x0017b7, 0x0017c6, 0x0017c9, 0x0017dd, + 0x00180b, 0x001885, 0x0018a9, 0x001920, 0x001927, 0x001932, 0x001939, + 0x001a17, 0x001a1b, 0x001a56, 0x001a58, 0x001a60, 0x001a62, 0x001a65, + 0x001a73, 0x001a7f, 0x001ab0, 0x001b00, 0x001b34, 0x001b36, 0x001b3c, + 0x001b42, 0x001b6b, 0x001b80, 0x001ba2, 0x001ba8, 0x001bab, 0x001be6, + 0x001be8, 0x001bed, 0x001bef, 0x001c2c, 0x001c36, 0x001cd0, 0x001cd4, + 0x001ce2, 0x001ced, 0x001cf4, 0x001cf8, 0x001dc0, 0x00200b, 0x00202a, + 0x002060, 0x002066, 0x0020d0, 0x002cef, 0x002d7f, 0x002de0, 0x00302a, + 0x003099, 0x003164, 0x00a66f, 0x00a674, 0x00a69e, 0x00a6f0, 0x00a802, + 0x00a806, 0x00a80b, 0x00a825, 0x00a82c, 0x00a8c4, 0x00a8e0, 0x00a8ff, + 0x00a926, 0x00a947, 0x00a980, 0x00a9b3, 0x00a9b6, 0x00a9bc, 0x00a9e5, + 0x00aa29, 0x00aa31, 0x00aa35, 0x00aa43, 0x00aa4c, 0x00aa7c, 0x00aab0, + 0x00aab2, 0x00aab7, 0x00aabe, 0x00aac1, 0x00aaec, 0x00aaf6, 0x00abe5, + 0x00abe8, 0x00abed, 0x00d7b0, 0x00d7cb, 0x00fb1e, 0x00fe00, 0x00fe20, + 0x00feff, 0x00ffa0, 0x0101fd, 0x0102e0, 0x010376, 0x010a01, 0x010a05, + 0x010a0c, 0x010a38, 0x010a3f, 0x010ae5, 0x010d24, 0x010d69, 0x010eab, + 0x010efc, 0x010f46, 0x010f82, 0x011001, 0x011038, 0x011070, 0x011073, + 0x01107f, 0x0110b3, 0x0110b9, 0x0110c2, 0x011100, 0x011127, 0x01112d, + 0x011173, 0x011180, 0x0111b6, 0x0111c9, 0x0111cf, 0x01122f, 0x011234, + 0x011236, 0x01123e, 0x011241, 0x0112df, 0x0112e3, 0x011300, 0x01133b, + 0x011340, 0x011366, 0x011370, 0x0113bb, 0x0113ce, 0x0113d0, 0x0113d2, + 0x0113e1, 0x011438, 0x011442, 0x011446, 0x01145e, 0x0114b3, 0x0114ba, + 0x0114bf, 0x0114c2, 0x0115b2, 0x0115bc, 0x0115bf, 0x0115dc, 0x011633, + 0x01163d, 0x01163f, 0x0116ab, 0x0116ad, 0x0116b0, 0x0116b7, 0x01171d, + 0x01171f, 0x011722, 0x011727, 0x01182f, 0x011839, 0x01193b, 0x01193e, + 0x011943, 0x0119d4, 0x0119da, 0x0119e0, 0x011a01, 0x011a33, 0x011a3b, + 0x011a47, 0x011a51, 0x011a59, 0x011a8a, 0x011a98, 0x011c30, 0x011c38, + 0x011c3f, 0x011c92, 0x011caa, 0x011cb2, 0x011cb5, 0x011d31, 0x011d3a, + 0x011d3c, 0x011d3f, 0x011d47, 0x011d90, 0x011d95, 0x011d97, 0x011ef3, + 0x011f00, 0x011f36, 0x011f40, 0x011f42, 0x011f5a, 0x013440, 0x013447, + 0x01611e, 0x01612d, 0x016af0, 0x016b30, 0x016f4f, 0x016f8f, 0x016fe4, + 0x01bc9d, 0x01bca0, 0x01cf00, 0x01cf30, 0x01d167, 0x01d173, 0x01d185, + 0x01d1aa, 0x01d242, 0x01da00, 0x01da3b, 0x01da75, 0x01da84, 0x01da9b, + 0x01daa1, 0x01e000, 0x01e008, 0x01e01b, 0x01e023, 0x01e026, 0x01e08f, + 0x01e130, 0x01e2ae, 0x01e2ec, 0x01e4ec, 0x01e5ee, 0x01e8d0, 0x01e944, + 0x0e0001, 0x0e0020, 0x0e0100}; static const uint16_t wcw0_cnt[] = { - 0x006f, 0x0006, 0x002c, 0x0000, 0x0001, 0x0001, 0x0000, 0x000a, - 0x0000, 0x0014, 0x0000, 0x0006, 0x0005, 0x0001, 0x0003, 0x0000, - 0x001a, 0x000a, 0x0008, 0x0000, 0x0003, 0x0008, 0x0002, 0x0004, - 0x0002, 0x0008, 0x0017, 0x001f, 0x0000, 0x0000, 0x0007, 0x0000, - 0x0006, 0x0001, 0x0000, 0x0000, 0x0003, 0x0000, 0x0001, 0x0000, - 0x0001, 0x0000, 0x0001, 0x0001, 0x0002, 0x0000, 0x0001, 0x0000, - 0x0001, 0x0000, 0x0004, 0x0001, 0x0000, 0x0001, 0x0005, 0x0000, - 0x0000, 0x0000, 0x0003, 0x0000, 0x0001, 0x0001, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0002, 0x0003, 0x0001, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, - 0x0001, 0x0003, 0x0000, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, - 0x0000, 0x0006, 0x0007, 0x0000, 0x0008, 0x0006, 0x0001, 0x0000, - 0x0000, 0x0000, 0x000d, 0x0004, 0x0001, 0x000a, 0x0023, 0x0000, - 0x0003, 0x0005, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0000, - 0x0001, 0x0000, 0x0000, 0x009f, 0x0002, 0x0002, 0x0001, 0x0001, - 0x0001, 0x0001, 0x0006, 0x0000, 0x000a, 0x0000, 0x0004, 0x0001, - 0x0000, 0x0002, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0000, - 0x0006, 0x0000, 0x0000, 0x0007, 0x0009, 0x0000, 0x001e, 0x0003, - 0x0000, 0x0004, 0x0000, 0x0000, 0x0008, 0x0001, 0x0003, 0x0001, - 0x0002, 0x0000, 0x0001, 0x0000, 0x0002, 0x0007, 0x0001, 0x0002, - 0x000c, 0x0006, 0x0000, 0x0000, 0x0001, 0x003f, 0x0004, 0x0004, - 0x0004, 0x0009, 0x0020, 0x0002, 0x0000, 0x001f, 0x0003, 0x0001, - 0x0000, 0x0003, 0x0009, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000, - 0x0001, 0x0000, 0x0001, 0x0011, 0x0000, 0x0007, 0x000a, 0x0002, - 0x0000, 0x0003, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0001, 0x0000, 0x0001, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0030, 0x0000, 0x000f, - 0x000f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0002, 0x0001, - 0x0003, 0x0002, 0x0000, 0x0001, 0x0003, 0x0004, 0x0001, 0x0003, - 0x000a, 0x0003, 0x0000, 0x000e, 0x0000, 0x0001, 0x0002, 0x0003, - 0x0001, 0x0000, 0x0002, 0x0004, 0x0007, 0x0000, 0x0001, 0x0008, - 0x0003, 0x0000, 0x0002, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, - 0x0007, 0x0001, 0x0001, 0x0000, 0x0006, 0x0004, 0x0005, 0x0000, - 0x0000, 0x0000, 0x0001, 0x0007, 0x0002, 0x0000, 0x0000, 0x0005, - 0x0000, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001, 0x0007, - 0x0000, 0x0001, 0x0000, 0x0000, 0x0005, 0x0000, 0x0000, 0x0000, - 0x0003, 0x0004, 0x0008, 0x0001, 0x0001, 0x0000, 0x0000, 0x0003, - 0x0001, 0x0000, 0x0009, 0x0005, 0x0003, 0x0000, 0x0005, 0x0002, - 0x000c, 0x0001, 0x0006, 0x0005, 0x0000, 0x0015, 0x0006, 0x0001, - 0x0001, 0x0005, 0x0000, 0x0001, 0x0006, 0x0000, 0x0001, 0x0000, - 0x0000, 0x0001, 0x0001, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, - 0x000e, 0x000b, 0x0002, 0x0004, 0x0006, 0x0000, 0x0003, 0x0000, - 0x0001, 0x0003, 0x002d, 0x0016, 0x0002, 0x000f, 0x0006, 0x0003, - 0x0002, 0x0036, 0x0031, 0x0000, 0x0000, 0x0004, 0x000e, 0x0006, - 0x0010, 0x0006, 0x0001, 0x0004, 0x0000, 0x0006, 0x0000, 0x0003, - 0x0003, 0x0001, 0x0006, 0x0006, 0x0000, 0x005f, 0x00ef -}; + 0x006f, 0x0006, 0x002c, 0x0000, 0x0001, 0x0001, 0x0000, 0x000a, 0x0000, + 0x0014, 0x0000, 0x0006, 0x0005, 0x0001, 0x0003, 0x0000, 0x001a, 0x000a, + 0x0008, 0x0000, 0x0003, 0x0008, 0x0002, 0x0004, 0x0002, 0x0008, 0x0017, + 0x001f, 0x0000, 0x0000, 0x0007, 0x0000, 0x0006, 0x0001, 0x0000, 0x0000, + 0x0003, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0004, 0x0001, 0x0000, 0x0001, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0003, 0x0000, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0002, 0x0003, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, + 0x0003, 0x0000, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0006, + 0x0007, 0x0000, 0x0008, 0x0006, 0x0001, 0x0000, 0x0000, 0x0000, 0x000d, + 0x0004, 0x0001, 0x000a, 0x0023, 0x0000, 0x0003, 0x0005, 0x0001, 0x0001, + 0x0001, 0x0002, 0x0003, 0x0000, 0x0001, 0x0000, 0x0000, 0x009f, 0x0002, + 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0000, 0x000a, 0x0000, + 0x0004, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, + 0x0000, 0x0006, 0x0000, 0x0000, 0x0007, 0x0009, 0x0000, 0x001e, 0x0003, + 0x0000, 0x0004, 0x0000, 0x0000, 0x0008, 0x0001, 0x0003, 0x0001, 0x0002, + 0x0000, 0x0001, 0x0000, 0x0002, 0x0007, 0x0001, 0x0002, 0x000c, 0x0006, + 0x0000, 0x0000, 0x0001, 0x003f, 0x0004, 0x0004, 0x0004, 0x0009, 0x0020, + 0x0002, 0x0000, 0x001f, 0x0003, 0x0001, 0x0000, 0x0003, 0x0009, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0011, 0x0000, + 0x0007, 0x000a, 0x0002, 0x0000, 0x0003, 0x0001, 0x0000, 0x0005, 0x0001, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0001, 0x0000, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0030, 0x0000, 0x000f, + 0x000f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0002, 0x0001, 0x0003, + 0x0002, 0x0000, 0x0001, 0x0003, 0x0004, 0x0001, 0x0003, 0x000a, 0x0003, + 0x0000, 0x000e, 0x0000, 0x0001, 0x0002, 0x0003, 0x0001, 0x0000, 0x0002, + 0x0004, 0x0007, 0x0000, 0x0001, 0x0008, 0x0003, 0x0000, 0x0002, 0x0000, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0007, 0x0001, 0x0001, 0x0000, 0x0006, + 0x0004, 0x0005, 0x0000, 0x0000, 0x0000, 0x0001, 0x0007, 0x0002, 0x0000, + 0x0000, 0x0005, 0x0000, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001, + 0x0007, 0x0000, 0x0001, 0x0000, 0x0000, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0003, 0x0004, 0x0008, 0x0001, 0x0001, 0x0000, 0x0000, 0x0003, 0x0001, + 0x0000, 0x0009, 0x0005, 0x0003, 0x0000, 0x0005, 0x0002, 0x000c, 0x0001, + 0x0006, 0x0005, 0x0000, 0x0015, 0x0006, 0x0001, 0x0001, 0x0005, 0x0000, + 0x0001, 0x0006, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0001, 0x0004, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000b, 0x0002, 0x0004, 0x0006, + 0x0000, 0x0003, 0x0000, 0x0001, 0x0003, 0x002d, 0x0016, 0x0002, 0x000f, + 0x0006, 0x0003, 0x0002, 0x0036, 0x0031, 0x0000, 0x0000, 0x0004, 0x000e, + 0x0006, 0x0010, 0x0006, 0x0001, 0x0004, 0x0000, 0x0006, 0x0000, 0x0003, + 0x0003, 0x0001, 0x0006, 0x0006, 0x0000, 0x005f, 0x00ef}; #define WCW0_LEN 367 static const uint32_t wcw2_lo[] = { - 0x001100, 0x00231a, 0x002329, 0x0023e9, 0x0023f0, 0x0023f3, 0x0025fd, 0x002614, - 0x002630, 0x002648, 0x00267f, 0x00268a, 0x002693, 0x0026a1, 0x0026aa, 0x0026bd, - 0x0026c4, 0x0026ce, 0x0026d4, 0x0026ea, 0x0026f2, 0x0026f5, 0x0026fa, 0x0026fd, - 0x002705, 0x00270a, 0x002728, 0x00274c, 0x00274e, 0x002753, 0x002757, 0x002795, - 0x0027b0, 0x0027bf, 0x002b1b, 0x002b50, 0x002b55, 0x002e80, 0x002e9b, 0x002f00, - 0x002ff0, 0x00302e, 0x003041, 0x00309b, 0x003105, 0x003131, 0x003165, 0x003190, - 0x0031ef, 0x003220, 0x00a490, 0x00a960, 0x00ac00, 0x00f900, 0x00fa70, 0x00fe10, - 0x00fe30, 0x00fe54, 0x00fe68, 0x00ff01, 0x00ffe0, 0x016fe0, 0x016ff0, 0x017000, - 0x018800, 0x018cff, 0x01aff0, 0x01aff5, 0x01affd, 0x01b000, 0x01b132, 0x01b150, - 0x01b155, 0x01b164, 0x01b170, 0x01d300, 0x01d360, 0x01f004, 0x01f0cf, 0x01f18e, - 0x01f191, 0x01f200, 0x01f210, 0x01f240, 0x01f250, 0x01f260, 0x01f300, 0x01f32d, - 0x01f337, 0x01f37e, 0x01f3a0, 0x01f3cf, 0x01f3e0, 0x01f3f4, 0x01f3f8, 0x01f440, - 0x01f442, 0x01f4ff, 0x01f54b, 0x01f550, 0x01f57a, 0x01f595, 0x01f5a4, 0x01f5fb, - 0x01f680, 0x01f6cc, 0x01f6d0, 0x01f6d5, 0x01f6dc, 0x01f6eb, 0x01f6f4, 0x01f7e0, - 0x01f7f0, 0x01f90c, 0x01f93c, 0x01f947, 0x01fa70, 0x01fa80, 0x01fa8f, 0x01face, - 0x01fadf, 0x01faf0, 0x020000, 0x02a700, 0x02b740, 0x02b820, 0x02ceb0, 0x02ebf0, - 0x02f800, 0x030000, 0x031350 -}; + 0x001100, 0x00231a, 0x002329, 0x0023e9, 0x0023f0, 0x0023f3, 0x0025fd, + 0x002614, 0x002630, 0x002648, 0x00267f, 0x00268a, 0x002693, 0x0026a1, + 0x0026aa, 0x0026bd, 0x0026c4, 0x0026ce, 0x0026d4, 0x0026ea, 0x0026f2, + 0x0026f5, 0x0026fa, 0x0026fd, 0x002705, 0x00270a, 0x002728, 0x00274c, + 0x00274e, 0x002753, 0x002757, 0x002795, 0x0027b0, 0x0027bf, 0x002b1b, + 0x002b50, 0x002b55, 0x002e80, 0x002e9b, 0x002f00, 0x002ff0, 0x00302e, + 0x003041, 0x00309b, 0x003105, 0x003131, 0x003165, 0x003190, 0x0031ef, + 0x003220, 0x00a490, 0x00a960, 0x00ac00, 0x00f900, 0x00fa70, 0x00fe10, + 0x00fe30, 0x00fe54, 0x00fe68, 0x00ff01, 0x00ffe0, 0x016fe0, 0x016ff0, + 0x017000, 0x018800, 0x018cff, 0x01aff0, 0x01aff5, 0x01affd, 0x01b000, + 0x01b132, 0x01b150, 0x01b155, 0x01b164, 0x01b170, 0x01d300, 0x01d360, + 0x01f004, 0x01f0cf, 0x01f18e, 0x01f191, 0x01f200, 0x01f210, 0x01f240, + 0x01f250, 0x01f260, 0x01f300, 0x01f32d, 0x01f337, 0x01f37e, 0x01f3a0, + 0x01f3cf, 0x01f3e0, 0x01f3f4, 0x01f3f8, 0x01f440, 0x01f442, 0x01f4ff, + 0x01f54b, 0x01f550, 0x01f57a, 0x01f595, 0x01f5a4, 0x01f5fb, 0x01f680, + 0x01f6cc, 0x01f6d0, 0x01f6d5, 0x01f6dc, 0x01f6eb, 0x01f6f4, 0x01f7e0, + 0x01f7f0, 0x01f90c, 0x01f93c, 0x01f947, 0x01fa70, 0x01fa80, 0x01fa8f, + 0x01face, 0x01fadf, 0x01faf0, 0x020000, 0x02a700, 0x02b740, 0x02b820, + 0x02ceb0, 0x02ebf0, 0x02f800, 0x030000, 0x031350}; static const uint16_t wcw2_cnt[] = { - 0x005f, 0x0001, 0x0001, 0x0003, 0x0000, 0x0000, 0x0001, 0x0001, - 0x0007, 0x000b, 0x0000, 0x0005, 0x0000, 0x0000, 0x0001, 0x0001, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0002, - 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0019, 0x0058, 0x00d5, - 0x0039, 0x0010, 0x0055, 0x0064, 0x002a, 0x0032, 0x0029, 0x0055, - 0x002f, 0x726c, 0x0036, 0x001c, 0x2ba3, 0x016d, 0x0069, 0x0009, - 0x0022, 0x0012, 0x0003, 0x005f, 0x0006, 0x0003, 0x0001, 0x17f7, - 0x04d5, 0x0009, 0x0003, 0x0006, 0x0001, 0x0122, 0x0000, 0x0002, - 0x0000, 0x0003, 0x018b, 0x0056, 0x0016, 0x0000, 0x0000, 0x0000, - 0x0009, 0x0002, 0x002b, 0x0008, 0x0001, 0x0005, 0x0020, 0x0008, - 0x0045, 0x0015, 0x002a, 0x0004, 0x0010, 0x0000, 0x0046, 0x0000, - 0x00ba, 0x003e, 0x0003, 0x0017, 0x0000, 0x0001, 0x0000, 0x0054, - 0x0045, 0x0000, 0x0002, 0x0002, 0x0003, 0x0001, 0x0008, 0x000b, - 0x0000, 0x002e, 0x0009, 0x00b8, 0x000c, 0x0009, 0x0037, 0x000e, - 0x000a, 0x0008, 0xa6df, 0x1039, 0x00dd, 0x1681, 0x1d30, 0x026d, - 0x021d, 0x134a, 0x105f -}; + 0x005f, 0x0001, 0x0001, 0x0003, 0x0000, 0x0000, 0x0001, 0x0001, 0x0007, + 0x000b, 0x0000, 0x0005, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0002, 0x0000, 0x0002, 0x0000, 0x0000, 0x0001, 0x0000, + 0x0000, 0x0019, 0x0058, 0x00d5, 0x0039, 0x0010, 0x0055, 0x0064, 0x002a, + 0x0032, 0x0029, 0x0055, 0x002f, 0x726c, 0x0036, 0x001c, 0x2ba3, 0x016d, + 0x0069, 0x0009, 0x0022, 0x0012, 0x0003, 0x005f, 0x0006, 0x0003, 0x0001, + 0x17f7, 0x04d5, 0x0009, 0x0003, 0x0006, 0x0001, 0x0122, 0x0000, 0x0002, + 0x0000, 0x0003, 0x018b, 0x0056, 0x0016, 0x0000, 0x0000, 0x0000, 0x0009, + 0x0002, 0x002b, 0x0008, 0x0001, 0x0005, 0x0020, 0x0008, 0x0045, 0x0015, + 0x002a, 0x0004, 0x0010, 0x0000, 0x0046, 0x0000, 0x00ba, 0x003e, 0x0003, + 0x0017, 0x0000, 0x0001, 0x0000, 0x0054, 0x0045, 0x0000, 0x0002, 0x0002, + 0x0003, 0x0001, 0x0008, 0x000b, 0x0000, 0x002e, 0x0009, 0x00b8, 0x000c, + 0x0009, 0x0037, 0x000e, 0x000a, 0x0008, 0xa6df, 0x1039, 0x00dd, 0x1681, + 0x1d30, 0x026d, 0x021d, 0x134a, 0x105f}; #define WCW2_LEN 131 -static int wcrange(const uint32_t *lo, const uint16_t *cnt, int n, uint32_t ch) { +static int wcrange(const uint32_t *lo, const uint16_t *cnt, int n, + uint32_t ch) { int l = 0, h = n - 1; while (l <= h) { int m = (l + h) / 2; - if (ch < lo[m]) h = m - 1; - else if (ch > lo[m] + cnt[m]) l = m + 1; - else return 1; + if (ch < lo[m]) + h = m - 1; + else if (ch > lo[m] + cnt[m]) + l = m + 1; + else + return 1; } return 0; } @@ -168,8 +170,10 @@ int wcwidth(uint32_t ch) { return 1; if (ch < 0x20 || (ch > 0x7e && ch < 0xa0)) return ch == 0 ? 0 : -1; - if (wcrange(wcw0_lo, wcw0_cnt, WCW0_LEN, ch)) return 0; - if (wcrange(wcw2_lo, wcw2_cnt, WCW2_LEN, ch)) return 2; + if (wcrange(wcw0_lo, wcw0_cnt, WCW0_LEN, ch)) + return 0; + if (wcrange(wcw2_lo, wcw2_cnt, WCW2_LEN, ch)) + return 2; return 1; } diff --git a/tasks/build-npm.ts b/tasks/build-npm.ts index 7259863..1e81e67 100644 --- a/tasks/build-npm.ts +++ b/tasks/build-npm.ts @@ -20,8 +20,9 @@ await build({ typeCheck: false, compilerOptions: { lib: ["ESNext"], - target: "ES2020", - sourceMap: true, + target: "ES2022", + sourceMap: false, + declarationMap: false, }, package: { name: "clayterm", @@ -37,9 +38,10 @@ await build({ url: "https://github.com/thefrontside/clayterm/issues", }, engines: { - node: ">= 16", + node: ">= 22", }, sideEffects: false, + files: ["esm"], }, }); diff --git a/tasks/bundle-wasm.ts b/tasks/bundle-wasm.ts index ab69236..fce2f04 100644 --- a/tasks/bundle-wasm.ts +++ b/tasks/bundle-wasm.ts @@ -16,4 +16,8 @@ export const compiled = await WebAssembly.compile(await new Response(stream).arr `; await Deno.writeTextFile("wasm.ts", source); -console.log(`wrote wasm.ts (${wasm.length} → ${compressed.byteLength} bytes compressed, ${Math.round(compressed.byteLength / wasm.length * 100)}%)`); +console.log( + `wrote wasm.ts (${wasm.length} → ${compressed.byteLength} bytes compressed, ${ + Math.round(compressed.byteLength / wasm.length * 100) + }%)`, +); From 1ec215bc2b1152411e7a4606f8295af2f1556a1d Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 23 May 2026 01:15:28 -0400 Subject: [PATCH 05/11] =?UTF-8?q?=F0=9F=90=9B=20install=20wasm-opt=20in=20?= =?UTF-8?q?ci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/preview.yml | 3 +++ .github/workflows/publish.yml | 9 +++++++++ .github/workflows/verify.yaml | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index dee9fab..5f1647f 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -21,6 +21,9 @@ jobs: with: deno-version: v2.x + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 800f1d4..0796120 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,6 +23,9 @@ jobs: with: deno-version: v2.x + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make @@ -49,6 +52,9 @@ jobs: with: deno-version: v2.x + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make @@ -109,6 +115,9 @@ jobs: with: deno-version: v2.x + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index 3fd5b3f..5407de7 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -30,6 +30,9 @@ jobs: - name: lint run: deno lint + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make @@ -88,6 +91,9 @@ jobs: with: deno-version: v2.x + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make @@ -116,6 +122,9 @@ jobs: with: node-version: 24 + - name: install binaryen + run: sudo apt-get install -y binaryen + - name: build wasm run: make From c6527e225fc075e89004f6f89940a19adbebd33e Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 23 May 2026 16:34:05 -0400 Subject: [PATCH 06/11] =?UTF-8?q?=E2=9A=A1=20use=20brotli-11=20+=20z85=20w?= =?UTF-8?q?asm=20encoding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deno.json | 3 +++ tasks/bundle-wasm.ts | 55 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/deno.json b/deno.json index fab9ce2..6f83602 100644 --- a/deno.json +++ b/deno.json @@ -25,6 +25,9 @@ "include": ["*.ts"], "exclude": ["!wasm.ts"] }, + "compilerOptions": { + "types": ["npm:@types/node"] + }, "fmt": { "exclude": ["clay", "build"] }, diff --git a/tasks/bundle-wasm.ts b/tasks/bundle-wasm.ts index fce2f04..6cd9981 100644 --- a/tasks/bundle-wasm.ts +++ b/tasks/bundle-wasm.ts @@ -1,23 +1,54 @@ -import { encodeBase64 } from "@std/encoding/base64"; +import { brotliCompressSync, constants } from "node:zlib"; + +const Z85 = + "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"; + +function encodeZ85(data: Uint8Array): string { + let padLen = (4 - (data.length % 4)) % 4; + let src = data; + if (padLen > 0) { + src = new Uint8Array(data.length + padLen); + src.set(data); + } + let out: string[] = []; + for (let i = 0; i < src.length; i += 4) { + let v = src[i] * 16777216 + src[i + 1] * 65536 + src[i + 2] * 256 + + src[i + 3]; + out.push( + Z85[Math.floor(v / 52200625)], + Z85[Math.floor(v / 614125) % 85], + Z85[Math.floor(v / 7225) % 85], + Z85[Math.floor(v / 85) % 85], + Z85[v % 85], + ); + } + return out.join(""); +} const wasm = await Deno.readFile("clayterm.wasm"); -const cs = new CompressionStream("deflate-raw"); -const compressed = await new Response( - new Blob([wasm]).stream().pipeThrough(cs), -).arrayBuffer(); +const compressed = new Uint8Array(brotliCompressSync(wasm, { + params: { + [constants.BROTLI_PARAM_QUALITY]: 11, + [constants.BROTLI_PARAM_SIZE_HINT]: wasm.length, + [constants.BROTLI_PARAM_LGWIN]: 24, + }, +})); -const base64 = encodeBase64(new Uint8Array(compressed)); +const z85 = encodeZ85(compressed); -const source = `const bin = atob("${base64}"); -const compressed = Uint8Array.from(bin, c => c.charCodeAt(0)); -const stream = new Blob([compressed]).stream().pipeThrough(new DecompressionStream("deflate-raw")); -export const compiled = await WebAssembly.compile(await new Response(stream).arrayBuffer()); +// Decoder uses division instead of >>> to avoid 32-bit truncation on values near 0xFFFFFFFF. +const source = `import{brotliDecompressSync}from"node:zlib"; +const Z="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"; +const T=new Uint8Array(128);for(let i=0;i<85;i++)T[Z.charCodeAt(i)]=i; +function d(s,n){const b=new Uint8Array(n);let o=0;for(let i=0;i Date: Sat, 23 May 2026 19:39:47 -0400 Subject: [PATCH 07/11] =?UTF-8?q?=F0=9F=93=8C=20pin=20@types/node=20to=20v?= =?UTF-8?q?22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deno.json | 5 +++-- deno.lock | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/deno.json b/deno.json index 6f83602..3aff2ca 100644 --- a/deno.json +++ b/deno.json @@ -15,7 +15,8 @@ "@sinclair/typebox": "npm:@sinclair/typebox@^0.34", "dnt": "jsr:@deno/dnt@0.42.3", "effection": "npm:effection@^4.0.2", - "@std/encoding": "jsr:@std/encoding@1" + "@std/encoding": "jsr:@std/encoding@1", + "@types/node": "npm:@types/node@^22" }, "exports": { ".": "./mod.ts", @@ -26,7 +27,7 @@ "exclude": ["!wasm.ts"] }, "compilerOptions": { - "types": ["npm:@types/node"] + "types": ["@types/node"] }, "fmt": { "exclude": ["clay", "build"] diff --git a/deno.lock b/deno.lock index 7947a80..84bd87c 100644 --- a/deno.lock +++ b/deno.lock @@ -126,6 +126,7 @@ "jsr:@std/expect@1", "jsr:@std/testing@1", "npm:@sinclair/typebox@0.34", + "npm:@types/node@22", "npm:effection@^4.0.2" ] } From db907408cb48dab239d6a34e5c539cdf26673af5 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 23 May 2026 19:56:23 -0400 Subject: [PATCH 08/11] =?UTF-8?q?=F0=9F=A7=BC=20apply=20@ghostdevv=20revie?= =?UTF-8?q?w=20suggestions=20from=20PR=20#35?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: ghostdevv --- tasks/build-npm.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tasks/build-npm.ts b/tasks/build-npm.ts index 1e81e67..c31f754 100644 --- a/tasks/build-npm.ts +++ b/tasks/build-npm.ts @@ -20,10 +20,8 @@ await build({ typeCheck: false, compilerOptions: { lib: ["ESNext"], - target: "ES2022", - sourceMap: false, - declarationMap: false, }, + skipSourceOutput: true, package: { name: "clayterm", version, @@ -41,7 +39,7 @@ await build({ node: ">= 22", }, sideEffects: false, - files: ["esm"], + type: "module", }, }); From 1ea98a56823b0003671297ee8a9519f9fac0ef19 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 23 May 2026 20:34:21 -0400 Subject: [PATCH 09/11] =?UTF-8?q?=F0=9F=94=A8=20add=20type=20to=20bundle-w?= =?UTF-8?q?asm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tasks/bundle-wasm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/bundle-wasm.ts b/tasks/bundle-wasm.ts index 6cd9981..d1918b2 100644 --- a/tasks/bundle-wasm.ts +++ b/tasks/bundle-wasm.ts @@ -41,7 +41,7 @@ const z85 = encodeZ85(compressed); const source = `import{brotliDecompressSync}from"node:zlib"; const Z="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"; const T=new Uint8Array(128);for(let i=0;i<85;i++)T[Z.charCodeAt(i)]=i; -function d(s,n){const b=new Uint8Array(n);let o=0;for(let i=0;i Date: Sat, 23 May 2026 22:21:12 -0400 Subject: [PATCH 10/11] =?UTF-8?q?=F0=9F=92=8C=20signed,=20sealed,=20delive?= =?UTF-8?q?red?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 79052b0cb324349ae0bc30600b5dec4c9f7b7adc Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sun, 24 May 2026 13:27:45 -0400 Subject: [PATCH 11/11] =?UTF-8?q?=F0=9F=99=85=20revert=20aggressive=20opti?= =?UTF-8?q?mization=20experiments=20pending=20benchmark?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts three changes that need benchmarks before landing: - -Oz / wasm-opt - brotli+Z85 wasm compression - wcwidth.c rewrite --- .github/workflows/preview.yml | 3 - .github/workflows/publish.yml | 9 - .github/workflows/verify.yaml | 9 - Makefile | 4 +- deno.json | 6 +- deno.lock | 1 - src/wcwidth.c | 1260 ++++++++++++++++++++++++++++----- tasks/bundle-wasm.ts | 55 +- 8 files changed, 1107 insertions(+), 240 deletions(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 5f1647f..dee9fab 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -21,9 +21,6 @@ jobs: with: deno-version: v2.x - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0796120..800f1d4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -23,9 +23,6 @@ jobs: with: deno-version: v2.x - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make @@ -52,9 +49,6 @@ jobs: with: deno-version: v2.x - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make @@ -115,9 +109,6 @@ jobs: with: deno-version: v2.x - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make diff --git a/.github/workflows/verify.yaml b/.github/workflows/verify.yaml index 5407de7..3fd5b3f 100644 --- a/.github/workflows/verify.yaml +++ b/.github/workflows/verify.yaml @@ -30,9 +30,6 @@ jobs: - name: lint run: deno lint - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make @@ -91,9 +88,6 @@ jobs: with: deno-version: v2.x - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make @@ -122,9 +116,6 @@ jobs: with: node-version: 24 - - name: install binaryen - run: sudo apt-get install -y binaryen - - name: build wasm run: make diff --git a/Makefile b/Makefile index cb6e391..1103b8e 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,8 @@ CC = clang -WASM_OPT ?= wasm-opt TARGET = clayterm.wasm SRC = src/module.c -CFLAGS = --target=wasm32 -nostdlib -Oz \ +CFLAGS = --target=wasm32 -nostdlib -O2 \ -ffunction-sections -fdata-sections \ -mbulk-memory \ -DCLAY_IMPLEMENTATION -DCLAY_WASM \ @@ -49,7 +48,6 @@ DEPS = $(wildcard src/*.c src/*.h) $(TARGET): $(DEPS) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC) - $(WASM_OPT) -Oz --enable-bulk-memory -o $@ $@ wasm.ts: $(TARGET) deno run --allow-read --allow-write tasks/bundle-wasm.ts diff --git a/deno.json b/deno.json index 3aff2ca..fab9ce2 100644 --- a/deno.json +++ b/deno.json @@ -15,8 +15,7 @@ "@sinclair/typebox": "npm:@sinclair/typebox@^0.34", "dnt": "jsr:@deno/dnt@0.42.3", "effection": "npm:effection@^4.0.2", - "@std/encoding": "jsr:@std/encoding@1", - "@types/node": "npm:@types/node@^22" + "@std/encoding": "jsr:@std/encoding@1" }, "exports": { ".": "./mod.ts", @@ -26,9 +25,6 @@ "include": ["*.ts"], "exclude": ["!wasm.ts"] }, - "compilerOptions": { - "types": ["@types/node"] - }, "fmt": { "exclude": ["clay", "build"] }, diff --git a/deno.lock b/deno.lock index 84bd87c..7947a80 100644 --- a/deno.lock +++ b/deno.lock @@ -126,7 +126,6 @@ "jsr:@std/expect@1", "jsr:@std/testing@1", "npm:@sinclair/typebox@0.34", - "npm:@types/node@22", "npm:effection@^4.0.2" ] } diff --git a/src/wcwidth.c b/src/wcwidth.c index 11922f5..b821866 100644 --- a/src/wcwidth.c +++ b/src/wcwidth.c @@ -1,167 +1,1096 @@ /* wcwidth.c - Unicode character width lookup - * Derived from termbox2 (https://github.com/termbox/termbox2), Unicode 15.0 + * Extracted from termbox2 (https://github.com/termbox/termbox2) + * Table covers Unicode 15.0 * - * Minimal variant: only width-0 (combining) and width-2 (wide CJK) entries. - * All other assigned and unassigned codepoints default to width 1. - * Sources: EastAsianWidth.txt (W/F → 2), UnicodeData.txt Mn/Me (→ 0), - * DerivedCoreProperties.txt Default_Ignorable (→ 0) - * - * Encoding: two split tables (w=0 and w=2), each stored as parallel - * uint32_t lo[] + uint16_t count[] arrays where hi = lo + count. + * To verify or update, the canonical sources are: + * - https://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt + * Defines W (wide=2) and F (fullwidth=2) + * - https://www.unicode.org/Public/UNIDATA/UnicodeData.txt + * General_Category=Mn/Me for combining marks (width=0) + * - https://www.unicode.org/Public/UNIDATA/DerivedCoreProperties.txt + * Default_Ignorable_Code_Point for zero-width */ #include -static const uint32_t wcw0_lo[] = { - 0x000300, 0x000483, 0x000591, 0x0005bf, 0x0005c1, 0x0005c4, 0x0005c7, - 0x000610, 0x00061c, 0x00064b, 0x000670, 0x0006d6, 0x0006df, 0x0006e7, - 0x0006ea, 0x000711, 0x000730, 0x0007a6, 0x0007eb, 0x0007fd, 0x000816, - 0x00081b, 0x000825, 0x000829, 0x000859, 0x000897, 0x0008ca, 0x0008e3, - 0x00093a, 0x00093c, 0x000941, 0x00094d, 0x000951, 0x000962, 0x000981, - 0x0009bc, 0x0009c1, 0x0009cd, 0x0009e2, 0x0009fe, 0x000a01, 0x000a3c, - 0x000a41, 0x000a47, 0x000a4b, 0x000a51, 0x000a70, 0x000a75, 0x000a81, - 0x000abc, 0x000ac1, 0x000ac7, 0x000acd, 0x000ae2, 0x000afa, 0x000b01, - 0x000b3c, 0x000b3f, 0x000b41, 0x000b4d, 0x000b55, 0x000b62, 0x000b82, - 0x000bc0, 0x000bcd, 0x000c00, 0x000c04, 0x000c3c, 0x000c3e, 0x000c46, - 0x000c4a, 0x000c55, 0x000c62, 0x000c81, 0x000cbc, 0x000cbf, 0x000cc6, - 0x000ccc, 0x000ce2, 0x000d00, 0x000d3b, 0x000d41, 0x000d4d, 0x000d62, - 0x000d81, 0x000dca, 0x000dd2, 0x000dd6, 0x000e31, 0x000e34, 0x000e47, - 0x000eb1, 0x000eb4, 0x000ec8, 0x000f18, 0x000f35, 0x000f37, 0x000f39, - 0x000f71, 0x000f80, 0x000f86, 0x000f8d, 0x000f99, 0x000fc6, 0x00102d, - 0x001032, 0x001039, 0x00103d, 0x001058, 0x00105e, 0x001071, 0x001082, - 0x001085, 0x00108d, 0x00109d, 0x001160, 0x00135d, 0x001712, 0x001732, - 0x001752, 0x001772, 0x0017b4, 0x0017b7, 0x0017c6, 0x0017c9, 0x0017dd, - 0x00180b, 0x001885, 0x0018a9, 0x001920, 0x001927, 0x001932, 0x001939, - 0x001a17, 0x001a1b, 0x001a56, 0x001a58, 0x001a60, 0x001a62, 0x001a65, - 0x001a73, 0x001a7f, 0x001ab0, 0x001b00, 0x001b34, 0x001b36, 0x001b3c, - 0x001b42, 0x001b6b, 0x001b80, 0x001ba2, 0x001ba8, 0x001bab, 0x001be6, - 0x001be8, 0x001bed, 0x001bef, 0x001c2c, 0x001c36, 0x001cd0, 0x001cd4, - 0x001ce2, 0x001ced, 0x001cf4, 0x001cf8, 0x001dc0, 0x00200b, 0x00202a, - 0x002060, 0x002066, 0x0020d0, 0x002cef, 0x002d7f, 0x002de0, 0x00302a, - 0x003099, 0x003164, 0x00a66f, 0x00a674, 0x00a69e, 0x00a6f0, 0x00a802, - 0x00a806, 0x00a80b, 0x00a825, 0x00a82c, 0x00a8c4, 0x00a8e0, 0x00a8ff, - 0x00a926, 0x00a947, 0x00a980, 0x00a9b3, 0x00a9b6, 0x00a9bc, 0x00a9e5, - 0x00aa29, 0x00aa31, 0x00aa35, 0x00aa43, 0x00aa4c, 0x00aa7c, 0x00aab0, - 0x00aab2, 0x00aab7, 0x00aabe, 0x00aac1, 0x00aaec, 0x00aaf6, 0x00abe5, - 0x00abe8, 0x00abed, 0x00d7b0, 0x00d7cb, 0x00fb1e, 0x00fe00, 0x00fe20, - 0x00feff, 0x00ffa0, 0x0101fd, 0x0102e0, 0x010376, 0x010a01, 0x010a05, - 0x010a0c, 0x010a38, 0x010a3f, 0x010ae5, 0x010d24, 0x010d69, 0x010eab, - 0x010efc, 0x010f46, 0x010f82, 0x011001, 0x011038, 0x011070, 0x011073, - 0x01107f, 0x0110b3, 0x0110b9, 0x0110c2, 0x011100, 0x011127, 0x01112d, - 0x011173, 0x011180, 0x0111b6, 0x0111c9, 0x0111cf, 0x01122f, 0x011234, - 0x011236, 0x01123e, 0x011241, 0x0112df, 0x0112e3, 0x011300, 0x01133b, - 0x011340, 0x011366, 0x011370, 0x0113bb, 0x0113ce, 0x0113d0, 0x0113d2, - 0x0113e1, 0x011438, 0x011442, 0x011446, 0x01145e, 0x0114b3, 0x0114ba, - 0x0114bf, 0x0114c2, 0x0115b2, 0x0115bc, 0x0115bf, 0x0115dc, 0x011633, - 0x01163d, 0x01163f, 0x0116ab, 0x0116ad, 0x0116b0, 0x0116b7, 0x01171d, - 0x01171f, 0x011722, 0x011727, 0x01182f, 0x011839, 0x01193b, 0x01193e, - 0x011943, 0x0119d4, 0x0119da, 0x0119e0, 0x011a01, 0x011a33, 0x011a3b, - 0x011a47, 0x011a51, 0x011a59, 0x011a8a, 0x011a98, 0x011c30, 0x011c38, - 0x011c3f, 0x011c92, 0x011caa, 0x011cb2, 0x011cb5, 0x011d31, 0x011d3a, - 0x011d3c, 0x011d3f, 0x011d47, 0x011d90, 0x011d95, 0x011d97, 0x011ef3, - 0x011f00, 0x011f36, 0x011f40, 0x011f42, 0x011f5a, 0x013440, 0x013447, - 0x01611e, 0x01612d, 0x016af0, 0x016b30, 0x016f4f, 0x016f8f, 0x016fe4, - 0x01bc9d, 0x01bca0, 0x01cf00, 0x01cf30, 0x01d167, 0x01d173, 0x01d185, - 0x01d1aa, 0x01d242, 0x01da00, 0x01da3b, 0x01da75, 0x01da84, 0x01da9b, - 0x01daa1, 0x01e000, 0x01e008, 0x01e01b, 0x01e023, 0x01e026, 0x01e08f, - 0x01e130, 0x01e2ae, 0x01e2ec, 0x01e4ec, 0x01e5ee, 0x01e8d0, 0x01e944, - 0x0e0001, 0x0e0020, 0x0e0100}; -static const uint16_t wcw0_cnt[] = { - 0x006f, 0x0006, 0x002c, 0x0000, 0x0001, 0x0001, 0x0000, 0x000a, 0x0000, - 0x0014, 0x0000, 0x0006, 0x0005, 0x0001, 0x0003, 0x0000, 0x001a, 0x000a, - 0x0008, 0x0000, 0x0003, 0x0008, 0x0002, 0x0004, 0x0002, 0x0008, 0x0017, - 0x001f, 0x0000, 0x0000, 0x0007, 0x0000, 0x0006, 0x0001, 0x0000, 0x0000, - 0x0003, 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0001, 0x0001, 0x0002, - 0x0000, 0x0001, 0x0000, 0x0001, 0x0000, 0x0004, 0x0001, 0x0000, 0x0001, - 0x0005, 0x0000, 0x0000, 0x0000, 0x0003, 0x0000, 0x0001, 0x0001, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0002, 0x0003, 0x0001, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, - 0x0003, 0x0000, 0x0001, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0006, - 0x0007, 0x0000, 0x0008, 0x0006, 0x0001, 0x0000, 0x0000, 0x0000, 0x000d, - 0x0004, 0x0001, 0x000a, 0x0023, 0x0000, 0x0003, 0x0005, 0x0001, 0x0001, - 0x0001, 0x0002, 0x0003, 0x0000, 0x0001, 0x0000, 0x0000, 0x009f, 0x0002, - 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0006, 0x0000, 0x000a, 0x0000, - 0x0004, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, 0x0002, 0x0001, 0x0000, - 0x0000, 0x0006, 0x0000, 0x0000, 0x0007, 0x0009, 0x0000, 0x001e, 0x0003, - 0x0000, 0x0004, 0x0000, 0x0000, 0x0008, 0x0001, 0x0003, 0x0001, 0x0002, - 0x0000, 0x0001, 0x0000, 0x0002, 0x0007, 0x0001, 0x0002, 0x000c, 0x0006, - 0x0000, 0x0000, 0x0001, 0x003f, 0x0004, 0x0004, 0x0004, 0x0009, 0x0020, - 0x0002, 0x0000, 0x001f, 0x0003, 0x0001, 0x0000, 0x0003, 0x0009, 0x0001, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, 0x0001, 0x0011, 0x0000, - 0x0007, 0x000a, 0x0002, 0x0000, 0x0003, 0x0001, 0x0000, 0x0005, 0x0001, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0002, 0x0001, 0x0001, 0x0000, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0016, 0x0030, 0x0000, 0x000f, - 0x000f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x0002, 0x0001, 0x0003, - 0x0002, 0x0000, 0x0001, 0x0003, 0x0004, 0x0001, 0x0003, 0x000a, 0x0003, - 0x0000, 0x000e, 0x0000, 0x0001, 0x0002, 0x0003, 0x0001, 0x0000, 0x0002, - 0x0004, 0x0007, 0x0000, 0x0001, 0x0008, 0x0003, 0x0000, 0x0002, 0x0000, - 0x0001, 0x0000, 0x0000, 0x0000, 0x0007, 0x0001, 0x0001, 0x0000, 0x0006, - 0x0004, 0x0005, 0x0000, 0x0000, 0x0000, 0x0001, 0x0007, 0x0002, 0x0000, - 0x0000, 0x0005, 0x0000, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001, - 0x0007, 0x0000, 0x0001, 0x0000, 0x0000, 0x0005, 0x0000, 0x0000, 0x0000, - 0x0003, 0x0004, 0x0008, 0x0001, 0x0001, 0x0000, 0x0000, 0x0003, 0x0001, - 0x0000, 0x0009, 0x0005, 0x0003, 0x0000, 0x0005, 0x0002, 0x000c, 0x0001, - 0x0006, 0x0005, 0x0000, 0x0015, 0x0006, 0x0001, 0x0001, 0x0005, 0x0000, - 0x0001, 0x0006, 0x0000, 0x0001, 0x0000, 0x0000, 0x0001, 0x0001, 0x0004, - 0x0000, 0x0000, 0x0000, 0x0000, 0x000e, 0x000b, 0x0002, 0x0004, 0x0006, - 0x0000, 0x0003, 0x0000, 0x0001, 0x0003, 0x002d, 0x0016, 0x0002, 0x000f, - 0x0006, 0x0003, 0x0002, 0x0036, 0x0031, 0x0000, 0x0000, 0x0004, 0x000e, - 0x0006, 0x0010, 0x0006, 0x0001, 0x0004, 0x0000, 0x0006, 0x0000, 0x0003, - 0x0003, 0x0001, 0x0006, 0x0006, 0x0000, 0x005f, 0x00ef}; -#define WCW0_LEN 367 - -static const uint32_t wcw2_lo[] = { - 0x001100, 0x00231a, 0x002329, 0x0023e9, 0x0023f0, 0x0023f3, 0x0025fd, - 0x002614, 0x002630, 0x002648, 0x00267f, 0x00268a, 0x002693, 0x0026a1, - 0x0026aa, 0x0026bd, 0x0026c4, 0x0026ce, 0x0026d4, 0x0026ea, 0x0026f2, - 0x0026f5, 0x0026fa, 0x0026fd, 0x002705, 0x00270a, 0x002728, 0x00274c, - 0x00274e, 0x002753, 0x002757, 0x002795, 0x0027b0, 0x0027bf, 0x002b1b, - 0x002b50, 0x002b55, 0x002e80, 0x002e9b, 0x002f00, 0x002ff0, 0x00302e, - 0x003041, 0x00309b, 0x003105, 0x003131, 0x003165, 0x003190, 0x0031ef, - 0x003220, 0x00a490, 0x00a960, 0x00ac00, 0x00f900, 0x00fa70, 0x00fe10, - 0x00fe30, 0x00fe54, 0x00fe68, 0x00ff01, 0x00ffe0, 0x016fe0, 0x016ff0, - 0x017000, 0x018800, 0x018cff, 0x01aff0, 0x01aff5, 0x01affd, 0x01b000, - 0x01b132, 0x01b150, 0x01b155, 0x01b164, 0x01b170, 0x01d300, 0x01d360, - 0x01f004, 0x01f0cf, 0x01f18e, 0x01f191, 0x01f200, 0x01f210, 0x01f240, - 0x01f250, 0x01f260, 0x01f300, 0x01f32d, 0x01f337, 0x01f37e, 0x01f3a0, - 0x01f3cf, 0x01f3e0, 0x01f3f4, 0x01f3f8, 0x01f440, 0x01f442, 0x01f4ff, - 0x01f54b, 0x01f550, 0x01f57a, 0x01f595, 0x01f5a4, 0x01f5fb, 0x01f680, - 0x01f6cc, 0x01f6d0, 0x01f6d5, 0x01f6dc, 0x01f6eb, 0x01f6f4, 0x01f7e0, - 0x01f7f0, 0x01f90c, 0x01f93c, 0x01f947, 0x01fa70, 0x01fa80, 0x01fa8f, - 0x01face, 0x01fadf, 0x01faf0, 0x020000, 0x02a700, 0x02b740, 0x02b820, - 0x02ceb0, 0x02ebf0, 0x02f800, 0x030000, 0x031350}; -static const uint16_t wcw2_cnt[] = { - 0x005f, 0x0001, 0x0001, 0x0003, 0x0000, 0x0000, 0x0001, 0x0001, 0x0007, - 0x000b, 0x0000, 0x0005, 0x0000, 0x0000, 0x0001, 0x0001, 0x0001, 0x0000, - 0x0000, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0001, 0x0000, - 0x0000, 0x0000, 0x0002, 0x0000, 0x0002, 0x0000, 0x0000, 0x0001, 0x0000, - 0x0000, 0x0019, 0x0058, 0x00d5, 0x0039, 0x0010, 0x0055, 0x0064, 0x002a, - 0x0032, 0x0029, 0x0055, 0x002f, 0x726c, 0x0036, 0x001c, 0x2ba3, 0x016d, - 0x0069, 0x0009, 0x0022, 0x0012, 0x0003, 0x005f, 0x0006, 0x0003, 0x0001, - 0x17f7, 0x04d5, 0x0009, 0x0003, 0x0006, 0x0001, 0x0122, 0x0000, 0x0002, - 0x0000, 0x0003, 0x018b, 0x0056, 0x0016, 0x0000, 0x0000, 0x0000, 0x0009, - 0x0002, 0x002b, 0x0008, 0x0001, 0x0005, 0x0020, 0x0008, 0x0045, 0x0015, - 0x002a, 0x0004, 0x0010, 0x0000, 0x0046, 0x0000, 0x00ba, 0x003e, 0x0003, - 0x0017, 0x0000, 0x0001, 0x0000, 0x0054, 0x0045, 0x0000, 0x0002, 0x0002, - 0x0003, 0x0001, 0x0008, 0x000b, 0x0000, 0x002e, 0x0009, 0x00b8, 0x000c, - 0x0009, 0x0037, 0x000e, 0x000a, 0x0008, 0xa6df, 0x1039, 0x00dd, 0x1681, - 0x1d30, 0x026d, 0x021d, 0x134a, 0x105f}; -#define WCW2_LEN 131 +static struct { + uint32_t lo; + uint32_t hi; + int w; +} wcwidth_table[] = {{0x000001, 0x00001f, -1}, {0x000020, 0x00007e, 1}, + {0x00007f, 0x00009f, -1}, {0x0000a0, 0x0002ff, 1}, + {0x000300, 0x00036f, 0}, {0x000370, 0x000377, 1}, + {0x000378, 0x000379, -1}, {0x00037a, 0x00037f, 1}, + {0x000380, 0x000383, -1}, {0x000384, 0x00038a, 1}, + {0x00038b, 0x00038b, -1}, {0x00038c, 0x00038c, 1}, + {0x00038d, 0x00038d, -1}, {0x00038e, 0x0003a1, 1}, + {0x0003a2, 0x0003a2, -1}, {0x0003a3, 0x000482, 1}, + {0x000483, 0x000489, 0}, {0x00048a, 0x00052f, 1}, + {0x000530, 0x000530, -1}, {0x000531, 0x000556, 1}, + {0x000557, 0x000558, -1}, {0x000559, 0x00058a, 1}, + {0x00058b, 0x00058c, -1}, {0x00058d, 0x00058f, 1}, + {0x000590, 0x000590, -1}, {0x000591, 0x0005bd, 0}, + {0x0005be, 0x0005be, 1}, {0x0005bf, 0x0005bf, 0}, + {0x0005c0, 0x0005c0, 1}, {0x0005c1, 0x0005c2, 0}, + {0x0005c3, 0x0005c3, 1}, {0x0005c4, 0x0005c5, 0}, + {0x0005c6, 0x0005c6, 1}, {0x0005c7, 0x0005c7, 0}, + {0x0005c8, 0x0005cf, -1}, {0x0005d0, 0x0005ea, 1}, + {0x0005eb, 0x0005ee, -1}, {0x0005ef, 0x0005f4, 1}, + {0x0005f5, 0x0005ff, -1}, {0x000600, 0x00060f, 1}, + {0x000610, 0x00061a, 0}, {0x00061b, 0x00061b, 1}, + {0x00061c, 0x00061c, 0}, {0x00061d, 0x00064a, 1}, + {0x00064b, 0x00065f, 0}, {0x000660, 0x00066f, 1}, + {0x000670, 0x000670, 0}, {0x000671, 0x0006d5, 1}, + {0x0006d6, 0x0006dc, 0}, {0x0006dd, 0x0006de, 1}, + {0x0006df, 0x0006e4, 0}, {0x0006e5, 0x0006e6, 1}, + {0x0006e7, 0x0006e8, 0}, {0x0006e9, 0x0006e9, 1}, + {0x0006ea, 0x0006ed, 0}, {0x0006ee, 0x00070d, 1}, + {0x00070e, 0x00070e, -1}, {0x00070f, 0x000710, 1}, + {0x000711, 0x000711, 0}, {0x000712, 0x00072f, 1}, + {0x000730, 0x00074a, 0}, {0x00074b, 0x00074c, -1}, + {0x00074d, 0x0007a5, 1}, {0x0007a6, 0x0007b0, 0}, + {0x0007b1, 0x0007b1, 1}, {0x0007b2, 0x0007bf, -1}, + {0x0007c0, 0x0007ea, 1}, {0x0007eb, 0x0007f3, 0}, + {0x0007f4, 0x0007fa, 1}, {0x0007fb, 0x0007fc, -1}, + {0x0007fd, 0x0007fd, 0}, {0x0007fe, 0x000815, 1}, + {0x000816, 0x000819, 0}, {0x00081a, 0x00081a, 1}, + {0x00081b, 0x000823, 0}, {0x000824, 0x000824, 1}, + {0x000825, 0x000827, 0}, {0x000828, 0x000828, 1}, + {0x000829, 0x00082d, 0}, {0x00082e, 0x00082f, -1}, + {0x000830, 0x00083e, 1}, {0x00083f, 0x00083f, -1}, + {0x000840, 0x000858, 1}, {0x000859, 0x00085b, 0}, + {0x00085c, 0x00085d, -1}, {0x00085e, 0x00085e, 1}, + {0x00085f, 0x00085f, -1}, {0x000860, 0x00086a, 1}, + {0x00086b, 0x00086f, -1}, {0x000870, 0x00088e, 1}, + {0x00088f, 0x00088f, -1}, {0x000890, 0x000891, 1}, + {0x000892, 0x000896, -1}, {0x000897, 0x00089f, 0}, + {0x0008a0, 0x0008c9, 1}, {0x0008ca, 0x0008e1, 0}, + {0x0008e2, 0x0008e2, 1}, {0x0008e3, 0x000902, 0}, + {0x000903, 0x000939, 1}, {0x00093a, 0x00093a, 0}, + {0x00093b, 0x00093b, 1}, {0x00093c, 0x00093c, 0}, + {0x00093d, 0x000940, 1}, {0x000941, 0x000948, 0}, + {0x000949, 0x00094c, 1}, {0x00094d, 0x00094d, 0}, + {0x00094e, 0x000950, 1}, {0x000951, 0x000957, 0}, + {0x000958, 0x000961, 1}, {0x000962, 0x000963, 0}, + {0x000964, 0x000980, 1}, {0x000981, 0x000981, 0}, + {0x000982, 0x000983, 1}, {0x000984, 0x000984, -1}, + {0x000985, 0x00098c, 1}, {0x00098d, 0x00098e, -1}, + {0x00098f, 0x000990, 1}, {0x000991, 0x000992, -1}, + {0x000993, 0x0009a8, 1}, {0x0009a9, 0x0009a9, -1}, + {0x0009aa, 0x0009b0, 1}, {0x0009b1, 0x0009b1, -1}, + {0x0009b2, 0x0009b2, 1}, {0x0009b3, 0x0009b5, -1}, + {0x0009b6, 0x0009b9, 1}, {0x0009ba, 0x0009bb, -1}, + {0x0009bc, 0x0009bc, 0}, {0x0009bd, 0x0009c0, 1}, + {0x0009c1, 0x0009c4, 0}, {0x0009c5, 0x0009c6, -1}, + {0x0009c7, 0x0009c8, 1}, {0x0009c9, 0x0009ca, -1}, + {0x0009cb, 0x0009cc, 1}, {0x0009cd, 0x0009cd, 0}, + {0x0009ce, 0x0009ce, 1}, {0x0009cf, 0x0009d6, -1}, + {0x0009d7, 0x0009d7, 1}, {0x0009d8, 0x0009db, -1}, + {0x0009dc, 0x0009dd, 1}, {0x0009de, 0x0009de, -1}, + {0x0009df, 0x0009e1, 1}, {0x0009e2, 0x0009e3, 0}, + {0x0009e4, 0x0009e5, -1}, {0x0009e6, 0x0009fd, 1}, + {0x0009fe, 0x0009fe, 0}, {0x0009ff, 0x000a00, -1}, + {0x000a01, 0x000a02, 0}, {0x000a03, 0x000a03, 1}, + {0x000a04, 0x000a04, -1}, {0x000a05, 0x000a0a, 1}, + {0x000a0b, 0x000a0e, -1}, {0x000a0f, 0x000a10, 1}, + {0x000a11, 0x000a12, -1}, {0x000a13, 0x000a28, 1}, + {0x000a29, 0x000a29, -1}, {0x000a2a, 0x000a30, 1}, + {0x000a31, 0x000a31, -1}, {0x000a32, 0x000a33, 1}, + {0x000a34, 0x000a34, -1}, {0x000a35, 0x000a36, 1}, + {0x000a37, 0x000a37, -1}, {0x000a38, 0x000a39, 1}, + {0x000a3a, 0x000a3b, -1}, {0x000a3c, 0x000a3c, 0}, + {0x000a3d, 0x000a3d, -1}, {0x000a3e, 0x000a40, 1}, + {0x000a41, 0x000a42, 0}, {0x000a43, 0x000a46, -1}, + {0x000a47, 0x000a48, 0}, {0x000a49, 0x000a4a, -1}, + {0x000a4b, 0x000a4d, 0}, {0x000a4e, 0x000a50, -1}, + {0x000a51, 0x000a51, 0}, {0x000a52, 0x000a58, -1}, + {0x000a59, 0x000a5c, 1}, {0x000a5d, 0x000a5d, -1}, + {0x000a5e, 0x000a5e, 1}, {0x000a5f, 0x000a65, -1}, + {0x000a66, 0x000a6f, 1}, {0x000a70, 0x000a71, 0}, + {0x000a72, 0x000a74, 1}, {0x000a75, 0x000a75, 0}, + {0x000a76, 0x000a76, 1}, {0x000a77, 0x000a80, -1}, + {0x000a81, 0x000a82, 0}, {0x000a83, 0x000a83, 1}, + {0x000a84, 0x000a84, -1}, {0x000a85, 0x000a8d, 1}, + {0x000a8e, 0x000a8e, -1}, {0x000a8f, 0x000a91, 1}, + {0x000a92, 0x000a92, -1}, {0x000a93, 0x000aa8, 1}, + {0x000aa9, 0x000aa9, -1}, {0x000aaa, 0x000ab0, 1}, + {0x000ab1, 0x000ab1, -1}, {0x000ab2, 0x000ab3, 1}, + {0x000ab4, 0x000ab4, -1}, {0x000ab5, 0x000ab9, 1}, + {0x000aba, 0x000abb, -1}, {0x000abc, 0x000abc, 0}, + {0x000abd, 0x000ac0, 1}, {0x000ac1, 0x000ac5, 0}, + {0x000ac6, 0x000ac6, -1}, {0x000ac7, 0x000ac8, 0}, + {0x000ac9, 0x000ac9, 1}, {0x000aca, 0x000aca, -1}, + {0x000acb, 0x000acc, 1}, {0x000acd, 0x000acd, 0}, + {0x000ace, 0x000acf, -1}, {0x000ad0, 0x000ad0, 1}, + {0x000ad1, 0x000adf, -1}, {0x000ae0, 0x000ae1, 1}, + {0x000ae2, 0x000ae3, 0}, {0x000ae4, 0x000ae5, -1}, + {0x000ae6, 0x000af1, 1}, {0x000af2, 0x000af8, -1}, + {0x000af9, 0x000af9, 1}, {0x000afa, 0x000aff, 0}, + {0x000b00, 0x000b00, -1}, {0x000b01, 0x000b01, 0}, + {0x000b02, 0x000b03, 1}, {0x000b04, 0x000b04, -1}, + {0x000b05, 0x000b0c, 1}, {0x000b0d, 0x000b0e, -1}, + {0x000b0f, 0x000b10, 1}, {0x000b11, 0x000b12, -1}, + {0x000b13, 0x000b28, 1}, {0x000b29, 0x000b29, -1}, + {0x000b2a, 0x000b30, 1}, {0x000b31, 0x000b31, -1}, + {0x000b32, 0x000b33, 1}, {0x000b34, 0x000b34, -1}, + {0x000b35, 0x000b39, 1}, {0x000b3a, 0x000b3b, -1}, + {0x000b3c, 0x000b3c, 0}, {0x000b3d, 0x000b3e, 1}, + {0x000b3f, 0x000b3f, 0}, {0x000b40, 0x000b40, 1}, + {0x000b41, 0x000b44, 0}, {0x000b45, 0x000b46, -1}, + {0x000b47, 0x000b48, 1}, {0x000b49, 0x000b4a, -1}, + {0x000b4b, 0x000b4c, 1}, {0x000b4d, 0x000b4d, 0}, + {0x000b4e, 0x000b54, -1}, {0x000b55, 0x000b56, 0}, + {0x000b57, 0x000b57, 1}, {0x000b58, 0x000b5b, -1}, + {0x000b5c, 0x000b5d, 1}, {0x000b5e, 0x000b5e, -1}, + {0x000b5f, 0x000b61, 1}, {0x000b62, 0x000b63, 0}, + {0x000b64, 0x000b65, -1}, {0x000b66, 0x000b77, 1}, + {0x000b78, 0x000b81, -1}, {0x000b82, 0x000b82, 0}, + {0x000b83, 0x000b83, 1}, {0x000b84, 0x000b84, -1}, + {0x000b85, 0x000b8a, 1}, {0x000b8b, 0x000b8d, -1}, + {0x000b8e, 0x000b90, 1}, {0x000b91, 0x000b91, -1}, + {0x000b92, 0x000b95, 1}, {0x000b96, 0x000b98, -1}, + {0x000b99, 0x000b9a, 1}, {0x000b9b, 0x000b9b, -1}, + {0x000b9c, 0x000b9c, 1}, {0x000b9d, 0x000b9d, -1}, + {0x000b9e, 0x000b9f, 1}, {0x000ba0, 0x000ba2, -1}, + {0x000ba3, 0x000ba4, 1}, {0x000ba5, 0x000ba7, -1}, + {0x000ba8, 0x000baa, 1}, {0x000bab, 0x000bad, -1}, + {0x000bae, 0x000bb9, 1}, {0x000bba, 0x000bbd, -1}, + {0x000bbe, 0x000bbf, 1}, {0x000bc0, 0x000bc0, 0}, + {0x000bc1, 0x000bc2, 1}, {0x000bc3, 0x000bc5, -1}, + {0x000bc6, 0x000bc8, 1}, {0x000bc9, 0x000bc9, -1}, + {0x000bca, 0x000bcc, 1}, {0x000bcd, 0x000bcd, 0}, + {0x000bce, 0x000bcf, -1}, {0x000bd0, 0x000bd0, 1}, + {0x000bd1, 0x000bd6, -1}, {0x000bd7, 0x000bd7, 1}, + {0x000bd8, 0x000be5, -1}, {0x000be6, 0x000bfa, 1}, + {0x000bfb, 0x000bff, -1}, {0x000c00, 0x000c00, 0}, + {0x000c01, 0x000c03, 1}, {0x000c04, 0x000c04, 0}, + {0x000c05, 0x000c0c, 1}, {0x000c0d, 0x000c0d, -1}, + {0x000c0e, 0x000c10, 1}, {0x000c11, 0x000c11, -1}, + {0x000c12, 0x000c28, 1}, {0x000c29, 0x000c29, -1}, + {0x000c2a, 0x000c39, 1}, {0x000c3a, 0x000c3b, -1}, + {0x000c3c, 0x000c3c, 0}, {0x000c3d, 0x000c3d, 1}, + {0x000c3e, 0x000c40, 0}, {0x000c41, 0x000c44, 1}, + {0x000c45, 0x000c45, -1}, {0x000c46, 0x000c48, 0}, + {0x000c49, 0x000c49, -1}, {0x000c4a, 0x000c4d, 0}, + {0x000c4e, 0x000c54, -1}, {0x000c55, 0x000c56, 0}, + {0x000c57, 0x000c57, -1}, {0x000c58, 0x000c5a, 1}, + {0x000c5b, 0x000c5c, -1}, {0x000c5d, 0x000c5d, 1}, + {0x000c5e, 0x000c5f, -1}, {0x000c60, 0x000c61, 1}, + {0x000c62, 0x000c63, 0}, {0x000c64, 0x000c65, -1}, + {0x000c66, 0x000c6f, 1}, {0x000c70, 0x000c76, -1}, + {0x000c77, 0x000c80, 1}, {0x000c81, 0x000c81, 0}, + {0x000c82, 0x000c8c, 1}, {0x000c8d, 0x000c8d, -1}, + {0x000c8e, 0x000c90, 1}, {0x000c91, 0x000c91, -1}, + {0x000c92, 0x000ca8, 1}, {0x000ca9, 0x000ca9, -1}, + {0x000caa, 0x000cb3, 1}, {0x000cb4, 0x000cb4, -1}, + {0x000cb5, 0x000cb9, 1}, {0x000cba, 0x000cbb, -1}, + {0x000cbc, 0x000cbc, 0}, {0x000cbd, 0x000cbe, 1}, + {0x000cbf, 0x000cbf, 0}, {0x000cc0, 0x000cc4, 1}, + {0x000cc5, 0x000cc5, -1}, {0x000cc6, 0x000cc6, 0}, + {0x000cc7, 0x000cc8, 1}, {0x000cc9, 0x000cc9, -1}, + {0x000cca, 0x000ccb, 1}, {0x000ccc, 0x000ccd, 0}, + {0x000cce, 0x000cd4, -1}, {0x000cd5, 0x000cd6, 1}, + {0x000cd7, 0x000cdc, -1}, {0x000cdd, 0x000cde, 1}, + {0x000cdf, 0x000cdf, -1}, {0x000ce0, 0x000ce1, 1}, + {0x000ce2, 0x000ce3, 0}, {0x000ce4, 0x000ce5, -1}, + {0x000ce6, 0x000cef, 1}, {0x000cf0, 0x000cf0, -1}, + {0x000cf1, 0x000cf3, 1}, {0x000cf4, 0x000cff, -1}, + {0x000d00, 0x000d01, 0}, {0x000d02, 0x000d0c, 1}, + {0x000d0d, 0x000d0d, -1}, {0x000d0e, 0x000d10, 1}, + {0x000d11, 0x000d11, -1}, {0x000d12, 0x000d3a, 1}, + {0x000d3b, 0x000d3c, 0}, {0x000d3d, 0x000d40, 1}, + {0x000d41, 0x000d44, 0}, {0x000d45, 0x000d45, -1}, + {0x000d46, 0x000d48, 1}, {0x000d49, 0x000d49, -1}, + {0x000d4a, 0x000d4c, 1}, {0x000d4d, 0x000d4d, 0}, + {0x000d4e, 0x000d4f, 1}, {0x000d50, 0x000d53, -1}, + {0x000d54, 0x000d61, 1}, {0x000d62, 0x000d63, 0}, + {0x000d64, 0x000d65, -1}, {0x000d66, 0x000d7f, 1}, + {0x000d80, 0x000d80, -1}, {0x000d81, 0x000d81, 0}, + {0x000d82, 0x000d83, 1}, {0x000d84, 0x000d84, -1}, + {0x000d85, 0x000d96, 1}, {0x000d97, 0x000d99, -1}, + {0x000d9a, 0x000db1, 1}, {0x000db2, 0x000db2, -1}, + {0x000db3, 0x000dbb, 1}, {0x000dbc, 0x000dbc, -1}, + {0x000dbd, 0x000dbd, 1}, {0x000dbe, 0x000dbf, -1}, + {0x000dc0, 0x000dc6, 1}, {0x000dc7, 0x000dc9, -1}, + {0x000dca, 0x000dca, 0}, {0x000dcb, 0x000dce, -1}, + {0x000dcf, 0x000dd1, 1}, {0x000dd2, 0x000dd4, 0}, + {0x000dd5, 0x000dd5, -1}, {0x000dd6, 0x000dd6, 0}, + {0x000dd7, 0x000dd7, -1}, {0x000dd8, 0x000ddf, 1}, + {0x000de0, 0x000de5, -1}, {0x000de6, 0x000def, 1}, + {0x000df0, 0x000df1, -1}, {0x000df2, 0x000df4, 1}, + {0x000df5, 0x000e00, -1}, {0x000e01, 0x000e30, 1}, + {0x000e31, 0x000e31, 0}, {0x000e32, 0x000e33, 1}, + {0x000e34, 0x000e3a, 0}, {0x000e3b, 0x000e3e, -1}, + {0x000e3f, 0x000e46, 1}, {0x000e47, 0x000e4e, 0}, + {0x000e4f, 0x000e5b, 1}, {0x000e5c, 0x000e80, -1}, + {0x000e81, 0x000e82, 1}, {0x000e83, 0x000e83, -1}, + {0x000e84, 0x000e84, 1}, {0x000e85, 0x000e85, -1}, + {0x000e86, 0x000e8a, 1}, {0x000e8b, 0x000e8b, -1}, + {0x000e8c, 0x000ea3, 1}, {0x000ea4, 0x000ea4, -1}, + {0x000ea5, 0x000ea5, 1}, {0x000ea6, 0x000ea6, -1}, + {0x000ea7, 0x000eb0, 1}, {0x000eb1, 0x000eb1, 0}, + {0x000eb2, 0x000eb3, 1}, {0x000eb4, 0x000ebc, 0}, + {0x000ebd, 0x000ebd, 1}, {0x000ebe, 0x000ebf, -1}, + {0x000ec0, 0x000ec4, 1}, {0x000ec5, 0x000ec5, -1}, + {0x000ec6, 0x000ec6, 1}, {0x000ec7, 0x000ec7, -1}, + {0x000ec8, 0x000ece, 0}, {0x000ecf, 0x000ecf, -1}, + {0x000ed0, 0x000ed9, 1}, {0x000eda, 0x000edb, -1}, + {0x000edc, 0x000edf, 1}, {0x000ee0, 0x000eff, -1}, + {0x000f00, 0x000f17, 1}, {0x000f18, 0x000f19, 0}, + {0x000f1a, 0x000f34, 1}, {0x000f35, 0x000f35, 0}, + {0x000f36, 0x000f36, 1}, {0x000f37, 0x000f37, 0}, + {0x000f38, 0x000f38, 1}, {0x000f39, 0x000f39, 0}, + {0x000f3a, 0x000f47, 1}, {0x000f48, 0x000f48, -1}, + {0x000f49, 0x000f6c, 1}, {0x000f6d, 0x000f70, -1}, + {0x000f71, 0x000f7e, 0}, {0x000f7f, 0x000f7f, 1}, + {0x000f80, 0x000f84, 0}, {0x000f85, 0x000f85, 1}, + {0x000f86, 0x000f87, 0}, {0x000f88, 0x000f8c, 1}, + {0x000f8d, 0x000f97, 0}, {0x000f98, 0x000f98, -1}, + {0x000f99, 0x000fbc, 0}, {0x000fbd, 0x000fbd, -1}, + {0x000fbe, 0x000fc5, 1}, {0x000fc6, 0x000fc6, 0}, + {0x000fc7, 0x000fcc, 1}, {0x000fcd, 0x000fcd, -1}, + {0x000fce, 0x000fda, 1}, {0x000fdb, 0x000fff, -1}, + {0x001000, 0x00102c, 1}, {0x00102d, 0x001030, 0}, + {0x001031, 0x001031, 1}, {0x001032, 0x001037, 0}, + {0x001038, 0x001038, 1}, {0x001039, 0x00103a, 0}, + {0x00103b, 0x00103c, 1}, {0x00103d, 0x00103e, 0}, + {0x00103f, 0x001057, 1}, {0x001058, 0x001059, 0}, + {0x00105a, 0x00105d, 1}, {0x00105e, 0x001060, 0}, + {0x001061, 0x001070, 1}, {0x001071, 0x001074, 0}, + {0x001075, 0x001081, 1}, {0x001082, 0x001082, 0}, + {0x001083, 0x001084, 1}, {0x001085, 0x001086, 0}, + {0x001087, 0x00108c, 1}, {0x00108d, 0x00108d, 0}, + {0x00108e, 0x00109c, 1}, {0x00109d, 0x00109d, 0}, + {0x00109e, 0x0010c5, 1}, {0x0010c6, 0x0010c6, -1}, + {0x0010c7, 0x0010c7, 1}, {0x0010c8, 0x0010cc, -1}, + {0x0010cd, 0x0010cd, 1}, {0x0010ce, 0x0010cf, -1}, + {0x0010d0, 0x0010ff, 1}, {0x001100, 0x00115f, 2}, + {0x001160, 0x0011ff, 0}, {0x001200, 0x001248, 1}, + {0x001249, 0x001249, -1}, {0x00124a, 0x00124d, 1}, + {0x00124e, 0x00124f, -1}, {0x001250, 0x001256, 1}, + {0x001257, 0x001257, -1}, {0x001258, 0x001258, 1}, + {0x001259, 0x001259, -1}, {0x00125a, 0x00125d, 1}, + {0x00125e, 0x00125f, -1}, {0x001260, 0x001288, 1}, + {0x001289, 0x001289, -1}, {0x00128a, 0x00128d, 1}, + {0x00128e, 0x00128f, -1}, {0x001290, 0x0012b0, 1}, + {0x0012b1, 0x0012b1, -1}, {0x0012b2, 0x0012b5, 1}, + {0x0012b6, 0x0012b7, -1}, {0x0012b8, 0x0012be, 1}, + {0x0012bf, 0x0012bf, -1}, {0x0012c0, 0x0012c0, 1}, + {0x0012c1, 0x0012c1, -1}, {0x0012c2, 0x0012c5, 1}, + {0x0012c6, 0x0012c7, -1}, {0x0012c8, 0x0012d6, 1}, + {0x0012d7, 0x0012d7, -1}, {0x0012d8, 0x001310, 1}, + {0x001311, 0x001311, -1}, {0x001312, 0x001315, 1}, + {0x001316, 0x001317, -1}, {0x001318, 0x00135a, 1}, + {0x00135b, 0x00135c, -1}, {0x00135d, 0x00135f, 0}, + {0x001360, 0x00137c, 1}, {0x00137d, 0x00137f, -1}, + {0x001380, 0x001399, 1}, {0x00139a, 0x00139f, -1}, + {0x0013a0, 0x0013f5, 1}, {0x0013f6, 0x0013f7, -1}, + {0x0013f8, 0x0013fd, 1}, {0x0013fe, 0x0013ff, -1}, + {0x001400, 0x00169c, 1}, {0x00169d, 0x00169f, -1}, + {0x0016a0, 0x0016f8, 1}, {0x0016f9, 0x0016ff, -1}, + {0x001700, 0x001711, 1}, {0x001712, 0x001714, 0}, + {0x001715, 0x001715, 1}, {0x001716, 0x00171e, -1}, + {0x00171f, 0x001731, 1}, {0x001732, 0x001733, 0}, + {0x001734, 0x001736, 1}, {0x001737, 0x00173f, -1}, + {0x001740, 0x001751, 1}, {0x001752, 0x001753, 0}, + {0x001754, 0x00175f, -1}, {0x001760, 0x00176c, 1}, + {0x00176d, 0x00176d, -1}, {0x00176e, 0x001770, 1}, + {0x001771, 0x001771, -1}, {0x001772, 0x001773, 0}, + {0x001774, 0x00177f, -1}, {0x001780, 0x0017b3, 1}, + {0x0017b4, 0x0017b5, 0}, {0x0017b6, 0x0017b6, 1}, + {0x0017b7, 0x0017bd, 0}, {0x0017be, 0x0017c5, 1}, + {0x0017c6, 0x0017c6, 0}, {0x0017c7, 0x0017c8, 1}, + {0x0017c9, 0x0017d3, 0}, {0x0017d4, 0x0017dc, 1}, + {0x0017dd, 0x0017dd, 0}, {0x0017de, 0x0017df, -1}, + {0x0017e0, 0x0017e9, 1}, {0x0017ea, 0x0017ef, -1}, + {0x0017f0, 0x0017f9, 1}, {0x0017fa, 0x0017ff, -1}, + {0x001800, 0x00180a, 1}, {0x00180b, 0x00180f, 0}, + {0x001810, 0x001819, 1}, {0x00181a, 0x00181f, -1}, + {0x001820, 0x001878, 1}, {0x001879, 0x00187f, -1}, + {0x001880, 0x001884, 1}, {0x001885, 0x001886, 0}, + {0x001887, 0x0018a8, 1}, {0x0018a9, 0x0018a9, 0}, + {0x0018aa, 0x0018aa, 1}, {0x0018ab, 0x0018af, -1}, + {0x0018b0, 0x0018f5, 1}, {0x0018f6, 0x0018ff, -1}, + {0x001900, 0x00191e, 1}, {0x00191f, 0x00191f, -1}, + {0x001920, 0x001922, 0}, {0x001923, 0x001926, 1}, + {0x001927, 0x001928, 0}, {0x001929, 0x00192b, 1}, + {0x00192c, 0x00192f, -1}, {0x001930, 0x001931, 1}, + {0x001932, 0x001932, 0}, {0x001933, 0x001938, 1}, + {0x001939, 0x00193b, 0}, {0x00193c, 0x00193f, -1}, + {0x001940, 0x001940, 1}, {0x001941, 0x001943, -1}, + {0x001944, 0x00196d, 1}, {0x00196e, 0x00196f, -1}, + {0x001970, 0x001974, 1}, {0x001975, 0x00197f, -1}, + {0x001980, 0x0019ab, 1}, {0x0019ac, 0x0019af, -1}, + {0x0019b0, 0x0019c9, 1}, {0x0019ca, 0x0019cf, -1}, + {0x0019d0, 0x0019da, 1}, {0x0019db, 0x0019dd, -1}, + {0x0019de, 0x001a16, 1}, {0x001a17, 0x001a18, 0}, + {0x001a19, 0x001a1a, 1}, {0x001a1b, 0x001a1b, 0}, + {0x001a1c, 0x001a1d, -1}, {0x001a1e, 0x001a55, 1}, + {0x001a56, 0x001a56, 0}, {0x001a57, 0x001a57, 1}, + {0x001a58, 0x001a5e, 0}, {0x001a5f, 0x001a5f, -1}, + {0x001a60, 0x001a60, 0}, {0x001a61, 0x001a61, 1}, + {0x001a62, 0x001a62, 0}, {0x001a63, 0x001a64, 1}, + {0x001a65, 0x001a6c, 0}, {0x001a6d, 0x001a72, 1}, + {0x001a73, 0x001a7c, 0}, {0x001a7d, 0x001a7e, -1}, + {0x001a7f, 0x001a7f, 0}, {0x001a80, 0x001a89, 1}, + {0x001a8a, 0x001a8f, -1}, {0x001a90, 0x001a99, 1}, + {0x001a9a, 0x001a9f, -1}, {0x001aa0, 0x001aad, 1}, + {0x001aae, 0x001aaf, -1}, {0x001ab0, 0x001ace, 0}, + {0x001acf, 0x001aff, -1}, {0x001b00, 0x001b03, 0}, + {0x001b04, 0x001b33, 1}, {0x001b34, 0x001b34, 0}, + {0x001b35, 0x001b35, 1}, {0x001b36, 0x001b3a, 0}, + {0x001b3b, 0x001b3b, 1}, {0x001b3c, 0x001b3c, 0}, + {0x001b3d, 0x001b41, 1}, {0x001b42, 0x001b42, 0}, + {0x001b43, 0x001b4c, 1}, {0x001b4d, 0x001b4d, -1}, + {0x001b4e, 0x001b6a, 1}, {0x001b6b, 0x001b73, 0}, + {0x001b74, 0x001b7f, 1}, {0x001b80, 0x001b81, 0}, + {0x001b82, 0x001ba1, 1}, {0x001ba2, 0x001ba5, 0}, + {0x001ba6, 0x001ba7, 1}, {0x001ba8, 0x001ba9, 0}, + {0x001baa, 0x001baa, 1}, {0x001bab, 0x001bad, 0}, + {0x001bae, 0x001be5, 1}, {0x001be6, 0x001be6, 0}, + {0x001be7, 0x001be7, 1}, {0x001be8, 0x001be9, 0}, + {0x001bea, 0x001bec, 1}, {0x001bed, 0x001bed, 0}, + {0x001bee, 0x001bee, 1}, {0x001bef, 0x001bf1, 0}, + {0x001bf2, 0x001bf3, 1}, {0x001bf4, 0x001bfb, -1}, + {0x001bfc, 0x001c2b, 1}, {0x001c2c, 0x001c33, 0}, + {0x001c34, 0x001c35, 1}, {0x001c36, 0x001c37, 0}, + {0x001c38, 0x001c3a, -1}, {0x001c3b, 0x001c49, 1}, + {0x001c4a, 0x001c4c, -1}, {0x001c4d, 0x001c8a, 1}, + {0x001c8b, 0x001c8f, -1}, {0x001c90, 0x001cba, 1}, + {0x001cbb, 0x001cbc, -1}, {0x001cbd, 0x001cc7, 1}, + {0x001cc8, 0x001ccf, -1}, {0x001cd0, 0x001cd2, 0}, + {0x001cd3, 0x001cd3, 1}, {0x001cd4, 0x001ce0, 0}, + {0x001ce1, 0x001ce1, 1}, {0x001ce2, 0x001ce8, 0}, + {0x001ce9, 0x001cec, 1}, {0x001ced, 0x001ced, 0}, + {0x001cee, 0x001cf3, 1}, {0x001cf4, 0x001cf4, 0}, + {0x001cf5, 0x001cf7, 1}, {0x001cf8, 0x001cf9, 0}, + {0x001cfa, 0x001cfa, 1}, {0x001cfb, 0x001cff, -1}, + {0x001d00, 0x001dbf, 1}, {0x001dc0, 0x001dff, 0}, + {0x001e00, 0x001f15, 1}, {0x001f16, 0x001f17, -1}, + {0x001f18, 0x001f1d, 1}, {0x001f1e, 0x001f1f, -1}, + {0x001f20, 0x001f45, 1}, {0x001f46, 0x001f47, -1}, + {0x001f48, 0x001f4d, 1}, {0x001f4e, 0x001f4f, -1}, + {0x001f50, 0x001f57, 1}, {0x001f58, 0x001f58, -1}, + {0x001f59, 0x001f59, 1}, {0x001f5a, 0x001f5a, -1}, + {0x001f5b, 0x001f5b, 1}, {0x001f5c, 0x001f5c, -1}, + {0x001f5d, 0x001f5d, 1}, {0x001f5e, 0x001f5e, -1}, + {0x001f5f, 0x001f7d, 1}, {0x001f7e, 0x001f7f, -1}, + {0x001f80, 0x001fb4, 1}, {0x001fb5, 0x001fb5, -1}, + {0x001fb6, 0x001fc4, 1}, {0x001fc5, 0x001fc5, -1}, + {0x001fc6, 0x001fd3, 1}, {0x001fd4, 0x001fd5, -1}, + {0x001fd6, 0x001fdb, 1}, {0x001fdc, 0x001fdc, -1}, + {0x001fdd, 0x001fef, 1}, {0x001ff0, 0x001ff1, -1}, + {0x001ff2, 0x001ff4, 1}, {0x001ff5, 0x001ff5, -1}, + {0x001ff6, 0x001ffe, 1}, {0x001fff, 0x001fff, -1}, + {0x002000, 0x00200a, 1}, {0x00200b, 0x00200f, 0}, + {0x002010, 0x002027, 1}, {0x002028, 0x002029, -1}, + {0x00202a, 0x00202e, 0}, {0x00202f, 0x00205f, 1}, + {0x002060, 0x002064, 0}, {0x002065, 0x002065, -1}, + {0x002066, 0x00206f, 0}, {0x002070, 0x002071, 1}, + {0x002072, 0x002073, -1}, {0x002074, 0x00208e, 1}, + {0x00208f, 0x00208f, -1}, {0x002090, 0x00209c, 1}, + {0x00209d, 0x00209f, -1}, {0x0020a0, 0x0020c0, 1}, + {0x0020c1, 0x0020cf, -1}, {0x0020d0, 0x0020f0, 0}, + {0x0020f1, 0x0020ff, -1}, {0x002100, 0x00218b, 1}, + {0x00218c, 0x00218f, -1}, {0x002190, 0x002319, 1}, + {0x00231a, 0x00231b, 2}, {0x00231c, 0x002328, 1}, + {0x002329, 0x00232a, 2}, {0x00232b, 0x0023e8, 1}, + {0x0023e9, 0x0023ec, 2}, {0x0023ed, 0x0023ef, 1}, + {0x0023f0, 0x0023f0, 2}, {0x0023f1, 0x0023f2, 1}, + {0x0023f3, 0x0023f3, 2}, {0x0023f4, 0x002429, 1}, + {0x00242a, 0x00243f, -1}, {0x002440, 0x00244a, 1}, + {0x00244b, 0x00245f, -1}, {0x002460, 0x0025fc, 1}, + {0x0025fd, 0x0025fe, 2}, {0x0025ff, 0x002613, 1}, + {0x002614, 0x002615, 2}, {0x002616, 0x00262f, 1}, + {0x002630, 0x002637, 2}, {0x002638, 0x002647, 1}, + {0x002648, 0x002653, 2}, {0x002654, 0x00267e, 1}, + {0x00267f, 0x00267f, 2}, {0x002680, 0x002689, 1}, + {0x00268a, 0x00268f, 2}, {0x002690, 0x002692, 1}, + {0x002693, 0x002693, 2}, {0x002694, 0x0026a0, 1}, + {0x0026a1, 0x0026a1, 2}, {0x0026a2, 0x0026a9, 1}, + {0x0026aa, 0x0026ab, 2}, {0x0026ac, 0x0026bc, 1}, + {0x0026bd, 0x0026be, 2}, {0x0026bf, 0x0026c3, 1}, + {0x0026c4, 0x0026c5, 2}, {0x0026c6, 0x0026cd, 1}, + {0x0026ce, 0x0026ce, 2}, {0x0026cf, 0x0026d3, 1}, + {0x0026d4, 0x0026d4, 2}, {0x0026d5, 0x0026e9, 1}, + {0x0026ea, 0x0026ea, 2}, {0x0026eb, 0x0026f1, 1}, + {0x0026f2, 0x0026f3, 2}, {0x0026f4, 0x0026f4, 1}, + {0x0026f5, 0x0026f5, 2}, {0x0026f6, 0x0026f9, 1}, + {0x0026fa, 0x0026fa, 2}, {0x0026fb, 0x0026fc, 1}, + {0x0026fd, 0x0026fd, 2}, {0x0026fe, 0x002704, 1}, + {0x002705, 0x002705, 2}, {0x002706, 0x002709, 1}, + {0x00270a, 0x00270b, 2}, {0x00270c, 0x002727, 1}, + {0x002728, 0x002728, 2}, {0x002729, 0x00274b, 1}, + {0x00274c, 0x00274c, 2}, {0x00274d, 0x00274d, 1}, + {0x00274e, 0x00274e, 2}, {0x00274f, 0x002752, 1}, + {0x002753, 0x002755, 2}, {0x002756, 0x002756, 1}, + {0x002757, 0x002757, 2}, {0x002758, 0x002794, 1}, + {0x002795, 0x002797, 2}, {0x002798, 0x0027af, 1}, + {0x0027b0, 0x0027b0, 2}, {0x0027b1, 0x0027be, 1}, + {0x0027bf, 0x0027bf, 2}, {0x0027c0, 0x002b1a, 1}, + {0x002b1b, 0x002b1c, 2}, {0x002b1d, 0x002b4f, 1}, + {0x002b50, 0x002b50, 2}, {0x002b51, 0x002b54, 1}, + {0x002b55, 0x002b55, 2}, {0x002b56, 0x002b73, 1}, + {0x002b74, 0x002b75, -1}, {0x002b76, 0x002b95, 1}, + {0x002b96, 0x002b96, -1}, {0x002b97, 0x002cee, 1}, + {0x002cef, 0x002cf1, 0}, {0x002cf2, 0x002cf3, 1}, + {0x002cf4, 0x002cf8, -1}, {0x002cf9, 0x002d25, 1}, + {0x002d26, 0x002d26, -1}, {0x002d27, 0x002d27, 1}, + {0x002d28, 0x002d2c, -1}, {0x002d2d, 0x002d2d, 1}, + {0x002d2e, 0x002d2f, -1}, {0x002d30, 0x002d67, 1}, + {0x002d68, 0x002d6e, -1}, {0x002d6f, 0x002d70, 1}, + {0x002d71, 0x002d7e, -1}, {0x002d7f, 0x002d7f, 0}, + {0x002d80, 0x002d96, 1}, {0x002d97, 0x002d9f, -1}, + {0x002da0, 0x002da6, 1}, {0x002da7, 0x002da7, -1}, + {0x002da8, 0x002dae, 1}, {0x002daf, 0x002daf, -1}, + {0x002db0, 0x002db6, 1}, {0x002db7, 0x002db7, -1}, + {0x002db8, 0x002dbe, 1}, {0x002dbf, 0x002dbf, -1}, + {0x002dc0, 0x002dc6, 1}, {0x002dc7, 0x002dc7, -1}, + {0x002dc8, 0x002dce, 1}, {0x002dcf, 0x002dcf, -1}, + {0x002dd0, 0x002dd6, 1}, {0x002dd7, 0x002dd7, -1}, + {0x002dd8, 0x002dde, 1}, {0x002ddf, 0x002ddf, -1}, + {0x002de0, 0x002dff, 0}, {0x002e00, 0x002e5d, 1}, + {0x002e5e, 0x002e7f, -1}, {0x002e80, 0x002e99, 2}, + {0x002e9a, 0x002e9a, -1}, {0x002e9b, 0x002ef3, 2}, + {0x002ef4, 0x002eff, -1}, {0x002f00, 0x002fd5, 2}, + {0x002fd6, 0x002fef, -1}, {0x002ff0, 0x003029, 2}, + {0x00302a, 0x00302d, 0}, {0x00302e, 0x00303e, 2}, + {0x00303f, 0x00303f, 1}, {0x003040, 0x003040, -1}, + {0x003041, 0x003096, 2}, {0x003097, 0x003098, -1}, + {0x003099, 0x00309a, 0}, {0x00309b, 0x0030ff, 2}, + {0x003100, 0x003104, -1}, {0x003105, 0x00312f, 2}, + {0x003130, 0x003130, -1}, {0x003131, 0x003163, 2}, + {0x003164, 0x003164, 0}, {0x003165, 0x00318e, 2}, + {0x00318f, 0x00318f, -1}, {0x003190, 0x0031e5, 2}, + {0x0031e6, 0x0031ee, -1}, {0x0031ef, 0x00321e, 2}, + {0x00321f, 0x00321f, -1}, {0x003220, 0x00a48c, 2}, + {0x00a48d, 0x00a48f, -1}, {0x00a490, 0x00a4c6, 2}, + {0x00a4c7, 0x00a4cf, -1}, {0x00a4d0, 0x00a62b, 1}, + {0x00a62c, 0x00a63f, -1}, {0x00a640, 0x00a66e, 1}, + {0x00a66f, 0x00a672, 0}, {0x00a673, 0x00a673, 1}, + {0x00a674, 0x00a67d, 0}, {0x00a67e, 0x00a69d, 1}, + {0x00a69e, 0x00a69f, 0}, {0x00a6a0, 0x00a6ef, 1}, + {0x00a6f0, 0x00a6f1, 0}, {0x00a6f2, 0x00a6f7, 1}, + {0x00a6f8, 0x00a6ff, -1}, {0x00a700, 0x00a7cd, 1}, + {0x00a7ce, 0x00a7cf, -1}, {0x00a7d0, 0x00a7d1, 1}, + {0x00a7d2, 0x00a7d2, -1}, {0x00a7d3, 0x00a7d3, 1}, + {0x00a7d4, 0x00a7d4, -1}, {0x00a7d5, 0x00a7dc, 1}, + {0x00a7dd, 0x00a7f1, -1}, {0x00a7f2, 0x00a801, 1}, + {0x00a802, 0x00a802, 0}, {0x00a803, 0x00a805, 1}, + {0x00a806, 0x00a806, 0}, {0x00a807, 0x00a80a, 1}, + {0x00a80b, 0x00a80b, 0}, {0x00a80c, 0x00a824, 1}, + {0x00a825, 0x00a826, 0}, {0x00a827, 0x00a82b, 1}, + {0x00a82c, 0x00a82c, 0}, {0x00a82d, 0x00a82f, -1}, + {0x00a830, 0x00a839, 1}, {0x00a83a, 0x00a83f, -1}, + {0x00a840, 0x00a877, 1}, {0x00a878, 0x00a87f, -1}, + {0x00a880, 0x00a8c3, 1}, {0x00a8c4, 0x00a8c5, 0}, + {0x00a8c6, 0x00a8cd, -1}, {0x00a8ce, 0x00a8d9, 1}, + {0x00a8da, 0x00a8df, -1}, {0x00a8e0, 0x00a8f1, 0}, + {0x00a8f2, 0x00a8fe, 1}, {0x00a8ff, 0x00a8ff, 0}, + {0x00a900, 0x00a925, 1}, {0x00a926, 0x00a92d, 0}, + {0x00a92e, 0x00a946, 1}, {0x00a947, 0x00a951, 0}, + {0x00a952, 0x00a953, 1}, {0x00a954, 0x00a95e, -1}, + {0x00a95f, 0x00a95f, 1}, {0x00a960, 0x00a97c, 2}, + {0x00a97d, 0x00a97f, -1}, {0x00a980, 0x00a982, 0}, + {0x00a983, 0x00a9b2, 1}, {0x00a9b3, 0x00a9b3, 0}, + {0x00a9b4, 0x00a9b5, 1}, {0x00a9b6, 0x00a9b9, 0}, + {0x00a9ba, 0x00a9bb, 1}, {0x00a9bc, 0x00a9bd, 0}, + {0x00a9be, 0x00a9cd, 1}, {0x00a9ce, 0x00a9ce, -1}, + {0x00a9cf, 0x00a9d9, 1}, {0x00a9da, 0x00a9dd, -1}, + {0x00a9de, 0x00a9e4, 1}, {0x00a9e5, 0x00a9e5, 0}, + {0x00a9e6, 0x00a9fe, 1}, {0x00a9ff, 0x00a9ff, -1}, + {0x00aa00, 0x00aa28, 1}, {0x00aa29, 0x00aa2e, 0}, + {0x00aa2f, 0x00aa30, 1}, {0x00aa31, 0x00aa32, 0}, + {0x00aa33, 0x00aa34, 1}, {0x00aa35, 0x00aa36, 0}, + {0x00aa37, 0x00aa3f, -1}, {0x00aa40, 0x00aa42, 1}, + {0x00aa43, 0x00aa43, 0}, {0x00aa44, 0x00aa4b, 1}, + {0x00aa4c, 0x00aa4c, 0}, {0x00aa4d, 0x00aa4d, 1}, + {0x00aa4e, 0x00aa4f, -1}, {0x00aa50, 0x00aa59, 1}, + {0x00aa5a, 0x00aa5b, -1}, {0x00aa5c, 0x00aa7b, 1}, + {0x00aa7c, 0x00aa7c, 0}, {0x00aa7d, 0x00aaaf, 1}, + {0x00aab0, 0x00aab0, 0}, {0x00aab1, 0x00aab1, 1}, + {0x00aab2, 0x00aab4, 0}, {0x00aab5, 0x00aab6, 1}, + {0x00aab7, 0x00aab8, 0}, {0x00aab9, 0x00aabd, 1}, + {0x00aabe, 0x00aabf, 0}, {0x00aac0, 0x00aac0, 1}, + {0x00aac1, 0x00aac1, 0}, {0x00aac2, 0x00aac2, 1}, + {0x00aac3, 0x00aada, -1}, {0x00aadb, 0x00aaeb, 1}, + {0x00aaec, 0x00aaed, 0}, {0x00aaee, 0x00aaf5, 1}, + {0x00aaf6, 0x00aaf6, 0}, {0x00aaf7, 0x00ab00, -1}, + {0x00ab01, 0x00ab06, 1}, {0x00ab07, 0x00ab08, -1}, + {0x00ab09, 0x00ab0e, 1}, {0x00ab0f, 0x00ab10, -1}, + {0x00ab11, 0x00ab16, 1}, {0x00ab17, 0x00ab1f, -1}, + {0x00ab20, 0x00ab26, 1}, {0x00ab27, 0x00ab27, -1}, + {0x00ab28, 0x00ab2e, 1}, {0x00ab2f, 0x00ab2f, -1}, + {0x00ab30, 0x00ab6b, 1}, {0x00ab6c, 0x00ab6f, -1}, + {0x00ab70, 0x00abe4, 1}, {0x00abe5, 0x00abe5, 0}, + {0x00abe6, 0x00abe7, 1}, {0x00abe8, 0x00abe8, 0}, + {0x00abe9, 0x00abec, 1}, {0x00abed, 0x00abed, 0}, + {0x00abee, 0x00abef, -1}, {0x00abf0, 0x00abf9, 1}, + {0x00abfa, 0x00abff, -1}, {0x00ac00, 0x00d7a3, 2}, + {0x00d7a4, 0x00d7af, -1}, {0x00d7b0, 0x00d7c6, 0}, + {0x00d7c7, 0x00d7ca, -1}, {0x00d7cb, 0x00d7fb, 0}, + {0x00d7fc, 0x00dfff, -1}, {0x00e000, 0x00f8ff, 1}, + {0x00f900, 0x00fa6d, 2}, {0x00fa6e, 0x00fa6f, -1}, + {0x00fa70, 0x00fad9, 2}, {0x00fada, 0x00faff, -1}, + {0x00fb00, 0x00fb06, 1}, {0x00fb07, 0x00fb12, -1}, + {0x00fb13, 0x00fb17, 1}, {0x00fb18, 0x00fb1c, -1}, + {0x00fb1d, 0x00fb1d, 1}, {0x00fb1e, 0x00fb1e, 0}, + {0x00fb1f, 0x00fb36, 1}, {0x00fb37, 0x00fb37, -1}, + {0x00fb38, 0x00fb3c, 1}, {0x00fb3d, 0x00fb3d, -1}, + {0x00fb3e, 0x00fb3e, 1}, {0x00fb3f, 0x00fb3f, -1}, + {0x00fb40, 0x00fb41, 1}, {0x00fb42, 0x00fb42, -1}, + {0x00fb43, 0x00fb44, 1}, {0x00fb45, 0x00fb45, -1}, + {0x00fb46, 0x00fbc2, 1}, {0x00fbc3, 0x00fbd2, -1}, + {0x00fbd3, 0x00fd8f, 1}, {0x00fd90, 0x00fd91, -1}, + {0x00fd92, 0x00fdc7, 1}, {0x00fdc8, 0x00fdce, -1}, + {0x00fdcf, 0x00fdcf, 1}, {0x00fdd0, 0x00fdef, -1}, + {0x00fdf0, 0x00fdff, 1}, {0x00fe00, 0x00fe0f, 0}, + {0x00fe10, 0x00fe19, 2}, {0x00fe1a, 0x00fe1f, -1}, + {0x00fe20, 0x00fe2f, 0}, {0x00fe30, 0x00fe52, 2}, + {0x00fe53, 0x00fe53, -1}, {0x00fe54, 0x00fe66, 2}, + {0x00fe67, 0x00fe67, -1}, {0x00fe68, 0x00fe6b, 2}, + {0x00fe6c, 0x00fe6f, -1}, {0x00fe70, 0x00fe74, 1}, + {0x00fe75, 0x00fe75, -1}, {0x00fe76, 0x00fefc, 1}, + {0x00fefd, 0x00fefe, -1}, {0x00feff, 0x00feff, 0}, + {0x00ff00, 0x00ff00, -1}, {0x00ff01, 0x00ff60, 2}, + {0x00ff61, 0x00ff9f, 1}, {0x00ffa0, 0x00ffa0, 0}, + {0x00ffa1, 0x00ffbe, 1}, {0x00ffbf, 0x00ffc1, -1}, + {0x00ffc2, 0x00ffc7, 1}, {0x00ffc8, 0x00ffc9, -1}, + {0x00ffca, 0x00ffcf, 1}, {0x00ffd0, 0x00ffd1, -1}, + {0x00ffd2, 0x00ffd7, 1}, {0x00ffd8, 0x00ffd9, -1}, + {0x00ffda, 0x00ffdc, 1}, {0x00ffdd, 0x00ffdf, -1}, + {0x00ffe0, 0x00ffe6, 2}, {0x00ffe7, 0x00ffe7, -1}, + {0x00ffe8, 0x00ffee, 1}, {0x00ffef, 0x00fff8, -1}, + {0x00fff9, 0x00fffd, 1}, {0x00fffe, 0x00ffff, -1}, + {0x010000, 0x01000b, 1}, {0x01000c, 0x01000c, -1}, + {0x01000d, 0x010026, 1}, {0x010027, 0x010027, -1}, + {0x010028, 0x01003a, 1}, {0x01003b, 0x01003b, -1}, + {0x01003c, 0x01003d, 1}, {0x01003e, 0x01003e, -1}, + {0x01003f, 0x01004d, 1}, {0x01004e, 0x01004f, -1}, + {0x010050, 0x01005d, 1}, {0x01005e, 0x01007f, -1}, + {0x010080, 0x0100fa, 1}, {0x0100fb, 0x0100ff, -1}, + {0x010100, 0x010102, 1}, {0x010103, 0x010106, -1}, + {0x010107, 0x010133, 1}, {0x010134, 0x010136, -1}, + {0x010137, 0x01018e, 1}, {0x01018f, 0x01018f, -1}, + {0x010190, 0x01019c, 1}, {0x01019d, 0x01019f, -1}, + {0x0101a0, 0x0101a0, 1}, {0x0101a1, 0x0101cf, -1}, + {0x0101d0, 0x0101fc, 1}, {0x0101fd, 0x0101fd, 0}, + {0x0101fe, 0x01027f, -1}, {0x010280, 0x01029c, 1}, + {0x01029d, 0x01029f, -1}, {0x0102a0, 0x0102d0, 1}, + {0x0102d1, 0x0102df, -1}, {0x0102e0, 0x0102e0, 0}, + {0x0102e1, 0x0102fb, 1}, {0x0102fc, 0x0102ff, -1}, + {0x010300, 0x010323, 1}, {0x010324, 0x01032c, -1}, + {0x01032d, 0x01034a, 1}, {0x01034b, 0x01034f, -1}, + {0x010350, 0x010375, 1}, {0x010376, 0x01037a, 0}, + {0x01037b, 0x01037f, -1}, {0x010380, 0x01039d, 1}, + {0x01039e, 0x01039e, -1}, {0x01039f, 0x0103c3, 1}, + {0x0103c4, 0x0103c7, -1}, {0x0103c8, 0x0103d5, 1}, + {0x0103d6, 0x0103ff, -1}, {0x010400, 0x01049d, 1}, + {0x01049e, 0x01049f, -1}, {0x0104a0, 0x0104a9, 1}, + {0x0104aa, 0x0104af, -1}, {0x0104b0, 0x0104d3, 1}, + {0x0104d4, 0x0104d7, -1}, {0x0104d8, 0x0104fb, 1}, + {0x0104fc, 0x0104ff, -1}, {0x010500, 0x010527, 1}, + {0x010528, 0x01052f, -1}, {0x010530, 0x010563, 1}, + {0x010564, 0x01056e, -1}, {0x01056f, 0x01057a, 1}, + {0x01057b, 0x01057b, -1}, {0x01057c, 0x01058a, 1}, + {0x01058b, 0x01058b, -1}, {0x01058c, 0x010592, 1}, + {0x010593, 0x010593, -1}, {0x010594, 0x010595, 1}, + {0x010596, 0x010596, -1}, {0x010597, 0x0105a1, 1}, + {0x0105a2, 0x0105a2, -1}, {0x0105a3, 0x0105b1, 1}, + {0x0105b2, 0x0105b2, -1}, {0x0105b3, 0x0105b9, 1}, + {0x0105ba, 0x0105ba, -1}, {0x0105bb, 0x0105bc, 1}, + {0x0105bd, 0x0105bf, -1}, {0x0105c0, 0x0105f3, 1}, + {0x0105f4, 0x0105ff, -1}, {0x010600, 0x010736, 1}, + {0x010737, 0x01073f, -1}, {0x010740, 0x010755, 1}, + {0x010756, 0x01075f, -1}, {0x010760, 0x010767, 1}, + {0x010768, 0x01077f, -1}, {0x010780, 0x010785, 1}, + {0x010786, 0x010786, -1}, {0x010787, 0x0107b0, 1}, + {0x0107b1, 0x0107b1, -1}, {0x0107b2, 0x0107ba, 1}, + {0x0107bb, 0x0107ff, -1}, {0x010800, 0x010805, 1}, + {0x010806, 0x010807, -1}, {0x010808, 0x010808, 1}, + {0x010809, 0x010809, -1}, {0x01080a, 0x010835, 1}, + {0x010836, 0x010836, -1}, {0x010837, 0x010838, 1}, + {0x010839, 0x01083b, -1}, {0x01083c, 0x01083c, 1}, + {0x01083d, 0x01083e, -1}, {0x01083f, 0x010855, 1}, + {0x010856, 0x010856, -1}, {0x010857, 0x01089e, 1}, + {0x01089f, 0x0108a6, -1}, {0x0108a7, 0x0108af, 1}, + {0x0108b0, 0x0108df, -1}, {0x0108e0, 0x0108f2, 1}, + {0x0108f3, 0x0108f3, -1}, {0x0108f4, 0x0108f5, 1}, + {0x0108f6, 0x0108fa, -1}, {0x0108fb, 0x01091b, 1}, + {0x01091c, 0x01091e, -1}, {0x01091f, 0x010939, 1}, + {0x01093a, 0x01093e, -1}, {0x01093f, 0x01093f, 1}, + {0x010940, 0x01097f, -1}, {0x010980, 0x0109b7, 1}, + {0x0109b8, 0x0109bb, -1}, {0x0109bc, 0x0109cf, 1}, + {0x0109d0, 0x0109d1, -1}, {0x0109d2, 0x010a00, 1}, + {0x010a01, 0x010a03, 0}, {0x010a04, 0x010a04, -1}, + {0x010a05, 0x010a06, 0}, {0x010a07, 0x010a0b, -1}, + {0x010a0c, 0x010a0f, 0}, {0x010a10, 0x010a13, 1}, + {0x010a14, 0x010a14, -1}, {0x010a15, 0x010a17, 1}, + {0x010a18, 0x010a18, -1}, {0x010a19, 0x010a35, 1}, + {0x010a36, 0x010a37, -1}, {0x010a38, 0x010a3a, 0}, + {0x010a3b, 0x010a3e, -1}, {0x010a3f, 0x010a3f, 0}, + {0x010a40, 0x010a48, 1}, {0x010a49, 0x010a4f, -1}, + {0x010a50, 0x010a58, 1}, {0x010a59, 0x010a5f, -1}, + {0x010a60, 0x010a9f, 1}, {0x010aa0, 0x010abf, -1}, + {0x010ac0, 0x010ae4, 1}, {0x010ae5, 0x010ae6, 0}, + {0x010ae7, 0x010aea, -1}, {0x010aeb, 0x010af6, 1}, + {0x010af7, 0x010aff, -1}, {0x010b00, 0x010b35, 1}, + {0x010b36, 0x010b38, -1}, {0x010b39, 0x010b55, 1}, + {0x010b56, 0x010b57, -1}, {0x010b58, 0x010b72, 1}, + {0x010b73, 0x010b77, -1}, {0x010b78, 0x010b91, 1}, + {0x010b92, 0x010b98, -1}, {0x010b99, 0x010b9c, 1}, + {0x010b9d, 0x010ba8, -1}, {0x010ba9, 0x010baf, 1}, + {0x010bb0, 0x010bff, -1}, {0x010c00, 0x010c48, 1}, + {0x010c49, 0x010c7f, -1}, {0x010c80, 0x010cb2, 1}, + {0x010cb3, 0x010cbf, -1}, {0x010cc0, 0x010cf2, 1}, + {0x010cf3, 0x010cf9, -1}, {0x010cfa, 0x010d23, 1}, + {0x010d24, 0x010d27, 0}, {0x010d28, 0x010d2f, -1}, + {0x010d30, 0x010d39, 1}, {0x010d3a, 0x010d3f, -1}, + {0x010d40, 0x010d65, 1}, {0x010d66, 0x010d68, -1}, + {0x010d69, 0x010d6d, 0}, {0x010d6e, 0x010d85, 1}, + {0x010d86, 0x010d8d, -1}, {0x010d8e, 0x010d8f, 1}, + {0x010d90, 0x010e5f, -1}, {0x010e60, 0x010e7e, 1}, + {0x010e7f, 0x010e7f, -1}, {0x010e80, 0x010ea9, 1}, + {0x010eaa, 0x010eaa, -1}, {0x010eab, 0x010eac, 0}, + {0x010ead, 0x010ead, 1}, {0x010eae, 0x010eaf, -1}, + {0x010eb0, 0x010eb1, 1}, {0x010eb2, 0x010ec1, -1}, + {0x010ec2, 0x010ec4, 1}, {0x010ec5, 0x010efb, -1}, + {0x010efc, 0x010eff, 0}, {0x010f00, 0x010f27, 1}, + {0x010f28, 0x010f2f, -1}, {0x010f30, 0x010f45, 1}, + {0x010f46, 0x010f50, 0}, {0x010f51, 0x010f59, 1}, + {0x010f5a, 0x010f6f, -1}, {0x010f70, 0x010f81, 1}, + {0x010f82, 0x010f85, 0}, {0x010f86, 0x010f89, 1}, + {0x010f8a, 0x010faf, -1}, {0x010fb0, 0x010fcb, 1}, + {0x010fcc, 0x010fdf, -1}, {0x010fe0, 0x010ff6, 1}, + {0x010ff7, 0x010fff, -1}, {0x011000, 0x011000, 1}, + {0x011001, 0x011001, 0}, {0x011002, 0x011037, 1}, + {0x011038, 0x011046, 0}, {0x011047, 0x01104d, 1}, + {0x01104e, 0x011051, -1}, {0x011052, 0x01106f, 1}, + {0x011070, 0x011070, 0}, {0x011071, 0x011072, 1}, + {0x011073, 0x011074, 0}, {0x011075, 0x011075, 1}, + {0x011076, 0x01107e, -1}, {0x01107f, 0x011081, 0}, + {0x011082, 0x0110b2, 1}, {0x0110b3, 0x0110b6, 0}, + {0x0110b7, 0x0110b8, 1}, {0x0110b9, 0x0110ba, 0}, + {0x0110bb, 0x0110c1, 1}, {0x0110c2, 0x0110c2, 0}, + {0x0110c3, 0x0110cc, -1}, {0x0110cd, 0x0110cd, 1}, + {0x0110ce, 0x0110cf, -1}, {0x0110d0, 0x0110e8, 1}, + {0x0110e9, 0x0110ef, -1}, {0x0110f0, 0x0110f9, 1}, + {0x0110fa, 0x0110ff, -1}, {0x011100, 0x011102, 0}, + {0x011103, 0x011126, 1}, {0x011127, 0x01112b, 0}, + {0x01112c, 0x01112c, 1}, {0x01112d, 0x011134, 0}, + {0x011135, 0x011135, -1}, {0x011136, 0x011147, 1}, + {0x011148, 0x01114f, -1}, {0x011150, 0x011172, 1}, + {0x011173, 0x011173, 0}, {0x011174, 0x011176, 1}, + {0x011177, 0x01117f, -1}, {0x011180, 0x011181, 0}, + {0x011182, 0x0111b5, 1}, {0x0111b6, 0x0111be, 0}, + {0x0111bf, 0x0111c8, 1}, {0x0111c9, 0x0111cc, 0}, + {0x0111cd, 0x0111ce, 1}, {0x0111cf, 0x0111cf, 0}, + {0x0111d0, 0x0111df, 1}, {0x0111e0, 0x0111e0, -1}, + {0x0111e1, 0x0111f4, 1}, {0x0111f5, 0x0111ff, -1}, + {0x011200, 0x011211, 1}, {0x011212, 0x011212, -1}, + {0x011213, 0x01122e, 1}, {0x01122f, 0x011231, 0}, + {0x011232, 0x011233, 1}, {0x011234, 0x011234, 0}, + {0x011235, 0x011235, 1}, {0x011236, 0x011237, 0}, + {0x011238, 0x01123d, 1}, {0x01123e, 0x01123e, 0}, + {0x01123f, 0x011240, 1}, {0x011241, 0x011241, 0}, + {0x011242, 0x01127f, -1}, {0x011280, 0x011286, 1}, + {0x011287, 0x011287, -1}, {0x011288, 0x011288, 1}, + {0x011289, 0x011289, -1}, {0x01128a, 0x01128d, 1}, + {0x01128e, 0x01128e, -1}, {0x01128f, 0x01129d, 1}, + {0x01129e, 0x01129e, -1}, {0x01129f, 0x0112a9, 1}, + {0x0112aa, 0x0112af, -1}, {0x0112b0, 0x0112de, 1}, + {0x0112df, 0x0112df, 0}, {0x0112e0, 0x0112e2, 1}, + {0x0112e3, 0x0112ea, 0}, {0x0112eb, 0x0112ef, -1}, + {0x0112f0, 0x0112f9, 1}, {0x0112fa, 0x0112ff, -1}, + {0x011300, 0x011301, 0}, {0x011302, 0x011303, 1}, + {0x011304, 0x011304, -1}, {0x011305, 0x01130c, 1}, + {0x01130d, 0x01130e, -1}, {0x01130f, 0x011310, 1}, + {0x011311, 0x011312, -1}, {0x011313, 0x011328, 1}, + {0x011329, 0x011329, -1}, {0x01132a, 0x011330, 1}, + {0x011331, 0x011331, -1}, {0x011332, 0x011333, 1}, + {0x011334, 0x011334, -1}, {0x011335, 0x011339, 1}, + {0x01133a, 0x01133a, -1}, {0x01133b, 0x01133c, 0}, + {0x01133d, 0x01133f, 1}, {0x011340, 0x011340, 0}, + {0x011341, 0x011344, 1}, {0x011345, 0x011346, -1}, + {0x011347, 0x011348, 1}, {0x011349, 0x01134a, -1}, + {0x01134b, 0x01134d, 1}, {0x01134e, 0x01134f, -1}, + {0x011350, 0x011350, 1}, {0x011351, 0x011356, -1}, + {0x011357, 0x011357, 1}, {0x011358, 0x01135c, -1}, + {0x01135d, 0x011363, 1}, {0x011364, 0x011365, -1}, + {0x011366, 0x01136c, 0}, {0x01136d, 0x01136f, -1}, + {0x011370, 0x011374, 0}, {0x011375, 0x01137f, -1}, + {0x011380, 0x011389, 1}, {0x01138a, 0x01138a, -1}, + {0x01138b, 0x01138b, 1}, {0x01138c, 0x01138d, -1}, + {0x01138e, 0x01138e, 1}, {0x01138f, 0x01138f, -1}, + {0x011390, 0x0113b5, 1}, {0x0113b6, 0x0113b6, -1}, + {0x0113b7, 0x0113ba, 1}, {0x0113bb, 0x0113c0, 0}, + {0x0113c1, 0x0113c1, -1}, {0x0113c2, 0x0113c2, 1}, + {0x0113c3, 0x0113c4, -1}, {0x0113c5, 0x0113c5, 1}, + {0x0113c6, 0x0113c6, -1}, {0x0113c7, 0x0113ca, 1}, + {0x0113cb, 0x0113cb, -1}, {0x0113cc, 0x0113cd, 1}, + {0x0113ce, 0x0113ce, 0}, {0x0113cf, 0x0113cf, 1}, + {0x0113d0, 0x0113d0, 0}, {0x0113d1, 0x0113d1, 1}, + {0x0113d2, 0x0113d2, 0}, {0x0113d3, 0x0113d5, 1}, + {0x0113d6, 0x0113d6, -1}, {0x0113d7, 0x0113d8, 1}, + {0x0113d9, 0x0113e0, -1}, {0x0113e1, 0x0113e2, 0}, + {0x0113e3, 0x0113ff, -1}, {0x011400, 0x011437, 1}, + {0x011438, 0x01143f, 0}, {0x011440, 0x011441, 1}, + {0x011442, 0x011444, 0}, {0x011445, 0x011445, 1}, + {0x011446, 0x011446, 0}, {0x011447, 0x01145b, 1}, + {0x01145c, 0x01145c, -1}, {0x01145d, 0x01145d, 1}, + {0x01145e, 0x01145e, 0}, {0x01145f, 0x011461, 1}, + {0x011462, 0x01147f, -1}, {0x011480, 0x0114b2, 1}, + {0x0114b3, 0x0114b8, 0}, {0x0114b9, 0x0114b9, 1}, + {0x0114ba, 0x0114ba, 0}, {0x0114bb, 0x0114be, 1}, + {0x0114bf, 0x0114c0, 0}, {0x0114c1, 0x0114c1, 1}, + {0x0114c2, 0x0114c3, 0}, {0x0114c4, 0x0114c7, 1}, + {0x0114c8, 0x0114cf, -1}, {0x0114d0, 0x0114d9, 1}, + {0x0114da, 0x01157f, -1}, {0x011580, 0x0115b1, 1}, + {0x0115b2, 0x0115b5, 0}, {0x0115b6, 0x0115b7, -1}, + {0x0115b8, 0x0115bb, 1}, {0x0115bc, 0x0115bd, 0}, + {0x0115be, 0x0115be, 1}, {0x0115bf, 0x0115c0, 0}, + {0x0115c1, 0x0115db, 1}, {0x0115dc, 0x0115dd, 0}, + {0x0115de, 0x0115ff, -1}, {0x011600, 0x011632, 1}, + {0x011633, 0x01163a, 0}, {0x01163b, 0x01163c, 1}, + {0x01163d, 0x01163d, 0}, {0x01163e, 0x01163e, 1}, + {0x01163f, 0x011640, 0}, {0x011641, 0x011644, 1}, + {0x011645, 0x01164f, -1}, {0x011650, 0x011659, 1}, + {0x01165a, 0x01165f, -1}, {0x011660, 0x01166c, 1}, + {0x01166d, 0x01167f, -1}, {0x011680, 0x0116aa, 1}, + {0x0116ab, 0x0116ab, 0}, {0x0116ac, 0x0116ac, 1}, + {0x0116ad, 0x0116ad, 0}, {0x0116ae, 0x0116af, 1}, + {0x0116b0, 0x0116b5, 0}, {0x0116b6, 0x0116b6, 1}, + {0x0116b7, 0x0116b7, 0}, {0x0116b8, 0x0116b9, 1}, + {0x0116ba, 0x0116bf, -1}, {0x0116c0, 0x0116c9, 1}, + {0x0116ca, 0x0116cf, -1}, {0x0116d0, 0x0116e3, 1}, + {0x0116e4, 0x0116ff, -1}, {0x011700, 0x01171a, 1}, + {0x01171b, 0x01171c, -1}, {0x01171d, 0x01171d, 0}, + {0x01171e, 0x01171e, 1}, {0x01171f, 0x01171f, 0}, + {0x011720, 0x011721, 1}, {0x011722, 0x011725, 0}, + {0x011726, 0x011726, 1}, {0x011727, 0x01172b, 0}, + {0x01172c, 0x01172f, -1}, {0x011730, 0x011746, 1}, + {0x011747, 0x0117ff, -1}, {0x011800, 0x01182e, 1}, + {0x01182f, 0x011837, 0}, {0x011838, 0x011838, 1}, + {0x011839, 0x01183a, 0}, {0x01183b, 0x01183b, 1}, + {0x01183c, 0x01189f, -1}, {0x0118a0, 0x0118f2, 1}, + {0x0118f3, 0x0118fe, -1}, {0x0118ff, 0x011906, 1}, + {0x011907, 0x011908, -1}, {0x011909, 0x011909, 1}, + {0x01190a, 0x01190b, -1}, {0x01190c, 0x011913, 1}, + {0x011914, 0x011914, -1}, {0x011915, 0x011916, 1}, + {0x011917, 0x011917, -1}, {0x011918, 0x011935, 1}, + {0x011936, 0x011936, -1}, {0x011937, 0x011938, 1}, + {0x011939, 0x01193a, -1}, {0x01193b, 0x01193c, 0}, + {0x01193d, 0x01193d, 1}, {0x01193e, 0x01193e, 0}, + {0x01193f, 0x011942, 1}, {0x011943, 0x011943, 0}, + {0x011944, 0x011946, 1}, {0x011947, 0x01194f, -1}, + {0x011950, 0x011959, 1}, {0x01195a, 0x01199f, -1}, + {0x0119a0, 0x0119a7, 1}, {0x0119a8, 0x0119a9, -1}, + {0x0119aa, 0x0119d3, 1}, {0x0119d4, 0x0119d7, 0}, + {0x0119d8, 0x0119d9, -1}, {0x0119da, 0x0119db, 0}, + {0x0119dc, 0x0119df, 1}, {0x0119e0, 0x0119e0, 0}, + {0x0119e1, 0x0119e4, 1}, {0x0119e5, 0x0119ff, -1}, + {0x011a00, 0x011a00, 1}, {0x011a01, 0x011a0a, 0}, + {0x011a0b, 0x011a32, 1}, {0x011a33, 0x011a38, 0}, + {0x011a39, 0x011a3a, 1}, {0x011a3b, 0x011a3e, 0}, + {0x011a3f, 0x011a46, 1}, {0x011a47, 0x011a47, 0}, + {0x011a48, 0x011a4f, -1}, {0x011a50, 0x011a50, 1}, + {0x011a51, 0x011a56, 0}, {0x011a57, 0x011a58, 1}, + {0x011a59, 0x011a5b, 0}, {0x011a5c, 0x011a89, 1}, + {0x011a8a, 0x011a96, 0}, {0x011a97, 0x011a97, 1}, + {0x011a98, 0x011a99, 0}, {0x011a9a, 0x011aa2, 1}, + {0x011aa3, 0x011aaf, -1}, {0x011ab0, 0x011af8, 1}, + {0x011af9, 0x011aff, -1}, {0x011b00, 0x011b09, 1}, + {0x011b0a, 0x011bbf, -1}, {0x011bc0, 0x011be1, 1}, + {0x011be2, 0x011bef, -1}, {0x011bf0, 0x011bf9, 1}, + {0x011bfa, 0x011bff, -1}, {0x011c00, 0x011c08, 1}, + {0x011c09, 0x011c09, -1}, {0x011c0a, 0x011c2f, 1}, + {0x011c30, 0x011c36, 0}, {0x011c37, 0x011c37, -1}, + {0x011c38, 0x011c3d, 0}, {0x011c3e, 0x011c3e, 1}, + {0x011c3f, 0x011c3f, 0}, {0x011c40, 0x011c45, 1}, + {0x011c46, 0x011c4f, -1}, {0x011c50, 0x011c6c, 1}, + {0x011c6d, 0x011c6f, -1}, {0x011c70, 0x011c8f, 1}, + {0x011c90, 0x011c91, -1}, {0x011c92, 0x011ca7, 0}, + {0x011ca8, 0x011ca8, -1}, {0x011ca9, 0x011ca9, 1}, + {0x011caa, 0x011cb0, 0}, {0x011cb1, 0x011cb1, 1}, + {0x011cb2, 0x011cb3, 0}, {0x011cb4, 0x011cb4, 1}, + {0x011cb5, 0x011cb6, 0}, {0x011cb7, 0x011cff, -1}, + {0x011d00, 0x011d06, 1}, {0x011d07, 0x011d07, -1}, + {0x011d08, 0x011d09, 1}, {0x011d0a, 0x011d0a, -1}, + {0x011d0b, 0x011d30, 1}, {0x011d31, 0x011d36, 0}, + {0x011d37, 0x011d39, -1}, {0x011d3a, 0x011d3a, 0}, + {0x011d3b, 0x011d3b, -1}, {0x011d3c, 0x011d3d, 0}, + {0x011d3e, 0x011d3e, -1}, {0x011d3f, 0x011d45, 0}, + {0x011d46, 0x011d46, 1}, {0x011d47, 0x011d47, 0}, + {0x011d48, 0x011d4f, -1}, {0x011d50, 0x011d59, 1}, + {0x011d5a, 0x011d5f, -1}, {0x011d60, 0x011d65, 1}, + {0x011d66, 0x011d66, -1}, {0x011d67, 0x011d68, 1}, + {0x011d69, 0x011d69, -1}, {0x011d6a, 0x011d8e, 1}, + {0x011d8f, 0x011d8f, -1}, {0x011d90, 0x011d91, 0}, + {0x011d92, 0x011d92, -1}, {0x011d93, 0x011d94, 1}, + {0x011d95, 0x011d95, 0}, {0x011d96, 0x011d96, 1}, + {0x011d97, 0x011d97, 0}, {0x011d98, 0x011d98, 1}, + {0x011d99, 0x011d9f, -1}, {0x011da0, 0x011da9, 1}, + {0x011daa, 0x011edf, -1}, {0x011ee0, 0x011ef2, 1}, + {0x011ef3, 0x011ef4, 0}, {0x011ef5, 0x011ef8, 1}, + {0x011ef9, 0x011eff, -1}, {0x011f00, 0x011f01, 0}, + {0x011f02, 0x011f10, 1}, {0x011f11, 0x011f11, -1}, + {0x011f12, 0x011f35, 1}, {0x011f36, 0x011f3a, 0}, + {0x011f3b, 0x011f3d, -1}, {0x011f3e, 0x011f3f, 1}, + {0x011f40, 0x011f40, 0}, {0x011f41, 0x011f41, 1}, + {0x011f42, 0x011f42, 0}, {0x011f43, 0x011f59, 1}, + {0x011f5a, 0x011f5a, 0}, {0x011f5b, 0x011faf, -1}, + {0x011fb0, 0x011fb0, 1}, {0x011fb1, 0x011fbf, -1}, + {0x011fc0, 0x011ff1, 1}, {0x011ff2, 0x011ffe, -1}, + {0x011fff, 0x012399, 1}, {0x01239a, 0x0123ff, -1}, + {0x012400, 0x01246e, 1}, {0x01246f, 0x01246f, -1}, + {0x012470, 0x012474, 1}, {0x012475, 0x01247f, -1}, + {0x012480, 0x012543, 1}, {0x012544, 0x012f8f, -1}, + {0x012f90, 0x012ff2, 1}, {0x012ff3, 0x012fff, -1}, + {0x013000, 0x01343f, 1}, {0x013440, 0x013440, 0}, + {0x013441, 0x013446, 1}, {0x013447, 0x013455, 0}, + {0x013456, 0x01345f, -1}, {0x013460, 0x0143fa, 1}, + {0x0143fb, 0x0143ff, -1}, {0x014400, 0x014646, 1}, + {0x014647, 0x0160ff, -1}, {0x016100, 0x01611d, 1}, + {0x01611e, 0x016129, 0}, {0x01612a, 0x01612c, 1}, + {0x01612d, 0x01612f, 0}, {0x016130, 0x016139, 1}, + {0x01613a, 0x0167ff, -1}, {0x016800, 0x016a38, 1}, + {0x016a39, 0x016a3f, -1}, {0x016a40, 0x016a5e, 1}, + {0x016a5f, 0x016a5f, -1}, {0x016a60, 0x016a69, 1}, + {0x016a6a, 0x016a6d, -1}, {0x016a6e, 0x016abe, 1}, + {0x016abf, 0x016abf, -1}, {0x016ac0, 0x016ac9, 1}, + {0x016aca, 0x016acf, -1}, {0x016ad0, 0x016aed, 1}, + {0x016aee, 0x016aef, -1}, {0x016af0, 0x016af4, 0}, + {0x016af5, 0x016af5, 1}, {0x016af6, 0x016aff, -1}, + {0x016b00, 0x016b2f, 1}, {0x016b30, 0x016b36, 0}, + {0x016b37, 0x016b45, 1}, {0x016b46, 0x016b4f, -1}, + {0x016b50, 0x016b59, 1}, {0x016b5a, 0x016b5a, -1}, + {0x016b5b, 0x016b61, 1}, {0x016b62, 0x016b62, -1}, + {0x016b63, 0x016b77, 1}, {0x016b78, 0x016b7c, -1}, + {0x016b7d, 0x016b8f, 1}, {0x016b90, 0x016d3f, -1}, + {0x016d40, 0x016d79, 1}, {0x016d7a, 0x016e3f, -1}, + {0x016e40, 0x016e9a, 1}, {0x016e9b, 0x016eff, -1}, + {0x016f00, 0x016f4a, 1}, {0x016f4b, 0x016f4e, -1}, + {0x016f4f, 0x016f4f, 0}, {0x016f50, 0x016f87, 1}, + {0x016f88, 0x016f8e, -1}, {0x016f8f, 0x016f92, 0}, + {0x016f93, 0x016f9f, 1}, {0x016fa0, 0x016fdf, -1}, + {0x016fe0, 0x016fe3, 2}, {0x016fe4, 0x016fe4, 0}, + {0x016fe5, 0x016fef, -1}, {0x016ff0, 0x016ff1, 2}, + {0x016ff2, 0x016fff, -1}, {0x017000, 0x0187f7, 2}, + {0x0187f8, 0x0187ff, -1}, {0x018800, 0x018cd5, 2}, + {0x018cd6, 0x018cfe, -1}, {0x018cff, 0x018d08, 2}, + {0x018d09, 0x01afef, -1}, {0x01aff0, 0x01aff3, 2}, + {0x01aff4, 0x01aff4, -1}, {0x01aff5, 0x01affb, 2}, + {0x01affc, 0x01affc, -1}, {0x01affd, 0x01affe, 2}, + {0x01afff, 0x01afff, -1}, {0x01b000, 0x01b122, 2}, + {0x01b123, 0x01b131, -1}, {0x01b132, 0x01b132, 2}, + {0x01b133, 0x01b14f, -1}, {0x01b150, 0x01b152, 2}, + {0x01b153, 0x01b154, -1}, {0x01b155, 0x01b155, 2}, + {0x01b156, 0x01b163, -1}, {0x01b164, 0x01b167, 2}, + {0x01b168, 0x01b16f, -1}, {0x01b170, 0x01b2fb, 2}, + {0x01b2fc, 0x01bbff, -1}, {0x01bc00, 0x01bc6a, 1}, + {0x01bc6b, 0x01bc6f, -1}, {0x01bc70, 0x01bc7c, 1}, + {0x01bc7d, 0x01bc7f, -1}, {0x01bc80, 0x01bc88, 1}, + {0x01bc89, 0x01bc8f, -1}, {0x01bc90, 0x01bc99, 1}, + {0x01bc9a, 0x01bc9b, -1}, {0x01bc9c, 0x01bc9c, 1}, + {0x01bc9d, 0x01bc9e, 0}, {0x01bc9f, 0x01bc9f, 1}, + {0x01bca0, 0x01bca3, 0}, {0x01bca4, 0x01cbff, -1}, + {0x01cc00, 0x01ccf9, 1}, {0x01ccfa, 0x01ccff, -1}, + {0x01cd00, 0x01ceb3, 1}, {0x01ceb4, 0x01ceff, -1}, + {0x01cf00, 0x01cf2d, 0}, {0x01cf2e, 0x01cf2f, -1}, + {0x01cf30, 0x01cf46, 0}, {0x01cf47, 0x01cf4f, -1}, + {0x01cf50, 0x01cfc3, 1}, {0x01cfc4, 0x01cfff, -1}, + {0x01d000, 0x01d0f5, 1}, {0x01d0f6, 0x01d0ff, -1}, + {0x01d100, 0x01d126, 1}, {0x01d127, 0x01d128, -1}, + {0x01d129, 0x01d166, 1}, {0x01d167, 0x01d169, 0}, + {0x01d16a, 0x01d172, 1}, {0x01d173, 0x01d182, 0}, + {0x01d183, 0x01d184, 1}, {0x01d185, 0x01d18b, 0}, + {0x01d18c, 0x01d1a9, 1}, {0x01d1aa, 0x01d1ad, 0}, + {0x01d1ae, 0x01d1ea, 1}, {0x01d1eb, 0x01d1ff, -1}, + {0x01d200, 0x01d241, 1}, {0x01d242, 0x01d244, 0}, + {0x01d245, 0x01d245, 1}, {0x01d246, 0x01d2bf, -1}, + {0x01d2c0, 0x01d2d3, 1}, {0x01d2d4, 0x01d2df, -1}, + {0x01d2e0, 0x01d2f3, 1}, {0x01d2f4, 0x01d2ff, -1}, + {0x01d300, 0x01d356, 2}, {0x01d357, 0x01d35f, -1}, + {0x01d360, 0x01d376, 2}, {0x01d377, 0x01d378, 1}, + {0x01d379, 0x01d3ff, -1}, {0x01d400, 0x01d454, 1}, + {0x01d455, 0x01d455, -1}, {0x01d456, 0x01d49c, 1}, + {0x01d49d, 0x01d49d, -1}, {0x01d49e, 0x01d49f, 1}, + {0x01d4a0, 0x01d4a1, -1}, {0x01d4a2, 0x01d4a2, 1}, + {0x01d4a3, 0x01d4a4, -1}, {0x01d4a5, 0x01d4a6, 1}, + {0x01d4a7, 0x01d4a8, -1}, {0x01d4a9, 0x01d4ac, 1}, + {0x01d4ad, 0x01d4ad, -1}, {0x01d4ae, 0x01d4b9, 1}, + {0x01d4ba, 0x01d4ba, -1}, {0x01d4bb, 0x01d4bb, 1}, + {0x01d4bc, 0x01d4bc, -1}, {0x01d4bd, 0x01d4c3, 1}, + {0x01d4c4, 0x01d4c4, -1}, {0x01d4c5, 0x01d505, 1}, + {0x01d506, 0x01d506, -1}, {0x01d507, 0x01d50a, 1}, + {0x01d50b, 0x01d50c, -1}, {0x01d50d, 0x01d514, 1}, + {0x01d515, 0x01d515, -1}, {0x01d516, 0x01d51c, 1}, + {0x01d51d, 0x01d51d, -1}, {0x01d51e, 0x01d539, 1}, + {0x01d53a, 0x01d53a, -1}, {0x01d53b, 0x01d53e, 1}, + {0x01d53f, 0x01d53f, -1}, {0x01d540, 0x01d544, 1}, + {0x01d545, 0x01d545, -1}, {0x01d546, 0x01d546, 1}, + {0x01d547, 0x01d549, -1}, {0x01d54a, 0x01d550, 1}, + {0x01d551, 0x01d551, -1}, {0x01d552, 0x01d6a5, 1}, + {0x01d6a6, 0x01d6a7, -1}, {0x01d6a8, 0x01d7cb, 1}, + {0x01d7cc, 0x01d7cd, -1}, {0x01d7ce, 0x01d9ff, 1}, + {0x01da00, 0x01da36, 0}, {0x01da37, 0x01da3a, 1}, + {0x01da3b, 0x01da6c, 0}, {0x01da6d, 0x01da74, 1}, + {0x01da75, 0x01da75, 0}, {0x01da76, 0x01da83, 1}, + {0x01da84, 0x01da84, 0}, {0x01da85, 0x01da8b, 1}, + {0x01da8c, 0x01da9a, -1}, {0x01da9b, 0x01da9f, 0}, + {0x01daa0, 0x01daa0, -1}, {0x01daa1, 0x01daaf, 0}, + {0x01dab0, 0x01deff, -1}, {0x01df00, 0x01df1e, 1}, + {0x01df1f, 0x01df24, -1}, {0x01df25, 0x01df2a, 1}, + {0x01df2b, 0x01dfff, -1}, {0x01e000, 0x01e006, 0}, + {0x01e007, 0x01e007, -1}, {0x01e008, 0x01e018, 0}, + {0x01e019, 0x01e01a, -1}, {0x01e01b, 0x01e021, 0}, + {0x01e022, 0x01e022, -1}, {0x01e023, 0x01e024, 0}, + {0x01e025, 0x01e025, -1}, {0x01e026, 0x01e02a, 0}, + {0x01e02b, 0x01e02f, -1}, {0x01e030, 0x01e06d, 1}, + {0x01e06e, 0x01e08e, -1}, {0x01e08f, 0x01e08f, 0}, + {0x01e090, 0x01e0ff, -1}, {0x01e100, 0x01e12c, 1}, + {0x01e12d, 0x01e12f, -1}, {0x01e130, 0x01e136, 0}, + {0x01e137, 0x01e13d, 1}, {0x01e13e, 0x01e13f, -1}, + {0x01e140, 0x01e149, 1}, {0x01e14a, 0x01e14d, -1}, + {0x01e14e, 0x01e14f, 1}, {0x01e150, 0x01e28f, -1}, + {0x01e290, 0x01e2ad, 1}, {0x01e2ae, 0x01e2ae, 0}, + {0x01e2af, 0x01e2bf, -1}, {0x01e2c0, 0x01e2eb, 1}, + {0x01e2ec, 0x01e2ef, 0}, {0x01e2f0, 0x01e2f9, 1}, + {0x01e2fa, 0x01e2fe, -1}, {0x01e2ff, 0x01e2ff, 1}, + {0x01e300, 0x01e4cf, -1}, {0x01e4d0, 0x01e4eb, 1}, + {0x01e4ec, 0x01e4ef, 0}, {0x01e4f0, 0x01e4f9, 1}, + {0x01e4fa, 0x01e5cf, -1}, {0x01e5d0, 0x01e5ed, 1}, + {0x01e5ee, 0x01e5ef, 0}, {0x01e5f0, 0x01e5fa, 1}, + {0x01e5fb, 0x01e5fe, -1}, {0x01e5ff, 0x01e5ff, 1}, + {0x01e600, 0x01e7df, -1}, {0x01e7e0, 0x01e7e6, 1}, + {0x01e7e7, 0x01e7e7, -1}, {0x01e7e8, 0x01e7eb, 1}, + {0x01e7ec, 0x01e7ec, -1}, {0x01e7ed, 0x01e7ee, 1}, + {0x01e7ef, 0x01e7ef, -1}, {0x01e7f0, 0x01e7fe, 1}, + {0x01e7ff, 0x01e7ff, -1}, {0x01e800, 0x01e8c4, 1}, + {0x01e8c5, 0x01e8c6, -1}, {0x01e8c7, 0x01e8cf, 1}, + {0x01e8d0, 0x01e8d6, 0}, {0x01e8d7, 0x01e8ff, -1}, + {0x01e900, 0x01e943, 1}, {0x01e944, 0x01e94a, 0}, + {0x01e94b, 0x01e94b, 1}, {0x01e94c, 0x01e94f, -1}, + {0x01e950, 0x01e959, 1}, {0x01e95a, 0x01e95d, -1}, + {0x01e95e, 0x01e95f, 1}, {0x01e960, 0x01ec70, -1}, + {0x01ec71, 0x01ecb4, 1}, {0x01ecb5, 0x01ed00, -1}, + {0x01ed01, 0x01ed3d, 1}, {0x01ed3e, 0x01edff, -1}, + {0x01ee00, 0x01ee03, 1}, {0x01ee04, 0x01ee04, -1}, + {0x01ee05, 0x01ee1f, 1}, {0x01ee20, 0x01ee20, -1}, + {0x01ee21, 0x01ee22, 1}, {0x01ee23, 0x01ee23, -1}, + {0x01ee24, 0x01ee24, 1}, {0x01ee25, 0x01ee26, -1}, + {0x01ee27, 0x01ee27, 1}, {0x01ee28, 0x01ee28, -1}, + {0x01ee29, 0x01ee32, 1}, {0x01ee33, 0x01ee33, -1}, + {0x01ee34, 0x01ee37, 1}, {0x01ee38, 0x01ee38, -1}, + {0x01ee39, 0x01ee39, 1}, {0x01ee3a, 0x01ee3a, -1}, + {0x01ee3b, 0x01ee3b, 1}, {0x01ee3c, 0x01ee41, -1}, + {0x01ee42, 0x01ee42, 1}, {0x01ee43, 0x01ee46, -1}, + {0x01ee47, 0x01ee47, 1}, {0x01ee48, 0x01ee48, -1}, + {0x01ee49, 0x01ee49, 1}, {0x01ee4a, 0x01ee4a, -1}, + {0x01ee4b, 0x01ee4b, 1}, {0x01ee4c, 0x01ee4c, -1}, + {0x01ee4d, 0x01ee4f, 1}, {0x01ee50, 0x01ee50, -1}, + {0x01ee51, 0x01ee52, 1}, {0x01ee53, 0x01ee53, -1}, + {0x01ee54, 0x01ee54, 1}, {0x01ee55, 0x01ee56, -1}, + {0x01ee57, 0x01ee57, 1}, {0x01ee58, 0x01ee58, -1}, + {0x01ee59, 0x01ee59, 1}, {0x01ee5a, 0x01ee5a, -1}, + {0x01ee5b, 0x01ee5b, 1}, {0x01ee5c, 0x01ee5c, -1}, + {0x01ee5d, 0x01ee5d, 1}, {0x01ee5e, 0x01ee5e, -1}, + {0x01ee5f, 0x01ee5f, 1}, {0x01ee60, 0x01ee60, -1}, + {0x01ee61, 0x01ee62, 1}, {0x01ee63, 0x01ee63, -1}, + {0x01ee64, 0x01ee64, 1}, {0x01ee65, 0x01ee66, -1}, + {0x01ee67, 0x01ee6a, 1}, {0x01ee6b, 0x01ee6b, -1}, + {0x01ee6c, 0x01ee72, 1}, {0x01ee73, 0x01ee73, -1}, + {0x01ee74, 0x01ee77, 1}, {0x01ee78, 0x01ee78, -1}, + {0x01ee79, 0x01ee7c, 1}, {0x01ee7d, 0x01ee7d, -1}, + {0x01ee7e, 0x01ee7e, 1}, {0x01ee7f, 0x01ee7f, -1}, + {0x01ee80, 0x01ee89, 1}, {0x01ee8a, 0x01ee8a, -1}, + {0x01ee8b, 0x01ee9b, 1}, {0x01ee9c, 0x01eea0, -1}, + {0x01eea1, 0x01eea3, 1}, {0x01eea4, 0x01eea4, -1}, + {0x01eea5, 0x01eea9, 1}, {0x01eeaa, 0x01eeaa, -1}, + {0x01eeab, 0x01eebb, 1}, {0x01eebc, 0x01eeef, -1}, + {0x01eef0, 0x01eef1, 1}, {0x01eef2, 0x01efff, -1}, + {0x01f000, 0x01f003, 1}, {0x01f004, 0x01f004, 2}, + {0x01f005, 0x01f02b, 1}, {0x01f02c, 0x01f02f, -1}, + {0x01f030, 0x01f093, 1}, {0x01f094, 0x01f09f, -1}, + {0x01f0a0, 0x01f0ae, 1}, {0x01f0af, 0x01f0b0, -1}, + {0x01f0b1, 0x01f0bf, 1}, {0x01f0c0, 0x01f0c0, -1}, + {0x01f0c1, 0x01f0ce, 1}, {0x01f0cf, 0x01f0cf, 2}, + {0x01f0d0, 0x01f0d0, -1}, {0x01f0d1, 0x01f0f5, 1}, + {0x01f0f6, 0x01f0ff, -1}, {0x01f100, 0x01f18d, 1}, + {0x01f18e, 0x01f18e, 2}, {0x01f18f, 0x01f190, 1}, + {0x01f191, 0x01f19a, 2}, {0x01f19b, 0x01f1ad, 1}, + {0x01f1ae, 0x01f1e5, -1}, {0x01f1e6, 0x01f1ff, 1}, + {0x01f200, 0x01f202, 2}, {0x01f203, 0x01f20f, -1}, + {0x01f210, 0x01f23b, 2}, {0x01f23c, 0x01f23f, -1}, + {0x01f240, 0x01f248, 2}, {0x01f249, 0x01f24f, -1}, + {0x01f250, 0x01f251, 2}, {0x01f252, 0x01f25f, -1}, + {0x01f260, 0x01f265, 2}, {0x01f266, 0x01f2ff, -1}, + {0x01f300, 0x01f320, 2}, {0x01f321, 0x01f32c, 1}, + {0x01f32d, 0x01f335, 2}, {0x01f336, 0x01f336, 1}, + {0x01f337, 0x01f37c, 2}, {0x01f37d, 0x01f37d, 1}, + {0x01f37e, 0x01f393, 2}, {0x01f394, 0x01f39f, 1}, + {0x01f3a0, 0x01f3ca, 2}, {0x01f3cb, 0x01f3ce, 1}, + {0x01f3cf, 0x01f3d3, 2}, {0x01f3d4, 0x01f3df, 1}, + {0x01f3e0, 0x01f3f0, 2}, {0x01f3f1, 0x01f3f3, 1}, + {0x01f3f4, 0x01f3f4, 2}, {0x01f3f5, 0x01f3f7, 1}, + {0x01f3f8, 0x01f43e, 2}, {0x01f43f, 0x01f43f, 1}, + {0x01f440, 0x01f440, 2}, {0x01f441, 0x01f441, 1}, + {0x01f442, 0x01f4fc, 2}, {0x01f4fd, 0x01f4fe, 1}, + {0x01f4ff, 0x01f53d, 2}, {0x01f53e, 0x01f54a, 1}, + {0x01f54b, 0x01f54e, 2}, {0x01f54f, 0x01f54f, 1}, + {0x01f550, 0x01f567, 2}, {0x01f568, 0x01f579, 1}, + {0x01f57a, 0x01f57a, 2}, {0x01f57b, 0x01f594, 1}, + {0x01f595, 0x01f596, 2}, {0x01f597, 0x01f5a3, 1}, + {0x01f5a4, 0x01f5a4, 2}, {0x01f5a5, 0x01f5fa, 1}, + {0x01f5fb, 0x01f64f, 2}, {0x01f650, 0x01f67f, 1}, + {0x01f680, 0x01f6c5, 2}, {0x01f6c6, 0x01f6cb, 1}, + {0x01f6cc, 0x01f6cc, 2}, {0x01f6cd, 0x01f6cf, 1}, + {0x01f6d0, 0x01f6d2, 2}, {0x01f6d3, 0x01f6d4, 1}, + {0x01f6d5, 0x01f6d7, 2}, {0x01f6d8, 0x01f6db, -1}, + {0x01f6dc, 0x01f6df, 2}, {0x01f6e0, 0x01f6ea, 1}, + {0x01f6eb, 0x01f6ec, 2}, {0x01f6ed, 0x01f6ef, -1}, + {0x01f6f0, 0x01f6f3, 1}, {0x01f6f4, 0x01f6fc, 2}, + {0x01f6fd, 0x01f6ff, -1}, {0x01f700, 0x01f776, 1}, + {0x01f777, 0x01f77a, -1}, {0x01f77b, 0x01f7d9, 1}, + {0x01f7da, 0x01f7df, -1}, {0x01f7e0, 0x01f7eb, 2}, + {0x01f7ec, 0x01f7ef, -1}, {0x01f7f0, 0x01f7f0, 2}, + {0x01f7f1, 0x01f7ff, -1}, {0x01f800, 0x01f80b, 1}, + {0x01f80c, 0x01f80f, -1}, {0x01f810, 0x01f847, 1}, + {0x01f848, 0x01f84f, -1}, {0x01f850, 0x01f859, 1}, + {0x01f85a, 0x01f85f, -1}, {0x01f860, 0x01f887, 1}, + {0x01f888, 0x01f88f, -1}, {0x01f890, 0x01f8ad, 1}, + {0x01f8ae, 0x01f8af, -1}, {0x01f8b0, 0x01f8bb, 1}, + {0x01f8bc, 0x01f8bf, -1}, {0x01f8c0, 0x01f8c1, 1}, + {0x01f8c2, 0x01f8ff, -1}, {0x01f900, 0x01f90b, 1}, + {0x01f90c, 0x01f93a, 2}, {0x01f93b, 0x01f93b, 1}, + {0x01f93c, 0x01f945, 2}, {0x01f946, 0x01f946, 1}, + {0x01f947, 0x01f9ff, 2}, {0x01fa00, 0x01fa53, 1}, + {0x01fa54, 0x01fa5f, -1}, {0x01fa60, 0x01fa6d, 1}, + {0x01fa6e, 0x01fa6f, -1}, {0x01fa70, 0x01fa7c, 2}, + {0x01fa7d, 0x01fa7f, -1}, {0x01fa80, 0x01fa89, 2}, + {0x01fa8a, 0x01fa8e, -1}, {0x01fa8f, 0x01fac6, 2}, + {0x01fac7, 0x01facd, -1}, {0x01face, 0x01fadc, 2}, + {0x01fadd, 0x01fade, -1}, {0x01fadf, 0x01fae9, 2}, + {0x01faea, 0x01faef, -1}, {0x01faf0, 0x01faf8, 2}, + {0x01faf9, 0x01faff, -1}, {0x01fb00, 0x01fb92, 1}, + {0x01fb93, 0x01fb93, -1}, {0x01fb94, 0x01fbf9, 1}, + {0x01fbfa, 0x01ffff, -1}, {0x020000, 0x02a6df, 2}, + {0x02a6e0, 0x02a6ff, -1}, {0x02a700, 0x02b739, 2}, + {0x02b73a, 0x02b73f, -1}, {0x02b740, 0x02b81d, 2}, + {0x02b81e, 0x02b81f, -1}, {0x02b820, 0x02cea1, 2}, + {0x02cea2, 0x02ceaf, -1}, {0x02ceb0, 0x02ebe0, 2}, + {0x02ebe1, 0x02ebef, -1}, {0x02ebf0, 0x02ee5d, 2}, + {0x02ee5e, 0x02f7ff, -1}, {0x02f800, 0x02fa1d, 2}, + {0x02fa1e, 0x02ffff, -1}, {0x030000, 0x03134a, 2}, + {0x03134b, 0x03134f, -1}, {0x031350, 0x0323af, 2}, + {0x0323b0, 0x0e0000, -1}, {0x0e0001, 0x0e0001, 0}, + {0x0e0002, 0x0e001f, -1}, {0x0e0020, 0x0e007f, 0}, + {0x0e0080, 0x0e00ff, -1}, {0x0e0100, 0x0e01ef, 0}, + {0x0e01f0, 0x0effff, -1}, {0x0f0000, 0x0ffffd, 1}, + {0x0ffffe, 0x0fffff, -1}, {0x100000, 0x10fffd, 1}, + {0x10fffe, 0x10ffff, -1}}; -static int wcrange(const uint32_t *lo, const uint16_t *cnt, int n, - uint32_t ch) { - int l = 0, h = n - 1; - while (l <= h) { - int m = (l + h) / 2; - if (ch < lo[m]) - h = m - 1; - else if (ch > lo[m] + cnt[m]) - l = m + 1; - else - return 1; - } - return 0; -} +#define WCWIDTH_TABLE_LEN 2143 int wcwidth(uint32_t ch) { if (ch >= 0x20 && ch <= 0x7e) @@ -170,11 +1099,18 @@ int wcwidth(uint32_t ch) { return 1; if (ch < 0x20 || (ch > 0x7e && ch < 0xa0)) return ch == 0 ? 0 : -1; - if (wcrange(wcw0_lo, wcw0_cnt, WCW0_LEN, ch)) - return 0; - if (wcrange(wcw2_lo, wcw2_cnt, WCW2_LEN, ch)) - return 2; - return 1; + + int lo = 0, hi = WCWIDTH_TABLE_LEN - 1; + while (lo <= hi) { + int mid = (lo + hi) / 2; + if (ch < wcwidth_table[mid].lo) + hi = mid - 1; + else if (ch > wcwidth_table[mid].hi) + lo = mid + 1; + else + return wcwidth_table[mid].w; + } + return -1; } int iswprint(uint32_t ch) { return wcwidth(ch) >= 0; } diff --git a/tasks/bundle-wasm.ts b/tasks/bundle-wasm.ts index d1918b2..b6b033d 100644 --- a/tasks/bundle-wasm.ts +++ b/tasks/bundle-wasm.ts @@ -1,54 +1,13 @@ -import { brotliCompressSync, constants } from "node:zlib"; - -const Z85 = - "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"; - -function encodeZ85(data: Uint8Array): string { - let padLen = (4 - (data.length % 4)) % 4; - let src = data; - if (padLen > 0) { - src = new Uint8Array(data.length + padLen); - src.set(data); - } - let out: string[] = []; - for (let i = 0; i < src.length; i += 4) { - let v = src[i] * 16777216 + src[i + 1] * 65536 + src[i + 2] * 256 + - src[i + 3]; - out.push( - Z85[Math.floor(v / 52200625)], - Z85[Math.floor(v / 614125) % 85], - Z85[Math.floor(v / 7225) % 85], - Z85[Math.floor(v / 85) % 85], - Z85[v % 85], - ); - } - return out.join(""); -} +import { encodeBase64 } from "@std/encoding/base64"; const wasm = await Deno.readFile("clayterm.wasm"); +const base64 = encodeBase64(wasm); -const compressed = new Uint8Array(brotliCompressSync(wasm, { - params: { - [constants.BROTLI_PARAM_QUALITY]: 11, - [constants.BROTLI_PARAM_SIZE_HINT]: wasm.length, - [constants.BROTLI_PARAM_LGWIN]: 24, - }, -})); - -const z85 = encodeZ85(compressed); - -// Decoder uses division instead of >>> to avoid 32-bit truncation on values near 0xFFFFFFFF. -const source = `import{brotliDecompressSync}from"node:zlib"; -const Z="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#"; -const T=new Uint8Array(128);for(let i=0;i<85;i++)T[Z.charCodeAt(i)]=i; -function d(s:string,n:number){const b=new Uint8Array(n);let o=0;for(let i=0;i