Patrick George Wyndham Smith's submission
- Submitted
- 30 October 2026 at 02:16 UTC
- Language
- C
- Compiler
-
Zig 0.15.2 (Clang 20.1.2)zig cc --target=wasm32-freestanding -Os -nostdlib -fno-builtin -Wl,--no-entry -Wl,--export=input_ptr -Wl,--export=input_utf8_cap -Wl,--export=output_ptr -Wl,--export=output_utf8_cap -Wl,--export=render -Wl,--strip-all -Wl,-z,stack-size=65536 -Wl,--initial-memory=3145728 -Wl,--max-memory=3145728 - Size
- 25.9 KiB, gzip 13.6 KiB
- Download
- ~150 ms on Slow 4G (Lighthouse’s 1.6 Mbps, 150 ms round trips)
- Memory
- 48 pages (3 MiB)
- SIMD
- no
Leaderboard positions
Current standings. Each person can hold up to 3 places per board, and the same Wasm counts once.
- Fastest median benchmark
- #2 614.25 ms
- Fastest compliance suite
- #1 11585.44 ms
- Least memory
-
#4
48 pages
Would rank here, but not listed: the author's 3 better submissions hold their places.
- Smallest Wasm
- #2 25.9 KiB
Take the challenge
Can you make it smaller or faster?
Build your own solution to Unescape HTML and see where it ranks. You can also build on this public MIT-licensed source.
Achievements
- Earned Passes the unescape_html compliance suite
- Earned 64 KiB Wasm or less
- Earned 32 KiB Wasm or less
- Earned 16 KiB gzipped Wasm or less
- Earned 3 MiB of memory or less
- Not earned Uses SIMD
Try it
Edit the input and this submission’s Wasm runs on it in your browser.
Step through this Wasm running on the input above. Focus the debugger, then press Space to run, N to step over or ? for all keys.
Run it yourself
These commands use qipx, which needs Node.js 22 or newer. First download the Wasm and the example input:
curl -o unescape_html.wasm https://calculated.world/components/47975e98ce97fbb9c8a166184a448cc23f029d9d3fb083946f0122d1ee60293d.wasm
printf '%s' 'Fish & chips — café <3 😀 © 2026 ¬it;' > input.txt
Run it:
npx @qip.dev/qipx run -i input.txt unescape_html.wasm
Step through it in the qipdb debugger:
npx @qip.dev/qipx qip.dev tui \
-F component=@unescape_html.wasm \
-F 'input=<input.txt' \
tui/qipdb.wasm
Print qipdb’s first screen without a terminal, for agents:
npx @qip.dev/qipx qip.dev run \
-F component=@unescape_html.wasm \
-F 'input=<input.txt' \
tui/qipdb.wasm
The debugger commands fetch qipdb from qip.dev and save it as tui/qipdb.wasm. Or use the
QIP component debugger
in your browser.
Visitor benchmarks
Preparing your browser benchmark…
| Device | Browser | Warm median | First pass |
|---|---|---|---|
| macOS desktop macOS / Arm64 10 cores ~16.0 GiB | Chrome 156.0.8078.48 | 3.0 ms | 3.9 ms |
Notes
- Notes
- Single-file C with no headers or libc, compiled with zig cc. The 2,231 WHATWG names are stored as 2,125 names without `;`, each flagged if it is also a legacy name; record offsets are built in memory on first call so only the packed names and values ship in the Wasm. Lookup is a binary search.
- Builds on
- Ported from the author's Zig submission 9a29dd86-23ab-4ba7-bcd3-b83cc8ef4d57, itself ported from their Rust submission a7f4b2e2-384b-41b6-a54f-cfcaa391b0a0.
- AI models
- claude-opus-5-5
Source
Show source (62.7 KiB)
// unescape_html in C: a QIP component that decodes every HTML character reference in
// UTF-8 text and copies all other bytes unchanged. One self-contained file with no
// headers or libc. The table at the bottom is the WHATWG list of 2,231 names (Python's
// html.entities.html5), stored as 2,125 names without `;`, each flagged if it is also a
// legacy name that may omit it. Record offsets are built in zeroed memory on first use,
// so only the packed names and values ship in the Wasm. Lookup is a binary search.
//
// Build: zig cc --target=wasm32-freestanding -Os -nostdlib -fno-builtin -Wl,--no-entry
// -Wl,--export=input_ptr -Wl,--export=input_utf8_cap -Wl,--export=output_ptr
// -Wl,--export=output_utf8_cap -Wl,--export=render -Wl,--strip-all
// -Wl,-z,stack-size=65536 -Wl,--initial-memory=3145728 -Wl,--max-memory=3145728
// -o unescape.wasm unescape.c
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef unsigned long long u64;
#define INPUT_CAP (1u << 20)
// The largest growth is `≫⃒` (5 bytes) becoming 6 bytes.
#define OUTPUT_CAP (INPUT_CAP / 5 * 6 + 8)
#define LEGACY_FLAG 0x80
static u8 input[INPUT_CAP];
static u8 output[OUTPUT_CAP];
static u32 out_len;
u32 input_ptr(void) { return (u32)input; }
u32 input_utf8_cap(void) { return INPUT_CAP; }
u32 output_ptr(void) { return (u32)output; }
u32 output_utf8_cap(void) { return OUTPUT_CAP; }
static void emit(const u8 *bytes, u32 len) {
for (u32 i = 0; i < len; i++) output[out_len + i] = bytes[i];
out_len += len;
}
static void emit_byte(u8 b) { output[out_len++] = b; }
static void emit_code_point(u32 c) {
if (c < 0x80) {
emit_byte((u8)c);
} else if (c < 0x800) {
emit_byte(0xC0 | (c >> 6));
emit_byte(0x80 | (c & 0x3F));
} else if (c < 0x10000) {
emit_byte(0xE0 | (c >> 12));
emit_byte(0x80 | ((c >> 6) & 0x3F));
emit_byte(0x80 | (c & 0x3F));
} else {
emit_byte(0xF0 | (c >> 18));
emit_byte(0x80 | ((c >> 12) & 0x3F));
emit_byte(0x80 | ((c >> 6) & 0x3F));
emit_byte(0x80 | (c & 0x3F));
}
}
// Windows-1252 remapping for references to 0x80–0x9F; 0 keeps the code point.
static const u16 c1[32] = {
0x20AC, 0, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021,
0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0, 0x017D, 0,
0, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0, 0x017E, 0x0178,
};
// text[at] is `&` and text[at + 1] is `#`. Returns the index after what was consumed.
static u32 numeric(const u8 *text, u32 len, u32 at) {
u32 i = at + 2;
int hex = i < len && (text[i] | 0x20) == 'x';
if (hex) i++;
u32 start = i, value = 0;
for (; i < len; i++) {
u8 c = text[i];
u32 d;
if (c >= '0' && c <= '9') d = c - '0';
else if (hex && (c | 0x20) >= 'a' && (c | 0x20) <= 'f') d = (c | 0x20) - 'a' + 10;
else break;
// Saturate: anything past U+10FFFF is replaced the same way.
value = value * (hex ? 16 : 10) + d;
if (value > 0x110000) value = 0x110000;
}
if (i == start) {
emit_byte('&');
return at + 1;
}
if (i < len && text[i] == ';') i++;
if (value >= 0x80 && value <= 0x9F && c1[value - 0x80] != 0) {
emit_code_point(c1[value - 0x80]);
} else if (value == 0 || (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF) {
emit_code_point(0xFFFD);
} else {
emit_code_point(value);
}
return i;
}
static int is_alnum(u8 c) {
return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z');
}
// BEGIN GENERATED TABLE
#define ENTITY_COUNT 2125
static const u8 entity_blob[24470] =
"\205\002AElig\303\206\203\001AMP&\206\002Aacute\303\201\006\002Abreve\304\202\205\002Acirc\303\202\003\002Acy\320\220\003\004Afr\360\235\224\204\206\002Agrave\303\200\005\002Alpha\316\221\005"
"\002Amacr\304\200\003\003And\342\251\223\005\002Aogon\304\204\004\004Aopf\360\235\224\270\015\003ApplyFunction\342\201\241\205\002Aring\303\205\004\004Ascr\360\235\222\234\006\003Assign"
"\342\211\224\206\002Atilde\303\203\204\002Auml\303\204\011\003Backslash\342\210\226\004\003Barv\342\253\247\006\003Barwed\342\214\206\003\002Bcy\320\221\007\003Because\342\210\265\012\003Bern"
"oullis\342\204\254\004\002Beta\316\222\003\004Bfr\360\235\224\205\004\004Bopf\360\235\224\271\005\002Breve\313\230\004\003Bscr\342\204\254\006\003Bumpeq\342\211\216\004\002CHcy\320\247\204\002COPY\302"
"\251\006\002Cacute\304\206\003\003Cap\342\213\222\024\003CapitalDifferentialD\342\205\205\007\003Cayleys\342\204\255\006\002Ccaron\304\214\206\002Ccedil\303\207\005\002Cc"
"irc\304\210\007\003Cconint\342\210\260\004\002Cdot\304\212\007\002Cedilla\302\270\011\002CenterDot\302\267\003\003Cfr\342\204\255\003\002Chi\316\247\011\003CircleDot\342\212\231\013\003"
"CircleMinus\342\212\226\012\003CirclePlus\342\212\225\013\003CircleTimes\342\212\227\030\003ClockwiseContourIntegral\342\210\262\025\003Clos"
"eCurlyDoubleQuote\342\200\235\017\003CloseCurlyQuote\342\200\231\005\003Colon\342\210\267\006\003Colone\342\251\264\011\003Congruent\342\211\241\006\003Con"
"int\342\210\257\017\003ContourIntegral\342\210\256\004\003Copf\342\204\202\011\003Coproduct\342\210\220\037\003CounterClockwiseContourIntegr"
"al\342\210\263\005\003Cross\342\250\257\004\004Cscr\360\235\222\236\003\003Cup\342\213\223\006\003CupCap\342\211\215\002\003DD\342\205\205\010\003DDotrahd\342\244\221\004\002DJcy\320\202\004\002DScy\320\205"
"\004\002DZcy\320\217\006\003Dagger\342\200\241\004\003Darr\342\206\241\005\003Dashv\342\253\244\006\002Dcaron\304\216\003\002Dcy\320\224\003\003Del\342\210\207\005\002Delta\316\224\003\004Dfr\360\235\224"
"\207\020\002DiacriticalAcute\302\264\016\002DiacriticalDot\313\231\026\002DiacriticalDoubleAcute\313\235\020\001DiacriticalGr"
"ave`\020\002DiacriticalTilde\313\234\007\003Diamond\342\213\204\015\003DifferentialD\342\205\206\004\004Dopf\360\235\224\273\003\002Dot\302\250\006\003DotDot\342"
"\203\234\010\003DotEqual\342\211\220\025\003DoubleContourIntegral\342\210\257\011\002DoubleDot\302\250\017\003DoubleDownArrow\342\207\223\017\003Doub"
"leLeftArrow\342\207\220\024\003DoubleLeftRightArrow\342\207\224\015\003DoubleLeftTee\342\253\244\023\003DoubleLongLeftArrow\342\237"
"\270\030\003DoubleLongLeftRightArrow\342\237\272\024\003DoubleLongRightArrow\342\237\271\020\003DoubleRightArrow\342\207\222\016\003Do"
"ubleRightTee\342\212\250\015\003DoubleUpArrow\342\207\221\021\003DoubleUpDownArrow\342\207\225\021\003DoubleVerticalBar\342\210\245\011\003D"
"ownArrow\342\206\223\014\003DownArrowBar\342\244\223\020\003DownArrowUpArrow\342\207\265\011\002DownBreve\314\221\023\003DownLeftRightVec"
"tor\342\245\220\021\003DownLeftTeeVector\342\245\236\016\003DownLeftVector\342\206\275\021\003DownLeftVectorBar\342\245\226\022\003DownRight"
"TeeVector\342\245\237\017\003DownRightVector\342\207\201\022\003DownRightVectorBar\342\245\227\007\003DownTee\342\212\244\014\003DownTeeArro"
"w\342\206\247\011\003Downarrow\342\207\223\004\004Dscr\360\235\222\237\006\002Dstrok\304\220\003\002ENG\305\212\203\002ETH\303\220\206\002Eacute\303\211\006\002Ecaron\304\232\205\002Ecirc\303"
"\212\003\002Ecy\320\255\004\002Edot\304\226\003\004Efr\360\235\224\210\206\002Egrave\303\210\007\003Element\342\210\210\005\002Emacr\304\222\020\003EmptySmallSquare\342\227\273\024\003E"
"mptyVerySmallSquare\342\226\253\005\002Eogon\304\230\004\004Eopf\360\235\224\274\007\002Epsilon\316\225\005\003Equal\342\251\265\012\003EqualTilde\342\211\202\013\003E"
"quilibrium\342\207\214\004\003Escr\342\204\260\004\003Esim\342\251\263\003\002Eta\316\227\204\002Euml\303\213\006\003Exists\342\210\203\014\003ExponentialE\342\205\207\003\002Fcy\320"
"\244\003\004Ffr\360\235\224\211\021\003FilledSmallSquare\342\227\274\025\003FilledVerySmallSquare\342\226\252\004\004Fopf\360\235\224\275\006\003ForAll\342\210\200\012"
"\003Fouriertrf\342\204\261\004\003Fscr\342\204\261\004\002GJcy\320\203\202\001GT>\005\002Gamma\316\223\006\002Gammad\317\234\006\002Gbreve\304\236\006\002Gcedil\304\242\005\002Gci"
"rc\304\234\003\002Gcy\320\223\004\002Gdot\304\240\003\004Gfr\360\235\224\212\002\003Gg\342\213\231\004\004Gopf\360\235\224\276\014\003GreaterEqual\342\211\245\020\003GreaterEqualLess"
"\342\213\233\020\003GreaterFullEqual\342\211\247\016\003GreaterGreater\342\252\242\013\003GreaterLess\342\211\267\021\003GreaterSlantEqual\342\251"
"\276\014\003GreaterTilde\342\211\263\004\004Gscr\360\235\222\242\002\003Gt\342\211\253\006\002HARDcy\320\252\005\002Hacek\313\207\003\001Hat^\005\002Hcirc\304\244\003\003Hfr\342\204\214\014\003H"
"ilbertSpace\342\204\213\004\003Hopf\342\204\215\016\003HorizontalLine\342\224\200\004\003Hscr\342\204\213\006\002Hstrok\304\246\014\003HumpDownHump\342\211\216\011\003"
"HumpEqual\342\211\217\004\002IEcy\320\225\005\002IJlig\304\262\004\002IOcy\320\201\206\002Iacute\303\215\205\002Icirc\303\216\003\002Icy\320\230\004\002Idot\304\260\003\003Ifr\342\204\221\206"
"\002Igrave\303\214\002\003Im\342\204\221\005\002Imacr\304\252\012\003ImaginaryI\342\205\210\007\003Implies\342\207\222\003\003Int\342\210\254\010\003Integral\342\210\253\014\003Inter"
"section\342\213\202\016\003InvisibleComma\342\201\243\016\003InvisibleTimes\342\201\242\005\002Iogon\304\256\004\004Iopf\360\235\225\200\004\002Iota\316\231\004\003Isc"
"r\342\204\220\006\002Itilde\304\250\005\002Iukcy\320\206\204\002Iuml\303\217\005\002Jcirc\304\264\003\002Jcy\320\231\003\004Jfr\360\235\224\215\004\004Jopf\360\235\225\201\004\004Jscr\360\235\222\245\006\002Js"
"ercy\320\210\005\002Jukcy\320\204\004\002KHcy\320\245\004\002KJcy\320\214\005\002Kappa\316\232\006\002Kcedil\304\266\003\002Kcy\320\232\003\004Kfr\360\235\224\216\004\004Kopf\360\235\225\202\004\004Ks"
"cr\360\235\222\246\004\002LJcy\320\211\202\001LT<\006\002Lacute\304\271\006\002Lambda\316\233\004\003Lang\342\237\252\012\003Laplacetrf\342\204\222\004\003Larr\342\206\236\006\002Lcaron"
"\304\275\006\002Lcedil\304\273\003\002Lcy\320\233\020\003LeftAngleBracket\342\237\250\011\003LeftArrow\342\206\220\014\003LeftArrowBar\342\207\244\023\003LeftArr"
"owRightArrow\342\207\206\013\003LeftCeiling\342\214\210\021\003LeftDoubleBracket\342\237\246\021\003LeftDownTeeVector\342\245\241\016\003Lef"
"tDownVector\342\207\203\021\003LeftDownVectorBar\342\245\231\011\003LeftFloor\342\214\212\016\003LeftRightArrow\342\206\224\017\003LeftRight"
"Vector\342\245\216\007\003LeftTee\342\212\243\014\003LeftTeeArrow\342\206\244\015\003LeftTeeVector\342\245\232\014\003LeftTriangle\342\212\262\017\003LeftT"
"riangleBar\342\247\217\021\003LeftTriangleEqual\342\212\264\020\003LeftUpDownVector\342\245\221\017\003LeftUpTeeVector\342\245\240\014\003Le"
"ftUpVector\342\206\277\017\003LeftUpVectorBar\342\245\230\012\003LeftVector\342\206\274\015\003LeftVectorBar\342\245\222\011\003Leftarrow\342\207\220"
"\016\003Leftrightarrow\342\207\224\020\003LessEqualGreater\342\213\232\015\003LessFullEqual\342\211\246\013\003LessGreater\342\211\266\010\003Less"
"Less\342\252\241\016\003LessSlantEqual\342\251\275\011\003LessTilde\342\211\262\003\004Lfr\360\235\224\217\002\003Ll\342\213\230\012\003Lleftarrow\342\207\232\006\002Lmidot\304"
"\277\015\003LongLeftArrow\342\237\265\022\003LongLeftRightArrow\342\237\267\016\003LongRightArrow\342\237\266\015\003Longleftarrow\342\237\270\022"
"\003Longleftrightarrow\342\237\272\016\003Longrightarrow\342\237\271\004\004Lopf\360\235\225\203\016\003LowerLeftArrow\342\206\231\017\003LowerRig"
"htArrow\342\206\230\004\003Lscr\342\204\222\003\003Lsh\342\206\260\006\002Lstrok\305\201\002\003Lt\342\211\252\003\003Map\342\244\205\003\002Mcy\320\234\013\003MediumSpace\342\201\237\011\003Mel"
"lintrf\342\204\263\003\004Mfr\360\235\224\220\011\003MinusPlus\342\210\223\004\004Mopf\360\235\225\204\004\003Mscr\342\204\263\002\002Mu\316\234\004\002NJcy\320\212\006\002Nacute\305\203\006\002Nca"
"ron\305\207\006\002Ncedil\305\205\003\002Ncy\320\235\023\003NegativeMediumSpace\342\200\213\022\003NegativeThickSpace\342\200\213\021\003NegativeT"
"hinSpace\342\200\213\025\003NegativeVeryThinSpace\342\200\213\024\003NestedGreaterGreater\342\211\253\016\003NestedLessLess\342\211"
"\252\007\001NewLine\012\003\004Nfr\360\235\224\221\007\003NoBreak\342\201\240\020\002NonBreakingSpace\302\240\004\003Nopf\342\204\225\003\003Not\342\253\254\014\003NotCongru"
"ent\342\211\242\011\003NotCupCap\342\211\255\024\003NotDoubleVerticalBar\342\210\246\012\003NotElement\342\210\211\010\003NotEqual\342\211\240\015\005NotEq"
"ualTilde\342\211\202\314\270\011\003NotExists\342\210\204\012\003NotGreater\342\211\257\017\003NotGreaterEqual\342\211\261\023\005NotGreaterFullEq"
"ual\342\211\247\314\270\021\005NotGreaterGreater\342\211\253\314\270\016\003NotGreaterLess\342\211\271\024\005NotGreaterSlantEqual\342\251\276\314\270\017\003"
"NotGreaterTilde\342\211\265\017\005NotHumpDownHump\342\211\216\314\270\014\005NotHumpEqual\342\211\217\314\270\017\003NotLeftTriangle\342\213\252\022"
"\005NotLeftTriangleBar\342\247\217\314\270\024\003NotLeftTriangleEqual\342\213\254\007\003NotLess\342\211\256\014\003NotLessEqual\342\211\260\016\003"
"NotLessGreater\342\211\270\013\005NotLessLess\342\211\252\314\270\021\005NotLessSlantEqual\342\251\275\314\270\014\003NotLessTilde\342\211\264\027\005No"
"tNestedGreaterGreater\342\252\242\314\270\021\005NotNestedLessLess\342\252\241\314\270\013\003NotPrecedes\342\212\200\020\005NotPrecedesE"
"qual\342\252\257\314\270\025\003NotPrecedesSlantEqual\342\213\240\021\003NotReverseElement\342\210\214\020\003NotRightTriangle\342\213\253\023\005"
"NotRightTriangleBar\342\247\220\314\270\025\003NotRightTriangleEqual\342\213\255\017\005NotSquareSubset\342\212\217\314\270\024\003NotSqu"
"areSubsetEqual\342\213\242\021\005NotSquareSuperset\342\212\220\314\270\026\003NotSquareSupersetEqual\342\213\243\011\006NotSubset\342"
"\212\202\342\203\222\016\003NotSubsetEqual\342\212\210\013\003NotSucceeds\342\212\201\020\005NotSucceedsEqual\342\252\260\314\270\025\003NotSucceedsSlan"
"tEqual\342\213\241\020\005NotSucceedsTilde\342\211\277\314\270\013\006NotSuperset\342\212\203\342\203\222\020\003NotSupersetEqual\342\212\211\010\003NotTil"
"de\342\211\201\015\003NotTildeEqual\342\211\204\021\003NotTildeFullEqual\342\211\207\015\003NotTildeTilde\342\211\211\016\003NotVerticalBar\342"
"\210\244\004\004Nscr\360\235\222\251\206\002Ntilde\303\221\002\002Nu\316\235\005\002OElig\305\222\206\002Oacute\303\223\205\002Ocirc\303\224\003\002Ocy\320\236\006\002Odblac\305\220\003\004Ofr\360\235"
"\224\222\206\002Ograve\303\222\005\002Omacr\305\214\005\002Omega\316\251\007\002Omicron\316\237\004\004Oopf\360\235\225\206\024\003OpenCurlyDoubleQuote\342\200\234\016\003Op"
"enCurlyQuote\342\200\230\002\003Or\342\251\224\004\004Oscr\360\235\222\252\206\002Oslash\303\230\206\002Otilde\303\225\006\003Otimes\342\250\267\204\002Ouml\303\226\007\003OverBar"
"\342\200\276\011\003OverBrace\342\217\236\013\003OverBracket\342\216\264\017\003OverParenthesis\342\217\234\010\003PartialD\342\210\202\003\002Pcy\320\237\003\004Pfr\360\235"
"\224\223\003\002Phi\316\246\002\002Pi\316\240\011\002PlusMinus\302\261\015\003Poincareplane\342\204\214\004\003Popf\342\204\231\002\003Pr\342\252\273\010\003Precedes\342\211\272\015\003Pre"
"cedesEqual\342\252\257\022\003PrecedesSlantEqual\342\211\274\015\003PrecedesTilde\342\211\276\005\003Prime\342\200\263\007\003Product\342\210\217\012\003Pr"
"oportion\342\210\267\014\003Proportional\342\210\235\004\004Pscr\360\235\222\253\003\002Psi\316\250\204\001QUOT\042\003\004Qfr\360\235\224\224\004\003Qopf\342\204\232\004\004Qscr\360\235\222\254"
"\005\003RBarr\342\244\220\203\002REG\302\256\006\002Racute\305\224\004\003Rang\342\237\253\004\003Rarr\342\206\240\006\003Rarrtl\342\244\226\006\002Rcaron\305\230\006\002Rcedil\305\226\003\002Rc"
"y\320\240\002\003Re\342\204\234\016\003ReverseElement\342\210\213\022\003ReverseEquilibrium\342\207\213\024\003ReverseUpEquilibrium\342\245\257\003\003R"
"fr\342\204\234\003\002Rho\316\241\021\003RightAngleBracket\342\237\251\012\003RightArrow\342\206\222\015\003RightArrowBar\342\207\245\023\003RightArrowL"
"eftArrow\342\207\204\014\003RightCeiling\342\214\211\022\003RightDoubleBracket\342\237\247\022\003RightDownTeeVector\342\245\235\017\003Righ"
"tDownVector\342\207\202\022\003RightDownVectorBar\342\245\225\012\003RightFloor\342\214\213\010\003RightTee\342\212\242\015\003RightTeeArrow"
"\342\206\246\016\003RightTeeVector\342\245\233\015\003RightTriangle\342\212\263\020\003RightTriangleBar\342\247\220\022\003RightTriangleEqua"
"l\342\212\265\021\003RightUpDownVector\342\245\217\020\003RightUpTeeVector\342\245\234\015\003RightUpVector\342\206\276\020\003RightUpVector"
"Bar\342\245\224\013\003RightVector\342\207\200\016\003RightVectorBar\342\245\223\012\003Rightarrow\342\207\222\004\003Ropf\342\204\235\014\003RoundImplies\342"
"\245\260\013\003Rrightarrow\342\207\233\004\003Rscr\342\204\233\003\003Rsh\342\206\261\013\003RuleDelayed\342\247\264\006\002SHCHcy\320\251\004\002SHcy\320\250\006\002SOFTcy\320\254\006"
"\002Sacute\305\232\002\003Sc\342\252\274\006\002Scaron\305\240\006\002Scedil\305\236\005\002Scirc\305\234\003\002Scy\320\241\003\004Sfr\360\235\224\226\016\003ShortDownArrow\342\206\223"
"\016\003ShortLeftArrow\342\206\220\017\003ShortRightArrow\342\206\222\014\003ShortUpArrow\342\206\221\005\002Sigma\316\243\013\003SmallCircle\342\210"
"\230\004\004Sopf\360\235\225\212\004\003Sqrt\342\210\232\006\003Square\342\226\241\022\003SquareIntersection\342\212\223\014\003SquareSubset\342\212\217\021\003SquareS"
"ubsetEqual\342\212\221\016\003SquareSuperset\342\212\220\023\003SquareSupersetEqual\342\212\222\013\003SquareUnion\342\212\224\004\004Sscr\360\235"
"\222\256\004\003Star\342\213\206\003\003Sub\342\213\220\006\003Subset\342\213\220\013\003SubsetEqual\342\212\206\010\003Succeeds\342\211\273\015\003SucceedsEqual\342\252\260\022\003S"
"ucceedsSlantEqual\342\211\275\015\003SucceedsTilde\342\211\277\010\003SuchThat\342\210\213\003\003Sum\342\210\221\003\003Sup\342\213\221\010\003Superset\342\212\203"
"\015\003SupersetEqual\342\212\207\006\003Supset\342\213\221\205\002THORN\303\236\005\003TRADE\342\204\242\005\002TSHcy\320\213\004\002TScy\320\246\003\001Tab\011\003\002Tau\316\244\006\002"
"Tcaron\305\244\006\002Tcedil\305\242\003\002Tcy\320\242\003\004Tfr\360\235\224\227\011\003Therefore\342\210\264\005\002Theta\316\230\012\006ThickSpace\342\201\237\342\200\212\011\003Thi"
"nSpace\342\200\211\005\003Tilde\342\210\274\012\003TildeEqual\342\211\203\016\003TildeFullEqual\342\211\205\012\003TildeTilde\342\211\210\004\004Topf\360\235\225\213\011\003"
"TripleDot\342\203\233\004\004Tscr\360\235\222\257\006\002Tstrok\305\246\206\002Uacute\303\232\004\003Uarr\342\206\237\010\003Uarrocir\342\245\211\005\002Ubrcy\320\216\006\002Ubrev"
"e\305\254\205\002Ucirc\303\233\003\002Ucy\320\243\006\002Udblac\305\260\003\004Ufr\360\235\224\230\206\002Ugrave\303\231\005\002Umacr\305\252\010\001UnderBar_\012\003UnderBrace"
"\342\217\237\014\003UnderBracket\342\216\265\020\003UnderParenthesis\342\217\235\005\003Union\342\213\203\011\003UnionPlus\342\212\216\005\002Uogon\305\262\004\004Uopf"
"\360\235\225\214\007\003UpArrow\342\206\221\012\003UpArrowBar\342\244\222\020\003UpArrowDownArrow\342\207\205\013\003UpDownArrow\342\206\225\015\003UpEquilibr"
"ium\342\245\256\005\003UpTee\342\212\245\012\003UpTeeArrow\342\206\245\007\003Uparrow\342\207\221\013\003Updownarrow\342\207\225\016\003UpperLeftArrow\342\206\226\017\003"
"UpperRightArrow\342\206\227\004\002Upsi\317\222\007\002Upsilon\316\245\005\002Uring\305\256\004\004Uscr\360\235\222\260\006\002Utilde\305\250\204\002Uuml\303\234\005\003VDas"
"h\342\212\253\004\003Vbar\342\253\253\003\002Vcy\320\222\005\003Vdash\342\212\251\006\003Vdashl\342\253\246\003\003Vee\342\213\201\006\003Verbar\342\200\226\004\003Vert\342\200\226\013\003VerticalB"
"ar\342\210\243\014\001VerticalLine|\021\003VerticalSeparator\342\235\230\015\003VerticalTilde\342\211\200\015\003VeryThinSpace\342\200\212\003\004"
"Vfr\360\235\224\231\004\004Vopf\360\235\225\215\004\004Vscr\360\235\222\261\006\003Vvdash\342\212\252\005\002Wcirc\305\264\005\003Wedge\342\213\200\003\004Wfr\360\235\224\232\004\004Wopf\360\235\225\216\004\004Ws"
"cr\360\235\222\262\003\004Xfr\360\235\224\233\002\002Xi\316\236\004\004Xopf\360\235\225\217\004\004Xscr\360\235\222\263\004\002YAcy\320\257\004\002YIcy\320\207\004\002YUcy\320\256\206\002Yacute\303\235\005\002Yci"
"rc\305\266\003\002Ycy\320\253\003\004Yfr\360\235\224\234\004\004Yopf\360\235\225\220\004\004Yscr\360\235\222\264\004\002Yuml\305\270\004\002ZHcy\320\226\006\002Zacute\305\271\006\002Zcaron\305\275\003\002Zc"
"y\320\227\004\002Zdot\305\273\016\003ZeroWidthSpace\342\200\213\004\002Zeta\316\226\003\003Zfr\342\204\250\004\003Zopf\342\204\244\004\004Zscr\360\235\222\265\206\002aacute\303\241\006\002abr"
"eve\304\203\002\003ac\342\210\276\003\005acE\342\210\276\314\263\003\003acd\342\210\277\205\002acirc\303\242\205\002acute\302\264\003\002acy\320\260\205\002aelig\303\246\002\003af\342\201\241\003\004afr\360\235\224\236"
"\206\002agrave\303\240\007\003alefsym\342\204\265\005\003aleph\342\204\265\005\002alpha\316\261\005\002amacr\304\201\005\003amalg\342\250\277\203\001amp&\003\003and\342\210\247\006\003anda"
"nd\342\251\225\004\003andd\342\251\234\010\003andslope\342\251\230\004\003andv\342\251\232\003\003ang\342\210\240\004\003ange\342\246\244\005\003angle\342\210\240\006\003angmsd\342\210\241\010\003angm"
"sdaa\342\246\250\010\003angmsdab\342\246\251\010\003angmsdac\342\246\252\010\003angmsdad\342\246\253\010\003angmsdae\342\246\254\010\003angmsdaf\342\246\255\010\003angmsd"
"ag\342\246\256\010\003angmsdah\342\246\257\005\003angrt\342\210\237\007\003angrtvb\342\212\276\010\003angrtvbd\342\246\235\006\003angsph\342\210\242\005\002angst\303\205\007\003angza"
"rr\342\215\274\005\002aogon\304\205\004\004aopf\360\235\225\222\002\003ap\342\211\210\003\003apE\342\251\260\006\003apacir\342\251\257\003\003ape\342\211\212\004\003apid\342\211\213\004\001apos'\006\003appr"
"ox\342\211\210\010\003approxeq\342\211\212\205\002aring\303\245\004\004ascr\360\235\222\266\003\001ast*\005\003asymp\342\211\210\007\003asympeq\342\211\215\206\002atilde\303\243\204\002aum"
"l\303\244\010\003awconint\342\210\263\005\003awint\342\250\221\004\003bNot\342\253\255\010\003backcong\342\211\214\013\002backepsilon\317\266\011\003backprime\342\200\265\007\003b"
"acksim\342\210\275\011\003backsimeq\342\213\215\006\003barvee\342\212\275\006\003barwed\342\214\205\010\003barwedge\342\214\205\004\003bbrk\342\216\265\010\003bbrktbrk\342\216\266"
"\005\003bcong\342\211\214\003\002bcy\320\261\005\003bdquo\342\200\236\006\003becaus\342\210\265\007\003because\342\210\265\007\003bemptyv\342\246\260\005\002bepsi\317\266\006\003bernou\342"
"\204\254\004\002beta\316\262\004\003beth\342\204\266\007\003between\342\211\254\003\004bfr\360\235\224\237\006\003bigcap\342\213\202\007\003bigcirc\342\227\257\006\003bigcup\342\213\203\007\003bigo"
"dot\342\250\200\010\003bigoplus\342\250\201\011\003bigotimes\342\250\202\010\003bigsqcup\342\250\206\007\003bigstar\342\230\205\017\003bigtriangledown\342\226\275\015\003"
"bigtriangleup\342\226\263\010\003biguplus\342\250\204\006\003bigvee\342\213\201\010\003bigwedge\342\213\200\006\003bkarow\342\244\215\014\003blacklozenge\342\247"
"\253\013\003blacksquare\342\226\252\015\003blacktriangle\342\226\264\021\003blacktriangledown\342\226\276\021\003blacktriangleleft\342\227\202\022"
"\003blacktriangleright\342\226\270\005\003blank\342\220\243\005\003blk12\342\226\222\005\003blk14\342\226\221\005\003blk34\342\226\223\005\003block\342\226\210\003\004bne=\342\203"
"\245\007\006bnequiv\342\211\241\342\203\245\004\003bnot\342\214\220\004\004bopf\360\235\225\223\003\003bot\342\212\245\006\003bottom\342\212\245\006\003bowtie\342\213\210\005\003boxDL\342\225\227\005\003box"
"DR\342\225\224\005\003boxDl\342\225\226\005\003boxDr\342\225\223\004\003boxH\342\225\220\005\003boxHD\342\225\246\005\003boxHU\342\225\251\005\003boxHd\342\225\244\005\003boxHu\342\225\247\005\003boxU"
"L\342\225\235\005\003boxUR\342\225\232\005\003boxUl\342\225\234\005\003boxUr\342\225\231\004\003boxV\342\225\221\005\003boxVH\342\225\254\005\003boxVL\342\225\243\005\003boxVR\342\225\240\005\003boxVh"
"\342\225\253\005\003boxVl\342\225\242\005\003boxVr\342\225\237\006\003boxbox\342\247\211\005\003boxdL\342\225\225\005\003boxdR\342\225\222\005\003boxdl\342\224\220\005\003boxdr\342\224\214\004\003boxh"
"\342\224\200\005\003boxhD\342\225\245\005\003boxhU\342\225\250\005\003boxhd\342\224\254\005\003boxhu\342\224\264\010\003boxminus\342\212\237\007\003boxplus\342\212\236\010\003boxtimes\342\212"
"\240\005\003boxuL\342\225\233\005\003boxuR\342\225\230\005\003boxul\342\224\230\005\003boxur\342\224\224\004\003boxv\342\224\202\005\003boxvH\342\225\252\005\003boxvL\342\225\241\005\003boxvR\342\225\236"
"\005\003boxvh\342\224\274\005\003boxvl\342\224\244\005\003boxvr\342\224\234\006\003bprime\342\200\265\005\002breve\313\230\206\002brvbar\302\246\004\004bscr\360\235\222\267\005\003bsemi\342\201\217"
"\004\003bsim\342\210\275\005\003bsime\342\213\215\004\001bsol\134\005\003bsolb\342\247\205\010\003bsolhsub\342\237\210\004\003bull\342\200\242\006\003bullet\342\200\242\004\003bump\342\211\216\005\003"
"bumpE\342\252\256\005\003bumpe\342\211\217\006\003bumpeq\342\211\217\006\002cacute\304\207\003\003cap\342\210\251\006\003capand\342\251\204\010\003capbrcup\342\251\211\006\003capcap\342"
"\251\213\006\003capcup\342\251\207\006\003capdot\342\251\200\004\006caps\342\210\251\357\270\200\005\003caret\342\201\201\005\002caron\313\207\005\003ccaps\342\251\215\006\002ccaron\304\215\206\002cce"
"dil\303\247\005\002ccirc\304\211\005\003ccups\342\251\214\007\003ccupssm\342\251\220\004\002cdot\304\213\205\002cedil\302\270\007\003cemptyv\342\246\262\204\002cent\302\242\011\002cente"
"rdot\302\267\003\004cfr\360\235\224\240\004\002chcy\321\207\005\003check\342\234\223\011\003checkmark\342\234\223\003\002chi\317\207\003\003cir\342\227\213\004\003cirE\342\247\203\004\002circ\313\206\006"
"\003circeq\342\211\227\017\003circlearrowleft\342\206\272\020\003circlearrowright\342\206\273\010\002circledR\302\256\010\003circledS\342\223\210\012\003ci"
"rcledast\342\212\233\013\003circledcirc\342\212\232\013\003circleddash\342\212\235\004\003cire\342\211\227\010\003cirfnint\342\250\220\006\003cirmid\342\253\257\007\003ci"
"rscir\342\247\202\005\003clubs\342\231\243\010\003clubsuit\342\231\243\005\001colon:\006\003colone\342\211\224\007\003coloneq\342\211\224\005\001comma,\006\001commat@\004"
"\003comp\342\210\201\006\003compfn\342\210\230\012\003complement\342\210\201\011\003complexes\342\204\202\004\003cong\342\211\205\007\003congdot\342\251\255\006\003conint\342\210\256"
"\004\004copf\360\235\225\224\006\003coprod\342\210\220\204\002copy\302\251\006\003copysr\342\204\227\005\003crarr\342\206\265\005\003cross\342\234\227\004\004cscr\360\235\222\270\004\003csub\342\253\217\005"
"\003csube\342\253\221\004\003csup\342\253\220\005\003csupe\342\253\222\005\003ctdot\342\213\257\007\003cudarrl\342\244\270\007\003cudarrr\342\244\265\005\003cuepr\342\213\236\005\003cuesc\342"
"\213\237\006\003cularr\342\206\266\007\003cularrp\342\244\275\003\003cup\342\210\252\010\003cupbrcap\342\251\210\006\003cupcap\342\251\206\006\003cupcup\342\251\212\006\003cupdot\342\212\215\005"
"\003cupor\342\251\205\004\006cups\342\210\252\357\270\200\006\003curarr\342\206\267\007\003curarrm\342\244\274\013\003curlyeqprec\342\213\236\013\003curlyeqsucc\342\213\237\010\003cu"
"rlyvee\342\213\216\012\003curlywedge\342\213\217\206\002curren\302\244\016\003curvearrowleft\342\206\266\017\003curvearrowright\342\206\267\005\003cuvee"
"\342\213\216\005\003cuwed\342\213\217\010\003cwconint\342\210\262\005\003cwint\342\210\261\006\003cylcty\342\214\255\004\003dArr\342\207\223\004\003dHar\342\245\245\006\003dagger\342\200\240\006\003da"
"leth\342\204\270\004\003darr\342\206\223\004\003dash\342\200\220\005\003dashv\342\212\243\007\003dbkarow\342\244\217\005\002dblac\313\235\006\002dcaron\304\217\003\002dcy\320\264\002\003dd\342\205\206"
"\007\003ddagger\342\200\241\005\003ddarr\342\207\212\007\003ddotseq\342\251\267\203\002deg\302\260\005\002delta\316\264\007\003demptyv\342\246\261\006\003dfisht\342\245\277\003\004dfr\360\235"
"\224\241\005\003dharl\342\207\203\005\003dharr\342\207\202\004\003diam\342\213\204\007\003diamond\342\213\204\013\003diamondsuit\342\231\246\005\003diams\342\231\246\003\002die\302\250\007\002di"
"gamma\317\235\005\003disin\342\213\262\003\002div\303\267\206\002divide\303\267\015\003divideontimes\342\213\207\006\003divonx\342\213\207\004\002djcy\321\222\006\003dlcorn\342"
"\214\236\006\003dlcrop\342\214\215\006\001dollar$\004\004dopf\360\235\225\225\003\002dot\313\231\005\003doteq\342\211\220\010\003doteqdot\342\211\221\010\003dotminus\342\210\270\007\003dot"
"plus\342\210\224\011\003dotsquare\342\212\241\016\003doublebarwedge\342\214\206\011\003downarrow\342\206\223\016\003downdownarrows\342\207\212\017\003downh"
"arpoonleft\342\207\203\020\003downharpoonright\342\207\202\010\003drbkarow\342\244\220\006\003drcorn\342\214\237\006\003drcrop\342\214\214\004\004dscr\360\235\222\271\004"
"\002dscy\321\225\004\003dsol\342\247\266\006\002dstrok\304\221\005\003dtdot\342\213\261\004\003dtri\342\226\277\005\003dtrif\342\226\276\005\003duarr\342\207\265\005\003duhar\342\245\257\007\003dwa"
"ngle\342\246\246\004\002dzcy\321\237\010\003dzigrarr\342\237\277\005\003eDDot\342\251\267\004\003eDot\342\211\221\206\002eacute\303\251\006\003easter\342\251\256\006\002ecaron\304\233\004\003"
"ecir\342\211\226\205\002ecirc\303\252\006\003ecolon\342\211\225\003\002ecy\321\215\004\002edot\304\227\002\003ee\342\205\207\005\003efDot\342\211\222\003\004efr\360\235\224\242\002\003eg\342\252\232\206\002egr"
"ave\303\250\003\003egs\342\252\226\006\003egsdot\342\252\230\002\003el\342\252\231\010\003elinters\342\217\247\003\003ell\342\204\223\003\003els\342\252\225\006\003elsdot\342\252\227\005\002emacr\304\223"
"\005\003empty\342\210\205\010\003emptyset\342\210\205\006\003emptyv\342\210\205\004\003emsp\342\200\203\006\003emsp13\342\200\204\006\003emsp14\342\200\205\003\002eng\305\213\004\003ensp\342\200"
"\202\005\002eogon\304\231\004\004eopf\360\235\225\226\004\003epar\342\213\225\006\003eparsl\342\247\243\005\003eplus\342\251\261\004\002epsi\316\265\007\002epsilon\316\265\005\002epsiv\317\265\006\003"
"eqcirc\342\211\226\007\003eqcolon\342\211\225\005\003eqsim\342\211\202\012\003eqslantgtr\342\252\226\013\003eqslantless\342\252\225\006\001equals=\006\003equest\342"
"\211\237\005\003equiv\342\211\241\007\003equivDD\342\251\270\010\003eqvparsl\342\247\245\005\003erDot\342\211\223\005\003erarr\342\245\261\004\003escr\342\204\257\005\003esdot\342\211\220\004\003es"
"im\342\211\202\003\002eta\316\267\203\002eth\303\260\204\002euml\303\253\004\003euro\342\202\254\004\001excl!\005\003exist\342\210\203\013\003expectation\342\204\260\014\003exponenti"
"ale\342\205\207\015\003fallingdotseq\342\211\222\003\002fcy\321\204\006\003female\342\231\200\006\003ffilig\357\254\203\005\003fflig\357\254\200\006\003ffllig\357\254\204\003\004ffr\360"
"\235\224\243\005\003filig\357\254\201\005\002fjligfj\004\003flat\342\231\255\005\003fllig\357\254\202\005\003fltns\342\226\261\004\002fnof\306\222\004\004fopf\360\235\225\227\006\003forall\342\210\200"
"\004\003fork\342\213\224\005\003forkv\342\253\231\010\003fpartint\342\250\215\206\002frac12\302\275\006\003frac13\342\205\223\206\002frac14\302\274\006\003frac15\342\205\225\006\003frac"
"16\342\205\231\006\003frac18\342\205\233\006\003frac23\342\205\224\006\003frac25\342\205\226\206\002frac34\302\276\006\003frac35\342\205\227\006\003frac38\342\205\234\006\003frac45\342\205"
"\230\006\003frac56\342\205\232\006\003frac58\342\205\235\006\003frac78\342\205\236\005\003frasl\342\201\204\005\003frown\342\214\242\004\004fscr\360\235\222\273\002\003gE\342\211\247\003\003gEl\342\252\214\006"
"\002gacute\307\265\005\002gamma\316\263\006\002gammad\317\235\003\003gap\342\252\206\006\002gbreve\304\237\005\002gcirc\304\235\003\002gcy\320\263\004\002gdot\304\241\002\003ge\342\211\245\003\003g"
"el\342\213\233\003\003geq\342\211\245\004\003geqq\342\211\247\010\003geqslant\342\251\276\003\003ges\342\251\276\005\003gescc\342\252\251\006\003gesdot\342\252\200\007\003gesdoto\342\252\202\010\003ge"
"sdotol\342\252\204\004\006gesl\342\213\233\357\270\200\006\003gesles\342\252\224\003\004gfr\360\235\224\244\002\003gg\342\211\253\003\003ggg\342\213\231\005\003gimel\342\204\267\004\002gjcy\321\223\002\003gl\342\211"
"\267\003\003glE\342\252\222\003\003gla\342\252\245\003\003glj\342\252\244\003\003gnE\342\211\251\004\003gnap\342\252\212\010\003gnapprox\342\252\212\003\003gne\342\252\210\004\003gneq\342\252\210\005\003gneqq\342"
"\211\251\005\003gnsim\342\213\247\004\004gopf\360\235\225\230\005\001grave`\004\003gscr\342\204\212\004\003gsim\342\211\263\005\003gsime\342\252\216\005\003gsiml\342\252\220\202\001gt>\004\003gtcc\342"
"\252\247\005\003gtcir\342\251\272\005\003gtdot\342\213\227\006\003gtlPar\342\246\225\007\003gtquest\342\251\274\011\003gtrapprox\342\252\206\006\003gtrarr\342\245\270\006\003gtrdot\342\213"
"\227\011\003gtreqless\342\213\233\012\003gtreqqless\342\252\214\007\003gtrless\342\211\267\006\003gtrsim\342\211\263\011\006gvertneqq\342\211\251\357\270\200\004\006gvnE\342\211\251\357"
"\270\200\004\003hArr\342\207\224\006\003hairsp\342\200\212\004\002half\302\275\006\003hamilt\342\204\213\006\002hardcy\321\212\004\003harr\342\206\224\007\003harrcir\342\245\210\005\003harrw\342"
"\206\255\004\003hbar\342\204\217\005\002hcirc\304\245\006\003hearts\342\231\245\011\003heartsuit\342\231\245\006\003hellip\342\200\246\006\003hercon\342\212\271\003\004hfr\360\235\224\245\010\003hk"
"searow\342\244\245\010\003hkswarow\342\244\246\005\003hoarr\342\207\277\006\003homtht\342\210\273\015\003hookleftarrow\342\206\251\016\003hookrightarrow\342\206\252"
"\004\004hopf\360\235\225\231\006\003horbar\342\200\225\004\004hscr\360\235\222\275\006\003hslash\342\204\217\006\002hstrok\304\247\006\003hybull\342\201\203\006\003hyphen\342\200\220\206\002iacu"
"te\303\255\002\003ic\342\201\243\205\002icirc\303\256\003\002icy\320\270\004\002iecy\320\265\205\002iexcl\302\241\003\003iff\342\207\224\003\004ifr\360\235\224\246\206\002igrave\303\254\002\003ii\342\205\210\006\003"
"iiiint\342\250\214\005\003iiint\342\210\255\006\003iinfin\342\247\234\005\003iiota\342\204\251\005\002ijlig\304\263\005\002imacr\304\253\005\003image\342\204\221\010\003imagline\342\204"
"\220\010\003imagpart\342\204\221\005\002imath\304\261\004\003imof\342\212\267\005\002imped\306\265\002\003in\342\210\210\006\003incare\342\204\205\005\003infin\342\210\236\010\003infintie\342"
"\247\235\006\002inodot\304\261\003\003int\342\210\253\006\003intcal\342\212\272\010\003integers\342\204\244\010\003intercal\342\212\272\010\003intlarhk\342\250\227\007\003intprod\342"
"\250\274\004\002iocy\321\221\005\002iogon\304\257\004\004iopf\360\235\225\232\004\002iota\316\271\005\003iprod\342\250\274\206\002iquest\302\277\004\004iscr\360\235\222\276\004\003isin\342\210\210\005\003is"
"inE\342\213\271\007\003isindot\342\213\265\005\003isins\342\213\264\006\003isinsv\342\213\263\005\003isinv\342\210\210\002\003it\342\201\242\006\002itilde\304\251\005\002iukcy\321\226\204\002ium"
"l\303\257\005\002jcirc\304\265\003\002jcy\320\271\003\004jfr\360\235\224\247\005\002jmath\310\267\004\004jopf\360\235\225\233\004\004jscr\360\235\222\277\006\002jsercy\321\230\005\002jukcy\321\224\005\002ka"
"ppa\316\272\006\002kappav\317\260\006\002kcedil\304\267\003\002kcy\320\272\003\004kfr\360\235\224\250\006\002kgreen\304\270\004\002khcy\321\205\004\002kjcy\321\234\004\004kopf\360\235\225\234\004\004k"
"scr\360\235\223\200\005\003lAarr\342\207\232\004\003lArr\342\207\220\006\003lAtail\342\244\233\005\003lBarr\342\244\216\002\003lE\342\211\246\003\003lEg\342\252\213\004\003lHar\342\245\242\006\002lacute\304"
"\272\010\003laemptyv\342\246\264\006\003lagran\342\204\222\006\002lambda\316\273\004\003lang\342\237\250\005\003langd\342\246\221\006\003langle\342\237\250\003\003lap\342\252\205\205\002laquo"
"\302\253\004\003larr\342\206\220\005\003larrb\342\207\244\007\003larrbfs\342\244\237\006\003larrfs\342\244\235\006\003larrhk\342\206\251\006\003larrlp\342\206\253\006\003larrpl\342\244\271\007\003l"
"arrsim\342\245\263\006\003larrtl\342\206\242\003\003lat\342\252\253\006\003latail\342\244\231\004\003late\342\252\255\005\006lates\342\252\255\357\270\200\005\003lbarr\342\244\214\005\003lbbrk\342\235"
"\262\006\001lbrace{\006\001lbrack[\005\003lbrke\342\246\213\007\003lbrksld\342\246\217\007\003lbrkslu\342\246\215\006\002lcaron\304\276\006\002lcedil\304\274\005\003lceil"
"\342\214\210\004\001lcub{\003\002lcy\320\273\004\003ldca\342\244\266\005\003ldquo\342\200\234\006\003ldquor\342\200\236\007\003ldrdhar\342\245\247\010\003ldrushar\342\245\213\004\003ldsh\342\206"
"\262\002\003le\342\211\244\011\003leftarrow\342\206\220\015\003leftarrowtail\342\206\242\017\003leftharpoondown\342\206\275\015\003leftharpoonup\342\206\274\016\003"
"leftleftarrows\342\207\207\016\003leftrightarrow\342\206\224\017\003leftrightarrows\342\207\206\021\003leftrightharpoons\342\207\213\023\003"
"leftrightsquigarrow\342\206\255\016\003leftthreetimes\342\213\213\003\003leg\342\213\232\003\003leq\342\211\244\004\003leqq\342\211\246\010\003leqslant\342\251\275\003"
"\003les\342\251\275\005\003lescc\342\252\250\006\003lesdot\342\251\277\007\003lesdoto\342\252\201\010\003lesdotor\342\252\203\004\006lesg\342\213\232\357\270\200\006\003lesges\342\252\223\012\003le"
"ssapprox\342\252\205\007\003lessdot\342\213\226\011\003lesseqgtr\342\213\232\012\003lesseqqgtr\342\252\213\007\003lessgtr\342\211\266\007\003lesssim\342\211\262\006\003lf"
"isht\342\245\274\006\003lfloor\342\214\212\003\004lfr\360\235\224\251\002\003lg\342\211\266\003\003lgE\342\252\221\005\003lhard\342\206\275\005\003lharu\342\206\274\006\003lharul\342\245\252\005\003lhblk"
"\342\226\204\004\002ljcy\321\231\002\003ll\342\211\252\005\003llarr\342\207\207\010\003llcorner\342\214\236\006\003llhard\342\245\253\005\003lltri\342\227\272\006\002lmidot\305\200\006\003lmoust"
"\342\216\260\012\003lmoustache\342\216\260\003\003lnE\342\211\250\004\003lnap\342\252\211\010\003lnapprox\342\252\211\003\003lne\342\252\207\004\003lneq\342\252\207\005\003lneqq\342\211\250\005\003lns"
"im\342\213\246\005\003loang\342\237\254\005\003loarr\342\207\275\005\003lobrk\342\237\246\015\003longleftarrow\342\237\265\022\003longleftrightarrow\342\237\267\012\003lo"
"ngmapsto\342\237\274\016\003longrightarrow\342\237\266\015\003looparrowleft\342\206\253\016\003looparrowright\342\206\254\005\003lopar\342\246\205\004\004l"
"opf\360\235\225\235\006\003loplus\342\250\255\007\003lotimes\342\250\264\006\003lowast\342\210\227\006\001lowbar_\003\003loz\342\227\212\007\003lozenge\342\227\212\004\003lozf\342\247\253\004"
"\001lpar(\006\003lparlt\342\246\223\005\003lrarr\342\207\206\010\003lrcorner\342\214\237\005\003lrhar\342\207\213\006\003lrhard\342\245\255\003\003lrm\342\200\216\005\003lrtri\342\212\277\006"
"\003lsaquo\342\200\271\004\004lscr\360\235\223\201\003\003lsh\342\206\260\004\003lsim\342\211\262\005\003lsime\342\252\215\005\003lsimg\342\252\217\004\001lsqb[\005\003lsquo\342\200\230\006\003lsqu"
"or\342\200\232\006\002lstrok\305\202\202\001lt<\004\003ltcc\342\252\246\005\003ltcir\342\251\271\005\003ltdot\342\213\226\006\003lthree\342\213\213\006\003ltimes\342\213\211\006\003ltlarr\342"
"\245\266\007\003ltquest\342\251\273\006\003ltrPar\342\246\226\004\003ltri\342\227\203\005\003ltrie\342\212\264\005\003ltrif\342\227\202\010\003lurdshar\342\245\212\007\003luruhar\342\245\246\011"
"\006lvertneqq\342\211\250\357\270\200\004\006lvnE\342\211\250\357\270\200\005\003mDDot\342\210\272\204\002macr\302\257\004\003male\342\231\202\004\003malt\342\234\240\007\003maltese\342\234\240\003\003ma"
"p\342\206\246\006\003mapsto\342\206\246\012\003mapstodown\342\206\247\012\003mapstoleft\342\206\244\010\003mapstoup\342\206\245\006\003marker\342\226\256\006\003mcomma\342\250\251"
"\003\002mcy\320\274\005\003mdash\342\200\224\015\003measuredangle\342\210\241\003\004mfr\360\235\224\252\003\003mho\342\204\247\205\002micro\302\265\003\003mid\342\210\243\006\001midast*\006\003"
"midcir\342\253\260\206\002middot\302\267\005\003minus\342\210\222\006\003minusb\342\212\237\006\003minusd\342\210\270\007\003minusdu\342\250\252\004\003mlcp\342\253\233\004\003mldr\342\200"
"\246\006\003mnplus\342\210\223\006\003models\342\212\247\004\004mopf\360\235\225\236\002\003mp\342\210\223\004\004mscr\360\235\223\202\006\003mstpos\342\210\276\002\002mu\316\274\010\003multimap\342\212\270"
"\005\003mumap\342\212\270\003\005nGg\342\213\231\314\270\003\006nGt\342\211\253\342\203\222\004\005nGtv\342\211\253\314\270\012\003nLeftarrow\342\207\215\017\003nLeftrightarrow\342\207\216\003\005n"
"Ll\342\213\230\314\270\003\006nLt\342\211\252\342\203\222\004\005nLtv\342\211\252\314\270\013\003nRightarrow\342\207\217\006\003nVDash\342\212\257\006\003nVdash\342\212\256\005\003nabla\342\210\207\006\002n"
"acute\305\204\004\006nang\342\210\240\342\203\222\003\003nap\342\211\211\004\005napE\342\251\260\314\270\005\005napid\342\211\213\314\270\005\002napos\305\211\007\003napprox\342\211\211\005\003natur\342\231"
"\256\007\003natural\342\231\256\010\003naturals\342\204\225\204\002nbsp\302\240\005\005nbump\342\211\216\314\270\006\005nbumpe\342\211\217\314\270\004\003ncap\342\251\203\006\002ncaron\305\210\006\002"
"ncedil\305\206\005\003ncong\342\211\207\010\005ncongdot\342\251\255\314\270\004\003ncup\342\251\202\003\002ncy\320\275\005\003ndash\342\200\223\002\003ne\342\211\240\005\003neArr\342\207\227\006\003ne"
"arhk\342\244\244\005\003nearr\342\206\227\007\003nearrow\342\206\227\005\005nedot\342\211\220\314\270\006\003nequiv\342\211\242\006\003nesear\342\244\250\005\005nesim\342\211\202\314\270\006\003nex"
"ist\342\210\204\007\003nexists\342\210\204\003\004nfr\360\235\224\253\003\005ngE\342\211\247\314\270\003\003nge\342\211\261\004\003ngeq\342\211\261\005\005ngeqq\342\211\247\314\270\011\005ngeqslant\342\251\276"
"\314\270\004\005nges\342\251\276\314\270\005\003ngsim\342\211\265\003\003ngt\342\211\257\004\003ngtr\342\211\257\005\003nhArr\342\207\216\005\003nharr\342\206\256\005\003nhpar\342\253\262\002\003ni\342\210\213\003\003n"
"is\342\213\274\004\003nisd\342\213\272\003\003niv\342\210\213\004\002njcy\321\232\005\003nlArr\342\207\215\003\005nlE\342\211\246\314\270\005\003nlarr\342\206\232\004\003nldr\342\200\245\003\003nle\342\211\260\012\003n"
"leftarrow\342\206\232\017\003nleftrightarrow\342\206\256\004\003nleq\342\211\260\005\005nleqq\342\211\246\314\270\011\005nleqslant\342\251\275\314\270\004\005nles\342\251\275\314\270"
"\005\003nless\342\211\256\005\003nlsim\342\211\264\003\003nlt\342\211\256\005\003nltri\342\213\252\006\003nltrie\342\213\254\004\003nmid\342\210\244\004\004nopf\360\235\225\237\203\002not\302\254\005\003not"
"in\342\210\211\006\005notinE\342\213\271\314\270\010\005notindot\342\213\265\314\270\007\003notinva\342\210\211\007\003notinvb\342\213\267\007\003notinvc\342\213\266\005\003notni\342\210\214\007"
"\003notniva\342\210\214\007\003notnivb\342\213\276\007\003notnivc\342\213\275\004\003npar\342\210\246\011\003nparallel\342\210\246\006\006nparsl\342\253\275\342\203\245\005\005npart\342"
"\210\202\314\270\007\003npolint\342\250\224\003\003npr\342\212\200\006\003nprcue\342\213\240\004\005npre\342\252\257\314\270\005\003nprec\342\212\200\007\005npreceq\342\252\257\314\270\005\003nrArr\342\207\217"
"\005\003nrarr\342\206\233\006\005nrarrc\342\244\263\314\270\006\005nrarrw\342\206\235\314\270\013\003nrightarrow\342\206\233\005\003nrtri\342\213\253\006\003nrtrie\342\213\255\003\003nsc\342\212"
"\201\006\003nsccue\342\213\241\004\005nsce\342\252\260\314\270\004\004nscr\360\235\223\203\011\003nshortmid\342\210\244\016\003nshortparallel\342\210\246\004\003nsim\342\211\201\005\003nsi"
"me\342\211\204\006\003nsimeq\342\211\204\005\003nsmid\342\210\244\005\003nspar\342\210\246\007\003nsqsube\342\213\242\007\003nsqsupe\342\213\243\004\003nsub\342\212\204\005\005nsubE\342\253\205\314"
"\270\005\003nsube\342\212\210\007\006nsubset\342\212\202\342\203\222\011\003nsubseteq\342\212\210\012\005nsubseteqq\342\253\205\314\270\005\003nsucc\342\212\201\007\005nsucceq\342\252\260\314"
"\270\004\003nsup\342\212\205\005\005nsupE\342\253\206\314\270\005\003nsupe\342\212\211\007\006nsupset\342\212\203\342\203\222\011\003nsupseteq\342\212\211\012\005nsupseteqq\342\253\206\314\270\004\003"
"ntgl\342\211\271\206\002ntilde\303\261\004\003ntlg\342\211\270\015\003ntriangleleft\342\213\252\017\003ntrianglelefteq\342\213\254\016\003ntriangleright"
"\342\213\253\020\003ntrianglerighteq\342\213\255\002\002nu\316\275\003\001num#\006\003numero\342\204\226\005\003numsp\342\200\207\006\003nvDash\342\212\255\006\003nvHarr\342\244\204\004"
"\006nvap\342\211\215\342\203\222\006\003nvdash\342\212\254\004\006nvge\342\211\245\342\203\222\004\004nvgt>\342\203\222\007\003nvinfin\342\247\236\006\003nvlArr\342\244\202\004\006nvle\342\211\244\342\203\222\004"
"\004nvlt<\342\203\222\007\006nvltrie\342\212\264\342\203\222\006\003nvrArr\342\244\203\007\006nvrtrie\342\212\265\342\203\222\005\006nvsim\342\210\274\342\203\222\005\003nwArr\342\207\226\006\003nwarh"
"k\342\244\243\005\003nwarr\342\206\226\007\003nwarrow\342\206\226\006\003nwnear\342\244\247\002\003oS\342\223\210\206\002oacute\303\263\004\003oast\342\212\233\004\003ocir\342\212\232\205\002ocirc\303"
"\264\003\002ocy\320\276\005\003odash\342\212\235\006\002odblac\305\221\004\003odiv\342\250\270\004\003odot\342\212\231\006\003odsold\342\246\274\005\002oelig\305\223\005\003ofcir\342\246\277\003\004of"
"r\360\235\224\254\004\002ogon\313\233\206\002ograve\303\262\003\003ogt\342\247\201\005\003ohbar\342\246\265\003\002ohm\316\251\004\003oint\342\210\256\005\003olarr\342\206\272\005\003olcir\342\246\276\007\003o"
"lcross\342\246\273\005\003oline\342\200\276\003\003olt\342\247\200\005\002omacr\305\215\005\002omega\317\211\007\002omicron\316\277\004\003omid\342\246\266\006\003ominus\342\212\226\004\004oo"
"pf\360\235\225\240\004\003opar\342\246\267\005\003operp\342\246\271\005\003oplus\342\212\225\002\003or\342\210\250\005\003orarr\342\206\273\003\003ord\342\251\235\005\003order\342\204\264\007\003orderof\342"
"\204\264\204\002ordf\302\252\204\002ordm\302\272\006\003origof\342\212\266\004\003oror\342\251\226\007\003orslope\342\251\227\003\003orv\342\251\233\004\003oscr\342\204\264\206\002oslash\303\270\004\003o"
"sol\342\212\230\206\002otilde\303\265\006\003otimes\342\212\227\010\003otimesas\342\250\266\204\002ouml\303\266\005\003ovbar\342\214\275\003\003par\342\210\245\204\002para\302\266\010\003para"
"llel\342\210\245\006\003parsim\342\253\263\005\003parsl\342\253\275\004\003part\342\210\202\003\002pcy\320\277\006\001percnt%\006\001period.\006\003permil\342\200\260\004\003perp\342"
"\212\245\007\003pertenk\342\200\261\003\004pfr\360\235\224\255\003\002phi\317\206\004\002phiv\317\225\006\003phmmat\342\204\263\005\003phone\342\230\216\002\002pi\317\200\011\003pitchfork\342\213\224\003"
"\002piv\317\226\006\003planck\342\204\217\007\003planckh\342\204\216\006\003plankv\342\204\217\004\001plus+\010\003plusacir\342\250\243\005\003plusb\342\212\236\007\003pluscir\342"
"\250\242\006\003plusdo\342\210\224\006\003plusdu\342\250\245\005\003pluse\342\251\262\206\002plusmn\302\261\007\003plussim\342\250\246\007\003plustwo\342\250\247\002\002pm\302\261\010\003poin"
"tint\342\250\225\004\004popf\360\235\225\241\205\002pound\302\243\002\003pr\342\211\272\003\003prE\342\252\263\004\003prap\342\252\267\005\003prcue\342\211\274\003\003pre\342\252\257\004\003prec\342\211\272\012\003p"
"recapprox\342\252\267\013\003preccurlyeq\342\211\274\006\003preceq\342\252\257\013\003precnapprox\342\252\271\010\003precneqq\342\252\265\010\003precnsim\342\213"
"\250\007\003precsim\342\211\276\005\003prime\342\200\262\006\003primes\342\204\231\004\003prnE\342\252\265\005\003prnap\342\252\271\006\003prnsim\342\213\250\004\003prod\342\210\217\010\003profa"
"lar\342\214\256\010\003profline\342\214\222\010\003profsurf\342\214\223\004\003prop\342\210\235\006\003propto\342\210\235\005\003prsim\342\211\276\006\003prurel\342\212\260\004\004pscr\360"
"\235\223\205\003\002psi\317\210\006\003puncsp\342\200\210\003\004qfr\360\235\224\256\004\003qint\342\250\214\004\004qopf\360\235\225\242\006\003qprime\342\201\227\004\004qscr\360\235\223\206\013\003quaterni"
"ons\342\204\215\007\003quatint\342\250\226\005\001quest\077\007\003questeq\342\211\237\204\001quot\042\005\003rAarr\342\207\233\004\003rArr\342\207\222\006\003rAtail\342\244\234\005\003rBa"
"rr\342\244\217\004\003rHar\342\245\244\004\005race\342\210\275\314\261\006\002racute\305\225\005\003radic\342\210\232\010\003raemptyv\342\246\263\004\003rang\342\237\251\005\003rangd\342\246\222\005\003r"
"ange\342\246\245\006\003rangle\342\237\251\205\002raquo\302\273\004\003rarr\342\206\222\006\003rarrap\342\245\265\005\003rarrb\342\207\245\007\003rarrbfs\342\244\240\005\003rarrc\342\244\263\006"
"\003rarrfs\342\244\236\006\003rarrhk\342\206\252\006\003rarrlp\342\206\254\006\003rarrpl\342\245\205\007\003rarrsim\342\245\264\006\003rarrtl\342\206\243\005\003rarrw\342\206\235\006\003ra"
"tail\342\244\232\005\003ratio\342\210\266\011\003rationals\342\204\232\005\003rbarr\342\244\215\005\003rbbrk\342\235\263\006\001rbrace}\006\001rbrack]\005\003rbrke\342\246\214\007"
"\003rbrksld\342\246\216\007\003rbrkslu\342\246\220\006\002rcaron\305\231\006\002rcedil\305\227\005\003rceil\342\214\211\004\001rcub}\003\002rcy\321\200\004\003rdca\342\244\267\007\003rd"
"ldhar\342\245\251\005\003rdquo\342\200\235\006\003rdquor\342\200\235\004\003rdsh\342\206\263\004\003real\342\204\234\007\003realine\342\204\233\010\003realpart\342\204\234\005\003reals\342"
"\204\235\004\003rect\342\226\255\203\002reg\302\256\006\003rfisht\342\245\275\006\003rfloor\342\214\213\003\004rfr\360\235\224\257\005\003rhard\342\207\201\005\003rharu\342\207\200\006\003rharul\342\245\254"
"\003\002rho\317\201\004\002rhov\317\261\012\003rightarrow\342\206\222\016\003rightarrowtail\342\206\243\020\003rightharpoondown\342\207\201\016\003righthar"
"poonup\342\207\200\017\003rightleftarrows\342\207\204\021\003rightleftharpoons\342\207\214\020\003rightrightarrows\342\207\211\017\003rights"
"quigarrow\342\206\235\017\003rightthreetimes\342\213\214\004\002ring\313\232\014\003risingdotseq\342\211\223\005\003rlarr\342\207\204\005\003rlhar\342\207\214\003\003r"
"lm\342\200\217\006\003rmoust\342\216\261\012\003rmoustache\342\216\261\005\003rnmid\342\253\256\005\003roang\342\237\255\005\003roarr\342\207\276\005\003robrk\342\237\247\005\003ropar\342\246"
"\206\004\004ropf\360\235\225\243\006\003roplus\342\250\256\007\003rotimes\342\250\265\004\001rpar)\006\003rpargt\342\246\224\010\003rppolint\342\250\222\005\003rrarr\342\207\211\006\003rsa"
"quo\342\200\272\004\004rscr\360\235\223\207\003\003rsh\342\206\261\004\001rsqb]\005\003rsquo\342\200\231\006\003rsquor\342\200\231\006\003rthree\342\213\214\006\003rtimes\342\213\212\004\003rtri"
"\342\226\271\005\003rtrie\342\212\265\005\003rtrif\342\226\270\010\003rtriltri\342\247\216\007\003ruluhar\342\245\250\002\003rx\342\204\236\006\002sacute\305\233\005\003sbquo\342\200\232\002\003sc\342"
"\211\273\003\003scE\342\252\264\004\003scap\342\252\270\006\002scaron\305\241\005\003sccue\342\211\275\003\003sce\342\252\260\006\002scedil\305\237\005\002scirc\305\235\004\003scnE\342\252\266\005\003scn"
"ap\342\252\272\006\003scnsim\342\213\251\010\003scpolint\342\250\223\005\003scsim\342\211\277\003\002scy\321\201\004\003sdot\342\213\205\005\003sdotb\342\212\241\005\003sdote\342\251\246\005\003seA"
"rr\342\207\230\006\003searhk\342\244\245\005\003searr\342\206\230\007\003searrow\342\206\230\204\002sect\302\247\004\001semi;\006\003seswar\342\244\251\010\003setminus\342\210\226\005\003s"
"etmn\342\210\226\004\003sext\342\234\266\003\004sfr\360\235\224\260\006\003sfrown\342\214\242\005\003sharp\342\231\257\006\002shchcy\321\211\004\002shcy\321\210\010\003shortmid\342\210\243\015\003s"
"hortparallel\342\210\245\203\002shy\302\255\005\002sigma\317\203\006\002sigmaf\317\202\006\002sigmav\317\202\003\003sim\342\210\274\006\003simdot\342\251\252\004\003sime\342\211\203\005"
"\003simeq\342\211\203\004\003simg\342\252\236\005\003simgE\342\252\240\004\003siml\342\252\235\005\003simlE\342\252\237\005\003simne\342\211\206\007\003simplus\342\250\244\007\003simrarr\342\245"
"\262\005\003slarr\342\206\220\015\003smallsetminus\342\210\226\006\003smashp\342\250\263\010\003smeparsl\342\247\244\004\003smid\342\210\243\005\003smile\342\214\243\003\003smt\342\252\252"
"\004\003smte\342\252\254\005\006smtes\342\252\254\357\270\200\006\002softcy\321\214\003\001sol/\004\003solb\342\247\204\006\003solbar\342\214\277\004\004sopf\360\235\225\244\006\003spades\342\231\240\011"
"\003spadesuit\342\231\240\004\003spar\342\210\245\005\003sqcap\342\212\223\006\006sqcaps\342\212\223\357\270\200\005\003sqcup\342\212\224\006\006sqcups\342\212\224\357\270\200\005\003sqsub\342\212\217"
"\006\003sqsube\342\212\221\010\003sqsubset\342\212\217\012\003sqsubseteq\342\212\221\005\003sqsup\342\212\220\006\003sqsupe\342\212\222\010\003sqsupset\342\212\220\012\003sqsup"
"seteq\342\212\222\003\003squ\342\226\241\006\003square\342\226\241\006\003squarf\342\226\252\004\003squf\342\226\252\005\003srarr\342\206\222\004\004sscr\360\235\223\210\006\003ssetmn\342\210\226\006\003"
"ssmile\342\214\243\006\003sstarf\342\213\206\004\003star\342\230\206\005\003starf\342\230\205\017\002straightepsilon\317\265\013\002straightphi\317\225\005\002strns"
"\302\257\003\003sub\342\212\202\004\003subE\342\253\205\006\003subdot\342\252\275\004\003sube\342\212\206\007\003subedot\342\253\203\007\003submult\342\253\201\005\003subnE\342\253\213\005\003subne"
"\342\212\212\007\003subplus\342\252\277\007\003subrarr\342\245\271\006\003subset\342\212\202\010\003subseteq\342\212\206\011\003subseteqq\342\253\205\011\003subsetneq\342\212\212\012"
"\003subsetneqq\342\253\213\006\003subsim\342\253\207\006\003subsub\342\253\225\006\003subsup\342\253\223\004\003succ\342\211\273\012\003succapprox\342\252\270\013\003succcur"
"lyeq\342\211\275\006\003succeq\342\252\260\013\003succnapprox\342\252\272\010\003succneqq\342\252\266\010\003succnsim\342\213\251\007\003succsim\342\211\277\003\003sum\342\210\221"
"\004\003sung\342\231\252\003\003sup\342\212\203\204\002sup1\302\271\204\002sup2\302\262\204\002sup3\302\263\004\003supE\342\253\206\006\003supdot\342\252\276\007\003supdsub\342\253\230\004\003supe\342"
"\212\207\007\003supedot\342\253\204\007\003suphsol\342\237\211\007\003suphsub\342\253\227\007\003suplarr\342\245\273\007\003supmult\342\253\202\005\003supnE\342\253\214\005\003supne\342"
"\212\213\007\003supplus\342\253\200\006\003supset\342\212\203\010\003supseteq\342\212\207\011\003supseteqq\342\253\206\011\003supsetneq\342\212\213\012\003supsetneqq\342\253"
"\214\006\003supsim\342\253\210\006\003supsub\342\253\224\006\003supsup\342\253\226\005\003swArr\342\207\231\006\003swarhk\342\244\246\005\003swarr\342\206\231\007\003swarrow\342\206\231\006\003s"
"wnwar\342\244\252\205\002szlig\303\237\006\003target\342\214\226\003\002tau\317\204\004\003tbrk\342\216\264\006\002tcaron\305\245\006\002tcedil\305\243\003\002tcy\321\202\004\003tdot\342\203\233"
"\006\003telrec\342\214\225\003\004tfr\360\235\224\261\006\003there4\342\210\264\011\003therefore\342\210\264\005\002theta\316\270\010\002thetasym\317\221\006\002thetav\317\221\013\003th"
"ickapprox\342\211\210\010\003thicksim\342\210\274\006\003thinsp\342\200\211\005\003thkap\342\211\210\006\003thksim\342\210\274\205\002thorn\303\276\005\002tilde\313\234\205\002tim"
"es\303\227\006\003timesb\342\212\240\010\003timesbar\342\250\261\006\003timesd\342\250\260\004\003tint\342\210\255\004\003toea\342\244\250\003\003top\342\212\244\006\003topbot\342\214\266\006\003to"
"pcir\342\253\261\004\004topf\360\235\225\245\007\003topfork\342\253\232\004\003tosa\342\244\251\006\003tprime\342\200\264\005\003trade\342\204\242\010\003triangle\342\226\265\014\003triang"
"ledown\342\226\277\014\003triangleleft\342\227\203\016\003trianglelefteq\342\212\264\011\003triangleq\342\211\234\015\003triangleright\342\226\271\017\003t"
"rianglerighteq\342\212\265\006\003tridot\342\227\254\004\003trie\342\211\234\010\003triminus\342\250\272\007\003triplus\342\250\271\005\003trisb\342\247\215\007\003tritim"
"e\342\250\273\010\003trpezium\342\217\242\004\004tscr\360\235\223\211\004\002tscy\321\206\005\002tshcy\321\233\006\002tstrok\305\247\005\003twixt\342\211\254\020\003twoheadleftarr"
"ow\342\206\236\021\003twoheadrightarrow\342\206\240\004\003uArr\342\207\221\004\003uHar\342\245\243\206\002uacute\303\272\004\003uarr\342\206\221\005\002ubrcy\321\236\006\002ubrev"
"e\305\255\205\002ucirc\303\273\003\002ucy\321\203\005\003udarr\342\207\205\006\002udblac\305\261\005\003udhar\342\245\256\006\003ufisht\342\245\276\003\004ufr\360\235\224\262\206\002ugrave\303\271\005"
"\003uharl\342\206\277\005\003uharr\342\206\276\005\003uhblk\342\226\200\006\003ulcorn\342\214\234\010\003ulcorner\342\214\234\006\003ulcrop\342\214\217\005\003ultri\342\227\270\005\002umac"
"r\305\253\203\002uml\302\250\005\002uogon\305\263\004\004uopf\360\235\225\246\007\003uparrow\342\206\221\013\003updownarrow\342\206\225\015\003upharpoonleft\342\206\277\016\003uph"
"arpoonright\342\206\276\005\003uplus\342\212\216\004\002upsi\317\205\005\002upsih\317\222\007\002upsilon\317\205\012\003upuparrows\342\207\210\006\003urcorn\342\214\235\010\003"
"urcorner\342\214\235\006\003urcrop\342\214\216\005\002uring\305\257\005\003urtri\342\227\271\004\004uscr\360\235\223\212\005\003utdot\342\213\260\006\002utilde\305\251\004\003utri\342\226\265"
"\005\003utrif\342\226\264\005\003uuarr\342\207\210\204\002uuml\303\274\007\003uwangle\342\246\247\004\003vArr\342\207\225\004\003vBar\342\253\250\005\003vBarv\342\253\251\005\003vDash\342\212\250\006\003"
"vangrt\342\246\234\012\002varepsilon\317\265\010\002varkappa\317\260\012\003varnothing\342\210\205\006\002varphi\317\225\005\002varpi\317\226\011\003varpropto"
"\342\210\235\004\003varr\342\206\225\006\002varrho\317\261\010\002varsigma\317\202\014\006varsubsetneq\342\212\212\357\270\200\015\006varsubsetneqq\342\253\213\357\270\200\014\006var"
"supsetneq\342\212\213\357\270\200\015\006varsupsetneqq\342\253\214\357\270\200\010\002vartheta\317\221\017\003vartriangleleft\342\212\262\020\003vartriangl"
"eright\342\212\263\003\002vcy\320\262\005\003vdash\342\212\242\003\003vee\342\210\250\006\003veebar\342\212\273\005\003veeeq\342\211\232\006\003vellip\342\213\256\006\001verbar|\004\001ver"
"t|\003\004vfr\360\235\224\263\005\003vltri\342\212\262\005\006vnsub\342\212\202\342\203\222\005\006vnsup\342\212\203\342\203\222\004\004vopf\360\235\225\247\005\003vprop\342\210\235\005\003vrtri\342\212\263\004\004v"
"scr\360\235\223\213\006\006vsubnE\342\253\213\357\270\200\006\006vsubne\342\212\212\357\270\200\006\006vsupnE\342\253\214\357\270\200\006\006vsupne\342\212\213\357\270\200\007\003vzigzag\342\246\232\005\002wci"
"rc\305\265\006\003wedbar\342\251\237\005\003wedge\342\210\247\006\003wedgeq\342\211\231\006\003weierp\342\204\230\003\004wfr\360\235\224\264\004\004wopf\360\235\225\250\002\003wp\342\204\230\002\003wr\342\211\200"
"\006\003wreath\342\211\200\004\004wscr\360\235\223\214\004\003xcap\342\213\202\005\003xcirc\342\227\257\004\003xcup\342\213\203\005\003xdtri\342\226\275\003\004xfr\360\235\224\265\005\003xhArr\342\237\272\005\003"
"xharr\342\237\267\002\002xi\316\276\005\003xlArr\342\237\270\005\003xlarr\342\237\265\004\003xmap\342\237\274\004\003xnis\342\213\273\005\003xodot\342\250\200\004\004xopf\360\235\225\251\006\003xoplus"
"\342\250\201\006\003xotime\342\250\202\005\003xrArr\342\237\271\005\003xrarr\342\237\266\004\004xscr\360\235\223\215\006\003xsqcup\342\250\206\006\003xuplus\342\250\204\005\003xutri\342\226\263\004\003xv"
"ee\342\213\201\006\003xwedge\342\213\200\206\002yacute\303\275\004\002yacy\321\217\005\002ycirc\305\267\003\002ycy\321\213\203\002yen\302\245\003\004yfr\360\235\224\266\004\002yicy\321\227\004\004yopf"
"\360\235\225\252\004\004yscr\360\235\223\216\004\002yucy\321\216\204\002yuml\303\277\006\002zacute\305\272\006\002zcaron\305\276\003\002zcy\320\267\004\002zdot\305\274\006\003zeetrf\342\204\250\004\002ze"
"ta\316\266\003\004zfr\360\235\224\267\004\002zhcy\320\266\007\003zigrarr\342\207\235\004\004zopf\360\235\225\253\004\004zscr\360\235\223\217\003\003zwj\342\200\215\004\003zwnj\342\200\214";
// END GENERATED TABLE
static u16 entity_offsets[ENTITY_COUNT];
static int indexed;
// Record i starts at entity_offsets[i]: [name length | LEGACY_FLAG][value length][name][value].
static const u16 *offsets(void) {
if (!indexed) {
u32 at = 0;
for (u32 i = 0; i < ENTITY_COUNT; i++) {
entity_offsets[i] = (u16)at;
at += 2 + (entity_blob[at] & ~LEGACY_FLAG) + entity_blob[at + 1];
}
indexed = 1;
}
return entity_offsets;
}
static int order(const u8 *a, u32 a_len, const u8 *b, u32 b_len) {
u32 n = a_len < b_len ? a_len : b_len;
for (u32 i = 0; i < n; i++) {
if (a[i] != b[i]) return a[i] < b[i] ? -1 : 1;
}
return a_len == b_len ? 0 : a_len < b_len ? -1 : 1;
}
// name excludes any `;`. Without one, only legacy names match. Emits the value if found.
static int lookup(const u8 *name, u32 name_len, int legacy_only) {
const u16 *offs = offsets();
u32 lo = 0, hi = ENTITY_COUNT;
while (lo < hi) {
u32 mid = (lo + hi) / 2;
u32 start = offs[mid];
u8 head = entity_blob[start];
u32 name_end = start + 2 + (head & ~LEGACY_FLAG);
int o = order(entity_blob + start + 2, head & ~LEGACY_FLAG, name, name_len);
if (o < 0) {
lo = mid + 1;
} else if (o > 0) {
hi = mid;
} else {
if (legacy_only && !(head & LEGACY_FLAG)) return 0;
emit(entity_blob + name_end, entity_blob[start + 1]);
return 1;
}
}
return 0;
}
// text[at] is `&`. Names are ASCII letters and digits, at most 31 before the `;`.
static u32 named(const u8 *text, u32 len, u32 at) {
u32 end = at + 1;
while (end < len && end - at - 1 < 32 && is_alnum(text[end])) end++;
if (end < len && text[end] == ';' && lookup(text + at + 1, end - at - 1, 0)) return end + 1;
// Without `;`, only legacy names match, longest first.
for (u32 n = end - at - 1; n >= 2; n--) {
if (lookup(text + at + 1, n, 1)) return at + 1 + n;
}
emit_byte('&');
return at + 1;
}
u64 render(u32 len) {
if (len > INPUT_CAP) len = INPUT_CAP;
const u8 *text = input;
out_len = 0;
u32 i = 0;
while (i < len) {
// Copy the run up to the next `&` in one go.
u32 end = i;
while (end < len && text[end] != '&') end++;
emit(text + i, end - i);
i = end;
if (i == len) break;
i = (i + 1 < len && text[i + 1] == '#') ? numeric(text, len, i) : named(text, len, i);
}
return ((u64)output_ptr() << 32) | out_len;
}