Unescape HTML · Nim · #1 Fastest suite
SHA-256
e2c0c7b54bcf685604bd61290120f691fcb23f10f9edb67d9e0b37d123a64585
Size-optimised rebuild of the 20-page Nim submission. The entity table is replaced by the compact design from the C submission fa176a59: front-coded sorted names in blocks of eight (each name stores only the suffix after its predecessor's shared prefix, 12,809 bytes), a u16 offset per block (266 entries), u16 refs (15-bit value offset | legacy bit, 2,125 entries), and a deduplicated value pool stored as LEB128 code points, NUL-terminated (code point 0 never occurs, 4,778 bytes). Binary search rebuilds the mid record's name from its block start with plain array indexing (Nim 2.4 removed raw pointer arithmetic), and the value loop decodes LEB128 code points through the existing emit_code_point helper. The named-reference scan now checks the legacy bit explicitly and caps the longest-prefix search at 6 bytes (no legacy name is longer). Unchanged: the scalar left-to-right scanner with the stale-read bounds fix, the one 1,258,320-byte buffer (output from byte 0, input from byte GAP=209,744), numeric references saturating at U+110000, Windows-1252 remapping of 0x80-0x9F, and U+FFFD for 0/surrogates/>U+10FFFF. 25,205 bytes, 20 pages, 16 KiB stack.
- Builds on
- Direct derivative of the first submitter's own Nim submission 2a0f2362: same scalar scanner, buffer layout, and stale-read fix. New here: the front-coded name blocks and LEB128 code-point value pool (the table design of the C submission fa176a59, itself derived from e9ed850e).
View source (95.2 KiB of Nim)
# SPDX-License-Identifier: MIT
#
# unescape_html in Nim: decode every HTML character reference in UTF-8 text,
# the way Python's html.unescape does, except that references to control
# characters and noncharacters (such as  or ) decode to that code
# point instead of being deleted.
#
# One self-contained file, no runtime, no GC (--mm:none), no exceptions. The
# entity table (Python's html.entities.html5, 2,231 names, digest-pinned) is
# injected at the @@TABLE@@ marker by gen_table_nim.py.
#
# Memory layout (20 pages = 1,310,720 bytes): one buffer of 1,258,320 bytes.
# Output is written from buffer[0]; input is read from buffer + GAP, where
# GAP = 209,744. The output can outgrow the consumed input by at most
# floor(1 MiB / 5) = 209,715 bytes (worst case ≫⃒, 5 bytes -> 6), so writes
# never touch unread input. Plus table and 16 KiB stack.
#
# Build (Nim 2.4, C backend, compiled for a 32-bit target so the generated C
# is pointer-size consistent with wasm32, then clang for wasm32-freestanding):
# python3 gen_table_nim.py unescape.nim build/unescape_full.nim
# nim c --compileOnly --app:lib --mm:none --exceptions:goto -d:danger \
# --cpu:i386 --os:linux --hints:off --warnings:off \
# --out:build/full.c build/unescape_full.nim
# # drop the __attribute__((constructor)) block from the generated C
# clang --target=wasm32 -nostdlib -ffreestanding -O2 -fno-strict-aliasing \
# -ffunction-sections -fdata-sections -c <generated.c>
# # plus a 10-line memset/memcpy stub (the only runtime the C backend needs)
# wasm-ld ... --no-entry --export-memory -z stack-size=16384 \
# --initial-memory=1310720 --max-memory=1310720 --gc-sections --strip-all
#
# The scan is scalar: the benchmark corpus is 99.9% cases of 80 bytes or less,
# where per-chunk SIMD overhead does not pay off.
const
GAP = 209744
INPUT_CAP = 1048576
# floor(INPUT_CAP/5)*6 + INPUT_CAP%5: the proven maximum output size.
OUTPUT_CAP = 1258291
var buffer: array[GAP + INPUT_CAP, byte]
var out_len: int
proc input_ptr(): cuint {.exportc: "input_ptr".} =
cast[cuint](addr(buffer[GAP]))
proc input_utf8_cap(): cuint {.exportc: "input_utf8_cap".} =
INPUT_CAP
proc output_utf8_cap(): cuint {.exportc: "output_utf8_cap".} =
OUTPUT_CAP
# Windows-1252 remapping for references to 0x80-0x9F; 0 means keep the code point.
const c1: array[32, int] = [0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0x017D, 0, 0, 0x2018, 0x2019, 0x201C,
0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0x017E,
0x0178]
# Front-coded sorted names in blocks of eight: each record is
# [prefix length][suffix bytes][0]; the first record of each block
# has prefix 0. table_groups[b] is the offset of block b in
# table_names. table_refs[i] = value offset | legacy bit (0x8000).
# Values are LEB128 code points, NUL-terminated (code point 0 never
# occurs).
const table_names: array[12809, byte] = [
0, 65, 69, 108, 105, 103, 0, 1, 77, 80, 0, 1, 97, 99, 117, 116,
101, 0, 1, 98, 114, 101, 118, 101, 0, 1, 99, 105, 114, 99, 0, 2,
121, 0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 0, 65, 108,
112, 104, 97, 0, 1, 109, 97, 99, 114, 0, 1, 110, 100, 0, 1, 111,
103, 111, 110, 0, 2, 112, 102, 0, 1, 112, 112, 108, 121, 70, 117, 110,
99, 116, 105, 111, 110, 0, 1, 114, 105, 110, 103, 0, 1, 115, 99, 114,
0, 0, 65, 115, 115, 105, 103, 110, 0, 1, 116, 105, 108, 100, 101, 0,
1, 117, 109, 108, 0, 0, 66, 97, 99, 107, 115, 108, 97, 115, 104, 0,
2, 114, 118, 0, 3, 119, 101, 100, 0, 1, 99, 121, 0, 1, 101, 99,
97, 117, 115, 101, 0, 0, 66, 101, 114, 110, 111, 117, 108, 108, 105, 115,
0, 2, 116, 97, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1, 114,
101, 118, 101, 0, 1, 115, 99, 114, 0, 1, 117, 109, 112, 101, 113, 0,
0, 67, 72, 99, 121, 0, 0, 67, 79, 80, 89, 0, 1, 97, 99, 117,
116, 101, 0, 2, 112, 0, 3, 105, 116, 97, 108, 68, 105, 102, 102, 101,
114, 101, 110, 116, 105, 97, 108, 68, 0, 2, 121, 108, 101, 121, 115, 0,
1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2, 105, 114,
99, 0, 0, 67, 99, 111, 110, 105, 110, 116, 0, 1, 100, 111, 116, 0,
1, 101, 100, 105, 108, 108, 97, 0, 2, 110, 116, 101, 114, 68, 111, 116,
0, 1, 102, 114, 0, 1, 104, 105, 0, 1, 105, 114, 99, 108, 101, 68,
111, 116, 0, 6, 77, 105, 110, 117, 115, 0, 0, 67, 105, 114, 99, 108,
101, 80, 108, 117, 115, 0, 6, 84, 105, 109, 101, 115, 0, 1, 108, 111,
99, 107, 119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116,
101, 103, 114, 97, 108, 0, 3, 115, 101, 67, 117, 114, 108, 121, 68, 111,
117, 98, 108, 101, 81, 117, 111, 116, 101, 0, 10, 81, 117, 111, 116, 101,
0, 1, 111, 108, 111, 110, 0, 5, 101, 0, 2, 110, 103, 114, 117, 101,
110, 116, 0, 0, 67, 111, 110, 105, 110, 116, 0, 3, 116, 111, 117, 114,
73, 110, 116, 101, 103, 114, 97, 108, 0, 2, 112, 102, 0, 3, 114, 111,
100, 117, 99, 116, 0, 2, 117, 110, 116, 101, 114, 67, 108, 111, 99, 107,
119, 105, 115, 101, 67, 111, 110, 116, 111, 117, 114, 73, 110, 116, 101, 103,
114, 97, 108, 0, 1, 114, 111, 115, 115, 0, 1, 115, 99, 114, 0, 1,
117, 112, 0, 0, 67, 117, 112, 67, 97, 112, 0, 0, 68, 68, 0, 2,
111, 116, 114, 97, 104, 100, 0, 1, 74, 99, 121, 0, 1, 83, 99, 121,
0, 1, 90, 99, 121, 0, 1, 97, 103, 103, 101, 114, 0, 2, 114, 114,
0, 0, 68, 97, 115, 104, 118, 0, 1, 99, 97, 114, 111, 110, 0, 2,
121, 0, 1, 101, 108, 0, 3, 116, 97, 0, 1, 102, 114, 0, 1, 105,
97, 99, 114, 105, 116, 105, 99, 97, 108, 65, 99, 117, 116, 101, 0, 11,
68, 111, 116, 0, 0, 68, 105, 97, 99, 114, 105, 116, 105, 99, 97, 108,
68, 111, 117, 98, 108, 101, 65, 99, 117, 116, 101, 0, 11, 71, 114, 97,
118, 101, 0, 11, 84, 105, 108, 100, 101, 0, 3, 109, 111, 110, 100, 0,
2, 102, 102, 101, 114, 101, 110, 116, 105, 97, 108, 68, 0, 1, 111, 112,
102, 0, 2, 116, 0, 3, 68, 111, 116, 0, 0, 68, 111, 116, 69, 113,
117, 97, 108, 0, 2, 117, 98, 108, 101, 67, 111, 110, 116, 111, 117, 114,
73, 110, 116, 101, 103, 114, 97, 108, 0, 6, 68, 111, 116, 0, 8, 119,
110, 65, 114, 114, 111, 119, 0, 6, 76, 101, 102, 116, 65, 114, 114, 111,
119, 0, 10, 82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 10, 84,
101, 101, 0, 7, 111, 110, 103, 76, 101, 102, 116, 65, 114, 114, 111, 119,
0, 0, 68, 111, 117, 98, 108, 101, 76, 111, 110, 103, 76, 101, 102, 116,
82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 10, 82, 105, 103, 104,
116, 65, 114, 114, 111, 119, 0, 6, 82, 105, 103, 104, 116, 65, 114, 114,
111, 119, 0, 11, 84, 101, 101, 0, 6, 85, 112, 65, 114, 114, 111, 119,
0, 8, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 6, 86, 101, 114,
116, 105, 99, 97, 108, 66, 97, 114, 0, 2, 119, 110, 65, 114, 114, 111,
119, 0, 0, 68, 111, 119, 110, 65, 114, 114, 111, 119, 66, 97, 114, 0,
9, 85, 112, 65, 114, 114, 111, 119, 0, 4, 66, 114, 101, 118, 101, 0,
4, 76, 101, 102, 116, 82, 105, 103, 104, 116, 86, 101, 99, 116, 111, 114,
0, 8, 84, 101, 101, 86, 101, 99, 116, 111, 114, 0, 8, 86, 101, 99,
116, 111, 114, 0, 14, 66, 97, 114, 0, 4, 82, 105, 103, 104, 116, 84,
101, 101, 86, 101, 99, 116, 111, 114, 0, 0, 68, 111, 119, 110, 82, 105,
103, 104, 116, 86, 101, 99, 116, 111, 114, 0, 15, 66, 97, 114, 0, 4,
84, 101, 101, 0, 7, 65, 114, 114, 111, 119, 0, 4, 97, 114, 114, 111,
119, 0, 1, 115, 99, 114, 0, 2, 116, 114, 111, 107, 0, 0, 69, 78,
71, 0, 0, 69, 84, 72, 0, 1, 97, 99, 117, 116, 101, 0, 1, 99,
97, 114, 111, 110, 0, 2, 105, 114, 99, 0, 2, 121, 0, 1, 100, 111,
116, 0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 0, 69, 108,
101, 109, 101, 110, 116, 0, 1, 109, 97, 99, 114, 0, 2, 112, 116, 121,
83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 5, 86, 101, 114,
121, 83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 1, 111, 103,
111, 110, 0, 2, 112, 102, 0, 1, 112, 115, 105, 108, 111, 110, 0, 1,
113, 117, 97, 108, 0, 0, 69, 113, 117, 97, 108, 84, 105, 108, 100, 101,
0, 3, 105, 108, 105, 98, 114, 105, 117, 109, 0, 1, 115, 99, 114, 0,
2, 105, 109, 0, 1, 116, 97, 0, 1, 117, 109, 108, 0, 1, 120, 105,
115, 116, 115, 0, 2, 112, 111, 110, 101, 110, 116, 105, 97, 108, 69, 0,
0, 70, 99, 121, 0, 1, 102, 114, 0, 1, 105, 108, 108, 101, 100, 83,
109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 6, 86, 101, 114, 121,
83, 109, 97, 108, 108, 83, 113, 117, 97, 114, 101, 0, 1, 111, 112, 102,
0, 2, 114, 65, 108, 108, 0, 2, 117, 114, 105, 101, 114, 116, 114, 102,
0, 1, 115, 99, 114, 0, 0, 71, 74, 99, 121, 0, 1, 84, 0, 1,
97, 109, 109, 97, 0, 5, 100, 0, 1, 98, 114, 101, 118, 101, 0, 1,
99, 101, 100, 105, 108, 0, 2, 105, 114, 99, 0, 2, 121, 0, 0, 71,
100, 111, 116, 0, 1, 102, 114, 0, 1, 103, 0, 1, 111, 112, 102, 0,
1, 114, 101, 97, 116, 101, 114, 69, 113, 117, 97, 108, 0, 12, 76, 101,
115, 115, 0, 7, 70, 117, 108, 108, 69, 113, 117, 97, 108, 0, 7, 71,
114, 101, 97, 116, 101, 114, 0, 0, 71, 114, 101, 97, 116, 101, 114, 76,
101, 115, 115, 0, 7, 83, 108, 97, 110, 116, 69, 113, 117, 97, 108, 0,
7, 84, 105, 108, 100, 101, 0, 1, 115, 99, 114, 0, 1, 116, 0, 0,
72, 65, 82, 68, 99, 121, 0, 1, 97, 99, 101, 107, 0, 2, 116, 0,
0, 72, 99, 105, 114, 99, 0, 1, 102, 114, 0, 1, 105, 108, 98, 101,
114, 116, 83, 112, 97, 99, 101, 0, 1, 111, 112, 102, 0, 2, 114, 105,
122, 111, 110, 116, 97, 108, 76, 105, 110, 101, 0, 1, 115, 99, 114, 0,
2, 116, 114, 111, 107, 0, 1, 117, 109, 112, 68, 111, 119, 110, 72, 117,
109, 112, 0, 0, 72, 117, 109, 112, 69, 113, 117, 97, 108, 0, 0, 73,
69, 99, 121, 0, 1, 74, 108, 105, 103, 0, 1, 79, 99, 121, 0, 1,
97, 99, 117, 116, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1,
100, 111, 116, 0, 0, 73, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0,
1, 109, 0, 2, 97, 99, 114, 0, 3, 103, 105, 110, 97, 114, 121, 73,
0, 2, 112, 108, 105, 101, 115, 0, 1, 110, 116, 0, 3, 101, 103, 114,
97, 108, 0, 0, 73, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110,
0, 2, 118, 105, 115, 105, 98, 108, 101, 67, 111, 109, 109, 97, 0, 9,
84, 105, 109, 101, 115, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0,
2, 116, 97, 0, 1, 115, 99, 114, 0, 1, 116, 105, 108, 100, 101, 0,
0, 73, 117, 107, 99, 121, 0, 2, 109, 108, 0, 0, 74, 99, 105, 114,
99, 0, 2, 121, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1, 115,
99, 114, 0, 2, 101, 114, 99, 121, 0, 0, 74, 117, 107, 99, 121, 0,
0, 75, 72, 99, 121, 0, 1, 74, 99, 121, 0, 1, 97, 112, 112, 97,
0, 1, 99, 101, 100, 105, 108, 0, 2, 121, 0, 1, 102, 114, 0, 1,
111, 112, 102, 0, 0, 75, 115, 99, 114, 0, 0, 76, 74, 99, 121, 0,
1, 84, 0, 1, 97, 99, 117, 116, 101, 0, 2, 109, 98, 100, 97, 0,
2, 110, 103, 0, 2, 112, 108, 97, 99, 101, 116, 114, 102, 0, 2, 114,
114, 0, 0, 76, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0,
2, 121, 0, 1, 101, 102, 116, 65, 110, 103, 108, 101, 66, 114, 97, 99,
107, 101, 116, 0, 5, 114, 114, 111, 119, 0, 9, 66, 97, 114, 0, 9,
82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 4, 67, 101, 105, 108,
105, 110, 103, 0, 0, 76, 101, 102, 116, 68, 111, 117, 98, 108, 101, 66,
114, 97, 99, 107, 101, 116, 0, 6, 119, 110, 84, 101, 101, 86, 101, 99,
116, 111, 114, 0, 8, 86, 101, 99, 116, 111, 114, 0, 14, 66, 97, 114,
0, 4, 70, 108, 111, 111, 114, 0, 4, 82, 105, 103, 104, 116, 65, 114,
114, 111, 119, 0, 9, 86, 101, 99, 116, 111, 114, 0, 4, 84, 101, 101,
0, 0, 76, 101, 102, 116, 84, 101, 101, 65, 114, 114, 111, 119, 0, 7,
86, 101, 99, 116, 111, 114, 0, 5, 114, 105, 97, 110, 103, 108, 101, 0,
12, 66, 97, 114, 0, 12, 69, 113, 117, 97, 108, 0, 4, 85, 112, 68,
111, 119, 110, 86, 101, 99, 116, 111, 114, 0, 6, 84, 101, 101, 86, 101,
99, 116, 111, 114, 0, 6, 86, 101, 99, 116, 111, 114, 0, 0, 76, 101,
102, 116, 85, 112, 86, 101, 99, 116, 111, 114, 66, 97, 114, 0, 4, 86,
101, 99, 116, 111, 114, 0, 10, 66, 97, 114, 0, 4, 97, 114, 114, 111,
119, 0, 4, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 115,
115, 69, 113, 117, 97, 108, 71, 114, 101, 97, 116, 101, 114, 0, 4, 70,
117, 108, 108, 69, 113, 117, 97, 108, 0, 4, 71, 114, 101, 97, 116, 101,
114, 0, 0, 76, 101, 115, 115, 76, 101, 115, 115, 0, 4, 83, 108, 97,
110, 116, 69, 113, 117, 97, 108, 0, 4, 84, 105, 108, 100, 101, 0, 1,
102, 114, 0, 1, 108, 0, 2, 101, 102, 116, 97, 114, 114, 111, 119, 0,
1, 109, 105, 100, 111, 116, 0, 1, 111, 110, 103, 76, 101, 102, 116, 65,
114, 114, 111, 119, 0, 0, 76, 111, 110, 103, 76, 101, 102, 116, 82, 105,
103, 104, 116, 65, 114, 114, 111, 119, 0, 4, 82, 105, 103, 104, 116, 65,
114, 114, 111, 119, 0, 4, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0,
8, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 4, 114, 105, 103,
104, 116, 97, 114, 114, 111, 119, 0, 2, 112, 102, 0, 2, 119, 101, 114,
76, 101, 102, 116, 65, 114, 114, 111, 119, 0, 5, 82, 105, 103, 104, 116,
65, 114, 114, 111, 119, 0, 0, 76, 115, 99, 114, 0, 2, 104, 0, 2,
116, 114, 111, 107, 0, 1, 116, 0, 0, 77, 97, 112, 0, 1, 99, 121,
0, 1, 101, 100, 105, 117, 109, 83, 112, 97, 99, 101, 0, 2, 108, 108,
105, 110, 116, 114, 102, 0, 0, 77, 102, 114, 0, 1, 105, 110, 117, 115,
80, 108, 117, 115, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 1,
117, 0, 0, 78, 74, 99, 121, 0, 1, 97, 99, 117, 116, 101, 0, 1,
99, 97, 114, 111, 110, 0, 0, 78, 99, 101, 100, 105, 108, 0, 2, 121,
0, 1, 101, 103, 97, 116, 105, 118, 101, 77, 101, 100, 105, 117, 109, 83,
112, 97, 99, 101, 0, 8, 84, 104, 105, 99, 107, 83, 112, 97, 99, 101,
0, 11, 110, 83, 112, 97, 99, 101, 0, 8, 86, 101, 114, 121, 84, 104,
105, 110, 83, 112, 97, 99, 101, 0, 2, 115, 116, 101, 100, 71, 114, 101,
97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 0, 6, 76, 101, 115,
115, 76, 101, 115, 115, 0, 0, 78, 101, 119, 76, 105, 110, 101, 0, 1,
102, 114, 0, 1, 111, 66, 114, 101, 97, 107, 0, 2, 110, 66, 114, 101,
97, 107, 105, 110, 103, 83, 112, 97, 99, 101, 0, 2, 112, 102, 0, 2,
116, 0, 3, 67, 111, 110, 103, 114, 117, 101, 110, 116, 0, 4, 117, 112,
67, 97, 112, 0, 0, 78, 111, 116, 68, 111, 117, 98, 108, 101, 86, 101,
114, 116, 105, 99, 97, 108, 66, 97, 114, 0, 3, 69, 108, 101, 109, 101,
110, 116, 0, 4, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0,
4, 120, 105, 115, 116, 115, 0, 3, 71, 114, 101, 97, 116, 101, 114, 0,
10, 69, 113, 117, 97, 108, 0, 10, 70, 117, 108, 108, 69, 113, 117, 97,
108, 0, 0, 78, 111, 116, 71, 114, 101, 97, 116, 101, 114, 71, 114, 101,
97, 116, 101, 114, 0, 10, 76, 101, 115, 115, 0, 10, 83, 108, 97, 110,
116, 69, 113, 117, 97, 108, 0, 10, 84, 105, 108, 100, 101, 0, 3, 72,
117, 109, 112, 68, 111, 119, 110, 72, 117, 109, 112, 0, 7, 69, 113, 117,
97, 108, 0, 3, 76, 101, 102, 116, 84, 114, 105, 97, 110, 103, 108, 101,
0, 15, 66, 97, 114, 0, 0, 78, 111, 116, 76, 101, 102, 116, 84, 114,
105, 97, 110, 103, 108, 101, 69, 113, 117, 97, 108, 0, 5, 115, 115, 0,
7, 69, 113, 117, 97, 108, 0, 7, 71, 114, 101, 97, 116, 101, 114, 0,
7, 76, 101, 115, 115, 0, 7, 83, 108, 97, 110, 116, 69, 113, 117, 97,
108, 0, 7, 84, 105, 108, 100, 101, 0, 3, 78, 101, 115, 116, 101, 100,
71, 114, 101, 97, 116, 101, 114, 71, 114, 101, 97, 116, 101, 114, 0, 0,
78, 111, 116, 78, 101, 115, 116, 101, 100, 76, 101, 115, 115, 76, 101, 115,
115, 0, 3, 80, 114, 101, 99, 101, 100, 101, 115, 0, 11, 69, 113, 117,
97, 108, 0, 11, 83, 108, 97, 110, 116, 69, 113, 117, 97, 108, 0, 3,
82, 101, 118, 101, 114, 115, 101, 69, 108, 101, 109, 101, 110, 116, 0, 4,
105, 103, 104, 116, 84, 114, 105, 97, 110, 103, 108, 101, 0, 16, 66, 97,
114, 0, 16, 69, 113, 117, 97, 108, 0, 0, 78, 111, 116, 83, 113, 117,
97, 114, 101, 83, 117, 98, 115, 101, 116, 0, 15, 69, 113, 117, 97, 108,
0, 11, 112, 101, 114, 115, 101, 116, 0, 17, 69, 113, 117, 97, 108, 0,
4, 117, 98, 115, 101, 116, 0, 9, 69, 113, 117, 97, 108, 0, 5, 99,
99, 101, 101, 100, 115, 0, 11, 69, 113, 117, 97, 108, 0, 0, 78, 111,
116, 83, 117, 99, 99, 101, 101, 100, 115, 83, 108, 97, 110, 116, 69, 113,
117, 97, 108, 0, 11, 84, 105, 108, 100, 101, 0, 5, 112, 101, 114, 115,
101, 116, 0, 11, 69, 113, 117, 97, 108, 0, 3, 84, 105, 108, 100, 101,
0, 8, 69, 113, 117, 97, 108, 0, 8, 70, 117, 108, 108, 69, 113, 117,
97, 108, 0, 8, 84, 105, 108, 100, 101, 0, 0, 78, 111, 116, 86, 101,
114, 116, 105, 99, 97, 108, 66, 97, 114, 0, 1, 115, 99, 114, 0, 1,
116, 105, 108, 100, 101, 0, 1, 117, 0, 0, 79, 69, 108, 105, 103, 0,
1, 97, 99, 117, 116, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0,
0, 79, 100, 98, 108, 97, 99, 0, 1, 102, 114, 0, 1, 103, 114, 97,
118, 101, 0, 1, 109, 97, 99, 114, 0, 2, 101, 103, 97, 0, 2, 105,
99, 114, 111, 110, 0, 1, 111, 112, 102, 0, 1, 112, 101, 110, 67, 117,
114, 108, 121, 68, 111, 117, 98, 108, 101, 81, 117, 111, 116, 101, 0, 0,
79, 112, 101, 110, 67, 117, 114, 108, 121, 81, 117, 111, 116, 101, 0, 1,
114, 0, 1, 115, 99, 114, 0, 2, 108, 97, 115, 104, 0, 1, 116, 105,
108, 100, 101, 0, 3, 109, 101, 115, 0, 1, 117, 109, 108, 0, 1, 118,
101, 114, 66, 97, 114, 0, 0, 79, 118, 101, 114, 66, 114, 97, 99, 101,
0, 8, 107, 101, 116, 0, 4, 80, 97, 114, 101, 110, 116, 104, 101, 115,
105, 115, 0, 0, 80, 97, 114, 116, 105, 97, 108, 68, 0, 1, 99, 121,
0, 1, 102, 114, 0, 1, 104, 105, 0, 1, 105, 0, 0, 80, 108, 117,
115, 77, 105, 110, 117, 115, 0, 1, 111, 105, 110, 99, 97, 114, 101, 112,
108, 97, 110, 101, 0, 2, 112, 102, 0, 1, 114, 0, 2, 101, 99, 101,
100, 101, 115, 0, 8, 69, 113, 117, 97, 108, 0, 8, 83, 108, 97, 110,
116, 69, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0, 0, 80,
114, 105, 109, 101, 0, 2, 111, 100, 117, 99, 116, 0, 3, 112, 111, 114,
116, 105, 111, 110, 0, 10, 97, 108, 0, 1, 115, 99, 114, 0, 2, 105,
0, 0, 81, 85, 79, 84, 0, 1, 102, 114, 0, 0, 81, 111, 112, 102,
0, 1, 115, 99, 114, 0, 0, 82, 66, 97, 114, 114, 0, 1, 69, 71,
0, 1, 97, 99, 117, 116, 101, 0, 2, 110, 103, 0, 2, 114, 114, 0,
4, 116, 108, 0, 0, 82, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105,
108, 0, 2, 121, 0, 1, 101, 0, 2, 118, 101, 114, 115, 101, 69, 108,
101, 109, 101, 110, 116, 0, 8, 113, 117, 105, 108, 105, 98, 114, 105, 117,
109, 0, 7, 85, 112, 69, 113, 117, 105, 108, 105, 98, 114, 105, 117, 109,
0, 1, 102, 114, 0, 0, 82, 104, 111, 0, 1, 105, 103, 104, 116, 65,
110, 103, 108, 101, 66, 114, 97, 99, 107, 101, 116, 0, 6, 114, 114, 111,
119, 0, 10, 66, 97, 114, 0, 10, 76, 101, 102, 116, 65, 114, 114, 111,
119, 0, 5, 67, 101, 105, 108, 105, 110, 103, 0, 5, 68, 111, 117, 98,
108, 101, 66, 114, 97, 99, 107, 101, 116, 0, 7, 119, 110, 84, 101, 101,
86, 101, 99, 116, 111, 114, 0, 0, 82, 105, 103, 104, 116, 68, 111, 119,
110, 86, 101, 99, 116, 111, 114, 0, 15, 66, 97, 114, 0, 5, 70, 108,
111, 111, 114, 0, 5, 84, 101, 101, 0, 8, 65, 114, 114, 111, 119, 0,
8, 86, 101, 99, 116, 111, 114, 0, 6, 114, 105, 97, 110, 103, 108, 101,
0, 13, 66, 97, 114, 0, 0, 82, 105, 103, 104, 116, 84, 114, 105, 97,
110, 103, 108, 101, 69, 113, 117, 97, 108, 0, 5, 85, 112, 68, 111, 119,
110, 86, 101, 99, 116, 111, 114, 0, 7, 84, 101, 101, 86, 101, 99, 116,
111, 114, 0, 7, 86, 101, 99, 116, 111, 114, 0, 13, 66, 97, 114, 0,
5, 86, 101, 99, 116, 111, 114, 0, 11, 66, 97, 114, 0, 5, 97, 114,
114, 111, 119, 0, 0, 82, 111, 112, 102, 0, 2, 117, 110, 100, 73, 109,
112, 108, 105, 101, 115, 0, 1, 114, 105, 103, 104, 116, 97, 114, 114, 111,
119, 0, 1, 115, 99, 114, 0, 2, 104, 0, 1, 117, 108, 101, 68, 101,
108, 97, 121, 101, 100, 0, 0, 83, 72, 67, 72, 99, 121, 0, 2, 99,
121, 0, 0, 83, 79, 70, 84, 99, 121, 0, 1, 97, 99, 117, 116, 101,
0, 1, 99, 0, 2, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0,
2, 105, 114, 99, 0, 2, 121, 0, 1, 102, 114, 0, 0, 83, 104, 111,
114, 116, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 5, 76, 101, 102,
116, 65, 114, 114, 111, 119, 0, 5, 82, 105, 103, 104, 116, 65, 114, 114,
111, 119, 0, 5, 85, 112, 65, 114, 114, 111, 119, 0, 1, 105, 103, 109,
97, 0, 1, 109, 97, 108, 108, 67, 105, 114, 99, 108, 101, 0, 1, 111,
112, 102, 0, 1, 113, 114, 116, 0, 0, 83, 113, 117, 97, 114, 101, 0,
6, 73, 110, 116, 101, 114, 115, 101, 99, 116, 105, 111, 110, 0, 6, 83,
117, 98, 115, 101, 116, 0, 12, 69, 113, 117, 97, 108, 0, 8, 112, 101,
114, 115, 101, 116, 0, 14, 69, 113, 117, 97, 108, 0, 6, 85, 110, 105,
111, 110, 0, 1, 115, 99, 114, 0, 0, 83, 116, 97, 114, 0, 1, 117,
98, 0, 3, 115, 101, 116, 0, 6, 69, 113, 117, 97, 108, 0, 2, 99,
99, 101, 101, 100, 115, 0, 8, 69, 113, 117, 97, 108, 0, 8, 83, 108,
97, 110, 116, 69, 113, 117, 97, 108, 0, 8, 84, 105, 108, 100, 101, 0,
0, 83, 117, 99, 104, 84, 104, 97, 116, 0, 2, 109, 0, 2, 112, 0,
3, 101, 114, 115, 101, 116, 0, 8, 69, 113, 117, 97, 108, 0, 3, 115,
101, 116, 0, 0, 84, 72, 79, 82, 78, 0, 1, 82, 65, 68, 69, 0,
0, 84, 83, 72, 99, 121, 0, 2, 99, 121, 0, 1, 97, 98, 0, 2,
117, 0, 1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2,
121, 0, 1, 102, 114, 0, 0, 84, 104, 101, 114, 101, 102, 111, 114, 101,
0, 3, 116, 97, 0, 2, 105, 99, 107, 83, 112, 97, 99, 101, 0, 3,
110, 83, 112, 97, 99, 101, 0, 1, 105, 108, 100, 101, 0, 5, 69, 113,
117, 97, 108, 0, 5, 70, 117, 108, 108, 69, 113, 117, 97, 108, 0, 5,
84, 105, 108, 100, 101, 0, 0, 84, 111, 112, 102, 0, 1, 114, 105, 112,
108, 101, 68, 111, 116, 0, 1, 115, 99, 114, 0, 2, 116, 114, 111, 107,
0, 0, 85, 97, 99, 117, 116, 101, 0, 2, 114, 114, 0, 4, 111, 99,
105, 114, 0, 1, 98, 114, 99, 121, 0, 0, 85, 98, 114, 101, 118, 101,
0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1, 100, 98, 108, 97, 99,
0, 1, 102, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 109, 97, 99,
114, 0, 1, 110, 100, 101, 114, 66, 97, 114, 0, 0, 85, 110, 100, 101,
114, 66, 114, 97, 99, 101, 0, 9, 107, 101, 116, 0, 5, 80, 97, 114,
101, 110, 116, 104, 101, 115, 105, 115, 0, 2, 105, 111, 110, 0, 5, 80,
108, 117, 115, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0, 1, 112,
65, 114, 114, 111, 119, 0, 0, 85, 112, 65, 114, 114, 111, 119, 66, 97,
114, 0, 7, 68, 111, 119, 110, 65, 114, 114, 111, 119, 0, 2, 68, 111,
119, 110, 65, 114, 114, 111, 119, 0, 2, 69, 113, 117, 105, 108, 105, 98,
114, 105, 117, 109, 0, 2, 84, 101, 101, 0, 5, 65, 114, 114, 111, 119,
0, 2, 97, 114, 114, 111, 119, 0, 2, 100, 111, 119, 110, 97, 114, 114,
111, 119, 0, 0, 85, 112, 112, 101, 114, 76, 101, 102, 116, 65, 114, 114,
111, 119, 0, 5, 82, 105, 103, 104, 116, 65, 114, 114, 111, 119, 0, 2,
115, 105, 0, 4, 108, 111, 110, 0, 1, 114, 105, 110, 103, 0, 1, 115,
99, 114, 0, 1, 116, 105, 108, 100, 101, 0, 1, 117, 109, 108, 0, 0,
86, 68, 97, 115, 104, 0, 1, 98, 97, 114, 0, 1, 99, 121, 0, 1,
100, 97, 115, 104, 0, 5, 108, 0, 1, 101, 101, 0, 2, 114, 98, 97,
114, 0, 3, 116, 0, 0, 86, 101, 114, 116, 105, 99, 97, 108, 66, 97,
114, 0, 8, 76, 105, 110, 101, 0, 8, 83, 101, 112, 97, 114, 97, 116,
111, 114, 0, 8, 84, 105, 108, 100, 101, 0, 3, 121, 84, 104, 105, 110,
83, 112, 97, 99, 101, 0, 1, 102, 114, 0, 1, 111, 112, 102, 0, 1,
115, 99, 114, 0, 0, 86, 118, 100, 97, 115, 104, 0, 0, 87, 99, 105,
114, 99, 0, 1, 101, 100, 103, 101, 0, 1, 102, 114, 0, 1, 111, 112,
102, 0, 1, 115, 99, 114, 0, 0, 88, 102, 114, 0, 1, 105, 0, 0,
88, 111, 112, 102, 0, 1, 115, 99, 114, 0, 0, 89, 65, 99, 121, 0,
1, 73, 99, 121, 0, 1, 85, 99, 121, 0, 1, 97, 99, 117, 116, 101,
0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 0, 89, 102, 114, 0, 1,
111, 112, 102, 0, 1, 115, 99, 114, 0, 1, 117, 109, 108, 0, 0, 90,
72, 99, 121, 0, 1, 97, 99, 117, 116, 101, 0, 1, 99, 97, 114, 111,
110, 0, 2, 121, 0, 0, 90, 100, 111, 116, 0, 1, 101, 114, 111, 87,
105, 100, 116, 104, 83, 112, 97, 99, 101, 0, 2, 116, 97, 0, 1, 102,
114, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 0, 97, 97, 99,
117, 116, 101, 0, 1, 98, 114, 101, 118, 101, 0, 0, 97, 99, 0, 2,
69, 0, 2, 100, 0, 2, 105, 114, 99, 0, 2, 117, 116, 101, 0, 2,
121, 0, 1, 101, 108, 105, 103, 0, 1, 102, 0, 0, 97, 102, 114, 0,
1, 103, 114, 97, 118, 101, 0, 1, 108, 101, 102, 115, 121, 109, 0, 3,
112, 104, 0, 2, 112, 104, 97, 0, 1, 109, 97, 99, 114, 0, 3, 108,
103, 0, 2, 112, 0, 0, 97, 110, 100, 0, 3, 97, 110, 100, 0, 3,
100, 0, 3, 115, 108, 111, 112, 101, 0, 3, 118, 0, 2, 103, 0, 3,
101, 0, 3, 108, 101, 0, 0, 97, 110, 103, 109, 115, 100, 0, 6, 97,
97, 0, 7, 98, 0, 7, 99, 0, 7, 100, 0, 7, 101, 0, 7, 102,
0, 7, 103, 0, 0, 97, 110, 103, 109, 115, 100, 97, 104, 0, 3, 114,
116, 0, 5, 118, 98, 0, 7, 100, 0, 3, 115, 112, 104, 0, 4, 116,
0, 3, 122, 97, 114, 114, 0, 1, 111, 103, 111, 110, 0, 0, 97, 111,
112, 102, 0, 1, 112, 0, 2, 69, 0, 2, 97, 99, 105, 114, 0, 2,
101, 0, 2, 105, 100, 0, 2, 111, 115, 0, 2, 112, 114, 111, 120, 0,
0, 97, 112, 112, 114, 111, 120, 101, 113, 0, 1, 114, 105, 110, 103, 0,
1, 115, 99, 114, 0, 2, 116, 0, 2, 121, 109, 112, 0, 5, 101, 113,
0, 1, 116, 105, 108, 100, 101, 0, 1, 117, 109, 108, 0, 0, 97, 119,
99, 111, 110, 105, 110, 116, 0, 2, 105, 110, 116, 0, 0, 98, 78, 111,
116, 0, 1, 97, 99, 107, 99, 111, 110, 103, 0, 4, 101, 112, 115, 105,
108, 111, 110, 0, 4, 112, 114, 105, 109, 101, 0, 4, 115, 105, 109, 0,
7, 101, 113, 0, 0, 98, 97, 114, 118, 101, 101, 0, 3, 119, 101, 100,
0, 6, 103, 101, 0, 1, 98, 114, 107, 0, 4, 116, 98, 114, 107, 0,
1, 99, 111, 110, 103, 0, 2, 121, 0, 1, 100, 113, 117, 111, 0, 0,
98, 101, 99, 97, 117, 115, 0, 6, 101, 0, 2, 109, 112, 116, 121, 118,
0, 2, 112, 115, 105, 0, 2, 114, 110, 111, 117, 0, 2, 116, 97, 0,
3, 104, 0, 3, 119, 101, 101, 110, 0, 0, 98, 102, 114, 0, 1, 105,
103, 99, 97, 112, 0, 4, 105, 114, 99, 0, 4, 117, 112, 0, 3, 111,
100, 111, 116, 0, 4, 112, 108, 117, 115, 0, 4, 116, 105, 109, 101, 115,
0, 3, 115, 113, 99, 117, 112, 0, 0, 98, 105, 103, 115, 116, 97, 114,
0, 3, 116, 114, 105, 97, 110, 103, 108, 101, 100, 111, 119, 110, 0, 11,
117, 112, 0, 3, 117, 112, 108, 117, 115, 0, 3, 118, 101, 101, 0, 3,
119, 101, 100, 103, 101, 0, 1, 107, 97, 114, 111, 119, 0, 1, 108, 97,
99, 107, 108, 111, 122, 101, 110, 103, 101, 0, 0, 98, 108, 97, 99, 107,
115, 113, 117, 97, 114, 101, 0, 5, 116, 114, 105, 97, 110, 103, 108, 101,
0, 13, 100, 111, 119, 110, 0, 13, 108, 101, 102, 116, 0, 13, 114, 105,
103, 104, 116, 0, 3, 110, 107, 0, 2, 107, 49, 50, 0, 4, 52, 0,
0, 98, 108, 107, 51, 52, 0, 2, 111, 99, 107, 0, 1, 110, 101, 0,
3, 113, 117, 105, 118, 0, 2, 111, 116, 0, 1, 111, 112, 102, 0, 2,
116, 0, 3, 116, 111, 109, 0, 0, 98, 111, 119, 116, 105, 101, 0, 2,
120, 68, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3, 72, 0,
4, 68, 0, 4, 85, 0, 0, 98, 111, 120, 72, 100, 0, 4, 117, 0,
3, 85, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3, 86, 0,
4, 72, 0, 0, 98, 111, 120, 86, 76, 0, 4, 82, 0, 4, 104, 0,
4, 108, 0, 4, 114, 0, 3, 98, 111, 120, 0, 3, 100, 76, 0, 4,
82, 0, 0, 98, 111, 120, 100, 108, 0, 4, 114, 0, 3, 104, 0, 4,
68, 0, 4, 85, 0, 4, 100, 0, 4, 117, 0, 3, 109, 105, 110, 117,
115, 0, 0, 98, 111, 120, 112, 108, 117, 115, 0, 3, 116, 105, 109, 101,
115, 0, 3, 117, 76, 0, 4, 82, 0, 4, 108, 0, 4, 114, 0, 3,
118, 0, 4, 72, 0, 0, 98, 111, 120, 118, 76, 0, 4, 82, 0, 4,
104, 0, 4, 108, 0, 4, 114, 0, 1, 112, 114, 105, 109, 101, 0, 1,
114, 101, 118, 101, 0, 2, 118, 98, 97, 114, 0, 0, 98, 115, 99, 114,
0, 2, 101, 109, 105, 0, 2, 105, 109, 0, 4, 101, 0, 2, 111, 108,
0, 4, 98, 0, 4, 104, 115, 117, 98, 0, 1, 117, 108, 108, 0, 0,
98, 117, 108, 108, 101, 116, 0, 2, 109, 112, 0, 4, 69, 0, 4, 101,
0, 5, 113, 0, 0, 99, 97, 99, 117, 116, 101, 0, 2, 112, 0, 3,
97, 110, 100, 0, 0, 99, 97, 112, 98, 114, 99, 117, 112, 0, 3, 99,
97, 112, 0, 4, 117, 112, 0, 3, 100, 111, 116, 0, 3, 115, 0, 2,
114, 101, 116, 0, 3, 111, 110, 0, 1, 99, 97, 112, 115, 0, 0, 99,
99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 2, 105, 114, 99,
0, 2, 117, 112, 115, 0, 5, 115, 109, 0, 1, 100, 111, 116, 0, 1,
101, 100, 105, 108, 0, 2, 109, 112, 116, 121, 118, 0, 0, 99, 101, 110,
116, 0, 4, 101, 114, 100, 111, 116, 0, 1, 102, 114, 0, 1, 104, 99,
121, 0, 2, 101, 99, 107, 0, 5, 109, 97, 114, 107, 0, 2, 105, 0,
1, 105, 114, 0, 0, 99, 105, 114, 69, 0, 3, 99, 0, 4, 101, 113,
0, 4, 108, 101, 97, 114, 114, 111, 119, 108, 101, 102, 116, 0, 11, 114,
105, 103, 104, 116, 0, 6, 100, 82, 0, 7, 83, 0, 7, 97, 115, 116,
0, 0, 99, 105, 114, 99, 108, 101, 100, 99, 105, 114, 99, 0, 7, 100,
97, 115, 104, 0, 3, 101, 0, 3, 102, 110, 105, 110, 116, 0, 3, 109,
105, 100, 0, 3, 115, 99, 105, 114, 0, 1, 108, 117, 98, 115, 0, 5,
117, 105, 116, 0, 0, 99, 111, 108, 111, 110, 0, 5, 101, 0, 6, 113,
0, 2, 109, 109, 97, 0, 5, 116, 0, 3, 112, 0, 4, 102, 110, 0,
4, 108, 101, 109, 101, 110, 116, 0, 0, 99, 111, 109, 112, 108, 101, 120,
101, 115, 0, 2, 110, 103, 0, 4, 100, 111, 116, 0, 3, 105, 110, 116,
0, 2, 112, 102, 0, 3, 114, 111, 100, 0, 3, 121, 0, 4, 115, 114,
0, 0, 99, 114, 97, 114, 114, 0, 2, 111, 115, 115, 0, 1, 115, 99,
114, 0, 2, 117, 98, 0, 4, 101, 0, 3, 112, 0, 4, 101, 0, 1,
116, 100, 111, 116, 0, 0, 99, 117, 100, 97, 114, 114, 108, 0, 6, 114,
0, 2, 101, 112, 114, 0, 3, 115, 99, 0, 2, 108, 97, 114, 114, 0,
6, 112, 0, 2, 112, 0, 3, 98, 114, 99, 97, 112, 0, 0, 99, 117,
112, 99, 97, 112, 0, 4, 117, 112, 0, 3, 100, 111, 116, 0, 3, 111,
114, 0, 3, 115, 0, 2, 114, 97, 114, 114, 0, 6, 109, 0, 3, 108,
121, 101, 113, 112, 114, 101, 99, 0, 0, 99, 117, 114, 108, 121, 101, 113,
115, 117, 99, 99, 0, 5, 118, 101, 101, 0, 5, 119, 101, 100, 103, 101,
0, 3, 114, 101, 110, 0, 3, 118, 101, 97, 114, 114, 111, 119, 108, 101,
102, 116, 0, 10, 114, 105, 103, 104, 116, 0, 2, 118, 101, 101, 0, 2,
119, 101, 100, 0, 0, 99, 119, 99, 111, 110, 105, 110, 116, 0, 2, 105,
110, 116, 0, 1, 121, 108, 99, 116, 121, 0, 0, 100, 65, 114, 114, 0,
1, 72, 97, 114, 0, 1, 97, 103, 103, 101, 114, 0, 2, 108, 101, 116,
104, 0, 2, 114, 114, 0, 0, 100, 97, 115, 104, 0, 4, 118, 0, 1,
98, 107, 97, 114, 111, 119, 0, 2, 108, 97, 99, 0, 1, 99, 97, 114,
111, 110, 0, 2, 121, 0, 1, 100, 0, 2, 97, 103, 103, 101, 114, 0,
0, 100, 100, 97, 114, 114, 0, 2, 111, 116, 115, 101, 113, 0, 1, 101,
103, 0, 2, 108, 116, 97, 0, 2, 109, 112, 116, 121, 118, 0, 1, 102,
105, 115, 104, 116, 0, 2, 114, 0, 1, 104, 97, 114, 108, 0, 0, 100,
104, 97, 114, 114, 0, 1, 105, 97, 109, 0, 4, 111, 110, 100, 0, 7,
115, 117, 105, 116, 0, 4, 115, 0, 2, 101, 0, 2, 103, 97, 109, 109,
97, 0, 2, 115, 105, 110, 0, 0, 100, 105, 118, 0, 3, 105, 100, 101,
0, 6, 111, 110, 116, 105, 109, 101, 115, 0, 3, 111, 110, 120, 0, 1,
106, 99, 121, 0, 1, 108, 99, 111, 114, 110, 0, 3, 114, 111, 112, 0,
1, 111, 108, 108, 97, 114, 0, 0, 100, 111, 112, 102, 0, 2, 116, 0,
3, 101, 113, 0, 5, 100, 111, 116, 0, 3, 109, 105, 110, 117, 115, 0,
3, 112, 108, 117, 115, 0, 3, 115, 113, 117, 97, 114, 101, 0, 2, 117,
98, 108, 101, 98, 97, 114, 119, 101, 100, 103, 101, 0, 0, 100, 111, 119,
110, 97, 114, 114, 111, 119, 0, 4, 100, 111, 119, 110, 97, 114, 114, 111,
119, 115, 0, 4, 104, 97, 114, 112, 111, 111, 110, 108, 101, 102, 116, 0,
11, 114, 105, 103, 104, 116, 0, 1, 114, 98, 107, 97, 114, 111, 119, 0,
2, 99, 111, 114, 110, 0, 3, 114, 111, 112, 0, 1, 115, 99, 114, 0,
0, 100, 115, 99, 121, 0, 2, 111, 108, 0, 2, 116, 114, 111, 107, 0,
1, 116, 100, 111, 116, 0, 2, 114, 105, 0, 4, 102, 0, 1, 117, 97,
114, 114, 0, 2, 104, 97, 114, 0, 0, 100, 119, 97, 110, 103, 108, 101,
0, 1, 122, 99, 121, 0, 2, 105, 103, 114, 97, 114, 114, 0, 0, 101,
68, 68, 111, 116, 0, 2, 111, 116, 0, 1, 97, 99, 117, 116, 101, 0,
2, 115, 116, 101, 114, 0, 1, 99, 97, 114, 111, 110, 0, 0, 101, 99,
105, 114, 0, 4, 99, 0, 2, 111, 108, 111, 110, 0, 2, 121, 0, 1,
100, 111, 116, 0, 1, 101, 0, 1, 102, 68, 111, 116, 0, 2, 114, 0,
0, 101, 103, 0, 2, 114, 97, 118, 101, 0, 2, 115, 0, 3, 100, 111,
116, 0, 1, 108, 0, 2, 105, 110, 116, 101, 114, 115, 0, 2, 108, 0,
2, 115, 0, 0, 101, 108, 115, 100, 111, 116, 0, 1, 109, 97, 99, 114,
0, 2, 112, 116, 121, 0, 5, 115, 101, 116, 0, 5, 118, 0, 2, 115,
112, 0, 4, 49, 51, 0, 5, 52, 0, 0, 101, 110, 103, 0, 2, 115,
112, 0, 1, 111, 103, 111, 110, 0, 2, 112, 102, 0, 1, 112, 97, 114,
0, 4, 115, 108, 0, 2, 108, 117, 115, 0, 2, 115, 105, 0, 0, 101,
112, 115, 105, 108, 111, 110, 0, 4, 118, 0, 1, 113, 99, 105, 114, 99,
0, 3, 111, 108, 111, 110, 0, 2, 115, 105, 109, 0, 3, 108, 97, 110,
116, 103, 116, 114, 0, 7, 108, 101, 115, 115, 0, 2, 117, 97, 108, 115,
0, 0, 101, 113, 117, 101, 115, 116, 0, 3, 105, 118, 0, 5, 68, 68,
0, 2, 118, 112, 97, 114, 115, 108, 0, 1, 114, 68, 111, 116, 0, 2,
97, 114, 114, 0, 1, 115, 99, 114, 0, 2, 100, 111, 116, 0, 0, 101,
115, 105, 109, 0, 1, 116, 97, 0, 2, 104, 0, 1, 117, 109, 108, 0,
2, 114, 111, 0, 1, 120, 99, 108, 0, 2, 105, 115, 116, 0, 2, 112,
101, 99, 116, 97, 116, 105, 111, 110, 0, 0, 101, 120, 112, 111, 110, 101,
110, 116, 105, 97, 108, 101, 0, 0, 102, 97, 108, 108, 105, 110, 103, 100,
111, 116, 115, 101, 113, 0, 1, 99, 121, 0, 1, 101, 109, 97, 108, 101,
0, 1, 102, 105, 108, 105, 103, 0, 2, 108, 105, 103, 0, 3, 108, 105,
103, 0, 2, 114, 0, 0, 102, 105, 108, 105, 103, 0, 1, 106, 108, 105,
103, 0, 1, 108, 97, 116, 0, 2, 108, 105, 103, 0, 2, 116, 110, 115,
0, 1, 110, 111, 102, 0, 1, 111, 112, 102, 0, 2, 114, 97, 108, 108,
0, 0, 102, 111, 114, 107, 0, 4, 118, 0, 1, 112, 97, 114, 116, 105,
110, 116, 0, 1, 114, 97, 99, 49, 50, 0, 5, 51, 0, 5, 52, 0,
5, 53, 0, 5, 54, 0, 0, 102, 114, 97, 99, 49, 56, 0, 4, 50,
51, 0, 5, 53, 0, 4, 51, 52, 0, 5, 53, 0, 5, 56, 0, 4,
52, 53, 0, 4, 53, 54, 0, 0, 102, 114, 97, 99, 53, 56, 0, 4,
55, 56, 0, 3, 115, 108, 0, 2, 111, 119, 110, 0, 1, 115, 99, 114,
0, 0, 103, 69, 0, 2, 108, 0, 1, 97, 99, 117, 116, 101, 0, 0,
103, 97, 109, 109, 97, 0, 5, 100, 0, 2, 112, 0, 1, 98, 114, 101,
118, 101, 0, 1, 99, 105, 114, 99, 0, 2, 121, 0, 1, 100, 111, 116,
0, 1, 101, 0, 0, 103, 101, 108, 0, 2, 113, 0, 3, 113, 0, 3,
115, 108, 97, 110, 116, 0, 2, 115, 0, 3, 99, 99, 0, 3, 100, 111,
116, 0, 6, 111, 0, 0, 103, 101, 115, 100, 111, 116, 111, 108, 0, 3,
108, 0, 4, 101, 115, 0, 1, 102, 114, 0, 1, 103, 0, 2, 103, 0,
1, 105, 109, 101, 108, 0, 1, 106, 99, 121, 0, 0, 103, 108, 0, 2,
69, 0, 2, 97, 0, 2, 106, 0, 1, 110, 69, 0, 2, 97, 112, 0,
4, 112, 114, 111, 120, 0, 2, 101, 0, 0, 103, 110, 101, 113, 0, 4,
113, 0, 2, 115, 105, 109, 0, 1, 111, 112, 102, 0, 1, 114, 97, 118,
101, 0, 1, 115, 99, 114, 0, 2, 105, 109, 0, 4, 101, 0, 0, 103,
115, 105, 109, 108, 0, 1, 116, 0, 2, 99, 99, 0, 3, 105, 114, 0,
2, 100, 111, 116, 0, 2, 108, 80, 97, 114, 0, 2, 113, 117, 101, 115,
116, 0, 2, 114, 97, 112, 112, 114, 111, 120, 0, 0, 103, 116, 114, 97,
114, 114, 0, 3, 100, 111, 116, 0, 3, 101, 113, 108, 101, 115, 115, 0,
5, 113, 108, 101, 115, 115, 0, 3, 108, 101, 115, 115, 0, 3, 115, 105,
109, 0, 1, 118, 101, 114, 116, 110, 101, 113, 113, 0, 2, 110, 69, 0,
0, 104, 65, 114, 114, 0, 1, 97, 105, 114, 115, 112, 0, 2, 108, 102,
0, 2, 109, 105, 108, 116, 0, 2, 114, 100, 99, 121, 0, 3, 114, 0,
4, 99, 105, 114, 0, 4, 119, 0, 0, 104, 98, 97, 114, 0, 1, 99,
105, 114, 99, 0, 1, 101, 97, 114, 116, 115, 0, 6, 117, 105, 116, 0,
2, 108, 108, 105, 112, 0, 2, 114, 99, 111, 110, 0, 1, 102, 114, 0,
1, 107, 115, 101, 97, 114, 111, 119, 0, 0, 104, 107, 115, 119, 97, 114,
111, 119, 0, 1, 111, 97, 114, 114, 0, 2, 109, 116, 104, 116, 0, 2,
111, 107, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0, 4, 114, 105, 103,
104, 116, 97, 114, 114, 111, 119, 0, 2, 112, 102, 0, 2, 114, 98, 97,
114, 0, 1, 115, 99, 114, 0, 0, 104, 115, 108, 97, 115, 104, 0, 2,
116, 114, 111, 107, 0, 1, 121, 98, 117, 108, 108, 0, 2, 112, 104, 101,
110, 0, 0, 105, 97, 99, 117, 116, 101, 0, 1, 99, 0, 2, 105, 114,
99, 0, 2, 121, 0, 0, 105, 101, 99, 121, 0, 2, 120, 99, 108, 0,
1, 102, 102, 0, 2, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 105,
0, 2, 105, 105, 110, 116, 0, 3, 110, 116, 0, 0, 105, 105, 110, 102,
105, 110, 0, 2, 111, 116, 97, 0, 1, 106, 108, 105, 103, 0, 1, 109,
97, 99, 114, 0, 3, 103, 101, 0, 4, 108, 105, 110, 101, 0, 4, 112,
97, 114, 116, 0, 3, 116, 104, 0, 0, 105, 109, 111, 102, 0, 2, 112,
101, 100, 0, 1, 110, 0, 2, 99, 97, 114, 101, 0, 2, 102, 105, 110,
0, 5, 116, 105, 101, 0, 2, 111, 100, 111, 116, 0, 2, 116, 0, 0,
105, 110, 116, 99, 97, 108, 0, 3, 101, 103, 101, 114, 115, 0, 4, 114,
99, 97, 108, 0, 3, 108, 97, 114, 104, 107, 0, 3, 112, 114, 111, 100,
0, 1, 111, 99, 121, 0, 2, 103, 111, 110, 0, 2, 112, 102, 0, 0,
105, 111, 116, 97, 0, 1, 112, 114, 111, 100, 0, 1, 113, 117, 101, 115,
116, 0, 1, 115, 99, 114, 0, 2, 105, 110, 0, 4, 69, 0, 4, 100,
111, 116, 0, 4, 115, 0, 0, 105, 115, 105, 110, 115, 118, 0, 4, 118,
0, 1, 116, 0, 2, 105, 108, 100, 101, 0, 1, 117, 107, 99, 121, 0,
2, 109, 108, 0, 0, 106, 99, 105, 114, 99, 0, 2, 121, 0, 0, 106,
102, 114, 0, 1, 109, 97, 116, 104, 0, 1, 111, 112, 102, 0, 1, 115,
99, 114, 0, 2, 101, 114, 99, 121, 0, 1, 117, 107, 99, 121, 0, 0,
107, 97, 112, 112, 97, 0, 5, 118, 0, 0, 107, 99, 101, 100, 105, 108,
0, 2, 121, 0, 1, 102, 114, 0, 1, 103, 114, 101, 101, 110, 0, 1,
104, 99, 121, 0, 1, 106, 99, 121, 0, 1, 111, 112, 102, 0, 1, 115,
99, 114, 0, 0, 108, 65, 97, 114, 114, 0, 2, 114, 114, 0, 2, 116,
97, 105, 108, 0, 1, 66, 97, 114, 114, 0, 1, 69, 0, 2, 103, 0,
1, 72, 97, 114, 0, 1, 97, 99, 117, 116, 101, 0, 0, 108, 97, 101,
109, 112, 116, 121, 118, 0, 2, 103, 114, 97, 110, 0, 2, 109, 98, 100,
97, 0, 2, 110, 103, 0, 4, 100, 0, 4, 108, 101, 0, 2, 112, 0,
2, 113, 117, 111, 0, 0, 108, 97, 114, 114, 0, 4, 98, 0, 5, 102,
115, 0, 4, 102, 115, 0, 4, 104, 107, 0, 4, 108, 112, 0, 4, 112,
108, 0, 4, 115, 105, 109, 0, 0, 108, 97, 114, 114, 116, 108, 0, 2,
116, 0, 3, 97, 105, 108, 0, 3, 101, 0, 4, 115, 0, 1, 98, 97,
114, 114, 0, 2, 98, 114, 107, 0, 2, 114, 97, 99, 101, 0, 0, 108,
98, 114, 97, 99, 107, 0, 3, 107, 101, 0, 4, 115, 108, 100, 0, 6,
117, 0, 1, 99, 97, 114, 111, 110, 0, 2, 101, 100, 105, 108, 0, 3,
105, 108, 0, 2, 117, 98, 0, 0, 108, 99, 121, 0, 1, 100, 99, 97,
0, 2, 113, 117, 111, 0, 5, 114, 0, 2, 114, 100, 104, 97, 114, 0,
3, 117, 115, 104, 97, 114, 0, 2, 115, 104, 0, 1, 101, 0, 0, 108,
101, 102, 116, 97, 114, 114, 111, 119, 0, 9, 116, 97, 105, 108, 0, 4,
104, 97, 114, 112, 111, 111, 110, 100, 111, 119, 110, 0, 11, 117, 112, 0,
4, 108, 101, 102, 116, 97, 114, 114, 111, 119, 115, 0, 4, 114, 105, 103,
104, 116, 97, 114, 114, 111, 119, 0, 14, 115, 0, 9, 104, 97, 114, 112,
111, 111, 110, 115, 0, 0, 108, 101, 102, 116, 114, 105, 103, 104, 116, 115,
113, 117, 105, 103, 97, 114, 114, 111, 119, 0, 4, 116, 104, 114, 101, 101,
116, 105, 109, 101, 115, 0, 2, 103, 0, 2, 113, 0, 3, 113, 0, 3,
115, 108, 97, 110, 116, 0, 2, 115, 0, 3, 99, 99, 0, 0, 108, 101,
115, 100, 111, 116, 0, 6, 111, 0, 7, 114, 0, 3, 103, 0, 4, 101,
115, 0, 3, 115, 97, 112, 112, 114, 111, 120, 0, 4, 100, 111, 116, 0,
4, 101, 113, 103, 116, 114, 0, 0, 108, 101, 115, 115, 101, 113, 113, 103,
116, 114, 0, 4, 103, 116, 114, 0, 4, 115, 105, 109, 0, 1, 102, 105,
115, 104, 116, 0, 2, 108, 111, 111, 114, 0, 2, 114, 0, 1, 103, 0,
2, 69, 0, 0, 108, 104, 97, 114, 100, 0, 4, 117, 0, 5, 108, 0,
2, 98, 108, 107, 0, 1, 106, 99, 121, 0, 1, 108, 0, 2, 97, 114,
114, 0, 2, 99, 111, 114, 110, 101, 114, 0, 0, 108, 108, 104, 97, 114,
100, 0, 2, 116, 114, 105, 0, 1, 109, 105, 100, 111, 116, 0, 2, 111,
117, 115, 116, 0, 6, 97, 99, 104, 101, 0, 1, 110, 69, 0, 2, 97,
112, 0, 4, 112, 114, 111, 120, 0, 0, 108, 110, 101, 0, 3, 113, 0,
4, 113, 0, 2, 115, 105, 109, 0, 1, 111, 97, 110, 103, 0, 3, 114,
114, 0, 2, 98, 114, 107, 0, 2, 110, 103, 108, 101, 102, 116, 97, 114,
114, 111, 119, 0, 0, 108, 111, 110, 103, 108, 101, 102, 116, 114, 105, 103,
104, 116, 97, 114, 114, 111, 119, 0, 4, 109, 97, 112, 115, 116, 111, 0,
4, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 111, 112, 97,
114, 114, 111, 119, 108, 101, 102, 116, 0, 9, 114, 105, 103, 104, 116, 0,
2, 112, 97, 114, 0, 3, 102, 0, 3, 108, 117, 115, 0, 0, 108, 111,
116, 105, 109, 101, 115, 0, 2, 119, 97, 115, 116, 0, 3, 98, 97, 114,
0, 2, 122, 0, 3, 101, 110, 103, 101, 0, 3, 102, 0, 1, 112, 97,
114, 0, 4, 108, 116, 0, 0, 108, 114, 97, 114, 114, 0, 2, 99, 111,
114, 110, 101, 114, 0, 2, 104, 97, 114, 0, 5, 100, 0, 2, 109, 0,
2, 116, 114, 105, 0, 1, 115, 97, 113, 117, 111, 0, 2, 99, 114, 0,
0, 108, 115, 104, 0, 2, 105, 109, 0, 4, 101, 0, 4, 103, 0, 2,
113, 98, 0, 3, 117, 111, 0, 5, 114, 0, 2, 116, 114, 111, 107, 0,
0, 108, 116, 0, 2, 99, 99, 0, 3, 105, 114, 0, 2, 100, 111, 116,
0, 2, 104, 114, 101, 101, 0, 2, 105, 109, 101, 115, 0, 2, 108, 97,
114, 114, 0, 2, 113, 117, 101, 115, 116, 0, 0, 108, 116, 114, 80, 97,
114, 0, 3, 105, 0, 4, 101, 0, 4, 102, 0, 1, 117, 114, 100, 115,
104, 97, 114, 0, 3, 117, 104, 97, 114, 0, 1, 118, 101, 114, 116, 110,
101, 113, 113, 0, 2, 110, 69, 0, 0, 109, 68, 68, 111, 116, 0, 1,
97, 99, 114, 0, 2, 108, 101, 0, 3, 116, 0, 4, 101, 115, 101, 0,
2, 112, 0, 3, 115, 116, 111, 0, 6, 100, 111, 119, 110, 0, 0, 109,
97, 112, 115, 116, 111, 108, 101, 102, 116, 0, 6, 117, 112, 0, 2, 114,
107, 101, 114, 0, 1, 99, 111, 109, 109, 97, 0, 2, 121, 0, 1, 100,
97, 115, 104, 0, 1, 101, 97, 115, 117, 114, 101, 100, 97, 110, 103, 108,
101, 0, 1, 102, 114, 0, 0, 109, 104, 111, 0, 1, 105, 99, 114, 111,
0, 2, 100, 0, 3, 97, 115, 116, 0, 3, 99, 105, 114, 0, 3, 100,
111, 116, 0, 2, 110, 117, 115, 0, 5, 98, 0, 0, 109, 105, 110, 117,
115, 100, 0, 6, 117, 0, 1, 108, 99, 112, 0, 2, 100, 114, 0, 1,
110, 112, 108, 117, 115, 0, 1, 111, 100, 101, 108, 115, 0, 2, 112, 102,
0, 1, 112, 0, 0, 109, 115, 99, 114, 0, 2, 116, 112, 111, 115, 0,
1, 117, 0, 2, 108, 116, 105, 109, 97, 112, 0, 2, 109, 97, 112, 0,
0, 110, 71, 103, 0, 2, 116, 0, 3, 118, 0, 0, 110, 76, 101, 102,
116, 97, 114, 114, 111, 119, 0, 5, 114, 105, 103, 104, 116, 97, 114, 114,
111, 119, 0, 2, 108, 0, 2, 116, 0, 3, 118, 0, 1, 82, 105, 103,
104, 116, 97, 114, 114, 111, 119, 0, 1, 86, 68, 97, 115, 104, 0, 2,
100, 97, 115, 104, 0, 0, 110, 97, 98, 108, 97, 0, 2, 99, 117, 116,
101, 0, 2, 110, 103, 0, 2, 112, 0, 3, 69, 0, 3, 105, 100, 0,
3, 111, 115, 0, 3, 112, 114, 111, 120, 0, 0, 110, 97, 116, 117, 114,
0, 5, 97, 108, 0, 7, 115, 0, 1, 98, 115, 112, 0, 2, 117, 109,
112, 0, 5, 101, 0, 1, 99, 97, 112, 0, 3, 114, 111, 110, 0, 0,
110, 99, 101, 100, 105, 108, 0, 2, 111, 110, 103, 0, 5, 100, 111, 116,
0, 2, 117, 112, 0, 2, 121, 0, 1, 100, 97, 115, 104, 0, 1, 101,
0, 2, 65, 114, 114, 0, 0, 110, 101, 97, 114, 104, 107, 0, 4, 114,
0, 5, 111, 119, 0, 2, 100, 111, 116, 0, 2, 113, 117, 105, 118, 0,
2, 115, 101, 97, 114, 0, 3, 105, 109, 0, 2, 120, 105, 115, 116, 0,
0, 110, 101, 120, 105, 115, 116, 115, 0, 1, 102, 114, 0, 1, 103, 69,
0, 2, 101, 0, 3, 113, 0, 4, 113, 0, 4, 115, 108, 97, 110, 116,
0, 3, 115, 0, 0, 110, 103, 115, 105, 109, 0, 2, 116, 0, 3, 114,
0, 1, 104, 65, 114, 114, 0, 2, 97, 114, 114, 0, 2, 112, 97, 114,
0, 1, 105, 0, 2, 115, 0, 0, 110, 105, 115, 100, 0, 2, 118, 0,
1, 106, 99, 121, 0, 1, 108, 65, 114, 114, 0, 2, 69, 0, 2, 97,
114, 114, 0, 2, 100, 114, 0, 2, 101, 0, 0, 110, 108, 101, 102, 116,
97, 114, 114, 111, 119, 0, 5, 114, 105, 103, 104, 116, 97, 114, 114, 111,
119, 0, 3, 113, 0, 4, 113, 0, 4, 115, 108, 97, 110, 116, 0, 3,
115, 0, 4, 115, 0, 2, 115, 105, 109, 0, 0, 110, 108, 116, 0, 3,
114, 105, 0, 5, 101, 0, 1, 109, 105, 100, 0, 1, 111, 112, 102, 0,
2, 116, 0, 3, 105, 110, 0, 5, 69, 0, 0, 110, 111, 116, 105, 110,
100, 111, 116, 0, 5, 118, 97, 0, 6, 98, 0, 6, 99, 0, 3, 110,
105, 0, 5, 118, 97, 0, 6, 98, 0, 6, 99, 0, 0, 110, 112, 97,
114, 0, 4, 97, 108, 108, 101, 108, 0, 4, 115, 108, 0, 4, 116, 0,
2, 111, 108, 105, 110, 116, 0, 2, 114, 0, 3, 99, 117, 101, 0, 3,
101, 0, 0, 110, 112, 114, 101, 99, 0, 5, 101, 113, 0, 1, 114, 65,
114, 114, 0, 2, 97, 114, 114, 0, 5, 99, 0, 5, 119, 0, 2, 105,
103, 104, 116, 97, 114, 114, 111, 119, 0, 2, 116, 114, 105, 0, 0, 110,
114, 116, 114, 105, 101, 0, 1, 115, 99, 0, 3, 99, 117, 101, 0, 3,
101, 0, 3, 114, 0, 2, 104, 111, 114, 116, 109, 105, 100, 0, 6, 112,
97, 114, 97, 108, 108, 101, 108, 0, 2, 105, 109, 0, 0, 110, 115, 105,
109, 101, 0, 5, 113, 0, 2, 109, 105, 100, 0, 2, 112, 97, 114, 0,
2, 113, 115, 117, 98, 101, 0, 5, 112, 101, 0, 2, 117, 98, 0, 4,
69, 0, 0, 110, 115, 117, 98, 101, 0, 4, 115, 101, 116, 0, 7, 101,
113, 0, 9, 113, 0, 3, 99, 99, 0, 5, 101, 113, 0, 3, 112, 0,
4, 69, 0, 0, 110, 115, 117, 112, 101, 0, 4, 115, 101, 116, 0, 7,
101, 113, 0, 9, 113, 0, 1, 116, 103, 108, 0, 2, 105, 108, 100, 101,
0, 2, 108, 103, 0, 2, 114, 105, 97, 110, 103, 108, 101, 108, 101, 102,
116, 0, 0, 110, 116, 114, 105, 97, 110, 103, 108, 101, 108, 101, 102, 116,
101, 113, 0, 9, 114, 105, 103, 104, 116, 0, 14, 101, 113, 0, 1, 117,
0, 2, 109, 0, 3, 101, 114, 111, 0, 3, 115, 112, 0, 1, 118, 68,
97, 115, 104, 0, 0, 110, 118, 72, 97, 114, 114, 0, 2, 97, 112, 0,
2, 100, 97, 115, 104, 0, 2, 103, 101, 0, 3, 116, 0, 2, 105, 110,
102, 105, 110, 0, 2, 108, 65, 114, 114, 0, 3, 101, 0, 0, 110, 118,
108, 116, 0, 4, 114, 105, 101, 0, 2, 114, 65, 114, 114, 0, 3, 116,
114, 105, 101, 0, 2, 115, 105, 109, 0, 1, 119, 65, 114, 114, 0, 2,
97, 114, 104, 107, 0, 4, 114, 0, 0, 110, 119, 97, 114, 114, 111, 119,
0, 2, 110, 101, 97, 114, 0, 0, 111, 83, 0, 1, 97, 99, 117, 116,
101, 0, 2, 115, 116, 0, 1, 99, 105, 114, 0, 4, 99, 0, 2, 121,
0, 0, 111, 100, 97, 115, 104, 0, 2, 98, 108, 97, 99, 0, 2, 105,
118, 0, 2, 111, 116, 0, 2, 115, 111, 108, 100, 0, 1, 101, 108, 105,
103, 0, 1, 102, 99, 105, 114, 0, 2, 114, 0, 0, 111, 103, 111, 110,
0, 2, 114, 97, 118, 101, 0, 2, 116, 0, 1, 104, 98, 97, 114, 0,
2, 109, 0, 1, 105, 110, 116, 0, 1, 108, 97, 114, 114, 0, 2, 99,
105, 114, 0, 0, 111, 108, 99, 114, 111, 115, 115, 0, 2, 105, 110, 101,
0, 2, 116, 0, 1, 109, 97, 99, 114, 0, 2, 101, 103, 97, 0, 2,
105, 99, 114, 111, 110, 0, 3, 100, 0, 3, 110, 117, 115, 0, 0, 111,
111, 112, 102, 0, 1, 112, 97, 114, 0, 2, 101, 114, 112, 0, 2, 108,
117, 115, 0, 1, 114, 0, 2, 97, 114, 114, 0, 2, 100, 0, 3, 101,
114, 0, 0, 111, 114, 100, 101, 114, 111, 102, 0, 3, 102, 0, 3, 109,
0, 2, 105, 103, 111, 102, 0, 2, 111, 114, 0, 2, 115, 108, 111, 112,
101, 0, 2, 118, 0, 1, 115, 99, 114, 0, 0, 111, 115, 108, 97, 115,
104, 0, 2, 111, 108, 0, 1, 116, 105, 108, 100, 101, 0, 3, 109, 101,
115, 0, 6, 97, 115, 0, 1, 117, 109, 108, 0, 1, 118, 98, 97, 114,
0, 0, 112, 97, 114, 0, 0, 112, 97, 114, 97, 0, 4, 108, 108, 101,
108, 0, 3, 115, 105, 109, 0, 4, 108, 0, 3, 116, 0, 1, 99, 121,
0, 1, 101, 114, 99, 110, 116, 0, 3, 105, 111, 100, 0, 0, 112, 101,
114, 109, 105, 108, 0, 3, 112, 0, 3, 116, 101, 110, 107, 0, 1, 102,
114, 0, 1, 104, 105, 0, 3, 118, 0, 2, 109, 109, 97, 116, 0, 2,
111, 110, 101, 0, 0, 112, 105, 0, 2, 116, 99, 104, 102, 111, 114, 107,
0, 2, 118, 0, 1, 108, 97, 110, 99, 107, 0, 6, 104, 0, 4, 107,
118, 0, 2, 117, 115, 0, 4, 97, 99, 105, 114, 0, 0, 112, 108, 117,
115, 98, 0, 4, 99, 105, 114, 0, 4, 100, 111, 0, 5, 117, 0, 4,
101, 0, 4, 109, 110, 0, 4, 115, 105, 109, 0, 4, 116, 119, 111, 0,
0, 112, 109, 0, 1, 111, 105, 110, 116, 105, 110, 116, 0, 2, 112, 102,
0, 2, 117, 110, 100, 0, 1, 114, 0, 2, 69, 0, 2, 97, 112, 0,
2, 99, 117, 101, 0, 0, 112, 114, 101, 0, 3, 99, 0, 4, 97, 112,
112, 114, 111, 120, 0, 4, 99, 117, 114, 108, 121, 101, 113, 0, 4, 101,
113, 0, 4, 110, 97, 112, 112, 114, 111, 120, 0, 5, 101, 113, 113, 0,
5, 115, 105, 109, 0, 0, 112, 114, 101, 99, 115, 105, 109, 0, 2, 105,
109, 101, 0, 5, 115, 0, 2, 110, 69, 0, 3, 97, 112, 0, 3, 115,
105, 109, 0, 2, 111, 100, 0, 3, 102, 97, 108, 97, 114, 0, 0, 112,
114, 111, 102, 108, 105, 110, 101, 0, 4, 115, 117, 114, 102, 0, 3, 112,
0, 4, 116, 111, 0, 2, 115, 105, 109, 0, 2, 117, 114, 101, 108, 0,
1, 115, 99, 114, 0, 2, 105, 0, 0, 112, 117, 110, 99, 115, 112, 0,
0, 113, 102, 114, 0, 1, 105, 110, 116, 0, 1, 111, 112, 102, 0, 1,
112, 114, 105, 109, 101, 0, 1, 115, 99, 114, 0, 1, 117, 97, 116, 101,
114, 110, 105, 111, 110, 115, 0, 4, 105, 110, 116, 0, 0, 113, 117, 101,
115, 116, 0, 5, 101, 113, 0, 2, 111, 116, 0, 0, 114, 65, 97, 114,
114, 0, 2, 114, 114, 0, 2, 116, 97, 105, 108, 0, 1, 66, 97, 114,
114, 0, 1, 72, 97, 114, 0, 0, 114, 97, 99, 101, 0, 3, 117, 116,
101, 0, 2, 100, 105, 99, 0, 2, 101, 109, 112, 116, 121, 118, 0, 2,
110, 103, 0, 4, 100, 0, 4, 101, 0, 4, 108, 101, 0, 0, 114, 97,
113, 117, 111, 0, 2, 114, 114, 0, 4, 97, 112, 0, 4, 98, 0, 5,
102, 115, 0, 4, 99, 0, 4, 102, 115, 0, 4, 104, 107, 0, 0, 114,
97, 114, 114, 108, 112, 0, 4, 112, 108, 0, 4, 115, 105, 109, 0, 4,
116, 108, 0, 4, 119, 0, 2, 116, 97, 105, 108, 0, 3, 105, 111, 0,
5, 110, 97, 108, 115, 0, 0, 114, 98, 97, 114, 114, 0, 2, 98, 114,
107, 0, 2, 114, 97, 99, 101, 0, 5, 107, 0, 3, 107, 101, 0, 4,
115, 108, 100, 0, 6, 117, 0, 1, 99, 97, 114, 111, 110, 0, 0, 114,
99, 101, 100, 105, 108, 0, 3, 105, 108, 0, 2, 117, 98, 0, 2, 121,
0, 1, 100, 99, 97, 0, 2, 108, 100, 104, 97, 114, 0, 2, 113, 117,
111, 0, 5, 114, 0, 0, 114, 100, 115, 104, 0, 1, 101, 97, 108, 0,
4, 105, 110, 101, 0, 4, 112, 97, 114, 116, 0, 4, 115, 0, 2, 99,
116, 0, 2, 103, 0, 1, 102, 105, 115, 104, 116, 0, 0, 114, 102, 108,
111, 111, 114, 0, 2, 114, 0, 1, 104, 97, 114, 100, 0, 4, 117, 0,
5, 108, 0, 2, 111, 0, 3, 118, 0, 1, 105, 103, 104, 116, 97, 114,
114, 111, 119, 0, 0, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 116,
97, 105, 108, 0, 5, 104, 97, 114, 112, 111, 111, 110, 100, 111, 119, 110,
0, 12, 117, 112, 0, 5, 108, 101, 102, 116, 97, 114, 114, 111, 119, 115,
0, 9, 104, 97, 114, 112, 111, 111, 110, 115, 0, 5, 114, 105, 103, 104,
116, 97, 114, 114, 111, 119, 115, 0, 5, 115, 113, 117, 105, 103, 97, 114,
114, 111, 119, 0, 5, 116, 104, 114, 101, 101, 116, 105, 109, 101, 115, 0,
0, 114, 105, 110, 103, 0, 2, 115, 105, 110, 103, 100, 111, 116, 115, 101,
113, 0, 1, 108, 97, 114, 114, 0, 2, 104, 97, 114, 0, 2, 109, 0,
1, 109, 111, 117, 115, 116, 0, 6, 97, 99, 104, 101, 0, 1, 110, 109,
105, 100, 0, 0, 114, 111, 97, 110, 103, 0, 3, 114, 114, 0, 2, 98,
114, 107, 0, 2, 112, 97, 114, 0, 3, 102, 0, 3, 108, 117, 115, 0,
2, 116, 105, 109, 101, 115, 0, 1, 112, 97, 114, 0, 0, 114, 112, 97,
114, 103, 116, 0, 2, 112, 111, 108, 105, 110, 116, 0, 1, 114, 97, 114,
114, 0, 1, 115, 97, 113, 117, 111, 0, 2, 99, 114, 0, 2, 104, 0,
2, 113, 98, 0, 3, 117, 111, 0, 0, 114, 115, 113, 117, 111, 114, 0,
1, 116, 104, 114, 101, 101, 0, 2, 105, 109, 101, 115, 0, 2, 114, 105,
0, 4, 101, 0, 4, 102, 0, 4, 108, 116, 114, 105, 0, 1, 117, 108,
117, 104, 97, 114, 0, 0, 114, 120, 0, 0, 115, 97, 99, 117, 116, 101,
0, 1, 98, 113, 117, 111, 0, 1, 99, 0, 2, 69, 0, 2, 97, 112,
0, 3, 114, 111, 110, 0, 2, 99, 117, 101, 0, 0, 115, 99, 101, 0,
3, 100, 105, 108, 0, 2, 105, 114, 99, 0, 2, 110, 69, 0, 3, 97,
112, 0, 3, 115, 105, 109, 0, 2, 112, 111, 108, 105, 110, 116, 0, 2,
115, 105, 109, 0, 0, 115, 99, 121, 0, 1, 100, 111, 116, 0, 4, 98,
0, 4, 101, 0, 1, 101, 65, 114, 114, 0, 2, 97, 114, 104, 107, 0,
4, 114, 0, 5, 111, 119, 0, 0, 115, 101, 99, 116, 0, 2, 109, 105,
0, 2, 115, 119, 97, 114, 0, 2, 116, 109, 105, 110, 117, 115, 0, 4,
110, 0, 2, 120, 116, 0, 1, 102, 114, 0, 3, 111, 119, 110, 0, 0,
115, 104, 97, 114, 112, 0, 2, 99, 104, 99, 121, 0, 3, 121, 0, 2,
111, 114, 116, 109, 105, 100, 0, 5, 112, 97, 114, 97, 108, 108, 101, 108,
0, 2, 121, 0, 1, 105, 103, 109, 97, 0, 5, 102, 0, 0, 115, 105,
103, 109, 97, 118, 0, 2, 109, 0, 3, 100, 111, 116, 0, 3, 101, 0,
4, 113, 0, 3, 103, 0, 4, 69, 0, 3, 108, 0, 0, 115, 105, 109,
108, 69, 0, 3, 110, 101, 0, 3, 112, 108, 117, 115, 0, 3, 114, 97,
114, 114, 0, 1, 108, 97, 114, 114, 0, 1, 109, 97, 108, 108, 115, 101,
116, 109, 105, 110, 117, 115, 0, 3, 115, 104, 112, 0, 2, 101, 112, 97,
114, 115, 108, 0, 0, 115, 109, 105, 100, 0, 3, 108, 101, 0, 2, 116,
0, 3, 101, 0, 4, 115, 0, 1, 111, 102, 116, 99, 121, 0, 2, 108,
0, 3, 98, 0, 0, 115, 111, 108, 98, 97, 114, 0, 2, 112, 102, 0,
1, 112, 97, 100, 101, 115, 0, 6, 117, 105, 116, 0, 3, 114, 0, 1,
113, 99, 97, 112, 0, 5, 115, 0, 3, 117, 112, 0, 0, 115, 113, 99,
117, 112, 115, 0, 2, 115, 117, 98, 0, 5, 101, 0, 5, 115, 101, 116,
0, 8, 101, 113, 0, 4, 112, 0, 5, 101, 0, 5, 115, 101, 116, 0,
0, 115, 113, 115, 117, 112, 115, 101, 116, 101, 113, 0, 2, 117, 0, 3,
97, 114, 101, 0, 5, 102, 0, 3, 102, 0, 1, 114, 97, 114, 114, 0,
1, 115, 99, 114, 0, 2, 101, 116, 109, 110, 0, 0, 115, 115, 109, 105,
108, 101, 0, 2, 116, 97, 114, 102, 0, 1, 116, 97, 114, 0, 4, 102,
0, 2, 114, 97, 105, 103, 104, 116, 101, 112, 115, 105, 108, 111, 110, 0,
8, 112, 104, 105, 0, 3, 110, 115, 0, 1, 117, 98, 0, 0, 115, 117,
98, 69, 0, 3, 100, 111, 116, 0, 3, 101, 0, 4, 100, 111, 116, 0,
3, 109, 117, 108, 116, 0, 3, 110, 69, 0, 4, 101, 0, 3, 112, 108,
117, 115, 0, 0, 115, 117, 98, 114, 97, 114, 114, 0, 3, 115, 101, 116,
0, 6, 101, 113, 0, 8, 113, 0, 6, 110, 101, 113, 0, 9, 113, 0,
4, 105, 109, 0, 4, 117, 98, 0, 0, 115, 117, 98, 115, 117, 112, 0,
2, 99, 99, 0, 4, 97, 112, 112, 114, 111, 120, 0, 4, 99, 117, 114,
108, 121, 101, 113, 0, 4, 101, 113, 0, 4, 110, 97, 112, 112, 114, 111,
120, 0, 5, 101, 113, 113, 0, 5, 115, 105, 109, 0, 0, 115, 117, 99,
99, 115, 105, 109, 0, 2, 109, 0, 2, 110, 103, 0, 2, 112, 0, 3,
49, 0, 3, 50, 0, 3, 51, 0, 3, 69, 0, 0, 115, 117, 112, 100,
111, 116, 0, 4, 115, 117, 98, 0, 3, 101, 0, 4, 100, 111, 116, 0,
3, 104, 115, 111, 108, 0, 5, 117, 98, 0, 3, 108, 97, 114, 114, 0,
3, 109, 117, 108, 116, 0, 0, 115, 117, 112, 110, 69, 0, 4, 101, 0,
3, 112, 108, 117, 115, 0, 3, 115, 101, 116, 0, 6, 101, 113, 0, 8,
113, 0, 6, 110, 101, 113, 0, 9, 113, 0, 0, 115, 117, 112, 115, 105,
109, 0, 4, 117, 98, 0, 5, 112, 0, 1, 119, 65, 114, 114, 0, 2,
97, 114, 104, 107, 0, 4, 114, 0, 5, 111, 119, 0, 2, 110, 119, 97,
114, 0, 0, 115, 122, 108, 105, 103, 0, 0, 116, 97, 114, 103, 101, 116,
0, 2, 117, 0, 1, 98, 114, 107, 0, 1, 99, 97, 114, 111, 110, 0,
2, 101, 100, 105, 108, 0, 2, 121, 0, 1, 100, 111, 116, 0, 0, 116,
101, 108, 114, 101, 99, 0, 1, 102, 114, 0, 1, 104, 101, 114, 101, 52,
0, 5, 102, 111, 114, 101, 0, 3, 116, 97, 0, 5, 115, 121, 109, 0,
5, 118, 0, 2, 105, 99, 107, 97, 112, 112, 114, 111, 120, 0, 0, 116,
104, 105, 99, 107, 115, 105, 109, 0, 3, 110, 115, 112, 0, 2, 107, 97,
112, 0, 3, 115, 105, 109, 0, 2, 111, 114, 110, 0, 1, 105, 108, 100,
101, 0, 2, 109, 101, 115, 0, 5, 98, 0, 0, 116, 105, 109, 101, 115,
98, 97, 114, 0, 5, 100, 0, 2, 110, 116, 0, 1, 111, 101, 97, 0,
2, 112, 0, 3, 98, 111, 116, 0, 3, 99, 105, 114, 0, 3, 102, 0,
0, 116, 111, 112, 102, 111, 114, 107, 0, 2, 115, 97, 0, 1, 112, 114,
105, 109, 101, 0, 1, 114, 97, 100, 101, 0, 2, 105, 97, 110, 103, 108,
101, 0, 8, 100, 111, 119, 110, 0, 8, 108, 101, 102, 116, 0, 12, 101,
113, 0, 0, 116, 114, 105, 97, 110, 103, 108, 101, 113, 0, 8, 114, 105,
103, 104, 116, 0, 13, 101, 113, 0, 3, 100, 111, 116, 0, 3, 101, 0,
3, 109, 105, 110, 117, 115, 0, 3, 112, 108, 117, 115, 0, 3, 115, 98,
0, 0, 116, 114, 105, 116, 105, 109, 101, 0, 2, 112, 101, 122, 105, 117,
109, 0, 1, 115, 99, 114, 0, 3, 121, 0, 2, 104, 99, 121, 0, 2,
116, 114, 111, 107, 0, 1, 119, 105, 120, 116, 0, 2, 111, 104, 101, 97,
100, 108, 101, 102, 116, 97, 114, 114, 111, 119, 0, 0, 116, 119, 111, 104,
101, 97, 100, 114, 105, 103, 104, 116, 97, 114, 114, 111, 119, 0, 0, 117,
65, 114, 114, 0, 1, 72, 97, 114, 0, 1, 97, 99, 117, 116, 101, 0,
2, 114, 114, 0, 1, 98, 114, 99, 121, 0, 3, 101, 118, 101, 0, 1,
99, 105, 114, 99, 0, 0, 117, 99, 121, 0, 1, 100, 97, 114, 114, 0,
2, 98, 108, 97, 99, 0, 2, 104, 97, 114, 0, 1, 102, 105, 115, 104,
116, 0, 2, 114, 0, 1, 103, 114, 97, 118, 101, 0, 1, 104, 97, 114,
108, 0, 0, 117, 104, 97, 114, 114, 0, 2, 98, 108, 107, 0, 1, 108,
99, 111, 114, 110, 0, 6, 101, 114, 0, 3, 114, 111, 112, 0, 2, 116,
114, 105, 0, 1, 109, 97, 99, 114, 0, 2, 108, 0, 0, 117, 111, 103,
111, 110, 0, 2, 112, 102, 0, 1, 112, 97, 114, 114, 111, 119, 0, 2,
100, 111, 119, 110, 97, 114, 114, 111, 119, 0, 2, 104, 97, 114, 112, 111,
111, 110, 108, 101, 102, 116, 0, 9, 114, 105, 103, 104, 116, 0, 2, 108,
117, 115, 0, 2, 115, 105, 0, 0, 117, 112, 115, 105, 104, 0, 4, 108,
111, 110, 0, 2, 117, 112, 97, 114, 114, 111, 119, 115, 0, 1, 114, 99,
111, 114, 110, 0, 6, 101, 114, 0, 3, 114, 111, 112, 0, 2, 105, 110,
103, 0, 2, 116, 114, 105, 0, 0, 117, 115, 99, 114, 0, 1, 116, 100,
111, 116, 0, 2, 105, 108, 100, 101, 0, 2, 114, 105, 0, 4, 102, 0,
1, 117, 97, 114, 114, 0, 2, 109, 108, 0, 1, 119, 97, 110, 103, 108,
101, 0, 0, 118, 65, 114, 114, 0, 1, 66, 97, 114, 0, 4, 118, 0,
1, 68, 97, 115, 104, 0, 1, 97, 110, 103, 114, 116, 0, 2, 114, 101,
112, 115, 105, 108, 111, 110, 0, 3, 107, 97, 112, 112, 97, 0, 3, 110,
111, 116, 104, 105, 110, 103, 0, 0, 118, 97, 114, 112, 104, 105, 0, 4,
105, 0, 4, 114, 111, 112, 116, 111, 0, 3, 114, 0, 4, 104, 111, 0,
3, 115, 105, 103, 109, 97, 0, 4, 117, 98, 115, 101, 116, 110, 101, 113,
0, 12, 113, 0, 0, 118, 97, 114, 115, 117, 112, 115, 101, 116, 110, 101,
113, 0, 12, 113, 0, 3, 116, 104, 101, 116, 97, 0, 4, 114, 105, 97,
110, 103, 108, 101, 108, 101, 102, 116, 0, 11, 114, 105, 103, 104, 116, 0,
1, 99, 121, 0, 1, 100, 97, 115, 104, 0, 1, 101, 101, 0, 0, 118,
101, 101, 98, 97, 114, 0, 3, 101, 113, 0, 2, 108, 108, 105, 112, 0,
2, 114, 98, 97, 114, 0, 3, 116, 0, 1, 102, 114, 0, 1, 108, 116,
114, 105, 0, 1, 110, 115, 117, 98, 0, 0, 118, 110, 115, 117, 112, 0,
1, 111, 112, 102, 0, 1, 112, 114, 111, 112, 0, 1, 114, 116, 114, 105,
0, 1, 115, 99, 114, 0, 2, 117, 98, 110, 69, 0, 5, 101, 0, 3,
112, 110, 69, 0, 0, 118, 115, 117, 112, 110, 101, 0, 1, 122, 105, 103,
122, 97, 103, 0, 0, 119, 99, 105, 114, 99, 0, 1, 101, 100, 98, 97,
114, 0, 3, 103, 101, 0, 5, 113, 0, 2, 105, 101, 114, 112, 0, 1,
102, 114, 0, 0, 119, 111, 112, 102, 0, 1, 112, 0, 1, 114, 0, 2,
101, 97, 116, 104, 0, 1, 115, 99, 114, 0, 0, 120, 99, 97, 112, 0,
2, 105, 114, 99, 0, 2, 117, 112, 0, 0, 120, 100, 116, 114, 105, 0,
1, 102, 114, 0, 1, 104, 65, 114, 114, 0, 2, 97, 114, 114, 0, 1,
105, 0, 1, 108, 65, 114, 114, 0, 2, 97, 114, 114, 0, 1, 109, 97,
112, 0, 0, 120, 110, 105, 115, 0, 1, 111, 100, 111, 116, 0, 2, 112,
102, 0, 3, 108, 117, 115, 0, 2, 116, 105, 109, 101, 0, 1, 114, 65,
114, 114, 0, 2, 97, 114, 114, 0, 1, 115, 99, 114, 0, 0, 120, 115,
113, 99, 117, 112, 0, 1, 117, 112, 108, 117, 115, 0, 2, 116, 114, 105,
0, 1, 118, 101, 101, 0, 1, 119, 101, 100, 103, 101, 0, 0, 121, 97,
99, 117, 116, 101, 0, 3, 121, 0, 1, 99, 105, 114, 99, 0, 0, 121,
99, 121, 0, 1, 101, 110, 0, 1, 102, 114, 0, 1, 105, 99, 121, 0,
1, 111, 112, 102, 0, 1, 115, 99, 114, 0, 1, 117, 99, 121, 0, 2,
109, 108, 0, 0, 122, 97, 99, 117, 116, 101, 0, 1, 99, 97, 114, 111,
110, 0, 2, 121, 0, 1, 100, 111, 116, 0, 1, 101, 101, 116, 114, 102,
0, 2, 116, 97, 0, 1, 102, 114, 0, 1, 104, 99, 121, 0, 0, 122,
105, 103, 114, 97, 114, 114, 0, 1, 111, 112, 102, 0, 1, 115, 99, 114,
0, 1, 119, 106, 0, 2, 110, 106, 0
]
const table_groups: array[266, uint16] = [
0, 45, 97, 149, 198, 258, 314, 403, 483, 529, 580, 650, 737, 834, 921, 978,
1021, 1093, 1152, 1222, 1262, 1319, 1376, 1443, 1492, 1539, 1600, 1641, 1684, 1730, 1796, 1873,
1949, 2034, 2101, 2198, 2246, 2294, 2390, 2452, 2530, 2614, 2703, 2793, 2861, 2938, 2992, 3055,
3110, 3164, 3230, 3275, 3316, 3381, 3463, 3526, 3604, 3666, 3708, 3784, 3848, 3904, 3952, 3990,
4054, 4105, 4155, 4214, 4291, 4351, 4389, 4452, 4495, 4538, 4581, 4635, 4667, 4709, 4742, 4772,
4813, 4848, 4893, 4948, 4991, 5033, 5080, 5146, 5200, 5239, 5270, 5299, 5330, 5362, 5397, 5435,
5471, 5508, 5550, 5596, 5636, 5681, 5732, 5768, 5809, 5845, 5885, 5928, 5988, 6038, 6080, 6126,
6167, 6215, 6268, 6336, 6376, 6429, 6464, 6499, 6537, 6574, 6625, 6670, 6713, 6773, 6817, 6854,
6887, 6927, 6964, 6997, 7035, 7065, 7102, 7147, 7200, 7240, 7289, 7351, 7397, 7435, 7480, 7519,
7567, 7606, 7646, 7689, 7731, 7772, 7813, 7847, 7886, 7927, 7966, 8037, 8093, 8135, 8179, 8218,
8264, 8308, 8381, 8422, 8464, 8496, 8538, 8584, 8622, 8678, 8715, 8756, 8795, 8853, 8890, 8927,
8966, 9008, 9044, 9079, 9114, 9162, 9194, 9228, 9266, 9310, 9356, 9394, 9427, 9474, 9524, 9565,
9608, 9649, 9691, 9731, 9774, 9810, 9850, 9894, 9933, 9972, 10012, 10048, 10085, 10133, 10174, 10216,
10268, 10311, 10349, 10382, 10422, 10462, 10501, 10540, 10580, 10672, 10723, 10764, 10808, 10853, 10891, 10932,
10967, 11007, 11053, 11084, 11140, 11172, 11212, 11248, 11291, 11341, 11379, 11416, 11468, 11499, 11542, 11578,
11618, 11662, 11710, 11754, 11792, 11842, 11889, 11947, 12005, 12050, 12092, 12151, 12199, 12242, 12295, 12340,
12398, 12441, 12484, 12531, 12569, 12610, 12653, 12702, 12739, 12782
]
const table_refs: array[2125, uint16] = [
32768, 32771, 32773, 8, 32779, 14, 17, 32789, 24, 27, 30, 33, 36, 40, 32811, 46,
50, 32821, 32824, 59, 62, 65, 68, 71, 74, 77, 80, 84, 88, 74, 91, 94,
32865, 100, 103, 106, 109, 112, 32883, 118, 121, 124, 127, 130, 109, 133, 136, 139,
142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178, 181, 184, 188,
191, 106, 194, 197, 200, 203, 206, 209, 212, 215, 218, 221, 224, 227, 231, 234,
237, 240, 242, 245, 248, 251, 255, 258, 261, 166, 255, 264, 267, 270, 212, 273,
276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312, 315, 318, 321,
324, 327, 330, 333, 264, 336, 340, 343, 33114, 33117, 352, 33123, 358, 361, 364, 33136,
371, 374, 377, 380, 383, 386, 390, 393, 396, 399, 402, 405, 408, 33179, 414, 417,
420, 423, 427, 430, 433, 437, 440, 440, 443, 33214, 448, 451, 454, 457, 460, 463,
466, 469, 473, 476, 480, 483, 486, 489, 492, 495, 498, 501, 505, 508, 511, 514,
516, 519, 522, 525, 528, 522, 531, 91, 534, 537, 540, 543, 33314, 33317, 552, 555,
558, 33329, 558, 564, 567, 282, 570, 573, 576, 579, 582, 585, 588, 592, 595, 598,
601, 33372, 607, 610, 613, 617, 621, 625, 628, 631, 634, 637, 640, 643, 646, 650,
654, 658, 33429, 663, 666, 669, 672, 675, 678, 681, 684, 687, 690, 693, 696, 699,
702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 732, 735, 738, 741, 744, 747,
750, 753, 756, 267, 270, 759, 762, 765, 768, 771, 774, 777, 781, 784, 787, 790,
793, 796, 273, 276, 279, 799, 803, 806, 672, 809, 812, 815, 818, 821, 824, 827,
830, 834, 837, 827, 841, 844, 847, 850, 853, 856, 859, 859, 859, 859, 505, 815,
862, 864, 868, 871, 874, 877, 880, 883, 886, 889, 892, 895, 900, 903, 906, 909,
914, 919, 922, 927, 930, 935, 940, 943, 948, 951, 954, 957, 960, 965, 970, 973,
978, 983, 986, 991, 994, 997, 1000, 1005, 1008, 1013, 1016, 1021, 1024, 1029, 1032, 1035,
1040, 1043, 1048, 1053, 1056, 1059, 1062, 1065, 1068, 1071, 33843, 1078, 1081, 33852, 33855, 1090,
1093, 1096, 33868, 1103, 1106, 1109, 1112, 1116, 1119, 1122, 1125, 33897, 33900, 1135, 33906, 1141,
1144, 1147, 1150, 1153, 1156, 1159, 1163, 1166, 1169, 519, 1172, 1175, 1178, 1181, 1184, 1187,
1190, 1193, 157, 1196, 1199, 1203, 33974, 1208, 1212, 1215, 1219, 33990, 1225, 1228, 1231, 1234,
1237, 1240, 1243, 1246, 1249, 1252, 1255, 1246, 1258, 1261, 1264, 1267, 1270, 1273, 1276, 1279,
1282, 1285, 1288, 1291, 1294, 1297, 1300, 1303, 1306, 1309, 1312, 1315, 1318, 1321, 1324, 282,
1327, 1330, 1333, 1336, 1339, 1342, 1345, 1348, 1351, 1354, 1357, 1360, 1363, 1366, 1369, 1372,
297, 690, 1264, 1376, 1379, 1382, 1385, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413,
1417, 1420, 1420, 1423, 1426, 1429, 1432, 1435, 1249, 1438, 1441, 1444, 1447, 1441, 34218, 1453,
1456, 1459, 1462, 1464, 1467, 1470, 1473, 1476, 1480, 1483, 1486, 1491, 1494, 1497, 1500, 1503,
1506, 1510, 1513, 1517, 34288, 1523, 1526, 1529, 1532, 34303, 1538, 1541, 1544, 34316, 1551, 1554,
1556, 1559, 1562, 1565, 1568, 1571, 1574, 1376, 1578, 1581, 1584, 1587, 1590, 1593, 288, 291,
1596, 1599, 1602, 1605, 1608, 1611, 1615, 34386, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1639,
1642, 1645, 1647, 1650, 1653, 1656, 1660, 1664, 1668, 1671, 1674, 1677, 1681, 1685, 1689, 1693,
1696, 1700, 1704, 1707, 1710, 34481, 1716, 1719, 1722, 1726, 1730, 1734, 1737, 1740, 1743, 1746,
1749, 859, 1752, 1755, 1758, 1761, 34533, 1768, 1771, 1774, 1779, 34550, 32999, 1785, 34556, 40,
1791, 34563, 1798, 1798, 1801, 1804, 1807, 32771, 1810, 1813, 1816, 1819, 1822, 1825, 1828, 1825,
1831, 1834, 1837, 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 43, 1870, 1873,
1876, 1503, 1880, 1883, 1886, 1889, 1892, 1503, 1886, 34662, 1897, 1901, 1503, 191, 34671, 34674,
178, 1909, 1912, 1915, 1918, 1921, 1924, 1927, 1930, 1933, 1933, 1559, 1936, 1915, 1939, 1942,
71, 71, 1945, 1918, 74, 1948, 1951, 1954, 1957, 576, 1961, 1565, 1964, 1967, 1970, 1973,
1976, 1979, 1982, 1985, 1636, 1674, 1988, 1991, 430, 1994, 1997, 2000, 2003, 2006, 2009, 2012,
2015, 2018, 2021, 2025, 2030, 2033, 1590, 1590, 2037, 2040, 2043, 2046, 2049, 2052, 2055, 2058,
2061, 2064, 2067, 2070, 2073, 2076, 2079, 2082, 2085, 2088, 2091, 2094, 2097, 2100, 2103, 2106,
2109, 2112, 528, 2115, 2118, 2121, 2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151,
2154, 2157, 2160, 2163, 2166, 1921, 88, 34937, 2172, 2176, 1924, 1927, 2179, 2181, 2184, 2187,
2187, 91, 2190, 534, 534, 2193, 2196, 2199, 2202, 2205, 2208, 2211, 2214, 2220, 511, 2223,
2226, 34997, 2232, 2235, 2238, 2241, 32895, 2244, 35015, 130, 2250, 2254, 2257, 2257, 2260, 2263,
2266, 2269, 2272, 2275, 2278, 1222, 2281, 2284, 2287, 2290, 2272, 2293, 2296, 2299, 2302, 2302,
2305, 50, 50, 2307, 2309, 2311, 1382, 2311, 172, 1500, 2314, 169, 2317, 175, 32865, 2321,
2324, 2327, 2330, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355, 2358, 2361, 2364, 2367, 2370,
2373, 2376, 2379, 2382, 2385, 2391, 2394, 2355, 2358, 2397, 2400, 35171, 2361, 2391, 2397, 2400,
148, 2406, 2409, 264, 2412, 2415, 2418, 297, 2421, 723, 2424, 237, 2427, 2430, 248, 206,
2433, 2436, 35207, 2442, 2445, 2448, 2451, 708, 1282, 245, 245, 2455, 2455, 255, 2458, 2461,
2464, 35232, 2467, 2467, 2470, 2473, 2476, 2479, 2481, 234, 261, 2485, 2488, 2491, 2494, 65,
297, 2433, 708, 1282, 1219, 2497, 2500, 2503, 2507, 2510, 2513, 2516, 2519, 1997, 303, 1255,
2522, 2525, 2528, 2436, 2485, 35299, 2534, 2537, 2540, 35311, 2546, 2549, 2552, 417, 2555, 2558,
2562, 35333, 2568, 2571, 2574, 2577, 2580, 2583, 2586, 2589, 2592, 2592, 2592, 2595, 2598, 2601,
2604, 2607, 2610, 2613, 2617, 2620, 2623, 2626, 2626, 2629, 2540, 2546, 396, 2568, 2583, 2632,
2634, 163, 2637, 2640, 2643, 2646, 2649, 261, 396, 2652, 35423, 35426, 2661, 2664, 414, 402,
417, 2555, 2666, 2669, 2672, 2676, 2680, 2684, 2688, 2692, 2695, 2698, 2702, 2705, 2708, 437,
2712, 2715, 2718, 35489, 2724, 35495, 2730, 2733, 2736, 2739, 2742, 35513, 2748, 2751, 2754, 2757,
2760, 2763, 2766, 2769, 2772, 486, 2776, 2779, 2782, 2458, 2785, 2788, 2791, 2794, 2797, 480,
483, 480, 486, 495, 495, 2800, 2803, 2806, 2809, 2812, 2818, 2821, 505, 473, 2825, 2828,
492, 2831, 2834, 2837, 2840, 2843, 2843, 2846, 2846, 2840, 2849, 2852, 240, 2856, 498, 2859,
2862, 33214, 2865, 2868, 2871, 2874, 2877, 2785, 2880, 2871, 483, 2776, 492, 498, 2883, 2883,
270, 1653, 2721, 522, 2889, 717, 2892, 2895, 2898, 2901, 2904, 2904, 2907, 2910, 2913, 2917,
2920, 2923, 2926, 2929, 2932, 2935, 2939, 2942, 2898, 2946, 2949, 2421, 35720, 579, 35723, 2958,
2961, 35732, 270, 2967, 35739, 567, 2974, 2977, 2980, 2983, 2986, 2989, 558, 595, 558, 2992,
2995, 2998, 371, 3001, 3004, 3007, 2992, 573, 3010, 1758, 3010, 3013, 3016, 3019, 3022, 3025,
3029, 3016, 35800, 3035, 371, 3039, 3042, 3045, 3048, 371, 582, 3051, 3054, 35825, 3060, 3063,
3066, 3070, 3073, 3077, 3081, 3084, 3087, 3090, 3093, 3096, 3099, 3103, 3106, 3109, 3112, 3116,
784, 267, 3120, 3123, 762, 3126, 3129, 3132, 3135, 672, 3138, 687, 3141, 687, 3144, 35915,
690, 693, 3150, 3153, 2929, 3156, 3159, 3162, 3165, 3168, 3171, 3174, 3177, 3183, 3186, 3189,
3191, 3193, 3196, 3199, 3202, 3205, 699, 3189, 3208, 3211, 1116, 1942, 3214, 3217, 3220, 3223,
690, 3165, 315, 753, 3226, 717, 696, 1252, 2895, 3229, 759, 3223, 762, 771, 771, 3232,
3235, 3238, 3241, 3244, 3250, 3144, 3253, 759, 3126, 765, 774, 3256, 714, 3259, 765, 3263,
315, 753, 3266, 3269, 3272, 815, 3226, 2473, 3275, 3278, 3281, 3284, 3284, 3287, 3290, 3290,
3293, 3293, 3287, 3296, 3299, 3302, 702, 790, 793, 3305, 796, 3156, 3308, 3311, 3314, 3318,
3321, 3324, 1554, 3327, 3327, 1991, 3330, 3332, 696, 2497, 1252, 3335, 3338, 3341, 3344, 3347,
809, 774, 3351, 3354, 3191, 1119, 3357, 3360, 33429, 3363, 3366, 3253, 3229, 3369, 3372, 3375,
3378, 3381, 738, 2000, 3384, 3387, 3390, 3390, 3396, 36167, 3402, 3405, 3405, 1294, 1294, 333,
726, 1593, 3408, 3411, 3414, 3417, 1831, 3420, 3424, 36195, 1642, 1901, 3430, 32898, 3433, 2127,
2488, 3436, 3439, 2907, 834, 3442, 3445, 834, 3449, 1771, 3453, 3456, 3456, 3459, 3464, 914,
3469, 3472, 3475, 3480, 960, 3485, 3488, 3491, 221, 3494, 3497, 1065, 3502, 3507, 3512, 1065,
3515, 3515, 874, 33639, 930, 935, 3518, 3521, 3524, 1062, 3527, 3532, 3535, 3538, 892, 3541,
3544, 1599, 1599, 3547, 880, 3552, 895, 900, 900, 3555, 909, 906, 906, 909, 922, 922,
927, 903, 903, 3472, 3559, 3562, 1249, 3565, 3568, 1249, 3571, 3469, 3574, 3579, 3582, 954,
3579, 3559, 954, 3574, 965, 965, 951, 970, 951, 940, 948, 1068, 3585, 36357, 889, 3592,
3597, 889, 3602, 3605, 994, 994, 3608, 3611, 886, 886, 3614, 3619, 3624, 983, 991, 986,
983, 986, 3485, 3627, 3630, 3635, 3627, 997, 1005, 1032, 1040, 1035, 3640, 1068, 886, 1056,
1059, 1059, 1068, 886, 1013, 1021, 3644, 3647, 1029, 1024, 1029, 3647, 1032, 1035, 3652, 3655,
1053, 1048, 1053, 3655, 919, 36428, 957, 940, 948, 997, 1005, 3663, 3666, 3668, 3671, 3674,
3677, 3680, 3685, 3688, 3693, 3697, 3700, 3703, 3708, 3712, 3717, 3720, 3725, 3730, 3733, 1596,
1596, 3736, 2281, 36507, 2284, 2287, 36510, 3745, 2290, 3748, 3751, 136, 3754, 3757, 3760, 3763,
3767, 36538, 3773, 3776, 1106, 169, 2275, 3779, 3782, 1141, 3785, 3788, 3791, 3794, 3797, 139,
3800, 3804, 3807, 142, 3810, 2278, 3813, 3816, 3816, 36587, 36590, 3825, 3828, 3831, 3834, 3816,
36605, 3840, 36611, 145, 3846, 36617, 3852, 294, 36623, 294, 3858, 3861, 1153, 3864, 3867, 3869,
3871, 1590, 3874, 3877, 3881, 3884, 827, 3887, 3890, 2712, 3893, 2898, 3896, 2898, 3899, 3901,
2130, 3904, 2491, 3907, 3910, 33937, 3913, 3916, 1169, 3919, 3922, 36694, 1178, 3929, 3932, 1184,
1181, 1178, 3932, 1184, 1181, 3935, 3938, 3941, 1187, 3944, 1172, 3938, 3935, 3941, 1193, 3947,
3950, 3953, 1196, 1196, 1187, 3956, 3959, 3963, 3966, 3969, 2974, 3973, 3977, 3980, 525, 3984,
3987, 2634, 33974, 1333, 282, 3989, 2424, 3992, 3995, 4000, 1389, 4003, 1261, 4006, 4009, 1261,
36780, 1264, 4015, 1267, 4018, 4021, 4024, 2932, 3308, 4027, 4030, 4033, 4036, 4039, 4042, 1212,
1988, 4045, 4048, 4050, 4052, 4055, 4058, 4061, 4064, 1273, 4048, 4067, 4070, 4073, 151, 151,
4076, 1246, 1336, 1246, 1327, 4079, 33990, 4082, 1288, 4085, 324, 1321, 4089, 4092, 4095, 1264,
4033, 324, 1321, 1270, 399, 4098, 4036, 4101, 4104, 2643, 1270, 399, 4107, 4110, 4110, 4113,
4116, 4119, 1276, 4122, 4125, 4129, 4132, 4135, 4137, 4140, 4098, 4143, 4146, 1339, 4050, 154,
154, 4101, 4150, 4153, 1306, 2003, 4156, 4159, 4162, 4165, 3357, 1426, 4168, 4171, 4174, 1432,
1429, 4177, 4180, 4183, 4186, 4189, 4192, 1435, 4195, 4198, 2494, 4201, 4204, 2917, 806, 806,
36975, 4210, 4212, 59, 59, 4215, 4218, 2769, 4222, 4225, 4228, 1642, 294, 36999, 4234, 4237,
4237, 1494, 4240, 1497, 1497, 4243, 4246, 4249, 4252, 4255, 4258, 4261, 690, 59, 4264, 4267,
1642, 4270, 4273, 4276, 4279, 4285, 4288, 4290, 4293, 4296, 4300, 4300, 294, 1395, 4303, 1410,
4309, 1398, 1401, 1398, 1401, 1404, 1407, 1404, 1407, 1392, 1392, 430, 430, 1264, 4315, 59,
4270, 1417, 4319, 1976, 2629, 3884, 3399, 4322, 4325, 4328, 1423, 4331, 4334, 4337, 4340, 4343,
4346, 4322, 1423, 4325, 4340, 4337, 4349, 4352, 4355, 1426, 4171, 1432, 1429, 4186, 4183, 4189,
1435, 1438, 4358, 1444, 37129, 37132, 37135, 4370, 4373, 4376, 1447, 4379, 4382, 4385, 4388, 4391,
4394, 4397, 4400, 1444, 1447, 4370, 4397, 4394, 4403, 4406, 4409, 4412, 2920, 803, 803, 4415,
37186, 4421, 4424, 1147, 4427, 4430, 4433, 1510, 4436, 4439, 1480, 1480, 4443, 4446, 4446, 1503,
1494, 1491, 1503, 1494, 37217, 242, 37220, 2133, 4455, 4458, 2977, 3552, 330, 4461, 4464, 4467,
4471, 4212, 4474, 1453, 4477, 2519, 3381, 738, 4480, 4153, 1306, 4483, 4480, 4486, 4489, 4492,
4495, 4498, 4501, 4505, 4508, 4511, 1954, 675, 1231, 288, 4514, 37285, 1376, 4520, 4523, 37294,
4529, 1581, 4532, 1587, 4535, 4538, 37310, 747, 1315, 4545, 4548, 4548, 4551, 4554, 4557, 33023,
4560, 4563, 1376, 1584, 747, 1315, 1568, 4567, 1602, 4567, 4570, 4573, 4573, 4576, 4579, 4582,
4585, 4589, 4592, 4477, 1994, 4570, 37363, 4598, 291, 4601, 4604, 285, 4607, 2629, 3090, 2592,
3884, 3893, 1196, 1584, 4095, 4237, 4610, 4616, 4622, 4628, 4446, 732, 1300, 4634, 1291, 3810,
4637, 4640, 4643, 1645, 1645, 4646, 732, 1024, 1048, 4650, 1196, 1300, 4654, 4616, 4610, 4628,
4622, 4658, 4661, 4664, 1810, 4667, 4670, 4673, 4677, 4670, 1650, 1650, 4681, 576, 1961, 1565,
1979, 4685, 276, 793, 4689, 273, 790, 3305, 4692, 1964, 4695, 1967, 1970, 279, 796, 4699,
1973, 1985, 1982, 1636, 1674, 37471, 4706, 4709, 4712, 37483, 4718, 4722, 4725, 4729, 4733, 37504,
4739, 4742, 4745, 4748, 1755, 4751, 4754, 4758, 4761, 4764, 4768, 4772, 4775
]
const table_values: array[4778, byte] = [
198, 1, 0, 38, 0, 193, 1, 0, 130, 2, 0, 194, 1, 0, 144, 8,
0, 132, 170, 7, 0, 192, 1, 0, 145, 7, 0, 128, 2, 0, 211, 84,
0, 132, 2, 0, 184, 170, 7, 0, 225, 64, 0, 197, 1, 0, 156, 169,
7, 0, 212, 68, 0, 195, 1, 0, 196, 1, 0, 150, 68, 0, 231, 85,
0, 134, 70, 0, 145, 8, 0, 181, 68, 0, 172, 66, 0, 146, 7, 0,
133, 170, 7, 0, 185, 170, 7, 0, 216, 5, 0, 206, 68, 0, 167, 8,
0, 169, 1, 0, 134, 2, 0, 210, 69, 0, 197, 66, 0, 173, 66, 0,
140, 2, 0, 199, 1, 0, 136, 2, 0, 176, 68, 0, 138, 2, 0, 184,
1, 0, 183, 1, 0, 167, 7, 0, 153, 69, 0, 150, 69, 0, 149, 69,
0, 151, 69, 0, 178, 68, 0, 157, 64, 0, 153, 64, 0, 183, 68, 0,
244, 84, 0, 225, 68, 0, 175, 68, 0, 174, 68, 0, 130, 66, 0, 144,
68, 0, 179, 68, 0, 175, 84, 0, 158, 169, 7, 0, 211, 69, 0, 205,
68, 0, 145, 82, 0, 130, 8, 0, 133, 8, 0, 143, 8, 0, 161, 64,
0, 161, 67, 0, 228, 85, 0, 142, 2, 0, 148, 8, 0, 135, 68, 0,
148, 7, 0, 135, 170, 7, 0, 180, 1, 0, 217, 5, 0, 221, 5, 0,
96, 0, 220, 5, 0, 196, 69, 0, 198, 66, 0, 187, 170, 7, 0, 168,
1, 0, 220, 65, 0, 208, 68, 0, 211, 67, 0, 208, 67, 0, 212, 67,
0, 248, 79, 0, 250, 79, 0, 249, 79, 0, 210, 67, 0, 168, 69, 0,
209, 67, 0, 213, 67, 0, 165, 68, 0, 147, 67, 0, 147, 82, 0, 245,
67, 0, 145, 6, 0, 208, 82, 0, 222, 82, 0, 189, 67, 0, 214, 82,
0, 223, 82, 0, 193, 67, 0, 215, 82, 0, 164, 69, 0, 167, 67, 0,
159, 169, 7, 0, 144, 2, 0, 202, 2, 0, 208, 1, 0, 201, 1, 0,
154, 2, 0, 202, 1, 0, 173, 8, 0, 150, 2, 0, 136, 170, 7, 0,
200, 1, 0, 136, 68, 0, 146, 2, 0, 251, 75, 0, 171, 75, 0, 152,
2, 0, 188, 170, 7, 0, 149, 7, 0, 245, 84, 0, 194, 68, 0, 204,
67, 0, 176, 66, 0, 243, 84, 0, 151, 7, 0, 203, 1, 0, 131, 68,
0, 199, 66, 0, 164, 8, 0, 137, 170, 7, 0, 252, 75, 0, 170, 75,
0, 189, 170, 7, 0, 128, 68, 0, 177, 66, 0, 131, 8, 0, 62, 0,
147, 7, 0, 220, 7, 0, 158, 2, 0, 162, 2, 0, 156, 2, 0, 147,
8, 0, 160, 2, 0, 138, 170, 7, 0, 217, 69, 0, 190, 170, 7, 0,
229, 68, 0, 219, 69, 0, 231, 68, 0, 162, 85, 0, 247, 68, 0, 254,
84, 0, 243, 68, 0, 162, 169, 7, 0, 235, 68, 0, 170, 8, 0, 199,
5, 0, 94, 0, 164, 2, 0, 140, 66, 0, 139, 66, 0, 141, 66, 0,
128, 74, 0, 166, 2, 0, 207, 68, 0, 149, 8, 0, 178, 2, 0, 129,
8, 0, 205, 1, 0, 206, 1, 0, 152, 8, 0, 176, 2, 0, 145, 66,
0, 204, 1, 0, 170, 2, 0, 200, 66, 0, 172, 68, 0, 171, 68, 0,
194, 69, 0, 227, 64, 0, 226, 64, 0, 174, 2, 0, 192, 170, 7, 0,
153, 7, 0, 144, 66, 0, 168, 2, 0, 134, 8, 0, 207, 1, 0, 180,
2, 0, 153, 8, 0, 141, 170, 7, 0, 193, 170, 7, 0, 165, 169, 7,
0, 136, 8, 0, 132, 8, 0, 165, 8, 0, 140, 8, 0, 154, 7, 0,
182, 2, 0, 154, 8, 0, 142, 170, 7, 0, 194, 170, 7, 0, 166, 169,
7, 0, 137, 8, 0, 60, 0, 185, 2, 0, 155, 7, 0, 234, 79, 0,
146, 66, 0, 158, 67, 0, 189, 2, 0, 187, 2, 0, 155, 8, 0, 232,
79, 0, 144, 67, 0, 228, 67, 0, 198, 67, 0, 136, 70, 0, 230, 79,
0, 225, 82, 0, 195, 67, 0, 217, 82, 0, 138, 70, 0, 148, 67, 0,
206, 82, 0, 163, 69, 0, 164, 67, 0, 218, 82, 0, 178, 69, 0, 207,
83, 0, 180, 69, 0, 209, 82, 0, 224, 82, 0, 191, 67, 0, 216, 82,
0, 188, 67, 0, 210, 82, 0, 218, 69, 0, 230, 68, 0, 246, 68, 0,
161, 85, 0, 253, 84, 0, 242, 68, 0, 143, 170, 7, 0, 216, 69, 0,
218, 67, 0, 191, 2, 0, 245, 79, 0, 247, 79, 0, 246, 79, 0, 195,
170, 7, 0, 153, 67, 0, 152, 67, 0, 176, 67, 0, 193, 2, 0, 234,
68, 0, 133, 82, 0, 156, 8, 0, 223, 64, 0, 179, 66, 0, 144, 170,
7, 0, 147, 68, 0, 196, 170, 7, 0, 156, 7, 0, 138, 8, 0, 195,
2, 0, 199, 2, 0, 197, 2, 0, 157, 8, 0, 139, 64, 0, 10, 0,
145, 170, 7, 0, 224, 64, 0, 160, 1, 0, 149, 66, 0, 236, 85, 0,
226, 68, 0, 237, 68, 0, 166, 68, 0, 137, 68, 0, 224, 68, 0, 194,
68, 184, 6, 0, 132, 68, 0, 239, 68, 0, 241, 68, 0, 231, 68, 184,
6, 0, 235, 68, 184, 6, 0, 249, 68, 0, 254, 84, 184, 6, 0, 245,
68, 0, 206, 68, 184, 6, 0, 207, 68, 184, 6, 0, 234, 69, 0, 207,
83, 184, 6, 0, 236, 69, 0, 238, 68, 0, 240, 68, 0, 248, 68, 0,
234, 68, 184, 6, 0, 253, 84, 184, 6, 0, 244, 68, 0, 162, 85, 184,
6, 0, 161, 85, 184, 6, 0, 128, 69, 0, 175, 85, 184, 6, 0, 224,
69, 0, 140, 68, 0, 235, 69, 0, 208, 83, 184, 6, 0, 237, 69, 0,
143, 69, 184, 6, 0, 226, 69, 0, 144, 69, 184, 6, 0, 227, 69, 0,
130, 69, 210, 65, 0, 136, 69, 0, 129, 69, 0, 176, 85, 184, 6, 0,
225, 69, 0, 255, 68, 184, 6, 0, 131, 69, 210, 65, 0, 137, 69, 0,
193, 68, 0, 196, 68, 0, 199, 68, 0, 201, 68, 0, 164, 68, 0, 169,
169, 7, 0, 209, 1, 0, 157, 7, 0, 210, 2, 0, 211, 1, 0, 212,
1, 0, 158, 8, 0, 208, 2, 0, 146, 170, 7, 0, 210, 1, 0, 204,
2, 0, 169, 7, 0, 159, 7, 0, 198, 170, 7, 0, 156, 64, 0, 152,
64, 0, 212, 84, 0, 170, 169, 7, 0, 216, 1, 0, 213, 1, 0, 183,
84, 0, 214, 1, 0, 190, 64, 0, 222, 71, 0, 180, 71, 0, 220, 71,
0, 130, 68, 0, 159, 8, 0, 147, 170, 7, 0, 166, 7, 0, 160, 7,
0, 177, 1, 0, 153, 66, 0, 187, 85, 0, 250, 68, 0, 175, 85, 0,
252, 68, 0, 254, 68, 0, 179, 64, 0, 143, 68, 0, 157, 68, 0, 171,
169, 7, 0, 168, 7, 0, 34, 0, 148, 170, 7, 0, 154, 66, 0, 172,
169, 7, 0, 144, 82, 0, 174, 1, 0, 212, 2, 0, 235, 79, 0, 160,
67, 0, 150, 82, 0, 216, 2, 0, 214, 2, 0, 160, 8, 0, 156, 66,
0, 139, 68, 0, 203, 67, 0, 239, 82, 0, 161, 7, 0, 233, 79, 0,
146, 67, 0, 229, 67, 0, 196, 67, 0, 137, 70, 0, 231, 79, 0, 221,
82, 0, 194, 67, 0, 213, 82, 0, 139, 70, 0, 162, 69, 0, 166, 67,
0, 219, 82, 0, 179, 69, 0, 208, 83, 0, 181, 69, 0, 207, 82, 0,
220, 82, 0, 190, 67, 0, 212, 82, 0, 192, 67, 0, 211, 82, 0, 157,
66, 0, 240, 82, 0, 219, 67, 0, 155, 66, 0, 177, 67, 0, 244, 83,
0, 169, 8, 0, 168, 8, 0, 172, 8, 0, 218, 2, 0, 188, 85, 0,
224, 2, 0, 222, 2, 0, 220, 2, 0, 161, 8, 0, 150, 170, 7, 0,
145, 67, 0, 163, 7, 0, 152, 68, 0, 202, 170, 7, 0, 154, 68, 0,
161, 75, 0, 147, 69, 0, 143, 69, 0, 145, 69, 0, 144, 69, 0, 146,
69, 0, 148, 69, 0, 174, 169, 7, 0, 198, 69, 0, 208, 69, 0, 134,
69, 0, 251, 68, 0, 176, 85, 0, 253, 68, 0, 255, 68, 0, 145, 68,
0, 209, 69, 0, 131, 69, 0, 135, 69, 0, 222, 1, 0, 162, 66, 0,
139, 8, 0, 166, 8, 0, 9, 0, 164, 7, 0, 228, 2, 0, 226, 2,
0, 162, 8, 0, 151, 170, 7, 0, 180, 68, 0, 152, 7, 0, 223, 64,
138, 64, 0, 137, 64, 0, 188, 68, 0, 195, 68, 0, 197, 68, 0, 200,
68, 0, 203, 170, 7, 0, 219, 65, 0, 175, 169, 7, 0, 230, 2, 0,
218, 1, 0, 159, 67, 0, 201, 82, 0, 142, 8, 0, 236, 2, 0, 219,
1, 0, 163, 8, 0, 240, 2, 0, 152, 170, 7, 0, 217, 1, 0, 234,
2, 0, 95, 0, 223, 71, 0, 181, 71, 0, 221, 71, 0, 195, 69, 0,
142, 69, 0, 242, 2, 0, 204, 170, 7, 0, 146, 82, 0, 197, 67, 0,
149, 67, 0, 238, 82, 0, 165, 69, 0, 165, 67, 0, 150, 67, 0, 151,
67, 0, 210, 7, 0, 165, 7, 0, 238, 2, 0, 176, 169, 7, 0, 232,
2, 0, 220, 1, 0, 171, 69, 0, 235, 85, 0, 146, 8, 0, 169, 69,
0, 230, 85, 0, 193, 69, 0, 150, 64, 0, 163, 68, 0, 124, 0, 216,
78, 0, 192, 68, 0, 138, 64, 0, 153, 170, 7, 0, 205, 170, 7, 0,
177, 169, 7, 0, 170, 69, 0, 244, 2, 0, 192, 69, 0, 154, 170, 7,
0, 206, 170, 7, 0, 178, 169, 7, 0, 155, 170, 7, 0, 158, 7, 0,
207, 170, 7, 0, 179, 169, 7, 0, 175, 8, 0, 135, 8, 0, 174, 8,
0, 221, 1, 0, 246, 2, 0, 171, 8, 0, 156, 170, 7, 0, 208, 170,
7, 0, 180, 169, 7, 0, 248, 2, 0, 150, 8, 0, 249, 2, 0, 253,
2, 0, 151, 8, 0, 251, 2, 0, 150, 7, 0, 168, 66, 0, 164, 66,
0, 181, 169, 7, 0, 225, 1, 0, 131, 2, 0, 190, 68, 0, 190, 68,
179, 6, 0, 191, 68, 0, 226, 1, 0, 176, 8, 0, 230, 1, 0, 158,
170, 7, 0, 224, 1, 0, 181, 66, 0, 177, 7, 0, 129, 2, 0, 191,
84, 0, 167, 68, 0, 213, 84, 0, 220, 84, 0, 216, 84, 0, 218, 84,
0, 160, 68, 0, 164, 83, 0, 161, 68, 0, 168, 83, 0, 169, 83, 0,
170, 83, 0, 171, 83, 0, 172, 83, 0, 173, 83, 0, 174, 83, 0, 175,
83, 0, 159, 68, 0, 190, 69, 0, 157, 83, 0, 162, 68, 0, 252, 70,
0, 133, 2, 0, 210, 170, 7, 0, 240, 84, 0, 239, 84, 0, 202, 68,
0, 203, 68, 0, 39, 0, 229, 1, 0, 182, 169, 7, 0, 42, 0, 227,
1, 0, 228, 1, 0, 145, 84, 0, 237, 85, 0, 204, 68, 0, 246, 7,
0, 181, 64, 0, 189, 68, 0, 205, 69, 0, 189, 69, 0, 133, 70, 0,
182, 71, 0, 177, 8, 0, 158, 64, 0, 176, 83, 0, 178, 7, 0, 182,
66, 0, 236, 68, 0, 159, 170, 7, 0, 239, 75, 0, 128, 84, 0, 129,
84, 0, 130, 84, 0, 134, 84, 0, 133, 76, 0, 189, 75, 0, 179, 75,
0, 132, 84, 0, 141, 82, 0, 235, 83, 0, 180, 75, 0, 190, 75, 0,
194, 75, 0, 184, 75, 0, 163, 72, 0, 146, 75, 0, 145, 75, 0, 147,
75, 0, 136, 75, 0, 61, 229, 65, 0, 225, 68, 229, 65, 0, 144, 70,
0, 211, 170, 7, 0, 200, 69, 0, 215, 74, 0, 212, 74, 0, 214, 74,
0, 211, 74, 0, 208, 74, 0, 230, 74, 0, 233, 74, 0, 228, 74, 0,
231, 74, 0, 221, 74, 0, 218, 74, 0, 220, 74, 0, 217, 74, 0, 209,
74, 0, 236, 74, 0, 227, 74, 0, 224, 74, 0, 235, 74, 0, 226, 74,
0, 223, 74, 0, 201, 83, 0, 213, 74, 0, 210, 74, 0, 144, 74, 0,
140, 74, 0, 229, 74, 0, 232, 74, 0, 172, 74, 0, 180, 74, 0, 159,
69, 0, 158, 69, 0, 160, 69, 0, 219, 74, 0, 216, 74, 0, 152, 74,
0, 148, 74, 0, 130, 74, 0, 234, 74, 0, 225, 74, 0, 222, 74, 0,
188, 74, 0, 164, 74, 0, 156, 74, 0, 166, 1, 0, 183, 169, 7, 0,
207, 64, 0, 92, 0, 197, 83, 0, 200, 79, 0, 162, 64, 0, 174, 85,
0, 135, 2, 0, 169, 68, 0, 196, 84, 0, 201, 84, 0, 203, 84, 0,
199, 84, 0, 192, 84, 0, 169, 68, 128, 252, 3, 0, 193, 64, 0, 205,
84, 0, 141, 2, 0, 231, 1, 0, 137, 2, 0, 204, 84, 0, 208, 84,
0, 139, 2, 0, 178, 83, 0, 162, 1, 0, 160, 170, 7, 0, 199, 8,
0, 147, 78, 0, 199, 7, 0, 203, 75, 0, 195, 83, 0, 198, 5, 0,
215, 68, 0, 186, 67, 0, 187, 67, 0, 200, 73, 0, 155, 69, 0, 154,
69, 0, 157, 69, 0, 144, 84, 0, 239, 85, 0, 194, 83, 0, 227, 76,
0, 58, 0, 44, 0, 64, 0, 129, 68, 0, 237, 84, 0, 212, 170, 7,
0, 151, 66, 0, 181, 67, 0, 151, 78, 0, 184, 169, 7, 0, 207, 85,
0, 209, 85, 0, 208, 85, 0, 210, 85, 0, 239, 69, 0, 184, 82, 0,
181, 82, 0, 222, 69, 0, 223, 69, 0, 182, 67, 0, 189, 82, 0, 170,
68, 0, 200, 84, 0, 198, 84, 0, 202, 84, 0, 141, 69, 0, 197, 84,
0, 170, 68, 128, 252, 3, 0, 183, 67, 0, 188, 82, 0, 206, 69, 0,
207, 69, 0, 164, 1, 0, 177, 68, 0, 173, 70, 0, 229, 82, 0, 160,
64, 0, 184, 66, 0, 144, 64, 0, 143, 82, 0, 143, 2, 0, 180, 8,
0, 202, 67, 0, 247, 84, 0, 176, 1, 0, 180, 7, 0, 177, 83, 0,
255, 82, 0, 161, 170, 7, 0, 230, 76, 0, 221, 7, 0, 242, 69, 0,
247, 1, 0, 199, 69, 0, 210, 8, 0, 158, 70, 0, 141, 70, 0, 36,
0, 213, 170, 7, 0, 209, 68, 0, 184, 68, 0, 148, 68, 0, 161, 69,
0, 159, 70, 0, 140, 70, 0, 185, 169, 7, 0, 213, 8, 0, 246, 83,
0, 145, 2, 0, 241, 69, 0, 191, 75, 0, 166, 83, 0, 223, 8, 0,
255, 79, 0, 233, 1, 0, 238, 84, 0, 155, 2, 0, 214, 68, 0, 234,
1, 0, 213, 68, 0, 205, 8, 0, 151, 2, 0, 210, 68, 0, 162, 170,
7, 0, 154, 85, 0, 232, 1, 0, 150, 85, 0, 152, 85, 0, 153, 85,
0, 231, 71, 0, 147, 66, 0, 149, 85, 0, 151, 85, 0, 147, 2, 0,
133, 68, 0, 131, 64, 0, 132, 64, 0, 133, 64, 0, 203, 2, 0, 130,
64, 0, 153, 2, 0, 214, 170, 7, 0, 213, 69, 0, 227, 83, 0, 241,
84, 0, 181, 7, 0, 245, 7, 0, 61, 0, 223, 68, 0, 248, 84, 0,
229, 83, 0, 211, 68, 0, 241, 82, 0, 175, 66, 0, 183, 7, 0, 240,
1, 0, 235, 1, 0, 172, 65, 0, 33, 0, 196, 8, 0, 192, 76, 0,
131, 246, 3, 0, 128, 246, 3, 0, 132, 246, 3, 0, 163, 170, 7, 0,
129, 246, 3, 0, 102, 106, 0, 237, 76, 0, 130, 246, 3, 0, 177, 75,
0, 146, 3, 0, 215, 170, 7, 0, 212, 69, 0, 217, 85, 0, 141, 84,
0, 189, 1, 0, 211, 66, 0, 188, 1, 0, 213, 66, 0, 217, 66, 0,
219, 66, 0, 212, 66, 0, 214, 66, 0, 190, 1, 0, 215, 66, 0, 220,
66, 0, 216, 66, 0, 218, 66, 0, 221, 66, 0, 222, 66, 0, 196, 64,
0, 162, 70, 0, 187, 169, 7, 0, 140, 85, 0, 245, 3, 0, 179, 7,
0, 134, 85, 0, 159, 2, 0, 157, 2, 0, 179, 8, 0, 161, 2, 0,
169, 85, 0, 128, 85, 0, 130, 85, 0, 132, 85, 0, 219, 69, 128, 252,
3, 0, 148, 85, 0, 164, 170, 7, 0, 183, 66, 0, 211, 8, 0, 146,
85, 0, 165, 85, 0, 164, 85, 0, 233, 68, 0, 138, 85, 0, 136, 85,
0, 231, 69, 0, 216, 170, 7, 0, 138, 66, 0, 142, 85, 0, 144, 85,
0, 167, 85, 0, 250, 84, 0, 215, 69, 0, 149, 83, 0, 252, 84, 0,
248, 82, 0, 233, 68, 128, 252, 3, 0, 202, 8, 0, 200, 82, 0, 173,
67, 0, 143, 66, 0, 165, 2, 0, 229, 76, 0, 166, 64, 0, 185, 69,
0, 165, 170, 7, 0, 165, 82, 0, 166, 82, 0, 255, 67, 0, 187, 68,
0, 169, 67, 0, 170, 67, 0, 217, 170, 7, 0, 149, 64, 0, 189, 169,
7, 0, 167, 2, 0, 195, 64, 0, 237, 1, 0, 238, 1, 0, 184, 8,
0, 181, 8, 0, 161, 1, 0, 166, 170, 7, 0, 236, 1, 0, 140, 84,
0, 173, 68, 0, 220, 83, 0, 169, 66, 0, 179, 2, 0, 171, 2, 0,
177, 2, 0, 183, 69, 0, 181, 3, 0, 133, 66, 0, 158, 68, 0, 221,
83, 0, 186, 69, 0, 151, 84, 0, 188, 84, 0, 209, 8, 0, 175, 2,
0, 218, 170, 7, 0, 185, 7, 0, 191, 1, 0, 190, 169, 7, 0, 249,
69, 0, 245, 69, 0, 244, 69, 0, 243, 69, 0, 169, 2, 0, 214, 8,
0, 239, 1, 0, 181, 2, 0, 185, 8, 0, 167, 170, 7, 0, 183, 4,
0, 219, 170, 7, 0, 191, 169, 7, 0, 216, 8, 0, 212, 8, 0, 186,
7, 0, 240, 7, 0, 183, 2, 0, 186, 8, 0, 168, 170, 7, 0, 184,
2, 0, 197, 8, 0, 220, 8, 0, 220, 170, 7, 0, 192, 169, 7, 0,
155, 82, 0, 142, 82, 0, 139, 85, 0, 226, 82, 0, 186, 2, 0, 180,
83, 0, 187, 7, 0, 145, 83, 0, 133, 85, 0, 171, 1, 0, 159, 82,
0, 157, 82, 0, 171, 67, 0, 185, 82, 0, 243, 82, 0, 162, 67, 0,
171, 85, 0, 153, 82, 0, 173, 85, 0, 173, 85, 128, 252, 3, 0, 140,
82, 0, 242, 78, 0, 123, 0, 91, 0, 139, 83, 0, 143, 83, 0, 141,
83, 0, 190, 2, 0, 188, 2, 0, 187, 8, 0, 182, 82, 0, 231, 82,
0, 203, 82, 0, 178, 67, 0, 228, 68, 0, 199, 67, 0, 203, 69, 0,
168, 85, 0, 255, 84, 0, 129, 85, 0, 131, 85, 0, 218, 69, 128, 252,
3, 0, 147, 85, 0, 214, 69, 0, 252, 82, 0, 169, 170, 7, 0, 145,
85, 0, 234, 82, 0, 132, 75, 0, 217, 8, 0, 235, 82, 0, 250, 75,
0, 192, 2, 0, 176, 71, 0, 232, 68, 0, 137, 85, 0, 135, 85, 0,
230, 69, 0, 236, 79, 0, 253, 67, 0, 252, 79, 0, 172, 67, 0, 133,
83, 0, 221, 170, 7, 0, 173, 84, 0, 180, 84, 0, 151, 68, 0, 202,
75, 0, 40, 0, 147, 83, 0, 237, 82, 0, 142, 64, 0, 191, 69, 0,
185, 64, 0, 193, 169, 7, 0, 141, 85, 0, 143, 85, 0, 154, 64, 0,
194, 2, 0, 166, 85, 0, 249, 84, 0, 201, 69, 0, 246, 82, 0, 251,
84, 0, 150, 83, 0, 195, 75, 0, 202, 82, 0, 230, 82, 0, 232, 68,
128, 252, 3, 0, 186, 68, 0, 175, 1, 0, 194, 76, 0, 160, 78, 0,
174, 75, 0, 169, 84, 0, 188, 8, 0, 148, 64, 0, 170, 170, 7, 0,
167, 66, 0, 181, 1, 0, 240, 85, 0, 146, 68, 0, 170, 84, 0, 219,
85, 0, 167, 69, 0, 222, 170, 7, 0, 194, 169, 7, 0, 188, 7, 0,
184, 69, 0, 217, 69, 184, 6, 0, 235, 68, 210, 65, 0, 205, 67, 0,
206, 67, 0, 216, 69, 184, 6, 0, 234, 68, 210, 65, 0, 207, 67, 0,
175, 69, 0, 174, 69, 0, 196, 2, 0, 160, 68, 210, 65, 0, 240, 84,
184, 6, 0, 203, 68, 184, 6, 0, 201, 2, 0, 238, 76, 0, 195, 84,
0, 200, 2, 0, 198, 2, 0, 237, 84, 184, 6, 0, 194, 84, 0, 189,
8, 0, 147, 64, 0, 215, 67, 0, 164, 82, 0, 208, 68, 184, 6, 0,
168, 82, 0, 171, 170, 7, 0, 174, 67, 0, 242, 85, 0, 252, 69, 0,
250, 69, 0, 218, 8, 0, 230, 68, 184, 6, 0, 154, 67, 0, 165, 64,
0, 223, 170, 7, 0, 172, 1, 0, 249, 69, 184, 6, 0, 245, 69, 184,
6, 0, 247, 69, 0, 246, 69, 0, 254, 69, 0, 253, 69, 0, 253, 85,
229, 65, 0, 130, 68, 184, 6, 0, 148, 84, 0, 155, 67, 0, 179, 82,
184, 6, 0, 157, 67, 184, 6, 0, 195, 169, 7, 0, 132, 69, 0, 197,
85, 184, 6, 0, 133, 69, 0, 198, 85, 184, 6, 0, 241, 1, 0, 189,
7, 0, 35, 0, 150, 66, 0, 135, 64, 0, 173, 69, 0, 132, 82, 0,
205, 68, 210, 65, 0, 172, 69, 0, 229, 68, 210, 65, 0, 62, 210, 65,
0, 222, 83, 0, 130, 82, 0, 228, 68, 210, 65, 0, 60, 210, 65, 0,
180, 69, 210, 65, 0, 131, 82, 0, 181, 69, 210, 65, 0, 188, 68, 210,
65, 0, 214, 67, 0, 163, 82, 0, 167, 82, 0, 243, 1, 0, 244, 1,
0, 190, 8, 0, 209, 2, 0, 184, 84, 0, 188, 83, 0, 211, 2, 0,
191, 83, 0, 172, 170, 7, 0, 219, 5, 0, 242, 1, 0, 193, 83, 0,
181, 83, 0, 190, 83, 0, 187, 83, 0, 192, 83, 0, 205, 2, 0, 201,
7, 0, 191, 7, 0, 182, 83, 0, 224, 170, 7, 0, 183, 83, 0, 185,
83, 0, 168, 68, 0, 221, 84, 0, 180, 66, 0, 170, 1, 0, 186, 1,
0, 182, 69, 0, 214, 84, 0, 215, 84, 0, 219, 84, 0, 248, 1, 0,
152, 69, 0, 245, 1, 0, 182, 84, 0, 246, 1, 0, 189, 70, 0, 182,
1, 0, 243, 85, 0, 253, 85, 0, 191, 8, 0, 37, 0, 46, 0, 176,
64, 0, 177, 64, 0, 173, 170, 7, 0, 198, 7, 0, 213, 7, 0, 142,
76, 0, 192, 7, 0, 214, 7, 0, 142, 66, 0, 43, 0, 163, 84, 0,
162, 84, 0, 165, 84, 0, 242, 84, 0, 166, 84, 0, 167, 84, 0, 149,
84, 0, 225, 170, 7, 0, 163, 1, 0, 179, 85, 0, 183, 85, 0, 185,
85, 0, 181, 85, 0, 232, 69, 0, 178, 64, 0, 174, 70, 0, 146, 70,
0, 147, 70, 0, 176, 69, 0, 197, 169, 7, 0, 200, 7, 0, 136, 64,
0, 174, 170, 7, 0, 226, 170, 7, 0, 215, 64, 0, 198, 169, 7, 0,
150, 84, 0, 63, 0, 156, 82, 0, 228, 82, 0, 189, 68, 177, 6, 0,
213, 2, 0, 179, 83, 0, 146, 83, 0, 165, 83, 0, 187, 1, 0, 245,
82, 0, 160, 82, 0, 179, 82, 0, 158, 82, 0, 197, 82, 0, 244, 82,
0, 163, 67, 0, 157, 67, 0, 154, 82, 0, 182, 68, 0, 243, 78, 0,
125, 0, 93, 0, 140, 83, 0, 142, 83, 0, 144, 83, 0, 217, 2, 0,
215, 2, 0, 192, 8, 0, 183, 82, 0, 233, 82, 0, 179, 67, 0, 173,
75, 0, 253, 82, 0, 175, 170, 7, 0, 236, 82, 0, 193, 7, 0, 241,
7, 0, 201, 67, 0, 204, 69, 0, 218, 5, 0, 143, 64, 0, 177, 71,
0, 238, 85, 0, 237, 79, 0, 254, 67, 0, 134, 83, 0, 227, 170, 7,
0, 174, 84, 0, 181, 84, 0, 41, 0, 148, 83, 0, 146, 84, 0, 186,
64, 0, 199, 169, 7, 0, 202, 69, 0, 185, 75, 0, 206, 83, 0, 232,
82, 0, 158, 66, 0, 219, 2, 0, 180, 85, 0, 184, 85, 0, 225, 2,
0, 223, 2, 0, 221, 2, 0, 182, 85, 0, 186, 85, 0, 233, 69, 0,
147, 84, 0, 193, 8, 0, 197, 69, 0, 230, 84, 0, 216, 67, 0, 167,
1, 0, 59, 0, 169, 82, 0, 182, 78, 0, 176, 170, 7, 0, 239, 76,
0, 201, 8, 0, 200, 8, 0, 173, 1, 0, 195, 7, 0, 194, 7, 0,
234, 84, 0, 158, 85, 0, 160, 85, 0, 157, 85, 0, 159, 85, 0, 198,
68, 0, 164, 84, 0, 242, 82, 0, 179, 84, 0, 228, 83, 0, 163, 70,
0, 170, 85, 0, 172, 85, 0, 172, 85, 128, 252, 3, 0, 204, 8, 0,
47, 0, 196, 83, 0, 191, 70, 0, 228, 170, 7, 0, 224, 76, 0, 147,
69, 128, 252, 3, 0, 148, 69, 128, 252, 3, 0, 200, 169, 7, 0, 134,
76, 0, 130, 69, 0, 197, 85, 0, 189, 85, 0, 195, 85, 0, 193, 85,
0, 203, 85, 0, 138, 69, 0, 191, 85, 0, 249, 82, 0, 199, 85, 0,
213, 85, 0, 211, 85, 0, 234, 76, 0, 185, 1, 0, 178, 1, 0, 179,
1, 0, 198, 85, 0, 190, 85, 0, 216, 85, 0, 196, 85, 0, 201, 79,
0, 215, 85, 0, 251, 82, 0, 194, 85, 0, 204, 85, 0, 139, 69, 0,
192, 85, 0, 200, 85, 0, 212, 85, 0, 214, 85, 0, 217, 67, 0, 170,
82, 0, 223, 1, 0, 150, 70, 0, 196, 7, 0, 229, 2, 0, 227, 2,
0, 194, 8, 0, 149, 70, 0, 177, 170, 7, 0, 184, 7, 0, 209, 7,
0, 254, 1, 0, 215, 1, 0, 177, 84, 0, 176, 84, 0, 182, 70, 0,
241, 85, 0, 229, 170, 7, 0, 218, 85, 0, 180, 64, 0, 181, 75, 0,
220, 68, 0, 236, 75, 0, 186, 84, 0, 185, 84, 0, 205, 83, 0, 187,
84, 0, 226, 71, 0, 201, 169, 7, 0, 198, 8, 0, 219, 8, 0, 231,
2, 0, 227, 82, 0, 250, 1, 0, 222, 8, 0, 237, 2, 0, 251, 1,
0, 195, 8, 0, 241, 2, 0, 254, 82, 0, 178, 170, 7, 0, 249, 1,
0, 128, 75, 0, 156, 70, 0, 143, 70, 0, 248, 75, 0, 235, 2, 0,
243, 2, 0, 230, 170, 7, 0, 197, 7, 0, 200, 67, 0, 157, 70, 0,
142, 70, 0, 239, 2, 0, 249, 75, 0, 202, 169, 7, 0, 240, 69, 0,
233, 2, 0, 252, 1, 0, 167, 83, 0, 232, 85, 0, 233, 85, 0, 156,
83, 0, 138, 69, 128, 252, 3, 0, 203, 85, 128, 252, 3, 0, 139, 69,
128, 252, 3, 0, 204, 85, 128, 252, 3, 0, 178, 8, 0, 187, 69, 0,
218, 68, 0, 238, 69, 0, 179, 170, 7, 0, 231, 170, 7, 0, 203, 169,
7, 0, 154, 83, 0, 245, 2, 0, 223, 84, 0, 217, 68, 0, 152, 66,
0, 180, 170, 7, 0, 232, 170, 7, 0, 204, 169, 7, 0, 181, 170, 7,
0, 190, 7, 0, 251, 69, 0, 233, 170, 7, 0, 205, 169, 7, 0, 253,
1, 0, 207, 8, 0, 247, 2, 0, 203, 8, 0, 165, 1, 0, 182, 170,
7, 0, 215, 8, 0, 234, 170, 7, 0, 206, 169, 7, 0, 206, 8, 0,
255, 1, 0, 250, 2, 0, 254, 2, 0, 183, 8, 0, 252, 2, 0, 182,
7, 0, 183, 170, 7, 0, 182, 8, 0, 221, 67, 0, 235, 170, 7, 0,
207, 169, 7, 0, 141, 64, 0, 140, 64, 0
]
const ENTITY_COUNT = 2125
# Binary search over the sorted records; returns the record index when the
# name matches exactly, -1 otherwise. Record names are front-coded in blocks
# of eight, so the mid record's name is rebuilt from its block start.
proc find_record(key_base: int, key_len: int): int =
var lo = 0
var hi = ENTITY_COUNT
while lo < hi:
let mid = lo + (hi - lo) div 2
var off = int(table_groups[mid div 8])
var key_buf: array[32, byte]
var len = 0
var k = 0
while k <= mid mod 8:
len = int(table_names[off])
off += 1
while table_names[off] != 0:
key_buf[len] = table_names[off]
len += 1
off += 1
off += 1
k += 1
var cmp = 0
let m = if len < key_len: len else: key_len
var i = 0
while i < m:
let a = int(key_buf[i])
let b = int(buffer[key_base + i])
if a != b:
cmp = if a < b: -1 else: 1
break
i += 1
if cmp == 0:
if len != key_len:
cmp = if len < key_len: -1 else: 1
else:
return mid
if cmp < 0:
lo = mid + 1
else:
hi = mid
return -1
proc emit_code_point(cp: int) =
if cp < 0x80:
buffer[out_len] = byte(cp)
out_len += 1
elif cp < 0x800:
buffer[out_len] = byte(0xC0 or (cp shr 6))
out_len += 1
buffer[out_len] = byte(0x80 or (cp and 0x3F))
out_len += 1
elif cp < 0x10000:
buffer[out_len] = byte(0xE0 or (cp shr 12))
out_len += 1
buffer[out_len] = byte(0x80 or ((cp shr 6) and 0x3F))
out_len += 1
buffer[out_len] = byte(0x80 or (cp and 0x3F))
out_len += 1
else:
buffer[out_len] = byte(0xF0 or (cp shr 18))
out_len += 1
buffer[out_len] = byte(0x80 or ((cp shr 12) and 0x3F))
out_len += 1
buffer[out_len] = byte(0x80 or ((cp shr 6) and 0x3F))
out_len += 1
buffer[out_len] = byte(0x80 or (cp and 0x3F))
out_len += 1
# Writes the value of record idx (LEB128 code points) to the output.
proc emit_value(idx: int) =
var off = int(table_refs[idx]) and 0x7FFF
while true:
var c = 0
var s = 0
var b = int(table_values[off])
off += 1
while b >= 0x80:
c = c or ((b and 0x7F) shl s)
s += 7
b = int(table_values[off])
off += 1
c = c or (b shl s)
if c == 0:
break
emit_code_point(c)
# The reference's named character class: anything but \t \n \f space < & # ;.
func name_char(c: byte): bool =
let x = int(c)
x != 9 and x != 10 and x != 12 and x != 32 and x != 60 and x != 38 and
x != 35 and x != 59
proc digit(n: int, i: int, hex: bool): int =
if i >= n:
return -1
let c = int(buffer[GAP + i])
if c >= 48 and c <= 57:
c - 48
elif hex and c >= 97 and c <= 102:
c - 97 + 10
elif hex and c >= 65 and c <= 70:
c - 65 + 10
else:
-1
# buffer[GAP + at] is '&' and buffer[GAP + at + 1] is '#'.
# Returns the index after what was consumed.
proc numeric_ref(n: int, at: int): int =
var i = at + 2
var hex = false
if i < n:
let c = int(buffer[GAP + i])
if c == 120 or c == 88:
hex = true
i += 1
let first = digit(n, i, hex)
if first < 0:
buffer[out_len] = 38.byte
out_len += 1
return at + 1
var value = first
let mult = if hex: 16 else: 10
i += 1
while i < n:
let d = digit(n, i, hex)
if d < 0:
break
# Saturate: anything past U+10FFFF becomes U+FFFD the same way.
value = value * mult + d
if value > 0x110000:
value = 0x110000
i += 1
if i < n and int(buffer[GAP + i]) == 59:
i += 1
var v = value
if v >= 0x80 and v <= 0x9F and c1[v - 0x80] != 0:
v = c1[v - 0x80]
if v == 0 or (v >= 0xD800 and v <= 0xDFFF) or v > 0x10FFFF:
v = 0xFFFD
emit_code_point(v)
return i
# buffer[GAP + at] is '&' and the next byte is a name character.
proc named_ref(n: int, at: int): int =
var name_end = at + 1
while name_end < n and name_end - (at + 1) < 32 and name_char(buffer[GAP + name_end]):
name_end += 1
let semi = name_end < n and int(buffer[GAP + name_end]) == 59
let name_len = name_end - (at + 1)
if semi:
let idx = find_record(GAP + at + 1, name_len)
if idx >= 0:
emit_value(idx)
return name_end + 1
# Without ';', only legacy names match (the only semicolon-less table
# entries), longest first, and none is longer than 6 bytes.
var x = if name_len < 6: name_len else: 6
while x >= 2:
let idx = find_record(GAP + at + 1, x)
if idx >= 0 and (int(table_refs[idx]) and 0x8000) != 0:
emit_value(idx)
return at + 1 + x
x -= 1
buffer[out_len] = 38.byte
out_len += 1
return at + 1
# buffer[GAP + at] is '&'. Returns the index after what was consumed.
proc handle_ref(n: int, at: int): int =
if at + 1 >= n:
buffer[out_len] = 38.byte
out_len += 1
return at + 1
let c = buffer[GAP + at + 1]
if int(c) == 35:
return numeric_ref(n, at)
if name_char(c):
return named_ref(n, at)
buffer[out_len] = 38.byte
out_len += 1
return at + 1
proc render(len: cuint): culonglong {.exportc: "render".} =
var n = int(len)
if n > INPUT_CAP:
n = INPUT_CAP
out_len = 0
var i = 0
while i < n:
if int(buffer[GAP + i]) != 38:
buffer[out_len] = buffer[GAP + i]
out_len += 1
i += 1
else:
i = handle_ref(n, i)
result = (culonglong(cast[cuint](addr(buffer[0]))) shl 32) or culonglong(out_len)
Download source MIT licensed — build on it
Try it
Step through this Wasm running on the input above. Focus the debugger, then press Space to run, N to step over or ? for all keys.
Run it yourself
Commands to run and debug it locally
These commands use qipx and qiptui, which need Node.js 22 or newer. First download the Wasm and the example input:
curl -o unescape_html.wasm https://calculated.world/components/e2c0c7b54bcf685604bd61290120f691fcb23f10f9edb67d9e0b37d123a64585.wasm
printf '%s' 'Fish & chips — café <3 😀 © 2026 ¬it;' > input.txt
Run it:
npx qipdo -i input.txt unescape_html.wasm
Step through it in the qipdb debugger:
npx qiptui \
-F component=@unescape_html.wasm \
-F 'input=<input.txt' \
qip.dev/tui/qipdb.wasm
The debugger command fetches qipdb from qip.dev and keeps it in memory. Or use the QIP component debugger in your browser.
Build details
Compiler, size, memory and checksum
- Submitted
- 4 November 2026 at 07:33 UTC
- Language
- Nim
- Compiler
-
Nim 2.4.0 (C backend) + Clang 20.1.2 + wasm-ld 23.1.4nim c --compileOnly --app:lib --mm:none --exceptions:goto -d:danger --cpu:i386 --os:linux; clang --target=wasm32 -nostdlib -ffreestanding -O2 -fno-strict-aliasing -ffunction-sections -fdata-sections; wasm-ld --no-entry --export-memory -z stack-size=16384 --initial-memory=1310720 --max-memory=1310720 --gc-sections --strip-all - Size
- 24.6 KiB, gzip 15.1 KiB
- Download
- ~300 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
- Memory
- 20 pages (1.3 MiB)
- SIMD
- no
- AI models
- qwen3.8-27b:8bit