Unescape HTML · Zig 🤝 Fable 5.2
SHA-256
f8f5d4a5c339b86d8229e63d91392dce4866f0df95091d94d832f75f1a0cf935
View source (105.7 KiB of Zig)
// unescape_html in Zig with Wasm SIMD: decodes every HTML character reference in UTF-8 text
// the way Python's html.unescape does, and copies all other bytes unchanged.
//
// The design goal is a short path per reference with few unpredictable branches:
// - 64 zero bytes are written after the input, so no load or loop needs a bounds check and
// nothing stale from an earlier input can be mistaken for part of a reference.
// - Two stages per 4 KiB window. Stage 1 turns each 64-byte block into a bitmask of its `&`
// and appends their positions to a list, without branching on what it finds. Stage 2
// walks the list: copy the text since the last reference (32 bytes unconditionally, more
// in a loop), then decode. The next position is known before the current reference is
// decoded, so consecutive references do not wait on each other.
// - Inputs without `&` are returned in place; nothing is copied.
// - A name of up to 7 bytes ending in `;` is looked up without measuring it: the first `;`
// in the next 8 bytes is found with a SWAR zero-byte test, the bytes up to it are the key,
// and one multiply indexes an open-addressed table of 16-byte entries (key, value, length).
// A hit proves the name; legacy and common names sit in their home slot.
// - Longer names go through a second table and one masked 32-byte vector compare.
// - Without `;` only the 106 legacy names match. A filter on the first two bytes gives the
// longest legacy name that could start there, usually none.
// - Numeric references of up to 7 digits, decimal or hexadecimal, share one branch-free
// SWAR path, and the code point is encoded as UTF-8 without branching on its length.
// Tables are built from the packed entity list on the first call.
//
// Build: zig build-exe unescape.zig -target wasm32-freestanding -mcpu=generic+simd128+bulk_memory
// -O ReleaseFast -fno-entry -rdynamic -fstrip --stack 8192 --initial-memory=3145728
// --max-memory=3145728
const std = @import("std");
const V = @Vector(16, u8);
const INPUT_CAP: usize = 1 << 20;
// The largest growth is `≫⃒` (5 bytes) becoming 6 bytes.
const OUTPUT_CAP: usize = INPUT_CAP / 5 * 6 + 8;
const PAD = 128;
const FAST_BITS = 12;
const FAST_TAIL = 32;
const LEG_BITS = 8;
const LEG_TAIL = 16;
const LONG_BITS = 11;
const LONG_MASK = (1 << LONG_BITS) - 1;
const EMPTY: u64 = ~@as(u64, 0);
// Bytes of input per stage-1 window; a multiple of 64.
const WINDOW = 4096;
const ONES: u64 = 0x0101010101010101;
const HIGH: u64 = 0x8080808080808080;
const ENTITY_COUNT = 2125;
const LONG_COUNT = 506;
const FAST_MUL: u64 = 0x0c6e5973286bef29;
const LEG_MUL: u64 = 0x2ba5322c33c67a59;
const LONG_MUL: u64 = 0xa0c2995f40498cb3;
const entity_blob = [24470]u8{
133,2,65,69,108,105,103,195,134,131,1,65,77,80,38,134,2,65,97,99,117,116,101,195,
129,133,2,65,99,105,114,99,195,130,134,2,65,103,114,97,118,101,195,128,133,2,65,114,
105,110,103,195,133,134,2,65,116,105,108,100,101,195,131,132,2,65,117,109,108,195,132,132,
2,67,79,80,89,194,169,134,2,67,99,101,100,105,108,195,135,131,2,69,84,72,195,144,
134,2,69,97,99,117,116,101,195,137,133,2,69,99,105,114,99,195,138,134,2,69,103,114,
97,118,101,195,136,132,2,69,117,109,108,195,139,130,1,71,84,62,134,2,73,97,99,117,
116,101,195,141,133,2,73,99,105,114,99,195,142,134,2,73,103,114,97,118,101,195,140,132,
2,73,117,109,108,195,143,130,1,76,84,60,134,2,78,116,105,108,100,101,195,145,134,2,
79,97,99,117,116,101,195,147,133,2,79,99,105,114,99,195,148,134,2,79,103,114,97,118,
101,195,146,134,2,79,115,108,97,115,104,195,152,134,2,79,116,105,108,100,101,195,149,132,
2,79,117,109,108,195,150,132,1,81,85,79,84,34,131,2,82,69,71,194,174,133,2,84,
72,79,82,78,195,158,134,2,85,97,99,117,116,101,195,154,133,2,85,99,105,114,99,195,
155,134,2,85,103,114,97,118,101,195,153,132,2,85,117,109,108,195,156,134,2,89,97,99,
117,116,101,195,157,134,2,97,97,99,117,116,101,195,161,133,2,97,99,105,114,99,195,162,
133,2,97,99,117,116,101,194,180,133,2,97,101,108,105,103,195,166,134,2,97,103,114,97,
118,101,195,160,131,1,97,109,112,38,133,2,97,114,105,110,103,195,165,134,2,97,116,105,
108,100,101,195,163,132,2,97,117,109,108,195,164,134,2,98,114,118,98,97,114,194,166,134,
2,99,99,101,100,105,108,195,167,133,2,99,101,100,105,108,194,184,132,2,99,101,110,116,
194,162,132,2,99,111,112,121,194,169,134,2,99,117,114,114,101,110,194,164,131,2,100,101,
103,194,176,134,2,100,105,118,105,100,101,195,183,134,2,101,97,99,117,116,101,195,169,133,
2,101,99,105,114,99,195,170,134,2,101,103,114,97,118,101,195,168,131,2,101,116,104,195,
176,132,2,101,117,109,108,195,171,134,2,102,114,97,99,49,50,194,189,134,2,102,114,97,
99,49,52,194,188,134,2,102,114,97,99,51,52,194,190,130,1,103,116,62,134,2,105,97,
99,117,116,101,195,173,133,2,105,99,105,114,99,195,174,133,2,105,101,120,99,108,194,161,
134,2,105,103,114,97,118,101,195,172,134,2,105,113,117,101,115,116,194,191,132,2,105,117,
109,108,195,175,133,2,108,97,113,117,111,194,171,130,1,108,116,60,132,2,109,97,99,114,
194,175,133,2,109,105,99,114,111,194,181,134,2,109,105,100,100,111,116,194,183,132,2,110,
98,115,112,194,160,131,2,110,111,116,194,172,134,2,110,116,105,108,100,101,195,177,134,2,
111,97,99,117,116,101,195,179,133,2,111,99,105,114,99,195,180,134,2,111,103,114,97,118,
101,195,178,132,2,111,114,100,102,194,170,132,2,111,114,100,109,194,186,134,2,111,115,108,
97,115,104,195,184,134,2,111,116,105,108,100,101,195,181,132,2,111,117,109,108,195,182,132,
2,112,97,114,97,194,182,134,2,112,108,117,115,109,110,194,177,133,2,112,111,117,110,100,
194,163,132,1,113,117,111,116,34,133,2,114,97,113,117,111,194,187,131,2,114,101,103,194,
174,132,2,115,101,99,116,194,167,131,2,115,104,121,194,173,132,2,115,117,112,49,194,185,
132,2,115,117,112,50,194,178,132,2,115,117,112,51,194,179,133,2,115,122,108,105,103,195,
159,133,2,116,104,111,114,110,195,190,133,2,116,105,109,101,115,195,151,134,2,117,97,99,
117,116,101,195,186,133,2,117,99,105,114,99,195,187,134,2,117,103,114,97,118,101,195,185,
131,2,117,109,108,194,168,132,2,117,117,109,108,195,188,134,2,121,97,99,117,116,101,195,
189,131,2,121,101,110,194,165,132,2,121,117,109,108,195,191,4,1,97,112,111,115,39,5,
3,114,100,113,117,111,226,128,157,5,3,108,100,113,117,111,226,128,156,5,3,114,115,113,
117,111,226,128,153,5,3,108,115,113,117,111,226,128,152,5,3,109,100,97,115,104,226,128,
148,5,3,110,100,97,115,104,226,128,147,6,3,104,101,108,108,105,112,226,128,166,4,3,
101,117,114,111,226,130,172,5,3,116,114,97,100,101,226,132,162,4,3,98,117,108,108,226,
128,162,5,3,99,104,101,99,107,226,156,147,6,3,100,97,103,103,101,114,226,128,160,6,
3,68,97,103,103,101,114,226,128,161,4,3,108,97,114,114,226,134,144,4,3,114,97,114,
114,226,134,146,4,3,117,97,114,114,226,134,145,4,3,100,97,114,114,226,134,147,4,3,
104,97,114,114,226,134,148,5,3,112,114,105,109,101,226,128,178,5,3,80,114,105,109,101,
226,128,179,2,3,108,101,226,137,164,2,3,103,101,226,137,165,2,3,110,101,226,137,160,
5,3,105,110,102,105,110,226,136,158,3,3,115,117,109,226,136,145,5,3,109,105,110,117,
115,226,136,146,5,3,114,97,100,105,99,226,136,154,5,3,97,115,121,109,112,226,137,136,
5,3,101,113,117,105,118,226,137,161,5,2,97,108,112,104,97,206,177,4,2,98,101,116,
97,206,178,5,2,103,97,109,109,97,206,179,5,2,100,101,108,116,97,206,180,2,2,112,
105,207,128,2,2,109,117,206,188,5,2,115,105,103,109,97,207,131,5,2,111,109,101,103,
97,207,137,6,2,108,97,109,98,100,97,206,187,5,2,116,104,101,116,97,206,184,6,3,
112,101,114,109,105,108,226,128,176,6,3,108,115,97,113,117,111,226,128,185,6,3,114,115,
97,113,117,111,226,128,186,5,3,115,98,113,117,111,226,128,154,5,3,98,100,113,117,111,
226,128,158,5,2,111,101,108,105,103,197,147,5,2,79,69,108,105,103,197,146,6,2,115,
99,97,114,111,110,197,161,6,2,83,99,97,114,111,110,197,160,4,2,89,117,109,108,197,
184,4,2,102,110,111,102,198,146,4,2,99,105,114,99,203,134,5,2,116,105,108,100,101,
203,156,4,3,101,110,115,112,226,128,130,4,3,101,109,115,112,226,128,131,6,3,116,104,
105,110,115,112,226,128,137,4,3,122,119,110,106,226,128,140,3,3,122,119,106,226,128,141,
3,3,108,114,109,226,128,142,3,3,114,108,109,226,128,143,6,3,115,112,97,100,101,115,
226,153,160,5,3,99,108,117,98,115,226,153,163,6,3,104,101,97,114,116,115,226,153,165,
5,3,100,105,97,109,115,226,153,166,3,3,108,111,122,226,151,138,4,3,115,116,97,114,
226,152,134,5,3,115,116,97,114,102,226,152,133,5,3,112,104,111,110,101,226,152,142,5,
3,99,114,111,115,115,226,156,151,9,3,99,104,101,99,107,109,97,114,107,226,156,147,6,
2,65,98,114,101,118,101,196,130,3,2,65,99,121,208,144,3,4,65,102,114,240,157,148,
132,5,2,65,108,112,104,97,206,145,5,2,65,109,97,99,114,196,128,3,3,65,110,100,
226,169,147,5,2,65,111,103,111,110,196,132,4,4,65,111,112,102,240,157,148,184,13,3,
65,112,112,108,121,70,117,110,99,116,105,111,110,226,129,161,4,4,65,115,99,114,240,157,
146,156,6,3,65,115,115,105,103,110,226,137,148,9,3,66,97,99,107,115,108,97,115,104,
226,136,150,4,3,66,97,114,118,226,171,167,6,3,66,97,114,119,101,100,226,140,134,3,
2,66,99,121,208,145,7,3,66,101,99,97,117,115,101,226,136,181,10,3,66,101,114,110,
111,117,108,108,105,115,226,132,172,4,2,66,101,116,97,206,146,3,4,66,102,114,240,157,
148,133,4,4,66,111,112,102,240,157,148,185,5,2,66,114,101,118,101,203,152,4,3,66,
115,99,114,226,132,172,6,3,66,117,109,112,101,113,226,137,142,4,2,67,72,99,121,208,
167,6,2,67,97,99,117,116,101,196,134,3,3,67,97,112,226,139,146,20,3,67,97,112,
105,116,97,108,68,105,102,102,101,114,101,110,116,105,97,108,68,226,133,133,7,3,67,97,
121,108,101,121,115,226,132,173,6,2,67,99,97,114,111,110,196,140,5,2,67,99,105,114,
99,196,136,7,3,67,99,111,110,105,110,116,226,136,176,4,2,67,100,111,116,196,138,7,
2,67,101,100,105,108,108,97,194,184,9,2,67,101,110,116,101,114,68,111,116,194,183,3,
3,67,102,114,226,132,173,3,2,67,104,105,206,167,9,3,67,105,114,99,108,101,68,111,
116,226,138,153,11,3,67,105,114,99,108,101,77,105,110,117,115,226,138,150,10,3,67,105,
114,99,108,101,80,108,117,115,226,138,149,11,3,67,105,114,99,108,101,84,105,109,101,115,
226,138,151,24,3,67,108,111,99,107,119,105,115,101,67,111,110,116,111,117,114,73,110,116,
101,103,114,97,108,226,136,178,21,3,67,108,111,115,101,67,117,114,108,121,68,111,117,98,
108,101,81,117,111,116,101,226,128,157,15,3,67,108,111,115,101,67,117,114,108,121,81,117,
111,116,101,226,128,153,5,3,67,111,108,111,110,226,136,183,6,3,67,111,108,111,110,101,
226,169,180,9,3,67,111,110,103,114,117,101,110,116,226,137,161,6,3,67,111,110,105,110,
116,226,136,175,15,3,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,226,136,174,
4,3,67,111,112,102,226,132,130,9,3,67,111,112,114,111,100,117,99,116,226,136,144,31,
3,67,111,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,226,136,179,5,3,67,114,111,115,115,226,168,175,4,4,67,
115,99,114,240,157,146,158,3,3,67,117,112,226,139,147,6,3,67,117,112,67,97,112,226,
137,141,2,3,68,68,226,133,133,8,3,68,68,111,116,114,97,104,100,226,164,145,4,2,
68,74,99,121,208,130,4,2,68,83,99,121,208,133,4,2,68,90,99,121,208,143,4,3,
68,97,114,114,226,134,161,5,3,68,97,115,104,118,226,171,164,6,2,68,99,97,114,111,
110,196,142,3,2,68,99,121,208,148,3,3,68,101,108,226,136,135,5,2,68,101,108,116,
97,206,148,3,4,68,102,114,240,157,148,135,16,2,68,105,97,99,114,105,116,105,99,97,
108,65,99,117,116,101,194,180,14,2,68,105,97,99,114,105,116,105,99,97,108,68,111,116,
203,153,22,2,68,105,97,99,114,105,116,105,99,97,108,68,111,117,98,108,101,65,99,117,
116,101,203,157,16,1,68,105,97,99,114,105,116,105,99,97,108,71,114,97,118,101,96,16,
2,68,105,97,99,114,105,116,105,99,97,108,84,105,108,100,101,203,156,7,3,68,105,97,
109,111,110,100,226,139,132,13,3,68,105,102,102,101,114,101,110,116,105,97,108,68,226,133,
134,4,4,68,111,112,102,240,157,148,187,3,2,68,111,116,194,168,6,3,68,111,116,68,
111,116,226,131,156,8,3,68,111,116,69,113,117,97,108,226,137,144,21,3,68,111,117,98,
108,101,67,111,110,116,111,117,114,73,110,116,101,103,114,97,108,226,136,175,9,2,68,111,
117,98,108,101,68,111,116,194,168,15,3,68,111,117,98,108,101,68,111,119,110,65,114,114,
111,119,226,135,147,15,3,68,111,117,98,108,101,76,101,102,116,65,114,114,111,119,226,135,
144,20,3,68,111,117,98,108,101,76,101,102,116,82,105,103,104,116,65,114,114,111,119,226,
135,148,13,3,68,111,117,98,108,101,76,101,102,116,84,101,101,226,171,164,19,3,68,111,
117,98,108,101,76,111,110,103,76,101,102,116,65,114,114,111,119,226,159,184,24,3,68,111,
117,98,108,101,76,111,110,103,76,101,102,116,82,105,103,104,116,65,114,114,111,119,226,159,
186,20,3,68,111,117,98,108,101,76,111,110,103,82,105,103,104,116,65,114,114,111,119,226,
159,185,16,3,68,111,117,98,108,101,82,105,103,104,116,65,114,114,111,119,226,135,146,14,
3,68,111,117,98,108,101,82,105,103,104,116,84,101,101,226,138,168,13,3,68,111,117,98,
108,101,85,112,65,114,114,111,119,226,135,145,17,3,68,111,117,98,108,101,85,112,68,111,
119,110,65,114,114,111,119,226,135,149,17,3,68,111,117,98,108,101,86,101,114,116,105,99,
97,108,66,97,114,226,136,165,9,3,68,111,119,110,65,114,114,111,119,226,134,147,12,3,
68,111,119,110,65,114,114,111,119,66,97,114,226,164,147,16,3,68,111,119,110,65,114,114,
111,119,85,112,65,114,114,111,119,226,135,181,9,2,68,111,119,110,66,114,101,118,101,204,
145,19,3,68,111,119,110,76,101,102,116,82,105,103,104,116,86,101,99,116,111,114,226,165,
144,17,3,68,111,119,110,76,101,102,116,84,101,101,86,101,99,116,111,114,226,165,158,14,
3,68,111,119,110,76,101,102,116,86,101,99,116,111,114,226,134,189,17,3,68,111,119,110,
76,101,102,116,86,101,99,116,111,114,66,97,114,226,165,150,18,3,68,111,119,110,82,105,
103,104,116,84,101,101,86,101,99,116,111,114,226,165,159,15,3,68,111,119,110,82,105,103,
104,116,86,101,99,116,111,114,226,135,129,18,3,68,111,119,110,82,105,103,104,116,86,101,
99,116,111,114,66,97,114,226,165,151,7,3,68,111,119,110,84,101,101,226,138,164,12,3,
68,111,119,110,84,101,101,65,114,114,111,119,226,134,167,9,3,68,111,119,110,97,114,114,
111,119,226,135,147,4,4,68,115,99,114,240,157,146,159,6,2,68,115,116,114,111,107,196,
144,3,2,69,78,71,197,138,6,2,69,99,97,114,111,110,196,154,3,2,69,99,121,208,
173,4,2,69,100,111,116,196,150,3,4,69,102,114,240,157,148,136,7,3,69,108,101,109,
101,110,116,226,136,136,5,2,69,109,97,99,114,196,146,16,3,69,109,112,116,121,83,109,
97,108,108,83,113,117,97,114,101,226,151,187,20,3,69,109,112,116,121,86,101,114,121,83,
109,97,108,108,83,113,117,97,114,101,226,150,171,5,2,69,111,103,111,110,196,152,4,4,
69,111,112,102,240,157,148,188,7,2,69,112,115,105,108,111,110,206,149,5,3,69,113,117,
97,108,226,169,181,10,3,69,113,117,97,108,84,105,108,100,101,226,137,130,11,3,69,113,
117,105,108,105,98,114,105,117,109,226,135,140,4,3,69,115,99,114,226,132,176,4,3,69,
115,105,109,226,169,179,3,2,69,116,97,206,151,6,3,69,120,105,115,116,115,226,136,131,
12,3,69,120,112,111,110,101,110,116,105,97,108,69,226,133,135,3,2,70,99,121,208,164,
3,4,70,102,114,240,157,148,137,17,3,70,105,108,108,101,100,83,109,97,108,108,83,113,
117,97,114,101,226,151,188,21,3,70,105,108,108,101,100,86,101,114,121,83,109,97,108,108,
83,113,117,97,114,101,226,150,170,4,4,70,111,112,102,240,157,148,189,6,3,70,111,114,
65,108,108,226,136,128,10,3,70,111,117,114,105,101,114,116,114,102,226,132,177,4,3,70,
115,99,114,226,132,177,4,2,71,74,99,121,208,131,5,2,71,97,109,109,97,206,147,6,
2,71,97,109,109,97,100,207,156,6,2,71,98,114,101,118,101,196,158,6,2,71,99,101,
100,105,108,196,162,5,2,71,99,105,114,99,196,156,3,2,71,99,121,208,147,4,2,71,
100,111,116,196,160,3,4,71,102,114,240,157,148,138,2,3,71,103,226,139,153,4,4,71,
111,112,102,240,157,148,190,12,3,71,114,101,97,116,101,114,69,113,117,97,108,226,137,165,
16,3,71,114,101,97,116,101,114,69,113,117,97,108,76,101,115,115,226,139,155,16,3,71,
114,101,97,116,101,114,70,117,108,108,69,113,117,97,108,226,137,167,14,3,71,114,101,97,
116,101,114,71,114,101,97,116,101,114,226,170,162,11,3,71,114,101,97,116,101,114,76,101,
115,115,226,137,183,17,3,71,114,101,97,116,101,114,83,108,97,110,116,69,113,117,97,108,
226,169,190,12,3,71,114,101,97,116,101,114,84,105,108,100,101,226,137,179,4,4,71,115,
99,114,240,157,146,162,2,3,71,116,226,137,171,6,2,72,65,82,68,99,121,208,170,5,
2,72,97,99,101,107,203,135,3,1,72,97,116,94,5,2,72,99,105,114,99,196,164,3,
3,72,102,114,226,132,140,12,3,72,105,108,98,101,114,116,83,112,97,99,101,226,132,139,
4,3,72,111,112,102,226,132,141,14,3,72,111,114,105,122,111,110,116,97,108,76,105,110,
101,226,148,128,4,3,72,115,99,114,226,132,139,6,2,72,115,116,114,111,107,196,166,12,
3,72,117,109,112,68,111,119,110,72,117,109,112,226,137,142,9,3,72,117,109,112,69,113,
117,97,108,226,137,143,4,2,73,69,99,121,208,149,5,2,73,74,108,105,103,196,178,4,
2,73,79,99,121,208,129,3,2,73,99,121,208,152,4,2,73,100,111,116,196,176,3,3,
73,102,114,226,132,145,2,3,73,109,226,132,145,5,2,73,109,97,99,114,196,170,10,3,
73,109,97,103,105,110,97,114,121,73,226,133,136,7,3,73,109,112,108,105,101,115,226,135,
146,3,3,73,110,116,226,136,172,8,3,73,110,116,101,103,114,97,108,226,136,171,12,3,
73,110,116,101,114,115,101,99,116,105,111,110,226,139,130,14,3,73,110,118,105,115,105,98,
108,101,67,111,109,109,97,226,129,163,14,3,73,110,118,105,115,105,98,108,101,84,105,109,
101,115,226,129,162,5,2,73,111,103,111,110,196,174,4,4,73,111,112,102,240,157,149,128,
4,2,73,111,116,97,206,153,4,3,73,115,99,114,226,132,144,6,2,73,116,105,108,100,
101,196,168,5,2,73,117,107,99,121,208,134,5,2,74,99,105,114,99,196,180,3,2,74,
99,121,208,153,3,4,74,102,114,240,157,148,141,4,4,74,111,112,102,240,157,149,129,4,
4,74,115,99,114,240,157,146,165,6,2,74,115,101,114,99,121,208,136,5,2,74,117,107,
99,121,208,132,4,2,75,72,99,121,208,165,4,2,75,74,99,121,208,140,5,2,75,97,
112,112,97,206,154,6,2,75,99,101,100,105,108,196,182,3,2,75,99,121,208,154,3,4,
75,102,114,240,157,148,142,4,4,75,111,112,102,240,157,149,130,4,4,75,115,99,114,240,
157,146,166,4,2,76,74,99,121,208,137,6,2,76,97,99,117,116,101,196,185,6,2,76,
97,109,98,100,97,206,155,4,3,76,97,110,103,226,159,170,10,3,76,97,112,108,97,99,
101,116,114,102,226,132,146,4,3,76,97,114,114,226,134,158,6,2,76,99,97,114,111,110,
196,189,6,2,76,99,101,100,105,108,196,187,3,2,76,99,121,208,155,16,3,76,101,102,
116,65,110,103,108,101,66,114,97,99,107,101,116,226,159,168,9,3,76,101,102,116,65,114,
114,111,119,226,134,144,12,3,76,101,102,116,65,114,114,111,119,66,97,114,226,135,164,19,
3,76,101,102,116,65,114,114,111,119,82,105,103,104,116,65,114,114,111,119,226,135,134,11,
3,76,101,102,116,67,101,105,108,105,110,103,226,140,136,17,3,76,101,102,116,68,111,117,
98,108,101,66,114,97,99,107,101,116,226,159,166,17,3,76,101,102,116,68,111,119,110,84,
101,101,86,101,99,116,111,114,226,165,161,14,3,76,101,102,116,68,111,119,110,86,101,99,
116,111,114,226,135,131,17,3,76,101,102,116,68,111,119,110,86,101,99,116,111,114,66,97,
114,226,165,153,9,3,76,101,102,116,70,108,111,111,114,226,140,138,14,3,76,101,102,116,
82,105,103,104,116,65,114,114,111,119,226,134,148,15,3,76,101,102,116,82,105,103,104,116,
86,101,99,116,111,114,226,165,142,7,3,76,101,102,116,84,101,101,226,138,163,12,3,76,
101,102,116,84,101,101,65,114,114,111,119,226,134,164,13,3,76,101,102,116,84,101,101,86,
101,99,116,111,114,226,165,154,12,3,76,101,102,116,84,114,105,97,110,103,108,101,226,138,
178,15,3,76,101,102,116,84,114,105,97,110,103,108,101,66,97,114,226,167,143,17,3,76,
101,102,116,84,114,105,97,110,103,108,101,69,113,117,97,108,226,138,180,16,3,76,101,102,
116,85,112,68,111,119,110,86,101,99,116,111,114,226,165,145,15,3,76,101,102,116,85,112,
84,101,101,86,101,99,116,111,114,226,165,160,12,3,76,101,102,116,85,112,86,101,99,116,
111,114,226,134,191,15,3,76,101,102,116,85,112,86,101,99,116,111,114,66,97,114,226,165,
152,10,3,76,101,102,116,86,101,99,116,111,114,226,134,188,13,3,76,101,102,116,86,101,
99,116,111,114,66,97,114,226,165,146,9,3,76,101,102,116,97,114,114,111,119,226,135,144,
14,3,76,101,102,116,114,105,103,104,116,97,114,114,111,119,226,135,148,16,3,76,101,115,
115,69,113,117,97,108,71,114,101,97,116,101,114,226,139,154,13,3,76,101,115,115,70,117,
108,108,69,113,117,97,108,226,137,166,11,3,76,101,115,115,71,114,101,97,116,101,114,226,
137,182,8,3,76,101,115,115,76,101,115,115,226,170,161,14,3,76,101,115,115,83,108,97,
110,116,69,113,117,97,108,226,169,189,9,3,76,101,115,115,84,105,108,100,101,226,137,178,
3,4,76,102,114,240,157,148,143,2,3,76,108,226,139,152,10,3,76,108,101,102,116,97,
114,114,111,119,226,135,154,6,2,76,109,105,100,111,116,196,191,13,3,76,111,110,103,76,
101,102,116,65,114,114,111,119,226,159,181,18,3,76,111,110,103,76,101,102,116,82,105,103,
104,116,65,114,114,111,119,226,159,183,14,3,76,111,110,103,82,105,103,104,116,65,114,114,
111,119,226,159,182,13,3,76,111,110,103,108,101,102,116,97,114,114,111,119,226,159,184,18,
3,76,111,110,103,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,159,186,14,3,
76,111,110,103,114,105,103,104,116,97,114,114,111,119,226,159,185,4,4,76,111,112,102,240,
157,149,131,14,3,76,111,119,101,114,76,101,102,116,65,114,114,111,119,226,134,153,15,3,
76,111,119,101,114,82,105,103,104,116,65,114,114,111,119,226,134,152,4,3,76,115,99,114,
226,132,146,3,3,76,115,104,226,134,176,6,2,76,115,116,114,111,107,197,129,2,3,76,
116,226,137,170,3,3,77,97,112,226,164,133,3,2,77,99,121,208,156,11,3,77,101,100,
105,117,109,83,112,97,99,101,226,129,159,9,3,77,101,108,108,105,110,116,114,102,226,132,
179,3,4,77,102,114,240,157,148,144,9,3,77,105,110,117,115,80,108,117,115,226,136,147,
4,4,77,111,112,102,240,157,149,132,4,3,77,115,99,114,226,132,179,2,2,77,117,206,
156,4,2,78,74,99,121,208,138,6,2,78,97,99,117,116,101,197,131,6,2,78,99,97,
114,111,110,197,135,6,2,78,99,101,100,105,108,197,133,3,2,78,99,121,208,157,19,3,
78,101,103,97,116,105,118,101,77,101,100,105,117,109,83,112,97,99,101,226,128,139,18,3,
78,101,103,97,116,105,118,101,84,104,105,99,107,83,112,97,99,101,226,128,139,17,3,78,
101,103,97,116,105,118,101,84,104,105,110,83,112,97,99,101,226,128,139,21,3,78,101,103,
97,116,105,118,101,86,101,114,121,84,104,105,110,83,112,97,99,101,226,128,139,20,3,78,
101,115,116,101,100,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,137,171,14,3,
78,101,115,116,101,100,76,101,115,115,76,101,115,115,226,137,170,7,1,78,101,119,76,105,
110,101,10,3,4,78,102,114,240,157,148,145,7,3,78,111,66,114,101,97,107,226,129,160,
16,2,78,111,110,66,114,101,97,107,105,110,103,83,112,97,99,101,194,160,4,3,78,111,
112,102,226,132,149,3,3,78,111,116,226,171,172,12,3,78,111,116,67,111,110,103,114,117,
101,110,116,226,137,162,9,3,78,111,116,67,117,112,67,97,112,226,137,173,20,3,78,111,
116,68,111,117,98,108,101,86,101,114,116,105,99,97,108,66,97,114,226,136,166,10,3,78,
111,116,69,108,101,109,101,110,116,226,136,137,8,3,78,111,116,69,113,117,97,108,226,137,
160,13,5,78,111,116,69,113,117,97,108,84,105,108,100,101,226,137,130,204,184,9,3,78,
111,116,69,120,105,115,116,115,226,136,132,10,3,78,111,116,71,114,101,97,116,101,114,226,
137,175,15,3,78,111,116,71,114,101,97,116,101,114,69,113,117,97,108,226,137,177,19,5,
78,111,116,71,114,101,97,116,101,114,70,117,108,108,69,113,117,97,108,226,137,167,204,184,
17,5,78,111,116,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,137,171,204,184,
14,3,78,111,116,71,114,101,97,116,101,114,76,101,115,115,226,137,185,20,5,78,111,116,
71,114,101,97,116,101,114,83,108,97,110,116,69,113,117,97,108,226,169,190,204,184,15,3,
78,111,116,71,114,101,97,116,101,114,84,105,108,100,101,226,137,181,15,5,78,111,116,72,
117,109,112,68,111,119,110,72,117,109,112,226,137,142,204,184,12,5,78,111,116,72,117,109,
112,69,113,117,97,108,226,137,143,204,184,15,3,78,111,116,76,101,102,116,84,114,105,97,
110,103,108,101,226,139,170,18,5,78,111,116,76,101,102,116,84,114,105,97,110,103,108,101,
66,97,114,226,167,143,204,184,20,3,78,111,116,76,101,102,116,84,114,105,97,110,103,108,
101,69,113,117,97,108,226,139,172,7,3,78,111,116,76,101,115,115,226,137,174,12,3,78,
111,116,76,101,115,115,69,113,117,97,108,226,137,176,14,3,78,111,116,76,101,115,115,71,
114,101,97,116,101,114,226,137,184,11,5,78,111,116,76,101,115,115,76,101,115,115,226,137,
170,204,184,17,5,78,111,116,76,101,115,115,83,108,97,110,116,69,113,117,97,108,226,169,
189,204,184,12,3,78,111,116,76,101,115,115,84,105,108,100,101,226,137,180,23,5,78,111,
116,78,101,115,116,101,100,71,114,101,97,116,101,114,71,114,101,97,116,101,114,226,170,162,
204,184,17,5,78,111,116,78,101,115,116,101,100,76,101,115,115,76,101,115,115,226,170,161,
204,184,11,3,78,111,116,80,114,101,99,101,100,101,115,226,138,128,16,5,78,111,116,80,
114,101,99,101,100,101,115,69,113,117,97,108,226,170,175,204,184,21,3,78,111,116,80,114,
101,99,101,100,101,115,83,108,97,110,116,69,113,117,97,108,226,139,160,17,3,78,111,116,
82,101,118,101,114,115,101,69,108,101,109,101,110,116,226,136,140,16,3,78,111,116,82,105,
103,104,116,84,114,105,97,110,103,108,101,226,139,171,19,5,78,111,116,82,105,103,104,116,
84,114,105,97,110,103,108,101,66,97,114,226,167,144,204,184,21,3,78,111,116,82,105,103,
104,116,84,114,105,97,110,103,108,101,69,113,117,97,108,226,139,173,15,5,78,111,116,83,
113,117,97,114,101,83,117,98,115,101,116,226,138,143,204,184,20,3,78,111,116,83,113,117,
97,114,101,83,117,98,115,101,116,69,113,117,97,108,226,139,162,17,5,78,111,116,83,113,
117,97,114,101,83,117,112,101,114,115,101,116,226,138,144,204,184,22,3,78,111,116,83,113,
117,97,114,101,83,117,112,101,114,115,101,116,69,113,117,97,108,226,139,163,9,6,78,111,
116,83,117,98,115,101,116,226,138,130,226,131,146,14,3,78,111,116,83,117,98,115,101,116,
69,113,117,97,108,226,138,136,11,3,78,111,116,83,117,99,99,101,101,100,115,226,138,129,
16,5,78,111,116,83,117,99,99,101,101,100,115,69,113,117,97,108,226,170,176,204,184,21,
3,78,111,116,83,117,99,99,101,101,100,115,83,108,97,110,116,69,113,117,97,108,226,139,
161,16,5,78,111,116,83,117,99,99,101,101,100,115,84,105,108,100,101,226,137,191,204,184,
11,6,78,111,116,83,117,112,101,114,115,101,116,226,138,131,226,131,146,16,3,78,111,116,
83,117,112,101,114,115,101,116,69,113,117,97,108,226,138,137,8,3,78,111,116,84,105,108,
100,101,226,137,129,13,3,78,111,116,84,105,108,100,101,69,113,117,97,108,226,137,132,17,
3,78,111,116,84,105,108,100,101,70,117,108,108,69,113,117,97,108,226,137,135,13,3,78,
111,116,84,105,108,100,101,84,105,108,100,101,226,137,137,14,3,78,111,116,86,101,114,116,
105,99,97,108,66,97,114,226,136,164,4,4,78,115,99,114,240,157,146,169,2,2,78,117,
206,157,3,2,79,99,121,208,158,6,2,79,100,98,108,97,99,197,144,3,4,79,102,114,
240,157,148,146,5,2,79,109,97,99,114,197,140,5,2,79,109,101,103,97,206,169,7,2,
79,109,105,99,114,111,110,206,159,4,4,79,111,112,102,240,157,149,134,20,3,79,112,101,
110,67,117,114,108,121,68,111,117,98,108,101,81,117,111,116,101,226,128,156,14,3,79,112,
101,110,67,117,114,108,121,81,117,111,116,101,226,128,152,2,3,79,114,226,169,148,4,4,
79,115,99,114,240,157,146,170,6,3,79,116,105,109,101,115,226,168,183,7,3,79,118,101,
114,66,97,114,226,128,190,9,3,79,118,101,114,66,114,97,99,101,226,143,158,11,3,79,
118,101,114,66,114,97,99,107,101,116,226,142,180,15,3,79,118,101,114,80,97,114,101,110,
116,104,101,115,105,115,226,143,156,8,3,80,97,114,116,105,97,108,68,226,136,130,3,2,
80,99,121,208,159,3,4,80,102,114,240,157,148,147,3,2,80,104,105,206,166,2,2,80,
105,206,160,9,2,80,108,117,115,77,105,110,117,115,194,177,13,3,80,111,105,110,99,97,
114,101,112,108,97,110,101,226,132,140,4,3,80,111,112,102,226,132,153,2,3,80,114,226,
170,187,8,3,80,114,101,99,101,100,101,115,226,137,186,13,3,80,114,101,99,101,100,101,
115,69,113,117,97,108,226,170,175,18,3,80,114,101,99,101,100,101,115,83,108,97,110,116,
69,113,117,97,108,226,137,188,13,3,80,114,101,99,101,100,101,115,84,105,108,100,101,226,
137,190,7,3,80,114,111,100,117,99,116,226,136,143,10,3,80,114,111,112,111,114,116,105,
111,110,226,136,183,12,3,80,114,111,112,111,114,116,105,111,110,97,108,226,136,157,4,4,
80,115,99,114,240,157,146,171,3,2,80,115,105,206,168,3,4,81,102,114,240,157,148,148,
4,3,81,111,112,102,226,132,154,4,4,81,115,99,114,240,157,146,172,5,3,82,66,97,
114,114,226,164,144,6,2,82,97,99,117,116,101,197,148,4,3,82,97,110,103,226,159,171,
4,3,82,97,114,114,226,134,160,6,3,82,97,114,114,116,108,226,164,150,6,2,82,99,
97,114,111,110,197,152,6,2,82,99,101,100,105,108,197,150,3,2,82,99,121,208,160,2,
3,82,101,226,132,156,14,3,82,101,118,101,114,115,101,69,108,101,109,101,110,116,226,136,
139,18,3,82,101,118,101,114,115,101,69,113,117,105,108,105,98,114,105,117,109,226,135,139,
20,3,82,101,118,101,114,115,101,85,112,69,113,117,105,108,105,98,114,105,117,109,226,165,
175,3,3,82,102,114,226,132,156,3,2,82,104,111,206,161,17,3,82,105,103,104,116,65,
110,103,108,101,66,114,97,99,107,101,116,226,159,169,10,3,82,105,103,104,116,65,114,114,
111,119,226,134,146,13,3,82,105,103,104,116,65,114,114,111,119,66,97,114,226,135,165,19,
3,82,105,103,104,116,65,114,114,111,119,76,101,102,116,65,114,114,111,119,226,135,132,12,
3,82,105,103,104,116,67,101,105,108,105,110,103,226,140,137,18,3,82,105,103,104,116,68,
111,117,98,108,101,66,114,97,99,107,101,116,226,159,167,18,3,82,105,103,104,116,68,111,
119,110,84,101,101,86,101,99,116,111,114,226,165,157,15,3,82,105,103,104,116,68,111,119,
110,86,101,99,116,111,114,226,135,130,18,3,82,105,103,104,116,68,111,119,110,86,101,99,
116,111,114,66,97,114,226,165,149,10,3,82,105,103,104,116,70,108,111,111,114,226,140,139,
8,3,82,105,103,104,116,84,101,101,226,138,162,13,3,82,105,103,104,116,84,101,101,65,
114,114,111,119,226,134,166,14,3,82,105,103,104,116,84,101,101,86,101,99,116,111,114,226,
165,155,13,3,82,105,103,104,116,84,114,105,97,110,103,108,101,226,138,179,16,3,82,105,
103,104,116,84,114,105,97,110,103,108,101,66,97,114,226,167,144,18,3,82,105,103,104,116,
84,114,105,97,110,103,108,101,69,113,117,97,108,226,138,181,17,3,82,105,103,104,116,85,
112,68,111,119,110,86,101,99,116,111,114,226,165,143,16,3,82,105,103,104,116,85,112,84,
101,101,86,101,99,116,111,114,226,165,156,13,3,82,105,103,104,116,85,112,86,101,99,116,
111,114,226,134,190,16,3,82,105,103,104,116,85,112,86,101,99,116,111,114,66,97,114,226,
165,148,11,3,82,105,103,104,116,86,101,99,116,111,114,226,135,128,14,3,82,105,103,104,
116,86,101,99,116,111,114,66,97,114,226,165,147,10,3,82,105,103,104,116,97,114,114,111,
119,226,135,146,4,3,82,111,112,102,226,132,157,12,3,82,111,117,110,100,73,109,112,108,
105,101,115,226,165,176,11,3,82,114,105,103,104,116,97,114,114,111,119,226,135,155,4,3,
82,115,99,114,226,132,155,3,3,82,115,104,226,134,177,11,3,82,117,108,101,68,101,108,
97,121,101,100,226,167,180,6,2,83,72,67,72,99,121,208,169,4,2,83,72,99,121,208,
168,6,2,83,79,70,84,99,121,208,172,6,2,83,97,99,117,116,101,197,154,2,3,83,
99,226,170,188,6,2,83,99,101,100,105,108,197,158,5,2,83,99,105,114,99,197,156,3,
2,83,99,121,208,161,3,4,83,102,114,240,157,148,150,14,3,83,104,111,114,116,68,111,
119,110,65,114,114,111,119,226,134,147,14,3,83,104,111,114,116,76,101,102,116,65,114,114,
111,119,226,134,144,15,3,83,104,111,114,116,82,105,103,104,116,65,114,114,111,119,226,134,
146,12,3,83,104,111,114,116,85,112,65,114,114,111,119,226,134,145,5,2,83,105,103,109,
97,206,163,11,3,83,109,97,108,108,67,105,114,99,108,101,226,136,152,4,4,83,111,112,
102,240,157,149,138,4,3,83,113,114,116,226,136,154,6,3,83,113,117,97,114,101,226,150,
161,18,3,83,113,117,97,114,101,73,110,116,101,114,115,101,99,116,105,111,110,226,138,147,
12,3,83,113,117,97,114,101,83,117,98,115,101,116,226,138,143,17,3,83,113,117,97,114,
101,83,117,98,115,101,116,69,113,117,97,108,226,138,145,14,3,83,113,117,97,114,101,83,
117,112,101,114,115,101,116,226,138,144,19,3,83,113,117,97,114,101,83,117,112,101,114,115,
101,116,69,113,117,97,108,226,138,146,11,3,83,113,117,97,114,101,85,110,105,111,110,226,
138,148,4,4,83,115,99,114,240,157,146,174,4,3,83,116,97,114,226,139,134,3,3,83,
117,98,226,139,144,6,3,83,117,98,115,101,116,226,139,144,11,3,83,117,98,115,101,116,
69,113,117,97,108,226,138,134,8,3,83,117,99,99,101,101,100,115,226,137,187,13,3,83,
117,99,99,101,101,100,115,69,113,117,97,108,226,170,176,18,3,83,117,99,99,101,101,100,
115,83,108,97,110,116,69,113,117,97,108,226,137,189,13,3,83,117,99,99,101,101,100,115,
84,105,108,100,101,226,137,191,8,3,83,117,99,104,84,104,97,116,226,136,139,3,3,83,
117,109,226,136,145,3,3,83,117,112,226,139,145,8,3,83,117,112,101,114,115,101,116,226,
138,131,13,3,83,117,112,101,114,115,101,116,69,113,117,97,108,226,138,135,6,3,83,117,
112,115,101,116,226,139,145,5,3,84,82,65,68,69,226,132,162,5,2,84,83,72,99,121,
208,139,4,2,84,83,99,121,208,166,3,1,84,97,98,9,3,2,84,97,117,206,164,6,
2,84,99,97,114,111,110,197,164,6,2,84,99,101,100,105,108,197,162,3,2,84,99,121,
208,162,3,4,84,102,114,240,157,148,151,9,3,84,104,101,114,101,102,111,114,101,226,136,
180,5,2,84,104,101,116,97,206,152,10,6,84,104,105,99,107,83,112,97,99,101,226,129,
159,226,128,138,9,3,84,104,105,110,83,112,97,99,101,226,128,137,5,3,84,105,108,100,
101,226,136,188,10,3,84,105,108,100,101,69,113,117,97,108,226,137,131,14,3,84,105,108,
100,101,70,117,108,108,69,113,117,97,108,226,137,133,10,3,84,105,108,100,101,84,105,108,
100,101,226,137,136,4,4,84,111,112,102,240,157,149,139,9,3,84,114,105,112,108,101,68,
111,116,226,131,155,4,4,84,115,99,114,240,157,146,175,6,2,84,115,116,114,111,107,197,
166,4,3,85,97,114,114,226,134,159,8,3,85,97,114,114,111,99,105,114,226,165,137,5,
2,85,98,114,99,121,208,142,6,2,85,98,114,101,118,101,197,172,3,2,85,99,121,208,
163,6,2,85,100,98,108,97,99,197,176,3,4,85,102,114,240,157,148,152,5,2,85,109,
97,99,114,197,170,8,1,85,110,100,101,114,66,97,114,95,10,3,85,110,100,101,114,66,
114,97,99,101,226,143,159,12,3,85,110,100,101,114,66,114,97,99,107,101,116,226,142,181,
16,3,85,110,100,101,114,80,97,114,101,110,116,104,101,115,105,115,226,143,157,5,3,85,
110,105,111,110,226,139,131,9,3,85,110,105,111,110,80,108,117,115,226,138,142,5,2,85,
111,103,111,110,197,178,4,4,85,111,112,102,240,157,149,140,7,3,85,112,65,114,114,111,
119,226,134,145,10,3,85,112,65,114,114,111,119,66,97,114,226,164,146,16,3,85,112,65,
114,114,111,119,68,111,119,110,65,114,114,111,119,226,135,133,11,3,85,112,68,111,119,110,
65,114,114,111,119,226,134,149,13,3,85,112,69,113,117,105,108,105,98,114,105,117,109,226,
165,174,5,3,85,112,84,101,101,226,138,165,10,3,85,112,84,101,101,65,114,114,111,119,
226,134,165,7,3,85,112,97,114,114,111,119,226,135,145,11,3,85,112,100,111,119,110,97,
114,114,111,119,226,135,149,14,3,85,112,112,101,114,76,101,102,116,65,114,114,111,119,226,
134,150,15,3,85,112,112,101,114,82,105,103,104,116,65,114,114,111,119,226,134,151,4,2,
85,112,115,105,207,146,7,2,85,112,115,105,108,111,110,206,165,5,2,85,114,105,110,103,
197,174,4,4,85,115,99,114,240,157,146,176,6,2,85,116,105,108,100,101,197,168,5,3,
86,68,97,115,104,226,138,171,4,3,86,98,97,114,226,171,171,3,2,86,99,121,208,146,
5,3,86,100,97,115,104,226,138,169,6,3,86,100,97,115,104,108,226,171,166,3,3,86,
101,101,226,139,129,6,3,86,101,114,98,97,114,226,128,150,4,3,86,101,114,116,226,128,
150,11,3,86,101,114,116,105,99,97,108,66,97,114,226,136,163,12,1,86,101,114,116,105,
99,97,108,76,105,110,101,124,17,3,86,101,114,116,105,99,97,108,83,101,112,97,114,97,
116,111,114,226,157,152,13,3,86,101,114,116,105,99,97,108,84,105,108,100,101,226,137,128,
13,3,86,101,114,121,84,104,105,110,83,112,97,99,101,226,128,138,3,4,86,102,114,240,
157,148,153,4,4,86,111,112,102,240,157,149,141,4,4,86,115,99,114,240,157,146,177,6,
3,86,118,100,97,115,104,226,138,170,5,2,87,99,105,114,99,197,180,5,3,87,101,100,
103,101,226,139,128,3,4,87,102,114,240,157,148,154,4,4,87,111,112,102,240,157,149,142,
4,4,87,115,99,114,240,157,146,178,3,4,88,102,114,240,157,148,155,2,2,88,105,206,
158,4,4,88,111,112,102,240,157,149,143,4,4,88,115,99,114,240,157,146,179,4,2,89,
65,99,121,208,175,4,2,89,73,99,121,208,135,4,2,89,85,99,121,208,174,5,2,89,
99,105,114,99,197,182,3,2,89,99,121,208,171,3,4,89,102,114,240,157,148,156,4,4,
89,111,112,102,240,157,149,144,4,4,89,115,99,114,240,157,146,180,4,2,90,72,99,121,
208,150,6,2,90,97,99,117,116,101,197,185,6,2,90,99,97,114,111,110,197,189,3,2,
90,99,121,208,151,4,2,90,100,111,116,197,187,14,3,90,101,114,111,87,105,100,116,104,
83,112,97,99,101,226,128,139,4,2,90,101,116,97,206,150,3,3,90,102,114,226,132,168,
4,3,90,111,112,102,226,132,164,4,4,90,115,99,114,240,157,146,181,6,2,97,98,114,
101,118,101,196,131,2,3,97,99,226,136,190,3,5,97,99,69,226,136,190,204,179,3,3,
97,99,100,226,136,191,3,2,97,99,121,208,176,2,3,97,102,226,129,161,3,4,97,102,
114,240,157,148,158,7,3,97,108,101,102,115,121,109,226,132,181,5,3,97,108,101,112,104,
226,132,181,5,2,97,109,97,99,114,196,129,5,3,97,109,97,108,103,226,168,191,3,3,
97,110,100,226,136,167,6,3,97,110,100,97,110,100,226,169,149,4,3,97,110,100,100,226,
169,156,8,3,97,110,100,115,108,111,112,101,226,169,152,4,3,97,110,100,118,226,169,154,
3,3,97,110,103,226,136,160,4,3,97,110,103,101,226,166,164,5,3,97,110,103,108,101,
226,136,160,6,3,97,110,103,109,115,100,226,136,161,8,3,97,110,103,109,115,100,97,97,
226,166,168,8,3,97,110,103,109,115,100,97,98,226,166,169,8,3,97,110,103,109,115,100,
97,99,226,166,170,8,3,97,110,103,109,115,100,97,100,226,166,171,8,3,97,110,103,109,
115,100,97,101,226,166,172,8,3,97,110,103,109,115,100,97,102,226,166,173,8,3,97,110,
103,109,115,100,97,103,226,166,174,8,3,97,110,103,109,115,100,97,104,226,166,175,5,3,
97,110,103,114,116,226,136,159,7,3,97,110,103,114,116,118,98,226,138,190,8,3,97,110,
103,114,116,118,98,100,226,166,157,6,3,97,110,103,115,112,104,226,136,162,5,2,97,110,
103,115,116,195,133,7,3,97,110,103,122,97,114,114,226,141,188,5,2,97,111,103,111,110,
196,133,4,4,97,111,112,102,240,157,149,146,2,3,97,112,226,137,136,3,3,97,112,69,
226,169,176,6,3,97,112,97,99,105,114,226,169,175,3,3,97,112,101,226,137,138,4,3,
97,112,105,100,226,137,139,6,3,97,112,112,114,111,120,226,137,136,8,3,97,112,112,114,
111,120,101,113,226,137,138,4,4,97,115,99,114,240,157,146,182,3,1,97,115,116,42,7,
3,97,115,121,109,112,101,113,226,137,141,8,3,97,119,99,111,110,105,110,116,226,136,179,
5,3,97,119,105,110,116,226,168,145,4,3,98,78,111,116,226,171,173,8,3,98,97,99,
107,99,111,110,103,226,137,140,11,2,98,97,99,107,101,112,115,105,108,111,110,207,182,9,
3,98,97,99,107,112,114,105,109,101,226,128,181,7,3,98,97,99,107,115,105,109,226,136,
189,9,3,98,97,99,107,115,105,109,101,113,226,139,141,6,3,98,97,114,118,101,101,226,
138,189,6,3,98,97,114,119,101,100,226,140,133,8,3,98,97,114,119,101,100,103,101,226,
140,133,4,3,98,98,114,107,226,142,181,8,3,98,98,114,107,116,98,114,107,226,142,182,
5,3,98,99,111,110,103,226,137,140,3,2,98,99,121,208,177,6,3,98,101,99,97,117,
115,226,136,181,7,3,98,101,99,97,117,115,101,226,136,181,7,3,98,101,109,112,116,121,
118,226,166,176,5,2,98,101,112,115,105,207,182,6,3,98,101,114,110,111,117,226,132,172,
4,3,98,101,116,104,226,132,182,7,3,98,101,116,119,101,101,110,226,137,172,3,4,98,
102,114,240,157,148,159,6,3,98,105,103,99,97,112,226,139,130,7,3,98,105,103,99,105,
114,99,226,151,175,6,3,98,105,103,99,117,112,226,139,131,7,3,98,105,103,111,100,111,
116,226,168,128,8,3,98,105,103,111,112,108,117,115,226,168,129,9,3,98,105,103,111,116,
105,109,101,115,226,168,130,8,3,98,105,103,115,113,99,117,112,226,168,134,7,3,98,105,
103,115,116,97,114,226,152,133,15,3,98,105,103,116,114,105,97,110,103,108,101,100,111,119,
110,226,150,189,13,3,98,105,103,116,114,105,97,110,103,108,101,117,112,226,150,179,8,3,
98,105,103,117,112,108,117,115,226,168,132,6,3,98,105,103,118,101,101,226,139,129,8,3,
98,105,103,119,101,100,103,101,226,139,128,6,3,98,107,97,114,111,119,226,164,141,12,3,
98,108,97,99,107,108,111,122,101,110,103,101,226,167,171,11,3,98,108,97,99,107,115,113,
117,97,114,101,226,150,170,13,3,98,108,97,99,107,116,114,105,97,110,103,108,101,226,150,
180,17,3,98,108,97,99,107,116,114,105,97,110,103,108,101,100,111,119,110,226,150,190,17,
3,98,108,97,99,107,116,114,105,97,110,103,108,101,108,101,102,116,226,151,130,18,3,98,
108,97,99,107,116,114,105,97,110,103,108,101,114,105,103,104,116,226,150,184,5,3,98,108,
97,110,107,226,144,163,5,3,98,108,107,49,50,226,150,146,5,3,98,108,107,49,52,226,
150,145,5,3,98,108,107,51,52,226,150,147,5,3,98,108,111,99,107,226,150,136,3,4,
98,110,101,61,226,131,165,7,6,98,110,101,113,117,105,118,226,137,161,226,131,165,4,3,
98,110,111,116,226,140,144,4,4,98,111,112,102,240,157,149,147,3,3,98,111,116,226,138,
165,6,3,98,111,116,116,111,109,226,138,165,6,3,98,111,119,116,105,101,226,139,136,5,
3,98,111,120,68,76,226,149,151,5,3,98,111,120,68,82,226,149,148,5,3,98,111,120,
68,108,226,149,150,5,3,98,111,120,68,114,226,149,147,4,3,98,111,120,72,226,149,144,
5,3,98,111,120,72,68,226,149,166,5,3,98,111,120,72,85,226,149,169,5,3,98,111,
120,72,100,226,149,164,5,3,98,111,120,72,117,226,149,167,5,3,98,111,120,85,76,226,
149,157,5,3,98,111,120,85,82,226,149,154,5,3,98,111,120,85,108,226,149,156,5,3,
98,111,120,85,114,226,149,153,4,3,98,111,120,86,226,149,145,5,3,98,111,120,86,72,
226,149,172,5,3,98,111,120,86,76,226,149,163,5,3,98,111,120,86,82,226,149,160,5,
3,98,111,120,86,104,226,149,171,5,3,98,111,120,86,108,226,149,162,5,3,98,111,120,
86,114,226,149,159,6,3,98,111,120,98,111,120,226,167,137,5,3,98,111,120,100,76,226,
149,149,5,3,98,111,120,100,82,226,149,146,5,3,98,111,120,100,108,226,148,144,5,3,
98,111,120,100,114,226,148,140,4,3,98,111,120,104,226,148,128,5,3,98,111,120,104,68,
226,149,165,5,3,98,111,120,104,85,226,149,168,5,3,98,111,120,104,100,226,148,172,5,
3,98,111,120,104,117,226,148,180,8,3,98,111,120,109,105,110,117,115,226,138,159,7,3,
98,111,120,112,108,117,115,226,138,158,8,3,98,111,120,116,105,109,101,115,226,138,160,5,
3,98,111,120,117,76,226,149,155,5,3,98,111,120,117,82,226,149,152,5,3,98,111,120,
117,108,226,148,152,5,3,98,111,120,117,114,226,148,148,4,3,98,111,120,118,226,148,130,
5,3,98,111,120,118,72,226,149,170,5,3,98,111,120,118,76,226,149,161,5,3,98,111,
120,118,82,226,149,158,5,3,98,111,120,118,104,226,148,188,5,3,98,111,120,118,108,226,
148,164,5,3,98,111,120,118,114,226,148,156,6,3,98,112,114,105,109,101,226,128,181,5,
2,98,114,101,118,101,203,152,4,4,98,115,99,114,240,157,146,183,5,3,98,115,101,109,
105,226,129,143,4,3,98,115,105,109,226,136,189,5,3,98,115,105,109,101,226,139,141,4,
1,98,115,111,108,92,5,3,98,115,111,108,98,226,167,133,8,3,98,115,111,108,104,115,
117,98,226,159,136,6,3,98,117,108,108,101,116,226,128,162,4,3,98,117,109,112,226,137,
142,5,3,98,117,109,112,69,226,170,174,5,3,98,117,109,112,101,226,137,143,6,3,98,
117,109,112,101,113,226,137,143,6,2,99,97,99,117,116,101,196,135,3,3,99,97,112,226,
136,169,6,3,99,97,112,97,110,100,226,169,132,8,3,99,97,112,98,114,99,117,112,226,
169,137,6,3,99,97,112,99,97,112,226,169,139,6,3,99,97,112,99,117,112,226,169,135,
6,3,99,97,112,100,111,116,226,169,128,4,6,99,97,112,115,226,136,169,239,184,128,5,
3,99,97,114,101,116,226,129,129,5,2,99,97,114,111,110,203,135,5,3,99,99,97,112,
115,226,169,141,6,2,99,99,97,114,111,110,196,141,5,2,99,99,105,114,99,196,137,5,
3,99,99,117,112,115,226,169,140,7,3,99,99,117,112,115,115,109,226,169,144,4,2,99,
100,111,116,196,139,7,3,99,101,109,112,116,121,118,226,166,178,9,2,99,101,110,116,101,
114,100,111,116,194,183,3,4,99,102,114,240,157,148,160,4,2,99,104,99,121,209,135,3,
2,99,104,105,207,135,3,3,99,105,114,226,151,139,4,3,99,105,114,69,226,167,131,6,
3,99,105,114,99,101,113,226,137,151,15,3,99,105,114,99,108,101,97,114,114,111,119,108,
101,102,116,226,134,186,16,3,99,105,114,99,108,101,97,114,114,111,119,114,105,103,104,116,
226,134,187,8,2,99,105,114,99,108,101,100,82,194,174,8,3,99,105,114,99,108,101,100,
83,226,147,136,10,3,99,105,114,99,108,101,100,97,115,116,226,138,155,11,3,99,105,114,
99,108,101,100,99,105,114,99,226,138,154,11,3,99,105,114,99,108,101,100,100,97,115,104,
226,138,157,4,3,99,105,114,101,226,137,151,8,3,99,105,114,102,110,105,110,116,226,168,
144,6,3,99,105,114,109,105,100,226,171,175,7,3,99,105,114,115,99,105,114,226,167,130,
8,3,99,108,117,98,115,117,105,116,226,153,163,5,1,99,111,108,111,110,58,6,3,99,
111,108,111,110,101,226,137,148,7,3,99,111,108,111,110,101,113,226,137,148,5,1,99,111,
109,109,97,44,6,1,99,111,109,109,97,116,64,4,3,99,111,109,112,226,136,129,6,3,
99,111,109,112,102,110,226,136,152,10,3,99,111,109,112,108,101,109,101,110,116,226,136,129,
9,3,99,111,109,112,108,101,120,101,115,226,132,130,4,3,99,111,110,103,226,137,133,7,
3,99,111,110,103,100,111,116,226,169,173,6,3,99,111,110,105,110,116,226,136,174,4,4,
99,111,112,102,240,157,149,148,6,3,99,111,112,114,111,100,226,136,144,6,3,99,111,112,
121,115,114,226,132,151,5,3,99,114,97,114,114,226,134,181,4,4,99,115,99,114,240,157,
146,184,4,3,99,115,117,98,226,171,143,5,3,99,115,117,98,101,226,171,145,4,3,99,
115,117,112,226,171,144,5,3,99,115,117,112,101,226,171,146,5,3,99,116,100,111,116,226,
139,175,7,3,99,117,100,97,114,114,108,226,164,184,7,3,99,117,100,97,114,114,114,226,
164,181,5,3,99,117,101,112,114,226,139,158,5,3,99,117,101,115,99,226,139,159,6,3,
99,117,108,97,114,114,226,134,182,7,3,99,117,108,97,114,114,112,226,164,189,3,3,99,
117,112,226,136,170,8,3,99,117,112,98,114,99,97,112,226,169,136,6,3,99,117,112,99,
97,112,226,169,134,6,3,99,117,112,99,117,112,226,169,138,6,3,99,117,112,100,111,116,
226,138,141,5,3,99,117,112,111,114,226,169,133,4,6,99,117,112,115,226,136,170,239,184,
128,6,3,99,117,114,97,114,114,226,134,183,7,3,99,117,114,97,114,114,109,226,164,188,
11,3,99,117,114,108,121,101,113,112,114,101,99,226,139,158,11,3,99,117,114,108,121,101,
113,115,117,99,99,226,139,159,8,3,99,117,114,108,121,118,101,101,226,139,142,10,3,99,
117,114,108,121,119,101,100,103,101,226,139,143,14,3,99,117,114,118,101,97,114,114,111,119,
108,101,102,116,226,134,182,15,3,99,117,114,118,101,97,114,114,111,119,114,105,103,104,116,
226,134,183,5,3,99,117,118,101,101,226,139,142,5,3,99,117,119,101,100,226,139,143,8,
3,99,119,99,111,110,105,110,116,226,136,178,5,3,99,119,105,110,116,226,136,177,6,3,
99,121,108,99,116,121,226,140,173,4,3,100,65,114,114,226,135,147,4,3,100,72,97,114,
226,165,165,6,3,100,97,108,101,116,104,226,132,184,4,3,100,97,115,104,226,128,144,5,
3,100,97,115,104,118,226,138,163,7,3,100,98,107,97,114,111,119,226,164,143,5,2,100,
98,108,97,99,203,157,6,2,100,99,97,114,111,110,196,143,3,2,100,99,121,208,180,2,
3,100,100,226,133,134,7,3,100,100,97,103,103,101,114,226,128,161,5,3,100,100,97,114,
114,226,135,138,7,3,100,100,111,116,115,101,113,226,169,183,7,3,100,101,109,112,116,121,
118,226,166,177,6,3,100,102,105,115,104,116,226,165,191,3,4,100,102,114,240,157,148,161,
5,3,100,104,97,114,108,226,135,131,5,3,100,104,97,114,114,226,135,130,4,3,100,105,
97,109,226,139,132,7,3,100,105,97,109,111,110,100,226,139,132,11,3,100,105,97,109,111,
110,100,115,117,105,116,226,153,166,3,2,100,105,101,194,168,7,2,100,105,103,97,109,109,
97,207,157,5,3,100,105,115,105,110,226,139,178,3,2,100,105,118,195,183,13,3,100,105,
118,105,100,101,111,110,116,105,109,101,115,226,139,135,6,3,100,105,118,111,110,120,226,139,
135,4,2,100,106,99,121,209,146,6,3,100,108,99,111,114,110,226,140,158,6,3,100,108,
99,114,111,112,226,140,141,6,1,100,111,108,108,97,114,36,4,4,100,111,112,102,240,157,
149,149,3,2,100,111,116,203,153,5,3,100,111,116,101,113,226,137,144,8,3,100,111,116,
101,113,100,111,116,226,137,145,8,3,100,111,116,109,105,110,117,115,226,136,184,7,3,100,
111,116,112,108,117,115,226,136,148,9,3,100,111,116,115,113,117,97,114,101,226,138,161,14,
3,100,111,117,98,108,101,98,97,114,119,101,100,103,101,226,140,134,9,3,100,111,119,110,
97,114,114,111,119,226,134,147,14,3,100,111,119,110,100,111,119,110,97,114,114,111,119,115,
226,135,138,15,3,100,111,119,110,104,97,114,112,111,111,110,108,101,102,116,226,135,131,16,
3,100,111,119,110,104,97,114,112,111,111,110,114,105,103,104,116,226,135,130,8,3,100,114,
98,107,97,114,111,119,226,164,144,6,3,100,114,99,111,114,110,226,140,159,6,3,100,114,
99,114,111,112,226,140,140,4,4,100,115,99,114,240,157,146,185,4,2,100,115,99,121,209,
149,4,3,100,115,111,108,226,167,182,6,2,100,115,116,114,111,107,196,145,5,3,100,116,
100,111,116,226,139,177,4,3,100,116,114,105,226,150,191,5,3,100,116,114,105,102,226,150,
190,5,3,100,117,97,114,114,226,135,181,5,3,100,117,104,97,114,226,165,175,7,3,100,
119,97,110,103,108,101,226,166,166,4,2,100,122,99,121,209,159,8,3,100,122,105,103,114,
97,114,114,226,159,191,5,3,101,68,68,111,116,226,169,183,4,3,101,68,111,116,226,137,
145,6,3,101,97,115,116,101,114,226,169,174,6,2,101,99,97,114,111,110,196,155,4,3,
101,99,105,114,226,137,150,6,3,101,99,111,108,111,110,226,137,149,3,2,101,99,121,209,
141,4,2,101,100,111,116,196,151,2,3,101,101,226,133,135,5,3,101,102,68,111,116,226,
137,146,3,4,101,102,114,240,157,148,162,2,3,101,103,226,170,154,3,3,101,103,115,226,
170,150,6,3,101,103,115,100,111,116,226,170,152,2,3,101,108,226,170,153,8,3,101,108,
105,110,116,101,114,115,226,143,167,3,3,101,108,108,226,132,147,3,3,101,108,115,226,170,
149,6,3,101,108,115,100,111,116,226,170,151,5,2,101,109,97,99,114,196,147,5,3,101,
109,112,116,121,226,136,133,8,3,101,109,112,116,121,115,101,116,226,136,133,6,3,101,109,
112,116,121,118,226,136,133,6,3,101,109,115,112,49,51,226,128,132,6,3,101,109,115,112,
49,52,226,128,133,3,2,101,110,103,197,139,5,2,101,111,103,111,110,196,153,4,4,101,
111,112,102,240,157,149,150,4,3,101,112,97,114,226,139,149,6,3,101,112,97,114,115,108,
226,167,163,5,3,101,112,108,117,115,226,169,177,4,2,101,112,115,105,206,181,7,2,101,
112,115,105,108,111,110,206,181,5,2,101,112,115,105,118,207,181,6,3,101,113,99,105,114,
99,226,137,150,7,3,101,113,99,111,108,111,110,226,137,149,5,3,101,113,115,105,109,226,
137,130,10,3,101,113,115,108,97,110,116,103,116,114,226,170,150,11,3,101,113,115,108,97,
110,116,108,101,115,115,226,170,149,6,1,101,113,117,97,108,115,61,6,3,101,113,117,101,
115,116,226,137,159,7,3,101,113,117,105,118,68,68,226,169,184,8,3,101,113,118,112,97,
114,115,108,226,167,165,5,3,101,114,68,111,116,226,137,147,5,3,101,114,97,114,114,226,
165,177,4,3,101,115,99,114,226,132,175,5,3,101,115,100,111,116,226,137,144,4,3,101,
115,105,109,226,137,130,3,2,101,116,97,206,183,4,1,101,120,99,108,33,5,3,101,120,
105,115,116,226,136,131,11,3,101,120,112,101,99,116,97,116,105,111,110,226,132,176,12,3,
101,120,112,111,110,101,110,116,105,97,108,101,226,133,135,13,3,102,97,108,108,105,110,103,
100,111,116,115,101,113,226,137,146,3,2,102,99,121,209,132,6,3,102,101,109,97,108,101,
226,153,128,6,3,102,102,105,108,105,103,239,172,131,5,3,102,102,108,105,103,239,172,128,
6,3,102,102,108,108,105,103,239,172,132,3,4,102,102,114,240,157,148,163,5,3,102,105,
108,105,103,239,172,129,5,2,102,106,108,105,103,102,106,4,3,102,108,97,116,226,153,173,
5,3,102,108,108,105,103,239,172,130,5,3,102,108,116,110,115,226,150,177,4,4,102,111,
112,102,240,157,149,151,6,3,102,111,114,97,108,108,226,136,128,4,3,102,111,114,107,226,
139,148,5,3,102,111,114,107,118,226,171,153,8,3,102,112,97,114,116,105,110,116,226,168,
141,6,3,102,114,97,99,49,51,226,133,147,6,3,102,114,97,99,49,53,226,133,149,6,
3,102,114,97,99,49,54,226,133,153,6,3,102,114,97,99,49,56,226,133,155,6,3,102,
114,97,99,50,51,226,133,148,6,3,102,114,97,99,50,53,226,133,150,6,3,102,114,97,
99,51,53,226,133,151,6,3,102,114,97,99,51,56,226,133,156,6,3,102,114,97,99,52,
53,226,133,152,6,3,102,114,97,99,53,54,226,133,154,6,3,102,114,97,99,53,56,226,
133,157,6,3,102,114,97,99,55,56,226,133,158,5,3,102,114,97,115,108,226,129,132,5,
3,102,114,111,119,110,226,140,162,4,4,102,115,99,114,240,157,146,187,2,3,103,69,226,
137,167,3,3,103,69,108,226,170,140,6,2,103,97,99,117,116,101,199,181,6,2,103,97,
109,109,97,100,207,157,3,3,103,97,112,226,170,134,6,2,103,98,114,101,118,101,196,159,
5,2,103,99,105,114,99,196,157,3,2,103,99,121,208,179,4,2,103,100,111,116,196,161,
3,3,103,101,108,226,139,155,3,3,103,101,113,226,137,165,4,3,103,101,113,113,226,137,
167,8,3,103,101,113,115,108,97,110,116,226,169,190,3,3,103,101,115,226,169,190,5,3,
103,101,115,99,99,226,170,169,6,3,103,101,115,100,111,116,226,170,128,7,3,103,101,115,
100,111,116,111,226,170,130,8,3,103,101,115,100,111,116,111,108,226,170,132,4,6,103,101,
115,108,226,139,155,239,184,128,6,3,103,101,115,108,101,115,226,170,148,3,4,103,102,114,
240,157,148,164,2,3,103,103,226,137,171,3,3,103,103,103,226,139,153,5,3,103,105,109,
101,108,226,132,183,4,2,103,106,99,121,209,147,2,3,103,108,226,137,183,3,3,103,108,
69,226,170,146,3,3,103,108,97,226,170,165,3,3,103,108,106,226,170,164,3,3,103,110,
69,226,137,169,4,3,103,110,97,112,226,170,138,8,3,103,110,97,112,112,114,111,120,226,
170,138,3,3,103,110,101,226,170,136,4,3,103,110,101,113,226,170,136,5,3,103,110,101,
113,113,226,137,169,5,3,103,110,115,105,109,226,139,167,4,4,103,111,112,102,240,157,149,
152,5,1,103,114,97,118,101,96,4,3,103,115,99,114,226,132,138,4,3,103,115,105,109,
226,137,179,5,3,103,115,105,109,101,226,170,142,5,3,103,115,105,109,108,226,170,144,4,
3,103,116,99,99,226,170,167,5,3,103,116,99,105,114,226,169,186,5,3,103,116,100,111,
116,226,139,151,6,3,103,116,108,80,97,114,226,166,149,7,3,103,116,113,117,101,115,116,
226,169,188,9,3,103,116,114,97,112,112,114,111,120,226,170,134,6,3,103,116,114,97,114,
114,226,165,184,6,3,103,116,114,100,111,116,226,139,151,9,3,103,116,114,101,113,108,101,
115,115,226,139,155,10,3,103,116,114,101,113,113,108,101,115,115,226,170,140,7,3,103,116,
114,108,101,115,115,226,137,183,6,3,103,116,114,115,105,109,226,137,179,9,6,103,118,101,
114,116,110,101,113,113,226,137,169,239,184,128,4,6,103,118,110,69,226,137,169,239,184,128,
4,3,104,65,114,114,226,135,148,6,3,104,97,105,114,115,112,226,128,138,4,2,104,97,
108,102,194,189,6,3,104,97,109,105,108,116,226,132,139,6,2,104,97,114,100,99,121,209,
138,7,3,104,97,114,114,99,105,114,226,165,136,5,3,104,97,114,114,119,226,134,173,4,
3,104,98,97,114,226,132,143,5,2,104,99,105,114,99,196,165,9,3,104,101,97,114,116,
115,117,105,116,226,153,165,6,3,104,101,114,99,111,110,226,138,185,3,4,104,102,114,240,
157,148,165,8,3,104,107,115,101,97,114,111,119,226,164,165,8,3,104,107,115,119,97,114,
111,119,226,164,166,5,3,104,111,97,114,114,226,135,191,6,3,104,111,109,116,104,116,226,
136,187,13,3,104,111,111,107,108,101,102,116,97,114,114,111,119,226,134,169,14,3,104,111,
111,107,114,105,103,104,116,97,114,114,111,119,226,134,170,4,4,104,111,112,102,240,157,149,
153,6,3,104,111,114,98,97,114,226,128,149,4,4,104,115,99,114,240,157,146,189,6,3,
104,115,108,97,115,104,226,132,143,6,2,104,115,116,114,111,107,196,167,6,3,104,121,98,
117,108,108,226,129,131,6,3,104,121,112,104,101,110,226,128,144,2,3,105,99,226,129,163,
3,2,105,99,121,208,184,4,2,105,101,99,121,208,181,3,3,105,102,102,226,135,148,3,
4,105,102,114,240,157,148,166,2,3,105,105,226,133,136,6,3,105,105,105,105,110,116,226,
168,140,5,3,105,105,105,110,116,226,136,173,6,3,105,105,110,102,105,110,226,167,156,5,
3,105,105,111,116,97,226,132,169,5,2,105,106,108,105,103,196,179,5,2,105,109,97,99,
114,196,171,5,3,105,109,97,103,101,226,132,145,8,3,105,109,97,103,108,105,110,101,226,
132,144,8,3,105,109,97,103,112,97,114,116,226,132,145,5,2,105,109,97,116,104,196,177,
4,3,105,109,111,102,226,138,183,5,2,105,109,112,101,100,198,181,2,3,105,110,226,136,
136,6,3,105,110,99,97,114,101,226,132,133,8,3,105,110,102,105,110,116,105,101,226,167,
157,6,2,105,110,111,100,111,116,196,177,3,3,105,110,116,226,136,171,6,3,105,110,116,
99,97,108,226,138,186,8,3,105,110,116,101,103,101,114,115,226,132,164,8,3,105,110,116,
101,114,99,97,108,226,138,186,8,3,105,110,116,108,97,114,104,107,226,168,151,7,3,105,
110,116,112,114,111,100,226,168,188,4,2,105,111,99,121,209,145,5,2,105,111,103,111,110,
196,175,4,4,105,111,112,102,240,157,149,154,4,2,105,111,116,97,206,185,5,3,105,112,
114,111,100,226,168,188,4,4,105,115,99,114,240,157,146,190,4,3,105,115,105,110,226,136,
136,5,3,105,115,105,110,69,226,139,185,7,3,105,115,105,110,100,111,116,226,139,181,5,
3,105,115,105,110,115,226,139,180,6,3,105,115,105,110,115,118,226,139,179,5,3,105,115,
105,110,118,226,136,136,2,3,105,116,226,129,162,6,2,105,116,105,108,100,101,196,169,5,
2,105,117,107,99,121,209,150,5,2,106,99,105,114,99,196,181,3,2,106,99,121,208,185,
3,4,106,102,114,240,157,148,167,5,2,106,109,97,116,104,200,183,4,4,106,111,112,102,
240,157,149,155,4,4,106,115,99,114,240,157,146,191,6,2,106,115,101,114,99,121,209,152,
5,2,106,117,107,99,121,209,148,5,2,107,97,112,112,97,206,186,6,2,107,97,112,112,
97,118,207,176,6,2,107,99,101,100,105,108,196,183,3,2,107,99,121,208,186,3,4,107,
102,114,240,157,148,168,6,2,107,103,114,101,101,110,196,184,4,2,107,104,99,121,209,133,
4,2,107,106,99,121,209,156,4,4,107,111,112,102,240,157,149,156,4,4,107,115,99,114,
240,157,147,128,5,3,108,65,97,114,114,226,135,154,4,3,108,65,114,114,226,135,144,6,
3,108,65,116,97,105,108,226,164,155,5,3,108,66,97,114,114,226,164,142,2,3,108,69,
226,137,166,3,3,108,69,103,226,170,139,4,3,108,72,97,114,226,165,162,6,2,108,97,
99,117,116,101,196,186,8,3,108,97,101,109,112,116,121,118,226,166,180,6,3,108,97,103,
114,97,110,226,132,146,4,3,108,97,110,103,226,159,168,5,3,108,97,110,103,100,226,166,
145,6,3,108,97,110,103,108,101,226,159,168,3,3,108,97,112,226,170,133,5,3,108,97,
114,114,98,226,135,164,7,3,108,97,114,114,98,102,115,226,164,159,6,3,108,97,114,114,
102,115,226,164,157,6,3,108,97,114,114,104,107,226,134,169,6,3,108,97,114,114,108,112,
226,134,171,6,3,108,97,114,114,112,108,226,164,185,7,3,108,97,114,114,115,105,109,226,
165,179,6,3,108,97,114,114,116,108,226,134,162,3,3,108,97,116,226,170,171,6,3,108,
97,116,97,105,108,226,164,153,4,3,108,97,116,101,226,170,173,5,6,108,97,116,101,115,
226,170,173,239,184,128,5,3,108,98,97,114,114,226,164,140,5,3,108,98,98,114,107,226,
157,178,6,1,108,98,114,97,99,101,123,6,1,108,98,114,97,99,107,91,5,3,108,98,
114,107,101,226,166,139,7,3,108,98,114,107,115,108,100,226,166,143,7,3,108,98,114,107,
115,108,117,226,166,141,6,2,108,99,97,114,111,110,196,190,6,2,108,99,101,100,105,108,
196,188,5,3,108,99,101,105,108,226,140,136,4,1,108,99,117,98,123,3,2,108,99,121,
208,187,4,3,108,100,99,97,226,164,182,6,3,108,100,113,117,111,114,226,128,158,7,3,
108,100,114,100,104,97,114,226,165,167,8,3,108,100,114,117,115,104,97,114,226,165,139,4,
3,108,100,115,104,226,134,178,9,3,108,101,102,116,97,114,114,111,119,226,134,144,13,3,
108,101,102,116,97,114,114,111,119,116,97,105,108,226,134,162,15,3,108,101,102,116,104,97,
114,112,111,111,110,100,111,119,110,226,134,189,13,3,108,101,102,116,104,97,114,112,111,111,
110,117,112,226,134,188,14,3,108,101,102,116,108,101,102,116,97,114,114,111,119,115,226,135,
135,14,3,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,134,148,15,3,108,101,
102,116,114,105,103,104,116,97,114,114,111,119,115,226,135,134,17,3,108,101,102,116,114,105,
103,104,116,104,97,114,112,111,111,110,115,226,135,139,19,3,108,101,102,116,114,105,103,104,
116,115,113,117,105,103,97,114,114,111,119,226,134,173,14,3,108,101,102,116,116,104,114,101,
101,116,105,109,101,115,226,139,139,3,3,108,101,103,226,139,154,3,3,108,101,113,226,137,
164,4,3,108,101,113,113,226,137,166,8,3,108,101,113,115,108,97,110,116,226,169,189,3,
3,108,101,115,226,169,189,5,3,108,101,115,99,99,226,170,168,6,3,108,101,115,100,111,
116,226,169,191,7,3,108,101,115,100,111,116,111,226,170,129,8,3,108,101,115,100,111,116,
111,114,226,170,131,4,6,108,101,115,103,226,139,154,239,184,128,6,3,108,101,115,103,101,
115,226,170,147,10,3,108,101,115,115,97,112,112,114,111,120,226,170,133,7,3,108,101,115,
115,100,111,116,226,139,150,9,3,108,101,115,115,101,113,103,116,114,226,139,154,10,3,108,
101,115,115,101,113,113,103,116,114,226,170,139,7,3,108,101,115,115,103,116,114,226,137,182,
7,3,108,101,115,115,115,105,109,226,137,178,6,3,108,102,105,115,104,116,226,165,188,6,
3,108,102,108,111,111,114,226,140,138,3,4,108,102,114,240,157,148,169,2,3,108,103,226,
137,182,3,3,108,103,69,226,170,145,5,3,108,104,97,114,100,226,134,189,5,3,108,104,
97,114,117,226,134,188,6,3,108,104,97,114,117,108,226,165,170,5,3,108,104,98,108,107,
226,150,132,4,2,108,106,99,121,209,153,2,3,108,108,226,137,170,5,3,108,108,97,114,
114,226,135,135,8,3,108,108,99,111,114,110,101,114,226,140,158,6,3,108,108,104,97,114,
100,226,165,171,5,3,108,108,116,114,105,226,151,186,6,2,108,109,105,100,111,116,197,128,
6,3,108,109,111,117,115,116,226,142,176,10,3,108,109,111,117,115,116,97,99,104,101,226,
142,176,3,3,108,110,69,226,137,168,4,3,108,110,97,112,226,170,137,8,3,108,110,97,
112,112,114,111,120,226,170,137,3,3,108,110,101,226,170,135,4,3,108,110,101,113,226,170,
135,5,3,108,110,101,113,113,226,137,168,5,3,108,110,115,105,109,226,139,166,5,3,108,
111,97,110,103,226,159,172,5,3,108,111,97,114,114,226,135,189,5,3,108,111,98,114,107,
226,159,166,13,3,108,111,110,103,108,101,102,116,97,114,114,111,119,226,159,181,18,3,108,
111,110,103,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,159,183,10,3,108,111,
110,103,109,97,112,115,116,111,226,159,188,14,3,108,111,110,103,114,105,103,104,116,97,114,
114,111,119,226,159,182,13,3,108,111,111,112,97,114,114,111,119,108,101,102,116,226,134,171,
14,3,108,111,111,112,97,114,114,111,119,114,105,103,104,116,226,134,172,5,3,108,111,112,
97,114,226,166,133,4,4,108,111,112,102,240,157,149,157,6,3,108,111,112,108,117,115,226,
168,173,7,3,108,111,116,105,109,101,115,226,168,180,6,3,108,111,119,97,115,116,226,136,
151,6,1,108,111,119,98,97,114,95,7,3,108,111,122,101,110,103,101,226,151,138,4,3,
108,111,122,102,226,167,171,4,1,108,112,97,114,40,6,3,108,112,97,114,108,116,226,166,
147,5,3,108,114,97,114,114,226,135,134,8,3,108,114,99,111,114,110,101,114,226,140,159,
5,3,108,114,104,97,114,226,135,139,6,3,108,114,104,97,114,100,226,165,173,5,3,108,
114,116,114,105,226,138,191,4,4,108,115,99,114,240,157,147,129,3,3,108,115,104,226,134,
176,4,3,108,115,105,109,226,137,178,5,3,108,115,105,109,101,226,170,141,5,3,108,115,
105,109,103,226,170,143,4,1,108,115,113,98,91,6,3,108,115,113,117,111,114,226,128,154,
6,2,108,115,116,114,111,107,197,130,4,3,108,116,99,99,226,170,166,5,3,108,116,99,
105,114,226,169,185,5,3,108,116,100,111,116,226,139,150,6,3,108,116,104,114,101,101,226,
139,139,6,3,108,116,105,109,101,115,226,139,137,6,3,108,116,108,97,114,114,226,165,182,
7,3,108,116,113,117,101,115,116,226,169,187,6,3,108,116,114,80,97,114,226,166,150,4,
3,108,116,114,105,226,151,131,5,3,108,116,114,105,101,226,138,180,5,3,108,116,114,105,
102,226,151,130,8,3,108,117,114,100,115,104,97,114,226,165,138,7,3,108,117,114,117,104,
97,114,226,165,166,9,6,108,118,101,114,116,110,101,113,113,226,137,168,239,184,128,4,6,
108,118,110,69,226,137,168,239,184,128,5,3,109,68,68,111,116,226,136,186,4,3,109,97,
108,101,226,153,130,4,3,109,97,108,116,226,156,160,7,3,109,97,108,116,101,115,101,226,
156,160,3,3,109,97,112,226,134,166,6,3,109,97,112,115,116,111,226,134,166,10,3,109,
97,112,115,116,111,100,111,119,110,226,134,167,10,3,109,97,112,115,116,111,108,101,102,116,
226,134,164,8,3,109,97,112,115,116,111,117,112,226,134,165,6,3,109,97,114,107,101,114,
226,150,174,6,3,109,99,111,109,109,97,226,168,169,3,2,109,99,121,208,188,13,3,109,
101,97,115,117,114,101,100,97,110,103,108,101,226,136,161,3,4,109,102,114,240,157,148,170,
3,3,109,104,111,226,132,167,3,3,109,105,100,226,136,163,6,1,109,105,100,97,115,116,
42,6,3,109,105,100,99,105,114,226,171,176,6,3,109,105,110,117,115,98,226,138,159,6,
3,109,105,110,117,115,100,226,136,184,7,3,109,105,110,117,115,100,117,226,168,170,4,3,
109,108,99,112,226,171,155,4,3,109,108,100,114,226,128,166,6,3,109,110,112,108,117,115,
226,136,147,6,3,109,111,100,101,108,115,226,138,167,4,4,109,111,112,102,240,157,149,158,
2,3,109,112,226,136,147,4,4,109,115,99,114,240,157,147,130,6,3,109,115,116,112,111,
115,226,136,190,8,3,109,117,108,116,105,109,97,112,226,138,184,5,3,109,117,109,97,112,
226,138,184,3,5,110,71,103,226,139,153,204,184,3,6,110,71,116,226,137,171,226,131,146,
4,5,110,71,116,118,226,137,171,204,184,10,3,110,76,101,102,116,97,114,114,111,119,226,
135,141,15,3,110,76,101,102,116,114,105,103,104,116,97,114,114,111,119,226,135,142,3,5,
110,76,108,226,139,152,204,184,3,6,110,76,116,226,137,170,226,131,146,4,5,110,76,116,
118,226,137,170,204,184,11,3,110,82,105,103,104,116,97,114,114,111,119,226,135,143,6,3,
110,86,68,97,115,104,226,138,175,6,3,110,86,100,97,115,104,226,138,174,5,3,110,97,
98,108,97,226,136,135,6,2,110,97,99,117,116,101,197,132,4,6,110,97,110,103,226,136,
160,226,131,146,3,3,110,97,112,226,137,137,4,5,110,97,112,69,226,169,176,204,184,5,
5,110,97,112,105,100,226,137,139,204,184,5,2,110,97,112,111,115,197,137,7,3,110,97,
112,112,114,111,120,226,137,137,5,3,110,97,116,117,114,226,153,174,7,3,110,97,116,117,
114,97,108,226,153,174,8,3,110,97,116,117,114,97,108,115,226,132,149,5,5,110,98,117,
109,112,226,137,142,204,184,6,5,110,98,117,109,112,101,226,137,143,204,184,4,3,110,99,
97,112,226,169,131,6,2,110,99,97,114,111,110,197,136,6,2,110,99,101,100,105,108,197,
134,5,3,110,99,111,110,103,226,137,135,8,5,110,99,111,110,103,100,111,116,226,169,173,
204,184,4,3,110,99,117,112,226,169,130,3,2,110,99,121,208,189,5,3,110,101,65,114,
114,226,135,151,6,3,110,101,97,114,104,107,226,164,164,5,3,110,101,97,114,114,226,134,
151,7,3,110,101,97,114,114,111,119,226,134,151,5,5,110,101,100,111,116,226,137,144,204,
184,6,3,110,101,113,117,105,118,226,137,162,6,3,110,101,115,101,97,114,226,164,168,5,
5,110,101,115,105,109,226,137,130,204,184,6,3,110,101,120,105,115,116,226,136,132,7,3,
110,101,120,105,115,116,115,226,136,132,3,4,110,102,114,240,157,148,171,3,5,110,103,69,
226,137,167,204,184,3,3,110,103,101,226,137,177,4,3,110,103,101,113,226,137,177,5,5,
110,103,101,113,113,226,137,167,204,184,9,5,110,103,101,113,115,108,97,110,116,226,169,190,
204,184,4,5,110,103,101,115,226,169,190,204,184,5,3,110,103,115,105,109,226,137,181,3,
3,110,103,116,226,137,175,4,3,110,103,116,114,226,137,175,5,3,110,104,65,114,114,226,
135,142,5,3,110,104,97,114,114,226,134,174,5,3,110,104,112,97,114,226,171,178,2,3,
110,105,226,136,139,3,3,110,105,115,226,139,188,4,3,110,105,115,100,226,139,186,3,3,
110,105,118,226,136,139,4,2,110,106,99,121,209,154,5,3,110,108,65,114,114,226,135,141,
3,5,110,108,69,226,137,166,204,184,5,3,110,108,97,114,114,226,134,154,4,3,110,108,
100,114,226,128,165,3,3,110,108,101,226,137,176,10,3,110,108,101,102,116,97,114,114,111,
119,226,134,154,15,3,110,108,101,102,116,114,105,103,104,116,97,114,114,111,119,226,134,174,
4,3,110,108,101,113,226,137,176,5,5,110,108,101,113,113,226,137,166,204,184,9,5,110,
108,101,113,115,108,97,110,116,226,169,189,204,184,4,5,110,108,101,115,226,169,189,204,184,
5,3,110,108,101,115,115,226,137,174,5,3,110,108,115,105,109,226,137,180,3,3,110,108,
116,226,137,174,5,3,110,108,116,114,105,226,139,170,6,3,110,108,116,114,105,101,226,139,
172,4,3,110,109,105,100,226,136,164,4,4,110,111,112,102,240,157,149,159,5,3,110,111,
116,105,110,226,136,137,6,5,110,111,116,105,110,69,226,139,185,204,184,8,5,110,111,116,
105,110,100,111,116,226,139,181,204,184,7,3,110,111,116,105,110,118,97,226,136,137,7,3,
110,111,116,105,110,118,98,226,139,183,7,3,110,111,116,105,110,118,99,226,139,182,5,3,
110,111,116,110,105,226,136,140,7,3,110,111,116,110,105,118,97,226,136,140,7,3,110,111,
116,110,105,118,98,226,139,190,7,3,110,111,116,110,105,118,99,226,139,189,4,3,110,112,
97,114,226,136,166,9,3,110,112,97,114,97,108,108,101,108,226,136,166,6,6,110,112,97,
114,115,108,226,171,189,226,131,165,5,5,110,112,97,114,116,226,136,130,204,184,7,3,110,
112,111,108,105,110,116,226,168,148,3,3,110,112,114,226,138,128,6,3,110,112,114,99,117,
101,226,139,160,4,5,110,112,114,101,226,170,175,204,184,5,3,110,112,114,101,99,226,138,
128,7,5,110,112,114,101,99,101,113,226,170,175,204,184,5,3,110,114,65,114,114,226,135,
143,5,3,110,114,97,114,114,226,134,155,6,5,110,114,97,114,114,99,226,164,179,204,184,
6,5,110,114,97,114,114,119,226,134,157,204,184,11,3,110,114,105,103,104,116,97,114,114,
111,119,226,134,155,5,3,110,114,116,114,105,226,139,171,6,3,110,114,116,114,105,101,226,
139,173,3,3,110,115,99,226,138,129,6,3,110,115,99,99,117,101,226,139,161,4,5,110,
115,99,101,226,170,176,204,184,4,4,110,115,99,114,240,157,147,131,9,3,110,115,104,111,
114,116,109,105,100,226,136,164,14,3,110,115,104,111,114,116,112,97,114,97,108,108,101,108,
226,136,166,4,3,110,115,105,109,226,137,129,5,3,110,115,105,109,101,226,137,132,6,3,
110,115,105,109,101,113,226,137,132,5,3,110,115,109,105,100,226,136,164,5,3,110,115,112,
97,114,226,136,166,7,3,110,115,113,115,117,98,101,226,139,162,7,3,110,115,113,115,117,
112,101,226,139,163,4,3,110,115,117,98,226,138,132,5,5,110,115,117,98,69,226,171,133,
204,184,5,3,110,115,117,98,101,226,138,136,7,6,110,115,117,98,115,101,116,226,138,130,
226,131,146,9,3,110,115,117,98,115,101,116,101,113,226,138,136,10,5,110,115,117,98,115,
101,116,101,113,113,226,171,133,204,184,5,3,110,115,117,99,99,226,138,129,7,5,110,115,
117,99,99,101,113,226,170,176,204,184,4,3,110,115,117,112,226,138,133,5,5,110,115,117,
112,69,226,171,134,204,184,5,3,110,115,117,112,101,226,138,137,7,6,110,115,117,112,115,
101,116,226,138,131,226,131,146,9,3,110,115,117,112,115,101,116,101,113,226,138,137,10,5,
110,115,117,112,115,101,116,101,113,113,226,171,134,204,184,4,3,110,116,103,108,226,137,185,
4,3,110,116,108,103,226,137,184,13,3,110,116,114,105,97,110,103,108,101,108,101,102,116,
226,139,170,15,3,110,116,114,105,97,110,103,108,101,108,101,102,116,101,113,226,139,172,14,
3,110,116,114,105,97,110,103,108,101,114,105,103,104,116,226,139,171,16,3,110,116,114,105,
97,110,103,108,101,114,105,103,104,116,101,113,226,139,173,2,2,110,117,206,189,3,1,110,
117,109,35,6,3,110,117,109,101,114,111,226,132,150,5,3,110,117,109,115,112,226,128,135,
6,3,110,118,68,97,115,104,226,138,173,6,3,110,118,72,97,114,114,226,164,132,4,6,
110,118,97,112,226,137,141,226,131,146,6,3,110,118,100,97,115,104,226,138,172,4,6,110,
118,103,101,226,137,165,226,131,146,4,4,110,118,103,116,62,226,131,146,7,3,110,118,105,
110,102,105,110,226,167,158,6,3,110,118,108,65,114,114,226,164,130,4,6,110,118,108,101,
226,137,164,226,131,146,4,4,110,118,108,116,60,226,131,146,7,6,110,118,108,116,114,105,
101,226,138,180,226,131,146,6,3,110,118,114,65,114,114,226,164,131,7,6,110,118,114,116,
114,105,101,226,138,181,226,131,146,5,6,110,118,115,105,109,226,136,188,226,131,146,5,3,
110,119,65,114,114,226,135,150,6,3,110,119,97,114,104,107,226,164,163,5,3,110,119,97,
114,114,226,134,150,7,3,110,119,97,114,114,111,119,226,134,150,6,3,110,119,110,101,97,
114,226,164,167,2,3,111,83,226,147,136,4,3,111,97,115,116,226,138,155,4,3,111,99,
105,114,226,138,154,3,2,111,99,121,208,190,5,3,111,100,97,115,104,226,138,157,6,2,
111,100,98,108,97,99,197,145,4,3,111,100,105,118,226,168,184,4,3,111,100,111,116,226,
138,153,6,3,111,100,115,111,108,100,226,166,188,5,3,111,102,99,105,114,226,166,191,3,
4,111,102,114,240,157,148,172,4,2,111,103,111,110,203,155,3,3,111,103,116,226,167,129,
5,3,111,104,98,97,114,226,166,181,3,2,111,104,109,206,169,4,3,111,105,110,116,226,
136,174,5,3,111,108,97,114,114,226,134,186,5,3,111,108,99,105,114,226,166,190,7,3,
111,108,99,114,111,115,115,226,166,187,5,3,111,108,105,110,101,226,128,190,3,3,111,108,
116,226,167,128,5,2,111,109,97,99,114,197,141,7,2,111,109,105,99,114,111,110,206,191,
4,3,111,109,105,100,226,166,182,6,3,111,109,105,110,117,115,226,138,150,4,4,111,111,
112,102,240,157,149,160,4,3,111,112,97,114,226,166,183,5,3,111,112,101,114,112,226,166,
185,5,3,111,112,108,117,115,226,138,149,2,3,111,114,226,136,168,5,3,111,114,97,114,
114,226,134,187,3,3,111,114,100,226,169,157,5,3,111,114,100,101,114,226,132,180,7,3,
111,114,100,101,114,111,102,226,132,180,6,3,111,114,105,103,111,102,226,138,182,4,3,111,
114,111,114,226,169,150,7,3,111,114,115,108,111,112,101,226,169,151,3,3,111,114,118,226,
169,155,4,3,111,115,99,114,226,132,180,4,3,111,115,111,108,226,138,152,6,3,111,116,
105,109,101,115,226,138,151,8,3,111,116,105,109,101,115,97,115,226,168,182,5,3,111,118,
98,97,114,226,140,189,3,3,112,97,114,226,136,165,8,3,112,97,114,97,108,108,101,108,
226,136,165,6,3,112,97,114,115,105,109,226,171,179,5,3,112,97,114,115,108,226,171,189,
4,3,112,97,114,116,226,136,130,3,2,112,99,121,208,191,6,1,112,101,114,99,110,116,
37,6,1,112,101,114,105,111,100,46,4,3,112,101,114,112,226,138,165,7,3,112,101,114,
116,101,110,107,226,128,177,3,4,112,102,114,240,157,148,173,3,2,112,104,105,207,134,4,
2,112,104,105,118,207,149,6,3,112,104,109,109,97,116,226,132,179,9,3,112,105,116,99,
104,102,111,114,107,226,139,148,3,2,112,105,118,207,150,6,3,112,108,97,110,99,107,226,
132,143,7,3,112,108,97,110,99,107,104,226,132,142,6,3,112,108,97,110,107,118,226,132,
143,4,1,112,108,117,115,43,8,3,112,108,117,115,97,99,105,114,226,168,163,5,3,112,
108,117,115,98,226,138,158,7,3,112,108,117,115,99,105,114,226,168,162,6,3,112,108,117,
115,100,111,226,136,148,6,3,112,108,117,115,100,117,226,168,165,5,3,112,108,117,115,101,
226,169,178,7,3,112,108,117,115,115,105,109,226,168,166,7,3,112,108,117,115,116,119,111,
226,168,167,2,2,112,109,194,177,8,3,112,111,105,110,116,105,110,116,226,168,149,4,4,
112,111,112,102,240,157,149,161,2,3,112,114,226,137,186,3,3,112,114,69,226,170,179,4,
3,112,114,97,112,226,170,183,5,3,112,114,99,117,101,226,137,188,3,3,112,114,101,226,
170,175,4,3,112,114,101,99,226,137,186,10,3,112,114,101,99,97,112,112,114,111,120,226,
170,183,11,3,112,114,101,99,99,117,114,108,121,101,113,226,137,188,6,3,112,114,101,99,
101,113,226,170,175,11,3,112,114,101,99,110,97,112,112,114,111,120,226,170,185,8,3,112,
114,101,99,110,101,113,113,226,170,181,8,3,112,114,101,99,110,115,105,109,226,139,168,7,
3,112,114,101,99,115,105,109,226,137,190,6,3,112,114,105,109,101,115,226,132,153,4,3,
112,114,110,69,226,170,181,5,3,112,114,110,97,112,226,170,185,6,3,112,114,110,115,105,
109,226,139,168,4,3,112,114,111,100,226,136,143,8,3,112,114,111,102,97,108,97,114,226,
140,174,8,3,112,114,111,102,108,105,110,101,226,140,146,8,3,112,114,111,102,115,117,114,
102,226,140,147,4,3,112,114,111,112,226,136,157,6,3,112,114,111,112,116,111,226,136,157,
5,3,112,114,115,105,109,226,137,190,6,3,112,114,117,114,101,108,226,138,176,4,4,112,
115,99,114,240,157,147,133,3,2,112,115,105,207,136,6,3,112,117,110,99,115,112,226,128,
136,3,4,113,102,114,240,157,148,174,4,3,113,105,110,116,226,168,140,4,4,113,111,112,
102,240,157,149,162,6,3,113,112,114,105,109,101,226,129,151,4,4,113,115,99,114,240,157,
147,134,11,3,113,117,97,116,101,114,110,105,111,110,115,226,132,141,7,3,113,117,97,116,
105,110,116,226,168,150,5,1,113,117,101,115,116,63,7,3,113,117,101,115,116,101,113,226,
137,159,5,3,114,65,97,114,114,226,135,155,4,3,114,65,114,114,226,135,146,6,3,114,
65,116,97,105,108,226,164,156,5,3,114,66,97,114,114,226,164,143,4,3,114,72,97,114,
226,165,164,4,5,114,97,99,101,226,136,189,204,177,6,2,114,97,99,117,116,101,197,149,
8,3,114,97,101,109,112,116,121,118,226,166,179,4,3,114,97,110,103,226,159,169,5,3,
114,97,110,103,100,226,166,146,5,3,114,97,110,103,101,226,166,165,6,3,114,97,110,103,
108,101,226,159,169,6,3,114,97,114,114,97,112,226,165,181,5,3,114,97,114,114,98,226,
135,165,7,3,114,97,114,114,98,102,115,226,164,160,5,3,114,97,114,114,99,226,164,179,
6,3,114,97,114,114,102,115,226,164,158,6,3,114,97,114,114,104,107,226,134,170,6,3,
114,97,114,114,108,112,226,134,172,6,3,114,97,114,114,112,108,226,165,133,7,3,114,97,
114,114,115,105,109,226,165,180,6,3,114,97,114,114,116,108,226,134,163,5,3,114,97,114,
114,119,226,134,157,6,3,114,97,116,97,105,108,226,164,154,5,3,114,97,116,105,111,226,
136,182,9,3,114,97,116,105,111,110,97,108,115,226,132,154,5,3,114,98,97,114,114,226,
164,141,5,3,114,98,98,114,107,226,157,179,6,1,114,98,114,97,99,101,125,6,1,114,
98,114,97,99,107,93,5,3,114,98,114,107,101,226,166,140,7,3,114,98,114,107,115,108,
100,226,166,142,7,3,114,98,114,107,115,108,117,226,166,144,6,2,114,99,97,114,111,110,
197,153,6,2,114,99,101,100,105,108,197,151,5,3,114,99,101,105,108,226,140,137,4,1,
114,99,117,98,125,3,2,114,99,121,209,128,4,3,114,100,99,97,226,164,183,7,3,114,
100,108,100,104,97,114,226,165,169,6,3,114,100,113,117,111,114,226,128,157,4,3,114,100,
115,104,226,134,179,4,3,114,101,97,108,226,132,156,7,3,114,101,97,108,105,110,101,226,
132,155,8,3,114,101,97,108,112,97,114,116,226,132,156,5,3,114,101,97,108,115,226,132,
157,4,3,114,101,99,116,226,150,173,6,3,114,102,105,115,104,116,226,165,189,6,3,114,
102,108,111,111,114,226,140,139,3,4,114,102,114,240,157,148,175,5,3,114,104,97,114,100,
226,135,129,5,3,114,104,97,114,117,226,135,128,6,3,114,104,97,114,117,108,226,165,172,
3,2,114,104,111,207,129,4,2,114,104,111,118,207,177,10,3,114,105,103,104,116,97,114,
114,111,119,226,134,146,14,3,114,105,103,104,116,97,114,114,111,119,116,97,105,108,226,134,
163,16,3,114,105,103,104,116,104,97,114,112,111,111,110,100,111,119,110,226,135,129,14,3,
114,105,103,104,116,104,97,114,112,111,111,110,117,112,226,135,128,15,3,114,105,103,104,116,
108,101,102,116,97,114,114,111,119,115,226,135,132,17,3,114,105,103,104,116,108,101,102,116,
104,97,114,112,111,111,110,115,226,135,140,16,3,114,105,103,104,116,114,105,103,104,116,97,
114,114,111,119,115,226,135,137,15,3,114,105,103,104,116,115,113,117,105,103,97,114,114,111,
119,226,134,157,15,3,114,105,103,104,116,116,104,114,101,101,116,105,109,101,115,226,139,140,
4,2,114,105,110,103,203,154,12,3,114,105,115,105,110,103,100,111,116,115,101,113,226,137,
147,5,3,114,108,97,114,114,226,135,132,5,3,114,108,104,97,114,226,135,140,6,3,114,
109,111,117,115,116,226,142,177,10,3,114,109,111,117,115,116,97,99,104,101,226,142,177,5,
3,114,110,109,105,100,226,171,174,5,3,114,111,97,110,103,226,159,173,5,3,114,111,97,
114,114,226,135,190,5,3,114,111,98,114,107,226,159,167,5,3,114,111,112,97,114,226,166,
134,4,4,114,111,112,102,240,157,149,163,6,3,114,111,112,108,117,115,226,168,174,7,3,
114,111,116,105,109,101,115,226,168,181,4,1,114,112,97,114,41,6,3,114,112,97,114,103,
116,226,166,148,8,3,114,112,112,111,108,105,110,116,226,168,146,5,3,114,114,97,114,114,
226,135,137,4,4,114,115,99,114,240,157,147,135,3,3,114,115,104,226,134,177,4,1,114,
115,113,98,93,6,3,114,115,113,117,111,114,226,128,153,6,3,114,116,104,114,101,101,226,
139,140,6,3,114,116,105,109,101,115,226,139,138,4,3,114,116,114,105,226,150,185,5,3,
114,116,114,105,101,226,138,181,5,3,114,116,114,105,102,226,150,184,8,3,114,116,114,105,
108,116,114,105,226,167,142,7,3,114,117,108,117,104,97,114,226,165,168,2,3,114,120,226,
132,158,6,2,115,97,99,117,116,101,197,155,2,3,115,99,226,137,187,3,3,115,99,69,
226,170,180,4,3,115,99,97,112,226,170,184,5,3,115,99,99,117,101,226,137,189,3,3,
115,99,101,226,170,176,6,2,115,99,101,100,105,108,197,159,5,2,115,99,105,114,99,197,
157,4,3,115,99,110,69,226,170,182,5,3,115,99,110,97,112,226,170,186,6,3,115,99,
110,115,105,109,226,139,169,8,3,115,99,112,111,108,105,110,116,226,168,147,5,3,115,99,
115,105,109,226,137,191,3,2,115,99,121,209,129,4,3,115,100,111,116,226,139,133,5,3,
115,100,111,116,98,226,138,161,5,3,115,100,111,116,101,226,169,166,5,3,115,101,65,114,
114,226,135,152,6,3,115,101,97,114,104,107,226,164,165,5,3,115,101,97,114,114,226,134,
152,7,3,115,101,97,114,114,111,119,226,134,152,4,1,115,101,109,105,59,6,3,115,101,
115,119,97,114,226,164,169,8,3,115,101,116,109,105,110,117,115,226,136,150,5,3,115,101,
116,109,110,226,136,150,4,3,115,101,120,116,226,156,182,3,4,115,102,114,240,157,148,176,
6,3,115,102,114,111,119,110,226,140,162,5,3,115,104,97,114,112,226,153,175,6,2,115,
104,99,104,99,121,209,137,4,2,115,104,99,121,209,136,8,3,115,104,111,114,116,109,105,
100,226,136,163,13,3,115,104,111,114,116,112,97,114,97,108,108,101,108,226,136,165,6,2,
115,105,103,109,97,102,207,130,6,2,115,105,103,109,97,118,207,130,3,3,115,105,109,226,
136,188,6,3,115,105,109,100,111,116,226,169,170,4,3,115,105,109,101,226,137,131,5,3,
115,105,109,101,113,226,137,131,4,3,115,105,109,103,226,170,158,5,3,115,105,109,103,69,
226,170,160,4,3,115,105,109,108,226,170,157,5,3,115,105,109,108,69,226,170,159,5,3,
115,105,109,110,101,226,137,134,7,3,115,105,109,112,108,117,115,226,168,164,7,3,115,105,
109,114,97,114,114,226,165,178,5,3,115,108,97,114,114,226,134,144,13,3,115,109,97,108,
108,115,101,116,109,105,110,117,115,226,136,150,6,3,115,109,97,115,104,112,226,168,179,8,
3,115,109,101,112,97,114,115,108,226,167,164,4,3,115,109,105,100,226,136,163,5,3,115,
109,105,108,101,226,140,163,3,3,115,109,116,226,170,170,4,3,115,109,116,101,226,170,172,
5,6,115,109,116,101,115,226,170,172,239,184,128,6,2,115,111,102,116,99,121,209,140,3,
1,115,111,108,47,4,3,115,111,108,98,226,167,132,6,3,115,111,108,98,97,114,226,140,
191,4,4,115,111,112,102,240,157,149,164,9,3,115,112,97,100,101,115,117,105,116,226,153,
160,4,3,115,112,97,114,226,136,165,5,3,115,113,99,97,112,226,138,147,6,6,115,113,
99,97,112,115,226,138,147,239,184,128,5,3,115,113,99,117,112,226,138,148,6,6,115,113,
99,117,112,115,226,138,148,239,184,128,5,3,115,113,115,117,98,226,138,143,6,3,115,113,
115,117,98,101,226,138,145,8,3,115,113,115,117,98,115,101,116,226,138,143,10,3,115,113,
115,117,98,115,101,116,101,113,226,138,145,5,3,115,113,115,117,112,226,138,144,6,3,115,
113,115,117,112,101,226,138,146,8,3,115,113,115,117,112,115,101,116,226,138,144,10,3,115,
113,115,117,112,115,101,116,101,113,226,138,146,3,3,115,113,117,226,150,161,6,3,115,113,
117,97,114,101,226,150,161,6,3,115,113,117,97,114,102,226,150,170,4,3,115,113,117,102,
226,150,170,5,3,115,114,97,114,114,226,134,146,4,4,115,115,99,114,240,157,147,136,6,
3,115,115,101,116,109,110,226,136,150,6,3,115,115,109,105,108,101,226,140,163,6,3,115,
115,116,97,114,102,226,139,134,15,2,115,116,114,97,105,103,104,116,101,112,115,105,108,111,
110,207,181,11,2,115,116,114,97,105,103,104,116,112,104,105,207,149,5,2,115,116,114,110,
115,194,175,3,3,115,117,98,226,138,130,4,3,115,117,98,69,226,171,133,6,3,115,117,
98,100,111,116,226,170,189,4,3,115,117,98,101,226,138,134,7,3,115,117,98,101,100,111,
116,226,171,131,7,3,115,117,98,109,117,108,116,226,171,129,5,3,115,117,98,110,69,226,
171,139,5,3,115,117,98,110,101,226,138,138,7,3,115,117,98,112,108,117,115,226,170,191,
7,3,115,117,98,114,97,114,114,226,165,185,6,3,115,117,98,115,101,116,226,138,130,8,
3,115,117,98,115,101,116,101,113,226,138,134,9,3,115,117,98,115,101,116,101,113,113,226,
171,133,9,3,115,117,98,115,101,116,110,101,113,226,138,138,10,3,115,117,98,115,101,116,
110,101,113,113,226,171,139,6,3,115,117,98,115,105,109,226,171,135,6,3,115,117,98,115,
117,98,226,171,149,6,3,115,117,98,115,117,112,226,171,147,4,3,115,117,99,99,226,137,
187,10,3,115,117,99,99,97,112,112,114,111,120,226,170,184,11,3,115,117,99,99,99,117,
114,108,121,101,113,226,137,189,6,3,115,117,99,99,101,113,226,170,176,11,3,115,117,99,
99,110,97,112,112,114,111,120,226,170,186,8,3,115,117,99,99,110,101,113,113,226,170,182,
8,3,115,117,99,99,110,115,105,109,226,139,169,7,3,115,117,99,99,115,105,109,226,137,
191,4,3,115,117,110,103,226,153,170,3,3,115,117,112,226,138,131,4,3,115,117,112,69,
226,171,134,6,3,115,117,112,100,111,116,226,170,190,7,3,115,117,112,100,115,117,98,226,
171,152,4,3,115,117,112,101,226,138,135,7,3,115,117,112,101,100,111,116,226,171,132,7,
3,115,117,112,104,115,111,108,226,159,137,7,3,115,117,112,104,115,117,98,226,171,151,7,
3,115,117,112,108,97,114,114,226,165,187,7,3,115,117,112,109,117,108,116,226,171,130,5,
3,115,117,112,110,69,226,171,140,5,3,115,117,112,110,101,226,138,139,7,3,115,117,112,
112,108,117,115,226,171,128,6,3,115,117,112,115,101,116,226,138,131,8,3,115,117,112,115,
101,116,101,113,226,138,135,9,3,115,117,112,115,101,116,101,113,113,226,171,134,9,3,115,
117,112,115,101,116,110,101,113,226,138,139,10,3,115,117,112,115,101,116,110,101,113,113,226,
171,140,6,3,115,117,112,115,105,109,226,171,136,6,3,115,117,112,115,117,98,226,171,148,
6,3,115,117,112,115,117,112,226,171,150,5,3,115,119,65,114,114,226,135,153,6,3,115,
119,97,114,104,107,226,164,166,5,3,115,119,97,114,114,226,134,153,7,3,115,119,97,114,
114,111,119,226,134,153,6,3,115,119,110,119,97,114,226,164,170,6,3,116,97,114,103,101,
116,226,140,150,3,2,116,97,117,207,132,4,3,116,98,114,107,226,142,180,6,2,116,99,
97,114,111,110,197,165,6,2,116,99,101,100,105,108,197,163,3,2,116,99,121,209,130,4,
3,116,100,111,116,226,131,155,6,3,116,101,108,114,101,99,226,140,149,3,4,116,102,114,
240,157,148,177,6,3,116,104,101,114,101,52,226,136,180,9,3,116,104,101,114,101,102,111,
114,101,226,136,180,8,2,116,104,101,116,97,115,121,109,207,145,6,2,116,104,101,116,97,
118,207,145,11,3,116,104,105,99,107,97,112,112,114,111,120,226,137,136,8,3,116,104,105,
99,107,115,105,109,226,136,188,5,3,116,104,107,97,112,226,137,136,6,3,116,104,107,115,
105,109,226,136,188,6,3,116,105,109,101,115,98,226,138,160,8,3,116,105,109,101,115,98,
97,114,226,168,177,6,3,116,105,109,101,115,100,226,168,176,4,3,116,105,110,116,226,136,
173,4,3,116,111,101,97,226,164,168,3,3,116,111,112,226,138,164,6,3,116,111,112,98,
111,116,226,140,182,6,3,116,111,112,99,105,114,226,171,177,4,4,116,111,112,102,240,157,
149,165,7,3,116,111,112,102,111,114,107,226,171,154,4,3,116,111,115,97,226,164,169,6,
3,116,112,114,105,109,101,226,128,180,8,3,116,114,105,97,110,103,108,101,226,150,181,12,
3,116,114,105,97,110,103,108,101,100,111,119,110,226,150,191,12,3,116,114,105,97,110,103,
108,101,108,101,102,116,226,151,131,14,3,116,114,105,97,110,103,108,101,108,101,102,116,101,
113,226,138,180,9,3,116,114,105,97,110,103,108,101,113,226,137,156,13,3,116,114,105,97,
110,103,108,101,114,105,103,104,116,226,150,185,15,3,116,114,105,97,110,103,108,101,114,105,
103,104,116,101,113,226,138,181,6,3,116,114,105,100,111,116,226,151,172,4,3,116,114,105,
101,226,137,156,8,3,116,114,105,109,105,110,117,115,226,168,186,7,3,116,114,105,112,108,
117,115,226,168,185,5,3,116,114,105,115,98,226,167,141,7,3,116,114,105,116,105,109,101,
226,168,187,8,3,116,114,112,101,122,105,117,109,226,143,162,4,4,116,115,99,114,240,157,
147,137,4,2,116,115,99,121,209,134,5,2,116,115,104,99,121,209,155,6,2,116,115,116,
114,111,107,197,167,5,3,116,119,105,120,116,226,137,172,16,3,116,119,111,104,101,97,100,
108,101,102,116,97,114,114,111,119,226,134,158,17,3,116,119,111,104,101,97,100,114,105,103,
104,116,97,114,114,111,119,226,134,160,4,3,117,65,114,114,226,135,145,4,3,117,72,97,
114,226,165,163,5,2,117,98,114,99,121,209,158,6,2,117,98,114,101,118,101,197,173,3,
2,117,99,121,209,131,5,3,117,100,97,114,114,226,135,133,6,2,117,100,98,108,97,99,
197,177,5,3,117,100,104,97,114,226,165,174,6,3,117,102,105,115,104,116,226,165,190,3,
4,117,102,114,240,157,148,178,5,3,117,104,97,114,108,226,134,191,5,3,117,104,97,114,
114,226,134,190,5,3,117,104,98,108,107,226,150,128,6,3,117,108,99,111,114,110,226,140,
156,8,3,117,108,99,111,114,110,101,114,226,140,156,6,3,117,108,99,114,111,112,226,140,
143,5,3,117,108,116,114,105,226,151,184,5,2,117,109,97,99,114,197,171,5,2,117,111,
103,111,110,197,179,4,4,117,111,112,102,240,157,149,166,7,3,117,112,97,114,114,111,119,
226,134,145,11,3,117,112,100,111,119,110,97,114,114,111,119,226,134,149,13,3,117,112,104,
97,114,112,111,111,110,108,101,102,116,226,134,191,14,3,117,112,104,97,114,112,111,111,110,
114,105,103,104,116,226,134,190,5,3,117,112,108,117,115,226,138,142,4,2,117,112,115,105,
207,133,5,2,117,112,115,105,104,207,146,7,2,117,112,115,105,108,111,110,207,133,10,3,
117,112,117,112,97,114,114,111,119,115,226,135,136,6,3,117,114,99,111,114,110,226,140,157,
8,3,117,114,99,111,114,110,101,114,226,140,157,6,3,117,114,99,114,111,112,226,140,142,
5,2,117,114,105,110,103,197,175,5,3,117,114,116,114,105,226,151,185,4,4,117,115,99,
114,240,157,147,138,5,3,117,116,100,111,116,226,139,176,6,2,117,116,105,108,100,101,197,
169,4,3,117,116,114,105,226,150,181,5,3,117,116,114,105,102,226,150,180,5,3,117,117,
97,114,114,226,135,136,7,3,117,119,97,110,103,108,101,226,166,167,4,3,118,65,114,114,
226,135,149,4,3,118,66,97,114,226,171,168,5,3,118,66,97,114,118,226,171,169,5,3,
118,68,97,115,104,226,138,168,6,3,118,97,110,103,114,116,226,166,156,10,2,118,97,114,
101,112,115,105,108,111,110,207,181,8,2,118,97,114,107,97,112,112,97,207,176,10,3,118,
97,114,110,111,116,104,105,110,103,226,136,133,6,2,118,97,114,112,104,105,207,149,5,2,
118,97,114,112,105,207,150,9,3,118,97,114,112,114,111,112,116,111,226,136,157,4,3,118,
97,114,114,226,134,149,6,2,118,97,114,114,104,111,207,177,8,2,118,97,114,115,105,103,
109,97,207,130,12,6,118,97,114,115,117,98,115,101,116,110,101,113,226,138,138,239,184,128,
13,6,118,97,114,115,117,98,115,101,116,110,101,113,113,226,171,139,239,184,128,12,6,118,
97,114,115,117,112,115,101,116,110,101,113,226,138,139,239,184,128,13,6,118,97,114,115,117,
112,115,101,116,110,101,113,113,226,171,140,239,184,128,8,2,118,97,114,116,104,101,116,97,
207,145,15,3,118,97,114,116,114,105,97,110,103,108,101,108,101,102,116,226,138,178,16,3,
118,97,114,116,114,105,97,110,103,108,101,114,105,103,104,116,226,138,179,3,2,118,99,121,
208,178,5,3,118,100,97,115,104,226,138,162,3,3,118,101,101,226,136,168,6,3,118,101,
101,98,97,114,226,138,187,5,3,118,101,101,101,113,226,137,154,6,3,118,101,108,108,105,
112,226,139,174,6,1,118,101,114,98,97,114,124,4,1,118,101,114,116,124,3,4,118,102,
114,240,157,148,179,5,3,118,108,116,114,105,226,138,178,5,6,118,110,115,117,98,226,138,
130,226,131,146,5,6,118,110,115,117,112,226,138,131,226,131,146,4,4,118,111,112,102,240,
157,149,167,5,3,118,112,114,111,112,226,136,157,5,3,118,114,116,114,105,226,138,179,4,
4,118,115,99,114,240,157,147,139,6,6,118,115,117,98,110,69,226,171,139,239,184,128,6,
6,118,115,117,98,110,101,226,138,138,239,184,128,6,6,118,115,117,112,110,69,226,171,140,
239,184,128,6,6,118,115,117,112,110,101,226,138,139,239,184,128,7,3,118,122,105,103,122,
97,103,226,166,154,5,2,119,99,105,114,99,197,181,6,3,119,101,100,98,97,114,226,169,
159,5,3,119,101,100,103,101,226,136,167,6,3,119,101,100,103,101,113,226,137,153,6,3,
119,101,105,101,114,112,226,132,152,3,4,119,102,114,240,157,148,180,4,4,119,111,112,102,
240,157,149,168,2,3,119,112,226,132,152,2,3,119,114,226,137,128,6,3,119,114,101,97,
116,104,226,137,128,4,4,119,115,99,114,240,157,147,140,4,3,120,99,97,112,226,139,130,
5,3,120,99,105,114,99,226,151,175,4,3,120,99,117,112,226,139,131,5,3,120,100,116,
114,105,226,150,189,3,4,120,102,114,240,157,148,181,5,3,120,104,65,114,114,226,159,186,
5,3,120,104,97,114,114,226,159,183,2,2,120,105,206,190,5,3,120,108,65,114,114,226,
159,184,5,3,120,108,97,114,114,226,159,181,4,3,120,109,97,112,226,159,188,4,3,120,
110,105,115,226,139,187,5,3,120,111,100,111,116,226,168,128,4,4,120,111,112,102,240,157,
149,169,6,3,120,111,112,108,117,115,226,168,129,6,3,120,111,116,105,109,101,226,168,130,
5,3,120,114,65,114,114,226,159,185,5,3,120,114,97,114,114,226,159,182,4,4,120,115,
99,114,240,157,147,141,6,3,120,115,113,99,117,112,226,168,134,6,3,120,117,112,108,117,
115,226,168,132,5,3,120,117,116,114,105,226,150,179,4,3,120,118,101,101,226,139,129,6,
3,120,119,101,100,103,101,226,139,128,4,2,121,97,99,121,209,143,5,2,121,99,105,114,
99,197,183,3,2,121,99,121,209,139,3,4,121,102,114,240,157,148,182,4,2,121,105,99,
121,209,151,4,4,121,111,112,102,240,157,149,170,4,4,121,115,99,114,240,157,147,142,4,
2,121,117,99,121,209,142,6,2,122,97,99,117,116,101,197,186,6,2,122,99,97,114,111,
110,197,190,3,2,122,99,121,208,183,4,2,122,100,111,116,197,188,6,3,122,101,101,116,
114,102,226,132,168,4,2,122,101,116,97,206,182,3,4,122,102,114,240,157,148,183,4,2,
122,104,99,121,208,182,7,3,122,105,103,114,97,114,114,226,135,157,4,4,122,111,112,102,
240,157,149,171,4,4,122,115,99,114,240,157,147,143,
};
// The value's UTF-8 bytes in the low bytes and its length in the top byte.
const Entry = extern struct { key: u64, val: u64 };
const Long = extern struct { name: [32]u8, val: u64, len: u32, pad: u32 };
var input: [INPUT_CAP + PAD]u8 align(16) = undefined;
var output: [OUTPUT_CAP + PAD]u8 align(16) = undefined;
var fast: [(1 << FAST_BITS) + FAST_TAIL]Entry = undefined;
var leg: [(1 << LEG_BITS) + LEG_TAIL]Entry = undefined;
var longs: [LONG_COUNT]Long align(16) = std.mem.zeroes([LONG_COUNT]Long);
var long_slots = [_]u16{0} ** (1 << LONG_BITS);
// Longest legacy name starting with these two bytes (hashed), or 0.
var leg_max = [_]u8{0} ** 4096;
var hexv: [256]u8 = undefined;
var pos: [WINDOW + 16]u32 = undefined;
var ready: bool = false;
// Windows-1252 remapping for references to 0x80-0x9F.
const c1 = [32]u16{
0x20AC, 0x81, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0x8D, 0x017D, 0x8F,
0x90, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0x9D, 0x017E, 0x0178,
};
const utf8_marks = [5]u32{ 0, 0, 0x80C0, 0x8080E0, 0x808080F0 };
// Byte j of the 32 loaded at `len_mask + 32 - n` is 0xFF when j < n.
const len_mask: [64]u8 align(16) = [_]u8{0xFF} ** 32 ++ [_]u8{0} ** 32;
inline fn ld(p: [*]const u8) V {
return p[0..16].*;
}
inline fn st(p: [*]u8, v: V) void {
p[0..16].* = v;
}
inline fn ld64(p: [*]const u8) u64 {
return @as(*align(1) const u64, @ptrCast(p)).*;
}
inline fn st64(p: [*]u8, x: u64) void {
@as(*align(1) u64, @ptrCast(p)).* = x;
}
inline fn st32(p: [*]u8, x: u32) void {
@as(*align(1) u32, @ptrCast(p)).* = x;
}
inline fn eqMask(v: V, c: u8) u32 {
return @as(u16, @bitCast(v == @as(V, @splat(c))));
}
inline fn legSlot(w: u64) usize {
return ((@as(u32, @truncate(w)) & 0xFFFF) *% 0x9E3779B1) >> 20;
}
inline fn longHash(head: u64, tail: u64, n: usize) usize {
return @intCast((((head ^ std.math.rotl(u64, tail, 29)) +% n) *% LONG_MUL) >> (64 - LONG_BITS));
}
noinline fn init() void {
for (&fast) |*x| x.key = EMPTY;
for (&leg) |*x| x.key = EMPTY;
for (&hexv) |*x| x.* = 16;
for (0..10) |k| hexv[39;039; + k] = @intCast(k);
for (0..6) |k| {
hexv[39;a39; + k] = @intCast(10 + k);
hexv[39;A39; + k] = @intCast(10 + k);
}
var p: [*]const u8 = &entity_blob;
var nl: usize = 0;
for (0..ENTITY_COUNT) |_| {
const n: usize = p[0] & 0x7F;
const legacy = p[0] >> 7 != 0;
const vn: usize = p[1];
const name = p + 2;
const value = name + n;
var val: u64 = @as(u64, vn) << 56;
for (0..vn) |k| val |= @as(u64, value[k]) << @intCast(8 * k);
if (n <= 7) {
const semi = @as(u64, 39;;39;) << @intCast(8 * n);
var key: u64 = semi;
for (0..n) |k| key |= @as(u64, name[k]) << @intCast(8 * k);
var e: [*]Entry = @ptrCast(&fast[@intCast((key *% FAST_MUL) >> (64 - FAST_BITS))]);
while (e[0].key != EMPTY) e += 1;
e[0] = .{ .key = key, .val = val };
if (legacy) {
key = (key ^ semi) | @as(u64, n) << 56;
e = @ptrCast(&leg[@intCast((key *% LEG_MUL) >> (64 - LEG_BITS))]);
while (e[0].key != EMPTY) e += 1;
e[0] = .{ .key = key, .val = val };
const s = legSlot(key); // only the first two bytes matter
if (leg_max[s] < n) leg_max[s] = @intCast(n);
}
} else {
const l = &longs[nl];
nl += 1;
for (0..n) |k| l.name[k] = name[k];
l.val = val;
l.len = @intCast(n);
const nm: [*]const u8 = &l.name;
var h = longHash(ld64(nm), ld64(nm + n - 8), n);
while (long_slots[h] != 0) h = (h + 1) & LONG_MASK;
long_slots[h] = @intCast(nl);
}
p = value + vn;
}
ready = true;
}
export fn input_ptr() u32 {
return @intCast(@intFromPtr(&input));
}
export fn input_utf8_cap() u32 {
return INPUT_CAP;
}
export fn output_ptr() u32 {
return @intCast(@intFromPtr(&output));
}
export fn output_utf8_cap() u32 {
return OUTPUT_CAP;
}
export fn render(n: u32) u64 {
if (!ready) init();
const size: usize = @min(n, INPUT_CAP);
const src: [*]u8 = &input;
const dst: [*]u8 = &output;
const zero: V = @splat(0);
st(src + size, zero);
st(src + size + 16, zero);
st(src + size + 32, zero);
st(src + size + 48, zero);
// Stage 1 lists the position of every `&` in a window; stage 2 copies the text between
// references and decodes each one.
var e: usize = 0;
var o: usize = 0;
var base: usize = 0;
while (base < size) {
const lim = if (size - base > WINDOW) base + WINDOW else size;
var out: [*]u32 = &pos;
while (true) {
const ma: u64 = eqMask(ld(src + base), 39;&39;);
const mb: u64 = eqMask(ld(src + base + 16), 39;&39;);
const mc: u64 = eqMask(ld(src + base + 32), 39;&39;);
const md: u64 = eqMask(ld(src + base + 48), 39;&39;);
var mm: u64 = ma | mb << 16 | mc << 32 | md << 48;
const cnt: usize = @popCount(mm);
const b: u32 = @intCast(base);
// Entries past cnt are garbage and are overwritten or ignored.
inline for (0..4) |k| {
out[k] = b + @ctz(mm);
mm &= mm -% 1;
}
if (cnt > 4) {
@branchHint(.unlikely);
inline for (4..8) |k| {
out[k] = b + @ctz(mm);
mm &= mm -% 1;
}
var k: usize = 8;
while (mm != 0) : (k += 1) {
out[k] = b + @ctz(mm);
mm &= mm -% 1;
}
}
out += cnt;
base += 64;
if (base >= lim) break;
}
var q: [*]const u32 = &pos;
while (@intFromPtr(q) < @intFromPtr(out)) : (q += 1) {
var i: usize = q[0];
// Copy the text since the last reference; src[i] is `&` and i < size.
{
const len = i - e;
st(dst + o, ld(src + e));
st(dst + o + 16, ld(src + e + 16));
if (len > 32) {
var j: usize = 32;
while (true) {
st(dst + o + j, ld(src + e + j));
j += 16;
if (j >= len) break;
}
}
o += len;
}
done: {
const w = ld64(src + i + 1);
if (@as(u8, @truncate(w)) == 39;#39;) numeric: {
// Decimal and hexadecimal share one branch-free path: classify 8 bytes,
// take the digits before the first other byte, and fold them pairwise.
const hex = (@as(u8, @truncate(w >> 8)) | 0x20) == 39;x39;;
var p = src + i + 2 + @intFromBool(hex);
const d = ld64(p);
const t = d ^ 0x3030303030303030;
const digit = ~(((t & ~HIGH) +% 0x7676767676767676) | t) & HIGH;
const y = d | 0x2020202020202020;
const ty = y & ~HIGH;
const letter = (ty +% ONES * (0x80 - 39;a39;)) & ~(ty +% ONES * (0x7F - 39;f39;)) & ~y & HIGH;
const stop = ~(digit | (if (hex) letter else 0)) & HIGH;
var v: u32 = 0;
var end: usize = undefined;
if (stop != 0) {
const nb: u32 = @ctz(stop) & 0x38;
if (nb == 0) break :numeric;
var x = ((d & 0x0F0F0F0F0F0F0F0F) +% 9 * (letter >> 7)) << @intCast(64 - nb);
x = (x *% @as(u64, if (hex) 16 else 10) +% (x >> 8)) & 0x00FF00FF00FF00FF;
x = (x *% @as(u64, if (hex) 256 else 100) +% (x >> 16)) & 0x0000FFFF0000FFFF;
v = @truncate(x *% @as(u64, if (hex) 65536 else 10000) +% (x >> 32));
end = @intFromPtr(p) - @intFromPtr(src) + (nb >> 3);
} else {
// Eight or more digits: saturate past U+10FFFF.
@branchHint(.unlikely);
const radix: u32 = if (hex) 16 else 10;
while (true) {
const c: u32 = hexv[p[0]];
if (c >= radix) break;
v = v * radix + c;
if (v > 0x10FFFF) v = 0x110000;
p += 1;
}
end = @intFromPtr(p) - @intFromPtr(src);
}
i = end + @intFromBool(src[end] == 39;;39;);
if (v -% 0x80 < 0x20) {
v = c1[v - 0x80];
} else if (v == 0 or v -% 0xD800 < 0x800 or v > 0x10FFFF) {
v = 0xFFFD;
}
// Lay the bits out as four UTF-8 bytes, then drop the unused leading ones.
const len: u32 = 1 + @as(u32, @intFromBool(v > 0x7F)) + @intFromBool(v > 0x7FF) + @intFromBool(v > 0xFFFF);
const bits = v >> 18 | (v >> 12 & 0x3F) << 8 | (v >> 6 & 0x3F) << 16 | (v & 0x3F) << 24;
const word = bits >> @intCast(32 - 8 * len) | utf8_marks[len];
st32(dst + o, if (len == 1) v else word);
o += len;
break :done;
} else {
const t = w ^ (ONES * 39;;39;);
const z = (t -% ONES) & ~t & HIGH;
if (z != 0) {
// Bit index of the `;` byte; the key is the name and its `;`.
const kb: u32 = @ctz(z) & 0x38;
const key = w & ((@as(u64, 2) << @intCast(kb + 7)) -% 1);
var en: [*]const Entry = @ptrCast(&fast[@intCast((key *% FAST_MUL) >> (64 - FAST_BITS))]);
while (true) {
const k = en[0].key;
if (k == key) {
const val = en[0].val;
st64(dst + o, val);
o += @intCast(val >> 56);
i += 2 + (kb >> 3);
break :done;
}
if (k == EMPTY) break;
en += 1;
}
} else {
// No `;` in 8 bytes: a name of 8 to 31 bytes needs its `;` in the next 24.
const s0 = ld(src + i + 1);
const s1 = ld(src + i + 17);
const sm: u32 = eqMask(s0, 39;;39;) | eqMask(s1, 39;;39;) << 16;
if (sm != 0) {
const len: usize = @ctz(sm);
var h = longHash(w, ld64(src + i + 1 + len - 8), len);
const lm: [*]const u8 = &len_mask;
const m0 = ld(lm + 32 - len);
const m1 = ld(lm + 48 - len);
while (true) {
const s = long_slots[h];
if (s == 0) break;
const l = &longs[s - 1];
const nm: [*]const u8 = &l.name;
const diff = ((s0 & m0) ^ ld(nm)) | ((s1 & m1) ^ ld(nm + 16));
if (l.len == len and @reduce(.Or, diff) == 0) {
st64(dst + o, l.val);
o += @intCast(l.val >> 56);
i += 2 + len;
break :done;
}
h = (h + 1) & LONG_MASK;
}
}
}
// Without `;`, the longest legacy name that is a prefix.
var k: usize = leg_max[legSlot(w)];
while (k >= 2) : (k -= 1) {
// The length is part of the key, so a NUL after a shorter name cannot match.
const key = (w & ((@as(u64, 1) << @intCast(8 * k)) - 1)) | @as(u64, k) << 56;
var en: [*]const Entry = @ptrCast(&leg[@intCast((key *% LEG_MUL) >> (64 - LEG_BITS))]);
while (true) {
if (en[0].key == key) {
st64(dst + o, en[0].val);
o += @intCast(en[0].val >> 56);
i += 1 + k;
break :done;
}
if (en[0].key == EMPTY) break;
en += 1;
}
}
}
dst[o] = 39;&39;;
o += 1;
i += 1;
}
e = i;
}
}
// Without a reference the input is the output.
if (e == 0) return @as(u64, @intFromPtr(&input)) << 32 | size;
var j = e;
while (j < size) : (j += 16) st(dst + o + (j - e), ld(src + j));
o += size - e;
return @as(u64, @intFromPtr(&output)) << 32 | o;
}
Download source MIT licensed — build on it
Run it on the example input with qipdo (Node.js 22 or newer):
printf '%s' 'Fish & chips — café <3 😀 © 2026 ¬it;' | npx qipdo calculated.world components/f8f5d4a5c339b86d8229e63d91392dce4866f0df95091d94d832f75f1a0cf935.wasm
Zig port of the two-stage C decoder. Stage 1 turns each 64-byte block into a bitmask of its & and appends their positions to a list without branching on what it finds; stage 2 copies the text since the last reference (32 bytes unconditionally, more in a loop) and decodes. Inputs without & are returned in place. 64 zero bytes after the input remove bounds checks. Names of up to 7 bytes ending in ; are found with a SWAR zero-byte test and one multiply into an open-addressed table of 16-byte entries; longer names use a second table and a masked 32-byte @Vector compare; names without ; go through a two-byte prefix filter and a 106-entry legacy table whose key includes the length. Decimal and hexadecimal references of up to 7 digits share one branch-free SWAR path, and UTF-8 encoding does not branch on length. Passes the 6,835-case suite locally, plus 1.1 million fuzz cases against a Python reference.
- Builds on
- Direct port of the C submission 5fe83c0b-c589-4337-a62e-5126223e76a4 by the same author: same layout, tables, hash multipliers and control flow. The entity list is generated from Python html.entities.html5.
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.
To debug it in your terminal with qiptui (Node.js 22 or newer):
First download the Wasm and the example input:
curl -o unescape_html.wasm https://calculated.world/components/f8f5d4a5c339b86d8229e63d91392dce4866f0df95091d94d832f75f1a0cf935.wasm
printf '%s' 'Fish & chips — café <3 😀 © 2026 ¬it;' > input.txt
Then 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.
Build details
Compiler, size, memory and checksum
- Submitted
- 10 November 2026 at 08:05 UTC
- Language
- Zig
- Compiler
-
zig 0.15.2build-exe -target wasm32-freestanding -mcpu=generic+simd128+bulk_memory -O ReleaseFast -fno-entry -rdynamic -fstrip --stack 8192 --initial-memory=3145728 --max-memory=3145728 - Size
- 27.7 KiB, gzip 14.7 KiB
- Download
- ~300 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
- Memory
- 48 pages (3 MiB)
- SIMD
- yes
- AI models
- claude-fable-5-2
Functions, loops, branches and other static counts
- Functions
- 6
- Instructions
- 1,619
- Loops
- 17
- Conditional branches
- 58
- Indirect calls
- 0
- Memory loads
- 43
- Memory stores
- 46
- SIMD instructions
- 47
- Potentially trapping instructions
- 111
Instruction sites in the binary, not executions, counted by qip.dev’s wasm-counts.