diff options
Diffstat (limited to 'app/tools/halibut')
66 files changed, 60972 insertions, 0 deletions
diff --git a/app/tools/halibut/CMakeLists.txt b/app/tools/halibut/CMakeLists.txt new file mode 100644 index 0000000..ec7d74b --- /dev/null +++ b/app/tools/halibut/CMakeLists.txt @@ -0,0 +1,32 @@ +SET(SOURCES + biblio.c + bk_html.c + contents.c + deflate.c + error.c + halibut.h + help.c + index.c + input.c + in_pf.c + in_afm.c + psdata.c + bk_paper.c + keywords.c + licence.c + main.c + malloc.c + misc.c + tree234.c + tree234.h + ustring.c + version.c + wcwidth.c + ) + +INCLUDE_DIRECTORIES(charset) +ADD_EXECUTABLE(halibut ${SOURCES}) +TARGET_LINK_LIBRARIES(halibut xtrkcad-charset) + +ADD_SUBDIRECTORY(charset) + diff --git a/app/tools/halibut/LICENCE b/app/tools/halibut/LICENCE new file mode 100644 index 0000000..972c0df --- /dev/null +++ b/app/tools/halibut/LICENCE @@ -0,0 +1,36 @@ +Halibut is copyright (c) 1999-2007 Simon Tatham. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Halibut contains font metrics derived from the "Font Metrics for PDF +Core 14 Fonts", which carry the following copyright notice and licence: + + Copyright (c) 1985, 1987, 1989, 1990, 1991, 1992, 1993, 1997 + Adobe Systems Incorporated. All Rights Reserved. + + This file and the 14 PostScript(R) AFM files it accompanies may be + used, copied, and distributed for any purpose and without charge, + with or without modification, provided that all copyright notices + are retained; that the AFM files are not distributed without this + file; that all modifications to this file or any of the AFM files + are prominently noted in the modified file(s); and that this + paragraph is not modified. Adobe Systems has no responsibility or + obligation to support the use of the AFM files. diff --git a/app/tools/halibut/README b/app/tools/halibut/README new file mode 100644 index 0000000..b602834 --- /dev/null +++ b/app/tools/halibut/README @@ -0,0 +1,36 @@ +HALIBUT Readme +============== + +This version of Halibut has been adapted to the needs of the XTrkCad +Project. It is based on version 1 of Halibut. + +The original version is available at: + +http://www.chiark.greenend.org.uk/~sgtatham/halibut/ + +This site also has the full documentation. + +XTrkCad Modifications +--------------------- + +The following changes have been made: + +1. Backends - only the HTML backend is included + +2. \f: Emphasize more + This formating instruction is similar to the \e. It is usually rendered + as bold on HTML + + Example: Here is some \f{bold text}. + + Nesting of \e and \f is unsupported. + +3 \G: Include graphic + This instruction is used to include bitmaps into the document. Note that + there are no checks for presence of the file nor whether its a valid + graphics format. + + \G just takes the filename as a parameter. + + Example: Include a bitmap here \G{png.d/bitmap.png}. + diff --git a/app/tools/halibut/biblio.c b/app/tools/halibut/biblio.c new file mode 100644 index 0000000..7ce163d --- /dev/null +++ b/app/tools/halibut/biblio.c @@ -0,0 +1,105 @@ +/* + * biblio.c: process the bibliography + */ + +#include <assert.h> +#include "halibut.h" + +static wchar_t *gentext(int num) { + wchar_t text[22]; + wchar_t *p = text + lenof(text); + *--p = L'\0'; + *--p = L']'; + while (num != 0) { + assert(p > text); + *--p = L"0123456789"[num % 10]; + num /= 10; + } + assert(p > text); + *--p = L'['; + return ustrdup(p); +} + +static void cite_biblio(keywordlist *kl, wchar_t *key, filepos fpos) { + keyword *kw = kw_lookup(kl, key); + if (!kw) + error(err_nosuchkw, &fpos, key); + else { + /* + * We've found a \k reference. If it's a + * bibliography entry ... + */ + if (kw->para->type == para_Biblio) { + /* + * ... then mark the paragraph as cited. + */ + kw->para->type = para_BiblioCited; + } + } +} + +/* + * Make a pass through the source form, generating citation formats + * for bibliography entries and also marking which bibliography + * entries are actually cited (or \nocite-ed). + */ + +void gen_citations(paragraph *source, keywordlist *kl) { + paragraph *para; + int bibnum = 0; + + for (para = source; para; para = para->next) { + word *ptr; + + /* + * \BR and \nocite paragraphs get special processing here. + */ + if (para->type == para_BR) { + keyword *kw = kw_lookup(kl, para->keyword); + if (!kw) { + error(err_nosuchkw, ¶->fpos, para->keyword); + } else if (kw->text) { + error(err_multiBR, ¶->fpos, para->keyword); + } else { + kw->text = dup_word_list(para->words); + } + } else if (para->type == para_NoCite) { + wchar_t *wp = para->keyword; + while (*wp) { + cite_biblio(kl, wp, para->fpos); + wp = uadv(wp); + } + } + + /* + * Scan for keyword references. + */ + for (ptr = para->words; ptr; ptr = ptr->next) { + if (ptr->type == word_UpperXref || + ptr->type == word_LowerXref) + cite_biblio(kl, ptr->text, ptr->fpos); + } + } + + /* + * We're now almost done; all that remains is to scan through + * the cited bibliography entries and invent default citation + * texts for the ones that don't already have explicitly + * provided \BR text. + */ + for (para = source; para; para = para->next) { + if (para->type == para_BiblioCited) { + keyword *kw = kw_lookup(kl, para->keyword); + assert(kw != NULL); + if (!kw->text) { + word *wd = smalloc(sizeof(word)); + wd->text = gentext(++bibnum); + wd->type = word_Normal; + wd->alt = NULL; + wd->next = NULL; + kw->text = wd; + } + para->kwtext = kw->text; + } + } +} diff --git a/app/tools/halibut/bk_html.c b/app/tools/halibut/bk_html.c new file mode 100644 index 0000000..8b5443b --- /dev/null +++ b/app/tools/halibut/bk_html.c @@ -0,0 +1,2791 @@ +/* + * HTML backend for Halibut + */ + +/* + * TODO: + * + * - I'm never entirely convinced that having a fragment link to + * come in at the start of the real text in the file is + * sensible. Perhaps for the topmost section in the file, no + * fragment should be used? (Though it should probably still be + * _there_ even if unused.) + * + * - In HHK index mode: subsidiary hhk entries (as in replacing + * `foo, bar' with `foo\n\tbar') can be done by embedding + * sub-<UL>s in the hhk file. This requires me getting round to + * supporting that idiom in the rest of Halibut, but I thought + * I'd record how it's done here in case I turn out to have + * forgotten when I get there. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <limits.h> +#include "halibut.h" + +#define is_heading_type(type) ( (type) == para_Title || \ + (type) == para_Chapter || \ + (type) == para_Appendix || \ + (type) == para_UnnumberedChapter || \ + (type) == para_Heading || \ + (type) == para_Subsect) + +#define heading_depth(p) ( (p)->type == para_Subsect ? (p)->aux + 1 : \ + (p)->type == para_Heading ? 1 : \ + (p)->type == para_Title ? -1 : 0 ) + +typedef struct { + int just_numbers; + wchar_t *number_suffix; +} sectlevel; + +typedef struct { + int nasect; + sectlevel achapter, *asect; + int *contents_depths; /* 0=main, 1=chapter, 2=sect etc */ + int ncdepths; + int address_section, visible_version_id; + int leaf_contains_contents, leaf_smallest_contents; + int navlinks; + int rellinks; + char *contents_filename; + char *index_filename; + char *template_filename; + char *single_filename; + char *chm_filename, *hhp_filename, *hhc_filename, *hhk_filename; + char **template_fragments; + int ntfragments; + char *head_end, *body_start, *body_end, *addr_start, *addr_end; + char *body_tag, *nav_attr; + wchar_t *author, *description; + wchar_t *index_text, *contents_text, *preamble_text, *title_separator; + wchar_t *nav_prev_text, *nav_next_text, *nav_separator; + wchar_t *index_main_sep, *index_multi_sep; + wchar_t *pre_versionid, *post_versionid; + int restrict_charset, output_charset; + enum { + HTML_3_2, HTML_4, ISO_HTML, + XHTML_1_0_TRANSITIONAL, XHTML_1_0_STRICT + } htmlver; + wchar_t *lquote, *rquote; + int leaf_level; +} htmlconfig; + +#define contents_depth(conf, level) \ + ( (conf).ncdepths > (level) ? (conf).contents_depths[level] : (level)+2 ) + +#define is_xhtml(ver) ((ver) >= XHTML_1_0_TRANSITIONAL) + +typedef struct htmlfile htmlfile; +typedef struct htmlsect htmlsect; + +struct htmlfile { + htmlfile *next; + char *filename; + int last_fragment_number; + int min_heading_depth; + htmlsect *first, *last; /* first/last highest-level sections */ + /* + * The `temp' field is available for use in individual passes + * over the file list. For example, the HHK index generation + * uses it to ensure no index term references the same file + * more than once. + */ + int temp; +}; + +struct htmlsect { + htmlsect *next, *parent; + htmlfile *file; + paragraph *title, *text; + enum { NORMAL, TOP, INDEX } type; + int contents_depth; + char **fragments; +}; + +typedef struct { + htmlfile *head, *tail; + htmlfile *single, *index; + tree234 *frags; + tree234 *files; +} htmlfilelist; + +typedef struct { + htmlsect *head, *tail; +} htmlsectlist; + +typedef struct { + htmlfile *file; + char *fragment; +} htmlfragment; + +typedef struct { + int nrefs, refsize; + word **refs; +} htmlindex; + +typedef struct { + htmlsect *section; + char *fragment; + int generated, referenced; +} htmlindexref; + +typedef struct { + /* + * This level deals with charset conversion, starting and + * ending tags, and writing to the file. It's the lexical + * level. + */ + FILE *fp; + int charset, restrict_charset; + charset_state cstate; + int ver; + enum { + HO_NEUTRAL, HO_IN_TAG, HO_IN_EMPTY_TAG, HO_IN_TEXT + } state; + int hackflags; /* used for icky .HH* stuff */ + int hacklimit; /* text size limit, again for .HH* */ + /* + * Stuff beyond here deals with the higher syntactic level: it + * tracks how many levels of <ul> are currently open when + * producing a contents list, for example. + */ + int contents_level; +} htmloutput; + +/* + * Nasty hacks that modify the behaviour of htmloutput files. All + * of these are flag bits set in ho.hackflags. HO_HACK_QUOTEQUOTES + * has the same effect as the `quote_quotes' parameter to + * html_text_limit_internal, except that it's set globally on an + * entire htmloutput structure; HO_HACK_QUOTENOTHING suppresses + * quoting of any HTML special characters (for .HHP files); + * HO_HACK_OMITQUOTES completely suppresses the generation of + * double quotes at all (turning them into single quotes, for want + * of a better idea). + */ +#define HO_HACK_QUOTEQUOTES 1 +#define HO_HACK_QUOTENOTHING 2 +#define HO_HACK_OMITQUOTES 4 + +static int html_fragment_compare(void *av, void *bv) +{ + htmlfragment *a = (htmlfragment *)av; + htmlfragment *b = (htmlfragment *)bv; + int cmp; + + if ((cmp = strcmp(a->file->filename, b->file->filename)) != 0) + return cmp; + else + return strcmp(a->fragment, b->fragment); +} + +static int html_filename_compare(void *av, void *bv) +{ + char *a = (char *)av; + char *b = (char *)bv; + + return strcmp(a, b); +} + +static void html_file_section(htmlconfig *cfg, htmlfilelist *files, + htmlsect *sect, int depth); + +static htmlfile *html_new_file(htmlfilelist *list, char *filename); +static htmlsect *html_new_sect(htmlsectlist *list, paragraph *title, + htmlconfig *cfg); + +/* Flags for html_words() flags parameter */ +#define NOTHING 0x00 +#define MARKUP 0x01 +#define LINKS 0x02 +#define INDEXENTS 0x04 +#define ALL 0x07 +static void html_words(htmloutput *ho, word *words, int flags, + htmlfile *file, keywordlist *keywords, htmlconfig *cfg); +static void html_codepara(htmloutput *ho, word *words); + +static void return_to_neutral(htmloutput *ho); +static void element_open(htmloutput *ho, char const *name); +static void element_close(htmloutput *ho, char const *name); +static void element_empty(htmloutput *ho, char const *name); +static void element_attr(htmloutput *ho, char const *name, char const *value); +static void element_attr_w(htmloutput *ho, char const *name, + wchar_t const *value); +static void html_text(htmloutput *ho, wchar_t const *str); +static void html_text_nbsp(htmloutput *ho, wchar_t const *str); +static void html_text_limit(htmloutput *ho, wchar_t const *str, int maxlen); +static void html_text_limit_internal(htmloutput *ho, wchar_t const *text, + int maxlen, int quote_quotes, int nbsp); +static void html_nl(htmloutput *ho); +static void html_raw(htmloutput *ho, char *text); +static void html_raw_as_attr(htmloutput *ho, char *text); +static void cleanup(htmloutput *ho); + +static void html_href(htmloutput *ho, htmlfile *thisfile, + htmlfile *targetfile, char *targetfrag); +static void html_fragment(htmloutput *ho, char const *fragment); + +static char *html_format(paragraph *p, char *template_string); +static char *html_sanitise_fragment(htmlfilelist *files, htmlfile *file, + char *text); +static char *html_sanitise_filename(htmlfilelist *files, char *text); + +static void html_contents_entry(htmloutput *ho, int depth, htmlsect *s, + htmlfile *thisfile, keywordlist *keywords, + htmlconfig *cfg); +static void html_section_title(htmloutput *ho, htmlsect *s, + htmlfile *thisfile, keywordlist *keywords, + htmlconfig *cfg, int real); + +static htmlconfig html_configure(paragraph *source) { + htmlconfig ret; + paragraph *p; + + /* + * Defaults. + */ + ret.leaf_level = 2; + ret.achapter.just_numbers = FALSE; + ret.achapter.number_suffix = L": "; + ret.nasect = 1; + ret.asect = snewn(ret.nasect, sectlevel); + ret.asect[0].just_numbers = TRUE; + ret.asect[0].number_suffix = L" "; + ret.ncdepths = 0; + ret.contents_depths = 0; + ret.visible_version_id = TRUE; + ret.address_section = TRUE; + ret.leaf_contains_contents = FALSE; + ret.leaf_smallest_contents = 4; + ret.navlinks = TRUE; + ret.rellinks = TRUE; + ret.single_filename = dupstr("Manual.html"); + ret.contents_filename = dupstr("Contents.html"); + ret.index_filename = dupstr("IndexPage.html"); + ret.template_filename = dupstr("%n.html"); + ret.chm_filename = ret.hhp_filename = NULL; + ret.hhc_filename = ret.hhk_filename = NULL; + ret.ntfragments = 1; + ret.template_fragments = snewn(ret.ntfragments, char *); + ret.template_fragments[0] = dupstr("%b"); + ret.head_end = ret.body_tag = ret.body_start = ret.body_end = + ret.addr_start = ret.addr_end = ret.nav_attr = NULL; + ret.author = ret.description = NULL; + ret.restrict_charset = CS_UTF8; + ret.output_charset = CS_ASCII; + ret.htmlver = HTML_4; + ret.index_text = L"Index"; + ret.contents_text = L"Contents"; + ret.preamble_text = L"Preamble"; + ret.title_separator = L" - "; + ret.nav_prev_text = L"Previous"; + ret.nav_next_text = L"Next"; + ret.nav_separator = L" | "; + ret.index_main_sep = L": "; + ret.index_multi_sep = L", "; + ret.pre_versionid = L"["; + ret.post_versionid = L"]"; + /* + * Default quote characters are Unicode matched single quotes, + * falling back to ordinary ASCII ". + */ + ret.lquote = L"\x2018\0\x2019\0\"\0\"\0\0"; + ret.rquote = uadv(ret.lquote); + + /* + * Two-pass configuration so that we can pick up global config + * (e.g. `quotes') before having it overridden by specific + * config (`html-quotes'), irrespective of the order in which + * they occur. + */ + for (p = source; p; p = p->next) { + if (p->type == para_Config) { + if (!ustricmp(p->keyword, L"quotes")) { + if (*uadv(p->keyword) && *uadv(uadv(p->keyword))) { + ret.lquote = uadv(p->keyword); + ret.rquote = uadv(ret.lquote); + } + } else if (!ustricmp(p->keyword, L"index")) { + ret.index_text = uadv(p->keyword); + } else if (!ustricmp(p->keyword, L"contents")) { + ret.contents_text = uadv(p->keyword); + } + } + } + + for (p = source; p; p = p->next) { + if (p->type == para_Config) { + wchar_t *k = p->keyword; + + if (!ustrnicmp(k, L"xhtml-", 6)) + k++; /* treat `xhtml-' and `html-' the same */ + + if (!ustricmp(k, L"html-restrict-charset")) { + ret.restrict_charset = charset_from_ustr(&p->fpos, uadv(k)); + } else if (!ustricmp(k, L"html-output-charset")) { + ret.output_charset = charset_from_ustr(&p->fpos, uadv(k)); + } else if (!ustricmp(k, L"html-version")) { + wchar_t *vername = uadv(k); + static const struct { + const wchar_t *name; + int ver; + } versions[] = { + {L"html3.2", HTML_3_2}, + {L"html4", HTML_4}, + {L"iso-html", ISO_HTML}, + {L"xhtml1.0transitional", XHTML_1_0_TRANSITIONAL}, + {L"xhtml1.0strict", XHTML_1_0_STRICT} + }; + int i; + + for (i = 0; i < (int)lenof(versions); i++) + if (!ustricmp(versions[i].name, vername)) + break; + + if (i == lenof(versions)) + error(err_htmlver, &p->fpos, vername); + else + ret.htmlver = versions[i].ver; + } else if (!ustricmp(k, L"html-single-filename")) { + sfree(ret.single_filename); + ret.single_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-contents-filename")) { + sfree(ret.contents_filename); + ret.contents_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-index-filename")) { + sfree(ret.index_filename); + ret.index_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-template-filename")) { + sfree(ret.template_filename); + ret.template_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-template-fragment")) { + char *frag = adv(p->origkeyword); + if (*frag) { + while (ret.ntfragments--) + sfree(ret.template_fragments[ret.ntfragments]); + sfree(ret.template_fragments); + ret.template_fragments = NULL; + ret.ntfragments = 0; + while (*frag) { + ret.ntfragments++; + ret.template_fragments = + sresize(ret.template_fragments, + ret.ntfragments, char *); + ret.template_fragments[ret.ntfragments-1] = + dupstr(frag); + frag = adv(frag); + } + } else + error(err_cfginsufarg, &p->fpos, p->origkeyword, 1); + } else if (!ustricmp(k, L"html-chapter-numeric")) { + ret.achapter.just_numbers = utob(uadv(k)); + } else if (!ustricmp(k, L"html-suppress-navlinks")) { + ret.navlinks = !utob(uadv(k)); + } else if (!ustricmp(k, L"html-rellinks")) { + ret.rellinks = utob(uadv(k)); + } else if (!ustricmp(k, L"html-chapter-suffix")) { + ret.achapter.number_suffix = uadv(k); + } else if (!ustricmp(k, L"html-leaf-level")) { + wchar_t *u = uadv(k); + if (!ustricmp(u, L"infinite") || + !ustricmp(u, L"infinity") || + !ustricmp(u, L"inf")) + ret.leaf_level = -1; /* represents infinity */ + else + ret.leaf_level = utoi(u); + } else if (!ustricmp(k, L"html-section-numeric")) { + wchar_t *q = uadv(k); + int n = 0; + if (uisdigit(*q)) { + n = utoi(q); + q = uadv(q); + } + if (n >= ret.nasect) { + int i; + ret.asect = sresize(ret.asect, n+1, sectlevel); + for (i = ret.nasect; i <= n; i++) + ret.asect[i] = ret.asect[ret.nasect-1]; + ret.nasect = n+1; + } + ret.asect[n].just_numbers = utob(q); + } else if (!ustricmp(k, L"html-section-suffix")) { + wchar_t *q = uadv(k); + int n = 0; + if (uisdigit(*q)) { + n = utoi(q); + q = uadv(q); + } + if (n >= ret.nasect) { + int i; + ret.asect = sresize(ret.asect, n+1, sectlevel); + for (i = ret.nasect; i <= n; i++) { + ret.asect[i] = ret.asect[ret.nasect-1]; + } + ret.nasect = n+1; + } + ret.asect[n].number_suffix = q; + } else if (!ustricmp(k, L"html-contents-depth") || + !ustrnicmp(k, L"html-contents-depth-", 20)) { + /* + * Relic of old implementation: this directive used + * to be written as \cfg{html-contents-depth-3}{2} + * rather than the usual Halibut convention of + * \cfg{html-contents-depth}{3}{2}. We therefore + * support both. + */ + wchar_t *q = k[19] ? k+20 : uadv(k); + int n = 0; + if (uisdigit(*q)) { + n = utoi(q); + q = uadv(q); + } + if (n >= ret.ncdepths) { + int i; + ret.contents_depths = + sresize(ret.contents_depths, n+1, int); + for (i = ret.ncdepths; i <= n; i++) { + ret.contents_depths[i] = i+2; + } + ret.ncdepths = n+1; + } + ret.contents_depths[n] = utoi(q); + } else if (!ustricmp(k, L"html-head-end")) { + ret.head_end = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-body-tag")) { + ret.body_tag = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-body-start")) { + ret.body_start = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-body-end")) { + ret.body_end = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-address-start")) { + ret.addr_start = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-address-end")) { + ret.addr_end = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-navigation-attributes")) { + ret.nav_attr = adv(p->origkeyword); + } else if (!ustricmp(k, L"html-author")) { + ret.author = uadv(k); + } else if (!ustricmp(k, L"html-description")) { + ret.description = uadv(k); + } else if (!ustricmp(k, L"html-suppress-address")) { + ret.address_section = !utob(uadv(k)); + } else if (!ustricmp(k, L"html-versionid")) { + ret.visible_version_id = utob(uadv(k)); + } else if (!ustricmp(k, L"html-quotes")) { + if (*uadv(k) && *uadv(uadv(k))) { + ret.lquote = uadv(k); + ret.rquote = uadv(ret.lquote); + } + } else if (!ustricmp(k, L"html-leaf-contains-contents")) { + ret.leaf_contains_contents = utob(uadv(k)); + } else if (!ustricmp(k, L"html-leaf-smallest-contents")) { + ret.leaf_smallest_contents = utoi(uadv(k)); + } else if (!ustricmp(k, L"html-index-text")) { + ret.index_text = uadv(k); + } else if (!ustricmp(k, L"html-contents-text")) { + ret.contents_text = uadv(k); + } else if (!ustricmp(k, L"html-preamble-text")) { + ret.preamble_text = uadv(k); + } else if (!ustricmp(k, L"html-title-separator")) { + ret.title_separator = uadv(k); + } else if (!ustricmp(k, L"html-nav-prev-text")) { + ret.nav_prev_text = uadv(k); + } else if (!ustricmp(k, L"html-nav-next-text")) { + ret.nav_next_text = uadv(k); + } else if (!ustricmp(k, L"html-nav-separator")) { + ret.nav_separator = uadv(k); + } else if (!ustricmp(k, L"html-index-main-separator")) { + ret.index_main_sep = uadv(k); + } else if (!ustricmp(k, L"html-index-multiple-separator")) { + ret.index_multi_sep = uadv(k); + } else if (!ustricmp(k, L"html-pre-versionid")) { + ret.pre_versionid = uadv(k); + } else if (!ustricmp(k, L"html-post-versionid")) { + ret.post_versionid = uadv(k); + } else if (!ustricmp(k, L"html-mshtmlhelp-chm")) { + sfree(ret.chm_filename); + ret.chm_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-mshtmlhelp-project")) { + sfree(ret.hhp_filename); + ret.hhp_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-mshtmlhelp-contents")) { + sfree(ret.hhc_filename); + ret.hhc_filename = dupstr(adv(p->origkeyword)); + } else if (!ustricmp(k, L"html-mshtmlhelp-index")) { + sfree(ret.hhk_filename); + ret.hhk_filename = dupstr(adv(p->origkeyword)); + } + } + } + + /* + * Enforce that the CHM and HHP filenames must either be both + * present or both absent. If one is present but not the other, + * turn both off. + */ + if (!ret.chm_filename ^ !ret.hhp_filename) { + error(err_chmnames); + sfree(ret.chm_filename); ret.chm_filename = NULL; + sfree(ret.hhp_filename); ret.hhp_filename = NULL; + } + /* + * And if we're not generating an HHP, there's no need for HHC + * or HHK. + */ + if (!ret.hhp_filename) { + sfree(ret.hhc_filename); ret.hhc_filename = NULL; + sfree(ret.hhk_filename); ret.hhk_filename = NULL; + } + + /* + * Now process fallbacks on quote characters. + */ + while (*uadv(ret.rquote) && *uadv(uadv(ret.rquote)) && + (!cvt_ok(ret.restrict_charset, ret.lquote) || + !cvt_ok(ret.restrict_charset, ret.rquote))) { + ret.lquote = uadv(ret.rquote); + ret.rquote = uadv(ret.lquote); + } + + return ret; +} + +paragraph *html_config_filename(char *filename) +{ + /* + * If the user passes in a single filename as a parameter to + * the `--html' command-line option, then we should assume it + * to imply _two_ config directives: + * \cfg{html-single-filename}{whatever} and + * \cfg{html-leaf-level}{0}; the rationale being that the user + * wants their output _in that file_. + */ + paragraph *p, *q; + + p = cmdline_cfg_simple("html-single-filename", filename, NULL); + q = cmdline_cfg_simple("html-leaf-level", "0", NULL); + p->next = q; + return p; +} + +void html_backend(paragraph *sourceform, keywordlist *keywords, + indexdata *idx, void *unused) +{ + paragraph *p; + htmlsect *topsect; + htmlconfig conf; + htmlfilelist files = { NULL, NULL, NULL, NULL, NULL, NULL }; + htmlsectlist sects = { NULL, NULL }, nonsects = { NULL, NULL }; + char *hhk_filename; + int has_index; + + IGNORE(unused); + + conf = html_configure(sourceform); + + /* + * We're going to make heavy use of paragraphs' private data + * fields in the forthcoming code. Clear them first, so we can + * reliably tell whether we have auxiliary data for a + * particular paragraph. + */ + for (p = sourceform; p; p = p->next) + p->private_data = NULL; + + files.frags = newtree234(html_fragment_compare); + files.files = newtree234(html_filename_compare); + + /* + * Start by figuring out into which file each piece of the + * document should be put. We'll do this by inventing an + * `htmlsect' structure and stashing it in the private_data + * field of each section paragraph; we also need one additional + * htmlsect for the document index, which won't show up in the + * source form but needs to be consistently mentioned in + * contents links. + * + * While we're here, we'll also invent the HTML fragment name(s) + * for each section. + */ + { + htmlsect *sect; + int d; + + topsect = html_new_sect(§s, NULL, &conf); + topsect->type = TOP; + topsect->title = NULL; + topsect->text = sourceform; + topsect->contents_depth = contents_depth(conf, 0); + html_file_section(&conf, &files, topsect, -1); + + for (p = sourceform; p; p = p->next) + if (is_heading_type(p->type)) { + d = heading_depth(p); + + if (p->type == para_Title) { + topsect->title = p; + continue; + } + + sect = html_new_sect(§s, p, &conf); + sect->text = p->next; + + sect->contents_depth = contents_depth(conf, d+1) - (d+1); + + if (p->parent) { + sect->parent = (htmlsect *)p->parent->private_data; + assert(sect->parent != NULL); + } else + sect->parent = topsect; + p->private_data = sect; + + html_file_section(&conf, &files, sect, d); + + { + int i; + for (i=0; i < conf.ntfragments; i++) { + sect->fragments[i] = + html_format(p, conf.template_fragments[i]); + sect->fragments[i] = + html_sanitise_fragment(&files, sect->file, + sect->fragments[i]); + } + } + } + + /* + * And the index, if we have one. Note that we don't output + * an index as an HTML file if we're outputting one as a + * .HHK. + */ + has_index = (count234(idx->entries) > 0); + if (has_index && !conf.hhk_filename) { + sect = html_new_sect(§s, NULL, &conf); + sect->text = NULL; + sect->type = INDEX; + sect->parent = topsect; + sect->contents_depth = 0; + html_file_section(&conf, &files, sect, 0); /* peer of chapters */ + sect->fragments[0] = utoa_dup(conf.index_text, CS_ASCII); + sect->fragments[0] = html_sanitise_fragment(&files, sect->file, + sect->fragments[0]); + files.index = sect->file; + } + } + + /* + * Go through the keyword list and sort out fragment IDs for + * all the potentially referenced paragraphs which _aren't_ + * headings. + */ + { + int i; + keyword *kw; + htmlsect *sect; + + for (i = 0; (kw = index234(keywords->keys, i)) != NULL; i++) { + paragraph *q, *p = kw->para; + + if (!is_heading_type(p->type)) { + htmlsect *parent; + + /* + * Find the paragraph's parent htmlsect, to + * determine which file it will end up in. + */ + q = p->parent; + if (!q) { + /* + * Preamble paragraphs have no parent. So if we + * have a non-heading with no parent, it must + * be preamble, and therefore its parent + * htmlsect must be the preamble one. + */ + assert(sects.head && + sects.head->type == TOP); + parent = sects.head; + } else + parent = (htmlsect *)q->private_data; + + /* + * Now we can construct an htmlsect for this + * paragraph itself, taking care to put it in the + * list of non-sections rather than the list of + * sections (so that traverses of the `sects' list + * won't attempt to add it to the contents or + * anything weird like that). + */ + sect = html_new_sect(&nonsects, p, &conf); + sect->file = parent->file; + sect->parent = parent; + p->private_data = sect; + + /* + * Fragment IDs for these paragraphs will simply be + * `p' followed by an integer. + */ + sect->fragments[0] = snewn(40, char); + sprintf(sect->fragments[0], "p%d", + sect->file->last_fragment_number++); + sect->fragments[0] = html_sanitise_fragment(&files, sect->file, + sect->fragments[0]); + } + } + } + + /* + * Reset the fragment numbers in each file. I've just used them + * to generate `p' fragment IDs for non-section paragraphs + * (numbered list elements, bibliocited), and now I want to use + * them for `i' fragment IDs for index entries. + */ + { + htmlfile *file; + for (file = files.head; file; file = file->next) + file->last_fragment_number = 0; + } + + /* + * Now sort out the index. This involves: + * + * - For each index term, we set up an htmlindex structure to + * store all the references to that term. + * + * - Then we make a pass over the actual document, finding + * every word_IndexRef; for each one, we actually figure out + * the HTML filename/fragment pair we will use to reference + * it, store that information in the private data field of + * the word_IndexRef itself (so we can recreate it when the + * time comes to output our HTML), and add a reference to it + * to the index term in question. + */ + { + int i; + indexentry *entry; + htmlsect *lastsect; + word *w; + + /* + * Set up the htmlindex structures. + */ + + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) { + htmlindex *hi = snew(htmlindex); + + hi->nrefs = hi->refsize = 0; + hi->refs = NULL; + + entry->backend_data = hi; + } + + /* + * Run over the document inventing fragments. Each fragment + * is of the form `i' followed by an integer. + */ + lastsect = sects.head; /* this is always the top section */ + for (p = sourceform; p; p = p->next) { + if (is_heading_type(p->type) && p->type != para_Title) + lastsect = (htmlsect *)p->private_data; + + for (w = p->words; w; w = w->next) + if (w->type == word_IndexRef) { + htmlindexref *hr = snew(htmlindexref); + indextag *tag; + int i; + + hr->referenced = hr->generated = FALSE; + hr->section = lastsect; + { + char buf[40]; + sprintf(buf, "i%d", + lastsect->file->last_fragment_number++); + hr->fragment = dupstr(buf); + hr->fragment = + html_sanitise_fragment(&files, hr->section->file, + hr->fragment); + } + w->private_data = hr; + + tag = index_findtag(idx, w->text); + if (!tag) + break; + + for (i = 0; i < tag->nrefs; i++) { + indexentry *entry = tag->refs[i]; + htmlindex *hi = (htmlindex *)entry->backend_data; + + if (hi->nrefs >= hi->refsize) { + hi->refsize += 32; + hi->refs = sresize(hi->refs, hi->refsize, word *); + } + + hi->refs[hi->nrefs++] = w; + } + } + } + } + + /* + * Now we're ready to write out the actual HTML files. + * + * For each file: + * + * - we open that file and write its header + * - we run down the list of sections + * - for each section directly contained within that file, we + * output the section text + * - for each section which is not in the file but which has a + * parent that is, we output a contents entry for the + * section if appropriate + * - finally, we output the file trailer and close the file. + */ + { + htmlfile *f, *prevf; + htmlsect *s; + paragraph *p; + + prevf = NULL; + + for (f = files.head; f; f = f->next) { + htmloutput ho; + int displaying; + enum LISTTYPE { NOLIST, UL, OL, DL }; + enum ITEMTYPE { NOITEM, LI, DT, DD }; + struct stackelement { + struct stackelement *next; + enum LISTTYPE listtype; + enum ITEMTYPE itemtype; + } *stackhead; + +#define listname(lt) ( (lt)==UL ? "ul" : (lt)==OL ? "ol" : "dl" ) +#define itemname(lt) ( (lt)==LI ? "li" : (lt)==DT ? "dt" : "dd" ) + + ho.fp = fopen(f->filename, "w"); + if (!ho.fp) + error(err_cantopenw, f->filename); + + ho.charset = conf.output_charset; + ho.restrict_charset = conf.restrict_charset; + ho.cstate = charset_init_state; + ho.ver = conf.htmlver; + ho.state = HO_NEUTRAL; + ho.contents_level = 0; + ho.hackflags = 0; /* none of these thankyouverymuch */ + ho.hacklimit = -1; + + /* <!DOCTYPE>. */ + switch (conf.htmlver) { + case HTML_3_2: + if (ho.fp) + fprintf(ho.fp, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD " + "HTML 3.2 Final//EN\">\n"); + break; + case HTML_4: + if (ho.fp) + fprintf(ho.fp, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML" + " 4.01//EN\"\n\"http://www.w3.org/TR/html4/" + "strict.dtd\">\n"); + break; + case ISO_HTML: + if (ho.fp) + fprintf(ho.fp, "<!DOCTYPE HTML PUBLIC \"ISO/IEC " + "15445:2000//DTD HTML//EN\">\n"); + break; + case XHTML_1_0_TRANSITIONAL: + if (ho.fp) { + fprintf(ho.fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", + charset_to_mimeenc(conf.output_charset)); + fprintf(ho.fp, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML" + " 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/" + "xhtml1/DTD/xhtml1-transitional.dtd\">\n"); + } + break; + case XHTML_1_0_STRICT: + if (ho.fp) { + fprintf(ho.fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", + charset_to_mimeenc(conf.output_charset)); + fprintf(ho.fp, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML" + " 1.0 Strict//EN\"\n\"http://www.w3.org/TR/xhtml1/" + "DTD/xhtml1-strict.dtd\">\n"); + } + break; + } + + element_open(&ho, "html"); + if (is_xhtml(conf.htmlver)) { + element_attr(&ho, "xmlns", "http://www.w3.org/1999/xhtml"); + } + html_nl(&ho); + + element_open(&ho, "head"); + html_nl(&ho); + + element_empty(&ho, "meta"); + element_attr(&ho, "http-equiv", "content-type"); + { + char buf[200]; + sprintf(buf, "text/html; charset=%.150s", + charset_to_mimeenc(conf.output_charset)); + element_attr(&ho, "content", buf); + } + html_nl(&ho); + + if (conf.author) { + element_empty(&ho, "meta"); + element_attr(&ho, "name", "author"); + element_attr_w(&ho, "content", conf.author); + html_nl(&ho); + } + + if (conf.description) { + element_empty(&ho, "meta"); + element_attr(&ho, "name", "description"); + element_attr_w(&ho, "content", conf.description); + html_nl(&ho); + } + + element_open(&ho, "title"); + if (f->first && f->first->title) { + html_words(&ho, f->first->title->words, NOTHING, + f, keywords, &conf); + + assert(f->last); + if (f->last != f->first && f->last->title) { + html_text(&ho, conf.title_separator); + html_words(&ho, f->last->title->words, NOTHING, + f, keywords, &conf); + } + } + element_close(&ho, "title"); + html_nl(&ho); + + if (conf.rellinks) { + + if (prevf) { + element_empty(&ho, "link"); + element_attr(&ho, "rel", "previous"); + element_attr(&ho, "href", prevf->filename); + html_nl(&ho); + } + + /* FIXME: link rel="up" */ + + if (f != files.head) { + element_empty(&ho, "link"); + element_attr(&ho, "rel", "ToC"); + element_attr(&ho, "href", files.head->filename); + html_nl(&ho); + } + + if (has_index && files.index && f != files.index) { + element_empty(&ho, "link"); + element_attr(&ho, "rel", "index"); + element_attr(&ho, "href", files.index->filename); + html_nl(&ho); + } + + if (f->next) { + element_empty(&ho, "link"); + element_attr(&ho, "rel", "next"); + element_attr(&ho, "href", f->next->filename); + html_nl(&ho); + } + + } + + if (conf.head_end) + html_raw(&ho, conf.head_end); + + /* + * Add any <head> data defined in specific sections + * that go in this file. (This is mostly to allow <meta + * name="AppleTitle"> tags for Mac online help.) + */ + for (s = sects.head; s; s = s->next) { + if (s->file == f && s->text) { + for (p = s->text; + p && (p == s->text || p->type == para_Title || + !is_heading_type(p->type)); + p = p->next) { + if (p->type == para_Config) { + if (!ustricmp(p->keyword, L"html-local-head")) { + html_raw(&ho, adv(p->origkeyword)); + } + } + } + } + } + + element_close(&ho, "head"); + html_nl(&ho); + + if (conf.body_tag) + html_raw(&ho, conf.body_tag); + else + element_open(&ho, "body"); + html_nl(&ho); + + if (conf.body_start) + html_raw(&ho, conf.body_start); + + /* + * Write out a nav bar. Special case: we don't do this + * if there is only one file. + */ + if (conf.navlinks && files.head != files.tail) { + element_open(&ho, "p"); + if (conf.nav_attr) + html_raw_as_attr(&ho, conf.nav_attr); + + if (prevf) { + element_open(&ho, "a"); + element_attr(&ho, "href", prevf->filename); + } + html_text(&ho, conf.nav_prev_text); + if (prevf) + element_close(&ho, "a"); + + html_text(&ho, conf.nav_separator); + + if (f != files.head) { + element_open(&ho, "a"); + element_attr(&ho, "href", files.head->filename); + } + html_text(&ho, conf.contents_text); + if (f != files.head) + element_close(&ho, "a"); + + if (has_index && files.index) { + html_text(&ho, conf.nav_separator); + if (f != files.index) { + element_open(&ho, "a"); + element_attr(&ho, "href", files.index->filename); + } + html_text(&ho, conf.index_text); + if (f != files.index) + element_close(&ho, "a"); + } + + html_text(&ho, conf.nav_separator); + + if (f->next) { + element_open(&ho, "a"); + element_attr(&ho, "href", f->next->filename); + } + html_text(&ho, conf.nav_next_text); + if (f->next) + element_close(&ho, "a"); + + element_close(&ho, "p"); + html_nl(&ho); + } + prevf = f; + + /* + * Write out a prefix TOC for the file (if a leaf file). + * + * We start by going through the section list and + * collecting the sections which need to be added to + * the contents. On the way, we also test to see if + * this file is a leaf file (defined as one which + * contains all descendants of any section it + * contains), because this will play a part in our + * decision on whether or not to _output_ the TOC. + * + * Special case: we absolutely do not do this if we're + * in single-file mode. + */ + if (files.head != files.tail) { + int ntoc = 0, tocsize = 0; + htmlsect **toc = NULL; + int leaf = TRUE; + + for (s = sects.head; s; s = s->next) { + htmlsect *a, *ac; + int depth, adepth; + + /* + * Search up from this section until we find + * the highest-level one which belongs in this + * file. + */ + depth = adepth = 0; + a = NULL; + for (ac = s; ac; ac = ac->parent) { + if (ac->file == f) { + a = ac; + adepth = depth; + } + depth++; + } + + if (s->file != f && a != NULL) + leaf = FALSE; + + if (a) { + if (adepth <= a->contents_depth) { + if (ntoc >= tocsize) { + tocsize += 64; + toc = sresize(toc, tocsize, htmlsect *); + } + toc[ntoc++] = s; + } + } + } + + if (leaf && conf.leaf_contains_contents && + ntoc >= conf.leaf_smallest_contents) { + int i; + + for (i = 0; i < ntoc; i++) { + htmlsect *s = toc[i]; + int hlevel = (s->type == TOP ? -1 : + s->type == INDEX ? 0 : + heading_depth(s->title)) + - f->min_heading_depth + 1; + + assert(hlevel >= 1); + html_contents_entry(&ho, hlevel, s, + f, keywords, &conf); + } + html_contents_entry(&ho, 0, NULL, f, keywords, &conf); + } + } + + /* + * Now go through the document and output some real + * text. + */ + displaying = FALSE; + for (s = sects.head; s; s = s->next) { + if (s->file == f) { + /* + * This section belongs in this file. + * Display it. + */ + displaying = TRUE; + } else { + /* + * Doesn't belong in this file, but it may be + * a descendant of a section which does, in + * which case we should consider it for the + * main TOC of this file (for non-leaf files). + */ + htmlsect *a, *ac; + int depth, adepth; + + displaying = FALSE; + + /* + * Search up from this section until we find + * the highest-level one which belongs in this + * file. + */ + depth = adepth = 0; + a = NULL; + for (ac = s; ac; ac = ac->parent) { + if (ac->file == f) { + a = ac; + adepth = depth; + } + depth++; + } + + if (a != NULL) { + /* + * This section does not belong in this + * file, but an ancestor of it does. Write + * out a contents table entry, if the depth + * doesn't exceed the maximum contents + * depth for the ancestor section. + */ + if (adepth <= a->contents_depth) { + html_contents_entry(&ho, adepth, s, + f, keywords, &conf); + } + } + } + + if (displaying) { + int hlevel; + char htag[3]; + + html_contents_entry(&ho, 0, NULL, f, keywords, &conf); + + /* + * Display the section heading. + */ + + hlevel = (s->type == TOP ? -1 : + s->type == INDEX ? 0 : + heading_depth(s->title)) + - f->min_heading_depth + 1; + assert(hlevel >= 1); + /* HTML headings only go up to <h6> */ + if (hlevel > 6) + hlevel = 6; + htag[0] = 'h'; + htag[1] = '0' + hlevel; + htag[2] = '\0'; + element_open(&ho, htag); + + /* + * Provide anchor(s) for cross-links to target. + * + * (Also we'll have to do this separately in + * other paragraph types - NumberedList and + * BiblioCited.) + */ + { + int i; + for (i=0; i < conf.ntfragments; i++) + if (s->fragments[i]) + html_fragment(&ho, s->fragments[i]); + } + + html_section_title(&ho, s, f, keywords, &conf, TRUE); + + element_close(&ho, htag); + + /* + * Now display the section text. + */ + if (s->text) { + stackhead = snew(struct stackelement); + stackhead->next = NULL; + stackhead->listtype = NOLIST; + stackhead->itemtype = NOITEM; + + for (p = s->text;; p = p->next) { + enum LISTTYPE listtype; + struct stackelement *se; + + /* + * Preliminary switch to figure out what + * sort of list we expect to be inside at + * this stage. + * + * Since p may still be NULL at this point, + * I invent a harmless paragraph type for + * it if it is. + */ + switch (p ? p->type : para_Normal) { + case para_Rule: + case para_Normal: + case para_Copyright: + case para_BiblioCited: + case para_Code: + case para_QuotePush: + case para_QuotePop: + case para_Chapter: + case para_Appendix: + case para_UnnumberedChapter: + case para_Heading: + case para_Subsect: + case para_LcontPop: + listtype = NOLIST; + break; + + case para_Bullet: + listtype = UL; + break; + + case para_NumberedList: + listtype = OL; + break; + + case para_DescribedThing: + case para_Description: + listtype = DL; + break; + + case para_LcontPush: + se = snew(struct stackelement); + se->next = stackhead; + se->listtype = NOLIST; + se->itemtype = NOITEM; + stackhead = se; + continue; + + default: /* some totally non-printing para */ + continue; + } + + html_nl(&ho); + + /* + * Terminate the most recent list item, if + * any. (We left this until after + * processing LcontPush, since in that case + * the list item won't want to be + * terminated until after the corresponding + * LcontPop.) + */ + if (stackhead->itemtype != NOITEM) { + element_close(&ho, itemname(stackhead->itemtype)); + html_nl(&ho); + } + stackhead->itemtype = NOITEM; + + /* + * Terminate the current list, if it's not + * the one we want to be in. + */ + if (listtype != stackhead->listtype && + stackhead->listtype != NOLIST) { + element_close(&ho, listname(stackhead->listtype)); + html_nl(&ho); + } + + /* + * Leave the loop if our time has come. + */ + if (!p || (is_heading_type(p->type) && + p->type != para_Title)) + break; /* end of section text */ + + /* + * Start a fresh list if necessary. + */ + if (listtype != stackhead->listtype && + listtype != NOLIST) + element_open(&ho, listname(listtype)); + + stackhead->listtype = listtype; + + switch (p->type) { + case para_Rule: + element_empty(&ho, "hr"); + break; + case para_Code: + html_codepara(&ho, p->words); + break; + case para_Normal: + case para_Copyright: + element_open(&ho, "p"); + html_nl(&ho); + html_words(&ho, p->words, ALL, + f, keywords, &conf); + html_nl(&ho); + element_close(&ho, "p"); + break; + case para_BiblioCited: + element_open(&ho, "p"); + if (p->private_data) { + htmlsect *s = (htmlsect *)p->private_data; + int i; + for (i=0; i < conf.ntfragments; i++) + if (s->fragments[i]) + html_fragment(&ho, s->fragments[i]); + } + html_nl(&ho); + html_words(&ho, p->kwtext, ALL, + f, keywords, &conf); + html_text(&ho, L" "); + html_words(&ho, p->words, ALL, + f, keywords, &conf); + html_nl(&ho); + element_close(&ho, "p"); + break; + case para_Bullet: + case para_NumberedList: + element_open(&ho, "li"); + if (p->private_data) { + htmlsect *s = (htmlsect *)p->private_data; + int i; + for (i=0; i < conf.ntfragments; i++) + if (s->fragments[i]) + html_fragment(&ho, s->fragments[i]); + } + html_nl(&ho); + stackhead->itemtype = LI; + html_words(&ho, p->words, ALL, + f, keywords, &conf); + break; + case para_DescribedThing: + element_open(&ho, "dt"); + html_nl(&ho); + stackhead->itemtype = DT; + html_words(&ho, p->words, ALL, + f, keywords, &conf); + break; + case para_Description: + element_open(&ho, "dd"); + html_nl(&ho); + stackhead->itemtype = DD; + html_words(&ho, p->words, ALL, + f, keywords, &conf); + break; + + case para_QuotePush: + element_open(&ho, "blockquote"); + break; + case para_QuotePop: + element_close(&ho, "blockquote"); + break; + + case para_LcontPop: + se = stackhead; + stackhead = stackhead->next; + assert(stackhead); + sfree(se); + break; + } + } + + assert(stackhead && !stackhead->next); + sfree(stackhead); + } + + if (s->type == INDEX) { + indexentry *entry; + int i; + + /* + * This section is the index. I'll just + * render it as a single paragraph, with a + * colon between the index term and the + * references, and <br> in between each + * entry. + */ + element_open(&ho, "p"); + + for (i = 0; (entry = + index234(idx->entries, i)) != NULL; i++) { + htmlindex *hi = (htmlindex *)entry->backend_data; + int j; + + if (i > 0) + element_empty(&ho, "br"); + html_nl(&ho); + + html_words(&ho, entry->text, MARKUP|LINKS, + f, keywords, &conf); + + html_text(&ho, conf.index_main_sep); + + for (j = 0; j < hi->nrefs; j++) { + htmlindexref *hr = + (htmlindexref *)hi->refs[j]->private_data; + paragraph *p = hr->section->title; + + if (j > 0) + html_text(&ho, conf.index_multi_sep); + + html_href(&ho, f, hr->section->file, + hr->fragment); + hr->referenced = TRUE; + if (p && p->kwtext) + html_words(&ho, p->kwtext, MARKUP|LINKS, + f, keywords, &conf); + else if (p && p->words) + html_words(&ho, p->words, MARKUP|LINKS, + f, keywords, &conf); + else { + /* + * If there is no title at all, + * this must be because our + * target section is the + * preamble section and there + * is no title. So we use the + * preamble_text. + */ + html_text(&ho, conf.preamble_text); + } + element_close(&ho, "a"); + } + } + element_close(&ho, "p"); + } + } + } + + html_contents_entry(&ho, 0, NULL, f, keywords, &conf); + html_nl(&ho); + + { + /* + * Footer. + */ + int done_version_ids = FALSE; + + if (conf.address_section) + element_empty(&ho, "hr"); + + if (conf.body_end) + html_raw(&ho, conf.body_end); + + if (conf.address_section) { + int started = FALSE; + if (conf.htmlver == ISO_HTML) { + /* + * The ISO-HTML validator complains if + * there isn't a <div> tag surrounding the + * <address> tag. I'm uncertain of why this + * should be - there appears to be no + * mention of this in the ISO-HTML spec, + * suggesting that it doesn't represent a + * change from HTML 4, but nonetheless the + * HTML 4 validator doesn't seem to mind. + */ + element_open(&ho, "div"); + } + element_open(&ho, "address"); + if (conf.addr_start) { + html_raw(&ho, conf.addr_start); + html_nl(&ho); + started = TRUE; + } + if (conf.visible_version_id) { + for (p = sourceform; p; p = p->next) + if (p->type == para_VersionID) { + if (started) + element_empty(&ho, "br"); + html_nl(&ho); + html_text(&ho, conf.pre_versionid); + html_words(&ho, p->words, NOTHING, + f, keywords, &conf); + html_text(&ho, conf.post_versionid); + started = TRUE; + } + done_version_ids = TRUE; + } + if (conf.addr_end) { + if (started) + element_empty(&ho, "br"); + html_raw(&ho, conf.addr_end); + } + element_close(&ho, "address"); + if (conf.htmlver == ISO_HTML) + element_close(&ho, "div"); + } + + if (!done_version_ids) { + /* + * If the user didn't want the version IDs + * visible, I think we still have a duty to put + * them in an HTML comment. + */ + int started = FALSE; + for (p = sourceform; p; p = p->next) + if (p->type == para_VersionID) { + if (!started) { + html_raw(&ho, "<!-- version IDs:\n"); + started = TRUE; + } + html_words(&ho, p->words, NOTHING, + f, keywords, &conf); + html_nl(&ho); + } + if (started) + html_raw(&ho, "-->\n"); + } + } + + element_close(&ho, "body"); + html_nl(&ho); + element_close(&ho, "html"); + html_nl(&ho); + cleanup(&ho); + } + } + + /* + * Before we start outputting the HTML Help files, check + * whether there's even going to _be_ an index file: we omit it + * if the index contains nothing. + */ + hhk_filename = conf.hhk_filename; + if (hhk_filename) { + int ok = FALSE; + int i; + indexentry *entry; + + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) { + htmlindex *hi = (htmlindex *)entry->backend_data; + + if (hi->nrefs > 0) { + ok = TRUE; /* found an index entry */ + break; + } + } + + if (!ok) + hhk_filename = NULL; + } + + /* + * Output the MS HTML Help supporting files, if requested. + * + * A good unofficial reference for these is <http://chmspec.nongnu.org/>. + */ + if (conf.hhp_filename) { + htmlfile *f; + htmloutput ho; + + ho.charset = CS_CP1252; /* as far as I know, HHP files are */ + ho.restrict_charset = CS_CP1252; /* hardwired to this charset */ + ho.cstate = charset_init_state; + ho.ver = HTML_4; /* *shrug* */ + ho.state = HO_NEUTRAL; + ho.contents_level = 0; + ho.hackflags = HO_HACK_QUOTENOTHING; + + ho.fp = fopen(conf.hhp_filename, "w"); + if (!ho.fp) + error(err_cantopenw, conf.hhp_filename); + + fprintf(ho.fp, + "[OPTIONS]\n" + /* Binary TOC required for Next/Previous nav to work */ + "Binary TOC=Yes\n" + "Compatibility=1.1 or later\n" + "Compiled file=%s\n" + "Default Window=main\n" + "Default topic=%s\n" + "Display compile progress=Yes\n" + "Full-text search=Yes\n" + "Title=", conf.chm_filename, files.head->filename); + + ho.hacklimit = 255; + html_words(&ho, topsect->title->words, NOTHING, + NULL, keywords, &conf); + + fprintf(ho.fp, "\n"); + + /* + * These two entries don't seem to be remotely necessary + * for a successful run of the help _compiler_, but + * omitting them causes the GUI Help Workshop to behave + * rather strangely if you try to load the help project + * into that and edit it. + */ + if (conf.hhc_filename) + fprintf(ho.fp, "Contents file=%s\n", conf.hhc_filename); + if (hhk_filename) + fprintf(ho.fp, "Index file=%s\n", hhk_filename); + + fprintf(ho.fp, "\n[WINDOWS]\nmain=\""); + + ho.hackflags |= HO_HACK_OMITQUOTES; + ho.hacklimit = 255; + html_words(&ho, topsect->title->words, NOTHING, + NULL, keywords, &conf); + + fprintf(ho.fp, "\",\"%s\",\"%s\",\"%s\",,,,,," + /* This first magic number is fsWinProperties, controlling + * Navigation Pane options and the like. + * Constants HHWIN_PROP_* in htmlhelp.h. */ + "0x62520,," + /* This second number is fsToolBarFlags, mainly controlling + * toolbar buttons. Constants HHWIN_BUTTON_*. + * NOTE: there are two pairs of bits for Next/Previous + * buttons: 7/8 (which do nothing useful), and 21/22 + * (which work). (Neither of these are exposed in the HHW + * UI, but they work fine in HH.) We use the latter. */ + "0x60304e,,,,,,,,0\n", + conf.hhc_filename ? conf.hhc_filename : "", + hhk_filename ? hhk_filename : "", + files.head->filename); + + /* + * The [FILES] section is also not necessary for + * compilation (hhc appears to build up a list of needed + * files just by following links from the given starting + * points), but useful for loading the project into HHW. + */ + fprintf(ho.fp, "\n[FILES]\n"); + for (f = files.head; f; f = f->next) + fprintf(ho.fp, "%s\n", f->filename); + + fclose(ho.fp); + } + if (conf.hhc_filename) { + htmlfile *f; + htmlsect *s, *a; + htmloutput ho; + int currdepth = 0; + + ho.fp = fopen(conf.hhc_filename, "w"); + if (!ho.fp) + error(err_cantopenw, conf.hhc_filename); + + ho.charset = CS_CP1252; /* as far as I know, HHC files are */ + ho.restrict_charset = CS_CP1252; /* hardwired to this charset */ + ho.cstate = charset_init_state; + ho.ver = HTML_4; /* *shrug* */ + ho.state = HO_NEUTRAL; + ho.contents_level = 0; + ho.hackflags = HO_HACK_QUOTEQUOTES; + + /* + * Magic DOCTYPE which seems to work for .HHC files. I'm + * wary of trying to change it! + */ + fprintf(ho.fp, "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n" + "<HTML><HEAD>\n" + "<META HTTP-EQUIV=\"Content-Type\" " + "CONTENT=\"text/html; charset=%s\">\n" + "</HEAD><BODY><UL>\n", + charset_to_mimeenc(conf.output_charset)); + + for (f = files.head; f; f = f->next) { + /* + * For each HTML file, write out a contents entry. + */ + int depth, leaf = TRUE; + + /* + * Determine the depth of this file in the contents + * tree. + * + * If the file contains no sections, it is assumed to + * have depth zero. + */ + depth = 0; + if (f->first) + for (a = f->first->parent; a && a->type != TOP; a = a->parent) + depth++; + + /* + * Determine if this file is a leaf file, by + * trawling the section list to see if there's any + * section with an ancestor in this file but which + * is not itself in this file. + * + * Special case: for contents purposes, the TOP + * file is not considered to be the parent of the + * chapter files, so it's always a leaf. + * + * A file with no sections in it is also a leaf. + */ + if (f->first && f->first->type != TOP) { + for (s = f->first; s; s = s->next) { + htmlsect *a; + + if (leaf && s->file != f) { + for (a = s; a; a = a->parent) + if (a->file == f) { + leaf = FALSE; + break; + } + } + } + } + + /* + * Now write out our contents entry. + */ + while (currdepth < depth) { + fprintf(ho.fp, "<UL>\n"); + currdepth++; + } + while (currdepth > depth) { + fprintf(ho.fp, "</UL>\n"); + currdepth--; + } + /* fprintf(ho.fp, "<!-- depth=%d -->", depth); */ + fprintf(ho.fp, "<LI><OBJECT TYPE=\"text/sitemap\">" + "<PARAM NAME=\"Name\" VALUE=\""); + ho.hacklimit = 255; + if (f->first->title) + html_words(&ho, f->first->title->words, NOTHING, + NULL, keywords, &conf); + else if (f->first->type == INDEX) + html_text(&ho, conf.index_text); + fprintf(ho.fp, "\"><PARAM NAME=\"Local\" VALUE=\"%s\">" + "<PARAM NAME=\"ImageNumber\" VALUE=\"%d\"></OBJECT>\n", + f->filename, leaf ? 11 : 1); + } + + while (currdepth > 0) { + fprintf(ho.fp, "</UL>\n"); + currdepth--; + } + + fprintf(ho.fp, "</UL></BODY></HTML>\n"); + + cleanup(&ho); + } + if (hhk_filename) { + htmlfile *f; + htmloutput ho; + indexentry *entry; + int i; + + /* + * First make a pass over all HTML files and set their + * `temp' fields to zero, because we're about to use them. + */ + for (f = files.head; f; f = f->next) + f->temp = 0; + + ho.fp = fopen(hhk_filename, "w"); + if (!ho.fp) + error(err_cantopenw, hhk_filename); + + ho.charset = CS_CP1252; /* as far as I know, HHK files are */ + ho.restrict_charset = CS_CP1252; /* hardwired to this charset */ + ho.cstate = charset_init_state; + ho.ver = HTML_4; /* *shrug* */ + ho.state = HO_NEUTRAL; + ho.contents_level = 0; + ho.hackflags = HO_HACK_QUOTEQUOTES; + + /* + * Magic DOCTYPE which seems to work for .HHK files. I'm + * wary of trying to change it! + */ + fprintf(ho.fp, "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n" + "<HTML><HEAD>\n" + "<META HTTP-EQUIV=\"Content-Type\" " + "CONTENT=\"text/html; charset=%s\">\n" + "</HEAD><BODY><UL>\n", + charset_to_mimeenc(conf.output_charset)); + + /* + * Go through the index terms and output each one. + */ + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) { + htmlindex *hi = (htmlindex *)entry->backend_data; + int j; + + if (hi->nrefs > 0) { + fprintf(ho.fp, "<LI><OBJECT TYPE=\"text/sitemap\">\n" + "<PARAM NAME=\"Name\" VALUE=\""); + ho.hacklimit = 255; + html_words(&ho, entry->text, NOTHING, + NULL, keywords, &conf); + fprintf(ho.fp, "\">\n"); + + for (j = 0; j < hi->nrefs; j++) { + htmlindexref *hr = + (htmlindexref *)hi->refs[j]->private_data; + + /* + * Use the temp field to ensure we don't + * reference the same file more than once. + */ + if (!hr->section->file->temp) { + fprintf(ho.fp, "<PARAM NAME=\"Local\" VALUE=\"%s\">\n", + hr->section->file->filename); + hr->section->file->temp = 1; + } + + hr->referenced = TRUE; + } + + fprintf(ho.fp, "</OBJECT>\n"); + + /* + * Now go through those files and re-clear the temp + * fields ready for the _next_ index term. + */ + for (j = 0; j < hi->nrefs; j++) { + htmlindexref *hr = + (htmlindexref *)hi->refs[j]->private_data; + hr->section->file->temp = 0; + } + } + } + + fprintf(ho.fp, "</UL></BODY></HTML>\n"); + cleanup(&ho); + } + + /* + * Go through and check that no index fragments were referenced + * without being generated, or indeed vice versa. + * + * (When I actually get round to freeing everything, this can + * probably be the freeing loop as well.) + */ + for (p = sourceform; p; p = p->next) { + word *w; + for (w = p->words; w; w = w->next) + if (w->type == word_IndexRef) { + htmlindexref *hr = (htmlindexref *)w->private_data; + + assert(!hr->referenced == !hr->generated); + } + } + + /* + * Free all the working data. + */ + { + htmlfragment *frag; + while ( (frag = (htmlfragment *)delpos234(files.frags, 0)) != NULL ) { + /* + * frag->fragment is dynamically allocated, but will be + * freed when we process the htmlsect structure which + * it is attached to. + */ + sfree(frag); + } + freetree234(files.frags); + } + /* + * The strings in files.files are all owned by their containing + * htmlfile structures, so there's no need to free them here. + */ + freetree234(files.files); + { + htmlsect *sect, *tmp; + sect = sects.head; + while (sect) { + int i; + tmp = sect->next; + for (i=0; i < conf.ntfragments; i++) + sfree(sect->fragments[i]); + sfree(sect->fragments); + sfree(sect); + sect = tmp; + } + sect = nonsects.head; + while (sect) { + int i; + tmp = sect->next; + for (i=0; i < conf.ntfragments; i++) + sfree(sect->fragments[i]); + sfree(sect->fragments); + sfree(sect); + sect = tmp; + } + } + { + htmlfile *file, *tmp; + file = files.head; + while (file) { + tmp = file->next; + sfree(file->filename); + sfree(file); + file = tmp; + } + } + { + int i; + indexentry *entry; + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) { + htmlindex *hi = (htmlindex *)entry->backend_data; + sfree(hi); + } + } + { + paragraph *p; + word *w; + for (p = sourceform; p; p = p->next) + for (w = p->words; w; w = w->next) + if (w->type == word_IndexRef) { + htmlindexref *hr = (htmlindexref *)w->private_data; + assert(hr != NULL); + sfree(hr->fragment); + sfree(hr); + } + } + sfree(conf.asect); + sfree(conf.single_filename); + sfree(conf.contents_filename); + sfree(conf.index_filename); + sfree(conf.template_filename); + while (conf.ntfragments--) + sfree(conf.template_fragments[conf.ntfragments]); + sfree(conf.template_fragments); +} + +static void html_file_section(htmlconfig *cfg, htmlfilelist *files, + htmlsect *sect, int depth) +{ + htmlfile *file; + int ldepth; + + /* + * `depth' is derived from the heading_depth() macro at the top + * of this file, which counts title as -1, chapter as 0, + * heading as 1 and subsection as 2. However, the semantics of + * cfg->leaf_level are defined to count chapter as 1, heading + * as 2 etc. So first I increment depth :-( + */ + ldepth = depth + 1; + + if (cfg->leaf_level == 0) { + /* + * leaf_level==0 is a special case, in which everything is + * put into a single file. + */ + if (!files->single) + files->single = html_new_file(files, cfg->single_filename); + + file = files->single; + } else { + /* + * If the depth of this section is at or above leaf_level, + * we invent a fresh file and put this section at its head. + * Otherwise, we put it in the same file as its parent + * section. + * + * Another special value of cfg->leaf_level is -1, which + * means infinity (i.e. it's considered to always be + * greater than depth). + */ + if (cfg->leaf_level > 0 && ldepth > cfg->leaf_level) { + /* + * We know that sect->parent cannot be NULL. The only + * circumstance in which it can be is if sect is at + * chapter or appendix level, i.e. ldepth==1; and if + * that's the case, then we cannot have entered this + * branch unless cfg->leaf_level==0, in which case we + * would be in the single-file case above and not here + * at all. + */ + assert(sect->parent); + + file = sect->parent->file; + } else { + if (sect->type == TOP) { + file = html_new_file(files, cfg->contents_filename); + } else if (sect->type == INDEX) { + file = html_new_file(files, cfg->index_filename); + } else { + char *title; + + assert(ldepth > 0 && sect->title); + title = html_format(sect->title, cfg->template_filename); + file = html_new_file(files, title); + sfree(title); + } + } + } + + sect->file = file; + + if (file->min_heading_depth > depth) { + /* + * This heading is at a higher level than any heading we + * have so far placed in this file; so we set the `first' + * pointer. + */ + file->min_heading_depth = depth; + file->first = sect; + } + + if (file->min_heading_depth == depth) + file->last = sect; +} + +static htmlfile *html_new_file(htmlfilelist *list, char *filename) +{ + htmlfile *ret = snew(htmlfile); + + ret->next = NULL; + if (list->tail) + list->tail->next = ret; + else + list->head = ret; + list->tail = ret; + + ret->filename = html_sanitise_filename(list, dupstr(filename)); + add234(list->files, ret->filename); + ret->last_fragment_number = 0; + ret->min_heading_depth = INT_MAX; + ret->first = ret->last = NULL; + + return ret; +} + +static htmlsect *html_new_sect(htmlsectlist *list, paragraph *title, + htmlconfig *cfg) +{ + htmlsect *ret = snew(htmlsect); + + ret->next = NULL; + if (list->tail) + list->tail->next = ret; + else + list->head = ret; + list->tail = ret; + + ret->title = title; + ret->file = NULL; + ret->parent = NULL; + ret->type = NORMAL; + + ret->fragments = snewn(cfg->ntfragments, char *); + { + int i; + for (i=0; i < cfg->ntfragments; i++) + ret->fragments[i] = NULL; + } + + return ret; +} + +static void html_words(htmloutput *ho, word *words, int flags, + htmlfile *file, keywordlist *keywords, htmlconfig *cfg) +{ + word *w; + char *c; + int style, type; + + for (w = words; w; w = w->next) switch (w->type) { + case word_HyperLink: + if (flags & LINKS) { + element_open(ho, "a"); + c = utoa_dup(w->text, CS_ASCII); + element_attr(ho, "href", c); + sfree(c); + } + break; + case word_Graphic: + element_open( ho, "img"); + c = utoa_dup(w->text, CS_ASCII); + element_attr(ho, "src", c); + return_to_neutral(ho); + sfree(c); + break; + case word_UpperXref: + case word_LowerXref: + if (flags & LINKS) { + keyword *kwl = kw_lookup(keywords, w->text); + paragraph *p; + htmlsect *s; + + assert(kwl); + p = kwl->para; + s = (htmlsect *)p->private_data; + + assert(s); + + html_href(ho, file, s->file, s->fragments[0]); + } + break; + case word_HyperEnd: + case word_XrefEnd: + if (flags & LINKS) + element_close(ho, "a"); + break; + case word_IndexRef: + if (flags & INDEXENTS) { + htmlindexref *hr = (htmlindexref *)w->private_data; + html_fragment(ho, hr->fragment); + hr->generated = TRUE; + } + break; + case word_Normal: + case word_Emph: + case word_Strong: + case word_Code: + case word_WeakCode: + case word_WhiteSpace: + case word_EmphSpace: + case word_StrongSpace: + case word_CodeSpace: + case word_WkCodeSpace: + case word_Quote: + case word_EmphQuote: + case word_StrongQuote: + case word_CodeQuote: + case word_WkCodeQuote: + style = towordstyle(w->type); + type = removeattr(w->type); + if (style == word_Emph && + (attraux(w->aux) == attr_First || + attraux(w->aux) == attr_Only) && + (flags & MARKUP)) + element_open(ho, "em"); + else if ((style == word_Code || style == word_WeakCode) && + (attraux(w->aux) == attr_First || + attraux(w->aux) == attr_Only) && + (flags & MARKUP)) + element_open(ho, "code"); + else if (style == word_Strong && + (attraux(w->aux) == attr_First || + attraux(w->aux) == attr_Only) && + (flags & MARKUP)) + element_open(ho, "strong"); + + if (type == word_WhiteSpace) + html_text(ho, L" "); + else if (type == word_Quote) { + if (quoteaux(w->aux) == quote_Open) + html_text(ho, cfg->lquote); + else + html_text(ho, cfg->rquote); + } else { + if (!w->alt || cvt_ok(ho->restrict_charset, w->text)) + html_text_nbsp(ho, w->text); + else + html_words(ho, w->alt, flags, file, keywords, cfg); + } + + if (style == word_Emph && + (attraux(w->aux) == attr_Last || + attraux(w->aux) == attr_Only) && + (flags & MARKUP)) + element_close(ho, "em"); + else if ((style == word_Code || style == word_WeakCode) && + (attraux(w->aux) == attr_Last || + attraux(w->aux) == attr_Only) && + (flags & MARKUP)) + element_close(ho, "code"); + else if (style == word_Strong && + (attraux(w->aux) == attr_Last || + attraux(w->aux) == attr_Only) && + (flags & MARKUP)) + element_close(ho, "strong"); + + break; + } +} + +static void html_codepara(htmloutput *ho, word *words) +{ + element_open(ho, "pre"); + element_open(ho, "code"); + for (; words; words = words->next) if (words->type == word_WeakCode) { + char *open_tag; + wchar_t *t, *e; + + t = words->text; + if (words->next && words->next->type == word_Emph) { + e = words->next->text; + words = words->next; + } else + e = NULL; + + while (e && *e && *t) { + int n; + int ec = *e; + + for (n = 0; t[n] && e[n] && e[n] == ec; n++); + + open_tag = NULL; + if (ec == 'i') + open_tag = "em"; + else if (ec == 'b') + open_tag = "b"; + if (open_tag) + element_open(ho, open_tag); + + html_text_limit(ho, t, n); + + if (open_tag) + element_close(ho, open_tag); + + t += n; + e += n; + } + html_text(ho, t); + html_nl(ho); + } + element_close(ho, "code"); + element_close(ho, "pre"); +} + +static void html_charset_cleanup(htmloutput *ho) +{ + char outbuf[256]; + int bytes; + + bytes = charset_from_unicode(NULL, NULL, outbuf, lenof(outbuf), + ho->charset, &ho->cstate, NULL); + if (ho->fp && bytes > 0) + fwrite(outbuf, 1, bytes, ho->fp); +} + +static void return_mostly_to_neutral(htmloutput *ho) +{ + if (ho->fp) { + if (ho->state == HO_IN_EMPTY_TAG && is_xhtml(ho->ver)) { + fprintf(ho->fp, " />"); + } else if (ho->state == HO_IN_EMPTY_TAG || ho->state == HO_IN_TAG) { + fprintf(ho->fp, ">"); + } + } + + ho->state = HO_NEUTRAL; +} + +static void return_to_neutral(htmloutput *ho) +{ + if (ho->state == HO_IN_TEXT) { + html_charset_cleanup(ho); + } + + return_mostly_to_neutral(ho); +} + +static void element_open(htmloutput *ho, char const *name) +{ + return_to_neutral(ho); + if (ho->fp) + fprintf(ho->fp, "<%s", name); + ho->state = HO_IN_TAG; +} + +static void element_close(htmloutput *ho, char const *name) +{ + return_to_neutral(ho); + if (ho->fp) + fprintf(ho->fp, "</%s>", name); + ho->state = HO_NEUTRAL; +} + +static void element_empty(htmloutput *ho, char const *name) +{ + return_to_neutral(ho); + if (ho->fp) + fprintf(ho->fp, "<%s", name); + ho->state = HO_IN_EMPTY_TAG; +} + +static void html_nl(htmloutput *ho) +{ + return_to_neutral(ho); + if (ho->fp) + fputc('\n', ho->fp); +} + +static void html_raw(htmloutput *ho, char *text) +{ + return_to_neutral(ho); + if (ho->fp) + fputs(text, ho->fp); +} + +static void html_raw_as_attr(htmloutput *ho, char *text) +{ + assert(ho->state == HO_IN_TAG || ho->state == HO_IN_EMPTY_TAG); + if (ho->fp) { + fputc(' ', ho->fp); + fputs(text, ho->fp); + } +} + +static void element_attr(htmloutput *ho, char const *name, char const *value) +{ + html_charset_cleanup(ho); + assert(ho->state == HO_IN_TAG || ho->state == HO_IN_EMPTY_TAG); + if (ho->fp) + fprintf(ho->fp, " %s=\"%s\"", name, value); +} + +static void element_attr_w(htmloutput *ho, char const *name, + wchar_t const *value) +{ + html_charset_cleanup(ho); + if (ho->fp) + fprintf(ho->fp, " %s=\"", name); + html_text_limit_internal(ho, value, 0, TRUE, FALSE); + html_charset_cleanup(ho); + if (ho->fp) + fputc('"', ho->fp); +} + +static void html_text(htmloutput *ho, wchar_t const *text) +{ + return_mostly_to_neutral(ho); + html_text_limit_internal(ho, text, 0, FALSE, FALSE); +} + +static void html_text_nbsp(htmloutput *ho, wchar_t const *text) +{ + return_mostly_to_neutral(ho); + html_text_limit_internal(ho, text, 0, FALSE, TRUE); +} + +static void html_text_limit(htmloutput *ho, wchar_t const *text, int maxlen) +{ + return_mostly_to_neutral(ho); + html_text_limit_internal(ho, text, maxlen, FALSE, FALSE); +} + +static void html_text_limit_internal(htmloutput *ho, wchar_t const *text, + int maxlen, int quote_quotes, int nbsp) +{ + int textlen = ustrlen(text); + char outbuf[256]; + int bytes, err; + + if (ho->hackflags & (HO_HACK_QUOTEQUOTES | HO_HACK_OMITQUOTES)) + quote_quotes = TRUE; /* override the input value */ + + if (maxlen > 0 && textlen > maxlen) + textlen = maxlen; + if (ho->hacklimit >= 0) { + if (textlen > ho->hacklimit) + textlen = ho->hacklimit; + ho->hacklimit -= textlen; + } + + while (textlen > 0) { + /* Scan ahead for characters we really can't display in HTML. */ + int lenbefore, lenafter; + for (lenbefore = 0; lenbefore < textlen; lenbefore++) + if (text[lenbefore] == L'<' || + text[lenbefore] == L'>' || + text[lenbefore] == L'&' || + (text[lenbefore] == L'"' && quote_quotes) || + (text[lenbefore] == L' ' && nbsp)) + break; + lenafter = lenbefore; + bytes = charset_from_unicode(&text, &lenafter, outbuf, lenof(outbuf), + ho->charset, &ho->cstate, &err); + textlen -= (lenbefore - lenafter); + if (bytes > 0 && ho->fp) + fwrite(outbuf, 1, bytes, ho->fp); + if (err) { + /* + * We have encountered a character that cannot be + * displayed in the selected output charset. Therefore, + * we use an HTML numeric entity reference. + */ + assert(textlen > 0); + if (ho->fp) + fprintf(ho->fp, "&#%ld;", (long int)*text); + text++, textlen--; + } else if (lenafter == 0 && textlen > 0) { + /* + * We have encountered a character which is special to + * HTML. + */ + if (ho->fp) { + if (*text == L'"' && (ho->hackflags & HO_HACK_OMITQUOTES)) { + fputc('\'', ho->fp); + } else if (ho->hackflags & HO_HACK_QUOTENOTHING) { + fputc(*text, ho->fp); + } else { + if (*text == L'<') + fprintf(ho->fp, "<"); + else if (*text == L'>') + fprintf(ho->fp, ">"); + else if (*text == L'&') + fprintf(ho->fp, "&"); + else if (*text == L'"') + fprintf(ho->fp, """); + else if (*text == L' ') { + assert(nbsp); + fprintf(ho->fp, " "); + } else + assert(!"Can't happen"); + } + } + text++, textlen--; + } + } +} + +static void cleanup(htmloutput *ho) +{ + return_to_neutral(ho); + if (ho->fp) + fclose(ho->fp); +} + +static void html_href(htmloutput *ho, htmlfile *thisfile, + htmlfile *targetfile, char *targetfrag) +{ + rdstringc rs = { 0, 0, NULL }; + char *url; + + if (targetfile != thisfile) + rdaddsc(&rs, targetfile->filename); + if (targetfrag) { + rdaddc(&rs, '#'); + rdaddsc(&rs, targetfrag); + } + url = rs.text; + + element_open(ho, "a"); + element_attr(ho, "href", url); + sfree(url); +} + +static void html_fragment(htmloutput *ho, char const *fragment) +{ + element_open(ho, "a"); + element_attr(ho, "name", fragment); + if (is_xhtml(ho->ver)) + element_attr(ho, "id", fragment); + element_close(ho, "a"); +} + +static char *html_format(paragraph *p, char *template_string) +{ + char *c, *t; + word *w; + wchar_t *ws, wsbuf[2]; + rdstringc rs = { 0, 0, NULL }; + + t = template_string; + while (*t) { + if (*t == '%' && t[1]) { + int fmt; + + t++; + fmt = *t++; + + if (fmt == '%') { + rdaddc(&rs, fmt); + continue; + } + + w = NULL; + ws = NULL; + + if (p->kwtext && fmt == 'n') + w = p->kwtext; + else if (p->kwtext2 && fmt == 'b') { + /* + * HTML fragment names must start with a letter, so + * simply `1.2.3' is not adequate. In this case I'm + * going to cheat slightly by prepending the first + * character of the first word of kwtext, so that + * we get `C1' for chapter 1, `S2.3' for section + * 2.3 etc. + */ + if (p->kwtext && p->kwtext->text[0]) { + ws = wsbuf; + wsbuf[1] = '\0'; + wsbuf[0] = p->kwtext->text[0]; + } + w = p->kwtext2; + } else if (p->keyword && *p->keyword && fmt == 'k') + ws = p->keyword; + else + /* %N comes here; also failure cases of other fmts */ + w = p->words; + + if (ws) { + c = utoa_dup(ws, CS_ASCII); + rdaddsc(&rs,c); + sfree(c); + } + + while (w) { + if (removeattr(w->type) == word_Normal) { + c = utoa_dup(w->text, CS_ASCII); + rdaddsc(&rs,c); + sfree(c); + } + w = w->next; + } + } else { + rdaddc(&rs, *t++); + } + } + + return rdtrimc(&rs); +} + +static char *html_sanitise_fragment(htmlfilelist *files, htmlfile *file, + char *text) +{ + /* + * The HTML 4 spec's strictest definition of fragment names (<a + * name> and "id" attributes) says that they `must begin with a + * letter and may be followed by any number of letters, digits, + * hyphens, underscores, colons, and periods'. + * + * So here we unceremoniously rip out any characters not + * conforming to this limitation. + */ + char *p = text, *q = text; + + while (*p && !((*p>='A' && *p<='Z') || (*p>='a' && *p<='z'))) + p++; + if ((*q++ = *p++) != '\0') { + while (*p) { + if ((*p>='A' && *p<='Z') || + (*p>='a' && *p<='z') || + (*p>='0' && *p<='9') || + *p=='-' || *p=='_' || *p==':' || *p=='.') + *q++ = *p; + p++; + } + + *q = '\0'; + } + + /* If there's nothing left, make something valid up */ + if (!*text) { + static const char anonfrag[] = "anon"; + text = sresize(text, lenof(anonfrag), char); + strcpy(text, anonfrag); + } + + /* + * Now we check for clashes with other fragment names, and + * adjust this one if necessary by appending a hyphen followed + * by a number. + */ + { + htmlfragment *frag = snew(htmlfragment); + int len = 0; /* >0 indicates we have resized */ + int suffix = 1; + + frag->file = file; + frag->fragment = text; + + while (add234(files->frags, frag) != frag) { + if (!len) { + len = strlen(text); + frag->fragment = text = sresize(text, len+20, char); + } + + sprintf(text + len, "-%d", ++suffix); + } + } + + return text; +} + +static char *html_sanitise_filename(htmlfilelist *files, char *text) +{ + /* + * Unceremoniously rip out any character that might cause + * difficulty in some filesystem or another, or be otherwise + * inconvenient. + * + * That doesn't leave much punctuation. I permit alphanumerics + * and +-.=_ only. + */ + char *p = text, *q = text; + + while (*p) { + if ((*p>='A' && *p<='Z') || + (*p>='a' && *p<='z') || + (*p>='0' && *p<='9') || + *p=='-' || *p=='_' || *p=='+' || *p=='.' || *p=='=') + *q++ = *p; + p++; + } + *q = '\0'; + + /* If there's nothing left, make something valid up */ + if (!*text) { + static const char anonfrag[] = "anon.html"; + text = sresize(text, lenof(anonfrag), char); + strcpy(text, anonfrag); + } + + /* + * Now we check for clashes with other filenames, and adjust + * this one if necessary by appending a hyphen followed by a + * number just before the file extension (if any). + */ + { + int len, extpos; + int suffix = 1; + + p = NULL; + + while (find234(files->files, text, NULL)) { + if (!p) { + len = strlen(text); + p = text; + text = snewn(len+20, char); + + for (extpos = len; extpos > 0 && p[extpos-1] != '.'; extpos--); + if (extpos > 0) + extpos--; + else + extpos = len; + } + + sprintf(text, "%.*s-%d%s", extpos, p, ++suffix, p+extpos); + } + + if (p) + sfree(p); + } + + return text; +} + +static void html_contents_entry(htmloutput *ho, int depth, htmlsect *s, + htmlfile *thisfile, keywordlist *keywords, + htmlconfig *cfg) +{ + if (ho->contents_level >= depth && ho->contents_level > 0) { + element_close(ho, "li"); + html_nl(ho); + } + + while (ho->contents_level > depth) { + element_close(ho, "ul"); + ho->contents_level--; + if (ho->contents_level > 0) { + element_close(ho, "li"); + } + html_nl(ho); + } + + while (ho->contents_level < depth) { + html_nl(ho); + element_open(ho, "ul"); + html_nl(ho); + ho->contents_level++; + } + + if (!s) + return; + + element_open(ho, "li"); + html_href(ho, thisfile, s->file, s->fragments[0]); + html_section_title(ho, s, thisfile, keywords, cfg, FALSE); + element_close(ho, "a"); + /* <li> will be closed by a later invocation */ +} + +static void html_section_title(htmloutput *ho, htmlsect *s, htmlfile *thisfile, + keywordlist *keywords, htmlconfig *cfg, + int real) +{ + if (s->title) { + sectlevel *sl; + word *number; + int depth = heading_depth(s->title); + + if (depth < 0) + sl = NULL; + else if (depth == 0) + sl = &cfg->achapter; + else if (depth <= cfg->nasect) + sl = &cfg->asect[depth-1]; + else + sl = &cfg->asect[cfg->nasect-1]; + + if (!sl) + number = NULL; + else if (sl->just_numbers) + number = s->title->kwtext2; + else + number = s->title->kwtext; + + if (number) { + html_words(ho, number, MARKUP, + thisfile, keywords, cfg); + html_text(ho, sl->number_suffix); + } + + html_words(ho, s->title->words, real ? ALL : MARKUP, + thisfile, keywords, cfg); + } else { + assert(s->type != NORMAL); + /* + * If we're printing the full document title for _real_ and + * there isn't one, we don't want to print `Preamble' at + * the top of what ought to just be some text. If we need + * it in any other context such as TOCs, we need to print + * `Preamble'. + */ + if (s->type == TOP && !real) + html_text(ho, cfg->preamble_text); + else if (s->type == INDEX) + html_text(ho, cfg->index_text); + } +} diff --git a/app/tools/halibut/bk_paper.c b/app/tools/halibut/bk_paper.c new file mode 100644 index 0000000..2e0289c --- /dev/null +++ b/app/tools/halibut/bk_paper.c @@ -0,0 +1,2789 @@ +/* + * Paper printing pre-backend for Halibut. + * + * This module does all the processing common to both PostScript + * and PDF output: selecting fonts, line wrapping and page breaking + * in accordance with font metrics, laying out the contents and + * index pages, generally doing all the page layout. After this, + * bk_ps.c and bk_pdf.c should only need to do linear translations + * into their literal output format. + */ + +/* + * TODO in future work: + * + * - linearised PDF, perhaps? + * + * - I'm uncertain of whether I need to include a ToUnicode CMap + * in each of my font definitions in PDF. Currently things (by + * which I mean cut and paste out of acroread) seem to be + * working fairly happily without it, but I don't know. + * + * - rather than the ugly aux_text mechanism for rendering chapter + * titles, we could actually build the correct word list and + * wrap it as a whole. + * + * - get vertical font metrics and use them to position the PDF + * xref boxes more pleasantly + * + * - configurability + * * page header and footer should be configurable; we should + * be able to shift the page number elsewhere, and add other + * things such as the current chapter/section title and fixed + * text + * * remove the fixed mapping from heading levels to heading + * styles; offer a menu of styles from which the user can + * choose at every heading level + * * first-line indent in paragraphs + * * fixed text: `Contents', `Index', the colon-space and full + * stop in chapter title constructions + * * configurable location of contents? + * * certainly configurably _remove_ the contents, and possibly + * also the index + * * double-sided document switch? + * + means you have two header/footer formats which + * alternate + * + and means that mandatory page breaks before chapter + * titles should include a blank page if necessary to + * start the next section to a right-hand page + * + * - title pages + * + * - ability to use Type 1 fonts without AFM files + * * we need to parse the font to extract its metrics + * + * - character substitution for better typography? + * * use real ellipsis rather than ... + * * a hyphen in a word by itself might prefer to be an en-dash + * * (Americans might even want a convenient way to use an + * em-dash) + * * DON'T DO ANY OF THE ABOVE WITHIN \c OR \cw! + * * substituting `minus' for `hyphen' in the standard encoding + * is probably preferable in Courier, though certainly not in + * the main text font + * * if I do do this lot, I'm rather inclined to at least try + * to think up a configurable way to do it so that Americans + * can do em-dash tricks without my intervention and other + * people can do other odd things too. + */ + +#include <assert.h> +#include <stdio.h> +#include <stdarg.h> +#include <stdlib.h> + +#include "halibut.h" +#include "paper.h" + +typedef struct paper_conf_Tag paper_conf; +typedef struct paper_idx_Tag paper_idx; + +typedef struct { + font_data *fonts[NFONTS]; + int font_size; +} font_cfg; + +struct paper_conf_Tag { + int paper_width; + int paper_height; + int left_margin; + int top_margin; + int right_margin; + int bottom_margin; + int indent_list_bullet; + int indent_list_after; + int indent_list; + int indent_quote; + int base_leading; + int base_para_spacing; + int chapter_top_space; + int sect_num_left_space; + int chapter_underline_depth; + int chapter_underline_thickness; + int rule_thickness; + font_cfg fbase, fcode, ftitle, fchapter, *fsect; + int nfsect; + int contents_indent_step; + int contents_margin; + int leader_separation; + int index_gutter; + int index_cols; + int index_minsep; + int pagenum_fontsize; + int footer_distance; + wchar_t *lquote, *rquote, *bullet; + wchar_t *contents_text, *index_text; + /* These are derived from the above */ + int base_width; + int page_height; + int index_colwidth; +}; + +struct paper_idx_Tag { + /* + * Word list giving the page numbers on which this index entry + * appears. Also the last word in the list, for ease of + * construction. + */ + word *words; + word *lastword; + /* + * The last page added to the list (so we can ensure we don't + * add one twice). + */ + page_data *lastpage; +}; + +enum { + word_PageXref = word_NotWordType + 1 +}; + +/* Flags for render_string() */ +#define RS_NOLIG 1 + +static font_data *make_std_font(font_list *fontlist, char const *name); +static void wrap_paragraph(para_data *pdata, word *words, + int w, int i1, int i2, paper_conf *conf); +static page_data *page_breaks(line_data *first, line_data *last, + int page_height, int ncols, int headspace); +static int render_string(page_data *page, font_data *font, int fontsize, + int x, int y, wchar_t *str, unsigned flags); +static int render_line(line_data *ldata, int left_x, int top_y, + xref_dest *dest, keywordlist *keywords, indexdata *idx, + paper_conf *conf); +static void render_para(para_data *pdata, paper_conf *conf, + keywordlist *keywords, indexdata *idx, + paragraph *index_placeholder, page_data *index_page); +static int string_width(font_data *font, wchar_t const *string, int *errs, + unsigned flags); +static int paper_width_simple(para_data *pdata, word *text, paper_conf *conf); +static para_data *code_paragraph(int indent, word *words, paper_conf *conf); +static para_data *rule_paragraph(int indent, paper_conf *conf); +static void add_rect_to_page(page_data *page, int x, int y, int w, int h); +static para_data *make_para_data(int ptype, int paux, int indent, int rmargin, + word *pkwtext, word *pkwtext2, word *pwords, + paper_conf *conf); +static void standard_line_spacing(para_data *pdata, paper_conf *conf); +static wchar_t *prepare_outline_title(word *first, wchar_t *separator, + word *second); +static word *fake_word(wchar_t *text); +static word *fake_space_word(void); +static word *fake_page_ref(page_data *page); +static word *fake_end_ref(void); +static word *prepare_contents_title(word *first, wchar_t *separator, + word *second); +static void fold_into_page(page_data *dest, page_data *src, int right_shift); + +static int fonts_ok(wchar_t *string, ...) +{ + font_data *font; + va_list ap; + int ret = TRUE; + + va_start(ap, string); + while ( (font = va_arg(ap, font_data *)) != NULL) { + int errs; + (void) string_width(font, string, &errs, 0); + if (errs) { + ret = FALSE; + break; + } + } + va_end(ap); + + return ret; +} + +static void paper_cfg_fonts(font_data **fonts, font_list *fontlist, + wchar_t *wp, filepos *fpos) { + font_data *f; + char *fn; + int i; + + for (i = 0; i < NFONTS && *wp; i++, wp = uadv(wp)) { + fn = utoa_dup(wp, CS_ASCII); + f = make_std_font(fontlist, fn); + if (f) + fonts[i] = f; + else + /* FIXME: proper error */ + error(err_nofont, fpos, wp); + } +} + +static paper_conf paper_configure(paragraph *source, font_list *fontlist) { + paragraph *p; + paper_conf ret; + + /* + * Defaults. + */ + ret.paper_width = 595 * UNITS_PER_PT; + ret.paper_height = 842 * UNITS_PER_PT; + ret.left_margin = 72 * UNITS_PER_PT; + ret.top_margin = 72 * UNITS_PER_PT; + ret.right_margin = 72 * UNITS_PER_PT; + ret.bottom_margin = 108 * UNITS_PER_PT; + ret.indent_list_bullet = 6 * UNITS_PER_PT; + ret.indent_list_after = 18 * UNITS_PER_PT; + ret.indent_quote = 18 * UNITS_PER_PT; + ret.base_leading = UNITS_PER_PT; + ret.base_para_spacing = 10 * UNITS_PER_PT; + ret.chapter_top_space = 72 * UNITS_PER_PT; + ret.sect_num_left_space = 12 * UNITS_PER_PT; + ret.chapter_underline_depth = 14 * UNITS_PER_PT; + ret.chapter_underline_thickness = 3 * UNITS_PER_PT; + ret.rule_thickness = 1 * UNITS_PER_PT; + ret.fbase.font_size = 12; + ret.fbase.fonts[FONT_NORMAL] = make_std_font(fontlist, "Times-Roman"); + ret.fbase.fonts[FONT_EMPH] = make_std_font(fontlist, "Times-Italic"); + ret.fbase.fonts[FONT_CODE] = make_std_font(fontlist, "Courier"); + ret.fcode.font_size = 12; + ret.fcode.fonts[FONT_NORMAL] = make_std_font(fontlist, "Courier-Bold"); + ret.fcode.fonts[FONT_EMPH] = make_std_font(fontlist, "Courier-Oblique"); + ret.fcode.fonts[FONT_CODE] = make_std_font(fontlist, "Courier"); + ret.ftitle.font_size = 24; + ret.ftitle.fonts[FONT_NORMAL] = make_std_font(fontlist, "Helvetica-Bold"); + ret.ftitle.fonts[FONT_EMPH] = + make_std_font(fontlist, "Helvetica-BoldOblique"); + ret.ftitle.fonts[FONT_CODE] = make_std_font(fontlist, "Courier-Bold"); + ret.fchapter.font_size = 20; + ret.fchapter.fonts[FONT_NORMAL]= make_std_font(fontlist, "Helvetica-Bold"); + ret.fchapter.fonts[FONT_EMPH] = + make_std_font(fontlist, "Helvetica-BoldOblique"); + ret.fchapter.fonts[FONT_CODE] = make_std_font(fontlist, "Courier-Bold"); + ret.nfsect = 3; + ret.fsect = snewn(ret.nfsect, font_cfg); + ret.fsect[0].font_size = 16; + ret.fsect[0].fonts[FONT_NORMAL]= make_std_font(fontlist, "Helvetica-Bold"); + ret.fsect[0].fonts[FONT_EMPH] = + make_std_font(fontlist, "Helvetica-BoldOblique"); + ret.fsect[0].fonts[FONT_CODE] = make_std_font(fontlist, "Courier-Bold"); + ret.fsect[1].font_size = 14; + ret.fsect[1].fonts[FONT_NORMAL]= make_std_font(fontlist, "Helvetica-Bold"); + ret.fsect[1].fonts[FONT_EMPH] = + make_std_font(fontlist, "Helvetica-BoldOblique"); + ret.fsect[1].fonts[FONT_CODE] = make_std_font(fontlist, "Courier-Bold"); + ret.fsect[2].font_size = 13; + ret.fsect[2].fonts[FONT_NORMAL]= make_std_font(fontlist, "Helvetica-Bold"); + ret.fsect[2].fonts[FONT_EMPH] = + make_std_font(fontlist, "Helvetica-BoldOblique"); + ret.fsect[2].fonts[FONT_CODE] = make_std_font(fontlist, "Courier-Bold"); + ret.contents_indent_step = 24 * UNITS_PER_PT; + ret.contents_margin = 84 * UNITS_PER_PT; + ret.leader_separation = 12 * UNITS_PER_PT; + ret.index_gutter = 36 * UNITS_PER_PT; + ret.index_cols = 2; + ret.index_minsep = 18 * UNITS_PER_PT; + ret.pagenum_fontsize = 12; + ret.footer_distance = 32 * UNITS_PER_PT; + ret.lquote = L"\x2018\0\x2019\0'\0'\0\0"; + ret.rquote = uadv(ret.lquote); + ret.bullet = L"\x2022\0-\0\0"; + ret.contents_text = L"Contents"; + ret.index_text = L"Index"; + + /* + * Two-pass configuration so that we can pick up global config + * (e.g. `quotes') before having it overridden by specific + * config (`paper-quotes'), irrespective of the order in which + * they occur. + */ + for (p = source; p; p = p->next) { + if (p->type == para_Config) { + if (!ustricmp(p->keyword, L"quotes")) { + if (*uadv(p->keyword) && *uadv(uadv(p->keyword))) { + ret.lquote = uadv(p->keyword); + ret.rquote = uadv(ret.lquote); + } + } + } + } + + for (p = source; p; p = p->next) { + p->private_data = NULL; + if (p->type == para_Config) { + if (!ustricmp(p->keyword, L"paper-quotes")) { + if (*uadv(p->keyword) && *uadv(uadv(p->keyword))) { + ret.lquote = uadv(p->keyword); + ret.rquote = uadv(ret.lquote); + } + } else if (!ustricmp(p->keyword, L"contents")) { + ret.contents_text = uadv(p->keyword); + } else if (!ustricmp(p->keyword, L"index")) { + ret.index_text = uadv(p->keyword); + } else if (!ustricmp(p->keyword, L"paper-bullet")) { + ret.bullet = uadv(p->keyword); + } else if (!ustricmp(p->keyword, L"paper-page-width")) { + ret.paper_width = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-page-height")) { + ret.paper_height = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-left-margin")) { + ret.left_margin = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-top-margin")) { + ret.top_margin = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-right-margin")) { + ret.right_margin = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-bottom-margin")) { + ret.bottom_margin = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-list-indent")) { + ret.indent_list_bullet = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-listitem-indent")) { + ret.indent_list = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-quote-indent")) { + ret.indent_quote = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-base-leading")) { + ret.base_leading = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-base-para-spacing")) { + ret.base_para_spacing = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-chapter-top-space")) { + ret.chapter_top_space = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-sect-num-left-space")) { + ret.sect_num_left_space = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-chapter-underline-depth")) { + ret.chapter_underline_depth = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-chapter-underline-thickness")) { + ret.chapter_underline_thickness = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-rule-thickness")) { + ret.rule_thickness = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-contents-indent-step")) { + ret.contents_indent_step = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-contents-margin")) { + ret.contents_margin = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-leader-separation")) { + ret.leader_separation = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-index-gutter")) { + ret.index_gutter = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-index-minsep")) { + ret.index_minsep = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-footer-distance")) { + ret.footer_distance = + (int) 0.5 + FUNITS_PER_PT * utof(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-base-font-size")) { + ret.fbase.font_size = utoi(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-index-columns")) { + ret.index_cols = utoi(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-pagenum-font-size")) { + ret.pagenum_fontsize = utoi(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-base-fonts")) { + paper_cfg_fonts(ret.fbase.fonts, fontlist, uadv(p->keyword), + &p->fpos); + } else if (!ustricmp(p->keyword, L"paper-code-font-size")) { + ret.fcode.font_size = utoi(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-code-fonts")) { + paper_cfg_fonts(ret.fcode.fonts, fontlist, uadv(p->keyword), + &p->fpos); + } else if (!ustricmp(p->keyword, L"paper-title-font-size")) { + ret.ftitle.font_size = utoi(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-title-fonts")) { + paper_cfg_fonts(ret.ftitle.fonts, fontlist, uadv(p->keyword), + &p->fpos); + } else if (!ustricmp(p->keyword, L"paper-chapter-font-size")) { + ret.fchapter.font_size = utoi(uadv(p->keyword)); + } else if (!ustricmp(p->keyword, L"paper-chapter-fonts")) { + paper_cfg_fonts(ret.fchapter.fonts, fontlist, uadv(p->keyword), + &p->fpos); + } else if (!ustricmp(p->keyword, L"paper-section-font-size")) { + wchar_t *q = uadv(p->keyword); + int n = 0; + if (uisdigit(*q)) { + n = utoi(q); + q = uadv(q); + } + if (n >= ret.nfsect) { + int i; + ret.fsect = sresize(ret.fsect, n+1, font_cfg); + for (i = ret.nfsect; i <= n; i++) + ret.fsect[i] = ret.fsect[ret.nfsect-1]; + ret.nfsect = n+1; + } + ret.fsect[n].font_size = utoi(q); + } else if (!ustricmp(p->keyword, L"paper-section-fonts")) { + wchar_t *q = uadv(p->keyword); + int n = 0; + if (uisdigit(*q)) { + n = utoi(q); + q = uadv(q); + } + if (n >= ret.nfsect) { + int i; + ret.fsect = sresize(ret.fsect, n+1, font_cfg); + for (i = ret.nfsect; i <= n; i++) + ret.fsect[i] = ret.fsect[ret.nfsect-1]; + ret.nfsect = n+1; + } + paper_cfg_fonts(ret.fsect[n].fonts, fontlist, q, &p->fpos); + } + } + } + + /* + * Set up the derived fields in the conf structure. + */ + + ret.base_width = + ret.paper_width - ret.left_margin - ret.right_margin; + ret.page_height = + ret.paper_height - ret.top_margin - ret.bottom_margin; + ret.indent_list = ret.indent_list_bullet + ret.indent_list_after; + ret.index_colwidth = + (ret.base_width - (ret.index_cols-1) * ret.index_gutter) + / ret.index_cols; + + /* + * Now process fallbacks on quote characters and bullets. We + * use string_width() to determine whether all of the relevant + * fonts contain the same character, and fall back whenever we + * find a character which not all of them support. + */ + + /* Quote characters need not be supported in the fixed code fonts, + * but must be in the title and body fonts. */ + while (*uadv(ret.rquote) && *uadv(uadv(ret.rquote))) { + int n; + if (fonts_ok(ret.lquote, + ret.fbase.fonts[FONT_NORMAL], + ret.fbase.fonts[FONT_EMPH], + ret.ftitle.fonts[FONT_NORMAL], + ret.ftitle.fonts[FONT_EMPH], + ret.fchapter.fonts[FONT_NORMAL], + ret.fchapter.fonts[FONT_EMPH], NULL) && + fonts_ok(ret.rquote, + ret.fbase.fonts[FONT_NORMAL], + ret.fbase.fonts[FONT_EMPH], + ret.ftitle.fonts[FONT_NORMAL], + ret.ftitle.fonts[FONT_EMPH], + ret.fchapter.fonts[FONT_NORMAL], + ret.fchapter.fonts[FONT_EMPH], NULL)) { + for (n = 0; n < ret.nfsect; n++) + if (!fonts_ok(ret.lquote, + ret.fsect[n].fonts[FONT_NORMAL], + ret.fsect[n].fonts[FONT_EMPH], NULL) || + !fonts_ok(ret.rquote, + ret.fsect[n].fonts[FONT_NORMAL], + ret.fsect[n].fonts[FONT_EMPH], NULL)) + break; + if (n == ret.nfsect) + break; + } + ret.lquote = uadv(ret.rquote); + ret.rquote = uadv(ret.lquote); + } + + /* The bullet character only needs to be supported in the normal body + * font (not even in italics). */ + while (*ret.bullet && *uadv(ret.bullet) && + !fonts_ok(ret.bullet, ret.fbase.fonts[FONT_NORMAL], NULL)) + ret.bullet = uadv(ret.bullet); + + return ret; +} + +void *paper_pre_backend(paragraph *sourceform, keywordlist *keywords, + indexdata *idx) { + paragraph *p; + document *doc; + int indent, used_contents; + para_data *pdata, *firstpara = NULL, *lastpara = NULL; + para_data *firstcont, *lastcont; + line_data *firstline, *lastline, *firstcontline, *lastcontline; + page_data *pages; + font_list *fontlist; + paper_conf *conf, ourconf; + int has_index; + int pagenum; + paragraph index_placeholder_para; + page_data *first_index_page; + + init_std_fonts(); + fontlist = snew(font_list); + fontlist->head = fontlist->tail = NULL; + + ourconf = paper_configure(sourceform, fontlist); + conf = &ourconf; + + /* + * Set up a data structure to collect page numbers for each + * index entry. + */ + { + int i; + indexentry *entry; + + has_index = FALSE; + + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) { + paper_idx *pi = snew(paper_idx); + + has_index = TRUE; + + pi->words = pi->lastword = NULL; + pi->lastpage = NULL; + + entry->backend_data = pi; + } + } + + /* + * Format the contents entry for each heading. + */ + { + word *contents_title; + contents_title = fake_word(conf->contents_text); + + firstcont = make_para_data(para_UnnumberedChapter, 0, 0, 0, + NULL, NULL, contents_title, conf); + lastcont = firstcont; + lastcont->next = NULL; + firstcontline = firstcont->first; + lastcontline = lastcont->last; + for (p = sourceform; p; p = p->next) { + word *words; + int indent; + + switch (p->type) { + case para_Chapter: + case para_Appendix: + case para_UnnumberedChapter: + case para_Heading: + case para_Subsect: + switch (p->type) { + case para_Chapter: + case para_Appendix: + words = prepare_contents_title(p->kwtext, L": ", p->words); + indent = 0; + break; + case para_UnnumberedChapter: + words = prepare_contents_title(NULL, NULL, p->words); + indent = 0; + break; + case para_Heading: + case para_Subsect: + words = prepare_contents_title(p->kwtext2, L" ", p->words); + indent = (p->aux + 1) * conf->contents_indent_step; + break; + } + pdata = make_para_data(para_Normal, p->aux, indent, + conf->contents_margin, + NULL, NULL, words, conf); + pdata->next = NULL; + pdata->contents_entry = p; + lastcont->next = pdata; + lastcont = pdata; + + /* + * Link all contents line structures together into + * a big list. + */ + if (pdata->first) { + if (lastcontline) { + lastcontline->next = pdata->first; + pdata->first->prev = lastcontline; + } else { + firstcontline = pdata->first; + pdata->first->prev = NULL; + } + lastcontline = pdata->last; + lastcontline->next = NULL; + } + + break; + } + } + + /* + * And one extra one, for the index. + */ + if (has_index) { + pdata = make_para_data(para_Normal, 0, 0, + conf->contents_margin, + NULL, NULL, + fake_word(conf->index_text), conf); + pdata->next = NULL; + pdata->contents_entry = &index_placeholder_para; + lastcont->next = pdata; + lastcont = pdata; + + if (pdata->first) { + if (lastcontline) { + lastcontline->next = pdata->first; + pdata->first->prev = lastcontline; + } else { + firstcontline = pdata->first; + pdata->first->prev = NULL; + } + lastcontline = pdata->last; + lastcontline->next = NULL; + } + } + } + + /* + * Do the main paragraph formatting. + */ + indent = 0; + used_contents = FALSE; + firstline = lastline = NULL; + for (p = sourceform; p; p = p->next) { + p->private_data = NULL; + + switch (p->type) { + /* + * These paragraph types are either invisible or don't + * define text in the normal sense. Either way, they + * don't require wrapping. + */ + case para_IM: + case para_BR: + case para_Biblio: + case para_NotParaType: + case para_Config: + case para_VersionID: + case para_NoCite: + break; + + /* + * These paragraph types don't require wrapping, but + * they do affect the line width to which we wrap the + * rest of the paragraphs, so we need to pay attention. + */ + case para_LcontPush: + indent += conf->indent_list; break; + case para_LcontPop: + indent -= conf->indent_list; assert(indent >= 0); break; + case para_QuotePush: + indent += conf->indent_quote; break; + case para_QuotePop: + indent -= conf->indent_quote; assert(indent >= 0); break; + + /* + * This paragraph type is special. Process it + * specially. + */ + case para_Code: + pdata = code_paragraph(indent, p->words, conf); + p->private_data = pdata; + if (pdata->first != pdata->last) { + pdata->first->penalty_after += 100000; + pdata->last->penalty_before += 100000; + } + break; + + /* + * This paragraph is also special. + */ + case para_Rule: + pdata = rule_paragraph(indent, conf); + p->private_data = pdata; + break; + + /* + * All of these paragraph types require wrapping in the + * ordinary way. So we must supply a set of fonts, a + * line width and auxiliary information (e.g. bullet + * text) for each one. + */ + case para_Chapter: + case para_Appendix: + case para_UnnumberedChapter: + case para_Heading: + case para_Subsect: + case para_Normal: + case para_BiblioCited: + case para_Bullet: + case para_NumberedList: + case para_DescribedThing: + case para_Description: + case para_Copyright: + case para_Title: + pdata = make_para_data(p->type, p->aux, indent, 0, + p->kwtext, p->kwtext2, p->words, conf); + + p->private_data = pdata; + + break; + } + + if (p->private_data) { + pdata = (para_data *)p->private_data; + + /* + * If this is the first non-title heading, we link the + * contents section in before it. + */ + if (!used_contents && pdata->outline_level > 0) { + used_contents = TRUE; + if (lastpara) + lastpara->next = firstcont; + else + firstpara = firstcont; + lastpara = lastcont; + assert(lastpara->next == NULL); + + if (lastline) { + lastline->next = firstcontline; + firstcontline->prev = lastline; + } else { + firstline = firstcontline; + firstcontline->prev = NULL; + } + assert(lastcontline != NULL); + lastline = lastcontline; + lastline->next = NULL; + } + + /* + * Link all line structures together into a big list. + */ + if (pdata->first) { + if (lastline) { + lastline->next = pdata->first; + pdata->first->prev = lastline; + } else { + firstline = pdata->first; + pdata->first->prev = NULL; + } + lastline = pdata->last; + lastline->next = NULL; + } + + /* + * Link all paragraph structures together similarly. + */ + pdata->next = NULL; + if (lastpara) + lastpara->next = pdata; + else + firstpara = pdata; + lastpara = pdata; + } + } + + /* + * Now we have an enormous linked list of every line of text in + * the document. Break it up into pages. + */ + pages = page_breaks(firstline, lastline, conf->page_height, 0, 0); + + /* + * Number the pages. + */ + { + char buf[40]; + page_data *page; + + pagenum = 0; + + for (page = pages; page; page = page->next) { + sprintf(buf, "%d", ++pagenum); + page->number = ufroma_dup(buf, CS_ASCII); + } + + if (has_index) { + first_index_page = snew(page_data); + first_index_page->next = first_index_page->prev = NULL; + first_index_page->first_line = NULL; + first_index_page->last_line = NULL; + first_index_page->first_text = first_index_page->last_text = NULL; + first_index_page->first_xref = first_index_page->last_xref = NULL; + first_index_page->first_rect = first_index_page->last_rect = NULL; + + /* And don't forget the as-yet-uncreated index. */ + sprintf(buf, "%d", ++pagenum); + first_index_page->number = ufroma_dup(buf, CS_ASCII); + } + } + + /* + * Now we're ready to actually lay out the pages. We do this by + * looping over _paragraphs_, since we may need to track cross- + * references between lines and even across pages. + */ + for (pdata = firstpara; pdata; pdata = pdata->next) + render_para(pdata, conf, keywords, idx, + &index_placeholder_para, first_index_page); + + /* + * Now we've laid out the main body pages, we should have + * acquired a full set of page numbers for the index. + */ + if (has_index) { + int i; + indexentry *entry; + word *index_title; + para_data *firstidx, *lastidx; + line_data *firstidxline, *lastidxline, *ldata; + page_data *ipages, *ipages2, *page; + + /* + * Create a set of paragraphs for the index. + */ + index_title = fake_word(conf->index_text); + + firstidx = make_para_data(para_UnnumberedChapter, 0, 0, 0, + NULL, NULL, index_title, conf); + lastidx = firstidx; + lastidx->next = NULL; + firstidxline = firstidx->first; + lastidxline = lastidx->last; + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) { + paper_idx *pi = (paper_idx *)entry->backend_data; + para_data *text, *pages; + + if (!pi->words) + continue; + + text = make_para_data(para_Normal, 0, 0, + conf->base_width - conf->index_colwidth, + NULL, NULL, entry->text, conf); + + pages = make_para_data(para_Normal, 0, 0, + conf->base_width - conf->index_colwidth, + NULL, NULL, pi->words, conf); + + text->justification = LEFT; + pages->justification = RIGHT; + text->last->space_after = pages->first->space_before = + conf->base_leading / 2; + + pages->last->space_after = text->first->space_before = + conf->base_leading; + + assert(text->first); + assert(pages->first); + assert(lastidxline); + assert(lastidx); + + /* + * If feasible, fold the two halves of the index entry + * together. + */ + if (text->last->real_shortfall + pages->first->real_shortfall > + conf->index_colwidth + conf->index_minsep) { + text->last->space_after = -1; + pages->first->space_before = -pages->first->line_height+1; + } + + lastidx->next = text; + text->next = pages; + pages->next = NULL; + lastidx = pages; + + /* + * Link all index line structures together into + * a big list. + */ + text->last->next = pages->first; + pages->first->prev = text->last; + + lastidxline->next = text->first; + text->first->prev = lastidxline; + + lastidxline = pages->last; + + /* + * Breaking an index entry anywhere is so bad that I + * think I'm going to forbid it totally. + */ + for (ldata = text->first; ldata && ldata->next; + ldata = ldata->next) { + ldata->next->space_before += ldata->space_after + 1; + ldata->space_after = -1; + } + } + + /* + * Now break the index into pages. + */ + ipages = page_breaks(firstidxline, firstidxline, conf->page_height, + 0, 0); + ipages2 = page_breaks(firstidxline->next, lastidxline, + conf->page_height, + conf->index_cols, + firstidxline->space_before + + firstidxline->line_height + + firstidxline->space_after); + + /* + * This will have put each _column_ of the index on a + * separate page, which isn't what we want. Fold the pages + * back together. + */ + page = ipages2; + while (page) { + int i; + + for (i = 1; i < conf->index_cols; i++) + if (page->next) { + page_data *tpage; + + fold_into_page(page, page->next, + i * (conf->index_colwidth + + conf->index_gutter)); + tpage = page->next; + page->next = page->next->next; + if (page->next) + page->next->prev = page; + sfree(tpage); + } + + page = page->next; + } + /* Also fold the heading on to the same page as the index items. */ + fold_into_page(ipages, ipages2, 0); + ipages->next = ipages2->next; + if (ipages->next) + ipages->next->prev = ipages; + sfree(ipages2); + fold_into_page(first_index_page, ipages, 0); + first_index_page->next = ipages->next; + if (first_index_page->next) + first_index_page->next->prev = first_index_page; + sfree(ipages); + ipages = first_index_page; + + /* + * Number the index pages, except the already-numbered + * first one. + */ + for (page = ipages->next; page; page = page->next) { + char buf[40]; + sprintf(buf, "%d", ++pagenum); + page->number = ufroma_dup(buf, CS_ASCII); + } + + /* + * Render the index pages. + */ + for (pdata = firstidx; pdata; pdata = pdata->next) + render_para(pdata, conf, keywords, idx, + &index_placeholder_para, first_index_page); + + /* + * Link the index page list on to the end of the main page + * list. + */ + if (!pages) + pages = ipages; + else { + for (page = pages; page->next; page = page->next); + page->next = ipages; + } + + /* + * Same with the paragraph list, which will cause the index + * to be mentioned in the document outline. + */ + if (!firstpara) + firstpara = firstidx; + else + lastpara->next = firstidx; + lastpara = lastidx; + } + + /* + * Draw the headers and footers. + * + * FIXME: this should be fully configurable, but for the moment + * I'm just going to put in page numbers in the centre of a + * footer and leave it at that. + */ + { + page_data *page; + + for (page = pages; page; page = page->next) { + int width; + + width = conf->pagenum_fontsize * + string_width(conf->fbase.fonts[FONT_NORMAL], page->number, + NULL, 0); + + render_string(page, conf->fbase.fonts[FONT_NORMAL], + conf->pagenum_fontsize, + conf->left_margin + (conf->base_width - width)/2, + conf->bottom_margin - conf->footer_distance, + page->number, 0); + } + } + + /* + * Start putting together the overall document structure we're + * going to return. + */ + doc = snew(document); + doc->fonts = fontlist; + doc->pages = pages; + doc->paper_width = conf->paper_width; + doc->paper_height = conf->paper_height; + + /* + * Collect the section heading paragraphs into a document + * outline. This is slightly fiddly because the Title paragraph + * isn't required to be at the start, although all the others + * must be in order. + */ + { + int osize = 20; + + doc->outline_elements = snewn(osize, outline_element); + doc->n_outline_elements = 0; + + /* First find the title. */ + for (pdata = firstpara; pdata; pdata = pdata->next) { + if (pdata->outline_level == 0) { + doc->outline_elements[0].level = 0; + doc->outline_elements[0].pdata = pdata; + doc->n_outline_elements++; + break; + } + } + + /* Then collect the rest. */ + for (pdata = firstpara; pdata; pdata = pdata->next) { + if (pdata->outline_level > 0) { + if (doc->n_outline_elements >= osize) { + osize += 20; + doc->outline_elements = + sresize(doc->outline_elements, osize, outline_element); + } + + doc->outline_elements[doc->n_outline_elements].level = + pdata->outline_level; + doc->outline_elements[doc->n_outline_elements].pdata = pdata; + doc->n_outline_elements++; + } + } + } + + return doc; +} + +static void setfont(para_data *p, font_cfg *f) { + int i; + + for (i = 0; i < NFONTS; i++) { + p->fonts[i] = f->fonts[i]; + p->sizes[i] = f->font_size; + } +} + +static para_data *make_para_data(int ptype, int paux, int indent, int rmargin, + word *pkwtext, word *pkwtext2, word *pwords, + paper_conf *conf) +{ + para_data *pdata; + line_data *ldata; + int extra_indent, firstline_indent, aux_indent; + word *aux, *aux2; + + pdata = snew(para_data); + pdata->outline_level = -1; + pdata->outline_title = NULL; + pdata->rect_type = RECT_NONE; + pdata->contents_entry = NULL; + pdata->justification = JUST; + pdata->extraflags = 0; + + /* + * Choose fonts for this paragraph. + */ + switch (ptype) { + case para_Title: + setfont(pdata, &conf->ftitle); + pdata->outline_level = 0; + break; + + case para_Chapter: + case para_Appendix: + case para_UnnumberedChapter: + setfont(pdata, &conf->fchapter); + pdata->outline_level = 1; + break; + + case para_Heading: + case para_Subsect: + setfont(pdata, + &conf->fsect[paux >= conf->nfsect ? conf->nfsect - 1 : paux]); + pdata->outline_level = 2 + paux; + break; + + case para_Normal: + case para_BiblioCited: + case para_Bullet: + case para_NumberedList: + case para_DescribedThing: + case para_Description: + case para_Copyright: + setfont(pdata, &conf->fbase); + break; + } + + /* + * Also select an indentation level depending on the + * paragraph type (list paragraphs other than + * para_DescribedThing need extra indent). + * + * (FIXME: Perhaps at some point we might even arrange + * for the user to be able to request indented first + * lines in paragraphs.) + */ + if (ptype == para_Bullet || + ptype == para_NumberedList || + ptype == para_Description) { + extra_indent = firstline_indent = conf->indent_list; + } else { + extra_indent = firstline_indent = 0; + } + + /* + * Find the auxiliary text for this paragraph. + */ + aux = aux2 = NULL; + aux_indent = 0; + + switch (ptype) { + case para_Chapter: + case para_Appendix: + case para_Heading: + case para_Subsect: + /* + * For some heading styles (FIXME: be able to + * configure which), the auxiliary text contains + * the chapter number and is arranged to be + * right-aligned a few points left of the primary + * margin. For other styles, the auxiliary text is + * the full chapter _name_ and takes up space + * within the (wrapped) chapter title, meaning that + * we must move the first line indent over to make + * space for it. + */ + if (ptype == para_Heading || ptype == para_Subsect) { + int len; + + aux = pkwtext2; + len = paper_width_simple(pdata, pkwtext2, conf); + aux_indent = -len - conf->sect_num_left_space; + + pdata->outline_title = + prepare_outline_title(pkwtext2, L" ", pwords); + } else { + aux = pkwtext; + aux2 = fake_word(L": "); + aux_indent = 0; + + firstline_indent += paper_width_simple(pdata, aux, conf); + firstline_indent += paper_width_simple(pdata, aux2, conf); + + pdata->outline_title = + prepare_outline_title(pkwtext, L": ", pwords); + } + break; + + case para_Bullet: + /* + * Auxiliary text consisting of a bullet. + */ + aux = fake_word(conf->bullet); + aux_indent = indent + conf->indent_list_bullet; + break; + + case para_NumberedList: + /* + * Auxiliary text consisting of the number followed + * by a (FIXME: configurable) full stop. + */ + aux = pkwtext; + aux2 = fake_word(L"."); + aux_indent = indent + conf->indent_list_bullet; + break; + + case para_BiblioCited: + /* + * Auxiliary text consisting of the bibliography + * reference text, and a trailing space. + */ + aux = pkwtext; + aux2 = fake_word(L" "); + aux_indent = indent; + firstline_indent += paper_width_simple(pdata, aux, conf); + firstline_indent += paper_width_simple(pdata, aux2, conf); + break; + } + + if (pdata->outline_level >= 0 && !pdata->outline_title) { + pdata->outline_title = + prepare_outline_title(NULL, NULL, pwords); + } + + wrap_paragraph(pdata, pwords, conf->base_width - rmargin, + indent + firstline_indent, + indent + extra_indent, conf); + + pdata->first->aux_text = aux; + pdata->first->aux_text_2 = aux2; + pdata->first->aux_left_indent = aux_indent; + + /* + * Line breaking penalties. + */ + switch (ptype) { + case para_Chapter: + case para_Appendix: + case para_Heading: + case para_Subsect: + case para_UnnumberedChapter: + /* + * Fixed and large penalty for breaking straight + * after a heading; corresponding bonus for + * breaking straight before. + */ + pdata->first->penalty_before = -500000; + pdata->last->penalty_after = 500000; + for (ldata = pdata->first; ldata; ldata = ldata->next) + ldata->penalty_after = 500000; + break; + + case para_DescribedThing: + /* + * This is treated a bit like a small heading: + * there's a penalty for breaking after it (i.e. + * between it and its description), and a bonus for + * breaking before it (actually _between_ list + * items). + */ + pdata->first->penalty_before = -200000; + pdata->last->penalty_after = 200000; + break; + + default: + /* + * Most paragraph types: widow/orphan control by + * discouraging breaking one line from the end of + * any paragraph. + */ + if (pdata->first != pdata->last) { + pdata->first->penalty_after = 100000; + pdata->last->penalty_before = 100000; + } + break; + } + + standard_line_spacing(pdata, conf); + + /* + * Some kinds of section heading require a page break before + * them and an underline after. + */ + if (ptype == para_Title || + ptype == para_Chapter || + ptype == para_Appendix || + ptype == para_UnnumberedChapter) { + pdata->first->page_break = TRUE; + pdata->first->space_before = conf->chapter_top_space; + pdata->last->space_after += + (conf->chapter_underline_depth + + conf->chapter_underline_thickness); + pdata->rect_type = RECT_CHAPTER_UNDERLINE; + } + + return pdata; +} + +static void standard_line_spacing(para_data *pdata, paper_conf *conf) +{ + line_data *ldata; + + /* + * Set the line spacing for each line in this paragraph. + */ + for (ldata = pdata->first; ldata; ldata = ldata->next) { + if (ldata == pdata->first) + ldata->space_before = conf->base_para_spacing / 2; + else + ldata->space_before = conf->base_leading / 2; + if (ldata == pdata->last) + ldata->space_after = conf->base_para_spacing / 2; + else + ldata->space_after = conf->base_leading / 2; + ldata->page_break = FALSE; + } +} + +static font_encoding *new_font_encoding(font_data *font) +{ + font_encoding *fe; + int i; + + fe = snew(font_encoding); + fe->next = NULL; + + if (font->list->tail) + font->list->tail->next = fe; + else + font->list->head = fe; + font->list->tail = fe; + + fe->font = font; + fe->free_pos = 0x21; + + for (i = 0; i < 256; i++) { + fe->vector[i] = NOGLYPH; + fe->to_unicode[i] = 0xFFFF; + } + + return fe; +} + +static subfont_map_entry *encode_glyph_at(glyph g, wchar_t u, + font_encoding *fe, int pos) +{ + subfont_map_entry *sme = snew(subfont_map_entry); + + sme->subfont = fe; + sme->position = pos; + fe->vector[pos] = g; + fe->to_unicode[pos] = u; + add234(fe->font->subfont_map, sme); + return sme; +} + +static int new_sfmap_cmp(void *a, void *b) +{ + glyph ga = *(glyph *)a; + subfont_map_entry *sb = b; + glyph gb = sb->subfont->vector[sb->position]; + + if (ga < gb) return -1; + if (ga > gb) return 1; + return 0; +} + +static subfont_map_entry *encode_glyph(glyph g, wchar_t u, font_data *font) +{ + subfont_map_entry *sme; + int c; + + sme = find234(font->subfont_map, &g, new_sfmap_cmp); + if (sme) return sme; + + /* + * This character is not yet in a subfont. Assign one. + */ + if (font->latest_subfont->free_pos >= 0x100) + font->latest_subfont = new_font_encoding(font); + + c = font->latest_subfont->free_pos++; + if (font->latest_subfont->free_pos == 0x7F) + font->latest_subfont->free_pos = 0xA1; + + return encode_glyph_at(g, u, font->latest_subfont, c); +} + +static int sfmap_cmp(void *a, void *b) +{ + subfont_map_entry *sa = a, *sb = b; + glyph ga = sa->subfont->vector[sa->position]; + glyph gb = sb->subfont->vector[sb->position]; + + if (ga < gb) return -1; + if (ga > gb) return 1; + return 0; +} + +int width_cmp(void *a, void *b) +{ + glyph_width const *wa = a, *wb = b; + + if (wa->glyph < wb->glyph) + return -1; + if (wa->glyph > wb->glyph) + return 1; + return 0; +} + +int kern_cmp(void *a, void *b) +{ + kern_pair const *ka = a, *kb = b; + + if (ka->left < kb->left) + return -1; + if (ka->left > kb->left) + return 1; + if (ka->right < kb->right) + return -1; + if (ka->right > kb->right) + return 1; + return 0; +} + +int lig_cmp(void *a, void *b) +{ + ligature const *la = a, *lb = b; + + if (la->left < lb->left) + return -1; + if (la->left > lb->left) + return 1; + if (la->right < lb->right) + return -1; + if (la->right > lb->right) + return 1; + return 0; +} + +static int utoglyph(font_info const *fi, wchar_t u) { + return (u < 0 || u > 0xFFFF ? NOGLYPH : fi->bmp[u]); +} + +static font_data *make_std_font(font_list *fontlist, char const *name) +{ + font_info const *fi; + font_data *f; + font_encoding *fe; + int i; + + for (fe = fontlist->head; fe; fe = fe->next) + if (strcmp(fe->font->info->name, name) == 0) + return fe->font; + + for (fi = all_fonts; fi; fi = fi->next) + if (strcmp(fi->name, name) == 0) break; + if (!fi) return NULL; + + f = snew(font_data); + + f->list = fontlist; + f->info = fi; + f->subfont_map = newtree234(sfmap_cmp); + + /* + * Our first subfont will contain all of US-ASCII. This isn't + * really necessary - we could just create custom subfonts + * precisely as the whim of render_string dictated - but + * instinct suggests that it might be nice to have the text in + * the output files look _marginally_ recognisable. + */ + fe = new_font_encoding(f); + fe->free_pos = 0xA1; /* only the top half is free */ + f->latest_subfont = fe; + + for (i = 0x20; i <= 0x7E; i++) { + glyph g = utoglyph(fi, i); + if (g != NOGLYPH) + encode_glyph_at(g, i, fe, i); + } + + return f; +} + +/* NB: arguments are glyph numbers from font->bmp. */ +int find_width(font_data *font, glyph index) +{ + glyph_width wantw; + glyph_width const *w; + + wantw.glyph = index; + w = find234(font->info->widths, &wantw, NULL); + if (!w) return 0; + return w->width; +} + +static int find_kern(font_data *font, int lindex, int rindex) +{ + kern_pair wantkp; + kern_pair const *kp; + + if (lindex == NOGLYPH || rindex == NOGLYPH) + return 0; + wantkp.left = lindex; + wantkp.right = rindex; + kp = find234(font->info->kerns, &wantkp, NULL); + if (kp == NULL) + return 0; + return kp->kern; +} + +static int find_lig(font_data *font, int lindex, int rindex) +{ + ligature wantlig; + ligature const *lig; + + if (lindex == NOGLYPH || rindex == NOGLYPH) + return NOGLYPH; + wantlig.left = lindex; + wantlig.right = rindex; + lig = find234(font->info->ligs, &wantlig, NULL); + if (lig == NULL) + return NOGLYPH; + return lig->lig; +} + +static int string_width(font_data *font, wchar_t const *string, int *errs, + unsigned flags) +{ + int width = 0; + int nindex, index, oindex, lindex; + + if (errs) + *errs = 0; + + oindex = NOGLYPH; + index = utoglyph(font->info, *string); + for (; *string; string++) { + nindex = utoglyph(font->info, string[1]); + + if (index == NOGLYPH) { + if (errs) + *errs = 1; + } else { + if (!(flags & RS_NOLIG) && + (lindex = find_lig(font, index, nindex)) != NOGLYPH) { + index = lindex; + continue; + } + width += find_kern(font, oindex, index) + find_width(font, index); + } + oindex = index; + index = nindex; + } + + return width; +} + +static int paper_width_internal(void *vctx, word *word, int *nspaces); + +struct paper_width_ctx { + int minspacewidth; + para_data *pdata; + paper_conf *conf; +}; + +static int paper_width_list(void *vctx, word *text, word *end, int *nspaces) { + int w = 0; + while (text && text != end) { + w += paper_width_internal(vctx, text, nspaces); + text = text->next; + } + return w; +} + +static int paper_width_internal(void *vctx, word *word, int *nspaces) +{ + struct paper_width_ctx *ctx = (struct paper_width_ctx *)vctx; + int style, type, findex, width, errs; + wchar_t *str; + unsigned flags = 0; + + switch (word->type) { + case word_HyperLink: + case word_HyperEnd: + case word_UpperXref: + case word_LowerXref: + case word_PageXref: + case word_XrefEnd: + case word_IndexRef: + return 0; + } + + style = towordstyle(word->type); + type = removeattr(word->type); + + findex = (style == word_Normal ? FONT_NORMAL : + style == word_Emph ? FONT_EMPH : + FONT_CODE); + + if (style == word_Code || style == word_WeakCode) flags |= RS_NOLIG; + + if (type == word_Normal) { + str = word->text; + } else if (type == word_WhiteSpace) { + if (findex != FONT_CODE) { + if (nspaces) + (*nspaces)++; + return ctx->minspacewidth; + } else + str = L" "; + } else /* if (type == word_Quote) */ { + if (word->aux == quote_Open) + str = ctx->conf->lquote; + else + str = ctx->conf->rquote; + } + + width = string_width(ctx->pdata->fonts[findex], str, &errs, flags); + + if (errs && word->alt) + return paper_width_list(vctx, word->alt, NULL, nspaces); + else + return ctx->pdata->sizes[findex] * width; +} + +static int paper_width(void *vctx, word *word) +{ + return paper_width_internal(vctx, word, NULL); +} + +static int paper_width_simple(para_data *pdata, word *text, paper_conf *conf) +{ + struct paper_width_ctx ctx; + + ctx.pdata = pdata; + ctx.minspacewidth = + (pdata->sizes[FONT_NORMAL] * + string_width(pdata->fonts[FONT_NORMAL], L" ", NULL, 0)); + ctx.conf = conf; + + return paper_width_list(&ctx, text, NULL, NULL); +} + +static void wrap_paragraph(para_data *pdata, word *words, + int w, int i1, int i2, paper_conf *conf) +{ + wrappedline *wrapping, *p; + int spacewidth; + struct paper_width_ctx ctx; + int line_height; + + /* + * We're going to need to store the line height in every line + * structure we generate. + */ + { + int i; + line_height = 0; + for (i = 0; i < NFONTS; i++) + if (line_height < pdata->sizes[i]) + line_height = pdata->sizes[i]; + line_height *= UNITS_PER_PT; + } + + spacewidth = (pdata->sizes[FONT_NORMAL] * + string_width(pdata->fonts[FONT_NORMAL], L" ", NULL, 0)); + if (spacewidth == 0) { + /* + * A font without a space?! Disturbing. I hope this never + * comes up, but I'll make a random guess anyway and set my + * space width to half the point size. + */ + spacewidth = pdata->sizes[FONT_NORMAL] * UNITS_PER_PT / 2; + } + + /* + * I'm going to set the _minimum_ space width to 3/5 of the + * standard one, and use the standard one as the optimum. + */ + ctx.minspacewidth = spacewidth * 3 / 5; + ctx.pdata = pdata; + ctx.conf = conf; + + wrapping = wrap_para(words, w - i1, w - i2, paper_width, &ctx, spacewidth); + + /* + * Having done the wrapping, we now concoct a set of line_data + * structures. + */ + pdata->first = pdata->last = NULL; + + for (p = wrapping; p; p = p->next) { + line_data *ldata; + word *wd; + int len, wid, spaces; + + ldata = snew(line_data); + + ldata->pdata = pdata; + ldata->first = p->begin; + ldata->end = p->end; + ldata->line_height = line_height; + + ldata->xpos = (p == wrapping ? i1 : i2); + + if (pdata->last) { + pdata->last->next = ldata; + ldata->prev = pdata->last; + } else { + pdata->first = ldata; + ldata->prev = NULL; + } + ldata->next = NULL; + pdata->last = ldata; + + spaces = 0; + len = paper_width_list(&ctx, ldata->first, ldata->end, &spaces); + wid = (p == wrapping ? w - i1 : w - i2); + wd = ldata->first; + + ldata->hshortfall = wid - len; + ldata->nspaces = spaces; + /* + * This tells us how much the space width needs to + * change from _min_spacewidth. But we want to store + * its difference from the _natural_ space width, to + * make the text rendering easier. + */ + ldata->hshortfall += ctx.minspacewidth * spaces; + ldata->hshortfall -= spacewidth * spaces; + ldata->real_shortfall = ldata->hshortfall; + /* + * Special case: on the last line of a paragraph, we + * never stretch spaces. + */ + if (ldata->hshortfall > 0 && !p->next) + ldata->hshortfall = 0; + + ldata->aux_text = NULL; + ldata->aux_text_2 = NULL; + ldata->aux_left_indent = 0; + ldata->penalty_before = ldata->penalty_after = 0; + } + +} + +static page_data *page_breaks(line_data *first, line_data *last, + int page_height, int ncols, int headspace) +{ + line_data *l, *m; + page_data *ph, *pt; + int n, n1, this_height; + + /* + * Page breaking is done by a close analogue of the optimal + * paragraph wrapping algorithm used by wrap_para(). We work + * backwards from the end of the document line by line; for + * each line, we contemplate every possible number of lines we + * could put on a page starting with that line, determine a + * cost function for each one, add it to the pre-computed cost + * function for optimally page-breaking everything after that + * page, and pick the best option. + * + * This is made slightly more complex by the fact that we have + * a multi-column index with a heading at the top of the + * _first_ page, meaning that the first _ncols_ pages must have + * a different length. Hence, we must do the wrapping ncols+1 + * times over, hypothetically trying to put every subsequence + * on every possible page. + * + * Since my line_data structures are only used for this + * purpose, I might as well just store the algorithm data + * directly in them. + */ + + for (l = last; l; l = l->prev) { + l->bestcost = snewn(ncols+1, int); + l->vshortfall = snewn(ncols+1, int); + l->text = snewn(ncols+1, int); + l->space = snewn(ncols+1, int); + l->page_last = snewn(ncols+1, line_data *); + + for (n = 0; n <= ncols; n++) { + int minheight, text = 0, space = 0; + int cost; + + n1 = (n < ncols ? n+1 : ncols); + if (n < ncols) + this_height = page_height - headspace; + else + this_height = page_height; + + l->bestcost[n] = -1; + for (m = l; m; m = m->next) { + if (m != l && m->page_break) + break; /* we've gone as far as we can */ + + if (m != l) { + if (m->prev->space_after > 0) + space += m->prev->space_after; + else + text += m->prev->space_after; + } + if (m != l || m->page_break) { + if (m->space_before > 0) + space += m->space_before; + else + text += m->space_before; + } + text += m->line_height; + minheight = text + space; + + if (m != l && minheight > this_height) + break; + + /* + * If the space after this paragraph is _negative_ + * (which means the next line is folded on to this + * one, which happens in the index), we absolutely + * cannot break here. + */ + if (m->space_after >= 0) { + + /* + * Compute the cost of this arrangement, as the + * square of the amount of wasted space on the + * page. Exception: if this is the last page + * before a mandatory break or the document + * end, we don't penalise a large blank area. + */ + if (m != last && m->next && !m->next->page_break) + { + int x = (this_height - minheight) / FUNITS_PER_PT * + 4096.0; + int xf; + + xf = x & 0xFF; + x >>= 8; + + cost = x*x; + cost += (x * xf) >> 8; + } else + cost = 0; + + if (m != last && m->next && !m->next->page_break) { + cost += m->penalty_after; + cost += m->next->penalty_before; + } + + if (m != last && m->next && !m->next->page_break) + cost += m->next->bestcost[n1]; + if (l->bestcost[n] == -1 || l->bestcost[n] > cost) { + /* + * This is the best option yet for this + * starting point. + */ + l->bestcost[n] = cost; + if (m != last && m->next && !m->next->page_break) + l->vshortfall[n] = this_height - minheight; + else + l->vshortfall[n] = 0; + l->text[n] = text; + l->space[n] = space; + l->page_last[n] = m; + } + } + + if (m == last) + break; + } + } + } + + /* + * Now go through the line list forwards and assemble the + * actual pages. + */ + ph = pt = NULL; + + l = first; + n = 0; + while (l) { + page_data *page; + int text, space, head; + + page = snew(page_data); + page->next = NULL; + page->prev = pt; + if (pt) + pt->next = page; + else + ph = page; + pt = page; + + page->first_line = l; + page->last_line = l->page_last[n]; + + page->first_text = page->last_text = NULL; + page->first_xref = page->last_xref = NULL; + page->first_rect = page->last_rect = NULL; + + /* + * Now assign a y-coordinate to each line on the page. + */ + text = space = 0; + head = (n < ncols ? headspace : 0); + for (l = page->first_line; l; l = l->next) { + if (l != page->first_line) { + if (l->prev->space_after > 0) + space += l->prev->space_after; + else + text += l->prev->space_after; + } + if (l != page->first_line || l->page_break) { + if (l->space_before > 0) + space += l->space_before; + else + text += l->space_before; + } + text += l->line_height; + + l->page = page; + l->ypos = text + space + head; + if (page->first_line->space[n]) { + l->ypos += space * (float)page->first_line->vshortfall[n] / + page->first_line->space[n]; + } + + if (l == page->last_line) + break; + } + + l = page->last_line; + if (l == last) + break; + l = l->next; + + n = (n < ncols ? n+1 : ncols); + } + + return ph; +} + +static void add_rect_to_page(page_data *page, int x, int y, int w, int h) +{ + rect *r = snew(rect); + + r->next = NULL; + if (page->last_rect) + page->last_rect->next = r; + else + page->first_rect = r; + page->last_rect = r; + + r->x = x; + r->y = y; + r->w = w; + r->h = h; +} + +static void add_string_to_page(page_data *page, int x, int y, + font_encoding *fe, int size, char *text, + int width) +{ + text_fragment *frag; + + frag = snew(text_fragment); + frag->next = NULL; + + if (page->last_text) + page->last_text->next = frag; + else + page->first_text = frag; + page->last_text = frag; + + frag->x = x; + frag->y = y; + frag->fe = fe; + frag->fontsize = size; + frag->text = dupstr(text); + frag->width = width; +} + +/* + * Returns the updated x coordinate. + */ +static int render_string(page_data *page, font_data *font, int fontsize, + int x, int y, wchar_t *str, unsigned flags) +{ + char *text; + int textpos, textwid, kern, nglyph, glyph, oglyph, lig; + font_encoding *subfont = NULL, *sf; + subfont_map_entry *sme; + + text = snewn(1 + ustrlen(str), char); + textpos = textwid = 0; + + glyph = NOGLYPH; + nglyph = utoglyph(font->info, *str); + while (*str) { + oglyph = glyph; + glyph = nglyph; + nglyph = utoglyph(font->info, str[1]); + + if (glyph == NOGLYPH) { + str++; + continue; /* nothing more we can do here */ + } + + if (!(flags & RS_NOLIG) && + (lig = find_lig(font, glyph, nglyph)) != NOGLYPH) { + nglyph = lig; + str++; + continue; + } + + /* + * Find which subfont this character is going in. + */ + sme = encode_glyph(glyph, *str, font); + sf = sme->subfont; + + kern = find_kern(font, oglyph, glyph) * fontsize; + + if (!subfont || sf != subfont || kern) { + if (subfont) { + text[textpos] = '\0'; + add_string_to_page(page, x, y, subfont, fontsize, text, + textwid); + x += textwid + kern; + } else { + assert(textpos == 0); + } + textpos = 0; + textwid = 0; + subfont = sf; + } + + text[textpos++] = sme->position; + textwid += find_width(font, glyph) * fontsize; + + str++; + } + + if (textpos > 0) { + text[textpos] = '\0'; + add_string_to_page(page, x, y, subfont, fontsize, text, textwid); + x += textwid; + } + + return x; +} + +/* + * Returns the updated x coordinate. + */ +static int render_text(page_data *page, para_data *pdata, line_data *ldata, + int x, int y, word *text, word *text_end, xref **xr, + int shortfall, int nspaces, int *nspace, + keywordlist *keywords, indexdata *idx, paper_conf *conf) +{ + while (text && text != text_end) { + int style, type, findex, errs; + wchar_t *str; + xref_dest dest; + unsigned flags = 0; + + switch (text->type) { + /* + * Start a cross-reference. + */ + case word_HyperLink: + case word_UpperXref: + case word_LowerXref: + case word_PageXref: + + if (text->type == word_HyperLink) { + dest.type = URL; + dest.url = utoa_dup(text->text, CS_ASCII); + dest.page = NULL; + } else if (text->type == word_PageXref) { + dest.type = PAGE; + dest.url = NULL; + dest.page = (page_data *)text->private_data; + } else { + keyword *kwl = kw_lookup(keywords, text->text); + para_data *pdata; + + if (kwl) { + assert(kwl->para->private_data); + pdata = (para_data *) kwl->para->private_data; + dest.type = PAGE; + dest.page = pdata->first->page; + dest.url = NULL; + } else { + /* + * Shouldn't happen, but *shrug* + */ + dest.type = NONE; + dest.page = NULL; + dest.url = NULL; + } + } + if (dest.type != NONE) { + *xr = snew(xref); + (*xr)->dest = dest; /* structure copy */ + if (page->last_xref) + page->last_xref->next = *xr; + else + page->first_xref = *xr; + page->last_xref = *xr; + (*xr)->next = NULL; + + /* + * FIXME: Ideally we should have, and use, some + * vertical font metric information here so that + * our cross-ref rectangle can take account of + * descenders and the font's cap height. This will + * do for the moment, but it isn't ideal. + */ + (*xr)->lx = (*xr)->rx = x; + (*xr)->by = y; + (*xr)->ty = y + ldata->line_height; + } + goto nextword; + + /* + * Finish extending a cross-reference box. + */ + case word_HyperEnd: + case word_XrefEnd: + *xr = NULL; + goto nextword; + + /* + * Add the current page number to the list of pages + * referenced by an index entry. + */ + case word_IndexRef: + /* + * We don't create index references in contents entries. + */ + if (!pdata->contents_entry) { + indextag *tag; + int i; + + tag = index_findtag(idx, text->text); + if (!tag) + goto nextword; + + for (i = 0; i < tag->nrefs; i++) { + indexentry *entry = tag->refs[i]; + paper_idx *pi = (paper_idx *)entry->backend_data; + + /* + * If the same index term is indexed twice + * within the same section, we only want to + * mention it once in the index. + */ + if (pi->lastpage != page) { + word **wp; + + if (pi->lastword) { + pi->lastword = pi->lastword->next = + fake_word(L","); + pi->lastword = pi->lastword->next = + fake_space_word(); + wp = &pi->lastword->next; + } else + wp = &pi->words; + + pi->lastword = *wp = + fake_page_ref(page); + pi->lastword = pi->lastword->next = + fake_word(page->number); + pi->lastword = pi->lastword->next = + fake_end_ref(); + } + + pi->lastpage = page; + } + } + goto nextword; + } + + style = towordstyle(text->type); + type = removeattr(text->type); + + findex = (style == word_Normal ? FONT_NORMAL : + style == word_Emph ? FONT_EMPH : + FONT_CODE); + + if (style == word_Code || style == word_WeakCode) flags |= RS_NOLIG; + flags |= pdata->extraflags; + + if (type == word_Normal) { + str = text->text; + } else if (type == word_WhiteSpace) { + x += pdata->sizes[findex] * + string_width(pdata->fonts[findex], L" ", NULL, 0); + if (nspaces && findex != FONT_CODE) { + x += (*nspace+1) * shortfall / nspaces; + x -= *nspace * shortfall / nspaces; + (*nspace)++; + } + goto nextword; + } else /* if (type == word_Quote) */ { + if (text->aux == quote_Open) + str = conf->lquote; + else + str = conf->rquote; + } + + (void) string_width(pdata->fonts[findex], str, &errs, flags); + + if (errs && text->alt) + x = render_text(page, pdata, ldata, x, y, text->alt, NULL, + xr, shortfall, nspaces, nspace, keywords, idx, + conf); + else + x = render_string(page, pdata->fonts[findex], + pdata->sizes[findex], x, y, str, flags); + + if (*xr) + (*xr)->rx = x; + + nextword: + text = text->next; + } + + return x; +} + +/* + * Returns the last x position used on the line. + */ +static int render_line(line_data *ldata, int left_x, int top_y, + xref_dest *dest, keywordlist *keywords, indexdata *idx, + paper_conf *conf) +{ + int nspace; + xref *xr; + int ret = 0; + + if (ldata->aux_text) { + int x; + xr = NULL; + nspace = 0; + x = render_text(ldata->page, ldata->pdata, ldata, + left_x + ldata->aux_left_indent, + top_y - ldata->ypos, + ldata->aux_text, NULL, &xr, 0, 0, &nspace, + keywords, idx, conf); + if (ldata->aux_text_2) + render_text(ldata->page, ldata->pdata, ldata, + x, top_y - ldata->ypos, + ldata->aux_text_2, NULL, &xr, 0, 0, &nspace, + keywords, idx, conf); + } + nspace = 0; + + if (ldata->first) { + /* + * There might be a cross-reference carried over from a + * previous line. + */ + if (dest->type != NONE) { + xr = snew(xref); + xr->next = NULL; + xr->dest = *dest; /* structure copy */ + if (ldata->page->last_xref) + ldata->page->last_xref->next = xr; + else + ldata->page->first_xref = xr; + ldata->page->last_xref = xr; + xr->lx = xr->rx = left_x + ldata->xpos; + xr->by = top_y - ldata->ypos; + xr->ty = top_y - ldata->ypos + ldata->line_height; + } else + xr = NULL; + + { + int extra_indent, shortfall, spaces; + int just = ldata->pdata->justification; + + /* + * All forms of justification become JUST when we have + * to squeeze the paragraph. + */ + if (ldata->hshortfall < 0) + just = JUST; + + switch (just) { + case JUST: + shortfall = ldata->hshortfall; + spaces = ldata->nspaces; + extra_indent = 0; + break; + case LEFT: + shortfall = spaces = extra_indent = 0; + break; + case RIGHT: + shortfall = spaces = 0; + extra_indent = ldata->real_shortfall; + break; + } + + ret = render_text(ldata->page, ldata->pdata, ldata, + left_x + ldata->xpos + extra_indent, + top_y - ldata->ypos, ldata->first, ldata->end, + &xr, shortfall, spaces, &nspace, + keywords, idx, conf); + } + + if (xr) { + /* + * There's a cross-reference continued on to the next line. + */ + *dest = xr->dest; + } else + dest->type = NONE; + } + + return ret; +} + +static void render_para(para_data *pdata, paper_conf *conf, + keywordlist *keywords, indexdata *idx, + paragraph *index_placeholder, page_data *index_page) +{ + int last_x; + xref *cxref; + page_data *cxref_page; + xref_dest dest; + para_data *target; + line_data *ldata; + + dest.type = NONE; + cxref = NULL; + cxref_page = NULL; + + for (ldata = pdata->first; ldata; ldata = ldata->next) { + /* + * If this is a contents entry, we expect to have a single + * enormous cross-reference rectangle covering the whole + * thing. (Unless, of course, it spans multiple pages.) + */ + if (pdata->contents_entry && ldata->page != cxref_page) { + cxref_page = ldata->page; + cxref = snew(xref); + cxref->next = NULL; + cxref->dest.type = PAGE; + if (pdata->contents_entry == index_placeholder) { + cxref->dest.page = index_page; + } else { + assert(pdata->contents_entry->private_data); + target = (para_data *)pdata->contents_entry->private_data; + cxref->dest.page = target->first->page; + } + cxref->dest.url = NULL; + if (ldata->page->last_xref) + ldata->page->last_xref->next = cxref; + else + ldata->page->first_xref = cxref; + ldata->page->last_xref = cxref; + cxref->lx = conf->left_margin; + cxref->rx = conf->paper_width - conf->right_margin; + cxref->ty = conf->paper_height - conf->top_margin + - ldata->ypos + ldata->line_height; + } + if (pdata->contents_entry) { + assert(cxref != NULL); + cxref->by = conf->paper_height - conf->top_margin + - ldata->ypos; + } + + last_x = render_line(ldata, conf->left_margin, + conf->paper_height - conf->top_margin, + &dest, keywords, idx, conf); + if (ldata == pdata->last) + break; + } + + /* + * If this is a contents entry, add leaders and a page + * number. + */ + if (pdata->contents_entry) { + word *w; + wchar_t *num; + int wid; + int x; + + if (pdata->contents_entry == index_placeholder) { + num = index_page->number; + } else { + assert(pdata->contents_entry->private_data); + target = (para_data *)pdata->contents_entry->private_data; + num = target->first->page->number; + } + + w = fake_word(num); + wid = paper_width_simple(pdata, w, conf); + sfree(w); + + for (x = 0; x < conf->base_width; x += conf->leader_separation) + if (x - conf->leader_separation > last_x - conf->left_margin && + x + conf->leader_separation < conf->base_width - wid) + render_string(pdata->last->page, + pdata->fonts[FONT_NORMAL], + pdata->sizes[FONT_NORMAL], + conf->left_margin + x, + (conf->paper_height - conf->top_margin - + pdata->last->ypos), L".", 0); + + render_string(pdata->last->page, + pdata->fonts[FONT_NORMAL], + pdata->sizes[FONT_NORMAL], + conf->paper_width - conf->right_margin - wid, + (conf->paper_height - conf->top_margin - + pdata->last->ypos), num, 0); + } + + /* + * Render any rectangle (chapter title underline or rule) + * that goes with this paragraph. + */ + switch (pdata->rect_type) { + case RECT_CHAPTER_UNDERLINE: + add_rect_to_page(pdata->last->page, + conf->left_margin, + (conf->paper_height - conf->top_margin - + pdata->last->ypos - + conf->chapter_underline_depth), + conf->base_width, + conf->chapter_underline_thickness); + break; + case RECT_RULE: + add_rect_to_page(pdata->first->page, + conf->left_margin + pdata->first->xpos, + (conf->paper_height - conf->top_margin - + pdata->last->ypos - + pdata->last->line_height), + conf->base_width - pdata->first->xpos, + pdata->last->line_height); + break; + default: /* placate gcc */ + break; + } +} + +static para_data *code_paragraph(int indent, word *words, paper_conf *conf) +{ + para_data *pdata = snew(para_data); + + /* + * For code paragraphs, I'm going to hack grievously and + * pretend the three normal fonts are the three code paragraph + * fonts. + */ + setfont(pdata, &conf->fcode); + + pdata->first = pdata->last = NULL; + pdata->outline_level = -1; + pdata->rect_type = RECT_NONE; + pdata->contents_entry = NULL; + pdata->justification = LEFT; + pdata->extraflags = RS_NOLIG; + + for (; words; words = words->next) { + wchar_t *t, *e, *start; + word *lhead = NULL, *ltail = NULL, *w; + line_data *ldata; + int prev = -1, curr; + + t = words->text; + if (words->next && words->next->type == word_Emph) { + e = words->next->text; + words = words->next; + } else + e = NULL; + + start = t; + + while (*start) { + while (*t) { + if (!e || !*e) + curr = 0; + else if (*e == L'i') + curr = 1; + else if (*e == L'b') + curr = 2; + else + curr = 0; + + if (prev < 0) + prev = curr; + + if (curr != prev) + break; + + t++; + if (e && *e) + e++; + } + + /* + * We've isolated a maximal subsequence of the line + * which has the same emphasis. Form it into a word + * structure. + */ + w = snew(word); + w->next = NULL; + w->alt = NULL; + w->type = (prev == 0 ? word_WeakCode : + prev == 1 ? word_Emph : word_Normal); + w->text = snewn(t-start+1, wchar_t); + memcpy(w->text, start, (t-start) * sizeof(wchar_t)); + w->text[t-start] = '\0'; + w->breaks = FALSE; + + if (ltail) + ltail->next = w; + else + lhead = w; + ltail = w; + + start = t; + prev = -1; + } + + ldata = snew(line_data); + + ldata->pdata = pdata; + ldata->first = lhead; + ldata->end = NULL; + ldata->line_height = conf->fcode.font_size * UNITS_PER_PT; + + ldata->xpos = indent; + + if (pdata->last) { + pdata->last->next = ldata; + ldata->prev = pdata->last; + } else { + pdata->first = ldata; + ldata->prev = NULL; + } + ldata->next = NULL; + pdata->last = ldata; + + ldata->hshortfall = 0; + ldata->nspaces = 0; + ldata->aux_text = NULL; + ldata->aux_text_2 = NULL; + ldata->aux_left_indent = 0; + /* General opprobrium for breaking in a code paragraph. */ + ldata->penalty_before = ldata->penalty_after = 50000; + } + + standard_line_spacing(pdata, conf); + + return pdata; +} + +static para_data *rule_paragraph(int indent, paper_conf *conf) +{ + para_data *pdata = snew(para_data); + line_data *ldata; + + ldata = snew(line_data); + + ldata->pdata = pdata; + ldata->first = NULL; + ldata->end = NULL; + ldata->line_height = conf->rule_thickness; + + ldata->xpos = indent; + + ldata->prev = NULL; + ldata->next = NULL; + + ldata->hshortfall = 0; + ldata->nspaces = 0; + ldata->aux_text = NULL; + ldata->aux_text_2 = NULL; + ldata->aux_left_indent = 0; + + /* + * Better to break after a rule than before it + */ + ldata->penalty_after += 100000; + ldata->penalty_before += -100000; + + pdata->first = pdata->last = ldata; + pdata->outline_level = -1; + pdata->rect_type = RECT_RULE; + pdata->contents_entry = NULL; + pdata->justification = LEFT; + pdata->extraflags = 0; + + standard_line_spacing(pdata, conf); + + return pdata; +} + +/* + * Plain-text-like formatting for outline titles. + */ +static void paper_rdaddw(rdstring *rs, word *text) { + for (; text; text = text->next) switch (text->type) { + case word_HyperLink: + case word_HyperEnd: + case word_UpperXref: + case word_LowerXref: + case word_XrefEnd: + case word_IndexRef: + break; + + case word_Normal: + case word_Emph: + case word_Code: + case word_WeakCode: + case word_WhiteSpace: + case word_EmphSpace: + case word_CodeSpace: + case word_WkCodeSpace: + case word_Quote: + case word_EmphQuote: + case word_CodeQuote: + case word_WkCodeQuote: + assert(text->type != word_CodeQuote && + text->type != word_WkCodeQuote); + if (towordstyle(text->type) == word_Emph && + (attraux(text->aux) == attr_First || + attraux(text->aux) == attr_Only)) + rdadd(rs, L'_'); /* FIXME: configurability */ + else if (towordstyle(text->type) == word_Code && + (attraux(text->aux) == attr_First || + attraux(text->aux) == attr_Only)) + rdadd(rs, L'\''); /* FIXME: configurability */ + if (removeattr(text->type) == word_Normal) { + rdadds(rs, text->text); + } else if (removeattr(text->type) == word_WhiteSpace) { + rdadd(rs, L' '); + } else if (removeattr(text->type) == word_Quote) { + rdadd(rs, L'\''); /* fixme: configurability */ + } + if (towordstyle(text->type) == word_Emph && + (attraux(text->aux) == attr_Last || + attraux(text->aux) == attr_Only)) + rdadd(rs, L'_'); /* FIXME: configurability */ + else if (towordstyle(text->type) == word_Code && + (attraux(text->aux) == attr_Last || + attraux(text->aux) == attr_Only)) + rdadd(rs, L'\''); /* FIXME: configurability */ + break; + } +} + +static wchar_t *prepare_outline_title(word *first, wchar_t *separator, + word *second) +{ + rdstring rs = {0, 0, NULL}; + + if (first) + paper_rdaddw(&rs, first); + if (separator) + rdadds(&rs, separator); + if (second) + paper_rdaddw(&rs, second); + + return rs.text; +} + +static word *fake_word(wchar_t *text) +{ + word *ret = snew(word); + ret->next = NULL; + ret->alt = NULL; + ret->type = word_Normal; + ret->text = ustrdup(text); + ret->breaks = FALSE; + ret->aux = 0; + return ret; +} + +static word *fake_space_word(void) +{ + word *ret = snew(word); + ret->next = NULL; + ret->alt = NULL; + ret->type = word_WhiteSpace; + ret->text = NULL; + ret->breaks = TRUE; + ret->aux = 0; + return ret; +} + +static word *fake_page_ref(page_data *page) +{ + word *ret = snew(word); + ret->next = NULL; + ret->alt = NULL; + ret->type = word_PageXref; + ret->text = NULL; + ret->breaks = FALSE; + ret->aux = 0; + ret->private_data = page; + return ret; +} + +static word *fake_end_ref(void) +{ + word *ret = snew(word); + ret->next = NULL; + ret->alt = NULL; + ret->type = word_XrefEnd; + ret->text = NULL; + ret->breaks = FALSE; + ret->aux = 0; + return ret; +} + +static word *prepare_contents_title(word *first, wchar_t *separator, + word *second) +{ + word *ret; + word **wptr, *w; + + wptr = &ret; + + if (first) { + w = dup_word_list(first); + *wptr = w; + while (w->next) + w = w->next; + wptr = &w->next; + } + + if (separator) { + w = fake_word(separator); + *wptr = w; + wptr = &w->next; + } + + if (second) { + *wptr = dup_word_list(second); + } + + return ret; +} + +static void fold_into_page(page_data *dest, page_data *src, int right_shift) +{ + line_data *ldata; + + if (!src->first_line) + return; + + if (dest->last_line) { + dest->last_line->next = src->first_line; + src->first_line->prev = dest->last_line; + } + dest->last_line = src->last_line; + + for (ldata = src->first_line; ldata; ldata = ldata->next) { + ldata->page = dest; + ldata->xpos += right_shift; + + if (ldata == src->last_line) + break; + } +} diff --git a/app/tools/halibut/charset/CMakeLists.txt b/app/tools/halibut/charset/CMakeLists.txt new file mode 100644 index 0000000..86521b8 --- /dev/null +++ b/app/tools/halibut/charset/CMakeLists.txt @@ -0,0 +1,38 @@ +SET(SOURCES + big5enc.c + big5set.c + charset.h + cns11643.c + cp949.c + euc.c + fromucs.c + gb2312.c + hz.c + internal.h + iso2022.c + iso2022s.c + istate.c + jisx0208.c + jisx0212.c + ksx1001.c + locale.c + localenc.c + macenc.c + mimeenc.c + sbcs.c + sbcsdat.c + shiftjis.c + slookup.c + superset.c + test.c + toucs.c + utf16.c + utf7.c + utf8.c + xenc.c + ) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) + +ADD_LIBRARY(xtrkcad-charset ${SOURCES}) + diff --git a/app/tools/halibut/charset/LICENCE b/app/tools/halibut/charset/LICENCE new file mode 100644 index 0000000..093b943 --- /dev/null +++ b/app/tools/halibut/charset/LICENCE @@ -0,0 +1,22 @@ +libcharset is copyright 2003-2004 Simon Tatham. + +Portions copyright Ben Harris. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/app/tools/halibut/charset/README b/app/tools/halibut/charset/README new file mode 100644 index 0000000..8eb7c25 --- /dev/null +++ b/app/tools/halibut/charset/README @@ -0,0 +1,37 @@ +This subdirectory contains a general character-set conversion +library, used in Timber, and available for use in other software if +it should happen to be useful. + +I intend to use this same library in other programs at some future +date. (A cut-down version of it is already in use in some ports of +PuTTY.) It is therefore a _strong_ design goal that this library +should remain perfectly general, and not tied to particulars of +Timber. It must not reference any code outside its own subdirectory; +it should not have Timber-specific helper routines added to it +unless they can be documented in a general manner which might make +them useful in other circumstances as well. + +There are some multibyte character encodings which this library does +not currently support. Those that I know of are: + + - Johab. There is no reason why we _shouldn't_ support this, but it + wasn't immediately necessary at the time I did the initial + coding. If anyone needs it, it shouldn't be too hard. The Unicode + mapping table for the encoding is available at + http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT + + - ISO-2022-JP-1 (RFC 2237), and ISO-2022-JP-2 (RFC 1554). These + should be even easier if required - we already have the ISO 2022 + machinery in place, and support all the underlying character + sets. + + - ISO-2022-CN and ISO-2022-CN-EXT (RFC 1922). These are a little tricky + as they allow use of both GB2312 (simplified Chinese) and CNS 11643 + (traditional Chinese), so we may need some way to specify which to + prefer. + + - The Hong Kong (HKSCS) extension to Big5. Again, mapping tables + are available in the Unihan database. + + - Other Big Five extensions, which I don't have mapping tables for + at all. diff --git a/app/tools/halibut/charset/big5enc.c b/app/tools/halibut/charset/big5enc.c new file mode 100644 index 0000000..d3e48ff --- /dev/null +++ b/app/tools/halibut/charset/big5enc.c @@ -0,0 +1,93 @@ +/* + * big5enc.c - multibyte encoding of Big5 + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +/* + * Big5 has no associated data, so `charset' may be ignored. + */ + +static void read_big5(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + UNUSEDARG(charset); + + /* + * For reading Big5, state->s0 simply contains the single + * stored lead byte when we are half way through a double-byte + * character, or 0 if we aren't. + */ + + if (state->s0 == 0) { + if (input_chr >= 0xA1 && input_chr <= 0xFE) { + /* + * Lead byte. Just store it. + */ + state->s0 = input_chr; + } else { + /* + * Anything else we pass straight through unchanged. + */ + emit(emitctx, input_chr); + } + } else { + /* + * We have a stored lead byte. We expect a valid followup + * byte. + */ + if ((input_chr >= 0x40 && input_chr <= 0x7E) || + (input_chr >= 0xA1 && input_chr <= 0xFE)) { + emit(emitctx, big5_to_unicode(state->s0 - 0xA1, input_chr - 0x40)); + } else { + emit(emitctx, ERROR); + } + state->s0 = 0; + } +} + +/* + * Big5 is a stateless multi-byte encoding (in the sense that just + * after any character has been completed, the state is always the + * same); hence when writing it, there is no need to use the + * charset_state. + */ + +static int write_big5(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + UNUSEDARG(charset); + UNUSEDARG(state); + + if (input_chr == -1) + return TRUE; /* stateless; no cleanup required */ + + if (input_chr < 0x80) { + emit(emitctx, input_chr); + return TRUE; + } else { + int r, c; + if (unicode_to_big5(input_chr, &r, &c)) { + emit(emitctx, r + 0xA1); + emit(emitctx, c + 0x40); + return TRUE; + } else { + return FALSE; + } + } +} + +const charset_spec charset_CS_BIG5 = { + CS_BIG5, read_big5, write_big5, NULL +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_BIG5) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/big5set.c b/app/tools/halibut/charset/big5set.c new file mode 100644 index 0000000..f654330 --- /dev/null +++ b/app/tools/halibut/charset/big5set.c @@ -0,0 +1,4045 @@ +/* + * Big5 implementation for libcharset. (This is the character set + * itself, not any particular multibyte encoding of it. Multibyte + * encodings of this character set are handled separately.) + */ + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +/* + * These tables are generated from the Big5 <-> Unicode character + * mapping found at + * + * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT + * + * In the few cases where Big5 contains two characters whose + * Unicode equivalents are the same, we map both to those + * characters. + */ + +/* + * Mapping from Big5 to Unicode. For these purposes Big5 is + * considered to be a 94x191 square array, with coordinates running + * from (0,0) to (93,190). (In the multibyte encoding those + * coordinates are offset by 0xA1 and 0x40 respectively, so they + * run from (A1,40) to (FE,FE).) + * + * Generated by running the following sh+Perl over BIG5.TXT: + +cat BIG5.TXT | \ +sed -e $'s/^\\(0xA15A\t\\)0xFFFD/\\10xFF3F/' \ + -e $'s/^\\(0xA1FE\t\\)0xFFFD/\\10x2571/' \ + -e $'s/^\\(0xA240\t\\)0xFFFD/\\10x2572/' \ + -e $'s/^\\(0xA2CC\t\\)0xFFFD/\\10x5341/' \ + -e $'s/^\\(0xA2CE\t\\)0xFFFD/\\10x5345/' \ + -e '/^0xA1C3/d' -e '/^0xA1C5/d' | \ +perl -ne '$a{hex$1,hex$2}=$3 if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {for $r (0..93) { $o=" {"; for $c (0..190) {' \ + -e '$k=$a{$r+161,$c+64}; $k=" ERROR" unless defined $k;' \ + -e '$o .= ", " if $c > 0; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= $k; } print "$o},\n"; }}' + + */ + +static const unsigned short big5_forward[94][191] = { + {0x3000, 0xFF0C, 0x3001, 0x3002, 0xFF0E, 0x2022, 0xFF1B, 0xFF1A, 0xFF1F, + 0xFF01, 0xFE30, 0x2026, 0x2025, 0xFE50, 0xFF64, 0xFE52, 0x00B7, 0xFE54, + 0xFE55, 0xFE56, 0xFE57, 0xFF5C, 0x2013, 0xFE31, 0x2014, 0xFE33, 0xFF3F, + 0xFE34, 0xFE4F, 0xFF08, 0xFF09, 0xFE35, 0xFE36, 0xFF5B, 0xFF5D, 0xFE37, + 0xFE38, 0x3014, 0x3015, 0xFE39, 0xFE3A, 0x3010, 0x3011, 0xFE3B, 0xFE3C, + 0x300A, 0x300B, 0xFE3D, 0xFE3E, 0x3008, 0x3009, 0xFE3F, 0xFE40, 0x300C, + 0x300D, 0xFE41, 0xFE42, 0x300E, 0x300F, 0xFE43, 0xFE44, 0xFE59, 0xFE5A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xFE5B, 0xFE5C, + 0xFE5D, 0xFE5E, 0x2018, 0x2019, 0x201C, 0x201D, 0x301D, 0x301E, 0x2035, + 0x2032, 0xFF03, 0xFF06, 0xFF0A, 0x203B, 0x00A7, 0x3003, 0x25CB, 0x25CF, + 0x25B3, 0x25B2, 0x25CE, 0x2606, 0x2605, 0x25C7, 0x25C6, 0x25A1, 0x25A0, + 0x25BD, 0x25BC, 0x32A3, 0x2105, 0x203E, ERROR, 0xFF3F, ERROR, 0xFE49, + 0xFE4A, 0xFE4D, 0xFE4E, 0xFE4B, 0xFE4C, 0xFE5F, 0xFE60, 0xFE61, 0xFF0B, + 0xFF0D, 0x00D7, 0x00F7, 0x00B1, 0x221A, 0xFF1C, 0xFF1E, 0xFF1D, 0x2266, + 0x2267, 0x2260, 0x221E, 0x2252, 0x2261, 0xFE62, 0xFE63, 0xFE64, 0xFE65, + 0xFE66, 0x223C, 0x2229, 0x222A, 0x22A5, 0x2220, 0x221F, 0x22BF, 0x33D2, + 0x33D1, 0x222B, 0x222E, 0x2235, 0x2234, 0x2640, 0x2642, 0x2641, 0x2609, + 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, + 0x2223, 0x2571}, + {0x2572, 0xFF0F, 0xFF3C, 0xFF04, 0x00A5, 0x3012, 0x00A2, 0x00A3, 0xFF05, + 0xFF20, 0x2103, 0x2109, 0xFE69, 0xFE6A, 0xFE6B, 0x33D5, 0x339C, 0x339D, + 0x339E, 0x33CE, 0x33A1, 0x338E, 0x338F, 0x33C4, 0x00B0, 0x5159, 0x515B, + 0x515E, 0x515D, 0x5161, 0x5163, 0x55E7, 0x74E9, 0x7CCE, 0x2581, 0x2582, + 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, 0x258F, 0x258E, 0x258D, + 0x258C, 0x258B, 0x258A, 0x2589, 0x253C, 0x2534, 0x252C, 0x2524, 0x251C, + 0x2594, 0x2500, 0x2502, 0x2595, 0x250C, 0x2510, 0x2514, 0x2518, 0x256D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x256E, 0x2570, + 0x256F, 0x2550, 0x255E, 0x256A, 0x2561, 0x25E2, 0x25E3, 0x25E5, 0x25E4, + 0x2571, 0x2572, 0x2573, 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, + 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, + 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, + 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xFF21, + 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, + 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, + 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF41, 0xFF42, + 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, + 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, + 0xFF55, 0xFF56}, + {0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, + 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, + 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, + 0x03A9, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, + 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, + 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x3105, 0x3106, + 0x3107, 0x3108, 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, 0x310E, 0x310F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x3110, 0x3111, + 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311A, + 0x311B, 0x311C, 0x311D, 0x311E, 0x311F, 0x3120, 0x3121, 0x3122, 0x3123, + 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02D9, 0x02C9, 0x02CA, + 0x02C7, 0x02CB, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + {0x4E00, 0x4E59, 0x4E01, 0x4E03, 0x4E43, 0x4E5D, 0x4E86, 0x4E8C, 0x4EBA, + 0x513F, 0x5165, 0x516B, 0x51E0, 0x5200, 0x5201, 0x529B, 0x5315, 0x5341, + 0x535C, 0x53C8, 0x4E09, 0x4E0B, 0x4E08, 0x4E0A, 0x4E2B, 0x4E38, 0x51E1, + 0x4E45, 0x4E48, 0x4E5F, 0x4E5E, 0x4E8E, 0x4EA1, 0x5140, 0x5203, 0x52FA, + 0x5343, 0x53C9, 0x53E3, 0x571F, 0x58EB, 0x5915, 0x5927, 0x5973, 0x5B50, + 0x5B51, 0x5B53, 0x5BF8, 0x5C0F, 0x5C22, 0x5C38, 0x5C71, 0x5DDD, 0x5DE5, + 0x5DF1, 0x5DF2, 0x5DF3, 0x5DFE, 0x5E72, 0x5EFE, 0x5F0B, 0x5F13, 0x624D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x4E11, 0x4E10, + 0x4E0D, 0x4E2D, 0x4E30, 0x4E39, 0x4E4B, 0x5C39, 0x4E88, 0x4E91, 0x4E95, + 0x4E92, 0x4E94, 0x4EA2, 0x4EC1, 0x4EC0, 0x4EC3, 0x4EC6, 0x4EC7, 0x4ECD, + 0x4ECA, 0x4ECB, 0x4EC4, 0x5143, 0x5141, 0x5167, 0x516D, 0x516E, 0x516C, + 0x5197, 0x51F6, 0x5206, 0x5207, 0x5208, 0x52FB, 0x52FE, 0x52FF, 0x5316, + 0x5339, 0x5348, 0x5347, 0x5345, 0x535E, 0x5384, 0x53CB, 0x53CA, 0x53CD, + 0x58EC, 0x5929, 0x592B, 0x592A, 0x592D, 0x5B54, 0x5C11, 0x5C24, 0x5C3A, + 0x5C6F, 0x5DF4, 0x5E7B, 0x5EFF, 0x5F14, 0x5F15, 0x5FC3, 0x6208, 0x6236, + 0x624B, 0x624E, 0x652F, 0x6587, 0x6597, 0x65A4, 0x65B9, 0x65E5, 0x66F0, + 0x6708, 0x6728, 0x6B20, 0x6B62, 0x6B79, 0x6BCB, 0x6BD4, 0x6BDB, 0x6C0F, + 0x6C34, 0x706B, 0x722A, 0x7236, 0x723B, 0x7247, 0x7259, 0x725B, 0x72AC, + 0x738B, 0x4E19}, + {0x4E16, 0x4E15, 0x4E14, 0x4E18, 0x4E3B, 0x4E4D, 0x4E4F, 0x4E4E, 0x4EE5, + 0x4ED8, 0x4ED4, 0x4ED5, 0x4ED6, 0x4ED7, 0x4EE3, 0x4EE4, 0x4ED9, 0x4EDE, + 0x5145, 0x5144, 0x5189, 0x518A, 0x51AC, 0x51F9, 0x51FA, 0x51F8, 0x520A, + 0x52A0, 0x529F, 0x5305, 0x5306, 0x5317, 0x531D, 0x4EDF, 0x534A, 0x5349, + 0x5361, 0x5360, 0x536F, 0x536E, 0x53BB, 0x53EF, 0x53E4, 0x53F3, 0x53EC, + 0x53EE, 0x53E9, 0x53E8, 0x53FC, 0x53F8, 0x53F5, 0x53EB, 0x53E6, 0x53EA, + 0x53F2, 0x53F1, 0x53F0, 0x53E5, 0x53ED, 0x53FB, 0x56DB, 0x56DA, 0x5916, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x592E, 0x5931, + 0x5974, 0x5976, 0x5B55, 0x5B83, 0x5C3C, 0x5DE8, 0x5DE7, 0x5DE6, 0x5E02, + 0x5E03, 0x5E73, 0x5E7C, 0x5F01, 0x5F18, 0x5F17, 0x5FC5, 0x620A, 0x6253, + 0x6254, 0x6252, 0x6251, 0x65A5, 0x65E6, 0x672E, 0x672C, 0x672A, 0x672B, + 0x672D, 0x6B63, 0x6BCD, 0x6C11, 0x6C10, 0x6C38, 0x6C41, 0x6C40, 0x6C3E, + 0x72AF, 0x7384, 0x7389, 0x74DC, 0x74E6, 0x7518, 0x751F, 0x7528, 0x7529, + 0x7530, 0x7531, 0x7532, 0x7533, 0x758B, 0x767D, 0x76AE, 0x76BF, 0x76EE, + 0x77DB, 0x77E2, 0x77F3, 0x793A, 0x79BE, 0x7A74, 0x7ACB, 0x4E1E, 0x4E1F, + 0x4E52, 0x4E53, 0x4E69, 0x4E99, 0x4EA4, 0x4EA6, 0x4EA5, 0x4EFF, 0x4F09, + 0x4F19, 0x4F0A, 0x4F15, 0x4F0D, 0x4F10, 0x4F11, 0x4F0F, 0x4EF2, 0x4EF6, + 0x4EFB, 0x4EF0, 0x4EF3, 0x4EFD, 0x4F01, 0x4F0B, 0x5149, 0x5147, 0x5146, + 0x5148, 0x5168}, + {0x5171, 0x518D, 0x51B0, 0x5217, 0x5211, 0x5212, 0x520E, 0x5216, 0x52A3, + 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540F, 0x540C, 0x540A, + 0x5410, 0x5401, 0x540B, 0x5404, 0x5411, 0x540D, 0x5408, 0x5403, 0x540E, + 0x5406, 0x5412, 0x56E0, 0x56DE, 0x56DD, 0x5733, 0x5730, 0x5728, 0x572D, + 0x572C, 0x572F, 0x5729, 0x5919, 0x591A, 0x5937, 0x5938, 0x5984, 0x5978, + 0x5983, 0x597D, 0x5979, 0x5982, 0x5981, 0x5B57, 0x5B58, 0x5B87, 0x5B88, + 0x5B85, 0x5B89, 0x5BFA, 0x5C16, 0x5C79, 0x5DDE, 0x5E06, 0x5E76, 0x5E74, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5F0F, 0x5F1B, + 0x5FD9, 0x5FD6, 0x620E, 0x620C, 0x620D, 0x6210, 0x6263, 0x625B, 0x6258, + 0x6536, 0x65E9, 0x65E8, 0x65EC, 0x65ED, 0x66F2, 0x66F3, 0x6709, 0x673D, + 0x6734, 0x6731, 0x6735, 0x6B21, 0x6B64, 0x6B7B, 0x6C16, 0x6C5D, 0x6C57, + 0x6C59, 0x6C5F, 0x6C60, 0x6C50, 0x6C55, 0x6C61, 0x6C5B, 0x6C4D, 0x6C4E, + 0x7070, 0x725F, 0x725D, 0x767E, 0x7AF9, 0x7C73, 0x7CF8, 0x7F36, 0x7F8A, + 0x7FBD, 0x8001, 0x8003, 0x800C, 0x8012, 0x8033, 0x807F, 0x8089, 0x808B, + 0x808C, 0x81E3, 0x81EA, 0x81F3, 0x81FC, 0x820C, 0x821B, 0x821F, 0x826E, + 0x8272, 0x827E, 0x866B, 0x8840, 0x884C, 0x8863, 0x897F, 0x9621, 0x4E32, + 0x4EA8, 0x4F4D, 0x4F4F, 0x4F47, 0x4F57, 0x4F5E, 0x4F34, 0x4F5B, 0x4F55, + 0x4F30, 0x4F50, 0x4F51, 0x4F3D, 0x4F3A, 0x4F38, 0x4F43, 0x4F54, 0x4F3C, + 0x4F46, 0x4F63}, + {0x4F5C, 0x4F60, 0x4F2F, 0x4F4E, 0x4F36, 0x4F59, 0x4F5D, 0x4F48, 0x4F5A, + 0x514C, 0x514B, 0x514D, 0x5175, 0x51B6, 0x51B7, 0x5225, 0x5224, 0x5229, + 0x522A, 0x5228, 0x52AB, 0x52A9, 0x52AA, 0x52AC, 0x5323, 0x5373, 0x5375, + 0x541D, 0x542D, 0x541E, 0x543E, 0x5426, 0x544E, 0x5427, 0x5446, 0x5443, + 0x5433, 0x5448, 0x5442, 0x541B, 0x5429, 0x544A, 0x5439, 0x543B, 0x5438, + 0x542E, 0x5435, 0x5436, 0x5420, 0x543C, 0x5440, 0x5431, 0x542B, 0x541F, + 0x542C, 0x56EA, 0x56F0, 0x56E4, 0x56EB, 0x574A, 0x5751, 0x5740, 0x574D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5747, 0x574E, + 0x573E, 0x5750, 0x574F, 0x573B, 0x58EF, 0x593E, 0x599D, 0x5992, 0x59A8, + 0x599E, 0x59A3, 0x5999, 0x5996, 0x598D, 0x59A4, 0x5993, 0x598A, 0x59A5, + 0x5B5D, 0x5B5C, 0x5B5A, 0x5B5B, 0x5B8C, 0x5B8B, 0x5B8F, 0x5C2C, 0x5C40, + 0x5C41, 0x5C3F, 0x5C3E, 0x5C90, 0x5C91, 0x5C94, 0x5C8C, 0x5DEB, 0x5E0C, + 0x5E8F, 0x5E87, 0x5E8A, 0x5EF7, 0x5F04, 0x5F1F, 0x5F64, 0x5F62, 0x5F77, + 0x5F79, 0x5FD8, 0x5FCC, 0x5FD7, 0x5FCD, 0x5FF1, 0x5FEB, 0x5FF8, 0x5FEA, + 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626D, + 0x628A, 0x627C, 0x627E, 0x6279, 0x6273, 0x6292, 0x626F, 0x6298, 0x626E, + 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653B, 0x6538, 0x65F1, 0x66F4, + 0x675F, 0x674E, 0x674F, 0x6750, 0x6751, 0x675C, 0x6756, 0x675E, 0x6749, + 0x6746, 0x6760}, + {0x6753, 0x6757, 0x6B65, 0x6BCF, 0x6C42, 0x6C5E, 0x6C99, 0x6C81, 0x6C88, + 0x6C89, 0x6C85, 0x6C9B, 0x6C6A, 0x6C7A, 0x6C90, 0x6C70, 0x6C8C, 0x6C68, + 0x6C96, 0x6C92, 0x6C7D, 0x6C83, 0x6C72, 0x6C7E, 0x6C74, 0x6C86, 0x6C76, + 0x6C8D, 0x6C94, 0x6C98, 0x6C82, 0x7076, 0x707C, 0x707D, 0x7078, 0x7262, + 0x7261, 0x7260, 0x72C4, 0x72C2, 0x7396, 0x752C, 0x752B, 0x7537, 0x7538, + 0x7682, 0x76EF, 0x77E3, 0x79C1, 0x79C0, 0x79BF, 0x7A76, 0x7CFB, 0x7F55, + 0x8096, 0x8093, 0x809D, 0x8098, 0x809B, 0x809A, 0x80B2, 0x826F, 0x8292, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x828B, 0x828D, + 0x898B, 0x89D2, 0x8A00, 0x8C37, 0x8C46, 0x8C55, 0x8C9D, 0x8D64, 0x8D70, + 0x8DB3, 0x8EAB, 0x8ECA, 0x8F9B, 0x8FB0, 0x8FC2, 0x8FC6, 0x8FC5, 0x8FC4, + 0x5DE1, 0x9091, 0x90A2, 0x90AA, 0x90A6, 0x90A3, 0x9149, 0x91C6, 0x91CC, + 0x9632, 0x962E, 0x9631, 0x962A, 0x962C, 0x4E26, 0x4E56, 0x4E73, 0x4E8B, + 0x4E9B, 0x4E9E, 0x4EAB, 0x4EAC, 0x4F6F, 0x4F9D, 0x4F8D, 0x4F73, 0x4F7F, + 0x4F6C, 0x4F9B, 0x4F8B, 0x4F86, 0x4F83, 0x4F70, 0x4F75, 0x4F88, 0x4F69, + 0x4F7B, 0x4F96, 0x4F7E, 0x4F8F, 0x4F91, 0x4F7A, 0x5154, 0x5152, 0x5155, + 0x5169, 0x5177, 0x5176, 0x5178, 0x51BD, 0x51FD, 0x523B, 0x5238, 0x5237, + 0x523A, 0x5230, 0x522E, 0x5236, 0x5241, 0x52BE, 0x52BB, 0x5352, 0x5354, + 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53D6, 0x53D4, 0x53D7, + 0x5473, 0x5475}, + {0x5496, 0x5478, 0x5495, 0x5480, 0x547B, 0x5477, 0x5484, 0x5492, 0x5486, + 0x547C, 0x5490, 0x5471, 0x5476, 0x548C, 0x549A, 0x5462, 0x5468, 0x548B, + 0x547D, 0x548E, 0x56FA, 0x5783, 0x5777, 0x576A, 0x5769, 0x5761, 0x5766, + 0x5764, 0x577C, 0x591C, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59BE, + 0x59BB, 0x59D4, 0x59B9, 0x59AE, 0x59D1, 0x59C6, 0x59D0, 0x59CD, 0x59CB, + 0x59D3, 0x59CA, 0x59AF, 0x59B3, 0x59D2, 0x59C5, 0x5B5F, 0x5B64, 0x5B63, + 0x5B97, 0x5B9A, 0x5B98, 0x5B9C, 0x5B99, 0x5B9B, 0x5C1A, 0x5C48, 0x5C45, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5C46, 0x5CB7, + 0x5CA1, 0x5CB8, 0x5CA9, 0x5CAB, 0x5CB1, 0x5CB3, 0x5E18, 0x5E1A, 0x5E16, + 0x5E15, 0x5E1B, 0x5E11, 0x5E78, 0x5E9A, 0x5E97, 0x5E9C, 0x5E95, 0x5E96, + 0x5EF6, 0x5F26, 0x5F27, 0x5F29, 0x5F80, 0x5F81, 0x5F7F, 0x5F7C, 0x5FDD, + 0x5FE0, 0x5FFD, 0x5FF5, 0x5FFF, 0x600F, 0x6014, 0x602F, 0x6035, 0x6016, + 0x602A, 0x6015, 0x6021, 0x6027, 0x6029, 0x602B, 0x601B, 0x6216, 0x6215, + 0x623F, 0x623E, 0x6240, 0x627F, 0x62C9, 0x62CC, 0x62C4, 0x62BF, 0x62C2, + 0x62B9, 0x62D2, 0x62DB, 0x62AB, 0x62D3, 0x62D4, 0x62CB, 0x62C8, 0x62A8, + 0x62BD, 0x62BC, 0x62D0, 0x62D9, 0x62C7, 0x62CD, 0x62B5, 0x62DA, 0x62B1, + 0x62D8, 0x62D6, 0x62D7, 0x62C6, 0x62AC, 0x62CE, 0x653E, 0x65A7, 0x65BC, + 0x65FA, 0x6614, 0x6613, 0x660C, 0x6606, 0x6602, 0x660E, 0x6600, 0x660F, + 0x6615, 0x660A}, + {0x6607, 0x670D, 0x670B, 0x676D, 0x678B, 0x6795, 0x6771, 0x679C, 0x6773, + 0x6777, 0x6787, 0x679D, 0x6797, 0x676F, 0x6770, 0x677F, 0x6789, 0x677E, + 0x6790, 0x6775, 0x679A, 0x6793, 0x677C, 0x676A, 0x6772, 0x6B23, 0x6B66, + 0x6B67, 0x6B7F, 0x6C13, 0x6C1B, 0x6CE3, 0x6CE8, 0x6CF3, 0x6CB1, 0x6CCC, + 0x6CE5, 0x6CB3, 0x6CBD, 0x6CBE, 0x6CBC, 0x6CE2, 0x6CAB, 0x6CD5, 0x6CD3, + 0x6CB8, 0x6CC4, 0x6CB9, 0x6CC1, 0x6CAE, 0x6CD7, 0x6CC5, 0x6CF1, 0x6CBF, + 0x6CBB, 0x6CE1, 0x6CDB, 0x6CCA, 0x6CAC, 0x6CEF, 0x6CDC, 0x6CD6, 0x6CE0, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7095, 0x708E, + 0x7092, 0x708A, 0x7099, 0x722C, 0x722D, 0x7238, 0x7248, 0x7267, 0x7269, + 0x72C0, 0x72CE, 0x72D9, 0x72D7, 0x72D0, 0x73A9, 0x73A8, 0x739F, 0x73AB, + 0x73A5, 0x753D, 0x759D, 0x7599, 0x759A, 0x7684, 0x76C2, 0x76F2, 0x76F4, + 0x77E5, 0x77FD, 0x793E, 0x7940, 0x7941, 0x79C9, 0x79C8, 0x7A7A, 0x7A79, + 0x7AFA, 0x7CFE, 0x7F54, 0x7F8C, 0x7F8B, 0x8005, 0x80BA, 0x80A5, 0x80A2, + 0x80B1, 0x80A1, 0x80AB, 0x80A9, 0x80B4, 0x80AA, 0x80AF, 0x81E5, 0x81FE, + 0x820D, 0x82B3, 0x829D, 0x8299, 0x82AD, 0x82BD, 0x829F, 0x82B9, 0x82B1, + 0x82AC, 0x82A5, 0x82AF, 0x82B8, 0x82A3, 0x82B0, 0x82BE, 0x82B7, 0x864E, + 0x8671, 0x521D, 0x8868, 0x8ECB, 0x8FCE, 0x8FD4, 0x8FD1, 0x90B5, 0x90B8, + 0x90B1, 0x90B6, 0x91C7, 0x91D1, 0x9577, 0x9580, 0x961C, 0x9640, 0x963F, + 0x963B, 0x9644}, + {0x9642, 0x96B9, 0x96E8, 0x9752, 0x975E, 0x4E9F, 0x4EAD, 0x4EAE, 0x4FE1, + 0x4FB5, 0x4FAF, 0x4FBF, 0x4FE0, 0x4FD1, 0x4FCF, 0x4FDD, 0x4FC3, 0x4FB6, + 0x4FD8, 0x4FDF, 0x4FCA, 0x4FD7, 0x4FAE, 0x4FD0, 0x4FC4, 0x4FC2, 0x4FDA, + 0x4FCE, 0x4FDE, 0x4FB7, 0x5157, 0x5192, 0x5191, 0x51A0, 0x524E, 0x5243, + 0x524A, 0x524D, 0x524C, 0x524B, 0x5247, 0x52C7, 0x52C9, 0x52C3, 0x52C1, + 0x530D, 0x5357, 0x537B, 0x539A, 0x53DB, 0x54AC, 0x54C0, 0x54A8, 0x54CE, + 0x54C9, 0x54B8, 0x54A6, 0x54B3, 0x54C7, 0x54C2, 0x54BD, 0x54AA, 0x54C1, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x54C4, 0x54C8, + 0x54AF, 0x54AB, 0x54B1, 0x54BB, 0x54A9, 0x54A7, 0x54BF, 0x56FF, 0x5782, + 0x578B, 0x57A0, 0x57A3, 0x57A2, 0x57CE, 0x57AE, 0x5793, 0x5955, 0x5951, + 0x594F, 0x594E, 0x5950, 0x59DC, 0x59D8, 0x59FF, 0x59E3, 0x59E8, 0x5A03, + 0x59E5, 0x59EA, 0x59DA, 0x59E6, 0x5A01, 0x59FB, 0x5B69, 0x5BA3, 0x5BA6, + 0x5BA4, 0x5BA2, 0x5BA5, 0x5C01, 0x5C4E, 0x5C4F, 0x5C4D, 0x5C4B, 0x5CD9, + 0x5CD2, 0x5DF7, 0x5E1D, 0x5E25, 0x5E1F, 0x5E7D, 0x5EA0, 0x5EA6, 0x5EFA, + 0x5F08, 0x5F2D, 0x5F65, 0x5F88, 0x5F85, 0x5F8A, 0x5F8B, 0x5F87, 0x5F8C, + 0x5F89, 0x6012, 0x601D, 0x6020, 0x6025, 0x600E, 0x6028, 0x604D, 0x6070, + 0x6068, 0x6062, 0x6046, 0x6043, 0x606C, 0x606B, 0x606A, 0x6064, 0x6241, + 0x62DC, 0x6316, 0x6309, 0x62FC, 0x62ED, 0x6301, 0x62EE, 0x62FD, 0x6307, + 0x62F1, 0x62F7}, + {0x62EF, 0x62EC, 0x62FE, 0x62F4, 0x6311, 0x6302, 0x653F, 0x6545, 0x65AB, + 0x65BD, 0x65E2, 0x6625, 0x662D, 0x6620, 0x6627, 0x662F, 0x661F, 0x6628, + 0x6631, 0x6624, 0x66F7, 0x67FF, 0x67D3, 0x67F1, 0x67D4, 0x67D0, 0x67EC, + 0x67B6, 0x67AF, 0x67F5, 0x67E9, 0x67EF, 0x67C4, 0x67D1, 0x67B4, 0x67DA, + 0x67E5, 0x67B8, 0x67CF, 0x67DE, 0x67F3, 0x67B0, 0x67D9, 0x67E2, 0x67DD, + 0x67D2, 0x6B6A, 0x6B83, 0x6B86, 0x6BB5, 0x6BD2, 0x6BD7, 0x6C1F, 0x6CC9, + 0x6D0B, 0x6D32, 0x6D2A, 0x6D41, 0x6D25, 0x6D0C, 0x6D31, 0x6D1E, 0x6D17, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6D3B, 0x6D3D, + 0x6D3E, 0x6D36, 0x6D1B, 0x6CF5, 0x6D39, 0x6D27, 0x6D38, 0x6D29, 0x6D2E, + 0x6D35, 0x6D0E, 0x6D2B, 0x70AB, 0x70BA, 0x70B3, 0x70AC, 0x70AF, 0x70AD, + 0x70B8, 0x70AE, 0x70A4, 0x7230, 0x7272, 0x726F, 0x7274, 0x72E9, 0x72E0, + 0x72E1, 0x73B7, 0x73CA, 0x73BB, 0x73B2, 0x73CD, 0x73C0, 0x73B3, 0x751A, + 0x752D, 0x754F, 0x754C, 0x754E, 0x754B, 0x75AB, 0x75A4, 0x75A5, 0x75A2, + 0x75A3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76C8, 0x76C6, 0x76C3, 0x76C5, + 0x7701, 0x76F9, 0x76F8, 0x7709, 0x770B, 0x76FE, 0x76FC, 0x7707, 0x77DC, + 0x7802, 0x7814, 0x780C, 0x780D, 0x7946, 0x7949, 0x7948, 0x7947, 0x79B9, + 0x79BA, 0x79D1, 0x79D2, 0x79CB, 0x7A7F, 0x7A81, 0x7AFF, 0x7AFD, 0x7C7D, + 0x7D02, 0x7D05, 0x7D00, 0x7D09, 0x7D07, 0x7D04, 0x7D06, 0x7F38, 0x7F8E, + 0x7FBF, 0x8004}, + {0x8010, 0x800D, 0x8011, 0x8036, 0x80D6, 0x80E5, 0x80DA, 0x80C3, 0x80C4, + 0x80CC, 0x80E1, 0x80DB, 0x80CE, 0x80DE, 0x80E4, 0x80DD, 0x81F4, 0x8222, + 0x82E7, 0x8303, 0x8305, 0x82E3, 0x82DB, 0x82E6, 0x8304, 0x82E5, 0x8302, + 0x8309, 0x82D2, 0x82D7, 0x82F1, 0x8301, 0x82DC, 0x82D4, 0x82D1, 0x82DE, + 0x82D3, 0x82DF, 0x82EF, 0x8306, 0x8650, 0x8679, 0x867B, 0x867A, 0x884D, + 0x886B, 0x8981, 0x89D4, 0x8A08, 0x8A02, 0x8A03, 0x8C9E, 0x8CA0, 0x8D74, + 0x8D73, 0x8DB4, 0x8ECD, 0x8ECC, 0x8FF0, 0x8FE6, 0x8FE2, 0x8FEA, 0x8FE5, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8FED, 0x8FEB, + 0x8FE4, 0x8FE8, 0x90CA, 0x90CE, 0x90C1, 0x90C3, 0x914B, 0x914A, 0x91CD, + 0x9582, 0x9650, 0x964B, 0x964C, 0x964D, 0x9762, 0x9769, 0x97CB, 0x97ED, + 0x97F3, 0x9801, 0x98A8, 0x98DB, 0x98DF, 0x9996, 0x9999, 0x4E58, 0x4EB3, + 0x500C, 0x500D, 0x5023, 0x4FEF, 0x5026, 0x5025, 0x4FF8, 0x5029, 0x5016, + 0x5006, 0x503C, 0x501F, 0x501A, 0x5012, 0x5011, 0x4FFA, 0x5000, 0x5014, + 0x5028, 0x4FF1, 0x5021, 0x500B, 0x5019, 0x5018, 0x4FF3, 0x4FEE, 0x502D, + 0x502A, 0x4FFE, 0x502B, 0x5009, 0x517C, 0x51A4, 0x51A5, 0x51A2, 0x51CD, + 0x51CC, 0x51C6, 0x51CB, 0x5256, 0x525C, 0x5254, 0x525B, 0x525D, 0x532A, + 0x537F, 0x539F, 0x539D, 0x53DF, 0x54E8, 0x5510, 0x5501, 0x5537, 0x54FC, + 0x54E5, 0x54F2, 0x5506, 0x54FA, 0x5514, 0x54E9, 0x54ED, 0x54E1, 0x5509, + 0x54EE, 0x54EA}, + {0x54E6, 0x5527, 0x5507, 0x54FD, 0x550F, 0x5703, 0x5704, 0x57C2, 0x57D4, + 0x57CB, 0x57C3, 0x5809, 0x590F, 0x5957, 0x5958, 0x595A, 0x5A11, 0x5A18, + 0x5A1C, 0x5A1F, 0x5A1B, 0x5A13, 0x59EC, 0x5A20, 0x5A23, 0x5A29, 0x5A25, + 0x5A0C, 0x5A09, 0x5B6B, 0x5C58, 0x5BB0, 0x5BB3, 0x5BB6, 0x5BB4, 0x5BAE, + 0x5BB5, 0x5BB9, 0x5BB8, 0x5C04, 0x5C51, 0x5C55, 0x5C50, 0x5CED, 0x5CFD, + 0x5CFB, 0x5CEA, 0x5CE8, 0x5CF0, 0x5CF6, 0x5D01, 0x5CF4, 0x5DEE, 0x5E2D, + 0x5E2B, 0x5EAB, 0x5EAD, 0x5EA7, 0x5F31, 0x5F92, 0x5F91, 0x5F90, 0x6059, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6063, 0x6065, + 0x6050, 0x6055, 0x606D, 0x6069, 0x606F, 0x6084, 0x609F, 0x609A, 0x608D, + 0x6094, 0x608C, 0x6085, 0x6096, 0x6247, 0x62F3, 0x6308, 0x62FF, 0x634E, + 0x633E, 0x632F, 0x6355, 0x6342, 0x6346, 0x634F, 0x6349, 0x633A, 0x6350, + 0x633D, 0x632A, 0x632B, 0x6328, 0x634D, 0x634C, 0x6548, 0x6549, 0x6599, + 0x65C1, 0x65C5, 0x6642, 0x6649, 0x664F, 0x6643, 0x6652, 0x664C, 0x6645, + 0x6641, 0x66F8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, + 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68B3, 0x6817, 0x684C, 0x6851, + 0x683D, 0x67F4, 0x6850, 0x6840, 0x683C, 0x6843, 0x682A, 0x6845, 0x6813, + 0x6818, 0x6841, 0x6B8A, 0x6B89, 0x6BB7, 0x6C23, 0x6C27, 0x6C28, 0x6C26, + 0x6C24, 0x6CF0, 0x6D6A, 0x6D95, 0x6D88, 0x6D87, 0x6D66, 0x6D78, 0x6D77, + 0x6D59, 0x6D93}, + {0x6D6C, 0x6D89, 0x6D6E, 0x6D5A, 0x6D74, 0x6D69, 0x6D8C, 0x6D8A, 0x6D79, + 0x6D85, 0x6D65, 0x6D94, 0x70CA, 0x70D8, 0x70E4, 0x70D9, 0x70C8, 0x70CF, + 0x7239, 0x7279, 0x72FC, 0x72F9, 0x72FD, 0x72F8, 0x72F7, 0x7386, 0x73ED, + 0x7409, 0x73EE, 0x73E0, 0x73EA, 0x73DE, 0x7554, 0x755D, 0x755C, 0x755A, + 0x7559, 0x75BE, 0x75C5, 0x75C7, 0x75B2, 0x75B3, 0x75BD, 0x75BC, 0x75B9, + 0x75C2, 0x75B8, 0x768B, 0x76B0, 0x76CA, 0x76CD, 0x76CE, 0x7729, 0x771F, + 0x7720, 0x7728, 0x77E9, 0x7830, 0x7827, 0x7838, 0x781D, 0x7834, 0x7837, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7825, 0x782D, + 0x7820, 0x781F, 0x7832, 0x7955, 0x7950, 0x7960, 0x795F, 0x7956, 0x795E, + 0x795D, 0x7957, 0x795A, 0x79E4, 0x79E3, 0x79E7, 0x79DF, 0x79E6, 0x79E9, + 0x79D8, 0x7A84, 0x7A88, 0x7AD9, 0x7B06, 0x7B11, 0x7C89, 0x7D21, 0x7D17, + 0x7D0B, 0x7D0A, 0x7D20, 0x7D22, 0x7D14, 0x7D10, 0x7D15, 0x7D1A, 0x7D1C, + 0x7D0D, 0x7D19, 0x7D1B, 0x7F3A, 0x7F5F, 0x7F94, 0x7FC5, 0x7FC1, 0x8006, + 0x8018, 0x8015, 0x8019, 0x8017, 0x803D, 0x803F, 0x80F1, 0x8102, 0x80F0, + 0x8105, 0x80ED, 0x80F4, 0x8106, 0x80F8, 0x80F3, 0x8108, 0x80FD, 0x810A, + 0x80FC, 0x80EF, 0x81ED, 0x81EC, 0x8200, 0x8210, 0x822A, 0x822B, 0x8228, + 0x822C, 0x82BB, 0x832B, 0x8352, 0x8354, 0x834A, 0x8338, 0x8350, 0x8349, + 0x8335, 0x8334, 0x834F, 0x8332, 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, + 0x8328, 0x8343}, + {0x8654, 0x868A, 0x86AA, 0x8693, 0x86A4, 0x86A9, 0x868C, 0x86A3, 0x869C, + 0x8870, 0x8877, 0x8881, 0x8882, 0x887D, 0x8879, 0x8A18, 0x8A10, 0x8A0E, + 0x8A0C, 0x8A15, 0x8A0A, 0x8A17, 0x8A13, 0x8A16, 0x8A0F, 0x8A11, 0x8C48, + 0x8C7A, 0x8C79, 0x8CA1, 0x8CA2, 0x8D77, 0x8EAC, 0x8ED2, 0x8ED4, 0x8ECF, + 0x8FB1, 0x9001, 0x9006, 0x8FF7, 0x9000, 0x8FFA, 0x8FF4, 0x9003, 0x8FFD, + 0x9005, 0x8FF8, 0x9095, 0x90E1, 0x90DD, 0x90E2, 0x9152, 0x914D, 0x914C, + 0x91D8, 0x91DD, 0x91D7, 0x91DC, 0x91D9, 0x9583, 0x9662, 0x9663, 0x9661, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x965B, 0x965D, + 0x9664, 0x9658, 0x965E, 0x96BB, 0x98E2, 0x99AC, 0x9AA8, 0x9AD8, 0x9B25, + 0x9B32, 0x9B3C, 0x4E7E, 0x507A, 0x507D, 0x505C, 0x5047, 0x5043, 0x504C, + 0x505A, 0x5049, 0x5065, 0x5076, 0x504E, 0x5055, 0x5075, 0x5074, 0x5077, + 0x504F, 0x500F, 0x506F, 0x506D, 0x515C, 0x5195, 0x51F0, 0x526A, 0x526F, + 0x52D2, 0x52D9, 0x52D8, 0x52D5, 0x5310, 0x530F, 0x5319, 0x533F, 0x5340, + 0x533E, 0x53C3, 0x66FC, 0x5546, 0x556A, 0x5566, 0x5544, 0x555E, 0x5561, + 0x5543, 0x554A, 0x5531, 0x5556, 0x554F, 0x5555, 0x552F, 0x5564, 0x5538, + 0x552E, 0x555C, 0x552C, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570B, + 0x5709, 0x57DF, 0x5805, 0x580A, 0x5806, 0x57E0, 0x57E4, 0x57FA, 0x5802, + 0x5835, 0x57F7, 0x57F9, 0x5920, 0x5962, 0x5A36, 0x5A41, 0x5A49, 0x5A66, + 0x5A6A, 0x5A40}, + {0x5A3C, 0x5A62, 0x5A5A, 0x5A46, 0x5A4A, 0x5B70, 0x5BC7, 0x5BC5, 0x5BC4, + 0x5BC2, 0x5BBF, 0x5BC6, 0x5C09, 0x5C08, 0x5C07, 0x5C60, 0x5C5C, 0x5C5D, + 0x5D07, 0x5D06, 0x5D0E, 0x5D1B, 0x5D16, 0x5D22, 0x5D11, 0x5D29, 0x5D14, + 0x5D19, 0x5D24, 0x5D27, 0x5D17, 0x5DE2, 0x5E38, 0x5E36, 0x5E33, 0x5E37, + 0x5EB7, 0x5EB8, 0x5EB6, 0x5EB5, 0x5EBE, 0x5F35, 0x5F37, 0x5F57, 0x5F6C, + 0x5F69, 0x5F6B, 0x5F97, 0x5F99, 0x5F9E, 0x5F98, 0x5FA1, 0x5FA0, 0x5F9C, + 0x607F, 0x60A3, 0x6089, 0x60A0, 0x60A8, 0x60CB, 0x60B4, 0x60E6, 0x60BD, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x60C5, 0x60BB, + 0x60B5, 0x60DC, 0x60BC, 0x60D8, 0x60D5, 0x60C6, 0x60DF, 0x60B8, 0x60DA, + 0x60C7, 0x621A, 0x621B, 0x6248, 0x63A0, 0x63A7, 0x6372, 0x6396, 0x63A2, + 0x63A5, 0x6377, 0x6367, 0x6398, 0x63AA, 0x6371, 0x63A9, 0x6389, 0x6383, + 0x639B, 0x636B, 0x63A8, 0x6384, 0x6388, 0x6399, 0x63A1, 0x63AC, 0x6392, + 0x638F, 0x6380, 0x637B, 0x6369, 0x6368, 0x637A, 0x655D, 0x6556, 0x6551, + 0x6559, 0x6557, 0x555F, 0x654F, 0x6558, 0x6555, 0x6554, 0x659C, 0x659B, + 0x65AC, 0x65CF, 0x65CB, 0x65CC, 0x65CE, 0x665D, 0x665A, 0x6664, 0x6668, + 0x6666, 0x665E, 0x66F9, 0x52D7, 0x671B, 0x6881, 0x68AF, 0x68A2, 0x6893, + 0x68B5, 0x687F, 0x6876, 0x68B1, 0x68A7, 0x6897, 0x68B0, 0x6883, 0x68C4, + 0x68AD, 0x6886, 0x6885, 0x6894, 0x689D, 0x68A8, 0x689F, 0x68A1, 0x6882, + 0x6B32, 0x6BBA}, + {0x6BEB, 0x6BEC, 0x6C2B, 0x6D8E, 0x6DBC, 0x6DF3, 0x6DD9, 0x6DB2, 0x6DE1, + 0x6DCC, 0x6DE4, 0x6DFB, 0x6DFA, 0x6E05, 0x6DC7, 0x6DCB, 0x6DAF, 0x6DD1, + 0x6DAE, 0x6DDE, 0x6DF9, 0x6DB8, 0x6DF7, 0x6DF5, 0x6DC5, 0x6DD2, 0x6E1A, + 0x6DB5, 0x6DDA, 0x6DEB, 0x6DD8, 0x6DEA, 0x6DF1, 0x6DEE, 0x6DE8, 0x6DC6, + 0x6DC4, 0x6DAA, 0x6DEC, 0x6DBF, 0x6DE6, 0x70F9, 0x7109, 0x710A, 0x70FD, + 0x70EF, 0x723D, 0x727D, 0x7281, 0x731C, 0x731B, 0x7316, 0x7313, 0x7319, + 0x7387, 0x7405, 0x740A, 0x7403, 0x7406, 0x73FE, 0x740D, 0x74E0, 0x74F6, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x74F7, 0x751C, + 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758F, 0x75D4, 0x75D5, 0x75B5, + 0x75CA, 0x75CD, 0x768E, 0x76D4, 0x76D2, 0x76DB, 0x7737, 0x773E, 0x773C, + 0x7736, 0x7738, 0x773A, 0x786B, 0x7843, 0x784E, 0x7965, 0x7968, 0x796D, + 0x79FB, 0x7A92, 0x7A95, 0x7B20, 0x7B28, 0x7B1B, 0x7B2C, 0x7B26, 0x7B19, + 0x7B1E, 0x7B2E, 0x7C92, 0x7C97, 0x7C95, 0x7D46, 0x7D43, 0x7D71, 0x7D2E, + 0x7D39, 0x7D3C, 0x7D40, 0x7D30, 0x7D33, 0x7D44, 0x7D2F, 0x7D42, 0x7D32, + 0x7D31, 0x7F3D, 0x7F9E, 0x7F9A, 0x7FCC, 0x7FCE, 0x7FD2, 0x801C, 0x804A, + 0x8046, 0x812F, 0x8116, 0x8123, 0x812B, 0x8129, 0x8130, 0x8124, 0x8202, + 0x8235, 0x8237, 0x8236, 0x8239, 0x838E, 0x839E, 0x8398, 0x8378, 0x83A2, + 0x8396, 0x83BD, 0x83AB, 0x8392, 0x838A, 0x8393, 0x8389, 0x83A0, 0x8377, + 0x837B, 0x837C}, + {0x8386, 0x83A7, 0x8655, 0x5F6A, 0x86C7, 0x86C0, 0x86B6, 0x86C4, 0x86B5, + 0x86C6, 0x86CB, 0x86B1, 0x86AF, 0x86C9, 0x8853, 0x889E, 0x8888, 0x88AB, + 0x8892, 0x8896, 0x888D, 0x888B, 0x8993, 0x898F, 0x8A2A, 0x8A1D, 0x8A23, + 0x8A25, 0x8A31, 0x8A2D, 0x8A1F, 0x8A1B, 0x8A22, 0x8C49, 0x8C5A, 0x8CA9, + 0x8CAC, 0x8CAB, 0x8CA8, 0x8CAA, 0x8CA7, 0x8D67, 0x8D66, 0x8DBE, 0x8DBA, + 0x8EDB, 0x8EDF, 0x9019, 0x900D, 0x901A, 0x9017, 0x9023, 0x901F, 0x901D, + 0x9010, 0x9015, 0x901E, 0x9020, 0x900F, 0x9022, 0x9016, 0x901B, 0x9014, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x90E8, 0x90ED, + 0x90FD, 0x9157, 0x91CE, 0x91F5, 0x91E6, 0x91E3, 0x91E7, 0x91ED, 0x91E9, + 0x9589, 0x966A, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, + 0x966C, 0x96C0, 0x96EA, 0x96E9, 0x7AE0, 0x7ADF, 0x9802, 0x9803, 0x9B5A, + 0x9CE5, 0x9E75, 0x9E7F, 0x9EA5, 0x9EBB, 0x50A2, 0x508D, 0x5085, 0x5099, + 0x5091, 0x5080, 0x5096, 0x5098, 0x509A, 0x6700, 0x51F1, 0x5272, 0x5274, + 0x5275, 0x5269, 0x52DE, 0x52DD, 0x52DB, 0x535A, 0x53A5, 0x557B, 0x5580, + 0x55A7, 0x557C, 0x558A, 0x559D, 0x5598, 0x5582, 0x559C, 0x55AA, 0x5594, + 0x5587, 0x558B, 0x5583, 0x55B3, 0x55AE, 0x559F, 0x553E, 0x55B2, 0x559A, + 0x55BB, 0x55AC, 0x55B1, 0x557E, 0x5589, 0x55AB, 0x5599, 0x570D, 0x582F, + 0x582A, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581D, 0x5820, 0x58F9, + 0x58FA, 0x5960}, + {0x5A77, 0x5A9A, 0x5A7F, 0x5A92, 0x5A9B, 0x5AA7, 0x5B73, 0x5B71, 0x5BD2, + 0x5BCC, 0x5BD3, 0x5BD0, 0x5C0A, 0x5C0B, 0x5C31, 0x5D4C, 0x5D50, 0x5D34, + 0x5D47, 0x5DFD, 0x5E45, 0x5E3D, 0x5E40, 0x5E43, 0x5E7E, 0x5ECA, 0x5EC1, + 0x5EC2, 0x5EC4, 0x5F3C, 0x5F6D, 0x5FA9, 0x5FAA, 0x5FA8, 0x60D1, 0x60E1, + 0x60B2, 0x60B6, 0x60E0, 0x611C, 0x6123, 0x60FA, 0x6115, 0x60F0, 0x60FB, + 0x60F4, 0x6168, 0x60F1, 0x610E, 0x60F6, 0x6109, 0x6100, 0x6112, 0x621F, + 0x6249, 0x63A3, 0x638C, 0x63CF, 0x63C0, 0x63E9, 0x63C9, 0x63C6, 0x63CD, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x63D2, 0x63E3, + 0x63D0, 0x63E1, 0x63D6, 0x63ED, 0x63EE, 0x6376, 0x63F4, 0x63EA, 0x63DB, + 0x6452, 0x63DA, 0x63F9, 0x655E, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, + 0x65AF, 0x666E, 0x6670, 0x6674, 0x6676, 0x666F, 0x6691, 0x667A, 0x667E, + 0x6677, 0x66FE, 0x66FF, 0x671F, 0x671D, 0x68FA, 0x68D5, 0x68E0, 0x68D8, + 0x68D7, 0x6905, 0x68DF, 0x68F5, 0x68EE, 0x68E7, 0x68F9, 0x68D2, 0x68F2, + 0x68E3, 0x68CB, 0x68CD, 0x690D, 0x6912, 0x690E, 0x68C9, 0x68DA, 0x696E, + 0x68FB, 0x6B3E, 0x6B3A, 0x6B3D, 0x6B98, 0x6B96, 0x6BBC, 0x6BEF, 0x6C2E, + 0x6C2F, 0x6C2C, 0x6E2F, 0x6E38, 0x6E54, 0x6E21, 0x6E32, 0x6E67, 0x6E4A, + 0x6E20, 0x6E25, 0x6E23, 0x6E1B, 0x6E5B, 0x6E58, 0x6E24, 0x6E56, 0x6E6E, + 0x6E2D, 0x6E26, 0x6E6F, 0x6E34, 0x6E4D, 0x6E3A, 0x6E2C, 0x6E43, 0x6E1D, + 0x6E3E, 0x6ECB}, + {0x6E89, 0x6E19, 0x6E4E, 0x6E63, 0x6E44, 0x6E72, 0x6E69, 0x6E5F, 0x7119, + 0x711A, 0x7126, 0x7130, 0x7121, 0x7136, 0x716E, 0x711C, 0x724C, 0x7284, + 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743A, 0x742A, 0x7433, 0x7422, + 0x7425, 0x7435, 0x7436, 0x7434, 0x742F, 0x741B, 0x7426, 0x7428, 0x7525, + 0x7526, 0x756B, 0x756A, 0x75E2, 0x75DB, 0x75E3, 0x75D9, 0x75D8, 0x75DE, + 0x75E0, 0x767B, 0x767C, 0x7696, 0x7693, 0x76B4, 0x76DC, 0x774F, 0x77ED, + 0x785D, 0x786C, 0x786F, 0x7A0D, 0x7A08, 0x7A0B, 0x7A05, 0x7A00, 0x7A98, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7A97, 0x7A96, + 0x7AE5, 0x7AE3, 0x7B49, 0x7B56, 0x7B46, 0x7B50, 0x7B52, 0x7B54, 0x7B4D, + 0x7B4B, 0x7B4F, 0x7B51, 0x7C9F, 0x7CA5, 0x7D5E, 0x7D50, 0x7D68, 0x7D55, + 0x7D2B, 0x7D6E, 0x7D72, 0x7D61, 0x7D66, 0x7D62, 0x7D70, 0x7D73, 0x5584, + 0x7FD4, 0x7FD5, 0x800B, 0x8052, 0x8085, 0x8155, 0x8154, 0x814B, 0x8151, + 0x814E, 0x8139, 0x8146, 0x813E, 0x814C, 0x8153, 0x8174, 0x8212, 0x821C, + 0x83E9, 0x8403, 0x83F8, 0x840D, 0x83E0, 0x83C5, 0x840B, 0x83C1, 0x83EF, + 0x83F1, 0x83F4, 0x8457, 0x840A, 0x83F0, 0x840C, 0x83CC, 0x83FD, 0x83F2, + 0x83CA, 0x8438, 0x840E, 0x8404, 0x83DC, 0x8407, 0x83D4, 0x83DF, 0x865B, + 0x86DF, 0x86D9, 0x86ED, 0x86D4, 0x86DB, 0x86E4, 0x86D0, 0x86DE, 0x8857, + 0x88C1, 0x88C2, 0x88B1, 0x8983, 0x8996, 0x8A3B, 0x8A60, 0x8A55, 0x8A5E, + 0x8A3C, 0x8A41}, + {0x8A54, 0x8A5B, 0x8A50, 0x8A46, 0x8A34, 0x8A3A, 0x8A36, 0x8A56, 0x8C61, + 0x8C82, 0x8CAF, 0x8CBC, 0x8CB3, 0x8CBD, 0x8CC1, 0x8CBB, 0x8CC0, 0x8CB4, + 0x8CB7, 0x8CB6, 0x8CBF, 0x8CB8, 0x8D8A, 0x8D85, 0x8D81, 0x8DCE, 0x8DDD, + 0x8DCB, 0x8DDA, 0x8DD1, 0x8DCC, 0x8DDB, 0x8DC6, 0x8EFB, 0x8EF8, 0x8EFC, + 0x8F9C, 0x902E, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036, 0x9102, 0x90F5, + 0x9109, 0x90FE, 0x9163, 0x9165, 0x91CF, 0x9214, 0x9215, 0x9223, 0x9209, + 0x921E, 0x920D, 0x9210, 0x9207, 0x9211, 0x9594, 0x958F, 0x958B, 0x9591, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9593, 0x9592, + 0x958E, 0x968A, 0x968E, 0x968B, 0x967D, 0x9685, 0x9686, 0x968D, 0x9672, + 0x9684, 0x96C1, 0x96C5, 0x96C4, 0x96C6, 0x96C7, 0x96EF, 0x96F2, 0x97CC, + 0x9805, 0x9806, 0x9808, 0x98E7, 0x98EA, 0x98EF, 0x98E9, 0x98F2, 0x98ED, + 0x99AE, 0x99AD, 0x9EC3, 0x9ECD, 0x9ED1, 0x4E82, 0x50AD, 0x50B5, 0x50B2, + 0x50B3, 0x50C5, 0x50BE, 0x50AC, 0x50B7, 0x50BB, 0x50AF, 0x50C7, 0x527F, + 0x5277, 0x527D, 0x52DF, 0x52E6, 0x52E4, 0x52E2, 0x52E3, 0x532F, 0x55DF, + 0x55E8, 0x55D3, 0x55E6, 0x55CE, 0x55DC, 0x55C7, 0x55D1, 0x55E3, 0x55E4, + 0x55EF, 0x55DA, 0x55E1, 0x55C5, 0x55C6, 0x55E5, 0x55C9, 0x5712, 0x5713, + 0x585E, 0x5851, 0x5858, 0x5857, 0x585A, 0x5854, 0x586B, 0x584C, 0x586D, + 0x584A, 0x5862, 0x5852, 0x584B, 0x5967, 0x5AC1, 0x5AC9, 0x5ACC, 0x5ABE, + 0x5ABD, 0x5ABC}, + {0x5AB3, 0x5AC2, 0x5AB2, 0x5D69, 0x5D6F, 0x5E4C, 0x5E79, 0x5EC9, 0x5EC8, + 0x5F12, 0x5F59, 0x5FAC, 0x5FAE, 0x611A, 0x610F, 0x6148, 0x611F, 0x60F3, + 0x611B, 0x60F9, 0x6101, 0x6108, 0x614E, 0x614C, 0x6144, 0x614D, 0x613E, + 0x6134, 0x6127, 0x610D, 0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643E, + 0x641E, 0x642A, 0x642D, 0x643D, 0x642C, 0x640F, 0x641C, 0x6414, 0x640D, + 0x6436, 0x6416, 0x6417, 0x6406, 0x656C, 0x659F, 0x65B0, 0x6697, 0x6689, + 0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668D, 0x6703, 0x6994, 0x696D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x695A, 0x6977, + 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694A, 0x6968, 0x696B, 0x695E, + 0x6953, 0x6979, 0x6986, 0x695D, 0x6963, 0x695B, 0x6B47, 0x6B72, 0x6BC0, + 0x6BBF, 0x6BD3, 0x6BFD, 0x6EA2, 0x6EAF, 0x6ED3, 0x6EB6, 0x6EC2, 0x6E90, + 0x6E9D, 0x6EC7, 0x6EC5, 0x6EA5, 0x6E98, 0x6EBC, 0x6EBA, 0x6EAB, 0x6ED1, + 0x6E96, 0x6E9C, 0x6EC4, 0x6ED4, 0x6EAA, 0x6EA7, 0x6EB4, 0x714E, 0x7159, + 0x7169, 0x7164, 0x7149, 0x7167, 0x715C, 0x716C, 0x7166, 0x714C, 0x7165, + 0x715E, 0x7146, 0x7168, 0x7156, 0x723A, 0x7252, 0x7337, 0x7345, 0x733F, + 0x733E, 0x746F, 0x745A, 0x7455, 0x745F, 0x745E, 0x7441, 0x743F, 0x7459, + 0x745B, 0x745C, 0x7576, 0x7578, 0x7600, 0x75F0, 0x7601, 0x75F2, 0x75F1, + 0x75FA, 0x75FF, 0x75F4, 0x75F3, 0x76DE, 0x76DF, 0x775B, 0x776B, 0x7766, + 0x775E, 0x7763}, + {0x7779, 0x776A, 0x776C, 0x775C, 0x7765, 0x7768, 0x7762, 0x77EE, 0x788E, + 0x78B0, 0x7897, 0x7898, 0x788C, 0x7889, 0x787C, 0x7891, 0x7893, 0x787F, + 0x797A, 0x797F, 0x7981, 0x842C, 0x79BD, 0x7A1C, 0x7A1A, 0x7A20, 0x7A14, + 0x7A1F, 0x7A1E, 0x7A9F, 0x7AA0, 0x7B77, 0x7BC0, 0x7B60, 0x7B6E, 0x7B67, + 0x7CB1, 0x7CB3, 0x7CB5, 0x7D93, 0x7D79, 0x7D91, 0x7D81, 0x7D8F, 0x7D5B, + 0x7F6E, 0x7F69, 0x7F6A, 0x7F72, 0x7FA9, 0x7FA8, 0x7FA4, 0x8056, 0x8058, + 0x8086, 0x8084, 0x8171, 0x8170, 0x8178, 0x8165, 0x816E, 0x8173, 0x816B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8179, 0x817A, + 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843D, 0x8431, 0x8475, 0x8466, + 0x846B, 0x8449, 0x846C, 0x845B, 0x843C, 0x8435, 0x8461, 0x8463, 0x8469, + 0x846D, 0x8446, 0x865E, 0x865C, 0x865F, 0x86F9, 0x8713, 0x8708, 0x8707, + 0x8700, 0x86FE, 0x86FB, 0x8702, 0x8703, 0x8706, 0x870A, 0x8859, 0x88DF, + 0x88D4, 0x88D9, 0x88DC, 0x88D8, 0x88DD, 0x88E1, 0x88CA, 0x88D5, 0x88D2, + 0x899C, 0x89E3, 0x8A6B, 0x8A72, 0x8A73, 0x8A66, 0x8A69, 0x8A70, 0x8A87, + 0x8A7C, 0x8A63, 0x8AA0, 0x8A71, 0x8A85, 0x8A6D, 0x8A62, 0x8A6E, 0x8A6C, + 0x8A79, 0x8A7B, 0x8A3E, 0x8A68, 0x8C62, 0x8C8A, 0x8C89, 0x8CCA, 0x8CC7, + 0x8CC8, 0x8CC4, 0x8CB2, 0x8CC3, 0x8CC2, 0x8CC5, 0x8DE1, 0x8DDF, 0x8DE8, + 0x8DEF, 0x8DF3, 0x8DFA, 0x8DEA, 0x8DE4, 0x8DE6, 0x8EB2, 0x8F03, 0x8F09, + 0x8EFE, 0x8F0A}, + {0x8F9F, 0x8FB2, 0x904B, 0x904A, 0x9053, 0x9042, 0x9054, 0x903C, 0x9055, + 0x9050, 0x9047, 0x904F, 0x904E, 0x904D, 0x9051, 0x903E, 0x9041, 0x9112, + 0x9117, 0x916C, 0x916A, 0x9169, 0x91C9, 0x9237, 0x9257, 0x9238, 0x923D, + 0x9240, 0x923E, 0x925B, 0x924B, 0x9264, 0x9251, 0x9234, 0x9249, 0x924D, + 0x9245, 0x9239, 0x923F, 0x925A, 0x9598, 0x9698, 0x9694, 0x9695, 0x96CD, + 0x96CB, 0x96C9, 0x96CA, 0x96F7, 0x96FB, 0x96F9, 0x96F6, 0x9756, 0x9774, + 0x9776, 0x9810, 0x9811, 0x9813, 0x980A, 0x9812, 0x980C, 0x98FC, 0x98F4, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x98FD, 0x98FE, + 0x99B3, 0x99B1, 0x99B4, 0x9AE1, 0x9CE9, 0x9E82, 0x9F0E, 0x9F13, 0x9F20, + 0x50E7, 0x50EE, 0x50E5, 0x50D6, 0x50ED, 0x50DA, 0x50D5, 0x50CF, 0x50D1, + 0x50F1, 0x50CE, 0x50E9, 0x5162, 0x51F3, 0x5283, 0x5282, 0x5331, 0x53AD, + 0x55FE, 0x5600, 0x561B, 0x5617, 0x55FD, 0x5614, 0x5606, 0x5609, 0x560D, + 0x560E, 0x55F7, 0x5616, 0x561F, 0x5608, 0x5610, 0x55F6, 0x5718, 0x5716, + 0x5875, 0x587E, 0x5883, 0x5893, 0x588A, 0x5879, 0x5885, 0x587D, 0x58FD, + 0x5925, 0x5922, 0x5924, 0x596A, 0x5969, 0x5AE1, 0x5AE6, 0x5AE9, 0x5AD7, + 0x5AD6, 0x5AD8, 0x5AE3, 0x5B75, 0x5BDE, 0x5BE7, 0x5BE1, 0x5BE5, 0x5BE6, + 0x5BE8, 0x5BE2, 0x5BE4, 0x5BDF, 0x5C0D, 0x5C62, 0x5D84, 0x5D87, 0x5E5B, + 0x5E63, 0x5E55, 0x5E57, 0x5E54, 0x5ED3, 0x5ED6, 0x5F0A, 0x5F46, 0x5F70, + 0x5FB9, 0x6147}, + {0x613F, 0x614B, 0x6177, 0x6162, 0x6163, 0x615F, 0x615A, 0x6158, 0x6175, + 0x622A, 0x6487, 0x6458, 0x6454, 0x64A4, 0x6478, 0x645F, 0x647A, 0x6451, + 0x6467, 0x6434, 0x646D, 0x647B, 0x6572, 0x65A1, 0x65D7, 0x65D6, 0x66A2, + 0x66A8, 0x669D, 0x699C, 0x69A8, 0x6995, 0x69C1, 0x69AE, 0x69D3, 0x69CB, + 0x699B, 0x69B7, 0x69BB, 0x69AB, 0x69B4, 0x69D0, 0x69CD, 0x69AD, 0x69CC, + 0x69A6, 0x69C3, 0x69A3, 0x6B49, 0x6B4C, 0x6C33, 0x6F33, 0x6F14, 0x6EFE, + 0x6F13, 0x6EF4, 0x6F29, 0x6F3E, 0x6F20, 0x6F2C, 0x6F0F, 0x6F02, 0x6F22, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6EFF, 0x6EEF, + 0x6F06, 0x6F31, 0x6F38, 0x6F32, 0x6F23, 0x6F15, 0x6F2B, 0x6F2F, 0x6F88, + 0x6F2A, 0x6EEC, 0x6F01, 0x6EF2, 0x6ECC, 0x6EF7, 0x7194, 0x7199, 0x717D, + 0x718A, 0x7184, 0x7192, 0x723E, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, + 0x7463, 0x746A, 0x7470, 0x746D, 0x7504, 0x7591, 0x7627, 0x760D, 0x760B, + 0x7609, 0x7613, 0x76E1, 0x76E3, 0x7784, 0x777D, 0x777F, 0x7761, 0x78C1, + 0x789F, 0x78A7, 0x78B3, 0x78A9, 0x78A3, 0x798E, 0x798F, 0x798D, 0x7A2E, + 0x7A31, 0x7AAA, 0x7AA9, 0x7AED, 0x7AEF, 0x7BA1, 0x7B95, 0x7B8B, 0x7B75, + 0x7B97, 0x7B9D, 0x7B94, 0x7B8F, 0x7BB8, 0x7B87, 0x7B84, 0x7CB9, 0x7CBD, + 0x7CBE, 0x7DBB, 0x7DB0, 0x7D9C, 0x7DBD, 0x7DBE, 0x7DA0, 0x7DCA, 0x7DB4, + 0x7DB2, 0x7DB1, 0x7DBA, 0x7DA2, 0x7DBF, 0x7DB5, 0x7DB8, 0x7DAD, 0x7DD2, + 0x7DC7, 0x7DAC}, + {0x7F70, 0x7FE0, 0x7FE1, 0x7FDF, 0x805E, 0x805A, 0x8087, 0x8150, 0x8180, + 0x818F, 0x8188, 0x818A, 0x817F, 0x8182, 0x81E7, 0x81FA, 0x8207, 0x8214, + 0x821E, 0x824B, 0x84C9, 0x84BF, 0x84C6, 0x84C4, 0x8499, 0x849E, 0x84B2, + 0x849C, 0x84CB, 0x84B8, 0x84C0, 0x84D3, 0x8490, 0x84BC, 0x84D1, 0x84CA, + 0x873F, 0x871C, 0x873B, 0x8722, 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, + 0x8729, 0x88F3, 0x8902, 0x88F4, 0x88F9, 0x88F8, 0x88FD, 0x88E8, 0x891A, + 0x88EF, 0x8AA6, 0x8A8C, 0x8A9E, 0x8AA3, 0x8A8D, 0x8AA1, 0x8A93, 0x8AA4, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8AAA, 0x8AA5, + 0x8AA8, 0x8A98, 0x8A91, 0x8A9A, 0x8AA7, 0x8C6A, 0x8C8D, 0x8C8C, 0x8CD3, + 0x8CD1, 0x8CD2, 0x8D6B, 0x8D99, 0x8D95, 0x8DFC, 0x8F14, 0x8F12, 0x8F15, + 0x8F13, 0x8FA3, 0x9060, 0x9058, 0x905C, 0x9063, 0x9059, 0x905E, 0x9062, + 0x905D, 0x905B, 0x9119, 0x9118, 0x911E, 0x9175, 0x9178, 0x9177, 0x9174, + 0x9278, 0x9280, 0x9285, 0x9298, 0x9296, 0x927B, 0x9293, 0x929C, 0x92A8, + 0x927C, 0x9291, 0x95A1, 0x95A8, 0x95A9, 0x95A3, 0x95A5, 0x95A4, 0x9699, + 0x969C, 0x969B, 0x96CC, 0x96D2, 0x9700, 0x977C, 0x9785, 0x97F6, 0x9817, + 0x9818, 0x98AF, 0x98B1, 0x9903, 0x9905, 0x990C, 0x9909, 0x99C1, 0x9AAF, + 0x9AB0, 0x9AE6, 0x9B41, 0x9B42, 0x9CF4, 0x9CF6, 0x9CF3, 0x9EBC, 0x9F3B, + 0x9F4A, 0x5104, 0x5100, 0x50FB, 0x50F5, 0x50F9, 0x5102, 0x5108, 0x5109, + 0x5105, 0x51DC}, + {0x5287, 0x5288, 0x5289, 0x528D, 0x528A, 0x52F0, 0x53B2, 0x562E, 0x563B, + 0x5639, 0x5632, 0x563F, 0x5634, 0x5629, 0x5653, 0x564E, 0x5657, 0x5674, + 0x5636, 0x562F, 0x5630, 0x5880, 0x589F, 0x589E, 0x58B3, 0x589C, 0x58AE, + 0x58A9, 0x58A6, 0x596D, 0x5B09, 0x5AFB, 0x5B0B, 0x5AF5, 0x5B0C, 0x5B08, + 0x5BEE, 0x5BEC, 0x5BE9, 0x5BEB, 0x5C64, 0x5C65, 0x5D9D, 0x5D94, 0x5E62, + 0x5E5F, 0x5E61, 0x5EE2, 0x5EDA, 0x5EDF, 0x5EDD, 0x5EE3, 0x5EE0, 0x5F48, + 0x5F71, 0x5FB7, 0x5FB5, 0x6176, 0x6167, 0x616E, 0x615D, 0x6155, 0x6182, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x617C, 0x6170, + 0x616B, 0x617E, 0x61A7, 0x6190, 0x61AB, 0x618E, 0x61AC, 0x619A, 0x61A4, + 0x6194, 0x61AE, 0x622E, 0x6469, 0x646F, 0x6479, 0x649E, 0x64B2, 0x6488, + 0x6490, 0x64B0, 0x64A5, 0x6493, 0x6495, 0x64A9, 0x6492, 0x64AE, 0x64AD, + 0x64AB, 0x649A, 0x64AC, 0x6499, 0x64A2, 0x64B3, 0x6575, 0x6577, 0x6578, + 0x66AE, 0x66AB, 0x66B4, 0x66B1, 0x6A23, 0x6A1F, 0x69E8, 0x6A01, 0x6A1E, + 0x6A19, 0x69FD, 0x6A21, 0x6A13, 0x6A0A, 0x69F3, 0x6A02, 0x6A05, 0x69ED, + 0x6A11, 0x6B50, 0x6B4E, 0x6BA4, 0x6BC5, 0x6BC6, 0x6F3F, 0x6F7C, 0x6F84, + 0x6F51, 0x6F66, 0x6F54, 0x6F86, 0x6F6D, 0x6F5B, 0x6F78, 0x6F6E, 0x6F8E, + 0x6F7A, 0x6F70, 0x6F64, 0x6F97, 0x6F58, 0x6ED5, 0x6F6F, 0x6F60, 0x6F5F, + 0x719F, 0x71AC, 0x71B1, 0x71A8, 0x7256, 0x729B, 0x734E, 0x7357, 0x7469, + 0x748B, 0x7483}, + {0x747E, 0x7480, 0x757F, 0x7620, 0x7629, 0x761F, 0x7624, 0x7626, 0x7621, + 0x7622, 0x769A, 0x76BA, 0x76E4, 0x778E, 0x7787, 0x778C, 0x7791, 0x778B, + 0x78CB, 0x78C5, 0x78BA, 0x78CA, 0x78BE, 0x78D5, 0x78BC, 0x78D0, 0x7A3F, + 0x7A3C, 0x7A40, 0x7A3D, 0x7A37, 0x7A3B, 0x7AAF, 0x7AAE, 0x7BAD, 0x7BB1, + 0x7BC4, 0x7BB4, 0x7BC6, 0x7BC7, 0x7BC1, 0x7BA0, 0x7BCC, 0x7CCA, 0x7DE0, + 0x7DF4, 0x7DEF, 0x7DFB, 0x7DD8, 0x7DEC, 0x7DDD, 0x7DE8, 0x7DE3, 0x7DDA, + 0x7DDE, 0x7DE9, 0x7D9E, 0x7DD9, 0x7DF2, 0x7DF9, 0x7F75, 0x7F77, 0x7FAF, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7FE9, 0x8026, + 0x819B, 0x819C, 0x819D, 0x81A0, 0x819A, 0x8198, 0x8517, 0x853D, 0x851A, + 0x84EE, 0x852C, 0x852D, 0x8513, 0x8511, 0x8523, 0x8521, 0x8514, 0x84EC, + 0x8525, 0x84FF, 0x8506, 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, + 0x8768, 0x8759, 0x8757, 0x874C, 0x8753, 0x885B, 0x885D, 0x8910, 0x8907, + 0x8912, 0x8913, 0x8915, 0x890A, 0x8ABC, 0x8AD2, 0x8AC7, 0x8AC4, 0x8A95, + 0x8ACB, 0x8AF8, 0x8AB2, 0x8AC9, 0x8AC2, 0x8ABF, 0x8AB0, 0x8AD6, 0x8ACD, + 0x8AB6, 0x8AB9, 0x8ADB, 0x8C4C, 0x8C4E, 0x8C6C, 0x8CE0, 0x8CDE, 0x8CE6, + 0x8CE4, 0x8CEC, 0x8CED, 0x8CE2, 0x8CE3, 0x8CDC, 0x8CEA, 0x8CE1, 0x8D6D, + 0x8D9F, 0x8DA3, 0x8E2B, 0x8E10, 0x8E1D, 0x8E22, 0x8E0F, 0x8E29, 0x8E1F, + 0x8E21, 0x8E1E, 0x8EBA, 0x8F1D, 0x8F1B, 0x8F1F, 0x8F29, 0x8F26, 0x8F2A, + 0x8F1C, 0x8F1E}, + {0x8F25, 0x9069, 0x906E, 0x9068, 0x906D, 0x9077, 0x9130, 0x912D, 0x9127, + 0x9131, 0x9187, 0x9189, 0x918B, 0x9183, 0x92C5, 0x92BB, 0x92B7, 0x92EA, + 0x92AC, 0x92E4, 0x92C1, 0x92B3, 0x92BC, 0x92D2, 0x92C7, 0x92F0, 0x92B2, + 0x95AD, 0x95B1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978D, 0x978B, + 0x978F, 0x9821, 0x982B, 0x981C, 0x98B3, 0x990A, 0x9913, 0x9912, 0x9918, + 0x99DD, 0x99D0, 0x99DF, 0x99DB, 0x99D1, 0x99D5, 0x99D2, 0x99D9, 0x9AB7, + 0x9AEE, 0x9AEF, 0x9B27, 0x9B45, 0x9B44, 0x9B77, 0x9B6F, 0x9D06, 0x9D09, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9D03, 0x9EA9, + 0x9EBE, 0x9ECE, 0x58A8, 0x9F52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, + 0x5180, 0x51AA, 0x51DD, 0x5291, 0x5293, 0x52F3, 0x5659, 0x566B, 0x5679, + 0x5669, 0x5664, 0x5678, 0x566A, 0x5668, 0x5665, 0x5671, 0x566F, 0x566C, + 0x5662, 0x5676, 0x58C1, 0x58BE, 0x58C7, 0x58C5, 0x596E, 0x5B1D, 0x5B34, + 0x5B78, 0x5BF0, 0x5C0E, 0x5F4A, 0x61B2, 0x6191, 0x61A9, 0x618A, 0x61CD, + 0x61B6, 0x61BE, 0x61CA, 0x61C8, 0x6230, 0x64C5, 0x64C1, 0x64CB, 0x64BB, + 0x64BC, 0x64DA, 0x64C4, 0x64C7, 0x64C2, 0x64CD, 0x64BF, 0x64D2, 0x64D4, + 0x64BE, 0x6574, 0x66C6, 0x66C9, 0x66B9, 0x66C4, 0x66C7, 0x66B8, 0x6A3D, + 0x6A38, 0x6A3A, 0x6A59, 0x6A6B, 0x6A58, 0x6A39, 0x6A44, 0x6A62, 0x6A61, + 0x6A4B, 0x6A47, 0x6A35, 0x6A5F, 0x6A48, 0x6B59, 0x6B77, 0x6C05, 0x6FC2, + 0x6FB1, 0x6FA1}, + {0x6FC3, 0x6FA4, 0x6FC1, 0x6FA7, 0x6FB3, 0x6FC0, 0x6FB9, 0x6FB6, 0x6FA6, + 0x6FA0, 0x6FB4, 0x71BE, 0x71C9, 0x71D0, 0x71D2, 0x71C8, 0x71D5, 0x71B9, + 0x71CE, 0x71D9, 0x71DC, 0x71C3, 0x71C4, 0x7368, 0x749C, 0x74A3, 0x7498, + 0x749F, 0x749E, 0x74E2, 0x750C, 0x750D, 0x7634, 0x7638, 0x763A, 0x76E7, + 0x76E5, 0x77A0, 0x779E, 0x779F, 0x77A5, 0x78E8, 0x78DA, 0x78EC, 0x78E7, + 0x79A6, 0x7A4D, 0x7A4E, 0x7A46, 0x7A4C, 0x7A4B, 0x7ABA, 0x7BD9, 0x7C11, + 0x7BC9, 0x7BE4, 0x7BDB, 0x7BE1, 0x7BE9, 0x7BE6, 0x7CD5, 0x7CD6, 0x7E0A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7E11, 0x7E08, + 0x7E1B, 0x7E23, 0x7E1E, 0x7E1D, 0x7E09, 0x7E10, 0x7F79, 0x7FB2, 0x7FF0, + 0x7FF1, 0x7FEE, 0x8028, 0x81B3, 0x81A9, 0x81A8, 0x81FB, 0x8208, 0x8258, + 0x8259, 0x854A, 0x8559, 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856D, + 0x856A, 0x855E, 0x8783, 0x879F, 0x879E, 0x87A2, 0x878D, 0x8861, 0x892A, + 0x8932, 0x8925, 0x892B, 0x8921, 0x89AA, 0x89A6, 0x8AE6, 0x8AFA, 0x8AEB, + 0x8AF1, 0x8B00, 0x8ADC, 0x8AE7, 0x8AEE, 0x8AFE, 0x8B01, 0x8B02, 0x8AF7, + 0x8AED, 0x8AF3, 0x8AF6, 0x8AFC, 0x8C6B, 0x8C6D, 0x8C93, 0x8CF4, 0x8E44, + 0x8E31, 0x8E34, 0x8E42, 0x8E39, 0x8E35, 0x8F3B, 0x8F2F, 0x8F38, 0x8F33, + 0x8FA8, 0x8FA6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907C, 0x907A, 0x9134, + 0x9192, 0x9320, 0x9336, 0x92F8, 0x9333, 0x932F, 0x9322, 0x92FC, 0x932B, + 0x9304, 0x931A}, + {0x9310, 0x9326, 0x9321, 0x9315, 0x932E, 0x9319, 0x95BB, 0x96A7, 0x96A8, + 0x96AA, 0x96D5, 0x970E, 0x9711, 0x9716, 0x970D, 0x9713, 0x970F, 0x975B, + 0x975C, 0x9766, 0x9798, 0x9830, 0x9838, 0x983B, 0x9837, 0x982D, 0x9839, + 0x9824, 0x9910, 0x9928, 0x991E, 0x991B, 0x9921, 0x991A, 0x99ED, 0x99E2, + 0x99F1, 0x9AB8, 0x9ABC, 0x9AFB, 0x9AED, 0x9B28, 0x9B91, 0x9D15, 0x9D23, + 0x9D26, 0x9D28, 0x9D12, 0x9D1B, 0x9ED8, 0x9ED4, 0x9F8D, 0x9F9C, 0x512A, + 0x511F, 0x5121, 0x5132, 0x52F5, 0x568E, 0x5680, 0x5690, 0x5685, 0x5687, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x568F, 0x58D5, + 0x58D3, 0x58D1, 0x58CE, 0x5B30, 0x5B2A, 0x5B24, 0x5B7A, 0x5C37, 0x5C68, + 0x5DBC, 0x5DBA, 0x5DBD, 0x5DB8, 0x5E6B, 0x5F4C, 0x5FBD, 0x61C9, 0x61C2, + 0x61C7, 0x61E6, 0x61CB, 0x6232, 0x6234, 0x64CE, 0x64CA, 0x64D8, 0x64E0, + 0x64F0, 0x64E6, 0x64EC, 0x64F1, 0x64E2, 0x64ED, 0x6582, 0x6583, 0x66D9, + 0x66D6, 0x6A80, 0x6A94, 0x6A84, 0x6AA2, 0x6A9C, 0x6ADB, 0x6AA3, 0x6A7E, + 0x6A97, 0x6A90, 0x6AA0, 0x6B5C, 0x6BAE, 0x6BDA, 0x6C08, 0x6FD8, 0x6FF1, + 0x6FDF, 0x6FE0, 0x6FDB, 0x6FE4, 0x6FEB, 0x6FEF, 0x6F80, 0x6FEC, 0x6FE1, + 0x6FE9, 0x6FD5, 0x6FEE, 0x6FF0, 0x71E7, 0x71DF, 0x71EE, 0x71E6, 0x71E5, + 0x71ED, 0x71EC, 0x71F4, 0x71E0, 0x7235, 0x7246, 0x7370, 0x7372, 0x74A9, + 0x74B0, 0x74A6, 0x74A8, 0x7646, 0x7642, 0x764C, 0x76EA, 0x77B3, 0x77AA, + 0x77B0, 0x77AC}, + {0x77A7, 0x77AD, 0x77EF, 0x78F7, 0x78FA, 0x78F4, 0x78EF, 0x7901, 0x79A7, + 0x79AA, 0x7A57, 0x7ABF, 0x7C07, 0x7C0D, 0x7BFE, 0x7BF7, 0x7C0C, 0x7BE0, + 0x7CE0, 0x7CDC, 0x7CDE, 0x7CE2, 0x7CDF, 0x7CD9, 0x7CDD, 0x7E2E, 0x7E3E, + 0x7E46, 0x7E37, 0x7E32, 0x7E43, 0x7E2B, 0x7E3D, 0x7E31, 0x7E45, 0x7E41, + 0x7E34, 0x7E39, 0x7E48, 0x7E35, 0x7E3F, 0x7E2F, 0x7F44, 0x7FF3, 0x7FFC, + 0x8071, 0x8072, 0x8070, 0x806F, 0x8073, 0x81C6, 0x81C3, 0x81BA, 0x81C2, + 0x81C0, 0x81BF, 0x81BD, 0x81C9, 0x81BE, 0x81E8, 0x8209, 0x8271, 0x85AA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8584, 0x857E, + 0x859C, 0x8591, 0x8594, 0x85AF, 0x859B, 0x8587, 0x85A8, 0x858A, 0x8667, + 0x87C0, 0x87D1, 0x87B3, 0x87D2, 0x87C6, 0x87AB, 0x87BB, 0x87BA, 0x87C8, + 0x87CB, 0x893B, 0x8936, 0x8944, 0x8938, 0x893D, 0x89AC, 0x8B0E, 0x8B17, + 0x8B19, 0x8B1B, 0x8B0A, 0x8B20, 0x8B1D, 0x8B04, 0x8B10, 0x8C41, 0x8C3F, + 0x8C73, 0x8CFA, 0x8CFD, 0x8CFC, 0x8CF8, 0x8CFB, 0x8DA8, 0x8E49, 0x8E4B, + 0x8E48, 0x8E4A, 0x8F44, 0x8F3E, 0x8F42, 0x8F45, 0x8F3F, 0x907F, 0x907D, + 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91A3, 0x919E, 0x919C, 0x934D, + 0x9382, 0x9328, 0x9375, 0x934A, 0x9365, 0x934B, 0x9318, 0x937E, 0x936C, + 0x935B, 0x9370, 0x935A, 0x9354, 0x95CA, 0x95CB, 0x95CC, 0x95C8, 0x95C6, + 0x96B1, 0x96B8, 0x96D6, 0x971C, 0x971E, 0x97A0, 0x97D3, 0x9846, 0x98B6, + 0x9935, 0x9A01}, + {0x99FF, 0x9BAE, 0x9BAB, 0x9BAA, 0x9BAD, 0x9D3B, 0x9D3F, 0x9E8B, 0x9ECF, + 0x9EDE, 0x9EDC, 0x9EDD, 0x9EDB, 0x9F3E, 0x9F4B, 0x53E2, 0x5695, 0x56AE, + 0x58D9, 0x58D8, 0x5B38, 0x5F5D, 0x61E3, 0x6233, 0x64F4, 0x64F2, 0x64FE, + 0x6506, 0x64FA, 0x64FB, 0x64F7, 0x65B7, 0x66DC, 0x6726, 0x6AB3, 0x6AAC, + 0x6AC3, 0x6ABB, 0x6AB8, 0x6AC2, 0x6AAE, 0x6AAF, 0x6B5F, 0x6B78, 0x6BAF, + 0x7009, 0x700B, 0x6FFE, 0x7006, 0x6FFA, 0x7011, 0x700F, 0x71FB, 0x71FC, + 0x71FE, 0x71F8, 0x7377, 0x7375, 0x74A7, 0x74BF, 0x7515, 0x7656, 0x7658, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7652, 0x77BD, + 0x77BF, 0x77BB, 0x77BC, 0x790E, 0x79AE, 0x7A61, 0x7A62, 0x7A60, 0x7AC4, + 0x7AC5, 0x7C2B, 0x7C27, 0x7C2A, 0x7C1E, 0x7C23, 0x7C21, 0x7CE7, 0x7E54, + 0x7E55, 0x7E5E, 0x7E5A, 0x7E61, 0x7E52, 0x7E59, 0x7F48, 0x7FF9, 0x7FFB, + 0x8077, 0x8076, 0x81CD, 0x81CF, 0x820A, 0x85CF, 0x85A9, 0x85CD, 0x85D0, + 0x85C9, 0x85B0, 0x85BA, 0x85B9, 0x85A6, 0x87EF, 0x87EC, 0x87F2, 0x87E0, + 0x8986, 0x89B2, 0x89F4, 0x8B28, 0x8B39, 0x8B2C, 0x8B2B, 0x8C50, 0x8D05, + 0x8E59, 0x8E63, 0x8E66, 0x8E64, 0x8E5F, 0x8E55, 0x8EC0, 0x8F49, 0x8F4D, + 0x9087, 0x9083, 0x9088, 0x91AB, 0x91AC, 0x91D0, 0x9394, 0x938A, 0x9396, + 0x93A2, 0x93B3, 0x93AE, 0x93AC, 0x93B0, 0x9398, 0x939A, 0x9397, 0x95D4, + 0x95D6, 0x95D0, 0x95D5, 0x96E2, 0x96DC, 0x96D9, 0x96DB, 0x96DE, 0x9724, + 0x97A3, 0x97A6}, + {0x97AD, 0x97F9, 0x984D, 0x984F, 0x984C, 0x984E, 0x9853, 0x98BA, 0x993E, + 0x993F, 0x993D, 0x992E, 0x99A5, 0x9A0E, 0x9AC1, 0x9B03, 0x9B06, 0x9B4F, + 0x9B4E, 0x9B4D, 0x9BCA, 0x9BC9, 0x9BFD, 0x9BC8, 0x9BC0, 0x9D51, 0x9D5D, + 0x9D60, 0x9EE0, 0x9F15, 0x9F2C, 0x5133, 0x56A5, 0x58DE, 0x58DF, 0x58E2, + 0x5BF5, 0x9F90, 0x5EEC, 0x61F2, 0x61F7, 0x61F6, 0x61F5, 0x6500, 0x650F, + 0x66E0, 0x66DD, 0x6AE5, 0x6ADD, 0x6ADA, 0x6AD3, 0x701B, 0x701F, 0x7028, + 0x701A, 0x701D, 0x7015, 0x7018, 0x7206, 0x720D, 0x7258, 0x72A2, 0x7378, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x737A, 0x74BD, + 0x74CA, 0x74E3, 0x7587, 0x7586, 0x765F, 0x7661, 0x77C7, 0x7919, 0x79B1, + 0x7A6B, 0x7A69, 0x7C3E, 0x7C3F, 0x7C38, 0x7C3D, 0x7C37, 0x7C40, 0x7E6B, + 0x7E6D, 0x7E79, 0x7E69, 0x7E6A, 0x7F85, 0x7E73, 0x7FB6, 0x7FB9, 0x7FB8, + 0x81D8, 0x85E9, 0x85DD, 0x85EA, 0x85D5, 0x85E4, 0x85E5, 0x85F7, 0x87FB, + 0x8805, 0x880D, 0x87F9, 0x87FE, 0x8960, 0x895F, 0x8956, 0x895E, 0x8B41, + 0x8B5C, 0x8B58, 0x8B49, 0x8B5A, 0x8B4E, 0x8B4F, 0x8B46, 0x8B59, 0x8D08, + 0x8D0A, 0x8E7C, 0x8E72, 0x8E87, 0x8E76, 0x8E6C, 0x8E7A, 0x8E74, 0x8F54, + 0x8F4E, 0x8FAD, 0x908A, 0x908B, 0x91B1, 0x91AE, 0x93E1, 0x93D1, 0x93DF, + 0x93C3, 0x93C8, 0x93DC, 0x93DD, 0x93D6, 0x93E2, 0x93CD, 0x93D8, 0x93E4, + 0x93D7, 0x93E8, 0x95DC, 0x96B4, 0x96E3, 0x972A, 0x9727, 0x9761, 0x97DC, + 0x97FB, 0x985E}, + {0x9858, 0x985B, 0x98BC, 0x9945, 0x9949, 0x9A16, 0x9A19, 0x9B0D, 0x9BE8, + 0x9BE7, 0x9BD6, 0x9BDB, 0x9D89, 0x9D61, 0x9D72, 0x9D6A, 0x9D6C, 0x9E92, + 0x9E97, 0x9E93, 0x9EB4, 0x52F8, 0x56A8, 0x56B7, 0x56B6, 0x56B4, 0x56BC, + 0x58E4, 0x5B40, 0x5B43, 0x5B7D, 0x5BF6, 0x5DC9, 0x61F8, 0x61FA, 0x6518, + 0x6514, 0x6519, 0x66E6, 0x6727, 0x6AEC, 0x703E, 0x7030, 0x7032, 0x7210, + 0x737B, 0x74CF, 0x7662, 0x7665, 0x7926, 0x792A, 0x792C, 0x792B, 0x7AC7, + 0x7AF6, 0x7C4C, 0x7C43, 0x7C4D, 0x7CEF, 0x7CF0, 0x8FAE, 0x7E7D, 0x7E7C, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7E82, 0x7F4C, + 0x8000, 0x81DA, 0x8266, 0x85FB, 0x85F9, 0x8611, 0x85FA, 0x8606, 0x860B, + 0x8607, 0x860A, 0x8814, 0x8815, 0x8964, 0x89BA, 0x89F8, 0x8B70, 0x8B6C, + 0x8B66, 0x8B6F, 0x8B5F, 0x8B6B, 0x8D0F, 0x8D0D, 0x8E89, 0x8E81, 0x8E85, + 0x8E82, 0x91B4, 0x91CB, 0x9418, 0x9403, 0x93FD, 0x95E1, 0x9730, 0x98C4, + 0x9952, 0x9951, 0x99A8, 0x9A2B, 0x9A30, 0x9A37, 0x9A35, 0x9C13, 0x9C0D, + 0x9E79, 0x9EB5, 0x9EE8, 0x9F2F, 0x9F5F, 0x9F63, 0x9F61, 0x5137, 0x5138, + 0x56C1, 0x56C0, 0x56C2, 0x5914, 0x5C6C, 0x5DCD, 0x61FC, 0x61FE, 0x651D, + 0x651C, 0x6595, 0x66E9, 0x6AFB, 0x6B04, 0x6AFA, 0x6BB2, 0x704C, 0x721B, + 0x72A7, 0x74D6, 0x74D4, 0x7669, 0x77D3, 0x7C50, 0x7E8F, 0x7E8C, 0x7FBC, + 0x8617, 0x862D, 0x861A, 0x8823, 0x8822, 0x8821, 0x881F, 0x896A, 0x896C, + 0x89BD, 0x8B74}, + {0x8B77, 0x8B7D, 0x8D13, 0x8E8A, 0x8E8D, 0x8E8B, 0x8F5F, 0x8FAF, 0x91BA, + 0x942E, 0x9433, 0x9435, 0x943A, 0x9438, 0x9432, 0x942B, 0x95E2, 0x9738, + 0x9739, 0x9732, 0x97FF, 0x9867, 0x9865, 0x9957, 0x9A45, 0x9A43, 0x9A40, + 0x9A3E, 0x9ACF, 0x9B54, 0x9B51, 0x9C2D, 0x9C25, 0x9DAF, 0x9DB4, 0x9DC2, + 0x9DB8, 0x9E9D, 0x9EEF, 0x9F19, 0x9F5C, 0x9F66, 0x9F67, 0x513C, 0x513B, + 0x56C8, 0x56CA, 0x56C9, 0x5B7F, 0x5DD4, 0x5DD2, 0x5F4E, 0x61FF, 0x6524, + 0x6B0A, 0x6B61, 0x7051, 0x7058, 0x7380, 0x74E4, 0x758A, 0x766E, 0x766C, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x79B3, 0x7C60, + 0x7C5F, 0x807E, 0x807D, 0x81DF, 0x8972, 0x896F, 0x89FC, 0x8B80, 0x8D16, + 0x8D17, 0x8E91, 0x8E93, 0x8F61, 0x9148, 0x9444, 0x9451, 0x9452, 0x973D, + 0x973E, 0x97C3, 0x97C1, 0x986B, 0x9955, 0x9A55, 0x9A4D, 0x9AD2, 0x9B1A, + 0x9C49, 0x9C31, 0x9C3E, 0x9C3B, 0x9DD3, 0x9DD7, 0x9F34, 0x9F6C, 0x9F6A, + 0x9F94, 0x56CC, 0x5DD6, 0x6200, 0x6523, 0x652B, 0x652A, 0x66EC, 0x6B10, + 0x74DA, 0x7ACA, 0x7C64, 0x7C63, 0x7C65, 0x7E93, 0x7E96, 0x7E94, 0x81E2, + 0x8638, 0x863F, 0x8831, 0x8B8A, 0x9090, 0x908F, 0x9463, 0x9460, 0x9464, + 0x9768, 0x986F, 0x995C, 0x9A5A, 0x9A5B, 0x9A57, 0x9AD3, 0x9AD4, 0x9AD1, + 0x9C54, 0x9C57, 0x9C56, 0x9DE5, 0x9E9F, 0x9EF4, 0x56D1, 0x58E9, 0x652C, + 0x705E, 0x7671, 0x7672, 0x77D7, 0x7F50, 0x7F88, 0x8836, 0x8839, 0x8862, + 0x8B93, 0x8B92}, + {0x8B96, 0x8277, 0x8D1B, 0x91C0, 0x946A, 0x9742, 0x9748, 0x9744, 0x97C6, + 0x9870, 0x9A5F, 0x9B22, 0x9B58, 0x9C5F, 0x9DF9, 0x9DFA, 0x9E7C, 0x9E7D, + 0x9F07, 0x9F77, 0x9F72, 0x5EF3, 0x6B16, 0x7063, 0x7C6C, 0x7C6E, 0x883B, + 0x89C0, 0x8EA1, 0x91C1, 0x9472, 0x9470, 0x9871, 0x995E, 0x9AD6, 0x9B23, + 0x9ECC, 0x7064, 0x77DA, 0x8B9A, 0x9477, 0x97C9, 0x9A62, 0x9A65, 0x7E9C, + 0x8B9C, 0x8EAA, 0x91C5, 0x947D, 0x947E, 0x947C, 0x9C77, 0x9C78, 0x9EF7, + 0x8C54, 0x947F, 0x9E1A, 0x7228, 0x9A6A, 0x9B31, 0x9E1B, 0x9E1E, 0x7C72, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x30FE, 0x309D, + 0x309E, 0x3005, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, + 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, + 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, + 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, + 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, + 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, + 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, + 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, + 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, + 0x3090, 0x3091, 0x3092, 0x3093, 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, + 0x30A6, 0x30A7}, + {0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, + 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, + 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, 0x30C1, 0x30C2, + 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, + 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, + 0x30D5, 0x30D6, 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, + 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x30E7, 0x30E8, + 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, + 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0414, 0x0415, 0x0401, 0x0416, + 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x0423, 0x0424, 0x0425, + 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, + 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, + 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x2460, 0x2461, + 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2474, + 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, + ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + {0x4E42, 0x4E5C, 0x51F5, 0x531A, 0x5382, 0x4E07, 0x4E0C, 0x4E47, 0x4E8D, + 0x56D7, 0xFA0C, 0x5C6E, 0x5F73, 0x4E0F, 0x5187, 0x4E0E, 0x4E2E, 0x4E93, + 0x4EC2, 0x4EC9, 0x4EC8, 0x5198, 0x52FC, 0x536C, 0x53B9, 0x5720, 0x5903, + 0x592C, 0x5C10, 0x5DFF, 0x65E1, 0x6BB3, 0x6BCC, 0x6C14, 0x723F, 0x4E31, + 0x4E3C, 0x4EE8, 0x4EDC, 0x4EE9, 0x4EE1, 0x4EDD, 0x4EDA, 0x520C, 0x531C, + 0x534C, 0x5722, 0x5723, 0x5917, 0x592F, 0x5B81, 0x5B84, 0x5C12, 0x5C3B, + 0x5C74, 0x5C73, 0x5E04, 0x5E80, 0x5E82, 0x5FC9, 0x6209, 0x6250, 0x6C15, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6C36, 0x6C43, + 0x6C3F, 0x6C3B, 0x72AE, 0x72B0, 0x738A, 0x79B8, 0x808A, 0x961E, 0x4F0E, + 0x4F18, 0x4F2C, 0x4EF5, 0x4F14, 0x4EF1, 0x4F00, 0x4EF7, 0x4F08, 0x4F1D, + 0x4F02, 0x4F05, 0x4F22, 0x4F13, 0x4F04, 0x4EF4, 0x4F12, 0x51B1, 0x5213, + 0x5209, 0x5210, 0x52A6, 0x5322, 0x531F, 0x534D, 0x538A, 0x5407, 0x56E1, + 0x56DF, 0x572E, 0x572A, 0x5734, 0x593C, 0x5980, 0x597C, 0x5985, 0x597B, + 0x597E, 0x5977, 0x597F, 0x5B56, 0x5C15, 0x5C25, 0x5C7C, 0x5C7A, 0x5C7B, + 0x5C7E, 0x5DDF, 0x5E75, 0x5E84, 0x5F02, 0x5F1A, 0x5F74, 0x5FD5, 0x5FD4, + 0x5FCF, 0x625C, 0x625E, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259, 0x6260, + 0x625A, 0x6265, 0x65EF, 0x65EE, 0x673E, 0x6739, 0x6738, 0x673B, 0x673A, + 0x673F, 0x673C, 0x6733, 0x6C18, 0x6C46, 0x6C52, 0x6C5C, 0x6C4F, 0x6C4A, + 0x6C54, 0x6C4B}, + {0x6C4C, 0x7071, 0x725E, 0x72B4, 0x72B5, 0x738E, 0x752A, 0x767F, 0x7A75, + 0x7F51, 0x8278, 0x827C, 0x8280, 0x827D, 0x827F, 0x864D, 0x897E, 0x9099, + 0x9097, 0x9098, 0x909B, 0x9094, 0x9622, 0x9624, 0x9620, 0x9623, 0x4F56, + 0x4F3B, 0x4F62, 0x4F49, 0x4F53, 0x4F64, 0x4F3E, 0x4F67, 0x4F52, 0x4F5F, + 0x4F41, 0x4F58, 0x4F2D, 0x4F33, 0x4F3F, 0x4F61, 0x518F, 0x51B9, 0x521C, + 0x521E, 0x5221, 0x52AD, 0x52AE, 0x5309, 0x5363, 0x5372, 0x538E, 0x538F, + 0x5430, 0x5437, 0x542A, 0x5454, 0x5445, 0x5419, 0x541C, 0x5425, 0x5418, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x543D, 0x544F, + 0x5441, 0x5428, 0x5424, 0x5447, 0x56EE, 0x56E7, 0x56E5, 0x5741, 0x5745, + 0x574C, 0x5749, 0x574B, 0x5752, 0x5906, 0x5940, 0x59A6, 0x5998, 0x59A0, + 0x5997, 0x598E, 0x59A2, 0x5990, 0x598F, 0x59A7, 0x59A1, 0x5B8E, 0x5B92, + 0x5C28, 0x5C2A, 0x5C8D, 0x5C8F, 0x5C88, 0x5C8B, 0x5C89, 0x5C92, 0x5C8A, + 0x5C86, 0x5C93, 0x5C95, 0x5DE0, 0x5E0A, 0x5E0E, 0x5E8B, 0x5E89, 0x5E8C, + 0x5E88, 0x5E8D, 0x5F05, 0x5F1D, 0x5F78, 0x5F76, 0x5FD2, 0x5FD1, 0x5FD0, + 0x5FED, 0x5FE8, 0x5FEE, 0x5FF3, 0x5FE1, 0x5FE4, 0x5FE3, 0x5FFA, 0x5FEF, + 0x5FF7, 0x5FFB, 0x6000, 0x5FF4, 0x623A, 0x6283, 0x628C, 0x628E, 0x628F, + 0x6294, 0x6287, 0x6271, 0x627B, 0x627A, 0x6270, 0x6281, 0x6288, 0x6277, + 0x627D, 0x6272, 0x6274, 0x6537, 0x65F0, 0x65F4, 0x65F3, 0x65F2, 0x65F5, + 0x6745, 0x6747}, + {0x6759, 0x6755, 0x674C, 0x6748, 0x675D, 0x674D, 0x675A, 0x674B, 0x6BD0, + 0x6C19, 0x6C1A, 0x6C78, 0x6C67, 0x6C6B, 0x6C84, 0x6C8B, 0x6C8F, 0x6C71, + 0x6C6F, 0x6C69, 0x6C9A, 0x6C6D, 0x6C87, 0x6C95, 0x6C9C, 0x6C66, 0x6C73, + 0x6C65, 0x6C7B, 0x6C8E, 0x7074, 0x707A, 0x7263, 0x72BF, 0x72BD, 0x72C3, + 0x72C6, 0x72C1, 0x72BA, 0x72C5, 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, + 0x753A, 0x7539, 0x7594, 0x7595, 0x7681, 0x793D, 0x8034, 0x8095, 0x8099, + 0x8090, 0x8092, 0x809C, 0x8290, 0x828F, 0x8285, 0x828E, 0x8291, 0x8293, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x828A, 0x8283, + 0x8284, 0x8C78, 0x8FC9, 0x8FBF, 0x909F, 0x90A1, 0x90A5, 0x909E, 0x90A7, + 0x90A0, 0x9630, 0x9628, 0x962F, 0x962D, 0x4E33, 0x4F98, 0x4F7C, 0x4F85, + 0x4F7D, 0x4F80, 0x4F87, 0x4F76, 0x4F74, 0x4F89, 0x4F84, 0x4F77, 0x4F4C, + 0x4F97, 0x4F6A, 0x4F9A, 0x4F79, 0x4F81, 0x4F78, 0x4F90, 0x4F9C, 0x4F94, + 0x4F9E, 0x4F92, 0x4F82, 0x4F95, 0x4F6B, 0x4F6E, 0x519E, 0x51BC, 0x51BE, + 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52BC, 0x530A, 0x530B, 0x533C, + 0x5392, 0x5394, 0x5487, 0x547F, 0x5481, 0x5491, 0x5482, 0x5488, 0x546B, + 0x547A, 0x547E, 0x5465, 0x546C, 0x5474, 0x5466, 0x548D, 0x546F, 0x5461, + 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56F7, 0x56F9, 0x576F, 0x5772, + 0x576D, 0x576B, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577B, 0x5773, + 0x5774, 0x5762}, + {0x5768, 0x577D, 0x590C, 0x5945, 0x59B5, 0x59BA, 0x59CF, 0x59CE, 0x59B2, + 0x59CC, 0x59C1, 0x59B6, 0x59BC, 0x59C3, 0x59D6, 0x59B1, 0x59BD, 0x59C0, + 0x59C8, 0x59B4, 0x59C7, 0x5B62, 0x5B65, 0x5B93, 0x5B95, 0x5C44, 0x5C47, + 0x5CAE, 0x5CA4, 0x5CA0, 0x5CB5, 0x5CAF, 0x5CA8, 0x5CAC, 0x5C9F, 0x5CA3, + 0x5CAD, 0x5CA2, 0x5CAA, 0x5CA7, 0x5C9D, 0x5CA5, 0x5CB6, 0x5CB0, 0x5CA6, + 0x5E17, 0x5E14, 0x5E19, 0x5F28, 0x5F22, 0x5F23, 0x5F24, 0x5F54, 0x5F82, + 0x5F7E, 0x5F7D, 0x5FDE, 0x5FE5, 0x602D, 0x6026, 0x6019, 0x6032, 0x600B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6034, 0x600A, + 0x6017, 0x6033, 0x601A, 0x601E, 0x602C, 0x6022, 0x600D, 0x6010, 0x602E, + 0x6013, 0x6011, 0x600C, 0x6009, 0x601C, 0x6214, 0x623D, 0x62AD, 0x62B4, + 0x62D1, 0x62BE, 0x62AA, 0x62B6, 0x62CA, 0x62AE, 0x62B3, 0x62AF, 0x62BB, + 0x62A9, 0x62B0, 0x62B8, 0x653D, 0x65A8, 0x65BB, 0x6609, 0x65FC, 0x6604, + 0x6612, 0x6608, 0x65FB, 0x6603, 0x660B, 0x660D, 0x6605, 0x65FD, 0x6611, + 0x6610, 0x66F6, 0x670A, 0x6785, 0x676C, 0x678E, 0x6792, 0x6776, 0x677B, + 0x6798, 0x6786, 0x6784, 0x6774, 0x678D, 0x678C, 0x677A, 0x679F, 0x6791, + 0x6799, 0x6783, 0x677D, 0x6781, 0x6778, 0x6779, 0x6794, 0x6B25, 0x6B80, + 0x6B7E, 0x6BDE, 0x6C1D, 0x6C93, 0x6CEC, 0x6CEB, 0x6CEE, 0x6CD9, 0x6CB6, + 0x6CD4, 0x6CAD, 0x6CE7, 0x6CB7, 0x6CD0, 0x6CC2, 0x6CBA, 0x6CC3, 0x6CC6, + 0x6CED, 0x6CF2}, + {0x6CD2, 0x6CDD, 0x6CB4, 0x6C8A, 0x6C9D, 0x6C80, 0x6CDE, 0x6CC0, 0x6D30, + 0x6CCD, 0x6CC7, 0x6CB0, 0x6CF9, 0x6CCF, 0x6CE9, 0x6CD1, 0x7094, 0x7098, + 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082, 0x709A, 0x7083, + 0x726A, 0x72D6, 0x72CB, 0x72D8, 0x72C9, 0x72DC, 0x72D2, 0x72D4, 0x72DA, + 0x72CC, 0x72D1, 0x73A4, 0x73A1, 0x73AD, 0x73A6, 0x73A2, 0x73A0, 0x73AC, + 0x739D, 0x74DD, 0x74E8, 0x753F, 0x7540, 0x753E, 0x758C, 0x7598, 0x76AF, + 0x76F3, 0x76F1, 0x76F0, 0x76F5, 0x77F8, 0x77FC, 0x77F9, 0x77FB, 0x77FA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x77F7, 0x7942, + 0x793F, 0x79C5, 0x7A78, 0x7A7B, 0x7AFB, 0x7C75, 0x7CFD, 0x8035, 0x808F, + 0x80AE, 0x80A3, 0x80B8, 0x80B5, 0x80AD, 0x8220, 0x82A0, 0x82C0, 0x82AB, + 0x829A, 0x8298, 0x829B, 0x82B5, 0x82A7, 0x82AE, 0x82BC, 0x829E, 0x82BA, + 0x82B4, 0x82A8, 0x82A1, 0x82A9, 0x82C2, 0x82A4, 0x82C3, 0x82B6, 0x82A2, + 0x8670, 0x866F, 0x866D, 0x866E, 0x8C56, 0x8FD2, 0x8FCB, 0x8FD3, 0x8FCD, + 0x8FD6, 0x8FD5, 0x8FD7, 0x90B2, 0x90B4, 0x90AF, 0x90B3, 0x90B0, 0x9639, + 0x963D, 0x963C, 0x963A, 0x9643, 0x4FCD, 0x4FC5, 0x4FD3, 0x4FB2, 0x4FC9, + 0x4FCB, 0x4FC1, 0x4FD4, 0x4FDC, 0x4FD9, 0x4FBB, 0x4FB3, 0x4FDB, 0x4FC7, + 0x4FD6, 0x4FBA, 0x4FC0, 0x4FB9, 0x4FEC, 0x5244, 0x5249, 0x52C0, 0x52C2, + 0x533D, 0x537C, 0x5397, 0x5396, 0x5399, 0x5398, 0x54BA, 0x54A1, 0x54AD, + 0x54A5, 0x54CF}, + {0x54C3, 0x830D, 0x54B7, 0x54AE, 0x54D6, 0x54B6, 0x54C5, 0x54C6, 0x54A0, + 0x5470, 0x54BC, 0x54A2, 0x54BE, 0x5472, 0x54DE, 0x54B0, 0x57B5, 0x579E, + 0x579F, 0x57A4, 0x578C, 0x5797, 0x579D, 0x579B, 0x5794, 0x5798, 0x578F, + 0x5799, 0x57A5, 0x579A, 0x5795, 0x58F4, 0x590D, 0x5953, 0x59E1, 0x59DE, + 0x59EE, 0x5A00, 0x59F1, 0x59DD, 0x59FA, 0x59FD, 0x59FC, 0x59F6, 0x59E4, + 0x59F2, 0x59F7, 0x59DB, 0x59E9, 0x59F3, 0x59F5, 0x59E0, 0x59FE, 0x59F4, + 0x59ED, 0x5BA8, 0x5C4C, 0x5CD0, 0x5CD8, 0x5CCC, 0x5CD7, 0x5CCB, 0x5CDB, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5CDE, 0x5CDA, + 0x5CC9, 0x5CC7, 0x5CCA, 0x5CD6, 0x5CD3, 0x5CD4, 0x5CCF, 0x5CC8, 0x5CC6, + 0x5CCE, 0x5CDF, 0x5CF8, 0x5DF9, 0x5E21, 0x5E22, 0x5E23, 0x5E20, 0x5E24, + 0x5EB0, 0x5EA4, 0x5EA2, 0x5E9B, 0x5EA3, 0x5EA5, 0x5F07, 0x5F2E, 0x5F56, + 0x5F86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605E, 0x6045, 0x6053, 0x6047, + 0x6049, 0x605B, 0x604C, 0x6040, 0x6042, 0x605F, 0x6024, 0x6044, 0x6058, + 0x6066, 0x606E, 0x6242, 0x6243, 0x62CF, 0x630D, 0x630B, 0x62F5, 0x630E, + 0x6303, 0x62EB, 0x62F9, 0x630F, 0x630C, 0x62F8, 0x62F6, 0x6300, 0x6313, + 0x6314, 0x62FA, 0x6315, 0x62FB, 0x62F0, 0x6541, 0x6543, 0x65AA, 0x65BF, + 0x6636, 0x6621, 0x6632, 0x6635, 0x661C, 0x6626, 0x6622, 0x6633, 0x662B, + 0x663A, 0x661D, 0x6634, 0x6639, 0x662E, 0x670F, 0x6710, 0x67C1, 0x67F2, + 0x67C8, 0x67BA}, + {0x67DC, 0x67BB, 0x67F8, 0x67D8, 0x67C0, 0x67B7, 0x67C5, 0x67EB, 0x67E4, + 0x67DF, 0x67B5, 0x67CD, 0x67B3, 0x67F7, 0x67F6, 0x67EE, 0x67E3, 0x67C2, + 0x67B9, 0x67CE, 0x67E7, 0x67F0, 0x67B2, 0x67FC, 0x67C6, 0x67ED, 0x67CC, + 0x67AE, 0x67E6, 0x67DB, 0x67FA, 0x67C9, 0x67CA, 0x67C3, 0x67EA, 0x67CB, + 0x6B28, 0x6B82, 0x6B84, 0x6BB6, 0x6BD6, 0x6BD8, 0x6BE0, 0x6C20, 0x6C21, + 0x6D28, 0x6D34, 0x6D2D, 0x6D1F, 0x6D3C, 0x6D3F, 0x6D12, 0x6D0A, 0x6CDA, + 0x6D33, 0x6D04, 0x6D19, 0x6D3A, 0x6D1A, 0x6D11, 0x6D00, 0x6D1D, 0x6D42, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6D01, 0x6D18, + 0x6D37, 0x6D03, 0x6D0F, 0x6D40, 0x6D07, 0x6D20, 0x6D2C, 0x6D08, 0x6D22, + 0x6D09, 0x6D10, 0x70B7, 0x709F, 0x70BE, 0x70B1, 0x70B0, 0x70A1, 0x70B4, + 0x70B5, 0x70A9, 0x7241, 0x7249, 0x724A, 0x726C, 0x7270, 0x7273, 0x726E, + 0x72CA, 0x72E4, 0x72E8, 0x72EB, 0x72DF, 0x72EA, 0x72E6, 0x72E3, 0x7385, + 0x73CC, 0x73C2, 0x73C8, 0x73C5, 0x73B9, 0x73B6, 0x73B5, 0x73B4, 0x73EB, + 0x73BF, 0x73C7, 0x73BE, 0x73C3, 0x73C6, 0x73B8, 0x73CB, 0x74EC, 0x74EE, + 0x752E, 0x7547, 0x7548, 0x75A7, 0x75AA, 0x7679, 0x76C4, 0x7708, 0x7703, + 0x7704, 0x7705, 0x770A, 0x76F7, 0x76FB, 0x76FA, 0x77E7, 0x77E8, 0x7806, + 0x7811, 0x7812, 0x7805, 0x7810, 0x780F, 0x780E, 0x7809, 0x7803, 0x7813, + 0x794A, 0x794C, 0x794B, 0x7945, 0x7944, 0x79D5, 0x79CD, 0x79CF, 0x79D6, + 0x79CE, 0x7A80}, + {0x7A7E, 0x7AD1, 0x7B00, 0x7B01, 0x7C7A, 0x7C78, 0x7C79, 0x7C7F, 0x7C80, + 0x7C81, 0x7D03, 0x7D08, 0x7D01, 0x7F58, 0x7F91, 0x7F8D, 0x7FBE, 0x8007, + 0x800E, 0x800F, 0x8014, 0x8037, 0x80D8, 0x80C7, 0x80E0, 0x80D1, 0x80C8, + 0x80C2, 0x80D0, 0x80C5, 0x80E3, 0x80D9, 0x80DC, 0x80CA, 0x80D5, 0x80C9, + 0x80CF, 0x80D7, 0x80E6, 0x80CD, 0x81FF, 0x8221, 0x8294, 0x82D9, 0x82FE, + 0x82F9, 0x8307, 0x82E8, 0x8300, 0x82D5, 0x833A, 0x82EB, 0x82D6, 0x82F4, + 0x82EC, 0x82E1, 0x82F2, 0x82F5, 0x830C, 0x82FB, 0x82F6, 0x82F0, 0x82EA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x82E4, 0x82E0, + 0x82FA, 0x82F3, 0x82ED, 0x8677, 0x8674, 0x867C, 0x8673, 0x8841, 0x884E, + 0x8867, 0x886A, 0x8869, 0x89D3, 0x8A04, 0x8A07, 0x8D72, 0x8FE3, 0x8FE1, + 0x8FEE, 0x8FE0, 0x90F1, 0x90BD, 0x90BF, 0x90D5, 0x90C5, 0x90BE, 0x90C7, + 0x90CB, 0x90C8, 0x91D4, 0x91D3, 0x9654, 0x964F, 0x9651, 0x9653, 0x964A, + 0x964E, 0x501E, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501B, 0x4FF5, + 0x4FF4, 0x5033, 0x5037, 0x502C, 0x4FF6, 0x4FF7, 0x5017, 0x501C, 0x5020, + 0x5027, 0x5035, 0x502F, 0x5031, 0x500E, 0x515A, 0x5194, 0x5193, 0x51CA, + 0x51C4, 0x51C5, 0x51C8, 0x51CE, 0x5261, 0x525A, 0x5252, 0x525E, 0x525F, + 0x5255, 0x5262, 0x52CD, 0x530E, 0x539E, 0x5526, 0x54E2, 0x5517, 0x5512, + 0x54E7, 0x54F3, 0x54E4, 0x551A, 0x54FF, 0x5504, 0x5508, 0x54EB, 0x5511, + 0x5505, 0x54F1}, + {0x550A, 0x54FB, 0x54F7, 0x54F8, 0x54E0, 0x550E, 0x5503, 0x550B, 0x5701, + 0x5702, 0x57CC, 0x5832, 0x57D5, 0x57D2, 0x57BA, 0x57C6, 0x57BD, 0x57BC, + 0x57B8, 0x57B6, 0x57BF, 0x57C7, 0x57D0, 0x57B9, 0x57C1, 0x590E, 0x594A, + 0x5A19, 0x5A16, 0x5A2D, 0x5A2E, 0x5A15, 0x5A0F, 0x5A17, 0x5A0A, 0x5A1E, + 0x5A33, 0x5B6C, 0x5BA7, 0x5BAD, 0x5BAC, 0x5C03, 0x5C56, 0x5C54, 0x5CEC, + 0x5CFF, 0x5CEE, 0x5CF1, 0x5CF7, 0x5D00, 0x5CF9, 0x5E29, 0x5E28, 0x5EA8, + 0x5EAE, 0x5EAA, 0x5EAC, 0x5F33, 0x5F30, 0x5F67, 0x605D, 0x605A, 0x6067, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6041, 0x60A2, + 0x6088, 0x6080, 0x6092, 0x6081, 0x609D, 0x6083, 0x6095, 0x609B, 0x6097, + 0x6087, 0x609C, 0x608E, 0x6219, 0x6246, 0x62F2, 0x6310, 0x6356, 0x632C, + 0x6344, 0x6345, 0x6336, 0x6343, 0x63E4, 0x6339, 0x634B, 0x634A, 0x633C, + 0x6329, 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632D, 0x6347, 0x6333, + 0x635A, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654A, 0x6546, 0x65C6, + 0x65C3, 0x65C4, 0x65C2, 0x664A, 0x665F, 0x6647, 0x6651, 0x6712, 0x6713, + 0x681F, 0x681A, 0x6849, 0x6832, 0x6833, 0x683B, 0x684B, 0x684F, 0x6816, + 0x6831, 0x681C, 0x6835, 0x682B, 0x682D, 0x682F, 0x684E, 0x6844, 0x6834, + 0x681D, 0x6812, 0x6814, 0x6826, 0x6828, 0x682E, 0x684D, 0x683A, 0x6825, + 0x6820, 0x6B2C, 0x6B2F, 0x6B2D, 0x6B31, 0x6B34, 0x6B6D, 0x8082, 0x6B88, + 0x6BE6, 0x6BE4}, + {0x6BE8, 0x6BE3, 0x6BE2, 0x6BE7, 0x6C25, 0x6D7A, 0x6D63, 0x6D64, 0x6D76, + 0x6D0D, 0x6D61, 0x6D92, 0x6D58, 0x6D62, 0x6D6D, 0x6D6F, 0x6D91, 0x6D8D, + 0x6DEF, 0x6D7F, 0x6D86, 0x6D5E, 0x6D67, 0x6D60, 0x6D97, 0x6D70, 0x6D7C, + 0x6D5F, 0x6D82, 0x6D98, 0x6D2F, 0x6D68, 0x6D8B, 0x6D7E, 0x6D80, 0x6D84, + 0x6D16, 0x6D83, 0x6D7B, 0x6D7D, 0x6D75, 0x6D90, 0x70DC, 0x70D3, 0x70D1, + 0x70DD, 0x70CB, 0x7F39, 0x70E2, 0x70D7, 0x70D2, 0x70DE, 0x70E0, 0x70D4, + 0x70CD, 0x70C5, 0x70C6, 0x70C7, 0x70DA, 0x70CE, 0x70E1, 0x7242, 0x7278, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7277, 0x7276, + 0x7300, 0x72FA, 0x72F4, 0x72FE, 0x72F6, 0x72F3, 0x72FB, 0x7301, 0x73D3, + 0x73D9, 0x73E5, 0x73D6, 0x73BC, 0x73E7, 0x73E3, 0x73E9, 0x73DC, 0x73D2, + 0x73DB, 0x73D4, 0x73DD, 0x73DA, 0x73D7, 0x73D8, 0x73E8, 0x74DE, 0x74DF, + 0x74F4, 0x74F5, 0x7521, 0x755B, 0x755F, 0x75B0, 0x75C1, 0x75BB, 0x75C4, + 0x75C0, 0x75BF, 0x75B6, 0x75BA, 0x768A, 0x76C9, 0x771D, 0x771B, 0x7710, + 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771A, 0x7722, 0x7727, + 0x7823, 0x782C, 0x7822, 0x7835, 0x782F, 0x7828, 0x782E, 0x782B, 0x7821, + 0x7829, 0x7833, 0x782A, 0x7831, 0x7954, 0x795B, 0x794F, 0x795C, 0x7953, + 0x7952, 0x7951, 0x79EB, 0x79EC, 0x79E0, 0x79EE, 0x79ED, 0x79EA, 0x79DC, + 0x79DE, 0x79DD, 0x7A86, 0x7A89, 0x7A85, 0x7A8B, 0x7A8C, 0x7A8A, 0x7A87, + 0x7AD8, 0x7B10}, + {0x7B04, 0x7B13, 0x7B05, 0x7B0F, 0x7B08, 0x7B0A, 0x7B0E, 0x7B09, 0x7B12, + 0x7C84, 0x7C91, 0x7C8A, 0x7C8C, 0x7C88, 0x7C8D, 0x7C85, 0x7D1E, 0x7D1D, + 0x7D11, 0x7D0E, 0x7D18, 0x7D16, 0x7D13, 0x7D1F, 0x7D12, 0x7D0F, 0x7D0C, + 0x7F5C, 0x7F61, 0x7F5E, 0x7F60, 0x7F5D, 0x7F5B, 0x7F96, 0x7F92, 0x7FC3, + 0x7FC2, 0x7FC0, 0x8016, 0x803E, 0x8039, 0x80FA, 0x80F2, 0x80F9, 0x80F5, + 0x8101, 0x80FB, 0x8100, 0x8201, 0x822F, 0x8225, 0x8333, 0x832D, 0x8344, + 0x8319, 0x8351, 0x8325, 0x8356, 0x833F, 0x8341, 0x8326, 0x831C, 0x8322, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8342, 0x834E, + 0x831B, 0x832A, 0x8308, 0x833C, 0x834D, 0x8316, 0x8324, 0x8320, 0x8337, + 0x832F, 0x8329, 0x8347, 0x8345, 0x834C, 0x8353, 0x831E, 0x832C, 0x834B, + 0x8327, 0x8348, 0x8653, 0x8652, 0x86A2, 0x86A8, 0x8696, 0x868D, 0x8691, + 0x869E, 0x8687, 0x8697, 0x8686, 0x868B, 0x869A, 0x8685, 0x86A5, 0x8699, + 0x86A1, 0x86A7, 0x8695, 0x8698, 0x868E, 0x869D, 0x8690, 0x8694, 0x8843, + 0x8844, 0x886D, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887F, 0x886F, + 0x8883, 0x887E, 0x8874, 0x887C, 0x8A12, 0x8C47, 0x8C57, 0x8C7B, 0x8CA4, + 0x8CA3, 0x8D76, 0x8D78, 0x8DB5, 0x8DB7, 0x8DB6, 0x8ED1, 0x8ED3, 0x8FFE, + 0x8FF5, 0x9002, 0x8FFF, 0x8FFB, 0x9004, 0x8FFC, 0x8FF6, 0x90D6, 0x90E0, + 0x90D9, 0x90DA, 0x90E3, 0x90DF, 0x90E5, 0x90D8, 0x90DB, 0x90D7, 0x90DC, + 0x90E4, 0x9150}, + {0x914E, 0x914F, 0x91D5, 0x91E2, 0x91DA, 0x965C, 0x965F, 0x96BC, 0x98E3, + 0x9ADF, 0x9B2F, 0x4E7F, 0x5070, 0x506A, 0x5061, 0x505E, 0x5060, 0x5053, + 0x504B, 0x505D, 0x5072, 0x5048, 0x504D, 0x5041, 0x505B, 0x504A, 0x5062, + 0x5015, 0x5045, 0x505F, 0x5069, 0x506B, 0x5063, 0x5064, 0x5046, 0x5040, + 0x506E, 0x5073, 0x5057, 0x5051, 0x51D0, 0x526B, 0x526D, 0x526C, 0x526E, + 0x52D6, 0x52D3, 0x532D, 0x539C, 0x5575, 0x5576, 0x553C, 0x554D, 0x5550, + 0x5534, 0x552A, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x550C, 0x5532, + 0x5565, 0x554E, 0x5539, 0x5548, 0x552D, 0x553B, 0x5540, 0x554B, 0x570A, + 0x5707, 0x57FB, 0x5814, 0x57E2, 0x57F6, 0x57DC, 0x57F4, 0x5800, 0x57ED, + 0x57FD, 0x5808, 0x57F8, 0x580B, 0x57F3, 0x57CF, 0x5807, 0x57EE, 0x57E3, + 0x57F2, 0x57E5, 0x57EC, 0x57E1, 0x580E, 0x57FC, 0x5810, 0x57E7, 0x5801, + 0x580C, 0x57F1, 0x57E9, 0x57F0, 0x580D, 0x5804, 0x595C, 0x5A60, 0x5A58, + 0x5A55, 0x5A67, 0x5A5E, 0x5A38, 0x5A35, 0x5A6D, 0x5A50, 0x5A5F, 0x5A65, + 0x5A6C, 0x5A53, 0x5A64, 0x5A57, 0x5A43, 0x5A5D, 0x5A52, 0x5A44, 0x5A5B, + 0x5A48, 0x5A8E, 0x5A3E, 0x5A4D, 0x5A39, 0x5A4C, 0x5A70, 0x5A69, 0x5A47, + 0x5A51, 0x5A56, 0x5A42, 0x5A5C, 0x5B72, 0x5B6E, 0x5BC1, 0x5BC0, 0x5C59, + 0x5D1E, 0x5D0B, 0x5D1D, 0x5D1A, 0x5D20, 0x5D0C, 0x5D28, 0x5D0D, 0x5D26, + 0x5D25, 0x5D0F}, + {0x5D30, 0x5D12, 0x5D23, 0x5D1F, 0x5D2E, 0x5E3E, 0x5E34, 0x5EB1, 0x5EB4, + 0x5EB9, 0x5EB2, 0x5EB3, 0x5F36, 0x5F38, 0x5F9B, 0x5F96, 0x5F9F, 0x608A, + 0x6090, 0x6086, 0x60BE, 0x60B0, 0x60BA, 0x60D3, 0x60D4, 0x60CF, 0x60E4, + 0x60D9, 0x60DD, 0x60C8, 0x60B1, 0x60DB, 0x60B7, 0x60CA, 0x60BF, 0x60C3, + 0x60CD, 0x60C0, 0x6332, 0x6365, 0x638A, 0x6382, 0x637D, 0x63BD, 0x639E, + 0x63AD, 0x639D, 0x6397, 0x63AB, 0x638E, 0x636F, 0x6387, 0x6390, 0x636E, + 0x63AF, 0x6375, 0x639C, 0x636D, 0x63AE, 0x637C, 0x63A4, 0x633B, 0x639F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6378, 0x6385, + 0x6381, 0x6391, 0x638D, 0x6370, 0x6553, 0x65CD, 0x6665, 0x6661, 0x665B, + 0x6659, 0x665C, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890, 0x689C, 0x686D, + 0x686E, 0x68AE, 0x68AB, 0x6956, 0x686F, 0x68A3, 0x68AC, 0x68A9, 0x6875, + 0x6874, 0x68B2, 0x688F, 0x6877, 0x6892, 0x687C, 0x686B, 0x6872, 0x68AA, + 0x6880, 0x6871, 0x687E, 0x689B, 0x6896, 0x688B, 0x68A0, 0x6889, 0x68A4, + 0x6878, 0x687B, 0x6891, 0x688C, 0x688A, 0x687D, 0x6B36, 0x6B33, 0x6B37, + 0x6B38, 0x6B91, 0x6B8F, 0x6B8D, 0x6B8E, 0x6B8C, 0x6C2A, 0x6DC0, 0x6DAB, + 0x6DB4, 0x6DB3, 0x6E74, 0x6DAC, 0x6DE9, 0x6DE2, 0x6DB7, 0x6DF6, 0x6DD4, + 0x6E00, 0x6DC8, 0x6DE0, 0x6DDF, 0x6DD6, 0x6DBE, 0x6DE5, 0x6DDC, 0x6DDD, + 0x6DDB, 0x6DF4, 0x6DCA, 0x6DBD, 0x6DED, 0x6DF0, 0x6DBA, 0x6DD5, 0x6DC2, + 0x6DCF, 0x6DC9}, + {0x6DD0, 0x6DF2, 0x6DD3, 0x6DFD, 0x6DD7, 0x6DCD, 0x6DE3, 0x6DBB, 0x70FA, + 0x710D, 0x70F7, 0x7117, 0x70F4, 0x710C, 0x70F0, 0x7104, 0x70F3, 0x7110, + 0x70FC, 0x70FF, 0x7106, 0x7113, 0x7100, 0x70F8, 0x70F6, 0x710B, 0x7102, + 0x710E, 0x727E, 0x727B, 0x727C, 0x727F, 0x731D, 0x7317, 0x7307, 0x7311, + 0x7318, 0x730A, 0x7308, 0x72FF, 0x730F, 0x731E, 0x7388, 0x73F6, 0x73F8, + 0x73F5, 0x7404, 0x7401, 0x73FD, 0x7407, 0x7400, 0x73FA, 0x73FC, 0x73FF, + 0x740C, 0x740B, 0x73F4, 0x7408, 0x7564, 0x7563, 0x75CE, 0x75D2, 0x75CF, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x75CB, 0x75CC, + 0x75D1, 0x75D0, 0x768F, 0x7689, 0x76D3, 0x7739, 0x772F, 0x772D, 0x7731, + 0x7732, 0x7734, 0x7733, 0x773D, 0x7725, 0x773B, 0x7735, 0x7848, 0x7852, + 0x7849, 0x784D, 0x784A, 0x784C, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, + 0x7969, 0x796A, 0x7963, 0x796B, 0x7961, 0x79BB, 0x79FA, 0x79F8, 0x79F6, + 0x79F7, 0x7A8F, 0x7A94, 0x7A90, 0x7B35, 0x7B47, 0x7B34, 0x7B25, 0x7B30, + 0x7B22, 0x7B24, 0x7B33, 0x7B18, 0x7B2A, 0x7B1D, 0x7B31, 0x7B2B, 0x7B2D, + 0x7B2F, 0x7B32, 0x7B38, 0x7B1A, 0x7B23, 0x7C94, 0x7C98, 0x7C96, 0x7CA3, + 0x7D35, 0x7D3D, 0x7D38, 0x7D36, 0x7D3A, 0x7D45, 0x7D2C, 0x7D29, 0x7D41, + 0x7D47, 0x7D3E, 0x7D3F, 0x7D4A, 0x7D3B, 0x7D28, 0x7F63, 0x7F95, 0x7F9C, + 0x7F9D, 0x7F9B, 0x7FCA, 0x7FCB, 0x7FCD, 0x7FD0, 0x7FD1, 0x7FC7, 0x7FCF, + 0x7FC9, 0x801F}, + {0x801E, 0x801B, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, 0x811B, + 0x812D, 0x811F, 0x812C, 0x811E, 0x8121, 0x8115, 0x8127, 0x811D, 0x8122, + 0x8211, 0x8238, 0x8233, 0x823A, 0x8234, 0x8232, 0x8274, 0x8390, 0x83A3, + 0x83A8, 0x838D, 0x837A, 0x8373, 0x83A4, 0x8374, 0x838F, 0x8381, 0x8395, + 0x8399, 0x8375, 0x8394, 0x83A9, 0x837D, 0x8383, 0x838C, 0x839D, 0x839B, + 0x83AA, 0x838B, 0x837E, 0x83A5, 0x83AF, 0x8388, 0x8397, 0x83B0, 0x837F, + 0x83A6, 0x8387, 0x83AE, 0x8376, 0x839A, 0x8659, 0x8656, 0x86BF, 0x86B7, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x86C2, 0x86C1, + 0x86C5, 0x86BA, 0x86B0, 0x86C8, 0x86B9, 0x86B3, 0x86B8, 0x86CC, 0x86B4, + 0x86BB, 0x86BC, 0x86C3, 0x86BD, 0x86BE, 0x8852, 0x8889, 0x8895, 0x88A8, + 0x88A2, 0x88AA, 0x889A, 0x8891, 0x88A1, 0x889F, 0x8898, 0x88A7, 0x8899, + 0x889B, 0x8897, 0x88A4, 0x88AC, 0x888C, 0x8893, 0x888E, 0x8982, 0x89D6, + 0x89D9, 0x89D5, 0x8A30, 0x8A27, 0x8A2C, 0x8A1E, 0x8C39, 0x8C3B, 0x8C5C, + 0x8C5D, 0x8C7D, 0x8CA5, 0x8D7D, 0x8D7B, 0x8D79, 0x8DBC, 0x8DC2, 0x8DB9, + 0x8DBF, 0x8DC1, 0x8ED8, 0x8EDE, 0x8EDD, 0x8EDC, 0x8ED7, 0x8EE0, 0x8EE1, + 0x9024, 0x900B, 0x9011, 0x901C, 0x900C, 0x9021, 0x90EF, 0x90EA, 0x90F0, + 0x90F4, 0x90F2, 0x90F3, 0x90D4, 0x90EB, 0x90EC, 0x90E9, 0x9156, 0x9158, + 0x915A, 0x9153, 0x9155, 0x91EC, 0x91F4, 0x91F1, 0x91F3, 0x91F8, 0x91E4, + 0x91F9, 0x91EA}, + {0x91EB, 0x91F7, 0x91E8, 0x91EE, 0x957A, 0x9586, 0x9588, 0x967C, 0x966D, + 0x966B, 0x9671, 0x966F, 0x96BF, 0x976A, 0x9804, 0x98E5, 0x9997, 0x509B, + 0x5095, 0x5094, 0x509E, 0x508B, 0x50A3, 0x5083, 0x508C, 0x508E, 0x509D, + 0x5068, 0x509C, 0x5092, 0x5082, 0x5087, 0x515F, 0x51D4, 0x5312, 0x5311, + 0x53A4, 0x53A7, 0x5591, 0x55A8, 0x55A5, 0x55AD, 0x5577, 0x5645, 0x55A2, + 0x5593, 0x5588, 0x558F, 0x55B5, 0x5581, 0x55A3, 0x5592, 0x55A4, 0x557D, + 0x558C, 0x55A6, 0x557F, 0x5595, 0x55A1, 0x558E, 0x570C, 0x5829, 0x5837, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5819, 0x581E, + 0x5827, 0x5823, 0x5828, 0x57F5, 0x5848, 0x5825, 0x581C, 0x581B, 0x5833, + 0x583F, 0x5836, 0x582E, 0x5839, 0x5838, 0x582D, 0x582C, 0x583B, 0x5961, + 0x5AAF, 0x5A94, 0x5A9F, 0x5A7A, 0x5AA2, 0x5A9E, 0x5A78, 0x5AA6, 0x5A7C, + 0x5AA5, 0x5AAC, 0x5A95, 0x5AAE, 0x5A37, 0x5A84, 0x5A8A, 0x5A97, 0x5A83, + 0x5A8B, 0x5AA9, 0x5A7B, 0x5A7D, 0x5A8C, 0x5A9C, 0x5A8F, 0x5A93, 0x5A9D, + 0x5BEA, 0x5BCD, 0x5BCB, 0x5BD4, 0x5BD1, 0x5BCA, 0x5BCE, 0x5C0C, 0x5C30, + 0x5D37, 0x5D43, 0x5D6B, 0x5D41, 0x5D4B, 0x5D3F, 0x5D35, 0x5D51, 0x5D4E, + 0x5D55, 0x5D33, 0x5D3A, 0x5D52, 0x5D3D, 0x5D31, 0x5D59, 0x5D42, 0x5D39, + 0x5D49, 0x5D38, 0x5D3C, 0x5D32, 0x5D36, 0x5D40, 0x5D45, 0x5E44, 0x5E41, + 0x5F58, 0x5FA6, 0x5FA5, 0x5FAB, 0x60C9, 0x60B9, 0x60CC, 0x60E2, 0x60CE, + 0x60C4, 0x6114}, + {0x60F2, 0x610A, 0x6116, 0x6105, 0x60F5, 0x6113, 0x60F8, 0x60FC, 0x60FE, + 0x60C1, 0x6103, 0x6118, 0x611D, 0x6110, 0x60FF, 0x6104, 0x610B, 0x624A, + 0x6394, 0x63B1, 0x63B0, 0x63CE, 0x63E5, 0x63E8, 0x63EF, 0x63C3, 0x649D, + 0x63F3, 0x63CA, 0x63E0, 0x63F6, 0x63D5, 0x63F2, 0x63F5, 0x6461, 0x63DF, + 0x63BE, 0x63DD, 0x63DC, 0x63C4, 0x63D8, 0x63D3, 0x63C2, 0x63C7, 0x63CC, + 0x63CB, 0x63C8, 0x63F0, 0x63D7, 0x63D9, 0x6532, 0x6567, 0x656A, 0x6564, + 0x655C, 0x6568, 0x6565, 0x658C, 0x659D, 0x659E, 0x65AE, 0x65D0, 0x65D2, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x667C, 0x666C, + 0x667B, 0x6680, 0x6671, 0x6679, 0x666A, 0x6672, 0x6701, 0x690C, 0x68D3, + 0x6904, 0x68DC, 0x692A, 0x68EC, 0x68EA, 0x68F1, 0x690F, 0x68D6, 0x68F7, + 0x68EB, 0x68E4, 0x68F6, 0x6913, 0x6910, 0x68F3, 0x68E1, 0x6907, 0x68CC, + 0x6908, 0x6970, 0x68B4, 0x6911, 0x68EF, 0x68C6, 0x6914, 0x68F8, 0x68D0, + 0x68FD, 0x68FC, 0x68E8, 0x690B, 0x690A, 0x6917, 0x68CE, 0x68C8, 0x68DD, + 0x68DE, 0x68E6, 0x68F4, 0x68D1, 0x6906, 0x68D4, 0x68E9, 0x6915, 0x6925, + 0x68C7, 0x6B39, 0x6B3B, 0x6B3F, 0x6B3C, 0x6B94, 0x6B97, 0x6B99, 0x6B95, + 0x6BBD, 0x6BF0, 0x6BF2, 0x6BF3, 0x6C30, 0x6DFC, 0x6E46, 0x6E47, 0x6E1F, + 0x6E49, 0x6E88, 0x6E3C, 0x6E3D, 0x6E45, 0x6E62, 0x6E2B, 0x6E3F, 0x6E41, + 0x6E5D, 0x6E73, 0x6E1C, 0x6E33, 0x6E4B, 0x6E40, 0x6E51, 0x6E3B, 0x6E03, + 0x6E2E, 0x6E5E}, + {0x6E68, 0x6E5C, 0x6E61, 0x6E31, 0x6E28, 0x6E60, 0x6E71, 0x6E6B, 0x6E39, + 0x6E22, 0x6E30, 0x6E53, 0x6E65, 0x6E27, 0x6E78, 0x6E64, 0x6E77, 0x6E55, + 0x6E79, 0x6E52, 0x6E66, 0x6E35, 0x6E36, 0x6E5A, 0x7120, 0x711E, 0x712F, + 0x70FB, 0x712E, 0x7131, 0x7123, 0x7125, 0x7122, 0x7132, 0x711F, 0x7128, + 0x713A, 0x711B, 0x724B, 0x725A, 0x7288, 0x7289, 0x7286, 0x7285, 0x728B, + 0x7312, 0x730B, 0x7330, 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732D, + 0x7326, 0x7323, 0x7335, 0x730C, 0x742E, 0x742C, 0x7430, 0x742B, 0x7416, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x741A, 0x7421, + 0x742D, 0x7431, 0x7424, 0x7423, 0x741D, 0x7429, 0x7420, 0x7432, 0x74FB, + 0x752F, 0x756F, 0x756C, 0x75E7, 0x75DA, 0x75E1, 0x75E6, 0x75DD, 0x75DF, + 0x75E4, 0x75D7, 0x7695, 0x7692, 0x76DA, 0x7746, 0x7747, 0x7744, 0x774D, + 0x7745, 0x774A, 0x774E, 0x774B, 0x774C, 0x77DE, 0x77EC, 0x7860, 0x7864, + 0x7865, 0x785C, 0x786D, 0x7871, 0x786A, 0x786E, 0x7870, 0x7869, 0x7868, + 0x785E, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7A02, 0x7A0A, 0x7A03, + 0x7A0C, 0x7A04, 0x7A99, 0x7AE6, 0x7AE4, 0x7B4A, 0x7B3B, 0x7B44, 0x7B48, + 0x7B4C, 0x7B4E, 0x7B40, 0x7B58, 0x7B45, 0x7CA2, 0x7C9E, 0x7CA8, 0x7CA1, + 0x7D58, 0x7D6F, 0x7D63, 0x7D53, 0x7D56, 0x7D67, 0x7D6A, 0x7D4F, 0x7D6D, + 0x7D5C, 0x7D6B, 0x7D52, 0x7D54, 0x7D69, 0x7D51, 0x7D5F, 0x7D4E, 0x7F3E, + 0x7F3F, 0x7F65}, + {0x7F66, 0x7FA2, 0x7FA0, 0x7FA1, 0x7FD7, 0x8051, 0x804F, 0x8050, 0x80FE, + 0x80D4, 0x8143, 0x814A, 0x8152, 0x814F, 0x8147, 0x813D, 0x814D, 0x813A, + 0x81E6, 0x81EE, 0x81F7, 0x81F8, 0x81F9, 0x8204, 0x823C, 0x823D, 0x823F, + 0x8275, 0x833B, 0x83CF, 0x83F9, 0x8423, 0x83C0, 0x83E8, 0x8412, 0x83E7, + 0x83E4, 0x83FC, 0x83F6, 0x8410, 0x83C6, 0x83C8, 0x83EB, 0x83E3, 0x83BF, + 0x8401, 0x83DD, 0x83E5, 0x83D8, 0x83FF, 0x83E1, 0x83CB, 0x83CE, 0x83D6, + 0x83F5, 0x83C9, 0x8409, 0x840F, 0x83DE, 0x8411, 0x8406, 0x83C2, 0x83F3, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x83D5, 0x83FA, + 0x83C7, 0x83D1, 0x83EA, 0x8413, 0x83C3, 0x83EC, 0x83EE, 0x83C4, 0x83FB, + 0x83D7, 0x83E2, 0x841B, 0x83DB, 0x83FE, 0x86D8, 0x86E2, 0x86E6, 0x86D3, + 0x86E3, 0x86DA, 0x86EA, 0x86DD, 0x86EB, 0x86DC, 0x86EC, 0x86E9, 0x86D7, + 0x86E8, 0x86D1, 0x8848, 0x8856, 0x8855, 0x88BA, 0x88D7, 0x88B9, 0x88B8, + 0x88C0, 0x88BE, 0x88B6, 0x88BC, 0x88B7, 0x88BD, 0x88B2, 0x8901, 0x88C9, + 0x8995, 0x8998, 0x8997, 0x89DD, 0x89DA, 0x89DB, 0x8A4E, 0x8A4D, 0x8A39, + 0x8A59, 0x8A40, 0x8A57, 0x8A58, 0x8A44, 0x8A45, 0x8A52, 0x8A48, 0x8A51, + 0x8A4A, 0x8A4C, 0x8A4F, 0x8C5F, 0x8C81, 0x8C80, 0x8CBA, 0x8CBE, 0x8CB0, + 0x8CB9, 0x8CB5, 0x8D84, 0x8D80, 0x8D89, 0x8DD8, 0x8DD3, 0x8DCD, 0x8DC7, + 0x8DD6, 0x8DDC, 0x8DCF, 0x8DD5, 0x8DD9, 0x8DC8, 0x8DD7, 0x8DC5, 0x8EEF, + 0x8EF7, 0x8EFA}, + {0x8EF9, 0x8EE6, 0x8EEE, 0x8EE5, 0x8EF5, 0x8EE7, 0x8EE8, 0x8EF6, 0x8EEB, + 0x8EF1, 0x8EEC, 0x8EF4, 0x8EE9, 0x902D, 0x9034, 0x902F, 0x9106, 0x912C, + 0x9104, 0x90FF, 0x90FC, 0x9108, 0x90F9, 0x90FB, 0x9101, 0x9100, 0x9107, + 0x9105, 0x9103, 0x9161, 0x9164, 0x915F, 0x9162, 0x9160, 0x9201, 0x920A, + 0x9225, 0x9203, 0x921A, 0x9226, 0x920F, 0x920C, 0x9200, 0x9212, 0x91FF, + 0x91FD, 0x9206, 0x9204, 0x9227, 0x9202, 0x921C, 0x9224, 0x9219, 0x9217, + 0x9205, 0x9216, 0x957B, 0x958D, 0x958C, 0x9590, 0x9687, 0x967E, 0x9688, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9689, 0x9683, + 0x9680, 0x96C2, 0x96C8, 0x96C3, 0x96F1, 0x96F0, 0x976C, 0x9770, 0x976E, + 0x9807, 0x98A9, 0x98EB, 0x9CE6, 0x9EF9, 0x4E83, 0x4E84, 0x4EB6, 0x50BD, + 0x50BF, 0x50C6, 0x50AE, 0x50C4, 0x50CA, 0x50B4, 0x50C8, 0x50C2, 0x50B0, + 0x50C1, 0x50BA, 0x50B1, 0x50CB, 0x50C9, 0x50B6, 0x50B8, 0x51D7, 0x527A, + 0x5278, 0x527B, 0x527C, 0x55C3, 0x55DB, 0x55CC, 0x55D0, 0x55CB, 0x55CA, + 0x55DD, 0x55C0, 0x55D4, 0x55C4, 0x55E9, 0x55BF, 0x55D2, 0x558D, 0x55CF, + 0x55D5, 0x55E2, 0x55D6, 0x55C8, 0x55F2, 0x55CD, 0x55D9, 0x55C2, 0x5714, + 0x5853, 0x5868, 0x5864, 0x584F, 0x584D, 0x5849, 0x586F, 0x5855, 0x584E, + 0x585D, 0x5859, 0x5865, 0x585B, 0x583D, 0x5863, 0x5871, 0x58FC, 0x5AC7, + 0x5AC4, 0x5ACB, 0x5ABA, 0x5AB8, 0x5AB1, 0x5AB5, 0x5AB0, 0x5ABF, 0x5AC8, + 0x5ABB, 0x5AC6}, + {0x5AB7, 0x5AC0, 0x5ACA, 0x5AB4, 0x5AB6, 0x5ACD, 0x5AB9, 0x5A90, 0x5BD6, + 0x5BD8, 0x5BD9, 0x5C1F, 0x5C33, 0x5D71, 0x5D63, 0x5D4A, 0x5D65, 0x5D72, + 0x5D6C, 0x5D5E, 0x5D68, 0x5D67, 0x5D62, 0x5DF0, 0x5E4F, 0x5E4E, 0x5E4A, + 0x5E4D, 0x5E4B, 0x5EC5, 0x5ECC, 0x5EC6, 0x5ECB, 0x5EC7, 0x5F40, 0x5FAF, + 0x5FAD, 0x60F7, 0x6149, 0x614A, 0x612B, 0x6145, 0x6136, 0x6132, 0x612E, + 0x6146, 0x612F, 0x614F, 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, + 0x6224, 0x63C5, 0x63F1, 0x63EB, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6433, 0x6443, + 0x641F, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640C, 0x6426, + 0x6430, 0x6428, 0x6441, 0x6435, 0x642F, 0x640A, 0x641A, 0x6440, 0x6425, + 0x6427, 0x640B, 0x63E7, 0x641B, 0x642E, 0x6421, 0x640E, 0x656F, 0x6592, + 0x65D3, 0x6686, 0x668C, 0x6695, 0x6690, 0x668B, 0x668A, 0x6699, 0x6694, + 0x6678, 0x6720, 0x6966, 0x695F, 0x6938, 0x694E, 0x6962, 0x6971, 0x693F, + 0x6945, 0x696A, 0x6939, 0x6942, 0x6957, 0x6959, 0x697A, 0x6948, 0x6949, + 0x6935, 0x696C, 0x6933, 0x693D, 0x6965, 0x68F0, 0x6978, 0x6934, 0x6969, + 0x6940, 0x696F, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694C, 0x693B, + 0x694B, 0x6937, 0x695C, 0x694F, 0x6951, 0x6932, 0x6952, 0x692F, 0x697B, + 0x693C, 0x6B46, 0x6B45, 0x6B43, 0x6B42, 0x6B48, 0x6B41, 0x6B9B, 0xFA0D, + 0x6BFB, 0x6BFC}, + {0x6BF9, 0x6BF7, 0x6BF8, 0x6E9B, 0x6ED6, 0x6EC8, 0x6E8F, 0x6EC0, 0x6E9F, + 0x6E93, 0x6E94, 0x6EA0, 0x6EB1, 0x6EB9, 0x6EC6, 0x6ED2, 0x6EBD, 0x6EC1, + 0x6E9E, 0x6EC9, 0x6EB7, 0x6EB0, 0x6ECD, 0x6EA6, 0x6ECF, 0x6EB2, 0x6EBE, + 0x6EC3, 0x6EDC, 0x6ED8, 0x6E99, 0x6E92, 0x6E8E, 0x6E8D, 0x6EA4, 0x6EA1, + 0x6EBF, 0x6EB3, 0x6ED0, 0x6ECA, 0x6E97, 0x6EAE, 0x6EA3, 0x7147, 0x7154, + 0x7152, 0x7163, 0x7160, 0x7141, 0x715D, 0x7162, 0x7172, 0x7178, 0x716A, + 0x7161, 0x7142, 0x7158, 0x7143, 0x714B, 0x7170, 0x715F, 0x7150, 0x7153, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7144, 0x714D, + 0x715A, 0x724F, 0x728D, 0x728C, 0x7291, 0x7290, 0x728E, 0x733C, 0x7342, + 0x733B, 0x733A, 0x7340, 0x734A, 0x7349, 0x7444, 0x744A, 0x744B, 0x7452, + 0x7451, 0x7457, 0x7440, 0x744F, 0x7450, 0x744E, 0x7442, 0x7446, 0x744D, + 0x7454, 0x74E1, 0x74FF, 0x74FE, 0x74FD, 0x751D, 0x7579, 0x7577, 0x6983, + 0x75EF, 0x760F, 0x7603, 0x75F7, 0x75FE, 0x75FC, 0x75F9, 0x75F8, 0x7610, + 0x75FB, 0x75F6, 0x75ED, 0x75F5, 0x75FD, 0x7699, 0x76B5, 0x76DD, 0x7755, + 0x775F, 0x7760, 0x7752, 0x7756, 0x775A, 0x7769, 0x7767, 0x7754, 0x7759, + 0x776D, 0x77E0, 0x7887, 0x789A, 0x7894, 0x788F, 0x7884, 0x7895, 0x7885, + 0x7886, 0x78A1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, 0x787B, 0x797C, + 0x7982, 0x797D, 0x7979, 0x7A11, 0x7A18, 0x7A19, 0x7A12, 0x7A17, 0x7A15, + 0x7A22, 0x7A13}, + {0x7A1B, 0x7A10, 0x7AA3, 0x7AA2, 0x7A9E, 0x7AEB, 0x7B66, 0x7B64, 0x7B6D, + 0x7B74, 0x7B69, 0x7B72, 0x7B65, 0x7B73, 0x7B71, 0x7B70, 0x7B61, 0x7B78, + 0x7B76, 0x7B63, 0x7CB2, 0x7CB4, 0x7CAF, 0x7D88, 0x7D86, 0x7D80, 0x7D8D, + 0x7D7F, 0x7D85, 0x7D7A, 0x7D8E, 0x7D7B, 0x7D83, 0x7D7C, 0x7D8C, 0x7D94, + 0x7D84, 0x7D7D, 0x7D92, 0x7F6D, 0x7F6B, 0x7F67, 0x7F68, 0x7F6C, 0x7FA6, + 0x7FA5, 0x7FA7, 0x7FDB, 0x7FDC, 0x8021, 0x8164, 0x8160, 0x8177, 0x815C, + 0x8169, 0x815B, 0x8162, 0x8172, 0x6721, 0x815E, 0x8176, 0x8167, 0x816F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8144, 0x8161, + 0x821D, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84F1, 0x843F, 0x8456, + 0x8476, 0x8479, 0x848F, 0x848D, 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, + 0x8430, 0x844D, 0x847D, 0x845A, 0x8459, 0x8474, 0x8473, 0x845D, 0x8507, + 0x845E, 0x8437, 0x843A, 0x8434, 0x847A, 0x8443, 0x8478, 0x8432, 0x8445, + 0x8429, 0x83D9, 0x844B, 0x842F, 0x8442, 0x842D, 0x845F, 0x8470, 0x8439, + 0x844E, 0x844C, 0x8452, 0x846F, 0x84C5, 0x848E, 0x843B, 0x8447, 0x8436, + 0x8433, 0x8468, 0x847E, 0x8444, 0x842B, 0x8460, 0x8454, 0x846E, 0x8450, + 0x870B, 0x8704, 0x86F7, 0x870C, 0x86FA, 0x86D6, 0x86F5, 0x874D, 0x86F8, + 0x870E, 0x8709, 0x8701, 0x86F6, 0x870D, 0x8705, 0x88D6, 0x88CB, 0x88CD, + 0x88CE, 0x88DE, 0x88DB, 0x88DA, 0x88CC, 0x88D0, 0x8985, 0x899B, 0x89DF, + 0x89E5, 0x89E4}, + {0x89E1, 0x89E0, 0x89E2, 0x89DC, 0x89E6, 0x8A76, 0x8A86, 0x8A7F, 0x8A61, + 0x8A3F, 0x8A77, 0x8A82, 0x8A84, 0x8A75, 0x8A83, 0x8A81, 0x8A74, 0x8A7A, + 0x8C3C, 0x8C4B, 0x8C4A, 0x8C65, 0x8C64, 0x8C66, 0x8C86, 0x8C84, 0x8C85, + 0x8CCC, 0x8D68, 0x8D69, 0x8D91, 0x8D8C, 0x8D8E, 0x8D8F, 0x8D8D, 0x8D93, + 0x8D94, 0x8D90, 0x8D92, 0x8DF0, 0x8DE0, 0x8DEC, 0x8DF1, 0x8DEE, 0x8DD0, + 0x8DE9, 0x8DE3, 0x8DE2, 0x8DE7, 0x8DF2, 0x8DEB, 0x8DF4, 0x8F06, 0x8EFF, + 0x8F01, 0x8F00, 0x8F05, 0x8F07, 0x8F08, 0x8F02, 0x8F0B, 0x9052, 0x903F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9044, 0x9049, + 0x903D, 0x9110, 0x910D, 0x910F, 0x9111, 0x9116, 0x9114, 0x910B, 0x910E, + 0x916E, 0x916F, 0x9248, 0x9252, 0x9230, 0x923A, 0x9266, 0x9233, 0x9265, + 0x925E, 0x9283, 0x922E, 0x924A, 0x9246, 0x926D, 0x926C, 0x924F, 0x9260, + 0x9267, 0x926F, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, + 0x9272, 0x924E, 0x9253, 0x924C, 0x9256, 0x9232, 0x959F, 0x959C, 0x959E, + 0x959B, 0x9692, 0x9693, 0x9691, 0x9697, 0x96CE, 0x96FA, 0x96FD, 0x96F8, + 0x96F5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980F, 0x980D, 0x980E, 0x98AC, + 0x98F6, 0x98F9, 0x99AF, 0x99B2, 0x99B0, 0x99B5, 0x9AAD, 0x9AAB, 0x9B5B, + 0x9CEA, 0x9CED, 0x9CE7, 0x9E80, 0x9EFD, 0x50E6, 0x50D4, 0x50D7, 0x50E8, + 0x50F3, 0x50DB, 0x50EA, 0x50DD, 0x50E4, 0x50D3, 0x50EC, 0x50F0, 0x50EF, + 0x50E3, 0x50E0}, + {0x51D8, 0x5280, 0x5281, 0x52E9, 0x52EB, 0x5330, 0x53AC, 0x5627, 0x5615, + 0x560C, 0x5612, 0x55FC, 0x560F, 0x561C, 0x5601, 0x5613, 0x5602, 0x55FA, + 0x561D, 0x5604, 0x55FF, 0x55F9, 0x5889, 0x587C, 0x5890, 0x5898, 0x5886, + 0x5881, 0x587F, 0x5874, 0x588B, 0x587A, 0x5887, 0x5891, 0x588E, 0x5876, + 0x5882, 0x5888, 0x587B, 0x5894, 0x588F, 0x58FE, 0x596B, 0x5ADC, 0x5AEE, + 0x5AE5, 0x5AD5, 0x5AEA, 0x5ADA, 0x5AED, 0x5AEB, 0x5AF3, 0x5AE2, 0x5AE0, + 0x5ADB, 0x5AEC, 0x5ADE, 0x5ADD, 0x5AD9, 0x5AE8, 0x5ADF, 0x5B77, 0x5BE0, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5BE3, 0x5C63, + 0x5D82, 0x5D80, 0x5D7D, 0x5D86, 0x5D7A, 0x5D81, 0x5D77, 0x5D8A, 0x5D89, + 0x5D88, 0x5D7E, 0x5D7C, 0x5D8D, 0x5D79, 0x5D7F, 0x5E58, 0x5E59, 0x5E53, + 0x5ED8, 0x5ED1, 0x5ED7, 0x5ECE, 0x5EDC, 0x5ED5, 0x5ED9, 0x5ED2, 0x5ED4, + 0x5F44, 0x5F43, 0x5F6F, 0x5FB6, 0x612C, 0x6128, 0x6141, 0x615E, 0x6171, + 0x6173, 0x6152, 0x6153, 0x6172, 0x616C, 0x6180, 0x6174, 0x6154, 0x617A, + 0x615B, 0x6165, 0x613B, 0x616A, 0x6161, 0x6156, 0x6229, 0x6227, 0x622B, + 0x642B, 0x644D, 0x645B, 0x645D, 0x6474, 0x6476, 0x6472, 0x6473, 0x647D, + 0x6475, 0x6466, 0x64A6, 0x644E, 0x6482, 0x645E, 0x645C, 0x644B, 0x6453, + 0x6460, 0x6450, 0x647F, 0x643F, 0x646C, 0x646B, 0x6459, 0x6465, 0x6477, + 0x6573, 0x65A0, 0x66A1, 0x66A0, 0x669F, 0x6705, 0x6704, 0x6722, 0x69B1, + 0x69B6, 0x69C9}, + {0x69A0, 0x69CE, 0x6996, 0x69B0, 0x69AC, 0x69BC, 0x6991, 0x6999, 0x698E, + 0x69A7, 0x698D, 0x69A9, 0x69BE, 0x69AF, 0x69BF, 0x69C4, 0x69BD, 0x69A4, + 0x69D4, 0x69B9, 0x69CA, 0x699A, 0x69CF, 0x69B3, 0x6993, 0x69AA, 0x69A1, + 0x699E, 0x69D9, 0x6997, 0x6990, 0x69C2, 0x69B5, 0x69A5, 0x69C6, 0x6B4A, + 0x6B4D, 0x6B4B, 0x6B9E, 0x6B9F, 0x6BA0, 0x6BC3, 0x6BC4, 0x6BFE, 0x6ECE, + 0x6EF5, 0x6EF1, 0x6F03, 0x6F25, 0x6EF8, 0x6F37, 0x6EFB, 0x6F2E, 0x6F09, + 0x6F4E, 0x6F19, 0x6F1A, 0x6F27, 0x6F18, 0x6F3B, 0x6F12, 0x6EED, 0x6F0A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6F36, 0x6F73, + 0x6EF9, 0x6EEE, 0x6F2D, 0x6F40, 0x6F30, 0x6F3C, 0x6F35, 0x6EEB, 0x6F07, + 0x6F0E, 0x6F43, 0x6F05, 0x6EFD, 0x6EF6, 0x6F39, 0x6F1C, 0x6EFC, 0x6F3A, + 0x6F1F, 0x6F0D, 0x6F1E, 0x6F08, 0x6F21, 0x7187, 0x7190, 0x7189, 0x7180, + 0x7185, 0x7182, 0x718F, 0x717B, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, + 0x7297, 0x7295, 0x7293, 0x7343, 0x734D, 0x7351, 0x734C, 0x7462, 0x7473, + 0x7471, 0x7475, 0x7472, 0x7467, 0x746E, 0x7500, 0x7502, 0x7503, 0x757D, + 0x7590, 0x7616, 0x7608, 0x760C, 0x7615, 0x7611, 0x760A, 0x7614, 0x76B8, + 0x7781, 0x777C, 0x7785, 0x7782, 0x776E, 0x7780, 0x776F, 0x777E, 0x7783, + 0x78B2, 0x78AA, 0x78B4, 0x78AD, 0x78A8, 0x787E, 0x78AB, 0x789E, 0x78A5, + 0x78A0, 0x78AC, 0x78A2, 0x78A4, 0x7998, 0x798A, 0x798B, 0x7996, 0x7995, + 0x7994, 0x7993}, + {0x7997, 0x7988, 0x7992, 0x7990, 0x7A2B, 0x7A4A, 0x7A30, 0x7A2F, 0x7A28, + 0x7A26, 0x7AA8, 0x7AAB, 0x7AAC, 0x7AEE, 0x7B88, 0x7B9C, 0x7B8A, 0x7B91, + 0x7B90, 0x7B96, 0x7B8D, 0x7B8C, 0x7B9B, 0x7B8E, 0x7B85, 0x7B98, 0x5284, + 0x7B99, 0x7BA4, 0x7B82, 0x7CBB, 0x7CBF, 0x7CBC, 0x7CBA, 0x7DA7, 0x7DB7, + 0x7DC2, 0x7DA3, 0x7DAA, 0x7DC1, 0x7DC0, 0x7DC5, 0x7D9D, 0x7DCE, 0x7DC4, + 0x7DC6, 0x7DCB, 0x7DCC, 0x7DAF, 0x7DB9, 0x7D96, 0x7DBC, 0x7D9F, 0x7DA6, + 0x7DAE, 0x7DA9, 0x7DA1, 0x7DC9, 0x7F73, 0x7FE2, 0x7FE3, 0x7FE5, 0x7FDE, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8024, 0x805D, + 0x805C, 0x8189, 0x8186, 0x8183, 0x8187, 0x818D, 0x818C, 0x818B, 0x8215, + 0x8497, 0x84A4, 0x84A1, 0x849F, 0x84BA, 0x84CE, 0x84C2, 0x84AC, 0x84AE, + 0x84AB, 0x84B9, 0x84B4, 0x84C1, 0x84CD, 0x84AA, 0x849A, 0x84B1, 0x84D0, + 0x849D, 0x84A7, 0x84BB, 0x84A2, 0x8494, 0x84C7, 0x84CC, 0x849B, 0x84A9, + 0x84AF, 0x84A8, 0x84D6, 0x8498, 0x84B6, 0x84CF, 0x84A0, 0x84D7, 0x84D4, + 0x84D2, 0x84DB, 0x84B0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876B, + 0x8740, 0x872E, 0x871E, 0x8721, 0x8719, 0x871B, 0x8743, 0x872C, 0x8741, + 0x873E, 0x8746, 0x8720, 0x8732, 0x872A, 0x872D, 0x873C, 0x8712, 0x873A, + 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, 0x871A, 0x8730, + 0x8711, 0x88F7, 0x88E7, 0x88F1, 0x88F2, 0x88FA, 0x88FE, 0x88EE, 0x88FC, + 0x88F6, 0x88FB}, + {0x88F0, 0x88EC, 0x88EB, 0x899D, 0x89A1, 0x899F, 0x899E, 0x89E9, 0x89EB, + 0x89E8, 0x8AAB, 0x8A99, 0x8A8B, 0x8A92, 0x8A8F, 0x8A96, 0x8C3D, 0x8C68, + 0x8C69, 0x8CD5, 0x8CCF, 0x8CD7, 0x8D96, 0x8E09, 0x8E02, 0x8DFF, 0x8E0D, + 0x8DFD, 0x8E0A, 0x8E03, 0x8E07, 0x8E06, 0x8E05, 0x8DFE, 0x8E00, 0x8E04, + 0x8F10, 0x8F11, 0x8F0E, 0x8F0D, 0x9123, 0x911C, 0x9120, 0x9122, 0x911F, + 0x911D, 0x911A, 0x9124, 0x9121, 0x911B, 0x917A, 0x9172, 0x9179, 0x9173, + 0x92A5, 0x92A4, 0x9276, 0x929B, 0x927A, 0x92A0, 0x9294, 0x92AA, 0x928D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x92A6, 0x929A, + 0x92AB, 0x9279, 0x9297, 0x927F, 0x92A3, 0x92EE, 0x928E, 0x9282, 0x9295, + 0x92A2, 0x927D, 0x9288, 0x92A1, 0x928A, 0x9286, 0x928C, 0x9299, 0x92A7, + 0x927E, 0x9287, 0x92A9, 0x929D, 0x928B, 0x922D, 0x969E, 0x96A1, 0x96FF, + 0x9758, 0x977D, 0x977A, 0x977E, 0x9783, 0x9780, 0x9782, 0x977B, 0x9784, + 0x9781, 0x977F, 0x97CE, 0x97CD, 0x9816, 0x98AD, 0x98AE, 0x9902, 0x9900, + 0x9907, 0x999D, 0x999C, 0x99C3, 0x99B9, 0x99BB, 0x99BA, 0x99C2, 0x99BD, + 0x99C7, 0x9AB1, 0x9AE3, 0x9AE7, 0x9B3E, 0x9B3F, 0x9B60, 0x9B61, 0x9B5F, + 0x9CF1, 0x9CF2, 0x9CF5, 0x9EA7, 0x50FF, 0x5103, 0x5130, 0x50F8, 0x5106, + 0x5107, 0x50F6, 0x50FE, 0x510B, 0x510C, 0x50FD, 0x510A, 0x528B, 0x528C, + 0x52F1, 0x52EF, 0x5648, 0x5642, 0x564C, 0x5635, 0x5641, 0x564A, 0x5649, + 0x5646, 0x5658}, + {0x565A, 0x5640, 0x5633, 0x563D, 0x562C, 0x563E, 0x5638, 0x562A, 0x563A, + 0x571A, 0x58AB, 0x589D, 0x58B1, 0x58A0, 0x58A3, 0x58AF, 0x58AC, 0x58A5, + 0x58A1, 0x58FF, 0x5AFF, 0x5AF4, 0x5AFD, 0x5AF7, 0x5AF6, 0x5B03, 0x5AF8, + 0x5B02, 0x5AF9, 0x5B01, 0x5B07, 0x5B05, 0x5B0F, 0x5C67, 0x5D99, 0x5D97, + 0x5D9F, 0x5D92, 0x5DA2, 0x5D93, 0x5D95, 0x5DA0, 0x5D9C, 0x5DA1, 0x5D9A, + 0x5D9E, 0x5E69, 0x5E5D, 0x5E60, 0x5E5C, 0x7DF3, 0x5EDB, 0x5EDE, 0x5EE1, + 0x5F49, 0x5FB2, 0x618B, 0x6183, 0x6179, 0x61B1, 0x61B0, 0x61A2, 0x6189, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x619B, 0x6193, + 0x61AF, 0x61AD, 0x619F, 0x6192, 0x61AA, 0x61A1, 0x618D, 0x6166, 0x61B3, + 0x622D, 0x646E, 0x6470, 0x6496, 0x64A0, 0x6485, 0x6497, 0x649C, 0x648F, + 0x648B, 0x648A, 0x648C, 0x64A3, 0x649F, 0x6468, 0x64B1, 0x6498, 0x6576, + 0x657A, 0x6579, 0x657B, 0x65B2, 0x65B3, 0x66B5, 0x66B0, 0x66A9, 0x66B2, + 0x66B7, 0x66AA, 0x66AF, 0x6A00, 0x6A06, 0x6A17, 0x69E5, 0x69F8, 0x6A15, + 0x69F1, 0x69E4, 0x6A20, 0x69FF, 0x69EC, 0x69E2, 0x6A1B, 0x6A1D, 0x69FE, + 0x6A27, 0x69F2, 0x69EE, 0x6A14, 0x69F7, 0x69E7, 0x6A40, 0x6A08, 0x69E6, + 0x69FB, 0x6A0D, 0x69FC, 0x69EB, 0x6A09, 0x6A04, 0x6A18, 0x6A25, 0x6A0F, + 0x69F6, 0x6A26, 0x6A07, 0x69F4, 0x6A16, 0x6B51, 0x6BA5, 0x6BA3, 0x6BA2, + 0x6BA6, 0x6C01, 0x6C00, 0x6BFF, 0x6C02, 0x6F41, 0x6F26, 0x6F7E, 0x6F87, + 0x6FC6, 0x6F92}, + {0x6F8D, 0x6F89, 0x6F8C, 0x6F62, 0x6F4F, 0x6F85, 0x6F5A, 0x6F96, 0x6F76, + 0x6F6C, 0x6F82, 0x6F55, 0x6F72, 0x6F52, 0x6F50, 0x6F57, 0x6F94, 0x6F93, + 0x6F5D, 0x6F00, 0x6F61, 0x6F6B, 0x6F7D, 0x6F67, 0x6F90, 0x6F53, 0x6F8B, + 0x6F69, 0x6F7F, 0x6F95, 0x6F63, 0x6F77, 0x6F6A, 0x6F7B, 0x71B2, 0x71AF, + 0x719B, 0x71B0, 0x71A0, 0x719A, 0x71A9, 0x71B5, 0x719D, 0x71A5, 0x719E, + 0x71A4, 0x71A1, 0x71AA, 0x719C, 0x71A7, 0x71B3, 0x7298, 0x729A, 0x7358, + 0x7352, 0x735E, 0x735F, 0x7360, 0x735D, 0x735B, 0x7361, 0x735A, 0x7359, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7362, 0x7487, + 0x7489, 0x748A, 0x7486, 0x7481, 0x747D, 0x7485, 0x7488, 0x747C, 0x7479, + 0x7508, 0x7507, 0x757E, 0x7625, 0x761E, 0x7619, 0x761D, 0x761C, 0x7623, + 0x761A, 0x7628, 0x761B, 0x769C, 0x769D, 0x769E, 0x769B, 0x778D, 0x778F, + 0x7789, 0x7788, 0x78CD, 0x78BB, 0x78CF, 0x78CC, 0x78D1, 0x78CE, 0x78D4, + 0x78C8, 0x78C3, 0x78C4, 0x78C9, 0x799A, 0x79A1, 0x79A0, 0x799C, 0x79A2, + 0x799B, 0x6B76, 0x7A39, 0x7AB2, 0x7AB4, 0x7AB3, 0x7BB7, 0x7BCB, 0x7BBE, + 0x7BAC, 0x7BCE, 0x7BAF, 0x7BB9, 0x7BCA, 0x7BB5, 0x7CC5, 0x7CC8, 0x7CCC, + 0x7CCB, 0x7DF7, 0x7DDB, 0x7DEA, 0x7DE7, 0x7DD7, 0x7DE1, 0x7E03, 0x7DFA, + 0x7DE6, 0x7DF6, 0x7DF1, 0x7DF0, 0x7DEE, 0x7DDF, 0x7F76, 0x7FAC, 0x7FB0, + 0x7FAD, 0x7FED, 0x7FEB, 0x7FEA, 0x7FEC, 0x7FE6, 0x7FE8, 0x8064, 0x8067, + 0x81A3, 0x819F}, + {0x819E, 0x8195, 0x81A2, 0x8199, 0x8197, 0x8216, 0x824F, 0x8253, 0x8252, + 0x8250, 0x824E, 0x8251, 0x8524, 0x853B, 0x850F, 0x8500, 0x8529, 0x850E, + 0x8509, 0x850D, 0x851F, 0x850A, 0x8527, 0x851C, 0x84FB, 0x852B, 0x84FA, + 0x8508, 0x850C, 0x84F4, 0x852A, 0x84F2, 0x8515, 0x84F7, 0x84EB, 0x84F3, + 0x84FC, 0x8512, 0x84EA, 0x84E9, 0x8516, 0x84FE, 0x8528, 0x851D, 0x852E, + 0x8502, 0x84FD, 0x851E, 0x84F6, 0x8531, 0x8526, 0x84E7, 0x84E8, 0x84F0, + 0x84EF, 0x84F9, 0x8518, 0x8520, 0x8530, 0x850B, 0x8519, 0x852F, 0x8662, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8756, 0x8763, + 0x8764, 0x8777, 0x87E1, 0x8773, 0x8758, 0x8754, 0x875B, 0x8752, 0x8761, + 0x875A, 0x8751, 0x875E, 0x876D, 0x876A, 0x8750, 0x874E, 0x875F, 0x875D, + 0x876F, 0x876C, 0x877A, 0x876E, 0x875C, 0x8765, 0x874F, 0x877B, 0x8775, + 0x8762, 0x8767, 0x8769, 0x885A, 0x8905, 0x890C, 0x8914, 0x890B, 0x8917, + 0x8918, 0x8919, 0x8906, 0x8916, 0x8911, 0x890E, 0x8909, 0x89A2, 0x89A4, + 0x89A3, 0x89ED, 0x89F0, 0x89EC, 0x8ACF, 0x8AC6, 0x8AB8, 0x8AD3, 0x8AD1, + 0x8AD4, 0x8AD5, 0x8ABB, 0x8AD7, 0x8ABE, 0x8AC0, 0x8AC5, 0x8AD8, 0x8AC3, + 0x8ABA, 0x8ABD, 0x8AD9, 0x8C3E, 0x8C4D, 0x8C8F, 0x8CE5, 0x8CDF, 0x8CD9, + 0x8CE8, 0x8CDA, 0x8CDD, 0x8CE7, 0x8DA0, 0x8D9C, 0x8DA1, 0x8D9B, 0x8E20, + 0x8E23, 0x8E25, 0x8E24, 0x8E2E, 0x8E15, 0x8E1B, 0x8E16, 0x8E11, 0x8E19, + 0x8E26, 0x8E27}, + {0x8E14, 0x8E12, 0x8E18, 0x8E13, 0x8E1C, 0x8E17, 0x8E1A, 0x8F2C, 0x8F24, + 0x8F18, 0x8F1A, 0x8F20, 0x8F23, 0x8F16, 0x8F17, 0x9073, 0x9070, 0x906F, + 0x9067, 0x906B, 0x912F, 0x912B, 0x9129, 0x912A, 0x9132, 0x9126, 0x912E, + 0x9185, 0x9186, 0x918A, 0x9181, 0x9182, 0x9184, 0x9180, 0x92D0, 0x92C3, + 0x92C4, 0x92C0, 0x92D9, 0x92B6, 0x92CF, 0x92F1, 0x92DF, 0x92D8, 0x92E9, + 0x92D7, 0x92DD, 0x92CC, 0x92EF, 0x92C2, 0x92E8, 0x92CA, 0x92C8, 0x92CE, + 0x92E6, 0x92CD, 0x92D5, 0x92C9, 0x92E0, 0x92DE, 0x92E7, 0x92D1, 0x92D3, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x92B5, 0x92E1, + 0x92C6, 0x92B4, 0x957C, 0x95AC, 0x95AB, 0x95AE, 0x95B0, 0x96A4, 0x96A2, + 0x96D3, 0x9705, 0x9708, 0x9702, 0x975A, 0x978A, 0x978E, 0x9788, 0x97D0, + 0x97CF, 0x981E, 0x981D, 0x9826, 0x9829, 0x9828, 0x9820, 0x981B, 0x9827, + 0x98B2, 0x9908, 0x98FA, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99DC, + 0x99CD, 0x99CF, 0x99D3, 0x99D4, 0x99CE, 0x99C9, 0x99D6, 0x99D8, 0x99CB, + 0x99D7, 0x99CC, 0x9AB3, 0x9AEC, 0x9AEB, 0x9AF3, 0x9AF2, 0x9AF1, 0x9B46, + 0x9B43, 0x9B67, 0x9B74, 0x9B71, 0x9B66, 0x9B76, 0x9B75, 0x9B70, 0x9B68, + 0x9B64, 0x9B6C, 0x9CFC, 0x9CFA, 0x9CFD, 0x9CFF, 0x9CF7, 0x9D07, 0x9D00, + 0x9CF9, 0x9CFB, 0x9D08, 0x9D05, 0x9D04, 0x9E83, 0x9ED3, 0x9F0F, 0x9F10, + 0x511C, 0x5113, 0x5117, 0x511A, 0x5111, 0x51DE, 0x5334, 0x53E1, 0x5670, + 0x5660, 0x566E}, + {0x5673, 0x5666, 0x5663, 0x566D, 0x5672, 0x565E, 0x5677, 0x571C, 0x571B, + 0x58C8, 0x58BD, 0x58C9, 0x58BF, 0x58BA, 0x58C2, 0x58BC, 0x58C6, 0x5B17, + 0x5B19, 0x5B1B, 0x5B21, 0x5B14, 0x5B13, 0x5B10, 0x5B16, 0x5B28, 0x5B1A, + 0x5B20, 0x5B1E, 0x5BEF, 0x5DAC, 0x5DB1, 0x5DA9, 0x5DA7, 0x5DB5, 0x5DB0, + 0x5DAE, 0x5DAA, 0x5DA8, 0x5DB2, 0x5DAD, 0x5DAF, 0x5DB4, 0x5E67, 0x5E68, + 0x5E66, 0x5E6F, 0x5EE9, 0x5EE7, 0x5EE6, 0x5EE8, 0x5EE5, 0x5F4B, 0x5FBC, + 0x619D, 0x61A8, 0x6196, 0x61C5, 0x61B4, 0x61C6, 0x61C1, 0x61CC, 0x61BA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x61BF, 0x61B8, + 0x618C, 0x64D7, 0x64D6, 0x64D0, 0x64CF, 0x64C9, 0x64BD, 0x6489, 0x64C3, + 0x64DB, 0x64F3, 0x64D9, 0x6533, 0x657F, 0x657C, 0x65A2, 0x66C8, 0x66BE, + 0x66C0, 0x66CA, 0x66CB, 0x66CF, 0x66BD, 0x66BB, 0x66BA, 0x66CC, 0x6723, + 0x6A34, 0x6A66, 0x6A49, 0x6A67, 0x6A32, 0x6A68, 0x6A3E, 0x6A5D, 0x6A6D, + 0x6A76, 0x6A5B, 0x6A51, 0x6A28, 0x6A5A, 0x6A3B, 0x6A3F, 0x6A41, 0x6A6A, + 0x6A64, 0x6A50, 0x6A4F, 0x6A54, 0x6A6F, 0x6A69, 0x6A60, 0x6A3C, 0x6A5E, + 0x6A56, 0x6A55, 0x6A4D, 0x6A4E, 0x6A46, 0x6B55, 0x6B54, 0x6B56, 0x6BA7, + 0x6BAA, 0x6BAB, 0x6BC8, 0x6BC7, 0x6C04, 0x6C03, 0x6C06, 0x6FAD, 0x6FCB, + 0x6FA3, 0x6FC7, 0x6FBC, 0x6FCE, 0x6FC8, 0x6F5E, 0x6FC4, 0x6FBD, 0x6F9E, + 0x6FCA, 0x6FA8, 0x7004, 0x6FA5, 0x6FAE, 0x6FBA, 0x6FAC, 0x6FAA, 0x6FCF, + 0x6FBF, 0x6FB8}, + {0x6FA2, 0x6FC9, 0x6FAB, 0x6FCD, 0x6FAF, 0x6FB2, 0x6FB0, 0x71C5, 0x71C2, + 0x71BF, 0x71B8, 0x71D6, 0x71C0, 0x71C1, 0x71CB, 0x71D4, 0x71CA, 0x71C7, + 0x71CF, 0x71BD, 0x71D8, 0x71BC, 0x71C6, 0x71DA, 0x71DB, 0x729D, 0x729E, + 0x7369, 0x7366, 0x7367, 0x736C, 0x7365, 0x736B, 0x736A, 0x747F, 0x749A, + 0x74A0, 0x7494, 0x7492, 0x7495, 0x74A1, 0x750B, 0x7580, 0x762F, 0x762D, + 0x7631, 0x763D, 0x7633, 0x763C, 0x7635, 0x7632, 0x7630, 0x76BB, 0x76E6, + 0x779A, 0x779D, 0x77A1, 0x779C, 0x779B, 0x77A2, 0x77A3, 0x7795, 0x7799, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7797, 0x78DD, + 0x78E9, 0x78E5, 0x78EA, 0x78DE, 0x78E3, 0x78DB, 0x78E1, 0x78E2, 0x78ED, + 0x78DF, 0x78E0, 0x79A4, 0x7A44, 0x7A48, 0x7A47, 0x7AB6, 0x7AB8, 0x7AB5, + 0x7AB1, 0x7AB7, 0x7BDE, 0x7BE3, 0x7BE7, 0x7BDD, 0x7BD5, 0x7BE5, 0x7BDA, + 0x7BE8, 0x7BF9, 0x7BD4, 0x7BEA, 0x7BE2, 0x7BDC, 0x7BEB, 0x7BD8, 0x7BDF, + 0x7CD2, 0x7CD4, 0x7CD7, 0x7CD0, 0x7CD1, 0x7E12, 0x7E21, 0x7E17, 0x7E0C, + 0x7E1F, 0x7E20, 0x7E13, 0x7E0E, 0x7E1C, 0x7E15, 0x7E1A, 0x7E22, 0x7E0B, + 0x7E0F, 0x7E16, 0x7E0D, 0x7E14, 0x7E25, 0x7E24, 0x7F43, 0x7F7B, 0x7F7C, + 0x7F7A, 0x7FB1, 0x7FEF, 0x802A, 0x8029, 0x806C, 0x81B1, 0x81A6, 0x81AE, + 0x81B9, 0x81B5, 0x81AB, 0x81B0, 0x81AC, 0x81B4, 0x81B2, 0x81B7, 0x81A7, + 0x81F2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, 0x856B, 0x854D, 0x8553, + 0x8561, 0x8558}, + {0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, + 0x853E, 0x855B, 0x8571, 0x854E, 0x856E, 0x8575, 0x8555, 0x8567, 0x8560, + 0x858C, 0x8566, 0x855D, 0x8554, 0x8565, 0x856C, 0x8663, 0x8665, 0x8664, + 0x879B, 0x878F, 0x8797, 0x8793, 0x8792, 0x8788, 0x8781, 0x8796, 0x8798, + 0x8779, 0x8787, 0x87A3, 0x8785, 0x8790, 0x8791, 0x879D, 0x8784, 0x8794, + 0x879C, 0x879A, 0x8789, 0x891E, 0x8926, 0x8930, 0x892D, 0x892E, 0x8927, + 0x8931, 0x8922, 0x8929, 0x8923, 0x892F, 0x892C, 0x891F, 0x89F1, 0x8AE0, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8AE2, 0x8AF2, + 0x8AF4, 0x8AF5, 0x8ADD, 0x8B14, 0x8AE4, 0x8ADF, 0x8AF0, 0x8AC8, 0x8ADE, + 0x8AE1, 0x8AE8, 0x8AFF, 0x8AEF, 0x8AFB, 0x8C91, 0x8C92, 0x8C90, 0x8CF5, + 0x8CEE, 0x8CF1, 0x8CF0, 0x8CF3, 0x8D6C, 0x8D6E, 0x8DA5, 0x8DA7, 0x8E33, + 0x8E3E, 0x8E38, 0x8E40, 0x8E45, 0x8E36, 0x8E3C, 0x8E3D, 0x8E41, 0x8E30, + 0x8E3F, 0x8EBD, 0x8F36, 0x8F2E, 0x8F35, 0x8F32, 0x8F39, 0x8F37, 0x8F34, + 0x9076, 0x9079, 0x907B, 0x9086, 0x90FA, 0x9133, 0x9135, 0x9136, 0x9193, + 0x9190, 0x9191, 0x918D, 0x918F, 0x9327, 0x931E, 0x9308, 0x931F, 0x9306, + 0x930F, 0x937A, 0x9338, 0x933C, 0x931B, 0x9323, 0x9312, 0x9301, 0x9346, + 0x932D, 0x930E, 0x930D, 0x92CB, 0x931D, 0x92FA, 0x9325, 0x9313, 0x92F9, + 0x92F7, 0x9334, 0x9302, 0x9324, 0x92FF, 0x9329, 0x9339, 0x9335, 0x932A, + 0x9314, 0x930C}, + {0x930B, 0x92FE, 0x9309, 0x9300, 0x92FB, 0x9316, 0x95BC, 0x95CD, 0x95BE, + 0x95B9, 0x95BA, 0x95B6, 0x95BF, 0x95B5, 0x95BD, 0x96A9, 0x96D4, 0x970B, + 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97F0, 0x97F8, 0x9835, 0x982F, + 0x9832, 0x9924, 0x991F, 0x9927, 0x9929, 0x999E, 0x99EE, 0x99EC, 0x99E5, + 0x99E4, 0x99F0, 0x99E3, 0x99EA, 0x99E9, 0x99E7, 0x9AB9, 0x9ABF, 0x9AB4, + 0x9ABB, 0x9AF6, 0x9AFA, 0x9AF9, 0x9AF7, 0x9B33, 0x9B80, 0x9B85, 0x9B87, + 0x9B7C, 0x9B7E, 0x9B7B, 0x9B82, 0x9B93, 0x9B92, 0x9B90, 0x9B7A, 0x9B95, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9B7D, 0x9B88, + 0x9D25, 0x9D17, 0x9D20, 0x9D1E, 0x9D14, 0x9D29, 0x9D1D, 0x9D18, 0x9D22, + 0x9D10, 0x9D19, 0x9D1F, 0x9E88, 0x9E86, 0x9E87, 0x9EAE, 0x9EAD, 0x9ED5, + 0x9ED6, 0x9EFA, 0x9F12, 0x9F3D, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, + 0x5129, 0x52F4, 0x5693, 0x568C, 0x568D, 0x5686, 0x5684, 0x5683, 0x567E, + 0x5682, 0x567F, 0x5681, 0x58D6, 0x58D4, 0x58CF, 0x58D2, 0x5B2D, 0x5B25, + 0x5B32, 0x5B23, 0x5B2C, 0x5B27, 0x5B26, 0x5B2F, 0x5B2E, 0x5B7B, 0x5BF1, + 0x5BF2, 0x5DB7, 0x5E6C, 0x5E6A, 0x5FBE, 0x5FBB, 0x61C3, 0x61B5, 0x61BC, + 0x61E7, 0x61E0, 0x61E5, 0x61E4, 0x61E8, 0x61DE, 0x64EF, 0x64E9, 0x64E3, + 0x64EB, 0x64E4, 0x64E8, 0x6581, 0x6580, 0x65B6, 0x65DA, 0x66D2, 0x6A8D, + 0x6A96, 0x6A81, 0x6AA5, 0x6A89, 0x6A9F, 0x6A9B, 0x6AA1, 0x6A9E, 0x6A87, + 0x6A93, 0x6A8E}, + {0x6A95, 0x6A83, 0x6AA8, 0x6AA4, 0x6A91, 0x6A7F, 0x6AA6, 0x6A9A, 0x6A85, + 0x6A8C, 0x6A92, 0x6B5B, 0x6BAD, 0x6C09, 0x6FCC, 0x6FA9, 0x6FF4, 0x6FD4, + 0x6FE3, 0x6FDC, 0x6FED, 0x6FE7, 0x6FE6, 0x6FDE, 0x6FF2, 0x6FDD, 0x6FE2, + 0x6FE8, 0x71E1, 0x71F1, 0x71E8, 0x71F2, 0x71E4, 0x71F0, 0x71E2, 0x7373, + 0x736E, 0x736F, 0x7497, 0x74B2, 0x74AB, 0x7490, 0x74AA, 0x74AD, 0x74B1, + 0x74A5, 0x74AF, 0x7510, 0x7511, 0x7512, 0x750F, 0x7584, 0x7643, 0x7648, + 0x7649, 0x7647, 0x76A4, 0x76E9, 0x77B5, 0x77AB, 0x77B2, 0x77B7, 0x77B6, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x77B4, 0x77B1, + 0x77A8, 0x77F0, 0x78F3, 0x78FD, 0x7902, 0x78FB, 0x78FC, 0x78F2, 0x7905, + 0x78F9, 0x78FE, 0x7904, 0x79AB, 0x79A8, 0x7A5C, 0x7A5B, 0x7A56, 0x7A58, + 0x7A54, 0x7A5A, 0x7ABE, 0x7AC0, 0x7AC1, 0x7C05, 0x7C0F, 0x7BF2, 0x7C00, + 0x7BFF, 0x7BFB, 0x7C0E, 0x7BF4, 0x7C0B, 0x7BF3, 0x7C02, 0x7C09, 0x7C03, + 0x7C01, 0x7BF8, 0x7BFD, 0x7C06, 0x7BF0, 0x7BF1, 0x7C10, 0x7C0A, 0x7CE8, + 0x7E2D, 0x7E3C, 0x7E42, 0x7E33, 0x9848, 0x7E38, 0x7E2A, 0x7E49, 0x7E40, + 0x7E47, 0x7E29, 0x7E4C, 0x7E30, 0x7E3B, 0x7E36, 0x7E44, 0x7E3A, 0x7F45, + 0x7F7F, 0x7F7E, 0x7F7D, 0x7FF4, 0x7FF2, 0x802C, 0x81BB, 0x81C4, 0x81CC, + 0x81CA, 0x81C5, 0x81C7, 0x81BC, 0x81E9, 0x825B, 0x825A, 0x825C, 0x8583, + 0x8580, 0x858F, 0x85A7, 0x8595, 0x85A0, 0x858B, 0x85A3, 0x857B, 0x85A4, + 0x859A, 0x859E}, + {0x8577, 0x857C, 0x8589, 0x85A1, 0x857A, 0x8578, 0x8557, 0x858E, 0x8596, + 0x8586, 0x858D, 0x8599, 0x859D, 0x8581, 0x85A2, 0x8582, 0x8588, 0x8585, + 0x8579, 0x8576, 0x8598, 0x8590, 0x859F, 0x8668, 0x87BE, 0x87AA, 0x87AD, + 0x87C5, 0x87B0, 0x87AC, 0x87B9, 0x87B5, 0x87BC, 0x87AE, 0x87C9, 0x87C3, + 0x87C2, 0x87CC, 0x87B7, 0x87AF, 0x87C4, 0x87CA, 0x87B4, 0x87B6, 0x87BF, + 0x87B8, 0x87BD, 0x87DE, 0x87B2, 0x8935, 0x8933, 0x893C, 0x893E, 0x8941, + 0x8952, 0x8937, 0x8942, 0x89AD, 0x89AF, 0x89AE, 0x89F2, 0x89F3, 0x8B1E, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8B18, 0x8B16, + 0x8B11, 0x8B05, 0x8B0B, 0x8B22, 0x8B0F, 0x8B12, 0x8B15, 0x8B07, 0x8B0D, + 0x8B08, 0x8B06, 0x8B1C, 0x8B13, 0x8B1A, 0x8C4F, 0x8C70, 0x8C72, 0x8C71, + 0x8C6F, 0x8C95, 0x8C94, 0x8CF9, 0x8D6F, 0x8E4E, 0x8E4D, 0x8E53, 0x8E50, + 0x8E4C, 0x8E47, 0x8F43, 0x8F40, 0x9085, 0x907E, 0x9138, 0x919A, 0x91A2, + 0x919B, 0x9199, 0x919F, 0x91A1, 0x919D, 0x91A0, 0x93A1, 0x9383, 0x93AF, + 0x9364, 0x9356, 0x9347, 0x937C, 0x9358, 0x935C, 0x9376, 0x9349, 0x9350, + 0x9351, 0x9360, 0x936D, 0x938F, 0x934C, 0x936A, 0x9379, 0x9357, 0x9355, + 0x9352, 0x934F, 0x9371, 0x9377, 0x937B, 0x9361, 0x935E, 0x9363, 0x9367, + 0x9380, 0x934E, 0x9359, 0x95C7, 0x95C0, 0x95C9, 0x95C3, 0x95C5, 0x95B7, + 0x96AE, 0x96B0, 0x96AC, 0x9720, 0x971F, 0x9718, 0x971D, 0x9719, 0x979A, + 0x97A1, 0x979C}, + {0x979E, 0x979D, 0x97D5, 0x97D4, 0x97F1, 0x9841, 0x9844, 0x984A, 0x9849, + 0x9845, 0x9843, 0x9925, 0x992B, 0x992C, 0x992A, 0x9933, 0x9932, 0x992F, + 0x992D, 0x9931, 0x9930, 0x9998, 0x99A3, 0x99A1, 0x9A02, 0x99FA, 0x99F4, + 0x99F7, 0x99F9, 0x99F8, 0x99F6, 0x99FB, 0x99FD, 0x99FE, 0x99FC, 0x9A03, + 0x9ABE, 0x9AFE, 0x9AFD, 0x9B01, 0x9AFC, 0x9B48, 0x9B9A, 0x9BA8, 0x9B9E, + 0x9B9B, 0x9BA6, 0x9BA1, 0x9BA5, 0x9BA4, 0x9B86, 0x9BA2, 0x9BA0, 0x9BAF, + 0x9D33, 0x9D41, 0x9D67, 0x9D36, 0x9D2E, 0x9D2F, 0x9D31, 0x9D38, 0x9D30, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9D45, 0x9D42, + 0x9D43, 0x9D3E, 0x9D37, 0x9D40, 0x9D3D, 0x7FF5, 0x9D2D, 0x9E8A, 0x9E89, + 0x9E8D, 0x9EB0, 0x9EC8, 0x9EDA, 0x9EFB, 0x9EFF, 0x9F24, 0x9F23, 0x9F22, + 0x9F54, 0x9FA0, 0x5131, 0x512D, 0x512E, 0x5698, 0x569C, 0x5697, 0x569A, + 0x569D, 0x5699, 0x5970, 0x5B3C, 0x5C69, 0x5C6A, 0x5DC0, 0x5E6D, 0x5E6E, + 0x61D8, 0x61DF, 0x61ED, 0x61EE, 0x61F1, 0x61EA, 0x61F0, 0x61EB, 0x61D6, + 0x61E9, 0x64FF, 0x6504, 0x64FD, 0x64F8, 0x6501, 0x6503, 0x64FC, 0x6594, + 0x65DB, 0x66DA, 0x66DB, 0x66D8, 0x6AC5, 0x6AB9, 0x6ABD, 0x6AE1, 0x6AC6, + 0x6ABA, 0x6AB6, 0x6AB7, 0x6AC7, 0x6AB4, 0x6AAD, 0x6B5E, 0x6BC9, 0x6C0B, + 0x7007, 0x700C, 0x700D, 0x7001, 0x7005, 0x7014, 0x700E, 0x6FFF, 0x7000, + 0x6FFB, 0x7026, 0x6FFC, 0x6FF7, 0x700A, 0x7201, 0x71FF, 0x71F9, 0x7203, + 0x71FD, 0x7376}, + {0x74B8, 0x74C0, 0x74B5, 0x74C1, 0x74BE, 0x74B6, 0x74BB, 0x74C2, 0x7514, + 0x7513, 0x765C, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765A, 0x76A6, + 0x76BD, 0x76EC, 0x77C2, 0x77BA, 0x78FF, 0x790C, 0x7913, 0x7914, 0x7909, + 0x7910, 0x7912, 0x7911, 0x79AD, 0x79AC, 0x7A5F, 0x7C1C, 0x7C29, 0x7C19, + 0x7C20, 0x7C1F, 0x7C2D, 0x7C1D, 0x7C26, 0x7C28, 0x7C22, 0x7C25, 0x7C30, + 0x7E5C, 0x7E50, 0x7E56, 0x7E63, 0x7E58, 0x7E62, 0x7E5F, 0x7E51, 0x7E60, + 0x7E57, 0x7E53, 0x7FB5, 0x7FB3, 0x7FF7, 0x7FF8, 0x8075, 0x81D1, 0x81D2, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x81D0, 0x825F, + 0x825E, 0x85B4, 0x85C6, 0x85C0, 0x85C3, 0x85C2, 0x85B3, 0x85B5, 0x85BD, + 0x85C7, 0x85C4, 0x85BF, 0x85CB, 0x85CE, 0x85C8, 0x85C5, 0x85B1, 0x85B6, + 0x85D2, 0x8624, 0x85B8, 0x85B7, 0x85BE, 0x8669, 0x87E7, 0x87E6, 0x87E2, + 0x87DB, 0x87EB, 0x87EA, 0x87E5, 0x87DF, 0x87F3, 0x87E4, 0x87D4, 0x87DC, + 0x87D3, 0x87ED, 0x87D8, 0x87E3, 0x87A4, 0x87D7, 0x87D9, 0x8801, 0x87F4, + 0x87E8, 0x87DD, 0x8953, 0x894B, 0x894F, 0x894C, 0x8946, 0x8950, 0x8951, + 0x8949, 0x8B2A, 0x8B27, 0x8B23, 0x8B33, 0x8B30, 0x8B35, 0x8B47, 0x8B2F, + 0x8B3C, 0x8B3E, 0x8B31, 0x8B25, 0x8B37, 0x8B26, 0x8B36, 0x8B2E, 0x8B24, + 0x8B3B, 0x8B3D, 0x8B3A, 0x8C42, 0x8C75, 0x8C99, 0x8C98, 0x8C97, 0x8CFE, + 0x8D04, 0x8D02, 0x8D00, 0x8E5C, 0x8E62, 0x8E60, 0x8E57, 0x8E56, 0x8E5E, + 0x8E65, 0x8E67}, + {0x8E5B, 0x8E5A, 0x8E61, 0x8E5D, 0x8E69, 0x8E54, 0x8F46, 0x8F47, 0x8F48, + 0x8F4B, 0x9128, 0x913A, 0x913B, 0x913E, 0x91A8, 0x91A5, 0x91A7, 0x91AF, + 0x91AA, 0x93B5, 0x938C, 0x9392, 0x93B7, 0x939B, 0x939D, 0x9389, 0x93A7, + 0x938E, 0x93AA, 0x939E, 0x93A6, 0x9395, 0x9388, 0x9399, 0x939F, 0x938D, + 0x93B1, 0x9391, 0x93B2, 0x93A4, 0x93A8, 0x93B4, 0x93A3, 0x93A5, 0x95D2, + 0x95D3, 0x95D1, 0x96B3, 0x96D7, 0x96DA, 0x5DC2, 0x96DF, 0x96D8, 0x96DD, + 0x9723, 0x9722, 0x9725, 0x97AC, 0x97AE, 0x97A8, 0x97AB, 0x97A4, 0x97AA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x97A2, 0x97A5, + 0x97D7, 0x97D9, 0x97D6, 0x97D8, 0x97FA, 0x9850, 0x9851, 0x9852, 0x98B8, + 0x9941, 0x993C, 0x993A, 0x9A0F, 0x9A0B, 0x9A09, 0x9A0D, 0x9A04, 0x9A11, + 0x9A0A, 0x9A05, 0x9A07, 0x9A06, 0x9AC0, 0x9ADC, 0x9B08, 0x9B04, 0x9B05, + 0x9B29, 0x9B35, 0x9B4A, 0x9B4C, 0x9B4B, 0x9BC7, 0x9BC6, 0x9BC3, 0x9BBF, + 0x9BC1, 0x9BB5, 0x9BB8, 0x9BD3, 0x9BB6, 0x9BC4, 0x9BB9, 0x9BBD, 0x9D5C, + 0x9D53, 0x9D4F, 0x9D4A, 0x9D5B, 0x9D4B, 0x9D59, 0x9D56, 0x9D4C, 0x9D57, + 0x9D52, 0x9D54, 0x9D5F, 0x9D58, 0x9D5A, 0x9E8E, 0x9E8C, 0x9EDF, 0x9F01, + 0x9F00, 0x9F16, 0x9F25, 0x9F2B, 0x9F2A, 0x9F29, 0x9F28, 0x9F4C, 0x9F55, + 0x5134, 0x5135, 0x5296, 0x52F7, 0x53B4, 0x56AB, 0x56AD, 0x56A6, 0x56A7, + 0x56AA, 0x56AC, 0x58DA, 0x58DD, 0x58DB, 0x5912, 0x5B3D, 0x5B3E, 0x5B3F, + 0x5DC3, 0x5E70}, + {0x5FBF, 0x61FB, 0x6507, 0x6510, 0x650D, 0x6509, 0x650C, 0x650E, 0x6584, + 0x65DE, 0x65DD, 0x66DE, 0x6AE7, 0x6AE0, 0x6ACC, 0x6AD1, 0x6AD9, 0x6ACB, + 0x6ADF, 0x6ADC, 0x6AD0, 0x6AEB, 0x6ACF, 0x6ACD, 0x6ADE, 0x6B60, 0x6BB0, + 0x6C0C, 0x7019, 0x7027, 0x7020, 0x7016, 0x702B, 0x7021, 0x7022, 0x7023, + 0x7029, 0x7017, 0x7024, 0x701C, 0x702A, 0x720C, 0x720A, 0x7207, 0x7202, + 0x7205, 0x72A5, 0x72A6, 0x72A4, 0x72A3, 0x72A1, 0x74CB, 0x74C5, 0x74B7, + 0x74C3, 0x7516, 0x7660, 0x77C9, 0x77CA, 0x77C4, 0x77F1, 0x791D, 0x791B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7921, 0x791C, + 0x7917, 0x791E, 0x79B0, 0x7A67, 0x7A68, 0x7C33, 0x7C3C, 0x7C39, 0x7C2C, + 0x7C3B, 0x7CEC, 0x7CEA, 0x7E76, 0x7E75, 0x7E78, 0x7E70, 0x7E77, 0x7E6F, + 0x7E7A, 0x7E72, 0x7E74, 0x7E68, 0x7F4B, 0x7F4A, 0x7F83, 0x7F86, 0x7FB7, + 0x7FFD, 0x7FFE, 0x8078, 0x81D7, 0x81D5, 0x8264, 0x8261, 0x8263, 0x85EB, + 0x85F1, 0x85ED, 0x85D9, 0x85E1, 0x85E8, 0x85DA, 0x85D7, 0x85EC, 0x85F2, + 0x85F8, 0x85D8, 0x85DF, 0x85E3, 0x85DC, 0x85D1, 0x85F0, 0x85E6, 0x85EF, + 0x85DE, 0x85E2, 0x8800, 0x87FA, 0x8803, 0x87F6, 0x87F7, 0x8809, 0x880C, + 0x880B, 0x8806, 0x87FC, 0x8808, 0x87FF, 0x880A, 0x8802, 0x8962, 0x895A, + 0x895B, 0x8957, 0x8961, 0x895C, 0x8958, 0x895D, 0x8959, 0x8988, 0x89B7, + 0x89B6, 0x89F6, 0x8B50, 0x8B48, 0x8B4A, 0x8B40, 0x8B53, 0x8B56, 0x8B54, + 0x8B4B, 0x8B55}, + {0x8B51, 0x8B42, 0x8B52, 0x8B57, 0x8C43, 0x8C77, 0x8C76, 0x8C9A, 0x8D06, + 0x8D07, 0x8D09, 0x8DAC, 0x8DAA, 0x8DAD, 0x8DAB, 0x8E6D, 0x8E78, 0x8E73, + 0x8E6A, 0x8E6F, 0x8E7B, 0x8EC2, 0x8F52, 0x8F51, 0x8F4F, 0x8F50, 0x8F53, + 0x8FB4, 0x9140, 0x913F, 0x91B0, 0x91AD, 0x93DE, 0x93C7, 0x93CF, 0x93C2, + 0x93DA, 0x93D0, 0x93F9, 0x93EC, 0x93CC, 0x93D9, 0x93A9, 0x93E6, 0x93CA, + 0x93D4, 0x93EE, 0x93E3, 0x93D5, 0x93C4, 0x93CE, 0x93C0, 0x93D2, 0x93E7, + 0x957D, 0x95DA, 0x95DB, 0x96E1, 0x9729, 0x972B, 0x972C, 0x9728, 0x9726, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x97B3, 0x97B7, + 0x97B6, 0x97DD, 0x97DE, 0x97DF, 0x985C, 0x9859, 0x985D, 0x9857, 0x98BF, + 0x98BD, 0x98BB, 0x98BE, 0x9948, 0x9947, 0x9943, 0x99A6, 0x99A7, 0x9A1A, + 0x9A15, 0x9A25, 0x9A1D, 0x9A24, 0x9A1B, 0x9A22, 0x9A20, 0x9A27, 0x9A23, + 0x9A1E, 0x9A1C, 0x9A14, 0x9AC2, 0x9B0B, 0x9B0A, 0x9B0E, 0x9B0C, 0x9B37, + 0x9BEA, 0x9BEB, 0x9BE0, 0x9BDE, 0x9BE4, 0x9BE6, 0x9BE2, 0x9BF0, 0x9BD4, + 0x9BD7, 0x9BEC, 0x9BDC, 0x9BD9, 0x9BE5, 0x9BD5, 0x9BE1, 0x9BDA, 0x9D77, + 0x9D81, 0x9D8A, 0x9D84, 0x9D88, 0x9D71, 0x9D80, 0x9D78, 0x9D86, 0x9D8B, + 0x9D8C, 0x9D7D, 0x9D6B, 0x9D74, 0x9D75, 0x9D70, 0x9D69, 0x9D85, 0x9D73, + 0x9D7B, 0x9D82, 0x9D6F, 0x9D79, 0x9D7F, 0x9D87, 0x9D68, 0x9E94, 0x9E91, + 0x9EC0, 0x9EFC, 0x9F2D, 0x9F40, 0x9F41, 0x9F4D, 0x9F56, 0x9F57, 0x9F58, + 0x5337, 0x56B2}, + {0x56B5, 0x56B3, 0x58E3, 0x5B45, 0x5DC6, 0x5DC7, 0x5EEE, 0x5EEF, 0x5FC0, + 0x5FC1, 0x61F9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65DF, 0x66E8, 0x66E3, + 0x66E4, 0x6AF3, 0x6AF0, 0x6AEA, 0x6AE8, 0x6AF9, 0x6AF1, 0x6AEE, 0x6AEF, + 0x703C, 0x7035, 0x702F, 0x7037, 0x7034, 0x7031, 0x7042, 0x7038, 0x703F, + 0x703A, 0x7039, 0x7040, 0x703B, 0x7033, 0x7041, 0x7213, 0x7214, 0x72A8, + 0x737D, 0x737C, 0x74BA, 0x76AB, 0x76AA, 0x76BE, 0x76ED, 0x77CC, 0x77CE, + 0x77CF, 0x77CD, 0x77F2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x79B2, 0x7A6E, + 0x7A6C, 0x7A6D, 0x7AF7, 0x7C49, 0x7C48, 0x7C4A, 0x7C47, 0x7C45, 0x7CEE, + 0x7E7B, 0x7E7E, 0x7E81, 0x7E80, 0x7FBA, 0x7FFF, 0x8079, 0x81DB, 0x81D9, + 0x820B, 0x8268, 0x8269, 0x8622, 0x85FF, 0x8601, 0x85FE, 0x861B, 0x8600, + 0x85F6, 0x8604, 0x8609, 0x8605, 0x860C, 0x85FD, 0x8819, 0x8810, 0x8811, + 0x8817, 0x8813, 0x8816, 0x8963, 0x8966, 0x89B9, 0x89F7, 0x8B60, 0x8B6A, + 0x8B5D, 0x8B68, 0x8B63, 0x8B65, 0x8B67, 0x8B6D, 0x8DAE, 0x8E86, 0x8E88, + 0x8E84, 0x8F59, 0x8F56, 0x8F57, 0x8F55, 0x8F58, 0x8F5A, 0x908D, 0x9143, + 0x9141, 0x91B7, 0x91B5, 0x91B2, 0x91B3, 0x940B, 0x9413, 0x93FB, 0x9420, + 0x940F, 0x9414, 0x93FE, 0x9415, 0x9410, 0x9428, 0x9419, 0x940D, 0x93F5, + 0x9400, 0x93F7, 0x9407, 0x940E, 0x9416, 0x9412, 0x93FA, 0x9409, 0x93F8, + 0x940A, 0x93FF}, + {0x93FC, 0x940C, 0x93F6, 0x9411, 0x9406, 0x95DE, 0x95E0, 0x95DF, 0x972E, + 0x972F, 0x97B9, 0x97BB, 0x97FD, 0x97FE, 0x9860, 0x9862, 0x9863, 0x985F, + 0x98C1, 0x98C2, 0x9950, 0x994E, 0x9959, 0x994C, 0x994B, 0x9953, 0x9A32, + 0x9A34, 0x9A31, 0x9A2C, 0x9A2A, 0x9A36, 0x9A29, 0x9A2E, 0x9A38, 0x9A2D, + 0x9AC7, 0x9ACA, 0x9AC6, 0x9B10, 0x9B12, 0x9B11, 0x9C0B, 0x9C08, 0x9BF7, + 0x9C05, 0x9C12, 0x9BF8, 0x9C40, 0x9C07, 0x9C0E, 0x9C06, 0x9C17, 0x9C14, + 0x9C09, 0x9D9F, 0x9D99, 0x9DA4, 0x9D9D, 0x9D92, 0x9D98, 0x9D90, 0x9D9B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9DA0, 0x9D94, + 0x9D9C, 0x9DAA, 0x9D97, 0x9DA1, 0x9D9A, 0x9DA2, 0x9DA8, 0x9D9E, 0x9DA3, + 0x9DBF, 0x9DA9, 0x9D96, 0x9DA6, 0x9DA7, 0x9E99, 0x9E9B, 0x9E9A, 0x9EE5, + 0x9EE4, 0x9EE7, 0x9EE6, 0x9F30, 0x9F2E, 0x9F5B, 0x9F60, 0x9F5E, 0x9F5D, + 0x9F59, 0x9F91, 0x513A, 0x5139, 0x5298, 0x5297, 0x56C3, 0x56BD, 0x56BE, + 0x5B48, 0x5B47, 0x5DCB, 0x5DCF, 0x5EF1, 0x61FD, 0x651B, 0x6B02, 0x6AFC, + 0x6B03, 0x6AF8, 0x6B00, 0x7043, 0x7044, 0x704A, 0x7048, 0x7049, 0x7045, + 0x7046, 0x721D, 0x721A, 0x7219, 0x737E, 0x7517, 0x766A, 0x77D0, 0x792D, + 0x7931, 0x792F, 0x7C54, 0x7C53, 0x7CF2, 0x7E8A, 0x7E87, 0x7E88, 0x7E8B, + 0x7E86, 0x7E8D, 0x7F4D, 0x7FBB, 0x8030, 0x81DD, 0x8618, 0x862A, 0x8626, + 0x861F, 0x8623, 0x861C, 0x8619, 0x8627, 0x862E, 0x8621, 0x8620, 0x8629, + 0x861E, 0x8625}, + {0x8829, 0x881D, 0x881B, 0x8820, 0x8824, 0x881C, 0x882B, 0x884A, 0x896D, + 0x8969, 0x896E, 0x896B, 0x89FA, 0x8B79, 0x8B78, 0x8B45, 0x8B7A, 0x8B7B, + 0x8D10, 0x8D14, 0x8DAF, 0x8E8E, 0x8E8C, 0x8F5E, 0x8F5B, 0x8F5D, 0x9146, + 0x9144, 0x9145, 0x91B9, 0x943F, 0x943B, 0x9436, 0x9429, 0x943D, 0x943C, + 0x9430, 0x9439, 0x942A, 0x9437, 0x942C, 0x9440, 0x9431, 0x95E5, 0x95E4, + 0x95E3, 0x9735, 0x973A, 0x97BF, 0x97E1, 0x9864, 0x98C9, 0x98C6, 0x98C0, + 0x9958, 0x9956, 0x9A39, 0x9A3D, 0x9A46, 0x9A44, 0x9A42, 0x9A41, 0x9A3A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9A3F, 0x9ACD, + 0x9B15, 0x9B17, 0x9B18, 0x9B16, 0x9B3A, 0x9B52, 0x9C2B, 0x9C1D, 0x9C1C, + 0x9C2C, 0x9C23, 0x9C28, 0x9C29, 0x9C24, 0x9C21, 0x9DB7, 0x9DB6, 0x9DBC, + 0x9DC1, 0x9DC7, 0x9DCA, 0x9DCF, 0x9DBE, 0x9DC5, 0x9DC3, 0x9DBB, 0x9DB5, + 0x9DCE, 0x9DB9, 0x9DBA, 0x9DAC, 0x9DC8, 0x9DB1, 0x9DAD, 0x9DCC, 0x9DB3, + 0x9DCD, 0x9DB2, 0x9E7A, 0x9E9C, 0x9EEB, 0x9EEE, 0x9EED, 0x9F1B, 0x9F18, + 0x9F1A, 0x9F31, 0x9F4E, 0x9F65, 0x9F64, 0x9F92, 0x4EB9, 0x56C6, 0x56C5, + 0x56CB, 0x5971, 0x5B4B, 0x5B4C, 0x5DD5, 0x5DD1, 0x5EF2, 0x6521, 0x6520, + 0x6526, 0x6522, 0x6B0B, 0x6B08, 0x6B09, 0x6C0D, 0x7055, 0x7056, 0x7057, + 0x7052, 0x721E, 0x721F, 0x72A9, 0x737F, 0x74D8, 0x74D5, 0x74D9, 0x74D7, + 0x766D, 0x76AD, 0x7935, 0x79B4, 0x7A70, 0x7A71, 0x7C57, 0x7C5C, 0x7C59, + 0x7C5B, 0x7C5A}, + {0x7CF4, 0x7CF1, 0x7E91, 0x7F4F, 0x7F87, 0x81DE, 0x826B, 0x8634, 0x8635, + 0x8633, 0x862C, 0x8632, 0x8636, 0x882C, 0x8828, 0x8826, 0x882A, 0x8825, + 0x8971, 0x89BF, 0x89BE, 0x89FB, 0x8B7E, 0x8B84, 0x8B82, 0x8B86, 0x8B85, + 0x8B7F, 0x8D15, 0x8E95, 0x8E94, 0x8E9A, 0x8E92, 0x8E90, 0x8E96, 0x8E97, + 0x8F60, 0x8F62, 0x9147, 0x944C, 0x9450, 0x944A, 0x944B, 0x944F, 0x9447, + 0x9445, 0x9448, 0x9449, 0x9446, 0x973F, 0x97E3, 0x986A, 0x9869, 0x98CB, + 0x9954, 0x995B, 0x9A4E, 0x9A53, 0x9A54, 0x9A4C, 0x9A4F, 0x9A48, 0x9A4A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9A49, 0x9A52, + 0x9A50, 0x9AD0, 0x9B19, 0x9B2B, 0x9B3B, 0x9B56, 0x9B55, 0x9C46, 0x9C48, + 0x9C3F, 0x9C44, 0x9C39, 0x9C33, 0x9C41, 0x9C3C, 0x9C37, 0x9C34, 0x9C32, + 0x9C3D, 0x9C36, 0x9DDB, 0x9DD2, 0x9DDE, 0x9DDA, 0x9DCB, 0x9DD0, 0x9DDC, + 0x9DD1, 0x9DDF, 0x9DE9, 0x9DD9, 0x9DD8, 0x9DD6, 0x9DF5, 0x9DD5, 0x9DDD, + 0x9EB6, 0x9EF0, 0x9F35, 0x9F33, 0x9F32, 0x9F42, 0x9F6B, 0x9F95, 0x9FA2, + 0x513D, 0x5299, 0x58E8, 0x58E7, 0x5972, 0x5B4D, 0x5DD8, 0x882F, 0x5F4F, + 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66EB, 0x6B11, 0x6B12, + 0x6B0F, 0x6BCA, 0x705B, 0x705A, 0x7222, 0x7382, 0x7381, 0x7383, 0x7670, + 0x77D4, 0x7C67, 0x7C66, 0x7E95, 0x826C, 0x863A, 0x8640, 0x8639, 0x863C, + 0x8631, 0x863B, 0x863E, 0x8830, 0x8832, 0x882E, 0x8833, 0x8976, 0x8974, + 0x8973, 0x89FE}, + {0x8B8C, 0x8B8E, 0x8B8B, 0x8B88, 0x8C45, 0x8D19, 0x8E98, 0x8F64, 0x8F63, + 0x91BC, 0x9462, 0x9455, 0x945D, 0x9457, 0x945E, 0x97C4, 0x97C5, 0x9800, + 0x9A56, 0x9A59, 0x9B1E, 0x9B1F, 0x9B20, 0x9C52, 0x9C58, 0x9C50, 0x9C4A, + 0x9C4D, 0x9C4B, 0x9C55, 0x9C59, 0x9C4C, 0x9C4E, 0x9DFB, 0x9DF7, 0x9DEF, + 0x9DE3, 0x9DEB, 0x9DF8, 0x9DE4, 0x9DF6, 0x9DE1, 0x9DEE, 0x9DE6, 0x9DF2, + 0x9DF0, 0x9DE2, 0x9DEC, 0x9DF4, 0x9DF3, 0x9DE8, 0x9DED, 0x9EC2, 0x9ED0, + 0x9EF2, 0x9EF3, 0x9F06, 0x9F1C, 0x9F38, 0x9F37, 0x9F36, 0x9F43, 0x9F4F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9F71, 0x9F70, + 0x9F6E, 0x9F6F, 0x56D3, 0x56CD, 0x5B4E, 0x5C6D, 0x652D, 0x66ED, 0x66EE, + 0x6B13, 0x705F, 0x7061, 0x705D, 0x7060, 0x7223, 0x74DB, 0x74E5, 0x77D5, + 0x7938, 0x79B7, 0x79B6, 0x7C6A, 0x7E97, 0x7F89, 0x826D, 0x8643, 0x8838, + 0x8837, 0x8835, 0x884B, 0x8B94, 0x8B95, 0x8E9E, 0x8E9F, 0x8EA0, 0x8E9D, + 0x91BE, 0x91BD, 0x91C2, 0x946B, 0x9468, 0x9469, 0x96E5, 0x9746, 0x9743, + 0x9747, 0x97C7, 0x97E5, 0x9A5E, 0x9AD5, 0x9B59, 0x9C63, 0x9C67, 0x9C66, + 0x9C62, 0x9C5E, 0x9C60, 0x9E02, 0x9DFE, 0x9E07, 0x9E03, 0x9E06, 0x9E05, + 0x9E00, 0x9E01, 0x9E09, 0x9DFF, 0x9DFD, 0x9E04, 0x9EA0, 0x9F1E, 0x9F46, + 0x9F74, 0x9F75, 0x9F76, 0x56D4, 0x652E, 0x65B8, 0x6B18, 0x6B19, 0x6B17, + 0x6B1A, 0x7062, 0x7226, 0x72AA, 0x77D8, 0x77D9, 0x7939, 0x7C69, 0x7C6B, + 0x7CF6, 0x7E9A}, + {0x7E98, 0x7E9B, 0x7E99, 0x81E0, 0x81E1, 0x8646, 0x8647, 0x8648, 0x8979, + 0x897A, 0x897C, 0x897B, 0x89FF, 0x8B98, 0x8B99, 0x8EA5, 0x8EA4, 0x8EA3, + 0x946E, 0x946D, 0x946F, 0x9471, 0x9473, 0x9749, 0x9872, 0x995F, 0x9C68, + 0x9C6E, 0x9C6D, 0x9E0B, 0x9E0D, 0x9E10, 0x9E0F, 0x9E12, 0x9E11, 0x9EA1, + 0x9EF5, 0x9F09, 0x9F47, 0x9F78, 0x9F7B, 0x9F7A, 0x9F79, 0x571E, 0x7066, + 0x7C6F, 0x883C, 0x8DB2, 0x8EA6, 0x91C3, 0x9474, 0x9478, 0x9476, 0x9475, + 0x9A60, 0x9C74, 0x9C73, 0x9C71, 0x9C75, 0x9E14, 0x9E13, 0x9EF6, 0x9F0A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9FA4, 0x7068, + 0x7065, 0x7CF7, 0x866A, 0x883E, 0x883D, 0x883F, 0x8B9E, 0x8C9C, 0x8EA9, + 0x8EC9, 0x974B, 0x9873, 0x9874, 0x98CC, 0x9961, 0x99AB, 0x9A64, 0x9A66, + 0x9A67, 0x9B24, 0x9E15, 0x9E17, 0x9F48, 0x6207, 0x6B1E, 0x7227, 0x864C, + 0x8EA8, 0x9482, 0x9480, 0x9481, 0x9A69, 0x9A68, 0x9B2E, 0x9E19, 0x7229, + 0x864B, 0x8B9F, 0x9483, 0x9C79, 0x9EB7, 0x7675, 0x9A6B, 0x9C7A, 0x9E1D, + 0x7069, 0x706A, 0x9EA4, 0x9F7E, 0x9F49, 0x9F98, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR}, +}; + +/* + * Mapping from Unicode back to Big5. + * + * This inverse is done the same way the SBCS ones are done: I + * provide a list of Big5 positions, sorted into ascending order of + * their Unicode values. Then we can binary-search through this + * list, referring to the above table for each comparison, to find + * the coordinates for a given code point. + * + * Generated by running the following sh+Perl over BIG5.TXT: + +cat BIG5.TXT | \ +sed -e $'s/^\\(0xA15A\t\\)0xFFFD/\\10xFF3F/' \ + -e $'s/^\\(0xA1FE\t\\)0xFFFD/\\10x2571/' \ + -e $'s/^\\(0xA240\t\\)0xFFFD/\\10x2572/' \ + -e $'s/^\\(0xA2CC\t\\)0xFFFD/\\10x5341/' \ + -e $'s/^\\(0xA2CE\t\\)0xFFFD/\\10x5345/' \ + -e '/^0xA1C3/d' -e '/^0xA1C5/d' | \ +perl -ne '$a{$3}=[hex$1,hex$2] if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {$o=" ";for $k (sort keys %a) { ($r,$c) = @{$a{$k}}; ' \ + -e '$o .= $C; $C = ", "; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= sprintf "{%d,%d}", $r-161,$c-64; } print "$o\n"; }' + + */ + +static const struct { unsigned char r, c; } big5_backward[] = { + {1,6}, {1,7}, {1,4}, {0,113}, {1,24}, {0,147}, {0,16}, {0,145}, {0,146}, + {2,126}, {2,124}, {2,125}, {2,127}, {2,123}, {2,4}, {2,5}, {2,6}, {2,7}, + {2,8}, {2,9}, {2,10}, {2,11}, {2,12}, {2,13}, {2,14}, {2,15}, {2,16}, + {2,17}, {2,18}, {2,19}, {2,20}, {2,21}, {2,22}, {2,23}, {2,24}, {2,25}, + {2,26}, {2,27}, {2,28}, {2,29}, {2,30}, {2,31}, {2,32}, {2,33}, {2,34}, + {2,35}, {2,36}, {2,37}, {2,38}, {2,39}, {2,40}, {2,41}, {2,42}, {2,43}, + {2,44}, {2,45}, {2,46}, {2,47}, {2,48}, {2,49}, {2,50}, {2,51}, {38,115}, + {38,113}, {38,114}, {38,116}, {38,117}, {38,118}, {38,119}, {38,120}, + {38,121}, {38,122}, {38,123}, {38,124}, {38,125}, {38,126}, {38,127}, + {38,128}, {38,129}, {38,130}, {38,131}, {38,132}, {38,133}, {38,134}, + {38,135}, {38,136}, {38,137}, {38,138}, {38,139}, {38,140}, {38,141}, + {38,143}, {38,144}, {38,145}, {38,146}, {38,147}, {38,148}, {38,149}, + {38,150}, {38,151}, {38,152}, {38,153}, {38,154}, {38,155}, {38,156}, + {38,157}, {38,158}, {38,159}, {38,160}, {38,161}, {38,162}, {38,163}, + {38,164}, {38,165}, {38,166}, {38,167}, {38,168}, {38,142}, {0,22}, + {0,24}, {0,101}, {0,102}, {0,103}, {0,104}, {0,5}, {0,12}, {0,11}, + {0,108}, {0,107}, {0,112}, {0,130}, {1,10}, {0,129}, {1,11}, {1,121}, + {1,122}, {1,123}, {1,124}, {1,125}, {1,126}, {1,127}, {1,128}, {1,129}, + {1,130}, {0,182}, {0,180}, {0,183}, {0,181}, {0,184}, {0,185}, {0,187}, + {0,186}, {0,148}, {0,155}, {0,168}, {0,167}, {0,189}, {0,188}, {0,164}, + {0,165}, {0,172}, {0,173}, {0,175}, {0,174}, {0,163}, {0,156}, {0,154}, + {0,157}, {0,152}, {0,153}, {0,166}, {0,169}, {38,169}, {38,170}, {38,171}, + {38,172}, {38,173}, {38,174}, {38,175}, {38,176}, {38,177}, {38,178}, + {38,179}, {38,180}, {38,181}, {38,182}, {38,183}, {38,184}, {38,185}, + {38,186}, {38,187}, {38,188}, {1,55}, {1,56}, {1,58}, {1,59}, {1,60}, + {1,61}, {1,53}, {1,52}, {1,51}, {1,50}, {1,49}, {1,100}, {1,101}, {1,103}, + {1,102}, {1,62}, {1,97}, {1,99}, {1,98}, {1,108}, {1,109}, {1,110}, + {1,34}, {1,35}, {1,36}, {1,37}, {1,38}, {1,39}, {1,40}, {1,41}, {1,48}, + {1,47}, {1,46}, {1,45}, {1,44}, {1,43}, {1,42}, {1,54}, {1,57}, {0,125}, + {0,124}, {0,118}, {0,117}, {0,127}, {0,126}, {0,123}, {0,122}, {0,115}, + {0,119}, {0,116}, {1,104}, {1,105}, {1,107}, {1,106}, {0,121}, {0,120}, + {0,179}, {0,176}, {0,178}, {0,177}, {0,0}, {0,2}, {0,3}, {0,114}, {37,100}, + {0,49}, {0,50}, {0,45}, {0,46}, {0,53}, {0,54}, {0,57}, {0,58}, {0,41}, + {0,42}, {1,5}, {0,37}, {0,38}, {0,105}, {0,106}, {1,131}, {1,132}, + {1,133}, {1,134}, {1,135}, {1,136}, {1,137}, {1,138}, {1,139}, {37,101}, + {37,102}, {37,103}, {37,104}, {37,105}, {37,106}, {37,107}, {37,108}, + {37,109}, {37,110}, {37,111}, {37,112}, {37,113}, {37,114}, {37,115}, + {37,116}, {37,117}, {37,118}, {37,119}, {37,120}, {37,121}, {37,122}, + {37,123}, {37,124}, {37,125}, {37,126}, {37,127}, {37,128}, {37,129}, + {37,130}, {37,131}, {37,132}, {37,133}, {37,134}, {37,135}, {37,136}, + {37,137}, {37,138}, {37,139}, {37,140}, {37,141}, {37,142}, {37,143}, + {37,144}, {37,145}, {37,146}, {37,147}, {37,148}, {37,149}, {37,150}, + {37,151}, {37,152}, {37,153}, {37,154}, {37,155}, {37,156}, {37,157}, + {37,158}, {37,159}, {37,160}, {37,161}, {37,162}, {37,163}, {37,164}, + {37,165}, {37,166}, {37,167}, {37,168}, {37,169}, {37,170}, {37,171}, + {37,172}, {37,173}, {37,174}, {37,175}, {37,176}, {37,177}, {37,178}, + {37,179}, {37,180}, {37,181}, {37,182}, {37,183}, {37,98}, {37,99}, + {37,184}, {37,185}, {37,186}, {37,187}, {37,188}, {37,189}, {37,190}, + {38,0}, {38,1}, {38,2}, {38,3}, {38,4}, {38,5}, {38,6}, {38,7}, {38,8}, + {38,9}, {38,10}, {38,11}, {38,12}, {38,13}, {38,14}, {38,15}, {38,16}, + {38,17}, {38,18}, {38,19}, {38,20}, {38,21}, {38,22}, {38,23}, {38,24}, + {38,25}, {38,26}, {38,27}, {38,28}, {38,29}, {38,30}, {38,31}, {38,32}, + {38,33}, {38,34}, {38,35}, {38,36}, {38,37}, {38,38}, {38,39}, {38,40}, + {38,41}, {38,42}, {38,43}, {38,44}, {38,45}, {38,46}, {38,47}, {38,48}, + {38,49}, {38,50}, {38,51}, {38,52}, {38,53}, {38,54}, {38,55}, {38,56}, + {38,57}, {38,58}, {38,59}, {38,60}, {38,61}, {38,62}, {38,97}, {38,98}, + {38,99}, {38,100}, {38,101}, {38,102}, {38,103}, {38,104}, {38,105}, + {38,106}, {38,107}, {38,108}, {38,109}, {38,110}, {38,111}, {38,112}, + {37,97}, {2,52}, {2,53}, {2,54}, {2,55}, {2,56}, {2,57}, {2,58}, {2,59}, + {2,60}, {2,61}, {2,62}, {2,97}, {2,98}, {2,99}, {2,100}, {2,101}, {2,102}, + {2,103}, {2,104}, {2,105}, {2,106}, {2,107}, {2,108}, {2,109}, {2,110}, + {2,111}, {2,112}, {2,113}, {2,114}, {2,115}, {2,116}, {2,117}, {2,118}, + {2,119}, {2,120}, {2,121}, {2,122}, {0,128}, {1,21}, {1,22}, {1,16}, + {1,17}, {1,18}, {1,20}, {1,23}, {1,19}, {0,171}, {0,170}, {1,15}, {3,0}, + {3,2}, {3,3}, {40,5}, {3,22}, {3,20}, {3,23}, {3,21}, {40,6}, {3,99}, + {40,15}, {40,13}, {3,98}, {3,97}, {4,2}, {4,1}, {4,0}, {4,3}, {3,190}, + {4,160}, {4,161}, {7,131}, {3,24}, {3,100}, {40,16}, {3,101}, {40,35}, + {5,170}, {42,113}, {3,25}, {3,102}, {4,4}, {40,36}, {40,0}, {3,4}, + {3,27}, {40,7}, {3,28}, {3,103}, {4,5}, {4,7}, {4,6}, {4,162}, {4,163}, + {7,132}, {12,124}, {3,1}, {40,1}, {3,5}, {3,30}, {3,29}, {4,164}, {7,133}, + {15,110}, {51,11}, {21,131}, {59,113}, {59,114}, {3,6}, {3,105}, {7,134}, + {3,7}, {40,8}, {3,31}, {3,106}, {3,108}, {40,17}, {3,109}, {3,107}, + {4,165}, {7,135}, {7,136}, {10,5}, {3,32}, {3,110}, {4,166}, {4,168}, + {4,167}, {5,171}, {7,137}, {7,138}, {10,6}, {10,7}, {12,125}, {59,115}, + {85,150}, {3,8}, {3,112}, {3,111}, {40,18}, {3,113}, {3,119}, {3,114}, + {3,115}, {40,20}, {40,19}, {3,117}, {3,118}, {3,116}, {4,10}, {4,11}, + {4,12}, {4,13}, {4,9}, {4,16}, {40,42}, {40,38}, {40,41}, {4,17}, {4,33}, + {40,40}, {4,14}, {4,15}, {4,8}, {40,37}, {40,39}, {4,181}, {40,112}, + {4,178}, {4,182}, {40,122}, {40,110}, {4,179}, {40,114}, {4,180}, {4,183}, + {4,169}, {40,113}, {4,184}, {40,117}, {40,121}, {40,118}, {40,115}, + {4,170}, {4,172}, {4,185}, {4,174}, {40,107}, {4,177}, {4,175}, {4,176}, + {40,123}, {40,120}, {40,111}, {4,173}, {40,108}, {4,171}, {40,116}, + {40,119}, {40,109}, {41,38}, {6,2}, {5,180}, {41,39}, {5,177}, {6,4}, + {5,185}, {5,184}, {41,27}, {5,188}, {5,183}, {41,32}, {41,40}, {41,36}, + {5,186}, {5,189}, {5,174}, {6,7}, {41,29}, {42,125}, {5,172}, {6,3}, + {5,173}, {5,181}, {5,182}, {41,34}, {41,30}, {5,187}, {5,179}, {41,26}, + {5,175}, {41,37}, {6,5}, {6,8}, {5,178}, {6,0}, {6,6}, {5,176}, {41,35}, + {6,1}, {41,41}, {41,28}, {5,190}, {41,31}, {41,33}, {7,152}, {42,127}, + {42,139}, {7,144}, {42,140}, {7,139}, {7,149}, {7,142}, {42,121}, {7,150}, + {42,120}, {42,124}, {42,131}, {42,129}, {7,158}, {7,153}, {42,115}, + {42,117}, {7,155}, {7,143}, {42,118}, {42,130}, {42,137}, {7,148}, + {42,123}, {42,116}, {7,147}, {42,119}, {7,151}, {42,122}, {7,146}, + {7,141}, {7,156}, {42,132}, {7,157}, {42,136}, {42,134}, {42,138}, + {7,154}, {42,126}, {42,114}, {42,128}, {7,145}, {42,133}, {7,140}, + {42,135}, {10,22}, {10,10}, {44,160}, {44,168}, {10,9}, {10,17}, {10,29}, + {44,174}, {44,172}, {44,167}, {10,11}, {44,173}, {44,163}, {10,25}, + {10,16}, {10,24}, {44,158}, {44,170}, {44,161}, {10,20}, {44,162}, + {44,157}, {10,27}, {10,14}, {10,23}, {10,13}, {44,159}, {44,164}, {44,171}, + {10,21}, {10,18}, {44,166}, {10,26}, {44,169}, {44,165}, {10,15}, {10,28}, + {10,19}, {10,12}, {10,8}, {44,175}, {12,151}, {12,129}, {12,145}, {12,150}, + {47,144}, {47,143}, {47,148}, {47,149}, {12,132}, {12,141}, {12,154}, + {12,142}, {47,137}, {12,135}, {47,138}, {12,156}, {12,147}, {12,126}, + {12,127}, {47,157}, {15,127}, {12,140}, {12,139}, {47,139}, {12,143}, + {51,27}, {12,134}, {47,150}, {12,149}, {12,148}, {12,138}, {47,142}, + {47,151}, {47,136}, {12,137}, {47,152}, {12,146}, {47,140}, {12,128}, + {12,131}, {12,130}, {47,153}, {12,144}, {12,133}, {12,153}, {12,155}, + {47,147}, {12,152}, {47,155}, {47,141}, {47,156}, {47,145}, {47,154}, + {47,146}, {12,136}, {51,35}, {51,23}, {15,115}, {51,28}, {51,34}, {15,114}, + {51,21}, {15,118}, {51,25}, {51,18}, {15,116}, {51,22}, {15,121}, {15,126}, + {51,39}, {51,17}, {15,122}, {51,38}, {15,117}, {51,24}, {15,113}, {51,19}, + {51,15}, {51,29}, {51,16}, {51,14}, {51,26}, {51,32}, {51,33}, {15,119}, + {55,27}, {51,30}, {51,13}, {51,31}, {15,129}, {51,36}, {15,128}, {51,12}, + {51,20}, {51,37}, {15,124}, {15,123}, {15,120}, {15,125}, {15,111}, + {15,112}, {18,136}, {55,30}, {55,23}, {18,133}, {55,31}, {55,21}, {55,24}, + {18,132}, {55,25}, {18,135}, {55,29}, {55,19}, {55,18}, {18,137}, {18,138}, + {18,134}, {18,139}, {55,17}, {55,28}, {55,26}, {55,20}, {18,131}, {55,22}, + {21,138}, {21,132}, {59,119}, {21,141}, {59,125}, {59,128}, {21,134}, + {21,135}, {59,122}, {21,133}, {59,131}, {21,139}, {59,132}, {59,127}, + {21,140}, {59,116}, {21,137}, {59,117}, {59,126}, {59,124}, {59,120}, + {21,136}, {59,118}, {21,142}, {59,123}, {59,130}, {59,121}, {59,129}, + {24,118}, {24,115}, {24,116}, {63,185}, {63,177}, {24,114}, {24,111}, + {63,178}, {24,113}, {63,181}, {63,183}, {63,190}, {63,189}, {63,184}, + {24,110}, {63,176}, {24,108}, {63,179}, {24,119}, {63,182}, {63,186}, + {24,112}, {24,109}, {63,188}, {63,187}, {24,117}, {63,180}, {26,184}, + {67,172}, {67,169}, {26,185}, {26,183}, {67,176}, {67,173}, {67,166}, + {26,182}, {26,186}, {67,167}, {26,181}, {26,189}, {67,170}, {67,171}, + {26,187}, {26,188}, {67,177}, {67,174}, {67,175}, {29,106}, {71,184}, + {29,103}, {71,181}, {29,105}, {29,107}, {71,182}, {29,104}, {71,183}, + {71,180}, {31,54}, {75,125}, {31,55}, {75,123}, {75,124}, {75,122}, + {75,121}, {75,126}, {31,53}, {78,120}, {78,121}, {67,168}, {78,119}, + {31,56}, {34,31}, {80,171}, {80,172}, {35,151}, {35,152}, {84,129}, + {84,128}, {36,44}, {36,43}, {86,144}, {3,9}, {3,33}, {3,121}, {3,120}, + {4,19}, {4,18}, {4,188}, {4,187}, {4,189}, {4,186}, {6,10}, {6,9}, + {6,11}, {7,160}, {7,159}, {7,161}, {10,30}, {1,25}, {47,158}, {1,26}, + {15,130}, {1,28}, {1,27}, {55,32}, {1,29}, {24,120}, {1,30}, {3,10}, + {3,122}, {4,190}, {7,162}, {3,11}, {3,125}, {3,123}, {3,124}, {5,0}, + {6,12}, {7,164}, {7,163}, {7,165}, {12,157}, {29,108}, {40,14}, {4,20}, + {4,21}, {5,1}, {41,42}, {10,32}, {10,31}, {47,160}, {47,159}, {15,131}, + {3,126}, {40,21}, {42,141}, {10,33}, {12,160}, {12,158}, {12,159}, + {29,109}, {4,22}, {5,2}, {40,124}, {6,13}, {6,14}, {41,43}, {42,142}, + {7,166}, {42,143}, {47,162}, {47,163}, {12,163}, {47,164}, {47,161}, + {12,164}, {12,162}, {12,161}, {47,165}, {51,40}, {55,33}, {59,133}, + {64,0}, {26,190}, {29,110}, {71,185}, {3,12}, {3,26}, {15,132}, {18,141}, + {24,121}, {40,2}, {3,127}, {4,25}, {4,23}, {4,24}, {7,167}, {3,13}, + {3,14}, {3,34}, {3,128}, {3,129}, {3,130}, {40,126}, {4,26}, {40,43}, + {5,6}, {40,127}, {5,4}, {5,5}, {40,125}, {5,7}, {5,3}, {41,44}, {9,172}, + {41,45}, {41,46}, {6,16}, {6,15}, {6,19}, {6,17}, {6,18}, {7,173}, + {7,172}, {42,148}, {42,145}, {42,146}, {42,144}, {7,174}, {7,170}, + {7,169}, {7,171}, {7,168}, {7,175}, {10,35}, {44,176}, {42,147}, {10,40}, + {44,177}, {10,36}, {10,39}, {10,38}, {10,37}, {10,34}, {47,168}, {12,167}, + {47,171}, {12,165}, {47,167}, {12,168}, {12,166}, {12,169}, {47,169}, + {47,170}, {47,166}, {47,172}, {18,145}, {15,133}, {51,41}, {51,43}, + {51,42}, {51,44}, {15,134}, {18,142}, {18,143}, {18,144}, {21,144}, + {59,135}, {59,134}, {59,136}, {59,137}, {21,145}, {21,143}, {64,1}, + {64,2}, {24,123}, {24,122}, {66,26}, {27,0}, {27,1}, {27,2}, {27,4}, + {67,178}, {67,179}, {27,3}, {29,111}, {29,112}, {80,173}, {84,131}, + {84,130}, {86,145}, {3,15}, {4,28}, {4,27}, {5,8}, {40,128}, {6,21}, + {6,22}, {6,20}, {6,23}, {41,47}, {41,48}, {7,177}, {42,149}, {7,176}, + {44,178}, {10,44}, {44,179}, {10,43}, {10,41}, {10,42}, {47,173}, {15,135}, + {51,46}, {15,138}, {51,45}, {16,165}, {15,137}, {15,136}, {18,148}, + {18,147}, {18,146}, {21,146}, {21,149}, {21,150}, {21,148}, {21,147}, + {64,3}, {64,4}, {67,181}, {27,5}, {67,180}, {29,113}, {75,127}, {31,57}, + {80,174}, {35,21}, {3,35}, {3,131}, {40,22}, {3,132}, {3,133}, {4,29}, + {4,30}, {5,9}, {41,49}, {42,150}, {42,151}, {10,45}, {47,174}, {15,140}, + {15,139}, {55,35}, {55,34}, {3,16}, {3,134}, {4,31}, {15,141}, {40,3}, + {40,44}, {4,32}, {40,130}, {5,11}, {5,10}, {40,129}, {6,24}, {12,170}, + {51,47}, {21,151}, {64,5}, {24,124}, {71,186}, {82,189}, {3,135}, {42,152}, + {44,180}, {15,144}, {15,142}, {15,143}, {3,17}, {3,36}, {1,141}, {3,138}, + {3,137}, {3,136}, {4,35}, {4,34}, {40,45}, {40,131}, {7,181}, {7,178}, + {7,180}, {7,179}, {10,46}, {18,149}, {3,18}, {3,139}, {4,37}, {4,36}, + {41,50}, {7,182}, {40,23}, {4,39}, {4,38}, {5,12}, {5,13}, {41,51}, + {6,25}, {6,26}, {7,183}, {7,184}, {7,185}, {10,47}, {44,181}, {12,171}, + {40,4}, {3,140}, {40,132}, {41,52}, {41,53}, {42,153}, {42,154}, {44,183}, + {44,182}, {44,185}, {44,184}, {10,48}, {51,48}, {12,173}, {47,175}, + {12,172}, {55,36}, {18,150}, {55,37}, {64,6}, {24,125}, {27,6}, {80,175}, + {40,24}, {4,40}, {15,145}, {3,19}, {3,37}, {3,142}, {3,141}, {3,143}, + {7,187}, {7,186}, {7,188}, {10,49}, {12,174}, {71,187}, {33,15}, {3,38}, + {4,42}, {4,57}, {4,52}, {4,47}, {4,46}, {4,53}, {4,51}, {4,44}, {4,58}, + {4,45}, {4,41}, {4,56}, {4,55}, {4,54}, {4,43}, {4,50}, {4,49}, {4,59}, + {4,48}, {5,19}, {5,25}, {5,21}, {5,27}, {40,133}, {5,24}, {5,14}, {5,17}, + {5,20}, {5,16}, {5,23}, {5,26}, {5,15}, {5,18}, {5,22}, {5,28}, {41,62}, + {41,59}, {6,39}, {41,60}, {6,27}, {6,29}, {6,53}, {6,48}, {41,101}, + {41,61}, {6,31}, {6,33}, {41,100}, {6,40}, {41,56}, {6,52}, {6,54}, + {6,28}, {6,45}, {41,54}, {6,51}, {6,36}, {6,46}, {6,47}, {41,55}, {6,44}, + {6,42}, {6,43}, {6,49}, {41,97}, {6,30}, {6,50}, {41,99}, {6,38}, {6,35}, + {41,58}, {6,34}, {41,102}, {6,37}, {6,41}, {6,32}, {41,98}, {41,57}, + {42,171}, {42,170}, {8,15}, {42,173}, {42,175}, {42,164}, {42,167}, + {42,174}, {8,16}, {42,161}, {42,165}, {42,169}, {45,9}, {8,11}, {45,13}, + {7,189}, {42,166}, {7,190}, {8,12}, {8,5}, {8,1}, {42,162}, {8,4}, + {8,9}, {8,18}, {42,163}, {42,156}, {8,3}, {42,157}, {42,159}, {8,6}, + {8,8}, {42,155}, {42,160}, {8,17}, {8,13}, {42,168}, {8,19}, {8,10}, + {42,158}, {8,7}, {8,2}, {8,0}, {42,172}, {8,14}, {45,8}, {44,187}, + {45,11}, {44,189}, {10,56}, {10,104}, {10,52}, {10,103}, {10,61}, {10,100}, + {10,50}, {44,188}, {45,3}, {10,99}, {45,15}, {10,101}, {10,57}, {45,5}, + {45,2}, {10,55}, {44,186}, {10,102}, {45,10}, {10,60}, {45,12}, {10,105}, + {10,51}, {10,62}, {10,59}, {45,0}, {10,97}, {45,6}, {45,7}, {10,58}, + {10,98}, {10,54}, {10,53}, {44,190}, {45,4}, {45,14}, {48,4}, {12,187}, + {47,177}, {47,182}, {12,180}, {13,0}, {47,180}, {12,175}, {12,185}, + {12,190}, {47,187}, {12,186}, {12,189}, {47,190}, {12,181}, {47,181}, + {48,2}, {48,3}, {12,183}, {48,1}, {12,179}, {13,3}, {47,184}, {12,177}, + {48,6}, {47,185}, {47,189}, {12,182}, {13,2}, {47,186}, {12,188}, {48,0}, + {48,7}, {51,97}, {48,5}, {13,4}, {12,176}, {47,188}, {47,179}, {12,184}, + {47,178}, {47,183}, {47,176}, {13,1}, {51,55}, {15,164}, {51,103}, + {15,162}, {15,159}, {51,60}, {15,155}, {51,98}, {15,166}, {51,54}, + {51,59}, {51,58}, {12,178}, {15,161}, {51,101}, {51,104}, {51,51}, + {18,168}, {51,105}, {15,167}, {15,153}, {15,150}, {51,62}, {15,147}, + {51,102}, {15,154}, {51,106}, {51,52}, {51,100}, {15,157}, {51,53}, + {51,56}, {51,61}, {15,158}, {15,156}, {15,168}, {15,163}, {15,151}, + {16,146}, {15,152}, {51,57}, {15,165}, {15,160}, {51,99}, {15,149}, + {15,148}, {51,49}, {51,50}, {55,42}, {18,151}, {18,154}, {55,53}, {18,174}, + {55,56}, {18,152}, {55,49}, {18,158}, {18,164}, {20,125}, {18,162}, + {55,46}, {18,175}, {18,155}, {18,163}, {55,54}, {59,151}, {55,59}, + {55,47}, {55,38}, {55,51}, {55,45}, {18,161}, {55,57}, {18,157}, {18,177}, + {18,170}, {18,159}, {18,156}, {18,167}, {55,58}, {55,44}, {55,50}, + {55,52}, {55,40}, {55,55}, {18,153}, {55,39}, {18,160}, {18,176}, {18,172}, + {55,41}, {18,166}, {18,173}, {18,169}, {18,165}, {55,48}, {18,171}, + {59,149}, {59,145}, {59,160}, {59,138}, {59,147}, {21,165}, {21,166}, + {21,158}, {59,156}, {21,168}, {59,143}, {59,142}, {59,140}, {59,158}, + {21,156}, {59,152}, {59,141}, {21,159}, {59,150}, {21,154}, {59,146}, + {59,153}, {59,155}, {59,159}, {21,163}, {59,139}, {21,157}, {59,144}, + {21,152}, {21,164}, {59,154}, {21,160}, {21,161}, {21,167}, {21,155}, + {1,31}, {21,153}, {59,148}, {21,162}, {59,157}, {24,141}, {24,136}, + {64,21}, {64,17}, {64,11}, {24,130}, {24,126}, {64,20}, {24,127}, {64,14}, + {64,16}, {64,19}, {24,132}, {24,139}, {24,133}, {64,9}, {24,134}, {24,135}, + {64,12}, {24,140}, {64,10}, {64,15}, {24,131}, {64,8}, {24,137}, {24,129}, + {24,128}, {64,13}, {64,18}, {24,138}, {64,7}, {27,13}, {68,7}, {68,4}, + {27,7}, {27,19}, {27,20}, {27,10}, {68,2}, {27,12}, {67,185}, {27,18}, + {68,6}, {27,9}, {68,8}, {27,8}, {68,3}, {68,5}, {27,11}, {68,1}, {67,186}, + {67,183}, {55,43}, {67,189}, {67,182}, {67,188}, {67,187}, {67,184}, + {27,15}, {27,14}, {27,16}, {67,190}, {29,114}, {68,0}, {72,5}, {71,189}, + {29,126}, {72,2}, {29,118}, {29,122}, {72,1}, {29,121}, {29,117}, {29,120}, + {29,115}, {29,125}, {72,3}, {71,190}, {29,124}, {71,188}, {29,123}, + {72,4}, {72,0}, {27,17}, {29,127}, {72,6}, {29,119}, {29,116}, {75,134}, + {75,136}, {31,59}, {75,137}, {75,135}, {75,133}, {75,132}, {31,61}, + {75,131}, {31,62}, {75,129}, {75,130}, {31,58}, {31,97}, {31,60}, {75,128}, + {33,16}, {78,124}, {78,122}, {78,127}, {78,125}, {78,123}, {78,126}, + {34,32}, {80,178}, {80,179}, {35,22}, {80,180}, {80,176}, {80,181}, + {80,177}, {33,17}, {82,190}, {83,1}, {35,25}, {83,0}, {35,24}, {35,23}, + {35,26}, {84,133}, {84,134}, {35,154}, {35,153}, {35,155}, {84,132}, + {85,152}, {85,151}, {36,45}, {36,47}, {36,46}, {85,153}, {36,136}, + {87,102}, {36,177}, {87,101}, {87,174}, {40,9}, {4,61}, {4,60}, {5,31}, + {5,30}, {40,135}, {5,29}, {40,134}, {6,57}, {41,105}, {41,104}, {6,55}, + {6,58}, {41,103}, {6,56}, {42,176}, {42,177}, {8,20}, {10,106}, {48,8}, + {48,9}, {13,5}, {13,6}, {51,108}, {15,169}, {15,171}, {51,107}, {15,170}, + {55,60}, {18,178}, {21,169}, {21,170}, {59,161}, {24,143}, {24,142}, + {68,9}, {72,8}, {72,7}, {88,43}, {3,39}, {40,25}, {40,46}, {40,47}, + {5,34}, {5,38}, {40,137}, {5,36}, {5,35}, {40,136}, {5,37}, {5,33}, + {5,32}, {40,138}, {6,102}, {6,99}, {6,61}, {41,106}, {41,107}, {6,97}, + {41,109}, {6,59}, {41,110}, {41,108}, {6,62}, {6,98}, {6,101}, {6,100}, + {6,60}, {41,111}, {8,25}, {42,190}, {8,27}, {8,26}, {43,0}, {8,24}, + {8,23}, {42,181}, {42,180}, {42,178}, {42,183}, {42,182}, {42,179}, + {42,188}, {42,189}, {42,186}, {42,184}, {8,22}, {42,187}, {8,28}, {43,1}, + {42,185}, {10,107}, {8,21}, {10,108}, {45,20}, {45,26}, {10,114}, {45,24}, + {45,30}, {45,21}, {45,25}, {45,27}, {45,29}, {45,23}, {45,22}, {45,17}, + {45,18}, {10,109}, {10,111}, {10,110}, {45,19}, {45,28}, {10,113}, + {45,16}, {48,19}, {48,18}, {48,23}, {48,14}, {48,17}, {48,16}, {48,20}, + {48,24}, {13,7}, {13,10}, {48,15}, {48,21}, {13,9}, {48,10}, {10,112}, + {51,122}, {48,22}, {48,13}, {13,8}, {48,12}, {51,113}, {15,172}, {15,176}, + {51,129}, {51,111}, {51,125}, {15,177}, {51,127}, {51,133}, {51,137}, + {51,128}, {51,116}, {51,124}, {51,138}, {51,136}, {51,126}, {51,121}, + {51,114}, {55,102}, {51,112}, {15,181}, {51,119}, {15,182}, {15,178}, + {51,109}, {51,131}, {51,117}, {51,115}, {51,134}, {15,179}, {51,140}, + {15,173}, {15,175}, {51,123}, {51,118}, {13,11}, {15,174}, {51,120}, + {51,135}, {51,139}, {51,130}, {51,132}, {51,110}, {55,97}, {55,106}, + {55,105}, {18,186}, {55,98}, {18,187}, {18,185}, {55,100}, {18,182}, + {55,104}, {55,99}, {55,101}, {55,61}, {18,180}, {55,114}, {55,113}, + {55,110}, {18,179}, {18,183}, {18,184}, {48,11}, {55,107}, {18,181}, + {15,180}, {55,109}, {55,62}, {55,112}, {55,111}, {55,115}, {59,175}, + {55,108}, {55,103}, {59,167}, {21,180}, {21,183}, {21,178}, {59,166}, + {59,170}, {59,165}, {21,172}, {21,182}, {59,162}, {21,176}, {59,169}, + {21,174}, {21,173}, {59,172}, {21,175}, {59,174}, {59,171}, {21,171}, + {21,181}, {59,176}, {59,164}, {59,173}, {59,163}, {21,177}, {21,179}, + {59,168}, {59,177}, {64,29}, {24,144}, {64,35}, {24,149}, {64,31}, + {64,38}, {64,23}, {24,151}, {24,145}, {64,28}, {27,21}, {64,27}, {64,36}, + {24,146}, {24,150}, {64,26}, {64,32}, {64,37}, {64,22}, {24,148}, {64,30}, + {64,34}, {64,40}, {64,24}, {64,33}, {24,147}, {64,39}, {64,25}, {27,25}, + {68,11}, {27,23}, {27,22}, {68,13}, {68,18}, {68,14}, {68,17}, {27,28}, + {29,101}, {27,27}, {68,10}, {68,16}, {27,26}, {68,15}, {68,12}, {27,24}, + {72,13}, {72,15}, {72,10}, {29,129}, {72,12}, {29,128}, {72,14}, {29,131}, + {72,16}, {29,130}, {72,9}, {72,11}, {31,101}, {75,140}, {31,100}, {75,141}, + {31,99}, {75,139}, {31,98}, {75,138}, {33,19}, {33,18}, {80,182}, {80,184}, + {80,183}, {34,33}, {34,34}, {34,35}, {83,2}, {35,27}, {86,147}, {86,146}, + {36,178}, {3,40}, {3,144}, {6,103}, {45,31}, {18,188}, {18,189}, {59,178}, + {24,152}, {64,41}, {68,19}, {40,26}, {41,112}, {43,2}, {45,32}, {48,25}, + {13,12}, {80,185}, {35,156}, {3,41}, {4,62}, {40,48}, {5,39}, {5,40}, + {8,29}, {15,183}, {24,154}, {24,155}, {24,153}, {3,42}, {3,145}, {3,147}, + {3,146}, {40,27}, {3,148}, {4,97}, {40,49}, {4,98}, {5,41}, {5,42}, + {40,139}, {6,104}, {41,113}, {8,33}, {43,3}, {8,31}, {8,32}, {8,30}, + {48,26}, {10,118}, {10,117}, {10,119}, {10,116}, {45,33}, {8,34}, {10,115}, + {13,13}, {13,14}, {13,15}, {51,141}, {18,190}, {55,116}, {15,184}, + {21,184}, {24,157}, {24,156}, {64,42}, {27,29}, {29,132}, {78,128}, + {85,154}, {86,148}, {3,43}, {4,99}, {4,100}, {40,145}, {5,44}, {5,47}, + {40,143}, {40,141}, {5,46}, {40,144}, {40,146}, {40,140}, {5,49}, {5,48}, + {5,45}, {5,43}, {40,142}, {6,115}, {6,112}, {41,118}, {41,121}, {41,120}, + {6,106}, {6,114}, {6,111}, {41,117}, {41,115}, {6,110}, {6,105}, {6,108}, + {41,116}, {41,123}, {41,119}, {6,109}, {6,113}, {6,116}, {41,114}, + {41,122}, {6,107}, {8,39}, {8,47}, {43,15}, {43,8}, {8,48}, {43,19}, + {43,4}, {43,11}, {8,38}, {43,5}, {8,36}, {43,12}, {43,16}, {8,35}, + {43,17}, {43,10}, {43,13}, {8,50}, {8,41}, {43,20}, {43,18}, {8,46}, + {8,44}, {43,9}, {8,43}, {43,7}, {43,6}, {8,42}, {8,40}, {8,49}, {8,45}, + {8,37}, {43,14}, {10,121}, {10,128}, {45,47}, {10,120}, {45,39}, {45,35}, + {45,51}, {45,34}, {10,123}, {45,44}, {10,126}, {10,129}, {10,124}, + {45,48}, {10,127}, {13,22}, {45,54}, {45,36}, {45,38}, {45,45}, {45,49}, + {45,53}, {45,50}, {45,43}, {45,46}, {45,40}, {10,131}, {45,42}, {45,41}, + {45,52}, {10,122}, {45,37}, {10,130}, {10,125}, {13,28}, {48,34}, {13,27}, + {48,32}, {13,16}, {13,21}, {48,31}, {48,28}, {48,33}, {13,17}, {48,27}, + {13,20}, {13,18}, {48,35}, {13,19}, {13,23}, {13,24}, {13,26}, {13,25}, + {48,29}, {48,30}, {48,36}, {51,148}, {15,185}, {55,130}, {51,147}, + {51,166}, {16,0}, {51,164}, {15,190}, {15,186}, {51,173}, {51,157}, + {51,160}, {16,3}, {51,170}, {51,162}, {15,187}, {16,4}, {51,167}, {51,165}, + {51,150}, {51,171}, {51,159}, {51,154}, {51,144}, {51,172}, {51,156}, + {51,143}, {16,2}, {51,161}, {51,174}, {51,158}, {51,146}, {51,151}, + {51,142}, {16,1}, {51,155}, {51,152}, {15,188}, {51,145}, {51,169}, + {15,189}, {51,153}, {51,149}, {51,168}, {19,0}, {55,123}, {55,120}, + {55,137}, {55,125}, {55,138}, {19,2}, {55,134}, {55,131}, {55,132}, + {55,135}, {55,139}, {51,163}, {55,141}, {60,7}, {19,3}, {55,142}, {55,118}, + {55,128}, {55,133}, {19,1}, {19,4}, {55,140}, {55,143}, {55,122}, {55,119}, + {55,121}, {55,126}, {55,124}, {19,5}, {55,136}, {55,127}, {55,129}, + {55,117}, {59,186}, {59,184}, {22,2}, {22,0}, {60,3}, {59,185}, {60,4}, + {60,0}, {59,183}, {60,6}, {59,182}, {59,189}, {21,190}, {21,189}, {21,188}, + {59,187}, {60,1}, {21,185}, {22,1}, {59,180}, {59,190}, {59,179}, {59,188}, + {21,186}, {60,2}, {59,181}, {21,187}, {60,5}, {64,46}, {24,162}, {24,161}, + {24,163}, {64,58}, {64,48}, {64,54}, {64,43}, {64,57}, {64,56}, {64,60}, + {64,53}, {24,158}, {64,52}, {24,164}, {64,45}, {24,159}, {64,59}, {24,160}, + {64,47}, {64,50}, {64,55}, {64,49}, {64,44}, {64,51}, {68,21}, {27,33}, + {68,24}, {68,23}, {68,26}, {68,28}, {27,31}, {68,22}, {68,20}, {68,29}, + {68,27}, {68,25}, {68,31}, {68,30}, {27,35}, {27,30}, {27,32}, {27,34}, + {68,32}, {72,23}, {72,22}, {72,21}, {72,24}, {72,17}, {72,18}, {72,26}, + {72,19}, {29,133}, {72,28}, {72,27}, {72,20}, {75,145}, {31,104}, {75,143}, + {75,148}, {75,147}, {72,25}, {31,103}, {75,146}, {75,142}, {75,150}, + {75,149}, {31,102}, {75,144}, {29,134}, {33,20}, {78,129}, {80,186}, + {80,187}, {80,188}, {35,28}, {35,29}, {83,3}, {84,136}, {84,135}, {85,155}, + {85,156}, {86,149}, {87,103}, {3,44}, {3,45}, {3,46}, {3,149}, {4,101}, + {40,147}, {5,50}, {5,51}, {6,119}, {6,120}, {6,118}, {6,117}, {8,51}, + {43,21}, {8,53}, {8,52}, {43,22}, {10,132}, {13,29}, {48,37}, {51,176}, + {16,5}, {19,7}, {51,175}, {19,6}, {24,165}, {64,61}, {29,135}, {31,105}, + {75,151}, {35,30}, {36,48}, {40,50}, {4,102}, {40,51}, {5,54}, {5,52}, + {5,53}, {5,55}, {6,122}, {6,121}, {41,124}, {6,123}, {41,125}, {43,23}, + {43,24}, {8,54}, {8,56}, {8,58}, {8,55}, {8,59}, {8,57}, {10,136}, + {10,133}, {10,135}, {10,137}, {10,134}, {48,38}, {45,55}, {48,40}, + {48,39}, {13,35}, {13,31}, {13,32}, {13,34}, {13,36}, {13,33}, {13,38}, + {13,37}, {16,10}, {51,178}, {51,177}, {16,9}, {16,8}, {16,7}, {16,11}, + {16,6}, {55,149}, {55,146}, {19,9}, {55,145}, {55,150}, {19,11}, {55,148}, + {19,8}, {19,10}, {55,147}, {60,8}, {60,9}, {60,10}, {24,166}, {24,174}, + {64,62}, {24,168}, {24,172}, {64,97}, {24,173}, {24,169}, {24,170}, + {24,167}, {24,171}, {27,38}, {55,144}, {27,39}, {27,37}, {27,36}, {72,29}, + {29,136}, {75,152}, {75,153}, {34,36}, {35,31}, {3,47}, {5,56}, {10,138}, + {48,41}, {13,39}, {16,14}, {16,13}, {16,12}, {19,12}, {19,13}, {55,151}, + {24,175}, {29,137}, {3,48}, {40,28}, {3,150}, {40,52}, {40,148}, {5,57}, + {8,60}, {60,11}, {3,49}, {3,151}, {40,149}, {41,126}, {41,127}, {6,124}, + {55,152}, {19,14}, {60,12}, {31,106}, {3,50}, {3,104}, {3,152}, {40,53}, + {4,103}, {6,128}, {6,127}, {6,125}, {6,126}, {43,25}, {8,62}, {8,97}, + {43,26}, {8,61}, {10,142}, {45,56}, {10,141}, {10,139}, {10,140}, {13,42}, + {13,40}, {48,43}, {13,41}, {48,42}, {13,30}, {51,179}, {16,16}, {16,17}, + {16,15}, {24,176}, {64,98}, {27,40}, {27,41}, {68,33}, {31,107}, {78,130}, + {78,131}, {35,157}, {87,104}, {40,11}, {3,153}, {3,51}, {40,55}, {40,54}, + {5,58}, {40,151}, {40,152}, {40,150}, {40,153}, {41,135}, {41,130}, + {41,132}, {41,134}, {41,131}, {6,132}, {41,128}, {41,129}, {6,129}, + {6,130}, {41,133}, {41,136}, {6,131}, {41,137}, {43,40}, {43,34}, {43,29}, + {8,99}, {43,37}, {43,35}, {43,28}, {43,41}, {43,44}, {43,39}, {43,32}, + {8,101}, {43,38}, {8,102}, {43,33}, {43,36}, {43,27}, {43,31}, {43,43}, + {8,103}, {8,104}, {43,30}, {43,42}, {8,98}, {8,100}, {45,107}, {45,100}, + {45,106}, {45,99}, {45,101}, {45,61}, {45,59}, {45,108}, {45,105}, + {45,57}, {10,144}, {45,103}, {45,104}, {45,102}, {45,60}, {45,58}, + {10,143}, {45,98}, {45,62}, {45,97}, {45,109}, {13,47}, {13,46}, {48,44}, + {13,43}, {48,46}, {13,48}, {48,47}, {13,51}, {13,49}, {48,48}, {45,110}, + {48,50}, {13,45}, {13,44}, {48,45}, {48,49}, {13,50}, {16,19}, {16,18}, + {51,181}, {51,185}, {51,187}, {16,20}, {51,190}, {16,24}, {52,1}, {16,26}, + {16,22}, {16,30}, {16,27}, {51,183}, {16,21}, {51,182}, {51,180}, {52,3}, + {51,184}, {16,23}, {52,2}, {16,28}, {51,189}, {51,188}, {16,29}, {51,186}, + {16,25}, {52,4}, {52,0}, {55,167}, {55,174}, {55,163}, {19,17}, {55,159}, + {55,175}, {55,153}, {55,172}, {55,170}, {55,164}, {55,173}, {55,166}, + {55,158}, {55,176}, {55,156}, {55,169}, {55,154}, {55,177}, {19,18}, + {55,171}, {60,15}, {55,157}, {19,15}, {55,161}, {19,16}, {55,160}, + {55,165}, {55,162}, {55,168}, {60,19}, {60,22}, {60,14}, {60,16}, {60,21}, + {60,20}, {22,3}, {55,155}, {60,18}, {22,4}, {60,13}, {60,17}, {64,105}, + {64,112}, {64,103}, {64,110}, {64,101}, {64,109}, {64,113}, {64,100}, + {64,104}, {64,99}, {24,177}, {64,102}, {24,178}, {64,108}, {64,107}, + {64,106}, {64,111}, {68,37}, {68,39}, {27,43}, {68,40}, {68,35}, {68,34}, + {68,44}, {68,42}, {27,42}, {68,45}, {68,36}, {68,41}, {68,43}, {68,38}, + {72,33}, {72,38}, {72,32}, {72,37}, {72,30}, {72,40}, {72,36}, {72,41}, + {72,35}, {72,31}, {72,39}, {72,42}, {72,34}, {75,154}, {31,111}, {31,109}, + {31,108}, {31,110}, {78,132}, {80,50}, {80,189}, {83,4}, {83,5}, {35,32}, + {84,137}, {35,158}, {84,138}, {85,158}, {36,50}, {36,49}, {85,157}, + {36,137}, {86,150}, {3,52}, {5,59}, {40,154}, {41,138}, {7,117}, {16,31}, + {3,53}, {4,106}, {4,105}, {4,104}, {6,133}, {13,52}, {60,23}, {3,54}, + {3,55}, {3,56}, {3,154}, {10,145}, {45,111}, {19,19}, {3,57}, {40,29}, + {4,107}, {4,108}, {40,56}, {5,60}, {41,139}, {6,134}, {41,140}, {8,110}, + {43,46}, {8,108}, {8,107}, {43,45}, {8,105}, {43,47}, {8,106}, {8,109}, + {10,146}, {10,148}, {45,115}, {45,112}, {45,113}, {45,114}, {45,116}, + {10,147}, {48,52}, {48,51}, {13,54}, {13,53}, {16,34}, {52,6}, {16,33}, + {16,35}, {16,32}, {19,21}, {52,5}, {19,22}, {55,179}, {19,23}, {55,178}, + {19,20}, {60,26}, {60,28}, {22,5}, {60,27}, {60,25}, {60,24}, {64,116}, + {24,183}, {24,181}, {24,182}, {64,114}, {64,115}, {24,179}, {68,49}, + {68,47}, {27,45}, {68,48}, {27,46}, {27,44}, {24,180}, {72,45}, {72,43}, + {72,44}, {68,46}, {75,156}, {31,112}, {75,155}, {78,133}, {78,134}, + {72,46}, {80,190}, {3,58}, {4,109}, {5,62}, {40,155}, {5,61}, {8,111}, + {22,6}, {3,155}, {4,110}, {10,149}, {19,24}, {40,57}, {40,58}, {40,156}, + {6,136}, {41,144}, {41,142}, {6,137}, {41,141}, {41,143}, {41,145}, + {6,135}, {8,115}, {8,116}, {8,113}, {8,112}, {45,120}, {8,114}, {10,150}, + {45,119}, {45,121}, {45,118}, {45,122}, {10,151}, {13,57}, {48,53}, + {48,55}, {13,55}, {48,56}, {13,56}, {48,54}, {45,117}, {52,7}, {52,10}, + {52,11}, {52,8}, {16,39}, {16,38}, {16,36}, {16,37}, {52,9}, {16,40}, + {19,26}, {19,27}, {19,28}, {60,29}, {60,31}, {60,33}, {22,8}, {22,7}, + {19,25}, {60,32}, {60,30}, {64,120}, {64,118}, {64,124}, {24,184}, + {64,125}, {64,122}, {24,185}, {64,119}, {64,117}, {64,123}, {27,48}, + {68,51}, {64,121}, {27,50}, {68,52}, {27,49}, {27,52}, {68,53}, {27,47}, + {27,51}, {72,51}, {72,49}, {72,48}, {72,50}, {72,47}, {34,38}, {83,6}, + {83,7}, {84,139}, {85,159}, {37,21}, {8,117}, {6,138}, {10,152}, {3,59}, + {3,156}, {4,111}, {40,157}, {6,139}, {41,146}, {45,123}, {10,153}, + {24,186}, {3,60}, {5,97}, {22,9}, {3,61}, {3,157}, {3,158}, {4,113}, + {4,112}, {40,158}, {5,98}, {41,147}, {6,140}, {43,49}, {43,50}, {43,51}, + {8,118}, {8,119}, {43,48}, {8,120}, {10,154}, {45,124}, {48,58}, {13,58}, + {48,57}, {16,41}, {52,12}, {16,42}, {52,13}, {19,29}, {60,34}, {64,127}, + {64,126}, {24,187}, {27,53}, {68,54}, {29,138}, {72,52}, {31,113}, + {36,51}, {86,152}, {43,52}, {45,125}, {16,43}, {55,180}, {22,10}, {33,21}, + {6,142}, {6,141}, {10,155}, {48,59}, {16,45}, {18,3}, {16,46}, {16,44}, + {19,30}, {64,128}, {24,188}, {27,54}, {40,12}, {40,159}, {41,149}, + {6,143}, {41,148}, {6,144}, {8,124}, {43,55}, {43,54}, {8,123}, {8,121}, + {8,122}, {43,53}, {10,157}, {45,126}, {10,160}, {10,156}, {10,162}, + {10,158}, {10,159}, {10,161}, {13,61}, {13,60}, {13,59}, {52,15}, {16,47}, + {16,50}, {16,48}, {52,14}, {16,53}, {16,49}, {52,16}, {16,52}, {16,51}, + {55,182}, {55,181}, {19,33}, {19,31}, {19,32}, {55,183}, {22,11}, {60,36}, + {22,12}, {60,35}, {68,55}, {27,56}, {64,129}, {27,55}, {24,189}, {75,158}, + {72,53}, {31,114}, {75,157}, {81,0}, {83,8}, {83,9}, {3,159}, {4,114}, + {40,59}, {6,146}, {6,148}, {40,162}, {41,152}, {41,151}, {41,150}, + {40,161}, {40,160}, {5,100}, {6,147}, {6,145}, {5,99}, {8,125}, {43,56}, + {8,126}, {41,157}, {41,159}, {41,158}, {43,57}, {41,154}, {6,152}, + {6,150}, {41,153}, {41,155}, {41,161}, {6,149}, {41,156}, {41,165}, + {8,128}, {41,162}, {6,151}, {41,160}, {41,163}, {8,127}, {8,129}, {41,164}, + {43,111}, {43,98}, {43,62}, {43,110}, {43,105}, {10,167}, {8,130}, + {43,106}, {43,109}, {10,163}, {43,108}, {8,131}, {8,136}, {8,134}, + {43,99}, {43,60}, {43,101}, {8,141}, {43,112}, {10,164}, {43,102}, + {10,165}, {8,137}, {43,104}, {45,141}, {10,166}, {43,59}, {8,138}, + {10,168}, {8,139}, {8,135}, {8,140}, {43,103}, {43,58}, {43,107}, {8,132}, + {43,61}, {43,100}, {43,97}, {8,133}, {45,127}, {45,128}, {45,138}, + {48,97}, {45,139}, {10,174}, {45,142}, {45,132}, {10,173}, {45,134}, + {45,135}, {45,137}, {10,169}, {13,99}, {45,133}, {45,129}, {13,100}, + {45,143}, {13,62}, {48,61}, {45,136}, {48,60}, {45,131}, {45,140}, + {10,172}, {13,97}, {10,178}, {13,98}, {45,144}, {48,62}, {10,171}, + {13,102}, {10,177}, {10,176}, {10,175}, {13,101}, {45,145}, {13,103}, + {10,170}, {45,130}, {16,54}, {48,100}, {48,102}, {48,104}, {13,104}, + {13,110}, {52,19}, {48,108}, {48,99}, {16,56}, {52,17}, {13,109}, {13,107}, + {48,110}, {52,18}, {48,101}, {13,108}, {48,105}, {13,111}, {48,107}, + {13,106}, {48,106}, {48,109}, {48,103}, {13,105}, {16,57}, {48,98}, + {16,55}, {16,58}, {52,21}, {52,30}, {19,36}, {16,60}, {16,99}, {19,37}, + {52,32}, {16,106}, {55,185}, {52,22}, {16,98}, {16,101}, {16,62}, {52,20}, + {52,34}, {52,37}, {56,9}, {52,35}, {55,189}, {16,97}, {16,104}, {16,108}, + {52,29}, {55,184}, {52,33}, {16,59}, {55,186}, {52,36}, {55,188}, {52,25}, + {19,34}, {52,23}, {52,24}, {16,103}, {16,102}, {52,27}, {16,107}, {52,31}, + {16,100}, {52,28}, {16,105}, {19,38}, {19,35}, {55,187}, {52,26}, {16,61}, + {19,43}, {19,47}, {56,0}, {22,17}, {19,45}, {56,4}, {19,49}, {60,37}, + {56,6}, {22,19}, {19,41}, {19,44}, {56,7}, {56,8}, {56,14}, {19,51}, + {22,20}, {56,10}, {56,15}, {56,3}, {22,30}, {22,21}, {19,50}, {56,1}, + {56,16}, {22,29}, {19,48}, {22,14}, {56,13}, {19,52}, {56,5}, {55,190}, + {19,42}, {56,2}, {56,11}, {22,13}, {22,18}, {19,39}, {56,12}, {22,16}, + {19,40}, {22,28}, {64,131}, {60,48}, {60,40}, {64,130}, {60,44}, {60,46}, + {60,43}, {22,27}, {60,42}, {22,31}, {64,146}, {22,26}, {25,0}, {60,49}, + {64,132}, {22,24}, {60,41}, {60,45}, {24,190}, {22,15}, {60,38}, {60,39}, + {25,1}, {22,23}, {22,25}, {22,22}, {60,47}, {64,136}, {64,137}, {64,142}, + {27,61}, {64,149}, {25,7}, {25,6}, {64,144}, {27,60}, {64,133}, {25,5}, + {64,148}, {25,3}, {25,4}, {64,145}, {68,106}, {27,58}, {19,46}, {64,147}, + {27,99}, {64,139}, {27,59}, {27,98}, {64,134}, {64,138}, {64,135}, + {64,141}, {25,8}, {27,57}, {25,2}, {68,58}, {64,143}, {27,97}, {27,100}, + {64,140}, {27,62}, {68,57}, {68,62}, {29,142}, {68,56}, {72,99}, {68,105}, + {27,104}, {27,102}, {29,140}, {68,102}, {68,98}, {27,108}, {72,56}, + {27,106}, {68,97}, {72,54}, {68,101}, {68,104}, {68,61}, {27,107}, + {27,101}, {72,55}, {29,141}, {68,103}, {27,103}, {27,105}, {68,100}, + {27,109}, {68,99}, {68,60}, {68,59}, {29,139}, {68,107}, {72,58}, {75,160}, + {29,144}, {72,98}, {72,62}, {75,161}, {29,145}, {72,97}, {72,60}, {31,116}, + {75,159}, {72,57}, {72,59}, {31,117}, {29,147}, {31,115}, {29,146}, + {31,119}, {72,61}, {29,143}, {78,143}, {78,135}, {75,167}, {78,136}, + {75,163}, {33,22}, {75,165}, {75,164}, {31,118}, {75,162}, {75,166}, + {78,144}, {78,140}, {78,142}, {78,137}, {78,138}, {78,141}, {78,139}, + {34,39}, {34,42}, {34,41}, {34,40}, {35,33}, {83,10}, {35,34}, {81,1}, + {35,159}, {84,140}, {35,160}, {36,52}, {36,138}, {86,153}, {86,154}, + {86,155}, {88,122}, {3,160}, {40,60}, {4,115}, {5,102}, {5,103}, {5,101}, + {5,104}, {6,154}, {6,153}, {43,113}, {8,143}, {8,142}, {48,111}, {16,109}, + {16,110}, {19,53}, {60,50}, {22,32}, {22,33}, {60,52}, {60,54}, {60,53}, + {64,151}, {64,150}, {25,9}, {64,152}, {68,108}, {27,110}, {29,148}, + {31,120}, {33,23}, {31,121}, {3,161}, {41,166}, {43,114}, {8,145}, + {8,144}, {8,146}, {10,179}, {45,146}, {45,147}, {48,112}, {13,112}, + {16,111}, {19,54}, {56,17}, {3,162}, {3,62}, {3,163}, {40,61}, {4,119}, + {4,118}, {4,116}, {4,117}, {5,107}, {40,169}, {40,171}, {5,106}, {40,163}, + {40,164}, {40,170}, {40,166}, {40,168}, {5,105}, {40,165}, {40,172}, + {40,167}, {6,161}, {6,170}, {6,168}, {41,176}, {41,173}, {41,181}, + {6,166}, {41,182}, {6,159}, {41,179}, {6,165}, {41,175}, {41,174}, + {6,163}, {41,180}, {6,164}, {8,147}, {6,158}, {41,177}, {41,167}, {6,155}, + {6,174}, {41,172}, {41,178}, {6,160}, {6,162}, {41,168}, {41,169}, + {41,170}, {6,173}, {6,167}, {6,172}, {41,171}, {6,171}, {6,157}, {6,156}, + {6,169}, {8,161}, {43,126}, {43,119}, {8,156}, {8,175}, {43,115}, {43,122}, + {43,124}, {43,127}, {8,170}, {43,123}, {43,116}, {8,168}, {43,120}, + {43,128}, {8,153}, {43,125}, {8,163}, {8,162}, {43,118}, {8,151}, {8,152}, + {8,150}, {8,174}, {8,166}, {8,160}, {8,148}, {43,121}, {8,159}, {8,149}, + {8,167}, {8,176}, {45,148}, {8,164}, {43,117}, {8,154}, {8,157}, {8,158}, + {8,172}, {8,173}, {8,171}, {8,165}, {8,169}, {8,155}, {10,180}, {45,154}, + {11,1}, {10,184}, {10,186}, {11,0}, {45,166}, {10,189}, {48,113}, {13,113}, + {11,3}, {45,151}, {45,159}, {10,190}, {45,158}, {45,155}, {45,163}, + {45,165}, {10,183}, {10,187}, {11,2}, {13,115}, {45,160}, {10,185}, + {11,5}, {45,153}, {10,188}, {13,114}, {10,182}, {45,150}, {45,157}, + {45,149}, {45,152}, {45,156}, {48,114}, {11,4}, {45,161}, {45,162}, + {45,164}, {10,181}, {13,129}, {48,126}, {13,127}, {13,128}, {48,116}, + {48,132}, {13,118}, {52,38}, {48,134}, {48,128}, {48,119}, {48,137}, + {48,122}, {13,124}, {52,61}, {48,125}, {13,126}, {13,117}, {48,139}, + {48,127}, {13,120}, {48,120}, {48,117}, {48,118}, {13,121}, {48,133}, + {48,140}, {13,123}, {48,124}, {48,123}, {13,131}, {13,130}, {13,116}, + {13,122}, {13,125}, {48,136}, {48,130}, {13,119}, {48,115}, {48,138}, + {48,129}, {48,131}, {48,135}, {52,39}, {16,119}, {16,139}, {16,138}, + {16,127}, {52,57}, {52,53}, {52,50}, {52,102}, {16,122}, {16,114}, + {52,55}, {19,104}, {16,118}, {52,97}, {16,140}, {16,137}, {52,59}, + {52,42}, {16,136}, {52,99}, {52,41}, {16,125}, {16,129}, {52,98}, {52,51}, + {16,130}, {16,124}, {52,40}, {19,56}, {52,101}, {52,49}, {16,135}, + {52,52}, {52,100}, {16,134}, {56,18}, {16,115}, {52,47}, {16,120}, + {16,131}, {16,126}, {52,56}, {52,46}, {52,44}, {52,62}, {16,112}, {16,132}, + {16,116}, {19,55}, {52,60}, {16,117}, {16,113}, {16,128}, {16,123}, + {16,121}, {52,48}, {16,133}, {52,45}, {52,58}, {52,54}, {56,20}, {56,19}, + {52,43}, {56,36}, {19,58}, {56,42}, {56,25}, {56,39}, {60,55}, {19,61}, + {56,43}, {56,46}, {19,60}, {56,28}, {56,45}, {56,44}, {19,62}, {56,21}, + {19,57}, {19,99}, {19,97}, {56,41}, {56,31}, {19,101}, {56,48}, {56,40}, + {56,49}, {19,109}, {19,107}, {56,38}, {56,37}, {56,35}, {56,29}, {19,100}, + {19,98}, {48,121}, {56,22}, {60,119}, {56,23}, {19,59}, {19,106}, {60,57}, + {19,102}, {19,103}, {56,24}, {56,47}, {60,56}, {56,32}, {56,27}, {19,105}, + {56,33}, {56,30}, {19,110}, {22,48}, {60,60}, {60,113}, {60,118}, {60,106}, + {22,44}, {60,123}, {22,41}, {60,58}, {60,59}, {22,34}, {22,43}, {60,100}, + {22,46}, {22,47}, {60,101}, {60,114}, {60,120}, {22,42}, {22,36}, {60,99}, + {60,61}, {60,122}, {60,104}, {60,105}, {60,62}, {60,116}, {60,107}, + {60,117}, {60,109}, {22,37}, {64,153}, {22,40}, {22,38}, {60,121}, + {60,112}, {60,108}, {60,97}, {25,19}, {60,111}, {22,45}, {60,103}, + {60,102}, {22,39}, {22,35}, {64,174}, {60,115}, {60,110}, {60,98}, + {64,169}, {64,154}, {64,165}, {64,172}, {25,17}, {19,108}, {64,170}, + {25,12}, {25,11}, {64,177}, {64,155}, {64,168}, {64,156}, {64,167}, + {25,15}, {64,171}, {56,34}, {64,178}, {64,163}, {25,18}, {68,122}, + {27,111}, {64,176}, {64,175}, {25,20}, {68,109}, {27,112}, {68,110}, + {64,159}, {64,160}, {64,157}, {64,162}, {64,158}, {64,179}, {25,14}, + {27,113}, {25,16}, {25,21}, {64,161}, {64,173}, {64,166}, {68,113}, + {25,10}, {27,116}, {72,106}, {68,118}, {68,117}, {68,119}, {68,116}, + {27,117}, {27,123}, {27,120}, {27,121}, {68,111}, {68,114}, {68,124}, + {27,129}, {27,127}, {68,115}, {56,26}, {27,114}, {68,121}, {68,112}, + {27,130}, {68,120}, {25,13}, {27,119}, {64,164}, {27,122}, {27,126}, + {27,128}, {27,125}, {27,124}, {27,118}, {68,123}, {27,115}, {27,131}, + {29,152}, {29,153}, {72,105}, {29,162}, {29,159}, {29,150}, {29,157}, + {72,107}, {29,155}, {29,149}, {29,156}, {72,104}, {31,123}, {29,151}, + {29,158}, {31,122}, {72,103}, {72,102}, {29,160}, {29,161}, {72,101}, + {72,100}, {31,124}, {72,110}, {29,154}, {72,108}, {31,125}, {31,130}, + {75,170}, {75,172}, {31,127}, {75,173}, {75,169}, {75,171}, {31,128}, + {31,131}, {75,168}, {31,126}, {31,129}, {33,25}, {72,109}, {33,24}, + {33,30}, {78,148}, {33,28}, {33,29}, {78,151}, {78,147}, {33,26}, {78,145}, + {34,43}, {78,149}, {78,150}, {78,146}, {33,27}, {81,2}, {81,5}, {81,6}, + {81,4}, {81,7}, {34,44}, {81,3}, {83,14}, {35,36}, {83,13}, {83,12}, + {83,11}, {35,35}, {35,37}, {84,141}, {35,162}, {35,161}, {85,161}, + {85,160}, {85,163}, {36,139}, {36,53}, {86,157}, {85,162}, {86,156}, + {36,141}, {36,140}, {36,179}, {87,105}, {87,175}, {3,164}, {56,50}, + {72,111}, {5,108}, {41,183}, {6,177}, {6,175}, {6,176}, {43,129}, {8,177}, + {11,6}, {45,167}, {45,168}, {11,7}, {48,142}, {13,132}, {13,133}, {48,141}, + {16,147}, {16,143}, {52,103}, {16,150}, {16,149}, {16,142}, {16,145}, + {16,148}, {16,144}, {56,54}, {16,141}, {19,111}, {19,113}, {19,114}, + {56,53}, {56,56}, {19,112}, {56,51}, {56,55}, {56,52}, {22,49}, {60,124}, + {25,22}, {64,180}, {29,163}, {27,132}, {68,125}, {27,133}, {27,134}, + {68,127}, {68,126}, {68,128}, {72,113}, {72,112}, {75,175}, {75,174}, + {31,132}, {31,133}, {81,8}, {3,165}, {56,57}, {19,116}, {19,115}, {60,125}, + {78,152}, {35,163}, {86,158}, {3,166}, {13,134}, {16,152}, {16,151}, + {56,58}, {56,59}, {22,50}, {64,181}, {25,23}, {72,114}, {3,167}, {4,120}, + {8,178}, {43,130}, {45,169}, {11,8}, {16,153}, {56,60}, {19,117}, {22,51}, + {68,129}, {68,130}, {75,176}, {33,31}, {87,176}, {3,168}, {43,131}, + {8,179}, {11,9}, {45,170}, {13,135}, {48,146}, {48,144}, {48,145}, + {13,136}, {48,143}, {16,155}, {16,156}, {52,104}, {16,157}, {16,154}, + {56,61}, {56,62}, {60,126}, {25,25}, {25,24}, {75,177}, {78,153}, {81,10}, + {81,9}, {83,15}, {40,30}, {11,10}, {3,169}, {4,121}, {5,110}, {5,109}, + {5,111}, {5,112}, {40,174}, {40,173}, {41,184}, {6,178}, {41,187}, + {41,186}, {41,185}, {41,188}, {8,180}, {43,137}, {43,133}, {43,142}, + {8,187}, {8,185}, {43,138}, {43,134}, {43,141}, {8,184}, {9,0}, {43,136}, + {43,132}, {8,190}, {43,139}, {8,183}, {43,140}, {8,186}, {8,188}, {43,144}, + {43,143}, {43,135}, {8,182}, {8,181}, {8,189}, {45,175}, {45,181}, + {11,16}, {11,13}, {45,172}, {45,177}, {11,19}, {11,11}, {45,176}, {11,14}, + {11,17}, {45,179}, {11,12}, {45,184}, {11,15}, {11,18}, {45,173}, {45,178}, + {45,182}, {45,174}, {45,171}, {45,183}, {45,180}, {13,144}, {13,137}, + {13,140}, {13,143}, {48,149}, {13,138}, {48,147}, {13,142}, {13,139}, + {48,150}, {13,141}, {52,108}, {16,159}, {52,107}, {52,109}, {16,158}, + {16,163}, {48,148}, {52,106}, {52,110}, {16,160}, {52,105}, {16,162}, + {16,161}, {56,103}, {56,98}, {19,118}, {19,122}, {19,119}, {56,101}, + {56,104}, {19,120}, {19,121}, {19,126}, {60,135}, {56,102}, {19,124}, + {56,99}, {56,97}, {19,125}, {56,100}, {22,57}, {60,127}, {22,54}, {22,55}, + {22,53}, {60,132}, {60,131}, {60,128}, {22,59}, {60,130}, {19,123}, + {60,134}, {60,129}, {22,56}, {22,52}, {22,58}, {60,133}, {25,28}, {64,184}, + {64,183}, {64,182}, {25,26}, {25,27}, {68,133}, {68,136}, {27,136}, + {27,135}, {68,137}, {68,132}, {27,138}, {68,134}, {27,137}, {68,131}, + {68,135}, {29,169}, {29,166}, {72,123}, {72,122}, {72,121}, {72,116}, + {72,117}, {29,167}, {29,164}, {29,168}, {72,115}, {29,165}, {72,118}, + {72,119}, {72,124}, {72,120}, {75,178}, {31,135}, {78,156}, {31,134}, + {78,154}, {78,155}, {33,32}, {34,46}, {81,11}, {34,45}, {83,17}, {83,18}, + {35,38}, {83,16}, {35,164}, {86,159}, {36,142}, {87,106}, {87,107}, + {3,170}, {5,113}, {5,114}, {6,179}, {43,145}, {11,20}, {13,145}, {16,164}, + {15,146}, {19,127}, {19,128}, {18,140}, {56,105}, {22,60}, {64,186}, + {64,185}, {3,171}, {5,115}, {43,146}, {9,2}, {9,1}, {45,185}, {45,186}, + {48,151}, {48,152}, {13,146}, {13,147}, {13,148}, {52,111}, {16,166}, + {19,130}, {19,129}, {60,136}, {62,58}, {64,187}, {72,125}, {33,33}, + {35,39}, {3,172}, {4,124}, {4,125}, {4,123}, {4,126}, {4,122}, {5,118}, + {40,182}, {5,117}, {5,119}, {40,177}, {40,176}, {40,179}, {40,178}, + {40,181}, {5,116}, {40,175}, {40,180}, {41,189}, {6,189}, {41,190}, + {42,3}, {6,188}, {42,7}, {42,2}, {42,5}, {6,181}, {6,182}, {6,183}, + {6,184}, {7,0}, {42,1}, {6,186}, {7,1}, {42,0}, {42,6}, {6,185}, {42,4}, + {6,187}, {6,180}, {6,190}, {9,23}, {43,148}, {9,3}, {9,13}, {9,14}, + {9,6}, {9,24}, {9,8}, {43,156}, {9,19}, {43,151}, {9,9}, {43,166}, + {43,167}, {43,159}, {43,152}, {9,22}, {43,164}, {9,17}, {9,15}, {43,165}, + {43,163}, {43,155}, {43,147}, {43,154}, {9,10}, {9,16}, {9,4}, {43,158}, + {43,157}, {43,149}, {9,18}, {43,161}, {43,150}, {9,21}, {43,168}, {9,5}, + {9,12}, {43,153}, {43,162}, {9,20}, {9,7}, {9,11}, {43,160}, {46,27}, + {11,28}, {11,41}, {46,22}, {46,12}, {11,34}, {46,10}, {11,27}, {46,5}, + {11,37}, {46,18}, {45,190}, {46,1}, {46,4}, {45,187}, {46,17}, {46,33}, + {11,32}, {46,6}, {46,24}, {45,189}, {46,31}, {46,32}, {46,35}, {46,26}, + {46,11}, {46,19}, {11,38}, {11,25}, {11,33}, {11,45}, {11,22}, {11,24}, + {46,3}, {11,42}, {11,35}, {46,29}, {46,0}, {11,44}, {11,39}, {46,9}, + {11,43}, {46,16}, {46,8}, {11,36}, {46,28}, {46,20}, {11,30}, {46,34}, + {46,7}, {11,26}, {46,25}, {46,15}, {11,31}, {46,21}, {11,23}, {45,188}, + {11,40}, {13,163}, {11,29}, {46,14}, {46,13}, {46,2}, {46,30}, {46,23}, + {11,21}, {48,172}, {13,170}, {48,173}, {48,161}, {13,159}, {13,171}, + {48,154}, {48,163}, {48,171}, {48,153}, {48,180}, {13,149}, {48,179}, + {48,174}, {48,175}, {13,157}, {13,168}, {48,165}, {48,166}, {48,176}, + {48,167}, {48,162}, {48,156}, {48,157}, {48,170}, {48,164}, {13,150}, + {13,154}, {48,178}, {48,158}, {13,166}, {13,162}, {13,165}, {13,172}, + {13,155}, {13,167}, {48,169}, {13,169}, {13,152}, {13,151}, {48,155}, + {48,159}, {13,160}, {48,177}, {48,168}, {48,160}, {13,164}, {13,161}, + {13,153}, {13,156}, {52,132}, {52,116}, {52,117}, {52,121}, {52,136}, + {52,133}, {52,126}, {52,125}, {16,173}, {52,129}, {52,144}, {52,112}, + {52,145}, {52,131}, {52,149}, {52,137}, {16,172}, {52,135}, {16,167}, + {16,188}, {16,178}, {16,182}, {16,181}, {52,113}, {52,142}, {52,148}, + {52,140}, {52,147}, {52,128}, {52,114}, {52,146}, {52,130}, {16,170}, + {16,183}, {52,139}, {16,176}, {52,138}, {52,115}, {16,184}, {16,186}, + {52,141}, {16,187}, {16,169}, {52,122}, {52,143}, {16,175}, {16,185}, + {52,124}, {52,134}, {52,119}, {52,123}, {16,180}, {52,118}, {16,168}, + {16,177}, {16,174}, {52,127}, {13,158}, {56,128}, {16,171}, {16,179}, + {56,131}, {56,153}, {56,142}, {19,150}, {19,145}, {56,125}, {19,146}, + {56,141}, {56,134}, {56,147}, {19,142}, {56,107}, {56,149}, {19,132}, + {56,115}, {19,135}, {19,134}, {19,151}, {56,109}, {56,143}, {56,144}, + {19,137}, {19,133}, {56,123}, {19,144}, {56,118}, {56,145}, {19,140}, + {56,137}, {56,150}, {56,112}, {56,117}, {56,111}, {19,139}, {56,130}, + {60,158}, {56,113}, {19,143}, {56,122}, {56,146}, {19,138}, {56,119}, + {56,116}, {56,133}, {19,141}, {19,131}, {19,153}, {56,136}, {56,135}, + {56,108}, {19,136}, {56,148}, {56,124}, {56,126}, {56,139}, {56,138}, + {56,106}, {19,147}, {19,149}, {56,114}, {56,121}, {56,129}, {19,148}, + {56,120}, {56,132}, {56,151}, {56,140}, {56,152}, {56,110}, {60,178}, + {22,102}, {60,176}, {60,155}, {60,160}, {60,153}, {60,172}, {60,139}, + {60,146}, {60,170}, {60,180}, {60,156}, {60,143}, {60,162}, {60,167}, + {60,147}, {60,164}, {60,144}, {60,151}, {60,152}, {22,104}, {60,171}, + {60,169}, {60,140}, {60,174}, {60,175}, {60,177}, {22,108}, {22,100}, + {52,120}, {60,148}, {60,166}, {60,149}, {22,97}, {22,113}, {60,173}, + {22,111}, {22,107}, {60,138}, {22,99}, {60,141}, {22,112}, {60,157}, + {60,137}, {22,105}, {60,161}, {60,145}, {22,106}, {60,154}, {22,62}, + {19,152}, {60,163}, {56,127}, {60,142}, {60,168}, {22,101}, {60,165}, + {22,98}, {60,159}, {22,109}, {60,150}, {60,179}, {22,103}, {61,134}, + {22,110}, {65,10}, {65,8}, {65,30}, {65,6}, {65,24}, {22,61}, {25,31}, + {65,2}, {65,29}, {65,7}, {65,21}, {25,36}, {25,29}, {65,27}, {65,0}, + {65,26}, {25,47}, {65,17}, {65,33}, {25,45}, {65,9}, {25,30}, {65,11}, + {65,25}, {25,39}, {65,4}, {25,43}, {25,33}, {65,13}, {65,3}, {64,188}, + {65,23}, {25,40}, {65,32}, {64,189}, {25,37}, {65,19}, {25,38}, {65,5}, + {65,16}, {65,12}, {65,14}, {25,32}, {65,31}, {25,46}, {65,15}, {65,34}, + {64,190}, {65,20}, {25,35}, {25,44}, {25,42}, {65,1}, {65,22}, {25,41}, + {25,34}, {65,18}, {65,28}, {68,149}, {68,145}, {68,141}, {68,161}, + {68,158}, {27,141}, {68,165}, {68,148}, {27,152}, {68,155}, {68,144}, + {68,154}, {27,149}, {68,174}, {68,171}, {68,157}, {68,142}, {68,162}, + {68,164}, {27,145}, {68,152}, {68,147}, {68,138}, {27,142}, {27,150}, + {68,167}, {27,151}, {68,139}, {68,173}, {68,160}, {68,166}, {27,148}, + {68,163}, {68,170}, {27,153}, {27,147}, {68,156}, {68,143}, {68,175}, + {68,140}, {68,168}, {27,144}, {68,150}, {68,151}, {27,143}, {27,140}, + {68,146}, {27,146}, {27,139}, {68,169}, {68,172}, {68,153}, {72,138}, + {72,130}, {72,126}, {29,182}, {29,171}, {29,176}, {29,172}, {72,140}, + {72,151}, {29,170}, {72,132}, {72,141}, {68,159}, {72,142}, {29,177}, + {72,157}, {29,181}, {29,184}, {72,128}, {29,180}, {72,155}, {72,156}, + {72,146}, {72,145}, {72,137}, {72,147}, {72,154}, {72,153}, {29,175}, + {29,173}, {72,139}, {72,136}, {72,133}, {72,152}, {29,183}, {72,150}, + {29,179}, {29,178}, {72,144}, {72,127}, {72,129}, {72,131}, {72,149}, + {72,143}, {29,174}, {72,134}, {72,148}, {72,135}, {31,143}, {76,5}, + {31,136}, {75,181}, {76,1}, {31,138}, {76,8}, {75,188}, {75,183}, {76,9}, + {75,179}, {75,190}, {31,145}, {76,4}, {76,10}, {75,189}, {31,137}, + {76,0}, {75,180}, {31,144}, {76,7}, {75,185}, {31,140}, {75,187}, {75,184}, + {31,146}, {75,186}, {31,139}, {31,142}, {76,3}, {75,182}, {76,6}, {76,2}, + {33,35}, {78,167}, {33,40}, {33,41}, {33,34}, {78,166}, {78,163}, {78,164}, + {33,38}, {78,158}, {78,162}, {33,37}, {78,159}, {33,39}, {33,36}, {78,157}, + {78,161}, {78,165}, {81,17}, {81,14}, {81,23}, {81,22}, {81,20}, {81,15}, + {34,50}, {81,16}, {34,49}, {31,141}, {81,19}, {34,48}, {81,24}, {81,18}, + {81,13}, {78,160}, {34,47}, {81,12}, {83,22}, {83,21}, {81,21}, {35,40}, + {83,25}, {83,26}, {83,20}, {83,24}, {83,19}, {84,145}, {83,23}, {35,167}, + {35,165}, {84,143}, {84,146}, {84,142}, {84,144}, {35,166}, {85,165}, + {85,166}, {36,54}, {85,164}, {86,162}, {36,143}, {86,160}, {86,161}, + {87,108}, {37,22}, {87,179}, {87,177}, {87,178}, {87,180}, {88,123}, + {3,173}, {5,120}, {9,25}, {43,169}, {46,36}, {48,181}, {48,183}, {48,182}, + {48,184}, {16,189}, {52,151}, {48,185}, {52,150}, {52,152}, {52,153}, + {56,154}, {19,155}, {56,155}, {56,157}, {19,156}, {19,154}, {56,156}, + {60,186}, {60,184}, {60,183}, {60,182}, {60,181}, {22,114}, {60,185}, + {25,48}, {65,35}, {65,37}, {25,49}, {65,36}, {27,155}, {27,154}, {68,176}, + {72,159}, {72,158}, {72,160}, {29,185}, {76,11}, {31,147}, {78,168}, + {33,42}, {81,25}, {36,55}, {3,174}, {4,127}, {5,121}, {7,2}, {9,26}, + {9,27}, {11,46}, {48,186}, {22,115}, {69,145}, {29,186}, {33,43}, {3,175}, + {5,122}, {43,171}, {9,28}, {43,170}, {46,37}, {11,47}, {46,38}, {11,48}, + {48,188}, {13,174}, {13,173}, {52,158}, {52,156}, {52,157}, {52,155}, + {52,154}, {56,158}, {56,161}, {19,158}, {56,159}, {19,157}, {56,160}, + {60,187}, {65,38}, {65,39}, {65,40}, {68,179}, {68,178}, {27,156}, + {68,177}, {68,180}, {72,161}, {72,162}, {72,163}, {76,12}, {31,148}, + {33,44}, {81,26}, {35,168}, {40,31}, {11,49}, {46,39}, {13,175}, {16,190}, + {19,159}, {56,162}, {22,117}, {22,116}, {65,41}, {65,42}, {27,157}, + {27,158}, {72,165}, {72,164}, {78,169}, {86,163}, {3,176}, {40,32}, + {4,128}, {7,3}, {42,8}, {11,50}, {22,118}, {3,177}, {46,40}, {11,51}, + {46,41}, {31,149}, {3,178}, {43,172}, {46,42}, {49,2}, {49,1}, {48,190}, + {48,189}, {49,3}, {49,0}, {17,0}, {17,1}, {19,160}, {56,163}, {56,164}, + {56,165}, {61,1}, {61,2}, {61,0}, {60,189}, {60,190}, {22,119}, {65,43}, + {68,183}, {68,182}, {68,181}, {68,184}, {72,167}, {72,166}, {29,187}, + {72,168}, {31,150}, {76,13}, {78,170}, {81,27}, {85,167}, {3,179}, + {4,130}, {4,129}, {9,29}, {40,33}, {40,62}, {5,123}, {40,183}, {42,9}, + {42,10}, {9,30}, {43,173}, {11,52}, {46,43}, {46,44}, {13,176}, {13,180}, + {49,4}, {13,179}, {13,177}, {13,178}, {52,159}, {17,2}, {19,163}, {19,161}, + {19,162}, {56,166}, {25,50}, {3,180}, {40,97}, {4,131}, {40,100}, {4,134}, + {40,99}, {4,133}, {4,132}, {7,4}, {40,98}, {40,184}, {40,188}, {40,190}, + {41,0}, {5,133}, {5,134}, {40,187}, {5,129}, {40,185}, {40,189}, {5,130}, + {5,125}, {5,126}, {5,132}, {40,186}, {5,124}, {7,5}, {5,127}, {5,128}, + {5,131}, {42,27}, {42,25}, {42,12}, {7,17}, {42,19}, {7,12}, {42,13}, + {42,21}, {42,18}, {7,15}, {42,17}, {7,22}, {42,26}, {7,24}, {7,26}, + {42,11}, {7,13}, {42,28}, {7,20}, {7,23}, {44,5}, {7,7}, {7,30}, {7,21}, + {42,14}, {7,10}, {7,25}, {42,22}, {7,8}, {7,9}, {44,3}, {42,15}, {7,16}, + {7,27}, {42,29}, {42,16}, {7,14}, {7,19}, {43,174}, {7,28}, {42,23}, + {7,18}, {7,29}, {7,6}, {42,20}, {7,11}, {42,24}, {44,4}, {9,42}, {9,58}, + {43,181}, {9,49}, {44,11}, {9,34}, {9,37}, {44,2}, {43,179}, {43,183}, + {9,45}, {9,47}, {43,186}, {9,54}, {9,40}, {9,38}, {9,39}, {9,53}, {44,7}, + {9,48}, {43,185}, {43,187}, {9,46}, {9,51}, {43,188}, {44,10}, {11,53}, + {9,57}, {9,35}, {44,9}, {44,13}, {43,184}, {44,15}, {44,0}, {9,44}, + {43,180}, {9,43}, {9,61}, {9,50}, {43,178}, {46,53}, {9,56}, {9,60}, + {44,1}, {44,6}, {9,62}, {9,55}, {9,41}, {9,31}, {9,36}, {43,182}, {9,32}, + {44,14}, {43,176}, {43,175}, {43,189}, {43,177}, {9,59}, {13,181}, + {9,52}, {43,190}, {9,33}, {11,102}, {44,12}, {46,60}, {46,97}, {46,100}, + {46,55}, {46,103}, {46,106}, {46,108}, {46,52}, {11,54}, {11,59}, {49,9}, + {11,109}, {46,101}, {46,109}, {46,59}, {46,51}, {49,36}, {11,62}, {46,98}, + {46,56}, {46,58}, {11,101}, {46,61}, {11,61}, {46,48}, {46,104}, {46,107}, + {11,58}, {11,104}, {46,45}, {11,106}, {11,56}, {11,110}, {46,105}, + {46,47}, {11,107}, {49,30}, {44,8}, {11,60}, {11,55}, {46,54}, {46,46}, + {11,108}, {11,100}, {46,99}, {11,105}, {11,103}, {46,57}, {11,97}, + {46,49}, {11,98}, {11,99}, {46,50}, {46,102}, {11,57}, {46,62}, {49,12}, + {13,189}, {14,3}, {49,21}, {49,27}, {49,23}, {49,10}, {49,13}, {49,6}, + {49,7}, {14,10}, {13,186}, {49,22}, {49,31}, {14,5}, {13,182}, {14,0}, + {49,14}, {14,2}, {49,15}, {49,25}, {14,4}, {49,40}, {49,8}, {13,188}, + {13,187}, {14,8}, {49,5}, {49,38}, {49,26}, {49,39}, {49,33}, {49,19}, + {49,34}, {49,28}, {49,37}, {49,35}, {14,9}, {49,20}, {13,185}, {13,184}, + {14,1}, {14,7}, {49,32}, {14,6}, {49,17}, {17,3}, {49,41}, {49,16}, + {49,11}, {13,190}, {14,11}, {13,183}, {49,24}, {49,29}, {17,37}, {52,161}, + {52,165}, {17,18}, {17,16}, {17,7}, {52,163}, {52,162}, {17,27}, {52,168}, + {17,21}, {52,186}, {53,7}, {17,4}, {52,183}, {52,176}, {17,39}, {52,160}, + {52,188}, {17,36}, {17,24}, {17,35}, {17,14}, {52,172}, {52,190}, {52,182}, + {17,15}, {17,9}, {53,5}, {52,189}, {53,0}, {17,17}, {17,25}, {53,2}, + {52,170}, {52,187}, {52,175}, {53,4}, {17,30}, {17,6}, {17,28}, {52,180}, + {52,178}, {52,179}, {17,19}, {52,174}, {52,173}, {17,8}, {52,167}, + {53,6}, {17,10}, {52,177}, {17,40}, {17,34}, {52,166}, {17,31}, {17,29}, + {17,38}, {52,184}, {17,33}, {49,18}, {52,185}, {17,32}, {53,1}, {17,5}, + {52,181}, {17,23}, {52,169}, {17,22}, {17,20}, {17,12}, {17,11}, {56,167}, + {53,3}, {52,171}, {56,188}, {17,13}, {20,1}, {17,26}, {19,174}, {56,182}, + {19,188}, {56,170}, {19,171}, {19,167}, {57,9}, {19,173}, {19,177}, + {19,172}, {19,181}, {57,13}, {57,4}, {56,177}, {19,186}, {19,180}, + {56,189}, {19,164}, {57,10}, {57,3}, {19,168}, {56,183}, {19,183}, + {57,21}, {57,22}, {19,165}, {57,8}, {19,185}, {56,187}, {56,173}, {56,174}, + {19,189}, {56,178}, {56,185}, {56,179}, {19,187}, {20,4}, {56,175}, + {56,168}, {56,169}, {56,171}, {19,170}, {56,184}, {19,184}, {20,2}, + {56,186}, {57,19}, {57,11}, {19,166}, {57,17}, {19,178}, {19,176}, + {57,23}, {19,175}, {57,1}, {56,180}, {56,190}, {20,7}, {57,5}, {57,2}, + {56,176}, {20,3}, {57,15}, {57,12}, {57,20}, {19,169}, {57,0}, {20,6}, + {57,7}, {19,179}, {19,182}, {57,6}, {20,5}, {56,181}, {52,164}, {57,16}, + {57,14}, {57,18}, {56,172}, {20,0}, {61,33}, {61,32}, {61,6}, {22,125}, + {61,31}, {61,9}, {61,10}, {22,135}, {61,40}, {22,130}, {61,30}, {61,3}, + {22,136}, {22,126}, {61,18}, {61,8}, {61,11}, {61,35}, {22,120}, {61,42}, + {61,34}, {22,129}, {61,23}, {22,140}, {22,139}, {22,133}, {61,41}, + {22,121}, {61,21}, {61,12}, {61,25}, {61,37}, {22,141}, {22,123}, {61,20}, + {61,13}, {22,132}, {22,131}, {61,16}, {61,26}, {61,36}, {61,7}, {61,17}, + {22,124}, {61,27}, {22,137}, {22,128}, {61,14}, {22,127}, {61,5}, {61,19}, + {61,39}, {19,190}, {25,112}, {61,22}, {65,44}, {61,24}, {61,38}, {22,134}, + {61,15}, {22,122}, {22,138}, {27,176}, {61,4}, {61,29}, {61,28}, {65,106}, + {25,109}, {65,61}, {65,100}, {25,98}, {65,46}, {25,111}, {25,55}, {65,45}, + {65,112}, {25,113}, {65,49}, {65,99}, {65,51}, {65,115}, {65,111}, + {25,53}, {25,97}, {69,19}, {25,110}, {25,61}, {65,47}, {65,110}, {25,99}, + {65,107}, {65,120}, {65,53}, {65,62}, {65,118}, {65,108}, {25,60}, + {65,60}, {25,54}, {25,52}, {25,104}, {65,58}, {65,55}, {65,56}, {65,114}, + {65,119}, {65,117}, {25,58}, {65,121}, {25,62}, {25,103}, {65,48}, + {68,186}, {65,57}, {25,56}, {25,108}, {25,105}, {25,59}, {65,101}, + {65,52}, {25,106}, {65,103}, {25,100}, {25,102}, {25,51}, {65,105}, + {65,97}, {65,50}, {25,101}, {65,113}, {65,116}, {65,59}, {65,104}, + {25,57}, {27,159}, {65,102}, {68,185}, {65,109}, {65,54}, {69,4}, {69,14}, + {27,162}, {69,13}, {69,25}, {27,164}, {69,11}, {69,15}, {27,175}, {69,6}, + {27,167}, {69,18}, {72,176}, {27,179}, {27,178}, {69,20}, {69,3}, {69,30}, + {27,173}, {27,163}, {69,23}, {69,27}, {69,32}, {69,21}, {69,9}, {27,166}, + {27,169}, {27,177}, {27,172}, {69,12}, {65,98}, {69,8}, {69,31}, {27,168}, + {27,171}, {69,33}, {27,160}, {69,22}, {68,187}, {69,28}, {31,159}, + {69,10}, {27,161}, {69,5}, {27,165}, {68,188}, {25,107}, {69,1}, {69,26}, + {69,2}, {69,0}, {27,170}, {69,24}, {68,190}, {69,17}, {69,16}, {69,29}, + {69,7}, {27,174}, {72,179}, {30,9}, {29,190}, {73,0}, {72,171}, {30,1}, + {72,183}, {30,8}, {30,3}, {72,181}, {76,15}, {72,187}, {73,2}, {72,186}, + {72,169}, {72,184}, {73,4}, {73,6}, {29,189}, {73,5}, {30,4}, {30,10}, + {30,7}, {72,190}, {30,6}, {72,185}, {72,173}, {72,178}, {72,189}, {30,5}, + {30,2}, {29,188}, {30,0}, {72,177}, {68,189}, {72,172}, {72,175}, {73,1}, + {72,180}, {72,170}, {76,14}, {73,3}, {72,174}, {72,188}, {76,17}, {31,163}, + {31,151}, {31,155}, {76,19}, {76,25}, {76,23}, {31,153}, {31,154}, + {31,161}, {76,26}, {76,18}, {31,156}, {76,22}, {76,21}, {76,27}, {31,162}, + {31,157}, {31,160}, {76,20}, {31,164}, {31,158}, {31,165}, {31,152}, + {76,24}, {76,16}, {78,183}, {33,49}, {78,180}, {78,182}, {33,47}, {78,178}, + {78,179}, {78,174}, {72,182}, {78,175}, {33,48}, {78,171}, {33,45}, + {78,184}, {33,46}, {78,172}, {78,173}, {78,177}, {33,51}, {33,50}, + {78,176}, {34,56}, {81,31}, {81,37}, {34,57}, {81,28}, {34,54}, {34,51}, + {81,39}, {34,55}, {34,52}, {81,30}, {81,33}, {81,34}, {81,35}, {81,38}, + {78,181}, {81,29}, {34,53}, {81,36}, {81,40}, {81,32}, {83,29}, {35,42}, + {83,32}, {35,43}, {83,40}, {83,31}, {83,28}, {83,30}, {83,34}, {83,37}, + {83,36}, {83,39}, {83,27}, {35,41}, {83,35}, {83,38}, {83,41}, {83,33}, + {84,147}, {84,148}, {84,152}, {84,153}, {84,150}, {84,151}, {84,149}, + {35,169}, {36,56}, {85,171}, {85,168}, {85,169}, {85,170}, {36,57}, + {86,165}, {86,164}, {87,111}, {36,180}, {87,109}, {87,112}, {87,110}, + {87,181}, {37,23}, {37,37}, {88,99}, {88,44}, {88,98}, {88,144}, {88,145}, + {3,181}, {5,135}, {41,1}, {42,30}, {7,31}, {7,34}, {42,31}, {7,32}, + {7,33}, {44,24}, {44,26}, {44,21}, {44,18}, {44,20}, {9,100}, {9,98}, + {44,22}, {9,99}, {44,19}, {44,16}, {9,97}, {44,23}, {44,17}, {9,101}, + {44,25}, {46,111}, {46,115}, {11,119}, {46,118}, {11,111}, {11,114}, + {11,116}, {11,118}, {11,115}, {46,114}, {46,113}, {11,113}, {46,116}, + {46,117}, {46,110}, {11,117}, {11,112}, {46,112}, {49,55}, {49,56}, + {49,57}, {14,16}, {14,12}, {49,46}, {49,54}, {49,59}, {14,17}, {49,44}, + {49,50}, {49,43}, {49,53}, {49,49}, {14,13}, {14,15}, {49,58}, {49,42}, + {49,45}, {49,51}, {49,52}, {49,60}, {49,48}, {14,14}, {17,45}, {53,14}, + {53,16}, {53,12}, {53,24}, {53,10}, {53,23}, {17,41}, {53,8}, {57,27}, + {53,18}, {17,44}, {53,19}, {53,22}, {53,26}, {53,15}, {53,20}, {17,42}, + {17,43}, {53,25}, {53,13}, {53,9}, {53,27}, {53,17}, {53,21}, {53,11}, + {20,8}, {20,9}, {57,37}, {20,15}, {57,25}, {57,34}, {57,24}, {20,12}, + {57,32}, {57,30}, {57,31}, {20,10}, {57,35}, {57,28}, {57,26}, {20,11}, + {57,29}, {57,33}, {20,13}, {57,36}, {61,48}, {61,55}, {61,57}, {61,97}, + {22,154}, {61,43}, {22,146}, {61,58}, {22,151}, {61,98}, {22,142}, + {61,61}, {61,45}, {61,62}, {61,44}, {22,156}, {61,56}, {22,143}, {61,99}, + {22,148}, {61,49}, {22,153}, {61,60}, {61,47}, {61,54}, {61,50}, {61,46}, + {22,145}, {22,152}, {22,150}, {22,147}, {22,155}, {22,144}, {61,53}, + {22,149}, {20,14}, {61,59}, {61,51}, {61,52}, {65,129}, {25,116}, {65,125}, + {65,131}, {65,127}, {25,118}, {65,126}, {65,130}, {65,122}, {65,124}, + {25,117}, {65,128}, {65,123}, {25,119}, {25,114}, {65,132}, {25,115}, + {69,39}, {69,36}, {69,48}, {69,42}, {69,44}, {27,180}, {69,38}, {69,46}, + {69,45}, {69,43}, {69,49}, {27,183}, {69,40}, {69,47}, {27,181}, {69,35}, + {69,37}, {27,182}, {69,34}, {69,50}, {69,41}, {73,10}, {30,17}, {73,21}, + {73,19}, {30,11}, {73,9}, {73,12}, {73,13}, {73,8}, {30,21}, {30,22}, + {73,7}, {73,22}, {73,17}, {30,15}, {30,12}, {73,16}, {73,14}, {30,18}, + {73,18}, {30,13}, {30,14}, {73,15}, {30,16}, {73,11}, {73,20}, {30,19}, + {73,23}, {73,24}, {30,20}, {31,167}, {31,174}, {76,28}, {76,34}, {76,32}, + {31,170}, {31,169}, {31,166}, {76,30}, {31,172}, {31,171}, {31,168}, + {76,33}, {76,29}, {76,31}, {31,173}, {33,55}, {78,187}, {33,52}, {33,53}, + {78,189}, {33,54}, {78,186}, {78,185}, {81,44}, {78,188}, {81,45}, + {34,58}, {81,43}, {81,42}, {81,41}, {34,59}, {35,44}, {83,42}, {83,43}, + {84,156}, {84,155}, {35,170}, {84,154}, {85,172}, {85,173}, {86,166}, + {87,113}, {87,182}, {88,124}, {37,57}, {88,134}, {3,182}, {9,102}, + {9,103}, {11,120}, {31,175}, {3,183}, {9,104}, {14,18}, {22,157}, {3,184}, + {17,46}, {25,120}, {40,34}, {46,119}, {49,61}, {65,133}, {31,176}, + {3,185}, {9,105}, {46,120}, {46,121}, {57,38}, {20,16}, {61,100}, {22,158}, + {65,134}, {27,184}, {34,60}, {3,186}, {57,39}, {3,187}, {5,137}, {41,2}, + {5,136}, {7,37}, {7,36}, {7,35}, {42,32}, {9,106}, {9,107}, {44,27}, + {46,122}, {46,125}, {11,122}, {46,123}, {11,121}, {46,124}, {11,123}, + {49,98}, {49,97}, {49,62}, {14,19}, {53,29}, {53,30}, {17,47}, {53,28}, + {53,31}, {20,18}, {17,48}, {20,17}, {57,43}, {57,42}, {57,40}, {57,41}, + {57,44}, {61,102}, {61,101}, {61,105}, {61,104}, {61,103}, {25,121}, + {65,137}, {65,136}, {25,122}, {65,135}, {69,51}, {69,52}, {27,185}, + {73,25}, {73,26}, {81,50}, {34,61}, {81,49}, {81,48}, {81,46}, {81,47}, + {35,171}, {83,44}, {85,174}, {87,183}, {3,188}, {40,101}, {4,135}, + {40,102}, {41,3}, {41,4}, {42,38}, {42,34}, {42,33}, {9,108}, {42,37}, + {7,39}, {42,35}, {7,38}, {42,39}, {42,36}, {44,31}, {46,126}, {44,29}, + {44,36}, {9,109}, {9,112}, {44,37}, {44,33}, {44,34}, {44,28}, {9,111}, + {44,30}, {9,110}, {44,35}, {44,32}, {46,130}, {11,125}, {11,126}, {46,133}, + {46,127}, {46,132}, {46,128}, {11,124}, {46,131}, {46,129}, {49,104}, + {49,101}, {49,103}, {14,24}, {14,23}, {14,21}, {49,100}, {49,105}, + {14,20}, {14,22}, {49,102}, {53,39}, {49,99}, {49,106}, {53,34}, {53,38}, + {53,37}, {57,46}, {57,57}, {53,40}, {53,35}, {57,45}, {17,52}, {17,51}, + {53,33}, {53,36}, {17,53}, {17,50}, {17,49}, {53,32}, {53,41}, {57,48}, + {57,55}, {20,20}, {57,54}, {57,51}, {20,22}, {57,53}, {57,47}, {57,49}, + {57,52}, {57,50}, {20,21}, {57,56}, {20,19}, {22,159}, {61,109}, {61,108}, + {61,106}, {22,162}, {22,161}, {61,110}, {61,107}, {65,138}, {25,123}, + {22,160}, {61,112}, {61,111}, {65,141}, {65,139}, {27,186}, {25,124}, + {65,140}, {69,54}, {27,187}, {69,53}, {69,62}, {69,61}, {69,59}, {69,58}, + {69,55}, {69,56}, {69,57}, {69,60}, {69,97}, {73,31}, {73,28}, {73,29}, + {30,23}, {73,27}, {73,33}, {73,32}, {73,30}, {76,36}, {76,37}, {31,177}, + {31,178}, {76,35}, {33,57}, {78,190}, {33,56}, {34,62}, {34,97}, {35,45}, + {83,46}, {83,45}, {84,157}, {85,175}, {36,58}, {86,168}, {86,167}, + {86,169}, {4,136}, {46,134}, {14,25}, {17,54}, {53,42}, {4,137}, {40,103}, + {3,189}, {41,5}, {42,44}, {42,42}, {42,43}, {42,40}, {7,40}, {42,41}, + {44,45}, {9,115}, {44,43}, {44,39}, {44,42}, {44,38}, {9,117}, {44,41}, + {9,114}, {9,113}, {9,116}, {44,44}, {44,40}, {11,130}, {11,133}, {46,142}, + {46,141}, {46,140}, {11,127}, {46,149}, {46,139}, {11,129}, {49,111}, + {46,146}, {46,144}, {11,132}, {46,136}, {46,147}, {46,138}, {46,148}, + {46,145}, {46,137}, {11,128}, {46,150}, {46,135}, {11,131}, {49,116}, + {49,107}, {49,118}, {49,110}, {49,121}, {49,122}, {49,108}, {49,120}, + {49,117}, {49,115}, {49,119}, {14,31}, {14,29}, {49,113}, {49,109}, + {49,112}, {49,123}, {49,114}, {14,30}, {46,143}, {14,26}, {14,28}, + {53,56}, {53,45}, {53,43}, {53,44}, {53,51}, {53,52}, {53,48}, {17,59}, + {53,53}, {53,50}, {53,47}, {17,57}, {53,46}, {17,55}, {17,58}, {53,49}, + {53,57}, {14,27}, {17,56}, {53,55}, {53,54}, {17,60}, {57,62}, {57,97}, + {20,32}, {57,103}, {57,105}, {57,98}, {20,26}, {57,102}, {57,101}, + {20,27}, {20,33}, {20,34}, {57,104}, {20,24}, {57,61}, {57,59}, {57,99}, + {57,58}, {20,31}, {57,60}, {57,100}, {57,106}, {20,25}, {20,30}, {20,28}, + {20,29}, {20,23}, {22,169}, {61,119}, {22,168}, {61,123}, {61,113}, + {61,124}, {61,114}, {61,115}, {61,125}, {61,122}, {61,120}, {61,121}, + {61,117}, {61,116}, {61,126}, {22,165}, {61,118}, {22,170}, {22,164}, + {22,171}, {22,172}, {22,167}, {22,166}, {65,142}, {25,126}, {25,125}, + {65,147}, {27,188}, {25,127}, {25,129}, {65,148}, {22,163}, {25,128}, + {65,144}, {65,146}, {65,143}, {65,145}, {69,107}, {69,106}, {69,103}, + {28,0}, {73,34}, {28,1}, {69,102}, {27,190}, {69,104}, {69,101}, {69,98}, + {69,105}, {69,99}, {69,100}, {27,189}, {76,41}, {73,38}, {73,37}, {73,39}, + {76,38}, {30,26}, {73,35}, {30,24}, {30,28}, {30,27}, {73,36}, {73,40}, + {30,25}, {76,45}, {31,181}, {33,58}, {31,182}, {31,179}, {76,42}, {76,40}, + {76,43}, {76,46}, {31,180}, {76,44}, {76,39}, {79,2}, {79,5}, {81,53}, + {79,0}, {83,47}, {79,6}, {34,98}, {79,4}, {33,59}, {79,1}, {79,3}, + {79,7}, {81,54}, {81,52}, {34,99}, {81,51}, {35,46}, {35,173}, {85,177}, + {35,172}, {85,179}, {85,176}, {85,178}, {36,144}, {87,114}, {4,138}, + {44,46}, {49,124}, {49,125}, {17,61}, {61,127}, {30,29}, {34,100}, + {36,59}, {87,115}, {4,139}, {44,47}, {1,32}, {46,151}, {46,152}, {49,126}, + {49,127}, {17,62}, {17,97}, {57,107}, {61,130}, {61,129}, {61,128}, + {65,149}, {65,150}, {65,151}, {25,130}, {69,109}, {69,108}, {73,41}, + {30,30}, {30,31}, {76,50}, {76,47}, {76,48}, {76,49}, {79,9}, {79,8}, + {33,60}, {81,55}, {84,158}, {4,140}, {11,134}, {17,98}, {61,131}, {4,141}, + {49,128}, {17,99}, {20,35}, {20,36}, {4,142}, {4,143}, {41,6}, {7,42}, + {7,41}, {11,135}, {46,153}, {57,108}, {4,144}, {4,145}, {4,146}, {4,147}, + {7,43}, {7,44}, {42,46}, {42,45}, {9,118}, {44,50}, {44,48}, {44,49}, + {46,154}, {46,155}, {11,139}, {11,137}, {11,138}, {11,136}, {14,32}, + {14,36}, {14,35}, {49,129}, {14,34}, {14,33}, {49,130}, {17,102}, {53,59}, + {53,58}, {17,100}, {17,101}, {20,38}, {20,37}, {57,110}, {57,109}, + {17,103}, {22,173}, {61,133}, {22,174}, {61,132}, {65,152}, {69,110}, + {28,2}, {73,42}, {76,51}, {34,102}, {34,101}, {36,60}, {4,148}, {44,51}, + {17,104}, {65,153}, {25,131}, {42,47}, {42,48}, {44,52}, {9,120}, {9,121}, + {9,119}, {11,143}, {11,144}, {11,141}, {11,142}, {46,156}, {46,157}, + {11,140}, {49,131}, {14,40}, {14,41}, {17,107}, {49,137}, {14,46}, + {14,44}, {49,138}, {49,133}, {14,43}, {14,42}, {14,37}, {49,136}, {49,135}, + {49,132}, {14,45}, {49,134}, {14,38}, {14,39}, {17,108}, {53,97}, {53,98}, + {17,109}, {53,60}, {53,62}, {53,100}, {53,99}, {53,61}, {17,105}, {17,106}, + {57,118}, {20,43}, {20,42}, {57,112}, {20,40}, {57,115}, {20,44}, {57,116}, + {20,45}, {57,113}, {20,39}, {20,41}, {57,117}, {57,114}, {57,111}, + {61,146}, {61,135}, {22,176}, {22,179}, {22,178}, {22,183}, {22,182}, + {61,147}, {61,145}, {61,138}, {61,142}, {61,141}, {22,180}, {61,144}, + {61,140}, {61,148}, {61,139}, {22,181}, {22,175}, {22,177}, {61,137}, + {65,155}, {25,135}, {65,159}, {25,134}, {65,156}, {25,133}, {61,136}, + {61,143}, {65,158}, {25,136}, {65,160}, {65,157}, {65,154}, {69,113}, + {69,117}, {69,119}, {69,115}, {69,114}, {69,112}, {28,5}, {28,3}, {28,8}, + {28,9}, {69,116}, {28,6}, {69,111}, {28,7}, {25,132}, {69,118}, {28,4}, + {73,44}, {73,43}, {73,51}, {73,45}, {73,50}, {73,47}, {30,32}, {73,49}, + {30,33}, {30,34}, {73,48}, {73,46}, {31,184}, {76,52}, {31,183}, {76,55}, + {76,53}, {76,54}, {31,185}, {79,13}, {33,97}, {79,14}, {33,61}, {79,15}, + {33,62}, {79,12}, {79,16}, {79,10}, {34,103}, {81,56}, {34,104}, {35,47}, + {79,11}, {35,48}, {35,174}, {84,159}, {36,62}, {85,180}, {36,61}, {86,170}, + {36,181}, {36,182}, {88,140}, {11,145}, {46,158}, {20,46}, {20,47}, + {4,149}, {5,138}, {41,7}, {42,49}, {7,45}, {9,122}, {11,146}, {11,147}, + {11,148}, {53,102}, {49,139}, {14,47}, {17,110}, {53,101}, {57,120}, + {20,49}, {57,119}, {20,48}, {61,149}, {28,10}, {69,123}, {69,120}, + {69,121}, {69,122}, {76,56}, {79,17}, {83,49}, {83,48}, {85,181}, {4,150}, + {44,53}, {14,48}, {20,50}, {61,150}, {65,161}, {28,11}, {73,52}, {79,18}, + {83,50}, {4,151}, {9,123}, {11,151}, {46,159}, {11,152}, {11,150}, + {11,149}, {49,140}, {14,49}, {14,50}, {14,51}, {17,112}, {53,103}, + {17,111}, {57,121}, {17,113}, {20,51}, {61,151}, {22,184}, {22,185}, + {25,137}, {25,138}, {28,12}, {30,36}, {73,53}, {30,35}, {76,57}, {31,186}, + {79,19}, {83,51}, {4,152}, {7,46}, {44,56}, {44,55}, {9,124}, {44,54}, + {9,125}, {44,57}, {46,165}, {11,155}, {11,154}, {46,167}, {46,166}, + {11,159}, {11,158}, {11,153}, {46,161}, {46,162}, {46,163}, {11,160}, + {46,160}, {11,156}, {46,164}, {11,157}, {49,143}, {49,147}, {49,145}, + {49,144}, {49,148}, {49,149}, {49,150}, {49,142}, {49,141}, {14,53}, + {14,54}, {49,151}, {49,146}, {53,112}, {49,152}, {14,55}, {14,52}, + {53,106}, {53,105}, {53,107}, {53,108}, {53,110}, {53,109}, {53,114}, + {17,117}, {17,114}, {17,118}, {53,104}, {17,119}, {53,113}, {17,116}, + {53,111}, {17,115}, {57,124}, {57,126}, {57,122}, {57,123}, {57,127}, + {57,129}, {57,130}, {57,125}, {57,128}, {20,52}, {61,155}, {61,160}, + {61,152}, {61,156}, {61,161}, {61,157}, {22,186}, {23,3}, {22,189}, + {61,153}, {61,154}, {25,142}, {23,6}, {22,190}, {23,4}, {22,188}, {61,159}, + {23,5}, {61,158}, {23,1}, {22,187}, {23,2}, {61,162}, {65,166}, {65,168}, + {23,0}, {65,163}, {25,140}, {65,169}, {25,141}, {65,167}, {65,162}, + {65,165}, {65,170}, {25,139}, {65,164}, {28,14}, {69,127}, {69,126}, + {28,17}, {28,15}, {69,124}, {28,13}, {69,125}, {28,16}, {73,61}, {73,97}, + {73,62}, {73,54}, {73,58}, {73,57}, {73,55}, {30,38}, {30,39}, {30,37}, + {73,56}, {73,59}, {73,60}, {30,40}, {32,0}, {76,99}, {31,188}, {76,59}, + {31,190}, {32,1}, {31,189}, {76,98}, {76,60}, {31,187}, {76,97}, {76,58}, + {76,62}, {76,61}, {79,21}, {33,100}, {33,101}, {33,98}, {33,99}, {79,20}, + {81,59}, {34,105}, {81,57}, {81,58}, {83,52}, {83,55}, {83,53}, {83,54}, + {84,160}, {35,175}, {86,171}, {87,116}, {36,183}, {87,184}, {87,185}, + {37,38}, {4,153}, {11,161}, {57,131}, {61,163}, {4,154}, {7,47}, {9,126}, + {46,168}, {46,169}, {14,56}, {57,132}, {20,53}, {23,7}, {32,2}, {76,100}, + {81,60}, {83,56}, {4,155}, {44,97}, {44,58}, {44,60}, {44,62}, {44,61}, + {44,59}, {9,127}, {11,162}, {46,178}, {46,173}, {46,170}, {46,177}, + {11,164}, {11,165}, {46,176}, {46,175}, {46,174}, {46,171}, {46,172}, + {46,179}, {11,163}, {14,60}, {14,100}, {14,99}, {49,161}, {49,155}, + {49,153}, {14,97}, {53,121}, {14,58}, {49,158}, {49,162}, {49,164}, + {49,160}, {49,154}, {14,98}, {49,159}, {49,157}, {14,57}, {49,165}, + {14,101}, {49,163}, {14,61}, {49,156}, {14,62}, {14,59}, {17,121}, + {53,122}, {53,115}, {53,117}, {53,119}, {53,120}, {53,118}, {17,122}, + {53,123}, {53,116}, {57,136}, {20,54}, {57,144}, {57,133}, {57,145}, + {57,134}, {57,135}, {57,143}, {57,142}, {57,139}, {17,120}, {20,55}, + {57,137}, {57,140}, {20,56}, {57,141}, {57,138}, {61,174}, {61,178}, + {23,14}, {65,176}, {23,17}, {61,176}, {61,173}, {61,168}, {61,170}, + {61,171}, {61,164}, {23,13}, {23,12}, {23,8}, {61,167}, {23,15}, {23,16}, + {61,166}, {61,169}, {61,177}, {23,10}, {23,11}, {61,175}, {61,165}, + {65,178}, {25,144}, {65,180}, {61,172}, {65,182}, {25,148}, {65,183}, + {65,179}, {25,145}, {65,175}, {25,147}, {65,172}, {65,177}, {65,181}, + {65,174}, {23,9}, {65,171}, {25,146}, {65,173}, {28,20}, {69,129}, + {28,24}, {28,22}, {25,143}, {69,136}, {69,137}, {28,19}, {69,135}, + {69,138}, {28,21}, {28,18}, {69,131}, {69,128}, {69,133}, {69,130}, + {28,25}, {69,132}, {69,134}, {28,23}, {30,42}, {73,104}, {73,98}, {73,102}, + {73,108}, {73,109}, {73,105}, {73,106}, {73,103}, {73,100}, {30,44}, + {30,41}, {73,99}, {73,101}, {30,43}, {73,107}, {32,6}, {76,106}, {76,101}, + {32,5}, {32,3}, {76,108}, {32,4}, {76,104}, {76,105}, {76,102}, {76,109}, + {79,22}, {32,7}, {76,103}, {76,110}, {76,107}, {79,26}, {79,23}, {33,102}, + {79,27}, {79,29}, {79,28}, {79,24}, {79,25}, {81,99}, {34,106}, {81,62}, + {81,98}, {81,61}, {81,100}, {81,97}, {83,58}, {83,61}, {83,57}, {35,49}, + {83,59}, {83,60}, {83,62}, {35,50}, {35,52}, {35,51}, {84,161}, {84,163}, + {84,162}, {85,182}, {87,117}, {87,186}, {4,156}, {42,50}, {9,128}, + {44,99}, {9,129}, {9,130}, {44,98}, {46,184}, {46,183}, {11,166}, {11,169}, + {11,168}, {11,167}, {46,180}, {46,182}, {46,181}, {49,168}, {14,103}, + {49,172}, {49,171}, {49,170}, {49,166}, {14,102}, {14,106}, {14,109}, + {14,110}, {49,167}, {49,169}, {14,108}, {14,107}, {14,105}, {14,104}, + {53,130}, {53,128}, {53,124}, {17,123}, {53,125}, {17,124}, {53,126}, + {53,127}, {53,129}, {17,125}, {57,149}, {57,148}, {57,147}, {57,146}, + {61,182}, {23,18}, {61,179}, {61,181}, {23,19}, {23,20}, {61,180}, + {66,1}, {65,185}, {65,186}, {25,151}, {25,149}, {25,150}, {66,3}, {66,2}, + {65,190}, {65,189}, {65,188}, {65,187}, {66,0}, {65,184}, {69,139}, + {69,144}, {69,142}, {69,141}, {69,140}, {69,143}, {73,110}, {30,45}, + {32,8}, {76,112}, {32,9}, {76,111}, {79,31}, {79,30}, {33,103}, {81,101}, + {34,107}, {83,97}, {36,97}, {85,183}, {87,119}, {87,118}, {40,104}, + {11,170}, {11,171}, {53,131}, {23,22}, {4,157}, {7,50}, {7,49}, {7,48}, + {44,100}, {9,132}, {9,131}, {11,174}, {46,186}, {46,189}, {46,187}, + {11,172}, {11,173}, {46,185}, {46,188}, {14,117}, {49,179}, {49,181}, + {49,180}, {14,114}, {49,175}, {14,112}, {14,111}, {14,115}, {14,113}, + {14,116}, {49,178}, {49,173}, {49,174}, {49,177}, {49,176}, {53,134}, + {53,135}, {53,133}, {53,132}, {17,126}, {20,61}, {57,150}, {57,152}, + {57,154}, {20,60}, {20,58}, {57,151}, {20,59}, {57,153}, {20,57}, {62,1}, + {61,183}, {61,186}, {61,190}, {23,26}, {61,188}, {61,187}, {61,184}, + {61,185}, {23,24}, {62,0}, {23,23}, {23,28}, {23,27}, {23,25}, {61,189}, + {66,9}, {66,8}, {66,4}, {25,152}, {66,7}, {66,6}, {25,153}, {28,30}, + {69,146}, {28,31}, {28,27}, {28,29}, {28,26}, {28,28}, {73,111}, {30,48}, + {73,113}, {73,112}, {66,5}, {30,50}, {30,49}, {30,46}, {30,47}, {76,117}, + {76,115}, {32,10}, {76,116}, {76,118}, {76,114}, {76,113}, {79,32}, + {33,106}, {33,104}, {33,105}, {81,102}, {81,103}, {34,109}, {34,108}, + {83,99}, {83,100}, {83,98}, {85,184}, {85,185}, {4,158}, {41,8}, {7,51}, + {44,101}, {9,134}, {9,133}, {44,102}, {47,0}, {11,175}, {46,190}, {11,176}, + {14,118}, {49,184}, {49,182}, {49,188}, {14,119}, {49,183}, {49,187}, + {49,185}, {49,186}, {53,136}, {53,138}, {17,127}, {53,137}, {17,128}, + {20,98}, {20,97}, {20,62}, {57,155}, {62,4}, {23,29}, {23,30}, {62,3}, + {62,2}, {66,10}, {25,155}, {25,154}, {66,11}, {66,12}, {28,33}, {28,32}, + {73,117}, {69,147}, {69,149}, {69,148}, {73,116}, {73,114}, {73,118}, + {73,115}, {30,51}, {76,119}, {32,11}, {76,120}, {76,121}, {33,107}, + {33,108}, {35,53}, {36,145}, {4,159}, {47,1}, {49,189}, {14,120}, {18,122}, + {18,121}, {20,100}, {57,157}, {20,99}, {57,156}, {62,5}, {25,156}, + {66,13}, {25,157}, {35,54}, {83,101}, {5,139}, {9,135}, {44,103}, {11,178}, + {11,177}, {47,2}, {47,3}, {50,0}, {50,2}, {14,121}, {50,4}, {50,7}, + {50,5}, {50,6}, {50,3}, {49,190}, {14,122}, {50,8}, {50,1}, {53,147}, + {17,134}, {53,156}, {17,131}, {53,149}, {17,135}, {17,129}, {53,144}, + {53,157}, {53,145}, {53,142}, {17,133}, {17,130}, {53,148}, {53,151}, + {17,132}, {53,152}, {17,136}, {53,153}, {53,143}, {53,150}, {53,154}, + {53,146}, {53,141}, {53,139}, {53,155}, {57,159}, {57,164}, {57,160}, + {57,166}, {20,103}, {53,140}, {57,161}, {20,101}, {57,158}, {20,108}, + {57,162}, {20,107}, {57,163}, {20,109}, {20,104}, {20,110}, {20,105}, + {20,106}, {20,102}, {57,165}, {23,33}, {62,16}, {62,19}, {62,7}, {62,12}, + {62,6}, {23,35}, {62,10}, {62,8}, {23,34}, {62,15}, {62,14}, {62,11}, + {62,13}, {62,9}, {25,161}, {62,18}, {23,31}, {62,17}, {66,29}, {25,168}, + {66,24}, {25,167}, {66,14}, {66,16}, {25,160}, {66,21}, {66,20}, {66,23}, + {25,165}, {66,18}, {66,17}, {25,164}, {25,159}, {66,19}, {25,162}, + {66,25}, {66,27}, {66,22}, {66,15}, {25,163}, {28,41}, {25,158}, {66,28}, + {69,153}, {28,34}, {69,155}, {28,35}, {28,37}, {69,158}, {69,150}, + {25,166}, {69,156}, {69,152}, {23,32}, {28,40}, {28,36}, {28,38}, {28,39}, + {30,54}, {69,157}, {69,151}, {28,42}, {69,154}, {73,128}, {73,123}, + {73,133}, {30,52}, {73,125}, {30,56}, {73,131}, {73,122}, {73,119}, + {73,134}, {32,17}, {30,57}, {73,130}, {73,120}, {30,55}, {73,124}, + {30,59}, {73,121}, {73,126}, {30,58}, {73,129}, {73,132}, {76,139}, + {76,140}, {76,124}, {76,131}, {76,129}, {32,15}, {76,136}, {73,127}, + {76,127}, {76,137}, {32,14}, {76,126}, {76,125}, {76,135}, {76,132}, + {76,134}, {76,122}, {76,138}, {32,12}, {76,133}, {76,142}, {76,130}, + {32,16}, {32,13}, {76,128}, {76,123}, {76,141}, {30,53}, {79,35}, {79,33}, + {79,39}, {33,112}, {79,37}, {79,36}, {33,114}, {79,42}, {33,113}, {79,43}, + {79,40}, {33,110}, {79,41}, {79,34}, {33,111}, {33,109}, {81,107}, + {79,38}, {79,44}, {81,104}, {34,114}, {34,112}, {81,106}, {81,108}, + {81,105}, {34,113}, {34,110}, {34,111}, {34,115}, {35,56}, {83,106}, + {83,105}, {83,103}, {83,102}, {83,104}, {35,55}, {35,57}, {35,176}, + {84,165}, {84,164}, {85,186}, {85,188}, {85,190}, {85,189}, {85,187}, + {36,99}, {36,98}, {36,147}, {36,146}, {36,148}, {86,173}, {86,172}, + {87,187}, {87,120}, {87,188}, {37,24}, {37,25}, {88,45}, {37,62}, {5,140}, + {44,104}, {47,5}, {47,6}, {47,4}, {11,179}, {47,7}, {47,8}, {47,9}, + {50,9}, {50,15}, {50,13}, {14,123}, {50,11}, {50,12}, {50,14}, {50,10}, + {17,137}, {53,158}, {17,139}, {53,160}, {17,138}, {53,159}, {57,168}, + {20,111}, {57,170}, {57,167}, {53,161}, {20,112}, {57,169}, {62,22}, + {23,36}, {62,20}, {23,37}, {62,21}, {23,38}, {25,169}, {66,33}, {66,30}, + {66,32}, {25,170}, {25,171}, {66,31}, {69,159}, {69,160}, {28,43}, + {69,162}, {69,161}, {1,33}, {73,138}, {73,139}, {73,135}, {73,136}, + {30,60}, {30,61}, {73,137}, {32,23}, {32,19}, {32,24}, {32,20}, {32,22}, + {32,18}, {32,21}, {33,115}, {76,143}, {81,110}, {81,109}, {83,107}, + {35,58}, {35,59}, {86,1}, {84,166}, {86,0}, {87,189}, {88,100}, {5,141}, + {7,52}, {44,105}, {9,136}, {11,182}, {47,12}, {11,180}, {47,10}, {11,185}, + {11,181}, {11,186}, {11,184}, {47,11}, {11,183}, {14,127}, {14,126}, + {50,26}, {14,135}, {50,19}, {50,25}, {14,131}, {50,18}, {50,24}, {50,22}, + {14,130}, {14,132}, {50,21}, {14,125}, {50,20}, {14,136}, {14,133}, + {14,137}, {14,134}, {50,17}, {50,16}, {50,23}, {14,128}, {14,124}, + {14,129}, {53,176}, {53,169}, {20,117}, {53,168}, {17,143}, {17,150}, + {17,147}, {17,153}, {17,152}, {17,148}, {53,162}, {53,165}, {53,164}, + {17,144}, {53,166}, {53,175}, {17,145}, {53,163}, {53,172}, {53,173}, + {17,146}, {53,170}, {17,151}, {17,141}, {17,149}, {53,167}, {17,140}, + {53,171}, {53,174}, {57,187}, {57,178}, {20,114}, {57,185}, {57,182}, + {57,174}, {57,183}, {20,116}, {57,175}, {57,171}, {23,44}, {57,180}, + {20,113}, {57,186}, {20,120}, {20,122}, {57,173}, {20,121}, {57,176}, + {20,115}, {57,184}, {57,177}, {57,181}, {57,179}, {20,118}, {57,172}, + {20,123}, {17,142}, {20,119}, {20,124}, {23,40}, {62,29}, {62,31}, + {62,33}, {62,37}, {62,27}, {62,25}, {23,42}, {62,32}, {62,36}, {62,28}, + {62,24}, {62,23}, {62,34}, {62,26}, {62,30}, {23,43}, {23,41}, {62,38}, + {23,39}, {62,35}, {66,50}, {25,174}, {66,42}, {28,56}, {66,52}, {25,177}, + {66,56}, {25,183}, {66,37}, {66,53}, {66,34}, {66,55}, {66,38}, {25,190}, + {25,187}, {66,54}, {66,48}, {25,173}, {25,181}, {25,180}, {25,179}, + {25,185}, {66,35}, {25,186}, {66,49}, {25,182}, {25,172}, {66,51}, + {25,175}, {25,176}, {25,184}, {66,40}, {66,39}, {66,36}, {66,44}, {66,41}, + {66,45}, {25,189}, {66,57}, {25,178}, {66,46}, {66,47}, {66,43}, {25,188}, + {69,167}, {28,48}, {28,57}, {28,53}, {69,164}, {28,50}, {28,54}, {69,176}, + {28,44}, {69,168}, {28,52}, {69,171}, {69,166}, {28,51}, {28,55}, {69,165}, + {28,49}, {69,175}, {28,46}, {69,174}, {69,173}, {28,58}, {68,50}, {28,45}, + {69,172}, {69,163}, {28,59}, {69,170}, {28,47}, {69,169}, {30,98}, + {30,103}, {30,62}, {73,152}, {73,143}, {73,155}, {73,147}, {73,153}, + {30,104}, {30,97}, {73,140}, {73,146}, {73,156}, {73,149}, {73,154}, + {73,142}, {73,150}, {30,99}, {73,148}, {30,102}, {30,101}, {73,144}, + {73,145}, {73,141}, {73,151}, {30,100}, {73,158}, {73,157}, {76,154}, + {76,150}, {32,31}, {76,144}, {32,25}, {32,41}, {76,156}, {32,33}, {32,29}, + {76,147}, {32,36}, {32,39}, {76,158}, {32,28}, {76,149}, {32,37}, {76,160}, + {76,157}, {76,145}, {32,32}, {32,26}, {32,40}, {76,152}, {32,35}, {76,146}, + {32,30}, {76,159}, {32,34}, {32,27}, {76,153}, {32,38}, {76,151}, {76,155}, + {79,46}, {79,52}, {33,121}, {79,55}, {33,116}, {33,117}, {79,47}, {79,54}, + {79,49}, {33,122}, {33,119}, {79,45}, {33,118}, {79,51}, {79,53}, {33,120}, + {79,50}, {79,48}, {81,120}, {34,119}, {34,120}, {34,116}, {34,117}, + {81,116}, {81,114}, {81,118}, {34,122}, {81,119}, {81,112}, {81,111}, + {81,115}, {81,113}, {34,118}, {81,117}, {83,108}, {35,62}, {35,61}, + {83,109}, {83,111}, {83,110}, {35,97}, {84,171}, {84,168}, {84,169}, + {84,167}, {84,170}, {35,178}, {84,172}, {35,177}, {86,2}, {36,149}, + {36,151}, {86,174}, {36,150}, {87,121}, {88,0}, {88,2}, {87,190}, {88,1}, + {37,44}, {5,142}, {11,187}, {49,47}, {14,138}, {17,154}, {57,188}, + {57,189}, {73,159}, {32,42}, {76,161}, {33,123}, {81,122}, {81,121}, + {35,98}, {84,173}, {86,3}, {36,184}, {41,9}, {9,137}, {7,53}, {47,13}, + {50,32}, {50,27}, {50,31}, {50,29}, {14,139}, {50,30}, {50,28}, {53,177}, + {57,190}, {58,0}, {62,41}, {62,42}, {23,46}, {23,47}, {62,40}, {62,43}, + {62,39}, {23,45}, {26,0}, {23,48}, {66,58}, {28,60}, {69,177}, {28,61}, + {30,105}, {73,162}, {73,160}, {73,161}, {76,164}, {76,163}, {76,162}, + {81,123}, {34,121}, {81,124}, {86,4}, {36,185}, {87,122}, {5,143}, + {9,139}, {9,138}, {47,15}, {11,188}, {47,14}, {50,34}, {14,140}, {53,178}, + {50,33}, {17,156}, {53,181}, {53,179}, {53,180}, {17,155}, {58,2}, + {58,3}, {58,1}, {23,51}, {62,45}, {62,44}, {62,46}, {23,50}, {23,49}, + {69,178}, {69,180}, {28,62}, {69,179}, {73,163}, {30,106}, {79,57}, + {79,56}, {34,123}, {81,125}, {34,125}, {34,124}, {83,112}, {84,174}, + {35,179}, {5,144}, {47,16}, {11,189}, {50,37}, {14,142}, {50,36}, {50,35}, + {14,141}, {53,187}, {53,189}, {53,182}, {53,183}, {17,157}, {53,184}, + {17,158}, {53,188}, {53,185}, {53,186}, {17,159}, {20,126}, {20,127}, + {58,4}, {62,47}, {62,48}, {66,62}, {26,3}, {26,1}, {26,2}, {66,59}, + {66,60}, {66,61}, {69,185}, {69,186}, {28,97}, {69,183}, {69,182}, + {69,184}, {69,181}, {30,109}, {73,164}, {30,107}, {30,108}, {76,166}, + {32,43}, {76,165}, {78,104}, {79,58}, {79,59}, {33,124}, {33,125}, + {32,44}, {81,126}, {81,127}, {83,113}, {35,99}, {5,145}, {5,146}, {11,190}, + {9,140}, {14,143}, {47,17}, {20,128}, {5,147}, {12,1}, {47,18}, {47,19}, + {12,0}, {12,2}, {5,148}, {47,20}, {14,145}, {50,38}, {14,147}, {14,144}, + {14,146}, {54,1}, {17,160}, {54,0}, {53,190}, {62,49}, {66,97}, {28,98}, + {30,110}, {73,166}, {73,165}, {76,167}, {84,175}, {5,149}, {42,51}, + {44,106}, {12,3}, {47,21}, {50,40}, {14,148}, {50,39}, {14,149}, {54,3}, + {17,162}, {54,2}, {54,4}, {17,161}, {58,6}, {58,7}, {58,5}, {20,129}, + {23,52}, {23,53}, {26,5}, {66,99}, {66,98}, {26,4}, {69,187}, {69,188}, + {73,167}, {32,48}, {32,47}, {32,45}, {32,46}, {32,49}, {79,60}, {33,127}, + {33,126}, {81,128}, {83,114}, {36,101}, {36,100}, {5,150}, {48,187}, + {23,55}, {20,130}, {23,54}, {26,6}, {5,151}, {40,105}, {5,152}, {5,153}, + {44,107}, {42,54}, {42,55}, {7,55}, {42,52}, {7,54}, {7,57}, {42,53}, + {7,59}, {7,58}, {42,56}, {7,56}, {9,145}, {9,143}, {44,109}, {9,142}, + {9,147}, {9,149}, {9,146}, {44,112}, {44,108}, {9,150}, {9,144}, {7,60}, + {9,148}, {44,111}, {44,110}, {9,141}, {47,27}, {12,7}, {12,8}, {47,29}, + {47,23}, {47,26}, {47,35}, {47,33}, {12,9}, {47,39}, {12,12}, {47,36}, + {47,28}, {47,25}, {58,9}, {47,34}, {12,4}, {47,37}, {47,22}, {47,31}, + {12,6}, {12,11}, {47,32}, {12,15}, {12,13}, {47,24}, {12,10}, {47,30}, + {12,14}, {12,5}, {47,38}, {14,154}, {14,163}, {14,152}, {14,150}, {50,42}, + {14,158}, {14,155}, {50,44}, {14,157}, {50,43}, {50,41}, {50,46}, {14,162}, + {14,160}, {58,8}, {50,47}, {50,45}, {14,151}, {14,153}, {14,156}, {14,159}, + {14,161}, {54,14}, {17,164}, {54,5}, {54,7}, {54,8}, {54,16}, {54,12}, + {54,10}, {54,13}, {54,17}, {17,165}, {17,169}, {54,6}, {54,15}, {17,167}, + {17,166}, {54,11}, {54,9}, {17,163}, {17,168}, {20,136}, {58,17}, {58,15}, + {20,138}, {58,10}, {62,97}, {20,137}, {58,14}, {58,11}, {20,133}, {20,139}, + {58,16}, {20,135}, {58,13}, {26,7}, {20,134}, {58,12}, {20,140}, {20,132}, + {20,131}, {62,55}, {62,53}, {62,59}, {62,51}, {62,98}, {62,56}, {62,50}, + {23,59}, {23,99}, {62,61}, {62,54}, {23,62}, {23,60}, {62,62}, {23,57}, + {23,56}, {62,57}, {23,61}, {20,141}, {62,60}, {62,52}, {23,58}, {23,97}, + {23,98}, {26,12}, {26,8}, {26,13}, {66,102}, {66,101}, {66,103}, {26,10}, + {66,100}, {26,11}, {66,106}, {66,105}, {66,104}, {26,9}, {70,1}, {70,4}, + {28,104}, {70,3}, {28,103}, {28,99}, {28,100}, {28,101}, {70,0}, {69,190}, + {28,102}, {70,2}, {69,189}, {73,169}, {73,179}, {30,113}, {30,112}, + {73,173}, {73,175}, {73,170}, {73,174}, {73,168}, {73,177}, {30,111}, + {73,176}, {73,172}, {73,178}, {73,171}, {32,52}, {76,168}, {76,174}, + {32,56}, {32,58}, {32,55}, {32,54}, {32,53}, {32,51}, {76,169}, {76,172}, + {32,50}, {76,173}, {32,57}, {76,171}, {76,170}, {33,128}, {33,129}, + {79,97}, {79,61}, {79,62}, {81,130}, {81,129}, {34,126}, {83,116}, + {35,100}, {83,115}, {84,176}, {86,5}, {36,102}, {88,3}, {88,4}, {36,152}, + {5,154}, {9,151}, {58,18}, {26,14}, {32,59}, {76,175}, {5,155}, {14,165}, + {14,164}, {58,19}, {73,180}, {5,156}, {12,16}, {58,20}, {58,21}, {58,22}, + {26,15}, {30,114}, {5,157}, {9,152}, {47,40}, {14,166}, {50,48}, {17,170}, + {58,23}, {23,100}, {26,16}, {30,115}, {32,60}, {33,130}, {83,117}, + {5,158}, {9,153}, {14,167}, {54,18}, {20,142}, {26,17}, {66,107}, {70,5}, + {5,159}, {20,143}, {62,99}, {26,18}, {5,160}, {44,113}, {47,41}, {12,17}, + {50,50}, {14,170}, {14,168}, {14,169}, {14,171}, {50,49}, {54,23}, + {54,20}, {54,22}, {17,171}, {17,173}, {17,172}, {54,19}, {17,174}, + {54,21}, {58,24}, {58,25}, {58,26}, {62,102}, {62,103}, {62,101}, {62,104}, + {23,101}, {62,100}, {26,19}, {70,10}, {70,6}, {70,9}, {70,11}, {70,8}, + {70,7}, {73,181}, {73,182}, {73,183}, {30,116}, {30,117}, {76,177}, + {76,176}, {76,178}, {79,99}, {79,98}, {81,132}, {81,133}, {81,131}, + {35,101}, {83,118}, {83,119}, {86,6}, {86,175}, {87,123}, {5,161}, + {7,61}, {32,61}, {5,162}, {54,24}, {58,27}, {37,1}, {41,10}, {41,11}, + {41,13}, {5,163}, {41,14}, {41,12}, {42,98}, {42,99}, {42,59}, {42,97}, + {7,97}, {7,98}, {42,60}, {42,58}, {42,57}, {42,61}, {7,62}, {42,62}, + {47,42}, {44,118}, {9,156}, {44,117}, {44,119}, {9,155}, {44,124}, + {9,159}, {44,114}, {44,128}, {44,134}, {9,166}, {44,131}, {9,163}, + {44,121}, {44,127}, {44,129}, {44,116}, {9,162}, {9,157}, {44,122}, + {9,164}, {9,167}, {9,161}, {9,154}, {44,126}, {44,120}, {44,133}, {9,169}, + {9,165}, {9,160}, {44,125}, {14,172}, {44,123}, {9,158}, {9,168}, {44,115}, + {44,130}, {44,132}, {12,34}, {12,28}, {12,36}, {12,33}, {47,49}, {47,52}, + {12,29}, {47,43}, {12,22}, {12,32}, {12,35}, {12,37}, {47,98}, {47,55}, + {12,21}, {47,97}, {12,25}, {12,23}, {12,18}, {47,47}, {47,62}, {47,51}, + {47,54}, {47,101}, {12,38}, {47,61}, {12,30}, {47,56}, {47,100}, {47,53}, + {47,57}, {47,60}, {47,45}, {47,99}, {47,59}, {47,44}, {47,48}, {12,31}, + {12,26}, {12,19}, {12,24}, {12,20}, {12,39}, {47,46}, {50,101}, {12,27}, + {47,58}, {45,1}, {50,104}, {14,186}, {50,54}, {50,99}, {50,61}, {50,114}, + {50,106}, {50,62}, {50,105}, {50,56}, {50,60}, {50,117}, {14,189}, + {50,109}, {50,100}, {14,173}, {50,115}, {50,52}, {50,108}, {14,188}, + {14,183}, {50,51}, {14,181}, {14,180}, {14,185}, {50,107}, {14,177}, + {14,184}, {47,50}, {58,28}, {50,102}, {50,58}, {14,187}, {50,59}, {50,97}, + {14,190}, {50,53}, {50,111}, {50,110}, {50,118}, {14,179}, {14,176}, + {50,116}, {50,112}, {50,103}, {50,98}, {14,182}, {14,178}, {50,55}, + {14,174}, {50,113}, {14,175}, {50,57}, {54,30}, {54,32}, {54,37}, {54,57}, + {17,188}, {17,178}, {54,29}, {17,189}, {17,190}, {54,40}, {54,47}, + {54,53}, {54,34}, {54,41}, {18,0}, {54,55}, {54,50}, {17,186}, {17,184}, + {54,46}, {54,42}, {54,28}, {17,175}, {54,33}, {54,25}, {17,183}, {17,185}, + {54,38}, {54,35}, {17,180}, {54,51}, {17,177}, {54,36}, {54,58}, {54,44}, + {54,43}, {17,176}, {17,187}, {17,179}, {54,26}, {54,31}, {54,48}, {54,54}, + {18,1}, {54,27}, {54,39}, {54,45}, {17,182}, {54,56}, {54,49}, {54,52}, + {17,181}, {58,44}, {58,32}, {20,151}, {58,61}, {58,103}, {58,106}, + {20,149}, {58,40}, {58,99}, {58,41}, {58,55}, {20,162}, {58,51}, {20,159}, + {58,52}, {58,29}, {58,100}, {20,168}, {58,97}, {58,53}, {58,108}, {58,48}, + {62,136}, {58,111}, {20,166}, {58,46}, {58,58}, {20,169}, {20,148}, + {58,50}, {58,109}, {58,43}, {58,36}, {58,47}, {58,35}, {58,33}, {20,144}, + {58,101}, {58,42}, {58,104}, {58,105}, {20,152}, {20,157}, {20,153}, + {20,161}, {58,62}, {20,154}, {58,54}, {58,38}, {20,146}, {58,30}, {58,98}, + {58,107}, {58,37}, {20,160}, {58,112}, {58,49}, {58,45}, {20,145}, + {20,165}, {58,60}, {20,167}, {58,56}, {20,156}, {20,150}, {20,158}, + {20,147}, {20,164}, {58,57}, {58,39}, {58,59}, {58,34}, {58,102}, {58,110}, + {58,31}, {62,135}, {62,157}, {23,21}, {62,140}, {62,138}, {62,117}, + {23,105}, {62,133}, {62,153}, {62,129}, {23,113}, {62,152}, {62,127}, + {20,163}, {62,143}, {62,128}, {62,150}, {23,112}, {23,104}, {62,106}, + {62,114}, {62,139}, {62,131}, {62,156}, {62,134}, {23,118}, {62,151}, + {23,109}, {62,137}, {62,145}, {62,118}, {62,144}, {62,161}, {62,113}, + {62,146}, {62,159}, {62,107}, {20,155}, {62,121}, {62,120}, {23,111}, + {62,124}, {62,126}, {62,141}, {62,158}, {23,114}, {23,115}, {62,112}, + {23,107}, {62,116}, {62,154}, {23,116}, {23,108}, {23,110}, {23,117}, + {62,160}, {62,147}, {62,142}, {62,123}, {62,122}, {23,106}, {62,108}, + {23,103}, {62,132}, {62,109}, {62,130}, {62,119}, {62,155}, {23,102}, + {62,115}, {62,111}, {62,149}, {62,110}, {26,32}, {66,147}, {66,130}, + {66,108}, {66,138}, {26,24}, {66,123}, {66,133}, {26,27}, {66,126}, + {26,25}, {66,111}, {66,141}, {66,110}, {66,129}, {66,109}, {66,127}, + {66,136}, {66,134}, {66,122}, {66,117}, {66,115}, {66,116}, {66,135}, + {66,146}, {66,124}, {26,26}, {66,119}, {66,139}, {26,29}, {66,118}, + {66,112}, {66,128}, {26,33}, {26,21}, {26,30}, {66,120}, {66,114}, + {26,23}, {62,148}, {26,22}, {66,131}, {26,20}, {26,35}, {26,28}, {66,132}, + {66,121}, {66,113}, {66,140}, {66,125}, {26,34}, {66,144}, {26,31}, + {66,143}, {66,137}, {66,142}, {66,145}, {70,51}, {70,52}, {70,39}, + {70,38}, {70,34}, {28,116}, {28,108}, {70,54}, {70,53}, {62,105}, {70,31}, + {70,35}, {70,29}, {70,48}, {70,33}, {70,55}, {70,26}, {70,24}, {70,36}, + {70,46}, {70,41}, {28,118}, {70,15}, {70,45}, {28,119}, {62,125}, {70,27}, + {70,18}, {70,21}, {70,59}, {70,28}, {70,19}, {70,17}, {70,14}, {28,112}, + {70,37}, {28,111}, {28,115}, {70,32}, {70,40}, {28,105}, {70,56}, {70,60}, + {28,107}, {70,23}, {70,43}, {70,47}, {70,20}, {70,57}, {28,114}, {28,113}, + {70,12}, {28,117}, {70,50}, {70,22}, {70,42}, {70,16}, {70,30}, {70,25}, + {28,109}, {28,110}, {70,44}, {70,61}, {70,58}, {70,49}, {70,13}, {28,106}, + {74,9}, {74,0}, {74,3}, {30,123}, {74,5}, {73,185}, {74,1}, {74,7}, + {30,120}, {30,124}, {30,118}, {73,187}, {74,12}, {74,6}, {73,188}, + {74,21}, {74,15}, {73,184}, {77,6}, {73,190}, {30,119}, {74,10}, {74,20}, + {30,127}, {74,17}, {73,189}, {74,4}, {74,8}, {74,2}, {74,22}, {74,19}, + {74,16}, {30,121}, {30,122}, {30,126}, {73,186}, {74,23}, {30,125}, + {74,13}, {74,11}, {74,14}, {77,19}, {77,0}, {77,5}, {77,18}, {77,4}, + {76,187}, {77,1}, {32,98}, {76,180}, {77,13}, {77,15}, {76,179}, {32,97}, + {77,17}, {77,9}, {32,104}, {77,16}, {77,2}, {32,106}, {76,185}, {74,18}, + {77,10}, {77,7}, {76,181}, {77,21}, {32,100}, {32,101}, {76,183}, {77,8}, + {77,20}, {77,11}, {76,189}, {32,103}, {32,99}, {77,12}, {76,190}, {77,22}, + {76,184}, {77,3}, {77,14}, {76,186}, {76,188}, {33,139}, {76,182}, + {32,105}, {33,132}, {32,62}, {32,102}, {33,136}, {79,115}, {79,105}, + {79,100}, {79,106}, {79,116}, {79,120}, {79,119}, {33,138}, {33,137}, + {79,107}, {79,121}, {79,110}, {79,102}, {79,104}, {79,103}, {79,109}, + {79,114}, {79,101}, {79,108}, {79,113}, {33,135}, {79,111}, {33,133}, + {79,112}, {33,131}, {33,134}, {81,149}, {79,117}, {34,130}, {81,141}, + {81,145}, {81,137}, {81,140}, {81,148}, {34,128}, {81,153}, {81,146}, + {81,138}, {81,154}, {81,147}, {34,131}, {34,132}, {81,151}, {81,139}, + {34,127}, {34,129}, {81,134}, {81,142}, {81,136}, {81,152}, {81,150}, + {81,135}, {81,143}, {83,126}, {34,133}, {81,144}, {35,103}, {35,105}, + {35,102}, {83,131}, {83,123}, {83,121}, {83,125}, {83,122}, {83,127}, + {83,129}, {35,106}, {35,108}, {83,128}, {35,109}, {35,107}, {83,130}, + {35,104}, {35,180}, {84,177}, {84,183}, {35,182}, {83,124}, {84,182}, + {84,189}, {84,180}, {84,187}, {84,186}, {83,120}, {84,181}, {79,118}, + {84,190}, {84,179}, {84,184}, {84,188}, {84,178}, {86,10}, {35,181}, + {84,185}, {86,180}, {86,11}, {86,9}, {86,7}, {86,8}, {86,12}, {36,153}, + {86,178}, {86,176}, {86,181}, {86,179}, {86,182}, {36,154}, {86,177}, + {87,124}, {88,5}, {88,6}, {88,7}, {88,135}, {88,125}, {41,15}, {9,170}, + {12,40}, {50,120}, {50,119}, {15,0}, {18,2}, {54,60}, {54,59}, {20,170}, + {23,120}, {23,119}, {23,121}, {66,148}, {70,62}, {74,24}, {74,26}, + {74,25}, {32,107}, {77,23}, {79,122}, {88,101}, {5,164}, {44,137}, + {44,138}, {44,136}, {44,135}, {9,171}, {47,105}, {47,103}, {47,102}, + {12,41}, {12,43}, {12,42}, {47,104}, {50,132}, {50,129}, {50,127}, + {15,1}, {50,130}, {15,6}, {50,124}, {50,139}, {50,141}, {50,125}, {15,3}, + {50,142}, {50,137}, {50,123}, {50,128}, {50,138}, {50,134}, {50,131}, + {15,8}, {50,140}, {50,126}, {50,135}, {50,121}, {15,7}, {15,4}, {50,133}, + {50,136}, {50,122}, {15,5}, {15,2}, {18,12}, {54,101}, {18,11}, {54,104}, + {54,107}, {18,8}, {18,6}, {54,62}, {54,105}, {54,103}, {54,100}, {54,108}, + {54,109}, {54,111}, {54,112}, {54,61}, {18,5}, {54,98}, {54,97}, {54,110}, + {18,7}, {54,99}, {18,9}, {18,4}, {54,102}, {18,13}, {18,10}, {54,106}, + {20,177}, {58,127}, {58,116}, {20,174}, {62,167}, {58,125}, {58,113}, + {20,172}, {58,118}, {20,175}, {58,122}, {58,120}, {20,178}, {20,171}, + {58,114}, {58,117}, {20,176}, {58,115}, {58,126}, {58,124}, {58,119}, + {58,121}, {58,123}, {20,173}, {62,168}, {62,174}, {62,164}, {62,170}, + {23,122}, {62,166}, {23,128}, {23,127}, {23,126}, {62,173}, {23,129}, + {23,130}, {62,163}, {62,176}, {23,131}, {23,125}, {23,124}, {62,172}, + {23,132}, {62,162}, {62,165}, {62,175}, {62,171}, {66,180}, {66,169}, + {23,123}, {26,42}, {66,157}, {66,178}, {66,158}, {26,37}, {66,155}, + {66,164}, {66,156}, {26,39}, {66,150}, {66,177}, {26,40}, {66,174}, + {66,175}, {66,151}, {26,45}, {66,166}, {66,160}, {66,167}, {66,154}, + {66,179}, {66,171}, {66,165}, {66,149}, {26,41}, {66,172}, {26,44}, + {66,176}, {66,170}, {26,38}, {66,168}, {66,162}, {26,36}, {66,153}, + {66,161}, {66,173}, {66,159}, {66,163}, {28,129}, {62,169}, {70,114}, + {70,123}, {70,113}, {70,109}, {70,106}, {28,130}, {70,104}, {26,43}, + {70,97}, {28,128}, {70,103}, {28,127}, {70,108}, {70,105}, {70,121}, + {70,116}, {70,110}, {70,115}, {28,123}, {70,107}, {70,126}, {70,98}, + {70,99}, {70,122}, {28,124}, {70,127}, {28,126}, {70,128}, {70,112}, + {66,152}, {70,118}, {70,111}, {70,120}, {70,117}, {70,102}, {28,121}, + {70,125}, {28,122}, {70,100}, {28,125}, {74,36}, {70,119}, {70,124}, + {74,33}, {28,120}, {30,128}, {74,43}, {74,39}, {74,37}, {74,32}, {74,47}, + {30,132}, {74,28}, {74,40}, {74,41}, {74,31}, {74,30}, {74,44}, {74,34}, + {74,29}, {74,35}, {74,46}, {74,27}, {74,45}, {74,42}, {30,130}, {30,129}, + {30,131}, {74,38}, {79,139}, {77,25}, {32,113}, {77,29}, {77,26}, {77,33}, + {77,39}, {77,28}, {77,48}, {32,110}, {77,42}, {77,31}, {77,43}, {77,38}, + {77,45}, {77,30}, {32,115}, {32,114}, {77,32}, {77,46}, {77,24}, {77,44}, + {32,108}, {77,36}, {77,35}, {77,40}, {77,27}, {32,112}, {32,116}, {77,34}, + {77,41}, {32,117}, {77,37}, {32,109}, {32,111}, {79,135}, {79,133}, + {79,140}, {79,137}, {79,141}, {79,126}, {79,134}, {79,145}, {77,47}, + {79,130}, {33,143}, {70,101}, {79,125}, {79,138}, {79,132}, {79,129}, + {79,124}, {79,123}, {79,144}, {79,128}, {79,127}, {33,141}, {79,136}, + {33,140}, {33,142}, {79,131}, {79,143}, {81,158}, {81,159}, {34,137}, + {81,156}, {34,134}, {81,164}, {34,138}, {81,166}, {81,155}, {79,142}, + {81,168}, {81,157}, {34,135}, {81,163}, {81,165}, {81,160}, {81,167}, + {81,162}, {81,161}, {34,136}, {83,133}, {83,134}, {83,136}, {35,110}, + {35,111}, {83,137}, {83,135}, {83,132}, {85,2}, {85,5}, {85,1}, {35,186}, + {85,3}, {35,185}, {35,184}, {35,183}, {85,4}, {86,17}, {86,15}, {86,14}, + {85,0}, {86,16}, {85,6}, {86,13}, {86,185}, {86,151}, {86,183}, {36,155}, + {86,184}, {86,186}, {87,127}, {36,186}, {87,126}, {87,125}, {36,187}, + {37,26}, {88,46}, {88,103}, {88,102}, {88,104}, {5,165}, {47,106}, + {50,143}, {50,144}, {58,128}, {85,7}, {87,128}, {5,166}, {12,44}, {47,107}, + {54,113}, {18,14}, {58,130}, {58,129}, {20,179}, {23,133}, {70,129}, + {28,131}, {28,132}, {30,133}, {36,188}, {5,167}, {47,108}, {9,173}, + {47,110}, {47,109}, {12,45}, {50,145}, {50,152}, {15,9}, {50,150}, + {50,148}, {50,155}, {50,146}, {50,147}, {15,10}, {15,14}, {50,156}, + {15,13}, {50,154}, {50,151}, {50,149}, {15,11}, {15,12}, {50,153}, + {18,16}, {54,114}, {18,21}, {54,130}, {18,20}, {54,132}, {54,120}, + {18,18}, {54,131}, {54,115}, {18,19}, {54,127}, {54,123}, {54,125}, + {54,119}, {54,126}, {18,15}, {54,122}, {54,121}, {54,117}, {54,128}, + {54,124}, {54,116}, {54,118}, {18,17}, {54,129}, {20,182}, {58,141}, + {58,137}, {58,139}, {58,134}, {58,133}, {58,131}, {58,138}, {58,140}, + {58,136}, {58,135}, {20,180}, {20,181}, {58,143}, {23,141}, {62,178}, + {62,184}, {62,179}, {62,180}, {62,185}, {23,143}, {23,135}, {23,142}, + {62,177}, {58,132}, {23,138}, {23,136}, {62,183}, {62,182}, {23,137}, + {23,139}, {62,181}, {23,134}, {23,140}, {66,182}, {26,52}, {67,2}, + {67,1}, {66,187}, {26,54}, {67,0}, {66,183}, {66,184}, {26,46}, {26,48}, + {66,189}, {66,181}, {26,50}, {26,49}, {66,185}, {66,190}, {66,188}, + {26,51}, {66,186}, {58,142}, {26,47}, {70,130}, {70,137}, {28,134}, + {70,141}, {28,138}, {70,133}, {70,131}, {70,140}, {28,133}, {70,139}, + {28,135}, {28,136}, {70,132}, {28,137}, {70,138}, {70,134}, {70,135}, + {70,136}, {26,53}, {74,48}, {74,60}, {30,138}, {74,55}, {74,57}, {30,136}, + {74,49}, {74,53}, {74,56}, {30,134}, {30,137}, {74,59}, {74,51}, {74,52}, + {74,58}, {74,50}, {74,54}, {30,135}, {77,50}, {77,49}, {32,119}, {77,55}, + {32,121}, {32,118}, {77,51}, {32,122}, {77,52}, {77,53}, {77,56}, {32,120}, + {79,150}, {79,153}, {79,147}, {79,149}, {79,148}, {79,151}, {79,152}, + {77,54}, {79,146}, {34,141}, {81,172}, {81,175}, {81,177}, {81,170}, + {81,171}, {81,174}, {81,176}, {34,142}, {34,140}, {34,139}, {81,173}, + {81,169}, {83,138}, {35,112}, {83,139}, {85,9}, {35,187}, {85,11}, + {35,188}, {85,8}, {85,10}, {36,104}, {86,18}, {36,103}, {86,189}, {86,188}, + {86,187}, {88,8}, {88,9}, {88,11}, {88,10}, {41,16}, {5,168}, {12,46}, + {54,133}, {20,183}, {62,186}, {33,144}, {81,178}, {7,99}, {18,23}, + {18,22}, {58,144}, {20,184}, {58,146}, {58,145}, {62,187}, {23,144}, + {67,3}, {67,6}, {67,5}, {67,4}, {70,142}, {70,144}, {70,143}, {30,140}, + {30,139}, {32,123}, {77,57}, {77,59}, {77,58}, {33,145}, {81,180}, + {81,179}, {83,140}, {35,113}, {35,189}, {86,20}, {86,19}, {37,27}, + {7,100}, {47,111}, {12,47}, {54,136}, {54,134}, {54,135}, {58,148}, + {58,149}, {63,3}, {58,147}, {62,188}, {63,1}, {63,0}, {63,2}, {23,145}, + {62,190}, {62,189}, {63,4}, {67,9}, {67,7}, {67,8}, {70,147}, {70,145}, + {70,146}, {74,61}, {77,60}, {77,61}, {33,146}, {81,181}, {83,141}, + {35,114}, {85,12}, {86,21}, {36,105}, {86,190}, {88,12}, {7,101}, {12,49}, + {12,50}, {47,112}, {47,113}, {12,48}, {15,20}, {15,18}, {15,17}, {15,24}, + {15,16}, {15,25}, {50,157}, {15,22}, {15,19}, {15,23}, {15,21}, {15,15}, + {18,31}, {18,25}, {54,140}, {18,30}, {18,32}, {18,26}, {18,27}, {54,138}, + {18,24}, {54,139}, {18,29}, {54,137}, {18,28}, {21,4}, {21,6}, {58,152}, + {21,5}, {20,185}, {20,189}, {23,164}, {63,9}, {58,154}, {20,190}, {58,157}, + {58,158}, {21,3}, {58,160}, {58,162}, {58,163}, {58,151}, {58,150}, + {58,164}, {21,2}, {58,161}, {58,159}, {21,0}, {20,187}, {21,7}, {58,155}, + {58,156}, {58,153}, {21,1}, {20,188}, {20,186}, {63,8}, {23,159}, {23,154}, + {23,149}, {23,165}, {23,150}, {23,146}, {23,161}, {23,158}, {23,160}, + {23,151}, {23,156}, {23,147}, {23,148}, {63,16}, {63,13}, {63,5}, {63,10}, + {23,162}, {63,17}, {23,163}, {23,153}, {63,7}, {63,15}, {63,11}, {63,14}, + {63,12}, {23,157}, {63,6}, {23,152}, {67,12}, {26,56}, {26,59}, {67,14}, + {26,101}, {67,13}, {26,61}, {28,143}, {67,15}, {26,100}, {67,11}, {26,102}, + {26,57}, {23,155}, {26,60}, {26,58}, {26,62}, {26,98}, {26,55}, {26,103}, + {26,99}, {26,97}, {67,10}, {28,150}, {28,146}, {28,153}, {70,150}, + {28,154}, {70,162}, {70,155}, {28,139}, {70,163}, {70,157}, {28,149}, + {70,158}, {28,148}, {70,161}, {28,142}, {70,159}, {70,149}, {28,141}, + {74,106}, {28,147}, {28,144}, {28,152}, {70,148}, {70,152}, {28,140}, + {70,151}, {70,153}, {70,154}, {28,151}, {70,156}, {70,160}, {70,164}, + {28,155}, {30,146}, {74,101}, {74,107}, {74,104}, {74,62}, {74,108}, + {74,97}, {74,103}, {30,141}, {30,147}, {74,109}, {30,143}, {30,153}, + {30,148}, {74,111}, {74,105}, {30,144}, {74,98}, {30,154}, {74,99}, + {74,100}, {30,155}, {30,152}, {28,145}, {30,142}, {74,112}, {30,156}, + {30,149}, {74,110}, {30,145}, {30,150}, {30,151}, {32,131}, {77,100}, + {77,109}, {77,106}, {77,108}, {32,128}, {77,101}, {77,107}, {32,124}, + {77,103}, {32,132}, {77,99}, {77,104}, {77,111}, {74,102}, {77,105}, + {77,98}, {32,125}, {77,97}, {32,126}, {77,112}, {32,127}, {77,110}, + {32,130}, {77,62}, {32,129}, {77,102}, {79,156}, {79,170}, {79,165}, + {79,167}, {79,155}, {33,147}, {79,154}, {33,150}, {33,149}, {79,169}, + {79,161}, {79,158}, {79,164}, {79,157}, {79,159}, {79,168}, {79,166}, + {33,148}, {79,173}, {79,171}, {79,162}, {79,172}, {79,163}, {81,185}, + {34,143}, {82,1}, {85,15}, {34,150}, {79,160}, {81,183}, {34,146}, + {81,184}, {81,189}, {34,148}, {34,149}, {81,182}, {82,0}, {82,2}, {81,186}, + {81,188}, {81,190}, {81,187}, {82,3}, {34,145}, {34,151}, {34,147}, + {34,144}, {83,144}, {35,119}, {83,142}, {83,146}, {83,147}, {35,117}, + {83,148}, {83,145}, {83,143}, {35,120}, {35,116}, {83,149}, {35,118}, + {35,115}, {35,190}, {36,0}, {85,14}, {85,13}, {85,16}, {85,17}, {36,1}, + {86,22}, {86,27}, {36,106}, {86,24}, {86,23}, {86,26}, {86,25}, {87,3}, + {36,156}, {87,2}, {87,0}, {87,1}, {36,190}, {36,189}, {87,129}, {87,130}, + {37,0}, {88,13}, {88,14}, {37,39}, {37,45}, {88,105}, {88,136}, {7,102}, + {54,141}, {54,142}, {63,18}, {67,16}, {70,165}, {32,134}, {32,133}, + {79,174}, {82,4}, {87,4}, {7,103}, {50,158}, {15,26}, {18,33}, {63,20}, + {63,19}, {28,156}, {70,166}, {28,157}, {77,113}, {33,151}, {37,54}, + {7,104}, {44,139}, {50,159}, {18,34}, {54,143}, {54,144}, {58,165}, + {21,8}, {23,166}, {63,22}, {63,21}, {63,23}, {67,17}, {67,18}, {26,104}, + {30,157}, {28,158}, {30,158}, {77,117}, {77,114}, {77,116}, {77,115}, + {32,135}, {79,175}, {82,6}, {82,5}, {42,100}, {15,28}, {15,27}, {50,160}, + {54,145}, {58,167}, {58,166}, {21,9}, {63,25}, {63,26}, {63,24}, {23,168}, + {23,167}, {26,106}, {26,105}, {70,167}, {74,115}, {74,113}, {74,114}, + {30,159}, {77,119}, {77,118}, {79,178}, {79,177}, {79,176}, {82,7}, + {88,106}, {7,105}, {12,51}, {12,52}, {15,29}, {15,30}, {50,162}, {50,161}, + {54,146}, {18,40}, {18,38}, {18,35}, {18,39}, {18,37}, {18,36}, {21,10}, + {58,170}, {23,173}, {21,12}, {21,17}, {58,172}, {21,19}, {21,18}, {21,21}, + {58,171}, {58,168}, {21,15}, {21,11}, {21,13}, {58,169}, {21,20}, {21,16}, + {21,14}, {23,175}, {23,174}, {23,172}, {23,176}, {23,170}, {23,171}, + {23,169}, {63,27}, {67,20}, {26,108}, {26,109}, {26,107}, {67,19}, + {67,21}, {70,170}, {70,172}, {28,167}, {70,173}, {28,160}, {70,169}, + {28,159}, {28,169}, {28,165}, {28,166}, {28,162}, {70,168}, {28,161}, + {70,174}, {70,171}, {28,168}, {28,163}, {28,164}, {74,117}, {74,119}, + {74,118}, {74,120}, {30,160}, {74,116}, {32,139}, {77,120}, {32,136}, + {32,140}, {32,138}, {32,137}, {79,179}, {79,182}, {79,181}, {79,180}, + {33,152}, {82,8}, {82,9}, {34,152}, {82,10}, {34,153}, {35,122}, {35,121}, + {85,18}, {36,2}, {85,19}, {86,28}, {36,107}, {36,108}, {87,5}, {37,2}, + {7,106}, {18,42}, {18,41}, {63,28}, {63,29}, {26,110}, {74,121}, {28,170}, + {74,122}, {77,121}, {7,107}, {47,114}, {12,54}, {12,53}, {50,163}, + {15,31}, {50,164}, {54,149}, {54,148}, {54,147}, {58,174}, {21,24}, + {58,173}, {21,23}, {58,175}, {21,22}, {63,31}, {63,34}, {63,32}, {63,33}, + {63,37}, {63,30}, {63,38}, {63,35}, {63,36}, {26,112}, {67,22}, {26,111}, + {70,178}, {70,176}, {28,171}, {70,175}, {70,177}, {28,172}, {74,123}, + {74,124}, {32,141}, {82,12}, {82,14}, {82,11}, {82,13}, {83,150}, {85,20}, + {88,47}, {7,108}, {12,55}, {50,165}, {50,167}, {50,166}, {54,152}, + {18,44}, {54,150}, {18,43}, {54,153}, {54,154}, {54,151}, {58,187}, + {21,32}, {58,179}, {58,185}, {21,27}, {21,30}, {58,178}, {21,25}, {58,182}, + {63,44}, {21,29}, {58,177}, {58,183}, {58,180}, {58,186}, {58,176}, + {58,184}, {21,28}, {21,31}, {58,181}, {21,26}, {23,178}, {63,40}, {23,177}, + {63,47}, {63,46}, {23,184}, {23,185}, {63,48}, {23,179}, {63,45}, {23,183}, + {63,50}, {63,41}, {63,43}, {23,180}, {63,39}, {63,42}, {63,49}, {23,181}, + {63,51}, {23,182}, {26,113}, {67,27}, {67,33}, {67,25}, {67,34}, {67,24}, + {67,29}, {67,35}, {67,32}, {67,31}, {67,30}, {67,23}, {67,28}, {67,26}, + {28,177}, {28,174}, {70,187}, {71,1}, {71,3}, {71,0}, {70,184}, {70,186}, + {71,5}, {71,2}, {70,188}, {71,6}, {70,185}, {71,4}, {28,175}, {28,181}, + {28,179}, {70,179}, {28,180}, {28,176}, {70,180}, {70,182}, {70,181}, + {70,189}, {70,190}, {28,178}, {28,173}, {70,183}, {74,134}, {30,162}, + {74,125}, {30,163}, {30,166}, {74,130}, {74,127}, {30,165}, {74,131}, + {74,132}, {74,126}, {74,135}, {74,128}, {74,133}, {30,164}, {30,161}, + {74,129}, {77,127}, {32,144}, {32,142}, {32,145}, {32,143}, {77,126}, + {77,123}, {77,122}, {77,125}, {77,124}, {80,5}, {33,158}, {79,187}, + {79,186}, {33,153}, {80,1}, {80,0}, {79,183}, {80,3}, {79,188}, {33,157}, + {79,185}, {80,2}, {79,184}, {33,154}, {33,156}, {79,189}, {33,155}, + {79,190}, {80,4}, {82,18}, {34,158}, {82,15}, {82,19}, {34,155}, {82,17}, + {34,160}, {34,157}, {82,16}, {34,159}, {82,20}, {34,154}, {35,124}, + {35,126}, {83,153}, {35,125}, {83,151}, {34,156}, {83,152}, {35,123}, + {36,3}, {36,5}, {85,22}, {36,4}, {85,21}, {86,33}, {36,109}, {86,32}, + {36,110}, {86,30}, {86,29}, {86,34}, {86,35}, {87,6}, {86,31}, {87,134}, + {87,131}, {87,132}, {87,133}, {37,28}, {88,17}, {88,16}, {88,15}, {88,48}, + {88,126}, {88,107}, {37,46}, {7,109}, {15,32}, {23,186}, {28,182}, + {74,136}, {33,159}, {82,21}, {88,108}, {7,110}, {9,174}, {12,57}, {12,56}, + {15,35}, {50,168}, {15,33}, {50,169}, {15,34}, {54,159}, {54,155}, + {18,45}, {54,158}, {54,157}, {54,156}, {18,46}, {54,160}, {54,161}, + {59,3}, {59,1}, {59,5}, {59,6}, {59,12}, {59,8}, {59,10}, {59,2}, {58,188}, + {59,9}, {59,11}, {59,4}, {59,7}, {58,189}, {21,34}, {59,0}, {58,190}, + {21,33}, {21,35}, {23,189}, {63,53}, {63,55}, {63,54}, {63,59}, {23,187}, + {63,56}, {63,52}, {63,57}, {63,58}, {23,188}, {23,190}, {63,60}, {67,39}, + {67,38}, {67,36}, {67,37}, {26,115}, {26,117}, {26,114}, {26,116}, + {71,13}, {71,14}, {71,9}, {71,10}, {28,184}, {28,189}, {28,183}, {28,190}, + {28,185}, {71,11}, {71,12}, {71,8}, {29,0}, {28,187}, {28,186}, {28,188}, + {71,7}, {74,138}, {30,168}, {74,140}, {30,170}, {74,143}, {74,139}, + {74,137}, {74,142}, {30,169}, {74,141}, {30,167}, {32,147}, {32,150}, + {77,129}, {32,148}, {77,128}, {32,146}, {32,149}, {80,6}, {80,7}, {80,8}, + {33,160}, {80,9}, {33,161}, {34,162}, {82,24}, {82,25}, {82,23}, {82,22}, + {82,26}, {34,161}, {83,157}, {83,155}, {83,156}, {83,158}, {83,154}, + {83,159}, {85,24}, {85,25}, {85,23}, {36,6}, {86,36}, {36,111}, {86,37}, + {87,8}, {87,7}, {7,111}, {21,36}, {24,0}, {26,118}, {30,172}, {30,171}, + {34,163}, {35,60}, {36,7}, {7,112}, {15,36}, {24,1}, {82,27}, {42,102}, + {7,113}, {7,116}, {7,115}, {7,114}, {42,101}, {44,141}, {44,143}, {9,175}, + {9,177}, {44,140}, {44,142}, {9,176}, {44,145}, {44,144}, {44,146}, + {47,118}, {47,116}, {12,60}, {47,115}, {12,99}, {12,62}, {12,59}, {12,100}, + {12,61}, {12,98}, {12,97}, {47,117}, {12,58}, {15,42}, {50,171}, {50,177}, + {15,39}, {15,46}, {15,41}, {50,174}, {50,176}, {15,44}, {50,170}, {50,173}, + {15,40}, {15,37}, {50,172}, {15,43}, {50,175}, {15,45}, {15,38}, {54,163}, + {54,166}, {18,48}, {18,58}, {18,54}, {54,164}, {18,62}, {18,55}, {18,60}, + {18,50}, {18,47}, {18,49}, {18,61}, {54,165}, {18,53}, {18,56}, {18,52}, + {18,57}, {54,167}, {18,59}, {18,51}, {54,162}, {59,13}, {21,37}, {59,15}, + {21,39}, {21,41}, {59,14}, {21,38}, {21,42}, {21,40}, {24,7}, {63,99}, + {24,15}, {63,62}, {24,16}, {24,5}, {63,97}, {24,10}, {63,98}, {24,3}, + {24,2}, {24,13}, {24,12}, {24,11}, {24,9}, {24,14}, {63,61}, {24,4}, + {24,6}, {24,8}, {26,120}, {26,123}, {26,127}, {26,121}, {26,126}, {26,124}, + {26,119}, {26,125}, {26,122}, {71,18}, {29,3}, {29,1}, {71,19}, {29,4}, + {29,2}, {71,17}, {71,16}, {30,176}, {71,15}, {30,174}, {30,173}, {74,144}, + {29,5}, {30,175}, {74,145}, {30,178}, {74,146}, {30,177}, {32,152}, + {77,131}, {32,151}, {32,156}, {32,154}, {32,155}, {33,163}, {32,153}, + {77,130}, {74,147}, {33,162}, {33,164}, {34,164}, {34,165}, {83,160}, + {36,158}, {36,157}, {7,118}, {41,21}, {15,47}, {41,18}, {41,19}, {41,17}, + {41,20}, {42,106}, {42,103}, {42,108}, {42,104}, {7,119}, {7,122}, + {42,105}, {7,121}, {42,107}, {7,120}, {44,149}, {44,151}, {9,180}, + {44,147}, {44,150}, {44,148}, {9,178}, {9,181}, {9,179}, {47,120}, + {47,124}, {47,121}, {12,103}, {12,104}, {47,123}, {47,125}, {47,127}, + {12,101}, {47,126}, {12,102}, {54,174}, {47,122}, {50,178}, {50,187}, + {50,185}, {50,180}, {50,181}, {50,186}, {50,188}, {15,49}, {50,183}, + {50,179}, {15,48}, {15,50}, {50,182}, {50,189}, {50,184}, {18,97}, + {54,177}, {54,169}, {54,175}, {54,176}, {18,98}, {54,168}, {54,170}, + {47,119}, {54,172}, {54,173}, {54,171}, {21,44}, {59,22}, {74,148}, + {59,23}, {59,20}, {18,99}, {21,46}, {59,19}, {59,25}, {59,24}, {21,43}, + {59,28}, {59,18}, {59,27}, {59,16}, {59,26}, {59,21}, {21,45}, {63,106}, + {63,101}, {63,107}, {63,102}, {63,100}, {63,103}, {24,17}, {63,105}, + {63,104}, {24,18}, {26,129}, {26,128}, {67,46}, {67,49}, {67,41}, {67,45}, + {26,130}, {67,44}, {67,42}, {67,48}, {67,43}, {67,40}, {67,47}, {71,25}, + {29,8}, {80,10}, {71,22}, {71,23}, {71,21}, {59,17}, {29,7}, {71,26}, + {71,20}, {29,6}, {29,9}, {71,24}, {74,149}, {30,179}, {74,150}, {74,151}, + {77,132}, {32,157}, {80,11}, {80,12}, {80,13}, {82,29}, {82,28}, {83,162}, + {83,161}, {85,27}, {85,28}, {85,26}, {86,38}, {36,112}, {7,123}, {12,106}, + {12,105}, {15,53}, {15,52}, {51,0}, {51,1}, {50,190}, {15,51}, {54,181}, + {54,182}, {54,178}, {18,100}, {54,179}, {54,180}, {59,31}, {59,33}, + {59,29}, {59,32}, {21,47}, {59,30}, {21,48}, {60,51}, {24,21}, {24,20}, + {24,19}, {63,108}, {63,109}, {67,51}, {67,53}, {26,134}, {26,131}, + {26,133}, {26,132}, {67,52}, {67,50}, {71,33}, {71,30}, {71,31}, {29,13}, + {71,32}, {71,27}, {71,28}, {29,10}, {29,11}, {71,29}, {29,12}, {74,155}, + {74,156}, {74,153}, {74,154}, {30,180}, {74,152}, {77,136}, {77,133}, + {77,135}, {32,160}, {77,139}, {32,159}, {77,137}, {77,140}, {77,138}, + {77,134}, {32,158}, {80,15}, {80,16}, {80,14}, {80,18}, {33,165}, {33,166}, + {82,31}, {34,167}, {80,17}, {82,30}, {34,166}, {83,165}, {83,166}, + {35,127}, {83,164}, {83,163}, {85,29}, {36,8}, {87,9}, {87,136}, {87,135}, + {37,3}, {37,29}, {87,137}, {88,49}, {37,47}, {7,124}, {9,182}, {24,22}, + {35,128}, {7,125}, {12,107}, {18,101}, {21,49}, {33,167}, {9,183}, + {47,129}, {47,128}, {51,2}, {15,56}, {15,54}, {15,58}, {51,4}, {15,57}, + {15,55}, {51,3}, {18,104}, {54,188}, {18,103}, {18,105}, {55,2}, {18,107}, + {54,190}, {55,0}, {54,183}, {18,106}, {55,3}, {54,185}, {54,186}, {54,184}, + {18,102}, {55,1}, {54,187}, {54,189}, {59,45}, {59,44}, {59,42}, {59,34}, + {59,49}, {59,37}, {59,47}, {59,54}, {59,46}, {21,57}, {21,53}, {59,35}, + {59,41}, {21,55}, {59,40}, {21,56}, {21,58}, {59,43}, {21,50}, {21,51}, + {59,55}, {59,53}, {59,52}, {59,38}, {59,50}, {21,54}, {21,52}, {59,51}, + {59,36}, {59,39}, {59,48}, {67,122}, {63,119}, {63,112}, {63,131}, + {63,140}, {63,115}, {24,33}, {63,128}, {24,23}, {24,25}, {24,37}, {63,113}, + {24,26}, {24,28}, {24,38}, {24,27}, {24,36}, {63,121}, {63,110}, {24,34}, + {63,120}, {24,30}, {63,138}, {24,35}, {63,136}, {63,124}, {63,134}, + {24,32}, {63,111}, {63,137}, {63,132}, {63,139}, {24,24}, {24,39}, + {24,29}, {63,117}, {63,125}, {63,129}, {63,133}, {24,31}, {63,116}, + {63,114}, {63,126}, {63,123}, {63,122}, {63,127}, {63,130}, {63,135}, + {67,56}, {26,135}, {67,100}, {67,58}, {26,140}, {26,144}, {67,109}, + {67,117}, {67,102}, {26,136}, {67,106}, {63,118}, {26,137}, {67,113}, + {67,118}, {67,110}, {67,112}, {67,121}, {67,114}, {67,62}, {67,105}, + {26,145}, {26,141}, {67,60}, {67,107}, {26,139}, {67,101}, {26,138}, + {67,115}, {67,98}, {67,57}, {26,142}, {67,120}, {67,59}, {67,111}, + {67,108}, {67,103}, {67,55}, {67,54}, {67,97}, {67,116}, {26,143}, + {67,119}, {67,61}, {67,99}, {29,18}, {29,26}, {29,21}, {71,100}, {71,97}, + {71,39}, {29,16}, {29,15}, {29,22}, {71,37}, {29,20}, {71,49}, {71,35}, + {71,36}, {29,14}, {71,99}, {29,24}, {71,52}, {71,57}, {71,51}, {74,174}, + {71,47}, {71,55}, {71,53}, {71,40}, {71,34}, {71,61}, {29,23}, {71,62}, + {71,56}, {71,45}, {71,43}, {71,38}, {71,46}, {71,59}, {71,42}, {71,58}, + {71,98}, {29,19}, {71,54}, {71,60}, {71,50}, {71,44}, {29,17}, {67,104}, + {71,48}, {29,25}, {71,41}, {74,180}, {30,183}, {74,179}, {74,176}, + {75,4}, {30,187}, {75,1}, {74,184}, {75,3}, {74,169}, {74,182}, {30,189}, + {74,161}, {74,159}, {75,2}, {75,0}, {74,190}, {74,173}, {74,172}, {74,162}, + {31,0}, {74,168}, {74,178}, {74,189}, {31,3}, {75,5}, {32,168}, {31,5}, + {30,190}, {74,166}, {74,175}, {74,158}, {74,160}, {30,181}, {31,2}, + {30,186}, {74,167}, {74,183}, {74,177}, {31,1}, {74,157}, {32,163}, + {74,185}, {74,188}, {30,188}, {74,171}, {31,4}, {30,185}, {30,184}, + {74,181}, {74,187}, {30,182}, {74,164}, {74,186}, {74,165}, {74,170}, + {77,146}, {77,151}, {32,165}, {32,167}, {77,157}, {32,161}, {77,172}, + {77,163}, {77,152}, {77,153}, {77,162}, {32,174}, {77,161}, {77,145}, + {77,160}, {77,148}, {77,173}, {32,173}, {32,171}, {77,149}, {77,168}, + {77,154}, {77,167}, {77,169}, {77,144}, {32,166}, {77,170}, {77,158}, + {32,170}, {77,155}, {32,172}, {77,164}, {32,164}, {77,150}, {77,165}, + {77,159}, {74,163}, {77,166}, {77,147}, {32,169}, {77,171}, {32,162}, + {77,142}, {80,32}, {80,25}, {33,169}, {80,20}, {80,35}, {80,27}, {77,156}, + {80,37}, {80,21}, {33,168}, {80,31}, {33,170}, {33,178}, {33,176}, + {80,33}, {33,177}, {80,23}, {80,24}, {80,29}, {80,34}, {77,141}, {33,171}, + {80,42}, {80,39}, {80,43}, {80,30}, {80,26}, {80,40}, {82,42}, {80,28}, + {33,174}, {33,173}, {77,143}, {33,175}, {80,36}, {80,38}, {33,172}, + {80,41}, {80,19}, {80,22}, {82,51}, {82,35}, {34,171}, {82,49}, {82,33}, + {34,172}, {82,44}, {82,40}, {34,177}, {82,50}, {82,34}, {82,37}, {34,169}, + {82,52}, {82,45}, {82,48}, {34,175}, {34,180}, {34,178}, {82,41}, {82,36}, + {34,173}, {34,174}, {82,32}, {34,170}, {34,168}, {34,176}, {82,47}, + {34,179}, {82,43}, {82,53}, {34,181}, {82,39}, {82,46}, {83,179}, {84,2}, + {83,181}, {83,188}, {82,38}, {83,186}, {83,169}, {84,0}, {35,131}, + {83,173}, {83,190}, {83,180}, {35,130}, {84,4}, {83,182}, {83,187}, + {83,189}, {83,167}, {84,1}, {83,178}, {83,183}, {83,171}, {83,175}, + {84,3}, {83,185}, {83,168}, {83,172}, {83,174}, {83,184}, {35,129}, + {83,177}, {83,170}, {83,176}, {85,33}, {85,38}, {36,15}, {85,40}, {36,9}, + {85,36}, {85,42}, {36,14}, {36,10}, {36,11}, {85,32}, {85,39}, {36,13}, + {85,37}, {36,12}, {85,31}, {85,35}, {85,34}, {85,30}, {85,41}, {36,113}, + {86,45}, {86,48}, {86,44}, {86,46}, {86,47}, {86,41}, {86,42}, {86,39}, + {86,43}, {86,40}, {36,114}, {36,115}, {87,11}, {87,13}, {87,12}, {87,14}, + {36,160}, {87,10}, {36,159}, {36,161}, {87,139}, {87,140}, {37,4}, + {87,138}, {88,19}, {88,18}, {88,20}, {37,31}, {88,21}, {37,30}, {88,22}, + {88,50}, {88,53}, {88,52}, {37,40}, {88,51}, {37,50}, {37,48}, {37,49}, + {37,55}, {88,128}, {88,129}, {88,127}, {88,137}, {9,184}, {55,4}, {59,56}, + {71,101}, {82,54}, {9,185}, {12,108}, {15,59}, {55,5}, {55,6}, {18,108}, + {21,61}, {59,58}, {59,57}, {21,99}, {21,60}, {59,59}, {21,62}, {21,98}, + {21,97}, {21,59}, {24,40}, {63,144}, {63,142}, {63,143}, {63,141}, + {26,146}, {26,149}, {26,151}, {26,150}, {26,147}, {26,148}, {71,103}, + {71,102}, {29,27}, {71,104}, {71,105}, {29,28}, {75,13}, {75,11}, {77,179}, + {75,9}, {75,10}, {31,6}, {75,6}, {75,14}, {75,8}, {75,12}, {77,175}, + {77,177}, {77,178}, {32,179}, {77,174}, {32,178}, {77,176}, {32,175}, + {32,176}, {32,177}, {75,7}, {33,181}, {80,46}, {80,44}, {80,45}, {33,179}, + {33,182}, {33,180}, {82,55}, {82,56}, {34,182}, {84,5}, {84,7}, {84,6}, + {35,132}, {36,16}, {85,45}, {85,44}, {85,43}, {9,186}, {40,106}, {41,24}, + {5,169}, {41,22}, {41,25}, {41,23}, {42,110}, {7,129}, {7,130}, {42,112}, + {7,127}, {42,111}, {42,109}, {7,128}, {7,126}, {44,152}, {44,155}, + {9,189}, {44,154}, {44,153}, {9,188}, {9,187}, {10,0}, {44,156}, {9,190}, + {47,134}, {12,110}, {12,111}, {12,112}, {47,135}, {47,131}, {12,109}, + {47,132}, {47,133}, {47,130}, {15,100}, {15,97}, {51,5}, {15,98}, {15,101}, + {51,6}, {15,62}, {15,60}, {15,61}, {15,99}, {18,109}, {55,9}, {18,117}, + {55,8}, {55,11}, {18,113}, {55,10}, {21,107}, {18,111}, {18,114}, {18,110}, + {18,115}, {18,116}, {18,112}, {55,7}, {21,103}, {59,61}, {59,99}, {59,98}, + {21,108}, {21,104}, {21,105}, {59,60}, {59,62}, {59,97}, {21,100}, + {21,102}, {21,106}, {21,101}, {63,147}, {63,145}, {63,146}, {24,42}, + {24,43}, {63,148}, {24,41}, {26,152}, {26,154}, {26,153}, {67,123}, + {67,124}, {71,107}, {71,106}, {31,7}, {31,8}, {75,15}, {31,9}, {77,182}, + {77,180}, {77,181}, {32,180}, {80,47}, {34,183}, {32,181}, {10,1}, + {15,102}, {51,7}, {55,12}, {18,118}, {21,109}, {59,100}, {59,102}, + {21,111}, {21,110}, {21,112}, {21,113}, {59,101}, {24,46}, {24,47}, + {24,45}, {26,155}, {24,44}, {63,149}, {26,156}, {71,108}, {75,16}, + {31,10}, {32,182}, {80,48}, {80,52}, {33,185}, {80,49}, {33,186}, {33,184}, + {80,53}, {33,187}, {80,51}, {82,57}, {33,183}, {34,184}, {87,141}, + {10,2}, {18,120}, {18,119}, {21,114}, {59,104}, {59,103}, {21,115}, + {63,153}, {24,51}, {24,48}, {63,152}, {24,50}, {63,150}, {24,49}, {63,151}, + {67,125}, {26,157}, {71,111}, {29,29}, {71,109}, {29,30}, {29,31}, + {71,110}, {29,32}, {75,17}, {31,14}, {31,11}, {31,16}, {75,19}, {31,12}, + {75,18}, {31,15}, {31,13}, {77,185}, {77,187}, {32,183}, {77,186}, + {32,184}, {77,184}, {77,183}, {80,55}, {80,54}, {33,188}, {80,56}, + {82,62}, {34,186}, {82,61}, {82,58}, {34,185}, {82,59}, {82,60}, {84,8}, + {84,9}, {35,133}, {36,19}, {85,46}, {36,17}, {36,18}, {85,47}, {36,116}, + {36,117}, {86,49}, {37,5}, {87,143}, {37,7}, {87,142}, {87,144}, {37,6}, + {88,23}, {88,109}, {10,3}, {24,52}, {67,126}, {71,112}, {31,17}, {31,18}, + {10,4}, {29,33}, {34,187}, {12,113}, {31,19}, {36,162}, {12,114}, {55,13}, + {59,105}, {59,107}, {59,106}, {63,157}, {63,154}, {24,53}, {24,54}, + {63,155}, {63,156}, {67,128}, {67,133}, {26,158}, {67,127}, {67,129}, + {67,136}, {67,131}, {67,135}, {67,132}, {67,130}, {67,134}, {26,159}, + {71,115}, {71,113}, {29,35}, {29,34}, {71,114}, {29,36}, {75,22}, {75,21}, + {31,20}, {75,20}, {77,188}, {77,190}, {78,1}, {78,0}, {32,185}, {77,189}, + {80,97}, {33,189}, {80,61}, {80,98}, {33,190}, {80,59}, {80,62}, {80,60}, + {80,57}, {34,0}, {80,58}, {82,97}, {82,99}, {82,98}, {84,10}, {84,11}, + {85,48}, {36,119}, {36,118}, {87,15}, {87,16}, {37,8}, {87,145}, {37,41}, + {12,115}, {21,116}, {67,138}, {67,137}, {71,117}, {71,116}, {32,186}, + {78,3}, {78,2}, {80,101}, {80,99}, {80,102}, {80,100}, {34,188}, {82,100}, + {82,101}, {82,102}, {85,49}, {86,50}, {87,146}, {12,116}, {75,23}, + {78,4}, {12,117}, {26,160}, {75,24}, {34,1}, {80,103}, {34,189}, {84,12}, + {84,13}, {36,20}, {87,17}, {12,118}, {18,123}, {18,124}, {55,14}, {21,117}, + {21,118}, {59,108}, {21,119}, {24,58}, {24,60}, {63,159}, {63,160}, + {63,158}, {24,55}, {24,56}, {24,59}, {24,57}, {67,139}, {26,161}, {26,162}, + {71,124}, {29,39}, {71,119}, {71,118}, {71,123}, {29,37}, {31,27}, + {71,120}, {71,125}, {71,122}, {71,121}, {29,38}, {31,25}, {75,26}, + {31,21}, {75,27}, {75,25}, {31,24}, {31,22}, {31,26}, {31,23}, {78,5}, + {78,10}, {78,6}, {78,9}, {32,187}, {76,148}, {78,8}, {78,7}, {34,4}, + {34,2}, {34,5}, {34,3}, {80,104}, {80,105}, {80,106}, {34,6}, {82,106}, + {35,0}, {82,104}, {35,1}, {82,103}, {82,105}, {34,190}, {84,17}, {84,14}, + {84,15}, {84,16}, {85,50}, {36,22}, {36,21}, {86,52}, {86,51}, {36,120}, + {36,163}, {37,9}, {37,32}, {88,24}, {88,110}, {88,111}, {12,119}, {59,109}, + {63,161}, {67,140}, {67,141}, {26,163}, {26,164}, {71,126}, {29,40}, + {32,188}, {80,107}, {34,7}, {82,109}, {35,2}, {82,108}, {82,110}, {82,107}, + {85,53}, {84,18}, {84,19}, {35,134}, {85,52}, {85,51}, {86,53}, {88,112}, + {12,120}, {12,121}, {15,103}, {51,8}, {55,15}, {21,120}, {21,123}, + {21,121}, {59,110}, {21,125}, {21,122}, {21,124}, {24,62}, {63,162}, + {63,163}, {71,128}, {24,61}, {24,97}, {24,98}, {67,143}, {67,142}, + {26,165}, {26,166}, {67,144}, {71,127}, {26,168}, {29,41}, {26,167}, + {31,28}, {71,129}, {29,43}, {29,42}, {71,130}, {71,133}, {71,131}, + {71,132}, {29,44}, {31,33}, {31,31}, {31,30}, {75,29}, {31,32}, {75,28}, + {78,11}, {75,30}, {31,29}, {75,31}, {78,14}, {78,12}, {78,13}, {78,18}, + {34,11}, {78,17}, {78,20}, {78,19}, {78,16}, {78,15}, {32,189}, {80,110}, + {80,109}, {34,10}, {34,8}, {34,9}, {80,108}, {82,113}, {35,3}, {82,112}, + {82,111}, {35,4}, {84,24}, {84,23}, {84,21}, {84,20}, {35,136}, {35,135}, + {84,25}, {86,54}, {36,121}, {85,55}, {36,23}, {85,54}, {84,22}, {86,55}, + {36,164}, {37,33}, {88,25}, {88,113}, {12,122}, {55,16}, {78,21}, {12,123}, + {67,146}, {67,145}, {75,32}, {78,23}, {78,22}, {34,12}, {82,114}, {82,115}, + {35,137}, {88,114}, {15,104}, {21,127}, {21,126}, {63,164}, {63,166}, + {24,100}, {63,165}, {24,99}, {24,101}, {63,167}, {67,148}, {67,150}, + {67,149}, {67,152}, {26,169}, {67,151}, {67,147}, {67,153}, {71,140}, + {71,143}, {71,145}, {71,135}, {71,139}, {71,136}, {29,46}, {29,49}, + {29,51}, {71,137}, {71,138}, {29,50}, {71,141}, {71,144}, {71,142}, + {29,52}, {29,48}, {71,134}, {29,45}, {29,47}, {31,35}, {75,38}, {75,36}, + {75,35}, {75,41}, {75,40}, {75,39}, {75,34}, {31,34}, {75,33}, {75,37}, + {31,36}, {78,26}, {78,30}, {78,27}, {78,29}, {78,28}, {78,25}, {78,31}, + {78,34}, {78,32}, {78,33}, {33,0}, {32,190}, {78,24}, {78,35}, {80,115}, + {80,118}, {80,120}, {80,119}, {80,113}, {80,117}, {80,112}, {80,114}, + {34,13}, {80,111}, {80,116}, {82,128}, {82,117}, {35,5}, {35,6}, {82,116}, + {82,121}, {82,127}, {82,119}, {82,126}, {82,123}, {82,122}, {82,125}, + {82,120}, {82,118}, {82,124}, {84,32}, {84,30}, {35,138}, {84,29}, + {84,35}, {84,33}, {35,139}, {84,28}, {84,26}, {84,27}, {35,141}, {84,31}, + {35,140}, {84,34}, {85,56}, {85,62}, {85,57}, {36,27}, {85,97}, {36,26}, + {85,61}, {85,60}, {36,25}, {85,59}, {36,24}, {85,58}, {86,61}, {86,97}, + {86,62}, {86,59}, {36,123}, {86,56}, {86,60}, {86,99}, {86,98}, {86,57}, + {86,58}, {36,122}, {87,18}, {36,167}, {87,19}, {36,165}, {36,166}, + {87,147}, {37,10}, {88,54}, {37,42}, {88,115}, {37,43}, {88,116}, {88,117}, + {88,131}, {88,130}, {37,58}, {88,141}, {15,105}, {63,169}, {63,168}, + {26,170}, {26,171}, {67,154}, {71,146}, {75,44}, {29,53}, {31,37}, + {75,42}, {75,45}, {31,38}, {78,36}, {75,43}, {80,121}, {34,14}, {82,129}, + {84,38}, {84,36}, {84,37}, {85,98}, {36,28}, {86,100}, {36,170}, {36,124}, + {36,168}, {36,169}, {87,148}, {37,34}, {15,106}, {80,122}, {51,9}, + {24,102}, {67,155}, {26,172}, {67,156}, {71,148}, {71,147}, {31,40}, + {29,54}, {29,55}, {71,151}, {71,150}, {71,149}, {75,46}, {75,49}, {75,48}, + {75,47}, {31,39}, {78,40}, {78,38}, {78,37}, {78,39}, {34,15}, {80,124}, + {80,125}, {34,16}, {80,123}, {82,131}, {82,130}, {82,133}, {35,7}, + {82,132}, {84,39}, {84,41}, {84,40}, {85,99}, {85,102}, {85,100}, {85,101}, + {86,101}, {36,125}, {87,20}, {87,21}, {87,22}, {37,11}, {37,35}, {88,118}, + {15,107}, {29,56}, {31,41}, {80,126}, {86,102}, {88,132}, {51,10}, + {37,59}, {15,108}, {75,50}, {80,127}, {82,134}, {85,103}, {86,103}, + {15,109}, {67,157}, {67,158}, {26,173}, {26,174}, {71,153}, {29,58}, + {29,57}, {71,152}, {78,41}, {80,128}, {80,130}, {80,129}, {34,19}, + {34,18}, {34,17}, {36,30}, {85,104}, {36,29}, {86,105}, {86,104}, {37,12}, + {87,149}, {18,125}, {63,170}, {67,161}, {67,159}, {67,160}, {71,162}, + {71,157}, {71,154}, {71,161}, {71,163}, {29,60}, {71,160}, {71,156}, + {71,155}, {71,159}, {71,158}, {29,59}, {75,61}, {75,56}, {75,54}, {75,97}, + {75,55}, {75,51}, {75,57}, {75,52}, {78,50}, {75,53}, {75,98}, {75,60}, + {31,42}, {75,59}, {75,58}, {75,62}, {78,42}, {78,45}, {78,44}, {78,52}, + {78,47}, {78,51}, {78,49}, {78,48}, {78,46}, {78,43}, {33,3}, {33,2}, + {33,4}, {33,1}, {78,53}, {80,136}, {80,139}, {80,137}, {80,141}, {80,142}, + {80,134}, {34,24}, {80,135}, {80,133}, {80,140}, {80,132}, {80,131}, + {34,23}, {34,21}, {34,20}, {80,138}, {82,143}, {82,149}, {35,10}, {82,144}, + {82,147}, {82,151}, {35,11}, {82,146}, {82,138}, {82,137}, {82,150}, + {82,141}, {82,139}, {82,148}, {82,140}, {35,9}, {35,8}, {82,135}, {82,136}, + {82,145}, {82,142}, {84,44}, {84,47}, {34,22}, {84,45}, {84,51}, {84,49}, + {84,43}, {84,54}, {84,42}, {35,143}, {84,50}, {84,46}, {35,142}, {84,53}, + {84,52}, {85,107}, {85,106}, {85,113}, {85,109}, {85,112}, {36,32}, + {85,110}, {85,111}, {85,105}, {85,108}, {36,31}, {36,127}, {86,116}, + {86,111}, {86,115}, {86,118}, {86,114}, {86,110}, {36,129}, {86,113}, + {86,117}, {36,128}, {86,108}, {84,48}, {86,112}, {86,109}, {86,106}, + {86,107}, {36,126}, {87,26}, {87,28}, {87,31}, {87,27}, {87,32}, {87,25}, + {87,23}, {36,171}, {87,29}, {36,173}, {36,172}, {87,24}, {87,30}, {87,154}, + {37,13}, {87,155}, {87,153}, {87,150}, {87,152}, {87,151}, {88,26}, + {88,28}, {88,27}, {88,57}, {88,56}, {88,55}, {88,58}, {37,51}, {37,52}, + {88,138}, {88,142}, {18,126}, {59,111}, {63,173}, {24,103}, {63,171}, + {63,172}, {67,162}, {67,163}, {26,177}, {26,175}, {67,164}, {26,176}, + {71,168}, {71,171}, {71,165}, {71,172}, {71,164}, {71,166}, {71,167}, + {71,170}, {29,97}, {71,175}, {71,174}, {29,61}, {71,169}, {71,173}, + {29,62}, {75,108}, {31,47}, {75,103}, {31,43}, {75,100}, {75,106}, + {75,109}, {31,48}, {75,105}, {75,102}, {75,110}, {75,101}, {75,107}, + {31,44}, {75,99}, {31,45}, {31,46}, {75,104}, {78,105}, {78,58}, {78,59}, + {78,62}, {78,60}, {78,54}, {78,57}, {78,101}, {78,61}, {33,5}, {78,103}, + {78,100}, {33,6}, {78,102}, {78,55}, {78,98}, {78,99}, {78,97}, {80,146}, + {80,148}, {80,151}, {80,145}, {34,25}, {80,153}, {80,144}, {80,154}, + {80,150}, {80,152}, {80,156}, {80,149}, {80,157}, {80,147}, {80,143}, + {34,26}, {80,155}, {34,27}, {35,13}, {78,56}, {82,177}, {82,168}, {35,15}, + {82,164}, {35,16}, {82,173}, {82,167}, {82,157}, {35,14}, {82,170}, + {82,165}, {82,166}, {82,152}, {82,159}, {82,174}, {82,171}, {82,163}, + {82,175}, {82,158}, {82,153}, {82,172}, {82,155}, {82,169}, {82,160}, + {82,176}, {82,156}, {35,12}, {82,154}, {82,161}, {82,162}, {84,61}, + {84,59}, {84,98}, {84,110}, {84,101}, {84,60}, {84,56}, {84,103}, {84,62}, + {84,99}, {84,58}, {84,106}, {84,55}, {84,97}, {84,102}, {84,104}, {84,107}, + {84,57}, {84,111}, {84,112}, {84,105}, {84,109}, {84,100}, {85,129}, + {85,132}, {36,33}, {85,131}, {85,136}, {85,134}, {36,34}, {85,125}, + {85,115}, {85,114}, {36,36}, {85,127}, {85,128}, {85,124}, {85,116}, + {85,121}, {84,108}, {85,117}, {36,35}, {85,123}, {85,122}, {85,118}, + {85,130}, {85,119}, {86,123}, {85,133}, {85,135}, {85,126}, {85,120}, + {86,124}, {86,126}, {86,120}, {36,130}, {86,133}, {86,131}, {36,131}, + {86,130}, {86,129}, {86,122}, {86,119}, {86,125}, {86,134}, {86,121}, + {86,127}, {87,41}, {87,46}, {87,36}, {87,39}, {36,174}, {87,43}, {87,50}, + {86,128}, {87,37}, {87,47}, {87,51}, {87,42}, {87,35}, {87,45}, {87,44}, + {87,49}, {87,48}, {86,132}, {87,40}, {87,34}, {87,38}, {37,14}, {37,15}, + {87,33}, {87,166}, {87,157}, {87,165}, {87,162}, {87,163}, {87,156}, + {87,159}, {87,167}, {87,161}, {87,160}, {87,158}, {87,164}, {88,29}, + {88,30}, {88,32}, {88,31}, {88,34}, {88,33}, {88,60}, {88,59}, {88,119}, + {88,120}, {88,133}, {37,56}, {37,60}, {88,143}, {37,61}, {18,127}, + {35,144}, {85,137}, {37,16}, {37,17}, {18,128}, {63,174}, {24,104}, + {71,176}, {75,112}, {75,113}, {75,111}, {78,107}, {78,106}, {33,7}, + {80,159}, {78,108}, {80,158}, {82,179}, {35,17}, {35,19}, {82,178}, + {35,18}, {84,113}, {84,115}, {84,114}, {85,138}, {36,37}, {36,175}, + {87,168}, {88,35}, {88,146}, {18,129}, {67,165}, {29,98}, {75,115}, + {75,114}, {78,109}, {35,20}, {35,145}, {86,135}, {88,139}, {18,130}, + {26,178}, {29,99}, {82,180}, {87,52}, {21,128}, {78,110}, {37,36}, + {21,129}, {29,100}, {33,8}, {87,53}, {21,130}, {71,177}, {31,50}, {75,116}, + {75,117}, {31,49}, {78,111}, {33,12}, {33,10}, {33,11}, {33,9}, {80,160}, + {34,28}, {84,117}, {84,116}, {84,119}, {84,118}, {35,146}, {85,139}, + {85,141}, {85,140}, {36,38}, {86,136}, {87,54}, {87,55}, {36,176}, + {88,36}, {88,61}, {37,53}, {59,112}, {75,118}, {78,112}, {82,181}, + {63,175}, {78,113}, {80,162}, {80,161}, {87,56}, {37,18}, {88,37}, + {88,62}, {24,105}, {71,178}, {71,179}, {75,119}, {24,106}, {34,29}, + {80,163}, {85,143}, {36,39}, {85,144}, {85,142}, {87,57}, {87,169}, + {24,107}, {78,116}, {78,115}, {78,114}, {80,164}, {80,168}, {80,167}, + {80,166}, {80,165}, {34,30}, {82,182}, {84,121}, {35,147}, {84,120}, + {85,145}, {86,139}, {86,138}, {36,132}, {86,137}, {87,60}, {87,59}, + {87,58}, {26,179}, {75,120}, {33,13}, {82,183}, {82,184}, {86,140}, + {87,61}, {87,170}, {88,38}, {88,121}, {88,148}, {26,180}, {33,14}, + {80,169}, {82,185}, {85,146}, {87,62}, {29,102}, {78,117}, {80,170}, + {82,186}, {82,187}, {82,188}, {84,126}, {84,122}, {36,40}, {84,125}, + {84,124}, {35,148}, {84,123}, {35,150}, {35,149}, {85,148}, {85,147}, + {36,41}, {36,42}, {36,134}, {86,141}, {36,133}, {87,99}, {87,100}, + {87,98}, {87,97}, {37,20}, {87,171}, {87,172}, {87,173}, {37,19}, {88,39}, + {88,42}, {88,41}, {88,40}, {88,147}, {31,51}, {34,37}, {84,127}, {85,149}, + {36,135}, {86,142}, {88,149}, {31,52}, {78,118}, {86,143}, {88,97}, + {40,10}, {60,188}, {0,10}, {0,23}, {0,25}, {0,27}, {0,31}, {0,32}, + {0,35}, {0,36}, {0,39}, {0,40}, {0,43}, {0,44}, {0,47}, {0,48}, {0,51}, + {0,52}, {0,55}, {0,56}, {0,59}, {0,60}, {0,134}, {0,135}, {0,138}, + {0,139}, {0,136}, {0,137}, {0,28}, {0,13}, {0,15}, {0,17}, {0,18}, + {0,19}, {0,20}, {0,61}, {0,62}, {0,97}, {0,98}, {0,99}, {0,100}, {0,140}, + {0,141}, {0,142}, {0,158}, {0,159}, {0,160}, {0,161}, {0,162}, {1,12}, + {1,13}, {1,14}, {0,9}, {0,109}, {1,3}, {1,8}, {0,110}, {0,29}, {0,30}, + {0,111}, {0,143}, {0,1}, {0,144}, {0,4}, {1,1}, {1,111}, {1,112}, {1,113}, + {1,114}, {1,115}, {1,116}, {1,117}, {1,118}, {1,119}, {1,120}, {0,7}, + {0,6}, {0,149}, {0,151}, {0,150}, {0,8}, {1,9}, {1,143}, {1,144}, {1,145}, + {1,146}, {1,147}, {1,148}, {1,149}, {1,150}, {1,151}, {1,152}, {1,153}, + {1,154}, {1,155}, {1,156}, {1,157}, {1,158}, {1,159}, {1,160}, {1,161}, + {1,162}, {1,163}, {1,164}, {1,165}, {1,166}, {1,167}, {1,168}, {1,2}, + {0,132}, {1,169}, {1,170}, {1,171}, {1,172}, {1,173}, {1,174}, {1,175}, + {1,176}, {1,177}, {1,178}, {1,179}, {1,180}, {1,181}, {1,182}, {1,183}, + {1,184}, {1,185}, {1,186}, {1,187}, {1,188}, {1,189}, {1,190}, {2,0}, + {2,1}, {2,2}, {2,3}, {0,33}, {0,21}, {0,34}, {0,14} +}; + +/* This returns ERROR if the code point doesn't exist. */ +long int big5_to_unicode(int r, int c) +{ + assert(r >= 0 && r < 94); + assert(c >= 0 && c < 191); + return big5_forward[r][c]; +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_big5(long int unicode, int *r, int *c) +{ + int rr, cc; + long int uu; + int i, j, k; + + i = -1; + j = lenof(big5_backward); + while (j - i > 1) { + k = (i + j) / 2; + rr = big5_backward[k].r; + cc = big5_backward[k].c; + uu = big5_forward[rr][cc]; + if (unicode > uu) + i = k; + else if (unicode < uu) + j = k; + else { + *r = rr; + *c = cc; + return 1; + } + } + return 0; +} + +#ifdef TESTMODE + +#include <stdio.h> + +int main(void) +{ + int r, c, rr, cc, ret; + long int u, uu; + + /* + * N.B. Big5 <-> Unicode round-trip mapping is known not to + * work, because of the various duplicate characters: + * + * - 0xA15A (0,26) and 0xA1C4 (0,132) are both U+FF3F + * - 0xA1FE (0,190) and 0xA2AC (1,108) are both U+2571 + * - 0xA240 (1,0) and 0xA2AD (1,109) are both U+2572 + * - 0xA2CC (1,140) and 0xA451 (3,17) are both U+5341 + * - 0xA2CE (1,142) and 0xA4CA (3,138) are both U+5345 + */ + + for (r = 0; r < 94; r++) { + for (c = 0; c < 191; c++) { + u = big5_to_unicode(r, c); + if (u != ERROR) { + ret = unicode_to_big5(u, &rr, &cc); + if (!ret) + printf("(%d,%d) -> U-%08lx but didn't convert back\n", + r, c, u); + else if (rr != r || cc != c) + printf("(%d,%d) -> U-%08lx -> (%d,%d)\n", + r, c, u, rr, cc); + } + } + } + + for (u = 0; u < 0x10000L; u++) { + ret = unicode_to_big5(u, &r, &c); + if (ret) { + uu = big5_to_unicode(r, c); + if (uu == ERROR) + printf("U-%08lx -> (%d,%d) but didn't convert back\n", + u, r, c); + else if (uu != u) + printf("U-%08lx -> (%d,%d) -> U-%08lx\n", u, r, c, uu); + } + } + + return 0; +} + +#endif diff --git a/app/tools/halibut/charset/charset.h b/app/tools/halibut/charset/charset.h new file mode 100644 index 0000000..c8e9f16 --- /dev/null +++ b/app/tools/halibut/charset/charset.h @@ -0,0 +1,229 @@ +/* + * charset.h - header file for general character set conversion + * routines. + */ + +#ifndef charset_charset_h +#define charset_charset_h + +#include <stddef.h> + +/* + * Enumeration that lists all the multibyte or single-byte + * character sets known to this library. + */ +typedef enum { + CS_NONE, /* used for reporting errors, etc */ + CS_ASCII, /* ordinary US-ASCII is worth having! */ + CS_ISO8859_1, + CS_ISO8859_1_X11, /* X font encoding with VT100 glyphs */ + CS_ISO8859_2, + CS_ISO8859_3, + CS_ISO8859_4, + CS_ISO8859_5, + CS_ISO8859_6, + CS_ISO8859_7, + CS_ISO8859_8, + CS_ISO8859_9, + CS_ISO8859_10, + CS_ISO8859_11, + CS_ISO8859_13, + CS_ISO8859_14, + CS_ISO8859_15, + CS_ISO8859_16, + CS_CP437, + CS_CP850, + CS_CP866, + CS_CP1250, + CS_CP1251, + CS_CP1252, + CS_CP1253, + CS_CP1254, + CS_CP1255, + CS_CP1256, + CS_CP1257, + CS_CP1258, + CS_KOI8_R, + CS_KOI8_U, + CS_KOI8_RU, + CS_JISX0201, + CS_MAC_ROMAN, + CS_MAC_TURKISH, + CS_MAC_CROATIAN, + CS_MAC_ICELAND, + CS_MAC_ROMANIAN, + CS_MAC_GREEK, + CS_MAC_CYRILLIC, + CS_MAC_THAI, + CS_MAC_CENTEURO, + CS_MAC_SYMBOL, + CS_MAC_DINGBATS, + CS_MAC_ROMAN_OLD, + CS_MAC_CROATIAN_OLD, + CS_MAC_ICELAND_OLD, + CS_MAC_ROMANIAN_OLD, + CS_MAC_GREEK_OLD, + CS_MAC_CYRILLIC_OLD, + CS_MAC_UKRAINE, + CS_MAC_VT100, + CS_MAC_VT100_OLD, + CS_VISCII, + CS_HP_ROMAN8, + CS_DEC_MCS, + CS_UTF8, + CS_UTF7, + CS_UTF7_CONSERVATIVE, + CS_UTF16, + CS_UTF16BE, + CS_UTF16LE, + CS_EUC_JP, + CS_EUC_CN, + CS_EUC_KR, + CS_ISO2022_JP, + CS_ISO2022_KR, + CS_BIG5, + CS_SHIFT_JIS, + CS_HZ, + CS_CP949, + CS_PDF, + CS_PSSTD, + CS_CTEXT, + CS_ISO2022, + CS_BS4730, + CS_DEC_GRAPHICS, + CS_EUC_TW +} charset_t; + +typedef struct { + unsigned long s0, s1; +} charset_state; + +/* + * This macro is used to initialise a charset_state structure: + * + * charset_state mystate = CHARSET_INIT_STATE; + */ +#define CHARSET_INIT_STATE { 0L, 0L } /* a suitable initialiser */ + +/* + * This external variable contains the same data, but is provided + * for easy structure-copy assignment: + * + * mystate = charset_init_state; + */ +extern const charset_state charset_init_state; + +/* + * Routine to convert a MB/SB character set to Unicode. + * + * This routine accepts some number of bytes, updates a state + * variable, and outputs some number of Unicode characters. There + * are no guarantees. You can't even guarantee that at most one + * Unicode character will be output per byte you feed in; for + * example, suppose you're reading UTF-8, you've seen E1 80, and + * then you suddenly see FE. Now you need to output _two_ error + * characters - one for the incomplete sequence E1 80, and one for + * the completely invalid UTF-8 byte FE. + * + * Returns the number of wide characters output; will never output + * more than the size of the buffer (as specified on input). + * Advances the `input' pointer and decrements `inlen', to indicate + * how far along the input string it got. + * + * The sequence of `errlen' wide characters pointed to by `errstr' + * will be used to indicate a conversion error. If `errstr' is + * NULL, `errlen' will be ignored, and the library will choose + * something sensible to do on its own. For Unicode, this will be + * U+FFFD (REPLACEMENT CHARACTER). + */ + +int charset_to_unicode(const char **input, int *inlen, + wchar_t *output, int outlen, + int charset, charset_state *state, + const wchar_t *errstr, int errlen); + +/* + * Routine to convert Unicode to an MB/SB character set. + * + * This routine accepts some number of Unicode characters, updates + * a state variable, and outputs some number of bytes. + * + * Returns the number of bytes output; will never output more than + * the size of the buffer (as specified on input), and will never + * output a partial MB character. Advances the `input' pointer and + * decrements `inlen', to indicate how far along the input string + * it got. + * + * If `error' is non-NULL and a character is found which cannot be + * expressed in the output charset, conversion will terminate at + * that character (so `input' points to the offending character) + * and `*error' will be set to TRUE; if `error' is non-NULL and no + * difficult characters are encountered, `*error' will be set to + * FALSE. If `error' is NULL, difficult characters will simply be + * ignored. + * + * If `input' is NULL, this routine will output the necessary bytes + * to reset the encoding state in any way which might be required + * at the end of an output piece of text. + */ + +int charset_from_unicode(const wchar_t **input, int *inlen, + char *output, int outlen, + int charset, charset_state *state, int *error); + +/* + * Convert X11 encoding names to and from our charset identifiers. + */ +const char *charset_to_xenc(int charset); +int charset_from_xenc(const char *name); + +/* + * Convert MIME encoding names to and from our charset identifiers. + */ +const char *charset_to_mimeenc(int charset); +int charset_from_mimeenc(const char *name); + +/* + * Convert our own encoding names to and from our charset + * identifiers. + */ +const char *charset_to_localenc(int charset); +int charset_from_localenc(const char *name); +int charset_localenc_nth(int n); + +/* + * Convert Mac OS script/region/font to our charset identifiers. + */ +int charset_from_macenc(int script, int region, int sysvers, + const char *fontname); + +/* + * Upgrade a charset identifier to a superset charset which is + * often confused with it. For example, people whose MUAs report + * their mail as ASCII or ISO8859-1 often in practice turn out to + * be using CP1252 quote characters, so when parsing incoming mail + * it is prudent to treat ASCII and ISO8859-1 as aliases for CP1252 + * - and since it's a superset of both, this will cause no + * genuinely correct mail to be parsed wrongly. + */ +int charset_upgrade(int charset); + +/* + * This function returns TRUE if the input charset is a vaguely + * sensible superset of ASCII. That is, it returns FALSE for 7-bit + * encoding formats such as HZ and UTF-7. + */ +int charset_contains_ascii(int charset); + +/* + * This function tries to deduce the CS_* identifier of the charset + * used in the current C locale. It falls back to CS_ASCII if it + * can't figure it out at all, so it will always return a valid + * charset. + * + * (Note that you should have already called setlocale(LC_CTYPE, + * "") to guarantee that this function will do the right thing.) + */ +int charset_from_locale(void); + +#endif /* charset_charset_h */ diff --git a/app/tools/halibut/charset/cns11643.c b/app/tools/halibut/charset/cns11643.c new file mode 100644 index 0000000..1b5a0f0 --- /dev/null +++ b/app/tools/halibut/charset/cns11643.c @@ -0,0 +1,13104 @@ +/* + * CNS 11643 implementation for libcharset. (This is the character set + * itself, not any particular multibyte encoding of it. Multibyte + * encodings of this character set are handled separately.) + */ + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +/* + * There are two versions of CNS 11643, the 1986 one and the 1992 one. + * The 1986 version has three 94x94 planes of characters; the 1992 version + * has seven. + * + * Planes 1 and 2 appear to be identical between them. Plane 3 in the + * 1992 version was apparently derived from plane 14 in the 1986 one, + * but had more characters. + * + * Code tables for the 1992 standard are available from the ISO-IR. + * + * The 1992 standard contains: + * Plane 1: 5401 hanzi, plus some other stuff + * Plane 2: 7650 hanzi + * Plane 3: 6148 hanzi + * Plane 4: 7298 hanzi + * Plane 5: 8603 hanzi + * Plane 6: 6388 hanzi + * Plane 7: 6539 hanzi + * + * There are two sources of Unicode conversion tables: + * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/CNS11643.TXT + * and + * http://www.unicode.org/Public/UNIDATA/Unihan.txt + * + * CNS11643.TXT is for the 1986 standard, so it only covers the first + * two and a bit planes. Unihan (in its kIRG_TSource tag) covers all + * seven planes of the 1992 standard, but only worries about the + * hanzi. We thus use both. + * + * One code point in CNS 11643, 0x46E3B, is referenced twice in Unihan, at + * U+4695 and U+278AE. We map it to the former. + * + * IRG source T3 includes not only plane 3 but also "some additional + * characters". We filter out the latter. + * + * First, extract the non-hanzi from CNS11643.TXT: +grep -v '^#' CNS11643.TXT | grep -v '<CJK>' > CNS.TXT + * Then, extract the hanzi from Unihan.txt, converting to the usual + * Unicode format as we go: +grep -v '^#' Unihan.txt | sed -n \ + 's/^U+\([0-9A-F]*\).kIRG_TSource.\([0-9A-F]\)-\([0-9A-F]*\)$/0x\2\3 0x\1/p' \ + | grep -v ' 0x278AE$' | grep -v '^0x36[4567]' >> CNS.TXT + * Mappings that are claimed as duplicates in CNS11643.TXT, but which have + * compatibility mappings now. +cat <<EOF >> CNS.TXT +0x1243E 0x3038 # HANGZHOU NUMERAL TEN +0x1243F 0x3039 # HANGZHOU NUMERAL TWENTY +0x12440 0x303A # HANGZHOU NUMERAL THIRTY +EOF +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12721,$_+0x2F00),(0..6)'>>CNS.TXT +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12721,$_+0x2F00),(8..13)'>>CNS.TXT +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12721,$_+0x2F00),(15..18)'>>CNS.TXT +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12721,$_+0x2F00),(20..32)'>>CNS.TXT +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12721,$_+0x2F01),(33..93)'>>CNS.TXT +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12821,$_+0x2F5F),(0..93)'>>CNS.TXT +perl -e 'map printf("0x%05X\t0x%04X\n",$_+0x12921,$_+0x2FBD),(0..24)'>>CNS.TXT + */ +/* + * These tables are generated from CNS.TXT generated above. + */ + +/* + * I'm about to rely on the magic value ERROR not being above 0xFFFF. + */ +enum { compile_time_assertion = 1 / ((ERROR &~ 0xFFFF) == 0) }; + +/* + * Mapping from CNS 11643 to Unicode. For these purposes each plane is + * considered to be a 94x94 square array, with coordinates running + * from (0,0) to (93,93). + * + * Since Unicode values used in this character set are bounded + * above by 0x30000, we can store 18 rather than 32 bits per entry. + * We do this by having two separate tables, one storing 16 bits + * per entry and another storing 2. + * + * The first table is generated by running the following sh+Perl + * over CNS.TXT: + +cat CNS.TXT | \ +perl -ne '$a{$1,hex$2,hex$3}=hex$4 if /^0x(\S)(\S\S)(\S\S)\s+0x(\S+)\s/;' \ + -e 'END {$o=" "; for $p (0..6) { for $r (0..93) { for $c (0..93) {' \ + -e '$k=$a{$p+1,$r+33,$c+33};' \ + -e '$o .= (defined $k ? sprintf"0x%04x, ", $k & 0xFFFF : " ERROR, ");' \ + -e '(print "$o\n"), $o=" " if length $o > 70; } } } print "$o\n"; }' + + */ +static const unsigned short cns11643_forward_16[7*94*94] = { + 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x30fb, 0xff1b, 0xff1a, 0xff1f, + 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, 0x00b7, 0xfe54, + 0xfe55, 0xfe56, 0xfe57, 0xfe31, 0x2014, 0xfe32, 0x2013, ERROR, ERROR, + ERROR, ERROR, 0xff08, 0xff09, 0xfe35, 0xfe36, 0xff5b, 0xff5d, 0xfe37, + 0xfe38, 0x3014, 0x3015, 0xfe39, 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, + 0x300a, 0x300b, 0xfe3d, 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, + 0x300d, 0xfe41, 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, + 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, + 0x301e, 0x2032, 0x2035, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, 0x3003, + 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, 0x25c7, 0x25c6, + 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, 0x203e, ERROR, 0xff3f, + ERROR, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, + 0xfe61, 0xff0b, 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, + 0xff1d, 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, + 0xfe64, 0xfe66, 0xfe65, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, + 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, + 0x2641, 0x2609, 0x2191, 0x2193, 0x2192, 0x2190, 0x2196, 0x2197, 0x2199, + 0x2198, 0x2016, 0xff5c, 0xff0f, 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, + 0x3012, 0xffe0, 0xffe1, 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, + 0xfe6b, 0x33d5, 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, + 0x33c4, 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, + 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, + 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, 0x2589, 0x253c, + 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, 0x2502, 0x2595, 0x250c, + 0x2510, 0x2514, 0x2518, 0x256d, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, + 0x256a, 0x2561, 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, + 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, + 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, + 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x3038, 0x3039, 0x303a, 0xff21, + 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, + 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, + 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, 0xff42, + 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, + 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, + 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, + 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, + 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, + 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, + 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, + 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, + 0x310e, 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, + 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, + 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, + 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, + 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, + 0x247a, 0x247b, 0x247c, 0x247d, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, + 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x2f00, 0x2f01, 0x2f02, + 0x2f03, 0x2f04, 0x2f05, 0x2f06, 0x4ea0, 0x2f08, 0x2f09, 0x2f0a, 0x2f0b, + 0x2f0c, 0x2f0d, 0x51ab, 0x2f0f, 0x2f10, 0x2f11, 0x2f12, 0x52f9, 0x2f14, + 0x2f15, 0x2f16, 0x2f17, 0x2f18, 0x2f19, 0x2f1a, 0x2f1b, 0x2f1c, 0x2f1d, + 0x2f1e, 0x2f1f, 0x2f20, 0x2f22, 0x2f23, 0x2f24, 0x2f25, 0x2f26, 0x2f27, + 0x2f28, 0x2f29, 0x2f2a, 0x2f2b, 0x2f2c, 0x2f2d, 0x2f2e, 0x2f2f, 0x2f30, + 0x2f31, 0x2f32, 0x2f33, 0x2f34, 0x2f35, 0x2f36, 0x2f37, 0x2f38, 0x2f39, + 0x2f3a, 0x2f3b, 0x2f3c, 0x2f3d, 0x2f3e, 0x2f3f, 0x2f40, 0x2f41, 0x2f42, + 0x2f43, 0x2f44, 0x2f45, 0x2f46, 0x2f47, 0x2f48, 0x2f49, 0x2f4a, 0x2f4b, + 0x2f4c, 0x2f4d, 0x2f4e, 0x2f4f, 0x2f50, 0x2f51, 0x2f52, 0x2f53, 0x2f54, + 0x2f55, 0x2f56, 0x2f57, 0x2f58, 0x2f59, 0x2f5a, 0x2f5b, 0x2f5c, 0x2f5d, + 0x2f5e, 0x2f5f, 0x2f60, 0x2f61, 0x2f62, 0x2f63, 0x2f64, 0x2f65, 0x2f66, + 0x2f67, 0x2f68, 0x2f69, 0x2f6a, 0x2f6b, 0x2f6c, 0x2f6d, 0x2f6e, 0x2f6f, + 0x2f70, 0x2f71, 0x2f72, 0x2f73, 0x2f74, 0x2f75, 0x2f76, 0x2f77, 0x2f78, + 0x2f79, 0x2f7a, 0x2f7b, 0x2f7c, 0x2f7d, 0x2f7e, 0x2f7f, 0x2f80, 0x2f81, + 0x2f82, 0x2f83, 0x2f84, 0x2f85, 0x2f86, 0x2f87, 0x2f88, 0x2f89, 0x2f8a, + 0x2f8b, 0x2f8c, 0x2f8d, 0x2f8e, 0x2f8f, 0x2f90, 0x2f91, 0x2f92, 0x2f93, + 0x2f94, 0x2f95, 0x2f96, 0x2f97, 0x2f98, 0x2f99, 0x2f9a, 0x2f9b, 0x2f9c, + 0x2f9d, 0x2f9e, 0x2f9f, 0x2fa0, 0x2fa1, 0x2fa2, 0x2fa3, 0x2fa4, 0x2fa5, + 0x2fa6, 0x2fa7, 0x2fa8, 0x2fa9, 0x2faa, 0x2fab, 0x2fac, 0x2fad, 0x2fae, + 0x2faf, 0x2fb0, 0x2fb1, 0x2fb2, 0x2fb3, 0x2fb4, 0x2fb5, 0x2fb6, 0x2fb7, + 0x2fb8, 0x2fb9, 0x2fba, 0x2fbb, 0x2fbc, 0x2fbd, 0x2fbe, 0x2fbf, 0x2fc0, + 0x2fc1, 0x2fc2, 0x2fc3, 0x2fc4, 0x2fc5, 0x2fc6, 0x2fc7, 0x2fc8, 0x2fc9, + 0x2fca, 0x2fcb, 0x2fcc, 0x2fcd, 0x2fce, 0x2fcf, 0x2fd0, 0x2fd1, 0x2fd2, + 0x2fd3, 0x2fd4, 0x2fd5, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x2400, 0x2401, 0x2402, + 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, 0x2408, 0x2409, 0x240a, 0x240b, + 0x240c, 0x240d, 0x240e, 0x240f, 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, + 0x2415, 0x2416, 0x2417, 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, + 0x241e, 0x241f, 0x2421, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x4e00, 0x4e59, 0x4e01, 0x4e03, + 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, + 0x5200, 0x5201, 0x529b, 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, + 0x4e08, 0x4e0a, 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, + 0x4e8e, 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, + 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, 0x5c0f, + 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, 0x5df3, 0x5dfe, + 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, + 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, + 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, + 0x4ec4, 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, + 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, + 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929, + 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f, 0x5df4, + 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236, 0x624b, 0x624e, + 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, + 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, + 0x722a, 0x7236, 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, + 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, 0x4ee5, + 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, 0x4ed9, 0x4ede, + 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, 0x51fa, 0x51f8, 0x520a, + 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317, 0x531d, 0x4edf, 0x534a, 0x5349, + 0x5361, 0x5360, 0x536f, 0x536e, 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, + 0x53ee, 0x53e9, 0x53e8, 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, + 0x53f2, 0x53f1, 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, + 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7, + 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17, 0x5fc5, + 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6, 0x672e, 0x672c, + 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, + 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, + 0x7528, 0x7529, 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, + 0x76bf, 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, + 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, + 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f, + 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b, 0x5149, + 0x5147, 0x5146, 0x5148, 0x5168, 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, + 0x5212, 0x520e, 0x5216, 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, + 0x5409, 0x540f, 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, + 0x540d, 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, + 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, 0x591a, + 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, 0x5982, 0x5981, + 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, 0x5bfa, 0x5c16, 0x5c79, + 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, + 0x620c, 0x620d, 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, + 0x65ec, 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, + 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, + 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d, + 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001, 0x8003, + 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c, 0x81e3, 0x81ea, + 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, + 0x8840, 0x884c, 0x8863, 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, + 0x4f47, 0x4f57, 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, + 0x4f3d, 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, 0x4f5c, + 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48, 0x4f5a, 0x514c, + 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225, 0x5224, 0x5229, 0x522a, + 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac, 0x5323, 0x5373, 0x5375, 0x541d, + 0x542d, 0x541e, 0x543e, 0x5426, 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, + 0x5448, 0x5442, 0x541b, 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, + 0x5435, 0x5436, 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, + 0x56ea, 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x5747, + 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d, 0x5992, + 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4, 0x5993, 0x598a, + 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, + 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, + 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, + 0x5f77, 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, + 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, + 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298, + 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538, 0x65f1, + 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c, 0x6756, 0x675e, + 0x6749, 0x6746, 0x6760, 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, + 0x6c99, 0x6c81, 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, + 0x6c70, 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, + 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076, 0x707c, + 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2, 0x7396, 0x752c, + 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3, 0x79c1, 0x79c0, 0x79bf, + 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093, 0x809d, 0x8098, 0x809b, 0x809a, + 0x80b2, 0x826f, 0x8292, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, + 0x8c46, 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, + 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, + 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a, + 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab, 0x4eac, + 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, + 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, + 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, + 0x51bd, 0x51fd, 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, + 0x5241, 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, + 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, 0x5496, 0x5478, + 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492, 0x5486, 0x547c, 0x5490, + 0x5471, 0x5476, 0x548c, 0x549a, 0x5462, 0x5468, 0x548b, 0x547d, 0x548e, + 0x56fa, 0x5783, 0x5777, 0x576a, 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, + 0x591c, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, + 0x59b9, 0x59ae, 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, + 0x59af, 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a, + 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x5c46, 0x5cb7, + 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, + 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, + 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, + 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, + 0x602a, 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, + 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, + 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8, + 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da, 0x62b1, + 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e, 0x65a7, 0x65bc, + 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, + 0x6615, 0x660a, 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, + 0x679c, 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f, + 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a, 0x6772, + 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3, 0x6ce8, 0x6cf3, + 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe, 0x6cbc, 0x6ce2, 0x6cab, + 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9, 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, + 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1, 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, + 0x6cd6, 0x6ce0, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, + 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, + 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a, + 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940, 0x7941, + 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, + 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, + 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, + 0x82bd, 0x829f, 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, + 0x82b0, 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, + 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, + 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, 0x9642, 0x96b9, 0x96e8, + 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae, 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, + 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd, 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, + 0x4fd7, 0x4fae, 0x4fd0, 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, + 0x5157, 0x5192, 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, + 0x524b, 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b, + 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8, 0x54a6, + 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x54c4, 0x54c8, 0x54af, + 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, + 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, + 0x594e, 0x5950, 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, + 0x59ea, 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, + 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, + 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08, + 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c, 0x5f89, + 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d, 0x6070, 0x6068, + 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, + 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, + 0x62f7, 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545, + 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f, 0x661f, + 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1, 0x67d4, 0x67d0, + 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef, 0x67c4, 0x67d1, 0x67b4, + 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de, 0x67f3, 0x67b0, 0x67d9, 0x67e2, + 0x67dd, 0x67d2, 0x6b6a, 0x6b83, 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, + 0x6cc9, 0x6d0b, 0x6d32, 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, + 0x6d17, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, + 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3, + 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272, 0x726f, + 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb, 0x73b2, 0x73cd, + 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, + 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, + 0x76c6, 0x76c3, 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, + 0x76fc, 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, + 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, + 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04, + 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, + 0x80e5, 0x80da, 0x80c3, 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, + 0x80e4, 0x80dd, 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, + 0x82e6, 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301, + 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306, 0x8650, + 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4, 0x8a08, 0x8a02, + 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4, 0x8ecd, 0x8ecc, 0x8ff0, + 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, + 0x90ce, 0x90c1, 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, + 0x964c, 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, + 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, + 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f, + 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1, 0x5021, + 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a, 0x4ffe, 0x502b, + 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, + 0x5256, 0x525c, 0x5254, 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, + 0x53df, 0x54e8, 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, + 0x54fa, 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, 0x54e6, + 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2, 0x57d4, 0x57cb, + 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a, 0x5a11, 0x5a18, 0x5a1c, + 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20, 0x5a23, 0x5a29, 0x5a25, 0x5a0c, + 0x5a09, 0x5b6b, 0x5c58, 0x5bb0, 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, + 0x5bb9, 0x5bb8, 0x5c04, 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, + 0x5cea, 0x5ce8, 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, + 0x5eab, 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x6063, + 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f, 0x609a, + 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3, 0x6308, 0x62ff, + 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, + 0x6350, 0x633d, 0x632a, 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, + 0x6599, 0x65c1, 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, + 0x6645, 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, + 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, + 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845, + 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27, 0x6c28, + 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87, 0x6d66, 0x6d78, + 0x6d77, 0x6d59, 0x6d93, 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, + 0x6d8c, 0x6d8a, 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, + 0x70d9, 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8, + 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de, 0x7554, + 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7, 0x75b2, 0x75b3, + 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b, 0x76b0, 0x76ca, 0x76cd, + 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728, 0x77e9, 0x7830, 0x7827, 0x7838, + 0x781d, 0x7834, 0x7837, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, + 0x7950, 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, + 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, + 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22, + 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b, 0x7f3a, + 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8004, 0x8018, 0x8015, 0x8019, + 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105, 0x80ed, 0x80f4, + 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, + 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, + 0x8352, 0x8354, 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, + 0x8332, 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, 0x8654, + 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3, 0x869c, 0x8870, + 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18, 0x8a10, 0x8a0e, 0x8a0c, + 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16, 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, + 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, + 0x9001, 0x9006, 0x8ff7, 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, + 0x8ff8, 0x9095, 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, + 0x91dd, 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965b, + 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8, 0x9ad8, + 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c, 0x5047, 0x5043, + 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, + 0x5077, 0x504f, 0x500f, 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, + 0x526f, 0x52d2, 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, + 0x5340, 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, + 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, + 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, + 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4, 0x57fa, + 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36, 0x5a41, 0x5a49, + 0x5a66, 0x5a6a, 0x5a40, 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, + 0x5bc7, 0x5bc5, 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, + 0x5c60, 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22, + 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, 0x5e38, + 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, 0x5ebe, 0x5f35, + 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, 0x5f99, 0x5f9e, 0x5f98, + 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, 0x6089, 0x60a0, 0x60a8, 0x60cb, + 0x60b4, 0x60e6, 0x60bd, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, + 0x60d5, 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, + 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, + 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384, + 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b, 0x6369, + 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557, 0x555f, 0x654f, + 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, + 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, + 0x671b, 0x6881, 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, + 0x68a7, 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, + 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, 0x6beb, 0x6bec, + 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, 0x6de1, 0x6dcc, 0x6de4, + 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, 0x6daf, 0x6dd1, 0x6dae, 0x6dde, + 0x6df9, 0x6db8, 0x6df7, 0x6df5, 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, + 0x6deb, 0x6dd8, 0x6dea, 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, + 0x6dec, 0x6dbf, 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, + 0x727d, 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, + 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7, 0x751c, + 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4, 0x75d5, 0x75b5, + 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, + 0x7736, 0x7738, 0x773a, 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, + 0x79fb, 0x7a92, 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, + 0x7b1e, 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, + 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, + 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a, + 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124, 0x8202, + 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398, 0x8378, 0x83a2, + 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, + 0x837b, 0x837c, 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, + 0x86c4, 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, + 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, 0x8a2a, + 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, 0x8a22, 0x8c49, + 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, 0x8ca7, 0x8d67, 0x8d66, + 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, 0x900d, 0x901a, 0x9017, 0x9023, + 0x901f, 0x901d, 0x9010, 0x9015, 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, + 0x901b, 0x9014, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, + 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, + 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0, + 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5, 0x9ebb, + 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, 0x509a, + 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, + 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, + 0x5582, 0x559c, 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, + 0x559f, 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, + 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, + 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, 0x5a77, 0x5a9a, 0x5a7f, + 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, + 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, + 0x5e3d, 0x5e40, 0x5e43, 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, + 0x5f6d, 0x5fa9, 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, + 0x611c, 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, + 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, 0x638c, + 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2, 0x63e3, 0x63d0, + 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, + 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, + 0x666e, 0x6670, 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, + 0x66fe, 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, + 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, + 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb, + 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e, 0x6c2f, + 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67, 0x6e4a, 0x6e20, + 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, + 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, + 0x6ecb, 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, + 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, 0x724c, + 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, 0x742a, 0x7433, + 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, 0x741b, 0x7426, 0x7428, + 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, 0x75db, 0x75e3, 0x75d9, 0x75d8, + 0x75de, 0x75e0, 0x767b, 0x767c, 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, + 0x77ed, 0x785d, 0x786c, 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, + 0x7a98, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, + 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e, + 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66, 0x7d62, + 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052, 0x8085, 0x8155, + 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, + 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, + 0x840b, 0x83c1, 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, + 0x83cc, 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, + 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, + 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b, + 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, 0x8a54, 0x8a5b, 0x8a50, 0x8a46, + 0x8a34, 0x8a3a, 0x8a36, 0x8a56, 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, + 0x8cbd, 0x8cc1, 0x8cbb, 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, + 0x8d8a, 0x8d85, 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, + 0x8ddb, 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, + 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, 0x9165, + 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, 0x9210, 0x9207, + 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593, 0x9592, 0x958e, 0x968a, + 0x968e, 0x968b, 0x967d, 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, + 0x96c5, 0x96c4, 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, + 0x9808, 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, + 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, + 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d, + 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8, 0x55d3, + 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4, 0x55ef, 0x55da, + 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, + 0x5858, 0x5857, 0x585a, 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, + 0x5852, 0x584b, 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, + 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, 0x5ec8, + 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, 0x611f, 0x60f3, + 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, 0x6144, 0x614d, 0x613e, + 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643e, + 0x641e, 0x642a, 0x642d, 0x643d, 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, + 0x6436, 0x6416, 0x6417, 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, + 0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, + 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968, + 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b, 0x6b47, + 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, + 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, + 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, + 0x714e, 0x7159, 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, + 0x714c, 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, + 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, + 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601, + 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df, 0x775b, + 0x776b, 0x7766, 0x775e, 0x7763, 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, + 0x7768, 0x7762, 0x77ee, 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, + 0x787c, 0x7891, 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, + 0x7a1c, 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, + 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, 0x7d79, + 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, 0x7f72, 0x7fa9, + 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, 0x8171, 0x8170, 0x8178, + 0x8165, 0x816e, 0x8173, 0x816b, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, + 0x8482, 0x8477, 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, + 0x845b, 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, + 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, + 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc, + 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3, 0x8a6b, + 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, + 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, + 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, + 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, + 0x8dea, 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, 0x8f9f, + 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, 0x9055, 0x9050, + 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, 0x9041, 0x9112, 0x9117, + 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, 0x9257, 0x9238, 0x923d, 0x9240, + 0x923e, 0x925b, 0x924b, 0x9264, 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, + 0x9239, 0x923f, 0x925a, 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, + 0x96c9, 0x96ca, 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, + 0x9810, 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd, + 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e, 0x9f13, + 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da, 0x50d5, 0x50cf, + 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, + 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, + 0x560d, 0x560e, 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, + 0x5716, 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, + 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, + 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5, + 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84, 0x5d87, + 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, + 0x5f70, 0x5fb9, 0x6147, 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, + 0x615a, 0x6158, 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, + 0x645f, 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, + 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, 0x69c1, + 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, 0x69b4, 0x69d0, + 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, 0x6b49, 0x6b4c, 0x6c33, + 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, + 0x6f0f, 0x6f02, 0x6f22, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, + 0x6f23, 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, + 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, + 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d, + 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1, 0x76e3, + 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7, 0x78b3, 0x78a9, + 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, + 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, + 0x7bb8, 0x7b87, 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, + 0x7dbd, 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, + 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, 0x7f70, 0x7fe0, + 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, 0x8180, 0x818f, 0x8188, + 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, 0x8207, 0x8214, 0x821e, 0x824b, + 0x84c9, 0x84bf, 0x84c6, 0x84c4, 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, + 0x84b8, 0x84c0, 0x84d3, 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, + 0x873b, 0x8722, 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, + 0x8902, 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6, + 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x8aaa, 0x8aa5, + 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, + 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, + 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, + 0x905d, 0x905b, 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, + 0x9278, 0x92ac, 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, + 0x92a8, 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, + 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, + 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1, + 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3, 0x9ebc, + 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9, 0x5102, 0x5108, + 0x5109, 0x5105, 0x51dc, 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, + 0x53b2, 0x562e, 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, + 0x564e, 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e, + 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb, 0x5b0b, + 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb, 0x5c64, 0x5c65, + 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2, 0x5eda, 0x5edf, 0x5edd, + 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7, 0x5fb5, 0x6176, 0x6167, 0x616e, + 0x615d, 0x6155, 0x6182, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, + 0x61ab, 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, + 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, + 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499, + 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4, 0x66b1, + 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd, 0x6a21, 0x6a13, + 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, + 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, + 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, + 0x6f58, 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, + 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, 0x747e, 0x7480, + 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, 0x7621, 0x7622, 0x769a, + 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, 0x7791, 0x778b, 0x78cb, 0x78c5, + 0x78ba, 0x78ca, 0x78be, 0x78d5, 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, + 0x7a3d, 0x7a37, 0x7a3b, 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, + 0x7bc6, 0x7bc7, 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, + 0x7dfb, 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9, + 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x7fe9, 0x8026, + 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517, 0x853d, 0x851a, + 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, + 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, + 0x8768, 0x8759, 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, + 0x8912, 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, + 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, + 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6, + 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1, 0x8d6d, + 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, + 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, + 0x8f1c, 0x8f1e, 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, + 0x912d, 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb, + 0x92b7, 0x92ea, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, 0x92c7, 0x92f0, + 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978d, + 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, 0x98b3, 0x990a, 0x9913, 0x9912, + 0x9918, 0x99dd, 0x99d0, 0x99df, 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, + 0x9ab7, 0x9aee, 0x9aef, 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, + 0x9d09, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, + 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3, + 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668, 0x5665, + 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be, 0x58c7, 0x58c5, + 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, + 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, + 0x64c1, 0x64cb, 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, + 0x64bf, 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, + 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, + 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59, + 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, + 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6, 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, + 0x71d0, 0x71d2, 0x71c8, 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, + 0x71c4, 0x7368, 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, + 0x750d, 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f, + 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e, 0x7a46, + 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4, 0x7bdb, 0x7be1, + 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, + 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, + 0x8028, 0x81b3, 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, + 0x8559, 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, + 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, + 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00, + 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed, 0x8af3, + 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44, 0x8e31, 0x8e34, + 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, + 0x9075, 0x9074, 0x9078, 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, + 0x9336, 0x92f8, 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, + 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, 0x96a8, + 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, 0x970f, 0x975b, + 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b, 0x9837, 0x982d, 0x9839, + 0x9824, 0x9910, 0x9928, 0x991e, 0x991b, 0x9921, 0x991a, 0x99ed, 0x99e2, + 0x99f1, 0x9ab8, 0x9abc, 0x9afb, 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, + 0x9d26, 0x9d28, 0x9d12, 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, + 0x511f, 0x5121, 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, + 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a, + 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c, 0x5fbd, + 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234, 0x64ce, 0x64ca, + 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, + 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, + 0x6aa3, 0x6a7e, 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, + 0x6fd8, 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, + 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, + 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370, + 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c, 0x76ea, + 0x77b3, 0x77aa, 0x77b0, 0x77ac, 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, + 0x78f4, 0x78ef, 0x7901, 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, + 0x7bfe, 0x7bf7, 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, + 0x7cd9, 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b, + 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35, 0x7e3f, + 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070, 0x806f, 0x8073, + 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf, 0x81bd, 0x81c9, 0x81be, + 0x81e8, 0x8209, 0x8271, 0x85aa, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, + 0x85af, 0x859b, 0x8587, 0x85a8, 0x858a, 0x85a6, 0x8667, 0x87c0, 0x87d1, + 0x87b3, 0x87d2, 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, + 0x8936, 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, + 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, + 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a, + 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084, 0x9081, + 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d, 0x9382, 0x9328, + 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, + 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, + 0x96d6, 0x971c, 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, + 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b, 0x9ecf, + 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2, 0x5695, 0x56ae, + 0x58d9, 0x58d8, 0x5b38, 0x5f5e, 0x61e3, 0x6233, 0x64f4, 0x64f2, 0x64fe, + 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7, 0x66dc, 0x6726, 0x6ab3, 0x6aac, + 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2, 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, + 0x7009, 0x700b, 0x6ffe, 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, + 0x71fe, 0x71f8, 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, + 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62, + 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23, 0x7c21, + 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52, 0x7e59, 0x7f48, + 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, + 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba, 0x85b9, 0x87ef, 0x87ec, 0x87f2, + 0x87e0, 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, + 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, + 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a, + 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a, 0x9397, + 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9, 0x96db, 0x96de, + 0x9724, 0x97a3, 0x97a6, 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, + 0x9853, 0x98ba, 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, + 0x9b03, 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8, + 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133, 0x56a5, + 0x56a8, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2, 0x61f7, + 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5, 0x6add, 0x6ada, + 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d, 0x7015, 0x7018, 0x7206, + 0x720d, 0x7258, 0x72a2, 0x7378, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, + 0x7586, 0x765f, 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, + 0x7c3f, 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, + 0x7e6a, 0x7e73, 0x7f85, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, + 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9, + 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58, 0x8b49, + 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, + 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, + 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, + 0x93dd, 0x93d6, 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, + 0x96b4, 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, 0x9858, + 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d, 0x9be8, 0x9be7, + 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a, 0x9d6c, 0x9e92, 0x9e97, + 0x9e93, 0x9eb4, 0x52f8, 0x56b7, 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, + 0x5b43, 0x5b7d, 0x5bf6, 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, + 0x66e6, 0x6727, 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, + 0x7662, 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c, + 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x7e82, 0x7f4c, + 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa, 0x8606, 0x860b, + 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, + 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, + 0x8e82, 0x91b4, 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, + 0x9952, 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, + 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, + 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d, + 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c, 0x721b, + 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, + 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, + 0x89bd, 0x8b74, 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, + 0x8faf, 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b, + 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957, 0x9a45, + 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d, 0x9c25, 0x9daf, + 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19, 0x9f5c, 0x9f66, 0x9f67, + 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9, 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, + 0x61ff, 0x6524, 0x6b0a, 0x6b61, 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, + 0x766e, 0x766c, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, + 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, + 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955, + 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b, 0x9dd3, + 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6, 0x6200, 0x6523, + 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, + 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, + 0x908f, 0x9463, 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, + 0x9a57, 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, + 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, + 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, 0x8b96, 0x8277, 0x8d1b, + 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744, 0x97c6, 0x9870, 0x9a5f, 0x9b22, + 0x9b58, 0x9c5f, 0x9df9, 0x9dfa, 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, + 0x5ef3, 0x6b16, 0x7063, 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, + 0x9472, 0x9470, 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, + 0x8b9a, 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, + 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f, 0x9e1a, + 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x4e42, 0x4e5c, + 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, 0x4e8d, 0x56d7, 0x5c6e, + 0x5f73, 0x4e0f, 0x5187, 0x4e0e, 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, + 0x5198, 0x52fc, 0x536c, 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, + 0x65e1, 0x6bb3, 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, + 0x4ee9, 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x5209, 0x531c, 0x534c, 0x5722, + 0x5723, 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, + 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36, 0x6c43, + 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a, 0x961e, 0x4f0e, + 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, + 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, + 0x5210, 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, + 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, + 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e, + 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4, 0x5fcf, + 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259, 0x6260, 0x625a, + 0x6265, 0x6537, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738, 0x673b, 0x673a, + 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, + 0x6c54, 0x6c4b, 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, + 0x767f, 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, + 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, 0x9620, + 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64, 0x4f3e, 0x4f67, + 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33, 0x4f3f, 0x4f61, 0x518f, + 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad, 0x52ae, 0x5309, 0x5363, 0x5372, + 0x538e, 0x538f, 0x5430, 0x5437, 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, + 0x5425, 0x5418, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, + 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, + 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f, + 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f, 0x5c88, + 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95, 0x5de0, 0x5e0a, + 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, + 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, + 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, + 0x6283, 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, + 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x65f0, 0x65f4, + 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, 0x6759, 0x6755, 0x674c, 0x6748, + 0x675d, 0x674d, 0x675a, 0x674b, 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, + 0x6c6b, 0x6c84, 0x6c8b, 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, + 0x6c87, 0x6c95, 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, + 0x707a, 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, + 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, 0x7595, + 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809c, 0x8290, + 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x828a, 0x8283, 0x8284, 0x8c78, + 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, + 0x9628, 0x962f, 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, + 0x4f87, 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, + 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, + 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232, + 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392, 0x5394, + 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b, 0x547a, 0x547e, + 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, + 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, + 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, + 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, 0x59b2, + 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, 0x59bd, 0x59c0, + 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, 0x5b95, 0x5c44, 0x5c47, + 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, + 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, + 0x5e17, 0x5e14, 0x5e19, 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, + 0x5f7e, 0x5f7d, 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, + 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d, + 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214, 0x623d, + 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca, 0x62ae, 0x62b3, + 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, + 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, + 0x65fd, 0x6611, 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, + 0x6776, 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, + 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, + 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee, + 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2, 0x6cba, + 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, + 0x6c80, 0x6cde, 0x6cc0, 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, + 0x6ce9, 0x6cd1, 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, + 0x7096, 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9, + 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1, 0x73ad, + 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8, 0x753f, 0x7540, + 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1, 0x76f0, 0x76f5, 0x77f8, + 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, + 0x7a7b, 0x7afb, 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, + 0x80b5, 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, + 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, + 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d, + 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5, 0x8fd7, + 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d, 0x963c, 0x963a, + 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, + 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, + 0x4fb9, 0x4fec, 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, + 0x5396, 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, 0x54c3, + 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, 0x54a0, 0x5470, + 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, 0x57b5, 0x579e, 0x579f, + 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, 0x5794, 0x5798, 0x578f, 0x5799, + 0x57a5, 0x579a, 0x5795, 0x58f4, 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, + 0x5a00, 0x59f1, 0x59dd, 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, + 0x59f7, 0x59db, 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, + 0x5ba8, 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x5cde, + 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf, 0x5cc8, + 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22, 0x5e23, 0x5e20, + 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, + 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, + 0x6047, 0x6049, 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, + 0x6058, 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, + 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, + 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa, + 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622, 0x6633, + 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f, 0x6710, 0x67c1, + 0x67f2, 0x67c8, 0x67ba, 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, + 0x67c5, 0x67eb, 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, + 0x67ee, 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc, + 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9, 0x67ca, + 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6, 0x6bd6, 0x6bd8, + 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d, 0x6d1f, 0x6d3c, 0x6d3f, + 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04, 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, + 0x6d00, 0x6d1d, 0x6d42, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, + 0x6d07, 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, + 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, + 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb, + 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8, 0x73c5, + 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7, 0x73be, 0x73c3, + 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, + 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, + 0x76fb, 0x76fa, 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, + 0x780f, 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, + 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, 0x7a7e, 0x7ad1, + 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, 0x7c80, 0x7c81, 0x7d03, + 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, 0x7fbe, 0x8007, 0x800e, 0x800f, + 0x8014, 0x8037, 0x80d8, 0x80c7, 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, + 0x80c5, 0x80e3, 0x80d9, 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, + 0x80e6, 0x80cd, 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, + 0x82e8, 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1, + 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x82e4, 0x82e0, + 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673, 0x8841, 0x884e, + 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, + 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, + 0x90cb, 0x90c8, 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, + 0x964e, 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, + 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, + 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca, + 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e, 0x525f, + 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2, 0x5517, 0x5512, + 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, + 0x5505, 0x54f1, 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, + 0x550b, 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6, + 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9, 0x57c1, + 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15, 0x5a0f, 0x5a17, + 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad, 0x5bac, 0x5c03, 0x5c56, + 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1, 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, + 0x5e28, 0x5ea8, 0x5eae, 0x5eaa, 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, + 0x605a, 0x6067, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, + 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, + 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4, + 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358, 0x6354, + 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338, 0x6357, 0x6340, + 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, + 0x6647, 0x6651, 0x6712, 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, + 0x683b, 0x684b, 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, + 0x682f, 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, + 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, + 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, 0x6be8, 0x6be3, 0x6be2, + 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64, 0x6d76, 0x6d0d, 0x6d61, 0x6d92, + 0x6d58, 0x6d62, 0x6d6d, 0x6d6f, 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, + 0x6d5e, 0x6d67, 0x6d60, 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, + 0x6d2f, 0x6d68, 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, + 0x6d7d, 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39, + 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5, 0x70c6, + 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x7277, 0x7276, 0x7300, + 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, + 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, + 0x73d4, 0x73dd, 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, + 0x74f5, 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, + 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, + 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823, + 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821, 0x7829, + 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c, 0x7953, 0x7952, + 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, + 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, + 0x7b10, 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09, + 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85, 0x7d1e, + 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f, 0x7d12, 0x7d0f, + 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d, 0x7f5b, 0x7f96, 0x7f92, + 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e, 0x8039, 0x80fa, 0x80f2, 0x80f9, + 0x80f5, 0x8101, 0x80fb, 0x8100, 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, + 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, + 0x8322, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, + 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353, + 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2, 0x86a8, + 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686, 0x868b, 0x869a, + 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, + 0x8690, 0x8694, 0x8843, 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, + 0x8871, 0x887f, 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, + 0x8c57, 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, + 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, + 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8, + 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, 0x914e, 0x914f, 0x91d5, 0x91e2, + 0x91da, 0x965c, 0x965f, 0x96bc, 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, + 0x506a, 0x5061, 0x505e, 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, + 0x504d, 0x5041, 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, + 0x506b, 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051, + 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d, 0x539c, + 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a, 0x5551, 0x5562, + 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x550c, 0x5532, 0x5565, 0x554e, + 0x5539, 0x5548, 0x552d, 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, + 0x5814, 0x57e2, 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, + 0x57f8, 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, + 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, + 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67, + 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c, 0x5a53, + 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, + 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, + 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, + 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, + 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1, 0x5eb4, + 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96, 0x5f9f, 0x608a, + 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3, 0x60d4, 0x60cf, 0x60e4, + 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db, 0x60b7, 0x60ca, 0x60bf, 0x60c3, + 0x60cd, 0x60c0, 0x6332, 0x6365, 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, + 0x63ad, 0x639d, 0x6397, 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, + 0x63af, 0x6375, 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, + 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665, + 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890, + 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f, 0x68a3, 0x68ac, + 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, + 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, + 0x6889, 0x68a4, 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, + 0x6b33, 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, + 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, + 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5, + 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0, 0x6dba, + 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, + 0x6dcd, 0x6de3, 0x6dbb, 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, + 0x70f0, 0x7104, 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, + 0x70f8, 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f, + 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff, 0x730f, + 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401, 0x73fd, 0x7407, + 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b, 0x73f4, 0x7408, 0x7564, + 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, + 0x7689, 0x76d3, 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, + 0x773d, 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, + 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, + 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94, + 0x7a90, 0x7b35, 0x7b3b, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24, 0x7b33, + 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, + 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, + 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, + 0x7d4a, 0x7d3b, 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, + 0x7fcb, 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, 0x801e, + 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, 0x811b, 0x812d, + 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127, 0x811d, 0x8122, 0x8211, + 0x8238, 0x8233, 0x823a, 0x8234, 0x8232, 0x8274, 0x8390, 0x83a3, 0x83a8, + 0x838d, 0x837a, 0x8373, 0x83a4, 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, + 0x8375, 0x8394, 0x83a9, 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, + 0x838b, 0x837e, 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, + 0x8387, 0x83ae, 0x8376, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x86c2, 0x86c1, + 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8, 0x86cc, 0x86b4, + 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, + 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, + 0x889b, 0x8897, 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, + 0x89d9, 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, + 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, + 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1, + 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea, 0x90f0, + 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9, 0x9156, 0x9158, + 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, + 0x91f9, 0x91ea, 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, + 0x967c, 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5, + 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083, 0x508c, + 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087, 0x515f, 0x51d4, + 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8, 0x55a5, 0x55ad, 0x5577, + 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f, 0x55b5, 0x5581, 0x55a3, 0x5592, + 0x55a4, 0x557d, 0x558c, 0x55a6, 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, + 0x5829, 0x5837, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, + 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, + 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2, + 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae, 0x5a37, + 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, + 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, + 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, + 0x5d3f, 0x5d35, 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, + 0x5d31, 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, + 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, + 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, 0x60f2, 0x610a, 0x6116, + 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc, 0x60fe, 0x60c1, 0x6103, 0x6118, + 0x611d, 0x6110, 0x60ff, 0x6104, 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, + 0x63ce, 0x63e5, 0x63e8, 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, + 0x63f6, 0x63d5, 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, + 0x63c4, 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0, + 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568, 0x6565, + 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x667c, 0x666c, 0x667b, + 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, + 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, + 0x68e4, 0x68f6, 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, + 0x6970, 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, + 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, + 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7, + 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95, 0x6bbd, + 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47, 0x6e1f, 0x6e49, + 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, + 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, + 0x6e5e, 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b, + 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64, 0x6e77, + 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a, 0x7120, 0x711e, + 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125, 0x7122, 0x7132, 0x711f, + 0x7128, 0x713a, 0x711b, 0x724b, 0x725a, 0x7288, 0x7289, 0x7286, 0x7285, + 0x728b, 0x7312, 0x730b, 0x7330, 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, + 0x732d, 0x7326, 0x7323, 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, + 0x7416, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, + 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1, + 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da, 0x7746, + 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b, 0x774c, 0x77de, + 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, + 0x7870, 0x7869, 0x7868, 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, + 0x7a02, 0x7a0a, 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, + 0x7b47, 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, + 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, + 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51, + 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, + 0x7fd7, 0x8051, 0x804f, 0x8050, 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, + 0x814f, 0x8147, 0x813d, 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, + 0x81f9, 0x8204, 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, + 0x8423, 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410, + 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5, 0x83d8, + 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9, 0x8409, 0x840f, + 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x83d5, 0x83fa, 0x83c7, 0x83d1, + 0x83ea, 0x8413, 0x839a, 0x83c3, 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, + 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, + 0x86da, 0x86ea, 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, + 0x86d1, 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, + 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, + 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59, + 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51, 0x8a4a, + 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, + 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, + 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, + 0x8efa, 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, + 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f, 0x9106, + 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb, 0x9101, 0x9100, + 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, 0x9162, 0x9160, 0x9201, + 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, 0x920f, 0x920c, 0x9200, 0x9212, + 0x91ff, 0x91fd, 0x9206, 0x9204, 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, + 0x9217, 0x9205, 0x9216, 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, + 0x9688, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, + 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83, + 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca, 0x50b4, + 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb, 0x50c9, 0x50b6, + 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, + 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, + 0x55d2, 0x558d, 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, + 0x55d9, 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, + 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, + 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5, + 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, + 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, + 0x5d71, 0x5d63, 0x5d4a, 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, + 0x5d62, 0x5df0, 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, + 0x5ec6, 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, + 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, 0x6129, + 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, 0x63f1, 0x63eb, + 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, 0x6443, 0x641f, 0x6415, + 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, + 0x6441, 0x6435, 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, + 0x63e7, 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, + 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, + 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a, + 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935, 0x696c, + 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969, 0x6940, 0x696f, + 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, + 0x695c, 0x694f, 0x6951, 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, + 0x6b45, 0x6b43, 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0x6bfb, 0x6bfc, 0x6bf9, + 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, 0x6e9f, 0x6e93, + 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, 0x6ebd, 0x6ec1, 0x6e9e, + 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, + 0x6edc, 0x6ed8, 0x6e99, 0x6e92, 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, + 0x6eb3, 0x6ed0, 0x6eca, 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, + 0x7163, 0x7160, 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, + 0x7142, 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x7144, + 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e, 0x733c, + 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444, 0x744a, 0x744b, + 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, + 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, + 0x6983, 0x75ef, 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, + 0x7610, 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, + 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, + 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895, + 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, 0x787b, + 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19, 0x7a12, 0x7a17, + 0x7a15, 0x7a22, 0x7a13, 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, + 0x7b66, 0x7b64, 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, + 0x7b70, 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, + 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, 0x7d83, + 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, 0x7f6b, 0x7f67, + 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, 0x7fdc, 0x8021, 0x8164, + 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, 0x8162, 0x8172, 0x6721, 0x815e, + 0x8176, 0x8167, 0x816f, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, + 0x8242, 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, + 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, + 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434, + 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b, 0x842f, + 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c, 0x8452, 0x846f, + 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, + 0x842b, 0x8460, 0x8454, 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, + 0x86fa, 0x86d6, 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, + 0x870d, 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, + 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, 0x89e1, 0x89e0, + 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, 0x8a61, 0x8a3f, 0x8a77, + 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, + 0x8c4a, 0x8c65, 0x8c64, 0x8c66, 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, + 0x8d69, 0x8d91, 0x8d8c, 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, + 0x8d92, 0x8df0, 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, + 0x8de2, 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, + 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044, 0x9049, + 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114, 0x910b, 0x910e, + 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, + 0x925e, 0x9283, 0x922e, 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, + 0x9267, 0x926f, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, + 0x9272, 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, + 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, + 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac, + 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab, 0x9b5b, + 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4, 0x50d7, 0x50e8, + 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, + 0x50e3, 0x50e0, 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, + 0x5627, 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, + 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, 0x5890, + 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, 0x5887, 0x5891, + 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, 0x588f, 0x58fe, 0x596b, + 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, 0x5ada, 0x5aed, 0x5aeb, 0x5af3, + 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, + 0x5b77, 0x5be0, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, + 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, + 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc, + 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6, 0x612c, + 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153, 0x6172, 0x616c, + 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, + 0x6156, 0x6229, 0x6227, 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, + 0x6476, 0x6472, 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, + 0x645e, 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, + 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, + 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, 0x69a0, 0x69ce, 0x6996, + 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, 0x698e, 0x69a7, 0x698d, 0x69a9, + 0x69be, 0x69af, 0x69bf, 0x69c4, 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, + 0x699a, 0x69cf, 0x69b3, 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, + 0x6990, 0x69c2, 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, + 0x6b9f, 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, + 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, 0x6f1a, + 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36, 0x6f73, 0x6ef9, + 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, + 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, + 0x6f0d, 0x6f1e, 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, + 0x7182, 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, + 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, + 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590, + 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8, 0x7781, + 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e, 0x7783, 0x78b2, + 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, + 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, + 0x7993, 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, + 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, 0x7b8a, + 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, 0x7b85, 0x7b98, + 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, 0x7cbc, 0x7cba, 0x7da7, + 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, + 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, + 0x7da6, 0x7dae, 0x7da9, 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, + 0x7fde, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, + 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce, + 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd, 0x84aa, + 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2, 0x8494, 0x84c7, + 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, + 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, + 0x8723, 0x8728, 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, + 0x8743, 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, + 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, + 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa, + 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, 0x88f0, 0x88ec, 0x88eb, 0x899d, + 0x89a1, 0x899f, 0x899e, 0x89e9, 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, + 0x8a92, 0x8a8f, 0x8a96, 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, + 0x8d96, 0x8e09, 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, + 0x8e06, 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, + 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, 0x9121, + 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, 0x9276, 0x929b, + 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6, 0x929a, 0x92ab, 0x9279, + 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, + 0x9288, 0x92a1, 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, + 0x92a9, 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, + 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, + 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d, + 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7, 0x9ab1, + 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, + 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, + 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, + 0x5648, 0x5642, 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, + 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, 0x563a, + 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, 0x58ac, 0x58a5, + 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, 0x5af6, 0x5b03, 0x5af8, + 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, 0x5b0f, 0x5c67, 0x5d99, 0x5d97, + 0x5d9f, 0x5d92, 0x5da2, 0x5d93, 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, + 0x5d9e, 0x5e69, 0x5e5d, 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, + 0x5f49, 0x5fb2, 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, + 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d, + 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485, 0x6497, + 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f, 0x6468, 0x64b1, + 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, + 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, + 0x69f8, 0x6a15, 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, + 0x6a1d, 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, + 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, + 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5, + 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41, 0x6f26, + 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, + 0x6f85, 0x6f5a, 0x6f96, 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, + 0x6f50, 0x6f57, 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, + 0x6f67, 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, + 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, 0x71a9, + 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, 0x719c, 0x71a7, + 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e, 0x735f, 0x7360, 0x735d, + 0x735b, 0x7361, 0x735a, 0x7359, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, + 0x7481, 0x747d, 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, + 0x7625, 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, + 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, + 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4, + 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76, 0x7a39, + 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac, 0x7bce, 0x7baf, + 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, + 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, + 0x7df0, 0x7dee, 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, + 0x7fea, 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, 0x819e, + 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, 0x8252, 0x8250, + 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, 0x8529, 0x850e, 0x8509, + 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, 0x84fb, 0x852b, 0x84fa, 0x8508, + 0x850c, 0x84f4, 0x852a, 0x84f2, 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, + 0x8512, 0x84ea, 0x84e9, 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, + 0x84fd, 0x851e, 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, + 0x84f9, 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756, + 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b, 0x8752, + 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750, 0x874e, 0x875f, + 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, + 0x8775, 0x8762, 0x8767, 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, + 0x8917, 0x8918, 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, + 0x89a4, 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, + 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, + 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf, + 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1, 0x8d9b, + 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b, 0x8e16, 0x8e11, + 0x8e19, 0x8e26, 0x8e27, 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, + 0x8e1a, 0x8f2c, 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, + 0x9073, 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a, + 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182, 0x9184, + 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6, 0x92cf, 0x92f1, + 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc, 0x92ef, 0x92c2, 0x92e8, + 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd, 0x92d5, 0x92c9, 0x92e0, 0x92de, + 0x92e7, 0x92d1, 0x92d3, 0x92b5, 0x92e1, 0x9325, 0x92c6, 0x92b4, 0x957c, + 0x95ac, 0x95ab, 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, + 0x9702, 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, + 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, + 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3, + 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc, 0x9ab3, + 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43, 0x9b67, 0x9b74, + 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, + 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, + 0x9d05, 0x9d04, 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, + 0x511a, 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, 0x5673, + 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c, 0x571b, 0x58c8, + 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc, 0x58c6, 0x5b17, 0x5b19, + 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10, 0x5b16, 0x5b28, 0x5b1a, 0x5b20, + 0x5b1e, 0x5bef, 0x5dac, 0x5db1, 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, + 0x5daa, 0x5da8, 0x5db2, 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, + 0x5e6f, 0x5ee9, 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x5fbb, + 0x619d, 0x61a8, 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, + 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd, + 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c, 0x65a2, + 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd, 0x66bb, 0x66ba, + 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, + 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, + 0x6a41, 0x6a6a, 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, + 0x6a3c, 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, + 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, + 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4, + 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba, 0x6fac, + 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, + 0x6fb2, 0x6fb0, 0x71c5, 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, + 0x71cb, 0x71d4, 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, + 0x71da, 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365, + 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495, 0x74a1, + 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633, 0x763c, 0x7635, + 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d, 0x77a1, 0x779c, 0x779b, + 0x77a2, 0x77a3, 0x7795, 0x7799, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, + 0x78de, 0x78e3, 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, + 0x7a44, 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, + 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, + 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7, + 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20, 0x7e13, + 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, + 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, + 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, + 0x81b0, 0x81ac, 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, + 0x8257, 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, 0x8540, + 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, 0x853e, + 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555, 0x8567, 0x8560, 0x858c, + 0x8566, 0x855d, 0x8554, 0x8565, 0x856c, 0x8663, 0x8665, 0x8664, 0x87a4, + 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, 0x8788, 0x8781, 0x8796, 0x8798, + 0x8779, 0x8787, 0x87a3, 0x8785, 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, + 0x879c, 0x879a, 0x8789, 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, + 0x8931, 0x8922, 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, + 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0, + 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91, 0x8c92, + 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, + 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, + 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, + 0x8f37, 0x8f34, 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, + 0x9136, 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, + 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, + 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9313, + 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329, 0x9339, 0x9335, + 0x932a, 0x9314, 0x930c, 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, + 0x95bc, 0x95cd, 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, + 0x96a9, 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0, + 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929, 0x999e, + 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea, 0x99e9, 0x99e7, + 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa, 0x9af9, 0x9af7, 0x9b33, + 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, 0x9b7b, 0x9b82, 0x9b93, 0x9b92, + 0x9b90, 0x9b7a, 0x9b95, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, + 0x9d14, 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, + 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, + 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c, + 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681, 0x58d6, + 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23, 0x5b2c, 0x5b27, + 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, + 0x5fbe, 0x61c3, 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, + 0x61de, 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, + 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, + 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, 0x6a95, 0x6a83, 0x6aa8, + 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a, 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, + 0x6bad, 0x6c09, 0x6fcc, 0x6fa9, 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, + 0x6fe7, 0x6fe6, 0x6fde, 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, + 0x71e8, 0x71f2, 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, + 0x74b2, 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510, + 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, 0x76a4, + 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x77b4, 0x77b1, 0x77a8, + 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc, 0x78ff, 0x78f2, 0x7905, + 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, + 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, + 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, + 0x7c01, 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, + 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, + 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45, + 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4, 0x81cc, + 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a, 0x825c, 0x8583, + 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, + 0x859a, 0x859e, 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, + 0x858e, 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582, + 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, 0x87be, + 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, 0x87bc, 0x87ae, + 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, 0x87c4, 0x87ca, 0x87b4, + 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, 0x87b2, 0x8935, 0x8933, 0x893c, + 0x893e, 0x8941, 0x8952, 0x8937, 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, + 0x89f3, 0x8b1e, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, + 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, + 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f, + 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40, 0x9085, + 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f, 0x91a1, 0x919d, + 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, + 0x935c, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, + 0x936a, 0x9379, 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, + 0x9361, 0x935e, 0x9363, 0x9367, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, + 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718, + 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, 0x979e, 0x979d, 0x97d5, 0x97d4, + 0x97f1, 0x9841, 0x9844, 0x984a, 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, + 0x992c, 0x992a, 0x9933, 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, + 0x99a3, 0x99a1, 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, + 0x99fb, 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01, + 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1, 0x9ba5, + 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, 0x9d67, 0x9d36, + 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, + 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, + 0x9ec8, 0x9eda, 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, + 0x5131, 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, + 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, + 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff, + 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db, 0x66da, + 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, + 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, + 0x700d, 0x7001, 0x7005, 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, + 0x6ffc, 0x6ff7, 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, + 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2, 0x7514, + 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765a, 0x76a6, + 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x790c, 0x7913, 0x7914, 0x7909, 0x7910, + 0x7912, 0x7911, 0x79ad, 0x79ac, 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, + 0x7c1f, 0x7c2d, 0x7c1d, 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, + 0x7e50, 0x7e56, 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, + 0x7e53, 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x81d0, + 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3, 0x85b5, + 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8, 0x85c5, 0x85b1, + 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, + 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, + 0x87dc, 0x87d3, 0x87ed, 0x87d8, 0x87e3, 0x87d7, 0x87d9, 0x8801, 0x87f4, + 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, + 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f, + 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e, 0x8b24, + 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98, 0x8c97, 0x8cfe, + 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, + 0x8e65, 0x8e67, 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, + 0x8f47, 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5, + 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b, 0x939d, + 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395, 0x9388, 0x9399, + 0x939f, 0x9380, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4, 0x93a8, 0x93b4, + 0x93a3, 0x95d2, 0x95d3, 0x95d1, 0x96b3, 0x96d7, 0x96da, 0x5dc2, 0x96df, + 0x96d8, 0x96dd, 0x9723, 0x9722, 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, + 0x97a4, 0x97aa, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, + 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, + 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0, + 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c, 0x9b4b, + 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, + 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, + 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, + 0x9e8e, 0x9e8c, 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, + 0x9f29, 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, + 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, + 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, 0x5fbf, 0x61fb, 0x6507, + 0x6510, 0x650d, 0x6509, 0x650c, 0x650e, 0x6584, 0x65de, 0x65dd, 0x66de, + 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1, 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, + 0x6aeb, 0x6acf, 0x6acd, 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, + 0x7020, 0x7016, 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, + 0x701c, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6, 0x72a4, + 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516, 0x7660, 0x77c9, + 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x7921, 0x791c, 0x7917, 0x791e, + 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, + 0x7cea, 0x7e76, 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, + 0x7e74, 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, + 0x8078, 0x81d7, 0x81d5, 0x820b, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, + 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, + 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de, + 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c, 0x880b, + 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962, 0x895a, 0x895b, + 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, + 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, + 0x8b55, 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a, + 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d, 0x8e78, + 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51, 0x8f4f, 0x8f50, + 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad, 0x93de, 0x93c7, 0x93cf, + 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec, 0x93cc, 0x93d9, 0x93a9, 0x93e6, + 0x93ca, 0x93d4, 0x93ee, 0x93e3, 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, + 0x93a5, 0x93e7, 0x957d, 0x95da, 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, + 0x9728, 0x9726, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, + 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, + 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b, + 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2, 0x9b0b, + 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0, 0x9bde, 0x9be4, + 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, + 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, + 0x9d80, 0x9d78, 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, + 0x9d70, 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, + 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, + 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, 0x56b5, 0x56b3, 0x58e3, + 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef, 0x5fc0, 0x5fc1, 0x61f9, 0x6517, + 0x6516, 0x6515, 0x6513, 0x65df, 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, + 0x6aea, 0x6ae8, 0x6af9, 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, + 0x7037, 0x7034, 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x702a, + 0x7040, 0x703b, 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, + 0x74ba, 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, + 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2, 0x7a6e, + 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47, 0x7c45, 0x7cee, + 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, + 0x8268, 0x8269, 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, + 0x8604, 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, + 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, + 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84, + 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143, 0x9141, + 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb, 0x9420, 0x940f, + 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, + 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x943c, + 0x940a, 0x93ff, 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, + 0x95df, 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, + 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, 0x994b, + 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, 0x9a29, 0x9a2e, + 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, 0x9b12, 0x9b11, 0x9c0b, + 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, 0x9c40, 0x9c07, 0x9c0e, 0x9c06, + 0x9c17, 0x9c14, 0x9c09, 0x9d9f, 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, + 0x9d90, 0x9d9b, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, + 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, + 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e, + 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139, 0x5298, + 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, + 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, + 0x704a, 0x7048, 0x7049, 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, + 0x7517, 0x766a, 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, + 0x7e8a, 0x7e87, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, + 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, + 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, 0x8829, 0x881d, 0x881b, + 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, 0x896d, 0x8969, 0x896e, 0x896b, + 0x89fa, 0x8b79, 0x8b78, 0x8b45, 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, + 0x8e8e, 0x8e8c, 0x8f5e, 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, + 0x943f, 0x943b, 0x9436, 0x9429, 0x943d, 0x9430, 0x9439, 0x942a, 0x9437, + 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, 0x97bf, + 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, 0x9a39, 0x9a3d, + 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, + 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, + 0x9c28, 0x9c29, 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, + 0x9dca, 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, + 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, + 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31, + 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb, 0x5971, + 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520, 0x6526, 0x6522, + 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, + 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, + 0x7935, 0x79b4, 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, + 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634, 0x8635, + 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826, 0x882a, 0x8825, + 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, 0x8b82, 0x8b86, 0x8b85, + 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, 0x8e92, 0x8e90, 0x8e96, 0x8e97, + 0x8f60, 0x8f62, 0x9147, 0x944c, 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, + 0x9445, 0x9448, 0x9449, 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, + 0x9954, 0x995b, 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, + 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55, + 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c, 0x9c37, + 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, + 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, + 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, + 0x9f95, 0x9fa2, 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, + 0x882f, 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, + 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, + 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640, + 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e, 0x8833, + 0x8976, 0x8974, 0x8973, 0x89fe, 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, + 0x8d19, 0x8e98, 0x8f64, 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, + 0x945e, 0x97c4, 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, + 0x9c52, 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, + 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, 0x9df6, + 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, 0x9df4, 0x9df3, + 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, 0x9f06, 0x9f1c, 0x9f38, + 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, + 0x56cd, 0x5b4e, 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, + 0x705d, 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, + 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, + 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2, + 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7, 0x97e5, + 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62, 0x9c5e, 0x9c60, + 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, + 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, + 0x56d4, 0x652e, 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, + 0x72aa, 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, 0x7e98, + 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, 0x8979, 0x897a, + 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, 0x8ea4, 0x8ea3, 0x946e, + 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, 0x9872, 0x995f, 0x9c68, 0x9c6e, + 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, + 0x9f09, 0x9f47, 0x9f78, 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, + 0x883c, 0x8db2, 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, + 0x9b2e, 0x9c74, 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, + 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e, + 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961, 0x99ab, + 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48, 0x6207, 0x6b1e, + 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9e19, + 0x864b, 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, + 0x7069, 0x706a, 0x7229, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x4e28, 0x4e36, 0x4e3f, 0x4e85, + 0x4e05, 0x4e04, 0x5182, 0x5196, 0x5338, 0x5369, 0x53b6, 0x4e2a, 0x4e87, + 0x4e49, 0x51e2, 0x4e46, 0x4e8f, 0x4ebc, 0x4ebe, 0x5166, 0x51e3, 0x5204, + 0x529c, 0x5344, 0x5902, 0x590a, 0x5b80, 0x5ddb, 0x5e7a, 0x5e7f, 0x5ef4, + 0x5f50, 0x5f51, 0x5f61, 0x961d, 0x000b, 0x4e63, 0x4e62, 0x4ea3, 0x5185, + 0x4ec5, 0x4ecf, 0x4ece, 0x4ecc, 0x5184, 0x5186, 0xf817, 0x34c5, 0x51e4, + 0x5205, 0x529e, 0x529d, 0x52fd, 0x5300, 0x533a, 0x3539, 0x5346, 0x535d, + 0x5386, 0x53b7, 0x3555, 0x53cc, 0x355b, 0x53ce, 0x5721, 0x37a2, 0x5e00, + 0x5f0c, 0x6237, 0x6238, 0x6534, 0x6535, 0x65e0, 0x3e26, 0x738d, 0x4e97, + 0x4ee0, 0x3432, 0x01a9, 0x4ee7, 0x3433, 0x4ee6, 0x3434, 0x36a2, 0x3431, + 0x34b0, 0x56d8, 0x518b, 0x518c, 0x5199, 0x51e5, 0xf850, 0x520b, 0x34dc, + 0x361e, 0x5304, 0x5303, 0x5307, 0xf82a, 0x531e, 0x535f, 0x536d, 0x5389, + 0x53ba, 0x53d0, 0x3565, 0x53f6, 0x53f7, 0x53f9, 0x3564, 0x53f4, 0x361d, + 0x3626, 0x5724, 0x5904, 0x5918, 0x5932, 0x5930, 0x5934, 0x368e, 0x5975, + 0x374a, 0x5b82, 0x5bf9, 0x5c14, 0x378b, 0x37a6, 0x37a4, 0x37a5, 0x37a7, + 0x382f, 0x3832, 0x5e81, 0x5e83, 0x5f0d, 0x5f52, 0x38d4, 0x5fca, 0x5fc7, + 0x6239, 0x39c5, 0x624f, 0x65e7, 0x672f, 0x6b7a, 0x6c39, 0x3cba, 0x3cb9, + 0x6c37, 0x6c44, 0x6c45, 0x738c, 0x7592, 0x7676, 0x9093, 0x9092, 0x48b3, + 0x49ba, 0x4e21, 0x4e20, 0x4e22, 0x4e68, 0x4e89, 0x4e98, 0x4ef9, 0x4eef, + 0x343b, 0x343c, 0x4ef8, 0x4f06, 0x4f03, 0x4efc, 0x4eee, 0x4f16, 0x3439, + 0x4f28, 0x4f1c, 0x4f07, 0x4f1a, 0x4efa, 0x4f17, 0x514a, 0x34b2, 0x5172, + 0xf815, 0x51b4, 0x51b3, 0x51b2, 0x34c7, 0x51e8, 0x342b, 0x5214, 0x520f, + 0x5215, 0x5218, 0x52a8, 0xf82c, 0x534b, 0x534f, 0x353b, 0x5350, 0x3544, + 0x538b, 0x3542, 0x53be, 0x355c, 0x53d2, 0x5416, 0x53ff, 0x3567, 0x5400, + 0x3566, 0x5405, 0x5413, 0x5415, 0xf83b, 0x361f, 0x56e3, 0x5735, 0x5736, + 0x5731, 0x5732, 0x58ee, 0x5905, 0x4e54, 0x368f, 0x5936, 0x3690, 0x36a8, + 0x36a4, 0x597a, 0x36a3, 0x5986, 0x373d, 0x374c, 0x5b86, 0x5f53, 0x5c18, + 0x378c, 0x5c3d, 0x5c78, 0x37a8, 0x37ad, 0x37af, 0x1d46, 0x5c80, 0x3829, + 0x5e08, 0x3836, 0x3871, 0x3870, 0x386f, 0x5ef5, 0x5f0e, 0x38a9, 0x38aa, + 0x38fb, 0x5fd3, 0x5fda, 0x38fc, 0x5fdb, 0x39ae, 0x620f, 0x625d, 0x625f, + 0x6267, 0x6257, 0x9f50, 0x3ac3, 0x65eb, 0x65ea, 0x3b30, 0x6737, 0x3b41, + 0x6732, 0x6736, 0x6b22, 0x6bce, 0x3c8c, 0x6c58, 0x6c51, 0x6c77, 0x6c3c, + 0x3cbb, 0x6c5a, 0x3c86, 0x6c53, 0x706f, 0x7072, 0x706e, 0xf835, 0x3da1, + 0x7073, 0x72b1, 0x72b2, 0x3ea8, 0x738f, 0x3eaa, 0x3eab, 0x4096, 0x793c, + 0x41c2, 0x808d, 0x808e, 0x4493, 0x827b, 0x4494, 0x8d71, 0x8fb9, 0x9096, + 0x909a, 0x49bb, 0x4e24, 0x4e71, 0xf81b, 0x4e9c, 0x4f45, 0x4f4a, 0x4f39, + 0x4f37, 0x3443, 0x4f32, 0x4f42, 0x3442, 0x4f44, 0x4f4b, 0x3444, 0x4f40, + 0x4f35, 0x4f31, 0x5151, 0xf80e, 0x5150, 0x514e, 0x34b3, 0x34b7, 0x519d, + 0x34c8, 0x51b5, 0x51b8, 0x51ec, 0x5223, 0x5227, 0x5226, 0x521f, 0x522b, + 0x5220, 0x52b4, 0x52b3, 0x3518, 0x5325, 0x533b, 0x5374, 0x3547, 0x3546, + 0x3545, 0x356b, 0x3569, 0x544d, 0x3572, 0x3571, 0x543a, 0x356c, 0x356f, + 0x5444, 0x544c, 0x5423, 0x541a, 0x5432, 0x544b, 0x5421, 0x3573, 0x5434, + 0x5449, 0x5450, 0x5422, 0x543f, 0x5451, 0x545a, 0x542f, 0x3576, 0x56e9, + 0x56f2, 0x56f3, 0x56ef, 0x56ed, 0x56ec, 0x56e6, 0x5748, 0x3627, 0x5744, + 0x573f, 0x573c, 0x5753, 0x5756, 0x3630, 0x575f, 0x5743, 0x5758, 0x5757, + 0x3629, 0x362a, 0x362f, 0x5746, 0x362c, 0x573d, 0x362d, 0x5742, 0x5754, + 0x5755, 0x58f1, 0x58f2, 0x58f0, 0x590b, 0x9ea6, 0x56f1, 0x593d, 0x3693, + 0x5994, 0x598c, 0x36ad, 0x599c, 0x36ac, 0x36ab, 0x599f, 0x36a9, 0x599b, + 0x36ae, 0x5989, 0x599a, 0x36aa, 0x6588, 0x374e, 0x5b8d, 0x3750, 0x5bfe, + 0x5bff, 0x5bfd, 0x5c2b, 0x37b2, 0x5c84, 0x5c8e, 0x5c9c, 0x37b5, 0x37b6, + 0x5c85, 0x5df5, 0x5e09, 0x3839, 0x383b, 0x5e0b, 0x3872, 0x5e92, 0x5e90, + 0x5f03, 0x38ac, 0x5f1e, 0x5f63, 0x3908, 0x5fe7, 0x5ffe, 0x5fe6, 0x5fdc, + 0x5fce, 0x3903, 0x5ffc, 0x5fdf, 0x5fec, 0x5ff6, 0x25d7, 0x5ff2, 0x5ff0, + 0x5ff9, 0x390b, 0x6213, 0x39af, 0xf8b2, 0x623b, 0x623c, 0x6282, 0x39ce, + 0x39cb, 0x39cc, 0x6278, 0x628b, 0x39cd, 0x629e, 0x62a5, 0x629b, 0x629c, + 0x6299, 0x628d, 0x6285, 0x629d, 0x6275, 0x3a80, 0x3aaf, 0x3ad3, 0x65f6, + 0x3ad5, 0x3ad4, 0x3ad7, 0x66f5, 0x675b, 0x3b42, 0x6754, 0x6752, 0x3b44, + 0x6758, 0x6744, 0x674a, 0x6761, 0x3cc6, 0x6c7f, 0x6c91, 0x6c9e, 0x3cc0, + 0x6c6e, 0x6c7c, 0x6c9f, 0x6c75, 0x3cbe, 0x6c56, 0x6ca2, 0x6c79, 0x3cca, + 0x6ca1, 0x3cc4, 0x6caa, 0x6ca0, 0x3cc2, 0x7079, 0x7077, 0x707e, 0x3da4, + 0x7075, 0x707b, 0x7264, 0x3e29, 0x72bb, 0x72bc, 0x72c7, 0x72b9, 0x72be, + 0x72b6, 0x3e60, 0x3e5e, 0x7398, 0x3ead, 0x3eae, 0x3eac, 0x3f57, 0x7593, + 0x7680, 0x3fdd, 0x7683, 0x76c0, 0x76c1, 0x400e, 0x4097, 0x77f4, 0x77f5, + 0x4127, 0x7acc, 0x7acd, 0x7cfa, 0x809f, 0x8091, 0x8097, 0x8094, 0x4495, + 0x8286, 0x828c, 0xf98f, 0x8295, 0x4498, 0x866c, 0x459d, 0x8fb5, 0x8fbe, + 0x8fc7, 0x488a, 0x8fc1, 0x90a9, 0x90a4, 0x48b5, 0x48b6, 0x48b7, 0x90a8, + 0x9627, 0x9626, 0x962b, 0x9633, 0x9634, 0x9629, 0x4e3d, 0x3428, 0x4e9d, + 0x4f93, 0x4f8a, 0x344d, 0x3449, 0x4f6d, 0x4f8e, 0x4fa0, 0x4fa2, 0x4fa1, + 0x4f9f, 0x4fa3, 0x0209, 0x4f72, 0x3451, 0x4f8c, 0x5156, 0xf80f, 0xf811, + 0x5190, 0x34cb, 0x34ca, 0x34cc, 0x51ed, 0x51fe, 0x522f, 0x06ec, 0x523c, + 0x5234, 0x5239, 0x52b9, 0x52b5, 0x52bf, 0x5355, 0x353d, 0x5376, 0x537a, + 0x5393, 0x3548, 0x53c1, 0x53c2, 0x53d5, 0x5485, 0x3578, 0x545f, 0x5493, + 0x5489, 0x5479, 0x9efe, 0x548f, 0x5469, 0x546d, 0x357a, 0x5494, 0x546a, + 0x548a, 0x3577, 0x56fd, 0x56fb, 0x56f8, 0x3621, 0x56fc, 0x56f6, 0x5765, + 0x5781, 0x5763, 0x5767, 0x3631, 0x576e, 0x5778, 0x577f, 0x3633, 0x3634, + 0x58f3, 0x594b, 0x594c, 0x36c1, 0x36b0, 0x36b4, 0x59ad, 0x36b8, 0x59c4, + 0x36bc, 0x59c2, 0x59b0, 0x36bf, 0x36b5, 0x36b1, 0x36bd, 0x59bf, 0x36bb, + 0x59c9, 0x59b8, 0x59ac, 0x36b3, 0x36b6, 0x36ba, 0x59b7, 0x59d7, 0x36b7, + 0x5b60, 0x3740, 0x5b96, 0x5b9e, 0x5b94, 0x5b9f, 0x5b9d, 0x3752, 0x5c00, + 0x5c19, 0x3790, 0x3791, 0x5c49, 0x5c4a, 0x37be, 0x5cbb, 0x5cc1, 0x37c0, + 0x37c1, 0x37b9, 0x5cb9, 0x5c9e, 0x5cb4, 0x5cba, 0x5df6, 0x5e13, 0x5e12, + 0x5e77, 0x3879, 0x5e98, 0x387b, 0x5e99, 0x5e9d, 0x5ef8, 0x38a0, 0x5ef9, + 0x3429, 0x5f06, 0x5f21, 0x38ae, 0x5f25, 0x5f55, 0x38cd, 0x38cb, 0x38d9, + 0x5f84, 0x5f83, 0x6030, 0x6007, 0x390c, 0x6036, 0x3901, 0x3905, 0x3902, + 0x5fe9, 0x603d, 0x6008, 0x3913, 0x3911, 0x62ba, 0x62b2, 0x39e4, 0x62b7, + 0x62e4, 0x62a7, 0x39da, 0x39d5, 0x39d3, 0x62d5, 0x62e1, 0x62dd, 0x62a6, + 0x62c1, 0x62c5, 0x62c0, 0x62df, 0x62e0, 0x62de, 0x39d6, 0x6589, 0x3ab4, + 0x65a6, 0x65ba, 0x3ad9, 0x65ff, 0x3ad8, 0x6617, 0x6618, 0x6601, 0x65fe, + 0x3b33, 0x670c, 0x3b48, 0x676b, 0x6796, 0x6782, 0x678a, 0x3b47, 0x67a3, + 0x3b4b, 0x67a2, 0x678f, 0x3b4a, 0x67f9, 0x6780, 0x6b26, 0x6b27, 0x6b68, + 0x6b69, 0x3c5a, 0x6b81, 0x6bb4, 0x6bd1, 0x3c8e, 0x3cb4, 0x6c1c, 0x3ccd, + 0x3ccc, 0x3ccf, 0x3ccb, 0x3cce, 0x6c97, 0x6c6c, 0x6cdf, 0x3cd2, 0x6cea, + 0x3cd1, 0x6ce4, 0x6cd8, 0x6cb2, 0x6cce, 0x6cc8, 0x3da6, 0x708b, 0x7088, + 0x7090, 0x708f, 0x3daa, 0x7087, 0x7089, 0x708d, 0x7081, 0x3da8, 0x708c, + 0x3e13, 0x3e1a, 0x7240, 0x3e1d, 0x3e1e, 0x7265, 0x7266, 0x7268, 0x3e65, + 0x3e66, 0x72cd, 0x72d3, 0x72db, 0x3e64, 0x72cf, 0x73a7, 0x73a3, 0x739e, + 0x3eb0, 0x73af, 0x3eb3, 0x3eb5, 0x73aa, 0x739c, 0x3f19, 0x7542, 0x7544, + 0x753b, 0x7541, 0x233f, 0x759b, 0x759e, 0x3f75, 0x79c4, 0x79c3, 0x79c6, + 0x412b, 0x412c, 0x79c7, 0x412d, 0x79ca, 0x592e, 0x41c3, 0x7acf, 0x7c76, + 0x7c74, 0x7cff, 0x7cfc, 0x34ba, 0x4350, 0x7f59, 0x80a8, 0x43d3, 0x43d0, + 0x80b0, 0x43dc, 0x80b3, 0x43d2, 0x80a4, 0x80b6, 0x80a7, 0x80ac, 0x43db, + 0x80a6, 0x5367, 0x820e, 0x82c4, 0x833e, 0x829c, 0x44a5, 0x449f, 0x449a, + 0x449c, 0x44a2, 0x82aa, 0x449b, 0x82c9, 0x44a3, 0x449d, 0x82a6, 0x82b2, + 0x4588, 0x461a, 0x488d, 0x8fcc, 0x8fd9, 0x8fca, 0x8fd8, 0x8fcf, 0x90b7, + 0x48b8, 0x90ad, 0x90b9, 0x9637, 0x49c3, 0x9641, 0x963e, 0x96b6, 0x9751, + 0x9763, 0x4e57, 0x4e79, 0x4eb2, 0x4eb0, 0x4eaf, 0x4eb1, 0x4fd2, 0x4fd5, + 0x345d, 0x4fbe, 0x4fb8, 0x4fb0, 0x4fb1, 0x4fc8, 0x345a, 0x3457, 0x4fc6, + 0x4fcc, 0x4fe5, 0x4fe3, 0x4fb4, 0x516a, 0x34b8, 0x519f, 0x34c2, 0x51c1, + 0x34cf, 0x51c2, 0x51c3, 0x5245, 0x5248, 0x34e7, 0x34e9, 0x524f, 0x4452, + 0x34e8, 0x52c5, 0x52ca, 0x52c4, 0x5327, 0x5358, 0x537d, 0x354a, 0x53dd, + 0x53dc, 0x53da, 0x53d9, 0x54b9, 0x3580, 0x54d0, 0x54b4, 0x54ca, 0x3587, + 0x54a3, 0x54da, 0x54a4, 0x3584, 0x54b2, 0x549e, 0x549f, 0x54b5, 0x3582, + 0x3581, 0x54cd, 0x3583, 0x54cc, 0x3622, 0x5700, 0x57ac, 0x5791, 0x578e, + 0x578d, 0x5792, 0x57a1, 0x5790, 0x57a6, 0x57a8, 0x363b, 0x579c, 0x5796, + 0x57a7, 0x363a, 0x3638, 0x3639, 0x3636, 0x58f5, 0x3685, 0x5909, 0x5908, + 0x3c54, 0x5952, 0x369a, 0x36c4, 0x59df, 0x36c5, 0x59eb, 0x59ef, 0x59f0, + 0x59d5, 0x5a0d, 0x5a04, 0x59f9, 0x5a02, 0x59f8, 0x59e2, 0x59d9, 0x59e7, + 0x5b6a, 0x3754, 0x3755, 0x5bab, 0x3756, 0x5c1b, 0x5c2f, 0x3796, 0x663c, + 0x3795, 0x3794, 0x37c4, 0x5cd1, 0x5cdc, 0x5ce6, 0x5ce1, 0x5ccd, 0xf87a, + 0x5ce2, 0x5cdd, 0x5ce5, 0x5dfb, 0x5dfa, 0x5e1e, 0x3844, 0x5ea1, 0x387d, + 0x387e, 0x5efc, 0x5efb, 0x5f2f, 0x38b2, 0x38b6, 0x5f66, 0xf899, 0x38dc, + 0x38df, 0x605c, 0x3928, 0x604e, 0x6051, 0x3919, 0x3910, 0x6023, 0x6031, + 0x607c, 0x6052, 0x392c, 0x6060, 0x604a, 0x6061, 0x391b, 0x6218, 0x39c2, + 0x39ef, 0x39e3, 0x39e5, 0x39ea, 0x39e6, 0x39ee, 0x631f, 0x6317, 0x62ea, + 0x6321, 0x6304, 0x6305, 0x39e8, 0x6531, 0x6544, 0x6540, 0x3a85, 0x6542, + 0x65be, 0x3ae0, 0x6629, 0x661b, 0x3add, 0x6623, 0x662c, 0x661a, 0x6630, + 0x663b, 0x661e, 0x6637, 0x6638, 0x3ae1, 0x670e, 0x3b51, 0x3b55, 0x67e8, + 0x67d6, 0x3b52, 0x67c7, 0x67bc, 0x6852, 0x67bf, 0x67d5, 0x67fe, 0x8363, + 0x67fb, 0xf8df, 0x67b1, 0x6801, 0x6805, 0x6800, 0x67d7, 0x409e, 0x6b2a, + 0x6b6b, 0x3c52, 0x3c5e, 0x3c60, 0x3c5f, 0x6be1, 0x3c92, 0x3cd6, 0x6d23, + 0x6cff, 0x6d14, 0x6d05, 0x6d13, 0x6d06, 0x6d21, 0x3cde, 0x6d15, 0x6caf, + 0x6cf4, 0x6d02, 0x6d45, 0xf8fe, 0x6d26, 0x3cd9, 0x6d44, 0x3cdd, 0x6d24, + 0x70a5, 0x3dac, 0x70a3, 0x3db0, 0x70a2, 0x70bb, 0x70a0, 0x70aa, 0x3daf, + 0x3dae, 0x70a8, 0x70b6, 0x70b2, 0x70a7, 0x3dad, 0x3dab, 0x70b9, 0x722e, + 0x3e16, 0x723c, 0x3e30, 0x726d, 0x3e33, 0x3e31, 0x72e7, 0x72ed, 0x3e6e, + 0x72ec, 0x72e5, 0x72e2, 0x3eb1, 0x73c4, 0x73bd, 0x73cf, 0x73c9, 0x73c1, + 0x73d0, 0x3eb7, 0x73ce, 0x74ed, 0x74eb, 0x3f1a, 0x74ef, 0x7549, 0x7550, + 0x7546, 0x754a, 0x3f59, 0x754d, 0x75a6, 0x3f7a, 0x3f78, 0x3f7b, 0x75a8, + 0x3fde, 0x3fec, 0x76c7, 0x76ff, 0x401e, 0x76fd, 0x77e6, 0x780a, 0x409b, + 0x7804, 0x780b, 0x7807, 0x409d, 0x7815, 0x7808, 0x40fd, 0x79d3, 0x79d4, + 0x79d0, 0x79d7, 0x7a7c, 0x4194, 0x4193, 0x7a7d, 0x7a83, 0x7a82, 0x41c6, + 0x7ad4, 0x7ad5, 0x7ad3, 0x7ad0, 0x7ad2, 0x7afe, 0x7afc, 0x7c77, 0x7c7c, + 0x7c7b, 0x42b8, 0xf96a, 0x42b7, 0x42b9, 0x4353, 0x5133, 0x4352, 0x4351, + 0x7f8f, 0x80d3, 0x43e3, 0x80cb, 0x80d2, 0x43e2, 0x8109, 0x80e2, 0x80df, + 0x80c6, 0x4463, 0x8224, 0x82f7, 0x82d8, 0x82dd, 0x44aa, 0x44a6, 0x82f8, + 0x82fc, 0x44a8, 0x44a9, 0x82e9, 0x44ab, 0x82ee, 0x44ac, 0x82d0, 0x830e, + 0x82e2, 0x830b, 0x82fd, 0x5179, 0x8676, 0x459e, 0x8678, 0x459f, 0x45a0, + 0x8675, 0x867d, 0x460f, 0x8842, 0x8866, 0x461c, 0x898c, 0x8a05, 0x46ae, + 0x8a06, 0x46b0, 0x8c9f, 0x47d4, 0x8ff1, 0x8fe7, 0x8fe9, 0x8fef, 0x90c2, + 0x90bc, 0x48bb, 0x90c6, 0x90c0, 0x48c1, 0x48c2, 0x90cd, 0x90c9, 0x48be, + 0x90c4, 0x48e5, 0x9581, 0x49c6, 0x9cec, 0x5032, 0x4ff9, 0x501d, 0x4fff, + 0x5004, 0x4ff0, 0x5003, 0x462e, 0x5002, 0x4ffc, 0x4ff2, 0x5024, 0x5008, + 0x5036, 0x502e, 0x3465, 0x5010, 0x5038, 0x5039, 0x4ffd, 0x5056, 0x4ffb, + 0x51a3, 0x51a6, 0x51a1, 0x34d1, 0x34d0, 0x51c7, 0x51c9, 0x5260, 0x5264, + 0x5259, 0x5265, 0x5267, 0x5257, 0x5263, 0x34ee, 0x5253, 0x34ef, 0x52cf, + 0x351e, 0x52ce, 0x52d0, 0x52d1, 0x52cc, 0x354b, 0x354d, 0x3556, 0x550d, + 0x54f4, 0x3592, 0x5513, 0x54ef, 0x54f5, 0x54f9, 0x5502, 0x5500, 0x3593, + 0x3590, 0x5518, 0x54f0, 0x54f6, 0xf841, 0x3597, 0x5519, 0x3623, 0x5705, + 0x57c9, 0x363f, 0x57b7, 0x57cd, 0x3643, 0x3642, 0x3644, 0x57be, 0x57bb, + 0x3645, 0x57db, 0x57c8, 0x57c4, 0x57c5, 0x57d1, 0x57ca, 0x57c0, 0x36d9, + 0x36de, 0x5a21, 0x5a2a, 0x36cf, 0x5a1d, 0x36cd, 0x5a0b, 0x36dd, 0x36ce, + 0x36d3, 0x36d6, 0x5a22, 0x36dc, 0x36d1, 0x5a24, 0x36d0, 0x5a14, 0x5a31, + 0x36d5, 0x5a2f, 0x5a1a, 0x5a12, 0x36d4, 0x36db, 0x5a26, 0x172e, 0x3743, + 0x5bbc, 0x5bbb, 0x5bb7, 0x5c05, 0x5c06, 0x5c52, 0x5c53, 0x37cd, 0x37d1, + 0x5cfa, 0x5ceb, 0x37ca, 0x5cf3, 0x5cf5, 0x5ce9, 0x5cef, 0x37d4, 0x5e2a, + 0x5e30, 0x5e2e, 0x5e2c, 0x5e2f, 0x5eaf, 0x5ea9, 0x3886, 0x5efd, 0x5f32, + 0x5f8e, 0x5f93, 0x5f8f, 0x604f, 0x6099, 0x3933, 0x607e, 0x3937, 0x6074, + 0x604b, 0x6073, 0x6075, 0x392a, 0x391f, 0x6056, 0x60a9, 0x608b, 0x60a6, + 0x3939, 0x6093, 0x60ae, 0x609e, 0x60a7, 0x6245, 0x39f2, 0x39f8, 0x632e, + 0x39f7, 0x6352, 0x6330, 0x635b, 0x39f4, 0x6319, 0x631b, 0x39f1, 0x6331, + 0x635d, 0x6337, 0x6335, 0x6353, 0x39f5, 0x635c, 0x633f, 0x654b, 0x3a87, + 0x4369, 0x658b, 0x3ab6, 0x659a, 0x6650, 0x6646, 0x664e, 0x6640, 0x3ae9, + 0x664b, 0x6648, 0x3aeb, 0x6660, 0x6644, 0x664d, 0x3b34, 0x6837, 0x6824, + 0x3b62, 0x3b5c, 0x681b, 0x6836, 0x3b60, 0x682c, 0x6819, 0x6856, 0x6847, + 0x683e, 0x681e, 0xf8e1, 0x6815, 0x6822, 0x6827, 0x6859, 0x6858, 0x6855, + 0x6830, 0x6823, 0x6b2e, 0x6b2b, 0x6b30, 0x6b6c, 0x3c61, 0x6b8b, 0x3c7f, + 0x6be9, 0x6bea, 0x6be5, 0x6d6b, 0x3ce5, 0x3ce6, 0x6d73, 0x6d57, 0x3ce9, + 0x3cf3, 0x6d5d, 0x6d56, 0x6d8f, 0x6d5b, 0x6d1c, 0x6d9a, 0x6d9b, 0x6d99, + 0x3cee, 0x6d81, 0x6d71, 0x3ced, 0x3cec, 0x6d72, 0x6d5c, 0x6d96, 0x70c4, + 0x70db, 0x70cc, 0x70d0, 0x70e3, 0x70df, 0x3db3, 0x70d6, 0x70ee, 0x70d5, + 0x3db5, 0x3e27, 0x3e35, 0x3e36, 0x727a, 0x3e71, 0x72f5, 0x7302, 0x3eb8, + 0x3ec2, 0x73e2, 0x73ec, 0x73d5, 0x73f9, 0x73df, 0x73e6, 0x3ec8, 0x3ec0, + 0x3ec1, 0x3ec4, 0x73e4, 0x73e1, 0x74f3, 0x3f1f, 0x3f1c, 0x3f1d, 0x3f4d, + 0x7556, 0x7555, 0x7558, 0x7557, 0x755e, 0x75c3, 0x3f87, 0x3f82, 0x75b4, + 0x3f7d, 0x75b1, 0x3fdf, 0x4000, 0x76cb, 0x76cc, 0x772a, 0x4020, 0x7716, + 0x770f, 0x4022, 0x4024, 0x773f, 0x772b, 0x770e, 0x7724, 0x4021, 0x7721, + 0x7718, 0x77dd, 0x40a4, 0x40a5, 0x7824, 0x7836, 0x4101, 0x7958, 0x7959, + 0x4103, 0x7962, 0x79da, 0x79d9, 0x4137, 0x79e1, 0x79e5, 0x79e8, 0x79db, + 0x4138, 0x79e2, 0x79f0, 0x4199, 0x4198, 0x4197, 0x41c9, 0x7ada, 0x7add, + 0x41c7, 0x7adb, 0x7adc, 0x41d9, 0x41db, 0x7b0d, 0x7b0b, 0x7b14, 0x7c8e, + 0x7c86, 0x427b, 0x7c87, 0x7c83, 0x7c8b, 0x427c, 0x42bd, 0x42bc, 0x42c3, + 0x7d24, 0x42c1, 0x42bf, 0x42c4, 0x7d25, 0x7f62, 0x7f93, 0x7f99, 0x7f97, + 0x437e, 0x437f, 0x7fc4, 0x7fc6, 0x800a, 0x43b4, 0x43b3, 0x8040, 0x803c, + 0x803b, 0x80f6, 0x80ff, 0x80ee, 0x8104, 0x8103, 0x8107, 0xf983, 0x43e6, + 0x80f7, 0x4459, 0x445a, 0x822d, 0x4464, 0x8227, 0x8229, 0x831f, 0x8357, + 0x44b4, 0x44b9, 0x44b7, 0x44b5, 0x8321, 0x44c1, 0x44b1, 0x8318, 0x8358, + 0x44b3, 0x44ba, 0x458c, 0x458b, 0x458d, 0x8684, 0x869f, 0x869b, 0x8689, + 0x86a6, 0x8692, 0x868f, 0x86a0, 0x884f, 0x8878, 0x887a, 0x886e, 0x887b, + 0x8884, 0x8873, 0x4678, 0x4677, 0x8a0d, 0x8a0b, 0x8a19, 0x46b2, 0x47d6, + 0x8ed0, 0x4845, 0x4892, 0x4895, 0x8ff9, 0x9009, 0x9008, 0x48c6, 0x90de, + 0x9151, 0x48e7, 0x48e8, 0x91db, 0x91df, 0x91de, 0x91d6, 0x91e0, 0x9585, + 0x9660, 0x9659, 0x49cb, 0x9656, 0x49cd, 0x49f1, 0x96bd, 0x4b22, 0x3421, + 0x5042, 0x5059, 0x346f, 0x5044, 0x5066, 0x5052, 0x5054, 0x5071, 0x5050, + 0x507b, 0x507c, 0x5058, 0x3470, 0x3464, 0x5079, 0x506c, 0x5078, 0x51a8, + 0x51d1, 0x51cf, 0x5268, 0x5276, 0x52d4, 0x352d, 0x53a0, 0x53c4, 0x3558, + 0x5558, 0x554c, 0x5568, 0x35a6, 0x5549, 0x35a4, 0x359f, 0x555d, 0x5529, + 0x0dae, 0x5554, 0x5553, 0x35a3, 0x555a, 0x35a0, 0x553a, 0x553f, 0x552b, + 0x57ea, 0x364a, 0x57ef, 0x3647, 0x3648, 0x57dd, 0x57fe, 0xf855, 0x57de, + 0x57e6, 0x3649, 0x57e8, 0x57ff, 0x5803, 0x58f7, 0x68a6, 0x591f, 0x369e, + 0x595b, 0x595d, 0x595e, 0x1637, 0x36e8, 0x5a2b, 0x36ec, 0x5a3b, 0x36ed, + 0x36e6, 0x5a61, 0x5a3a, 0x5a6e, 0x5a4b, 0x5a6b, 0x36eb, 0x36e7, 0x5a45, + 0x5a4e, 0x5a68, 0x5a3d, 0x5a71, 0x5a3f, 0x5a6f, 0x5a75, 0x36e9, 0x5a73, + 0x5a2c, 0x5a59, 0x5a54, 0x5a4f, 0x5a63, 0x375c, 0x375d, 0x5bc8, 0x3760, + 0x5bc3, 0x375b, 0x5c5b, 0x5c61, 0x3799, 0x5d21, 0x5d0a, 0x5d09, 0x37d8, + 0x5d2c, 0x5d08, 0x37da, 0x37dd, 0x5d2a, 0x5d15, 0x37e0, 0x5d10, 0x5d13, + 0x37e5, 0x5d2f, 0x5d18, 0x37d7, 0x5de3, 0x5e39, 0x5e35, 0x5e3a, 0x5e32, + 0x384e, 0x388c, 0x3888, 0xf88d, 0x5ebb, 0x5eba, 0x5f34, 0x5f39, 0x38ce, + 0xf89c, 0x38e5, 0x38e6, 0x6098, 0x3932, 0x60d0, 0x3940, 0x3947, 0x394c, + 0x60d7, 0x60aa, 0x3935, 0x60a1, 0x60a4, 0x3930, 0x60ee, 0x3943, 0x60e7, + 0x394d, 0x60e8, 0x60de, 0x39b7, 0x39f3, 0x637e, 0x638b, 0x3a02, 0x3a0b, + 0x6379, 0x6386, 0x6393, 0x3a04, 0x6373, 0x636a, 0xf8ba, 0x636c, 0x3a08, + 0x637f, 0x39fc, 0x63b2, 0x63ba, 0x39ff, 0x3a00, 0x6366, 0x6374, 0x3a8b, + 0x655a, 0x3a8d, 0x654e, 0x654d, 0x658d, 0x658e, 0x65ad, 0x3aca, 0x65c7, + 0x65ca, 0x3acb, 0x65c9, 0xf8cb, 0x65e3, 0x6657, 0x3af3, 0x6663, 0x6667, + 0x671a, 0x6719, 0x6716, 0x3b36, 0x3b6a, 0x689e, 0x68b6, 0x6898, 0x6873, + 0x3b6b, 0x689a, 0x688e, 0x68b7, 0x68db, 0x68a5, 0x686c, 0x68c1, 0x6884, + 0x3b71, 0x3b68, 0x6895, 0x687a, 0x6899, 0x3b72, 0x68b8, 0x68b9, 0x6870, + 0x3c2e, 0x6b35, 0x3c62, 0x6b90, 0x6bbb, 0x6bed, 0x3c98, 0x3cb5, 0x3ceb, + 0x6dc1, 0x6dc3, 0x6dce, 0x3cfb, 0x3cf8, 0x6dad, 0x6e04, 0x3cf5, 0x6db9, + 0x3d08, 0x6de7, 0xf907, 0x6e08, 0x6e06, 0x3d0a, 0x6e0a, 0x6db0, 0x3d06, + 0x6df8, 0x6e0c, 0x3cfd, 0x6db1, 0x3cfa, 0x6e02, 0x6e07, 0x6e09, 0x6e01, + 0x6e17, 0x6dff, 0x6e12, 0x3dba, 0x3db9, 0x7103, 0x7107, 0x7101, 0x70f5, + 0x70f1, 0x7108, 0x70f2, 0x710f, 0x3dbb, 0x70fe, 0x3e18, 0x3e40, 0x3e3d, + 0x731a, 0x7310, 0x730e, 0x7402, 0x73f3, 0x3ecd, 0x3ec9, 0x73fb, 0x3ecb, + 0x3eca, 0x3ece, 0x751b, 0x7523, 0x7561, 0x7568, 0x3f5e, 0x7567, 0x75d3, + 0x3f91, 0x3f8c, 0x7690, 0x3fe1, 0x4002, 0x76d5, 0x76d7, 0x76d6, 0x7730, + 0x402b, 0x7726, 0x402a, 0x7740, 0x3e14, 0x771e, 0x40ad, 0x40a3, 0x40ab, + 0x7847, 0x40af, 0x784b, 0x7851, 0x784f, 0x7842, 0x7846, 0x4104, 0x796e, + 0x796c, 0x79f2, 0x4144, 0x79f1, 0x79f5, 0x79f3, 0x79f9, 0x413d, 0x4147, + 0x419c, 0x7a9a, 0x7a93, 0x7a91, 0x7ae1, 0x41e0, 0x41e4, 0x7b21, 0x7b1c, + 0x7b16, 0x7b17, 0x7b36, 0x7b1f, 0x4280, 0x7c93, 0x7c99, 0x7c9a, 0x7c9c, + 0x42ca, 0x7d49, 0x42d4, 0x7d34, 0x7d37, 0x42d2, 0x7d2d, 0x42cb, 0x7d4c, + 0x42ce, 0x42d3, 0x7d48, 0x4344, 0x4348, 0x7f3b, 0x4345, 0x4381, 0x4386, + 0x4385, 0x8008, 0x801a, 0x43a3, 0x801d, 0x43b5, 0x8049, 0x8045, 0x8044, + 0x7c9b, 0x43fa, 0x43f9, 0x812a, 0x812e, 0x43fb, 0x43f2, 0x8131, 0x43ef, + 0x811a, 0x8134, 0x8117, 0x445b, 0x4466, 0x44ce, 0x831d, 0x8371, 0x8384, + 0x8380, 0x8372, 0x83a1, 0x35b4, 0x8379, 0x8391, 0x44c8, 0x839f, 0x83ad, + 0x44d1, 0x44c5, 0x8323, 0x44d2, 0x8385, 0x839c, 0x83b7, 0x8658, 0x865a, + 0x458f, 0x8657, 0x86b2, 0x45a7, 0x86ae, 0x45a5, 0x45a4, 0x4611, 0x8845, + 0x889c, 0x8894, 0x88a3, 0x888f, 0x88a5, 0x88a9, 0x88a6, 0x888a, 0x88a0, + 0x8890, 0x8992, 0x8991, 0x8994, 0x46b5, 0x8a26, 0x8a32, 0x8a28, 0x46b4, + 0x46bd, 0x8a1c, 0x46bb, 0x8a2b, 0x8a20, 0x46b9, 0x8a29, 0x46c2, 0x46be, + 0x46ba, 0x8a21, 0x8c3a, 0x3ab7, 0x8c5b, 0x8c58, 0x8c7c, 0x4758, 0x8ca6, + 0x8cae, 0x8cad, 0x8d65, 0x479b, 0x8d7e, 0x479c, 0x8d7c, 0x8d7f, 0x8d7a, + 0x8dbd, 0x47da, 0x47de, 0x8dc0, 0x8dbb, 0x8ead, 0x8eaf, 0x8ed6, 0x484d, + 0x4846, 0x4847, 0x484b, 0x484c, 0x8ed9, 0x4848, 0x4899, 0x9012, 0x900e, + 0x9025, 0x489b, 0x9013, 0x90ee, 0x48ce, 0x90ab, 0x90f7, 0x48eb, 0x9159, + 0x9154, 0x91f2, 0x91f0, 0x91e5, 0x91f6, 0x491c, 0x498c, 0x9587, 0x49d1, + 0x965a, 0x49d6, 0x49d3, 0x966e, 0x49d4, 0x49d0, 0x49d5, 0x9679, 0x4a0b, + 0x98e1, 0x98e6, 0x4bc6, 0x9ec4, 0x9ed2, 0x4e80, 0x3424, 0x4e81, 0x508f, + 0x5097, 0x5088, 0x5089, 0x3474, 0x347a, 0x5081, 0x5160, 0x0564, 0x34c3, + 0x5e42, 0x51d3, 0x34d4, 0x34d5, 0x51d2, 0x51d6, 0x5273, 0x34fb, 0x5270, + 0x34f7, 0x3532, 0xf833, 0x53a8, 0x53a6, 0x53c5, 0x5597, 0x55de, 0x35ba, + 0x35bf, 0x5596, 0x55b4, 0x35c7, 0x5585, 0x35b7, 0x559b, 0x55a0, 0x35b9, + 0x5559, 0x35c3, 0x5586, 0x35bd, 0x35d0, 0x55af, 0x557a, 0x35c1, 0x35be, + 0x35cd, 0x559e, 0x35cb, 0x55a9, 0x570f, 0x570e, 0x581a, 0x364f, 0x581f, + 0x3653, 0x583c, 0x5818, 0x583e, 0x5826, 0x3655, 0x583a, 0x1364, 0x5822, + 0x3651, 0x58fb, 0x5963, 0x5964, 0x369f, 0x5aa8, 0x5aa3, 0x5a82, 0x5a88, + 0x5aa1, 0x5a85, 0x5a98, 0x36fe, 0x5a99, 0x36fb, 0x5a89, 0x5a81, 0x5a96, + 0x5a80, 0x36f1, 0x36f5, 0x5a91, 0x36ef, 0x3704, 0x3703, 0x36f4, 0x5acf, + 0x36f3, 0x3702, 0x36f7, 0x36fa, 0x36fd, 0x36ee, 0x5a87, 0x5aa0, 0x36f0, + 0x5a79, 0x36f2, 0x5a86, 0x5aab, 0x5aaa, 0x5aa4, 0x5a8d, 0x5a7e, 0x3744, + 0x5bd5, 0x3762, 0x3777, 0x3dc9, 0x5c1e, 0x5c5f, 0x5c5e, 0x5d44, 0x5d3e, + 0x37e8, 0x5d48, 0x5d1c, 0x37ef, 0x5d5b, 0x5d4d, 0x37e6, 0x37ed, 0x5d57, + 0x37e7, 0x5d53, 0x5d4f, 0x37eb, 0x5d3b, 0x5d46, 0x382d, 0x3855, 0x5e46, + 0x5e47, 0x3853, 0x5e48, 0x5ec0, 0x5ebd, 0x5ebf, 0x3890, 0x5f11, 0x38be, + 0x5f3e, 0x5f3b, 0x38bd, 0x5f3a, 0x38cf, 0x38d0, 0x38ec, 0x5fa7, 0x394b, + 0x60ea, 0x3948, 0x6107, 0x6122, 0x610c, 0x3955, 0x3951, 0x60b3, 0x60d6, + 0x60d2, 0x394e, 0x60e3, 0x60e5, 0x60e9, 0x396b, 0x395e, 0x6111, 0x60fd, + 0x3960, 0x3967, 0x611e, 0x6120, 0x6121, 0x621e, 0x39b8, 0x63e2, 0x63de, + 0x63e6, 0x3a14, 0x3a0f, 0x3a07, 0x3a13, 0x63f8, 0x3a17, 0x63fe, 0x63c1, + 0x63bf, 0x63f7, 0x63d1, 0x655f, 0x6560, 0x6561, 0x3a9a, 0x3ab8, 0x65d1, + 0x3af7, 0x3af8, 0x667d, 0x666b, 0x667f, 0x3afd, 0x3af5, 0x6673, 0x6681, + 0x666d, 0x6669, 0x3afa, 0x3b38, 0x671e, 0x68ed, 0x3b87, 0x3b80, 0x3b88, + 0x3b79, 0x6903, 0x3b7c, 0x68fe, 0x68e5, 0x691e, 0x6902, 0x3b83, 0x3b85, + 0x6909, 0x68ca, 0x6900, 0xf8e5, 0x6901, 0x6918, 0x68e2, 0x68cf, 0x3b7b, + 0x692e, 0x68c5, 0x68ff, 0x3b86, 0x691c, 0x68c3, 0x3c34, 0x6b6f, 0x3c55, + 0x6b6e, 0x3c68, 0x6bbe, 0x3c9c, 0x6bf4, 0x6c2d, 0x3cfc, 0x6db6, 0x6e75, + 0x6e1e, 0x3d1a, 0x6e18, 0x3d17, 0x6e48, 0x3d1b, 0x6e4f, 0x3d13, 0x6e42, + 0x6e6a, 0x6e70, 0x6dfe, 0x3d05, 0x3d07, 0x6e6d, 0x3d1c, 0x6e7b, 0x6e7e, + 0x6e59, 0x3d11, 0x6e57, 0x3d16, 0x6e80, 0x6e50, 0x3d15, 0x6e29, 0x6e76, + 0x6e2a, 0x6e4c, 0x712a, 0x3dcb, 0x7135, 0x712c, 0x7137, 0x711d, 0x3dc5, + 0x3dc2, 0x7138, 0x3dcd, 0x7134, 0x712b, 0x7133, 0x7127, 0x7124, 0x3dca, + 0x712d, 0x7232, 0x7283, 0x7282, 0x7287, 0x7306, 0x7324, 0x7338, 0x732a, + 0x732c, 0x732b, 0x3e83, 0x732f, 0x7328, 0x7417, 0x3ed6, 0x3ed5, 0x7419, + 0x7438, 0x3ed1, 0x741f, 0x7414, 0x743c, 0x73f7, 0x741c, 0x7415, 0x7418, + 0x7439, 0x74f9, 0x7524, 0xf934, 0x3f52, 0x3f5f, 0x756e, 0x756d, 0x7571, + 0x758e, 0x3f95, 0x75e5, 0x3f9d, 0x3f98, 0x3f9e, 0x3f96, 0x7694, 0x76b3, + 0x4003, 0x76d9, 0x402f, 0x7748, 0x7749, 0x7743, 0x4031, 0x4033, 0x7742, + 0x77df, 0x40b4, 0x7863, 0x7876, 0x40b0, 0x785f, 0x7866, 0x7966, 0x7971, + 0x4108, 0x4107, 0x7976, 0x7984, 0x7975, 0x79ff, 0x7a07, 0x414e, 0x7a0e, + 0x7a09, 0x4150, 0x4152, 0x41a1, 0x41a3, 0x41a5, 0x41cc, 0x7ae7, 0x7ae2, + 0x7b55, 0x41ef, 0x41ea, 0x7b43, 0x7b57, 0x7b6c, 0x7b42, 0x7b53, 0x41ed, + 0x7b41, 0x4285, 0x4284, 0x7ca7, 0x7ca0, 0x7ca6, 0x7ca4, 0x7d74, 0x42db, + 0x7d59, 0x42d9, 0x7d60, 0x7d57, 0x7d6c, 0x7d7e, 0x7d64, 0x42d7, 0x7d5a, + 0x7d5d, 0x42da, 0x42de, 0x42d8, 0x7d76, 0x7d4d, 0x7d75, 0x42d5, 0x7fd3, + 0x7fd6, 0x439c, 0x439d, 0x8060, 0x804e, 0x8145, 0x813b, 0x43fe, 0x8148, + 0x8142, 0x8149, 0x8140, 0x8114, 0x8141, 0x4407, 0x81ef, 0x81f6, 0x8203, + 0x446a, 0x83ed, 0x44e7, 0x83da, 0x8418, 0x83d2, 0x8408, 0x44e2, 0x8400, + 0x44df, 0x44e1, 0x44e5, 0x8417, 0x8346, 0x8414, 0x83d3, 0x8405, 0x841f, + 0x8402, 0x8416, 0x83cd, 0x83e6, 0x4591, 0x865d, 0x86d5, 0x86e1, 0x45b4, + 0x45b0, 0x45b5, 0x45ae, 0x86ee, 0x8847, 0x8846, 0x462d, 0x462c, 0x88bb, + 0x462b, 0x88bf, 0x88b4, 0x4629, 0x88b5, 0x467f, 0x899a, 0x8a43, 0x46c9, + 0x46cb, 0x8a5a, 0x46c5, 0x46c6, 0x46ca, 0x8a35, 0x8a38, 0x8a42, 0x8a49, + 0x8a5d, 0x8a4b, 0x8a3d, 0x46d2, 0x46d0, 0x472d, 0x4735, 0x8c60, 0x8c5e, + 0x8c7f, 0x8c7e, 0x8c83, 0x476c, 0x8cb1, 0x8d87, 0x479d, 0x47a0, 0x8d88, + 0x8d83, 0x47a2, 0x479f, 0x8d86, 0x8d8b, 0x8d82, 0x8dca, 0x8dd2, 0x47eb, + 0x47e2, 0x8dd4, 0x8dc9, 0x8eb0, 0x4836, 0x4832, 0x4850, 0x8ef2, 0x8ee4, + 0x8ef3, 0x8eea, 0x484f, 0x8efd, 0x4852, 0x8f9d, 0x902b, 0x902a, 0x489e, + 0x9028, 0x9029, 0x902c, 0x48a0, 0x489c, 0x903a, 0x9030, 0x9037, 0x903b, + 0x48d1, 0x910a, 0x48ef, 0x48f0, 0x48f1, 0x91fe, 0x9220, 0x491d, 0x920b, + 0x491f, 0x9218, 0x9222, 0x491e, 0x921b, 0x9208, 0x4920, 0x920e, 0x9213, + 0x498e, 0x4991, 0x9595, 0x8cdd, 0x4990, 0x49d7, 0x968c, 0x967b, 0x967f, + 0x9681, 0x49d9, 0x9682, 0x49f4, 0x49f6, 0x3560, 0x49f5, 0x49f3, 0x96ee, + 0x96ed, 0x4a0c, 0x96ec, 0x975f, 0x976f, 0x4a51, 0x976d, 0x4aa6, 0x4aa7, + 0x4aa8, 0x4b27, 0x4b24, 0x4b25, 0x98f0, 0x4b2a, 0x4b74, 0x4bc7, 0x9aa9, + 0x4be7, 0x4bed, 0x9ae0, 0x4eb7, 0x342e, 0x347b, 0x50cc, 0x50bc, 0x347c, + 0x50aa, 0x50b9, 0x347d, 0x50ab, 0x50c3, 0x50cd, 0x517e, 0x527e, 0x5279, + 0x34fd, 0xf823, 0x52e1, 0x52e0, 0x52e7, 0x5380, 0x53ab, 0x53aa, 0x53a9, + 0x53e0, 0x55ea, 0x35da, 0x55d7, 0x35d6, 0x35db, 0x55c1, 0x5715, 0x365b, + 0x586c, 0x365c, 0x585c, 0x5850, 0x5861, 0x586a, 0x5869, 0x5856, 0x5860, + 0x5866, 0x585f, 0x5923, 0x5966, 0x5968, 0x3706, 0x370b, 0x5ace, 0x370d, + 0x5ac5, 0x5ac3, 0x370a, 0x3713, 0x5ad0, 0x3710, 0x3712, 0x3709, 0x3708, + 0x3711, 0x370f, 0x5b74, 0x5b76, 0x5bdc, 0x5bd7, 0x5bda, 0x5bdb, 0x3767, + 0x5c20, 0x5d6d, 0x5d66, 0x37f6, 0x5d64, 0x5d6e, 0xf87e, 0x5d60, 0x5f42, + 0x5f5a, 0x5f6e, 0x3964, 0x396c, 0x6130, 0x613a, 0x612a, 0x6143, 0x6119, + 0x6131, 0x396d, 0x613d, 0x397a, 0x3975, 0x3a0d, 0x6408, 0x6432, 0x6438, + 0x3a1e, 0x6431, 0x3a1b, 0x6419, 0x3a2a, 0x6411, 0x3a1f, 0x3a22, 0x6429, + 0x641d, 0x3a25, 0x3a27, 0x3a29, 0x643c, 0x3a24, 0x6446, 0x6447, 0x3a28, + 0x3a26, 0x643a, 0x6407, 0x3a23, 0x656b, 0x3a9f, 0x6570, 0x656d, 0x3ab1, + 0x65e4, 0x6693, 0x3b03, 0x3b07, 0x3b0c, 0x3b06, 0x668f, 0x3b04, 0x3b09, + 0x6692, 0x3b05, 0x668e, 0x3b08, 0x6946, 0x3b96, 0x3b9c, 0x3b9f, 0x3b9b, + 0x3b98, 0x3b99, 0x3b94, 0x6931, 0x3b8d, 0x3ba3, 0x693e, 0x3b93, 0x697c, + 0x6943, 0x3b92, 0x6973, 0xf8e8, 0x6955, 0x3b8e, 0x3b8c, 0x6985, 0x694d, + 0x6950, 0x6947, 0x6967, 0x6936, 0x6964, 0x6961, 0x3b9a, 0x697d, 0x6b44, + 0x6b40, 0x6b71, 0x6b73, 0x6b9c, 0x3c6a, 0x3c6d, 0x3c84, 0x6bc1, 0x3ca0, + 0x6bfa, 0x6c31, 0x6c32, 0x3d1d, 0x3d26, 0x6eb8, 0x6ea8, 0x3d33, 0x6e91, + 0x6ebb, 0x3d38, 0x6e9a, 0x3d30, 0x3d28, 0x6ea9, 0x3d27, 0x3d2a, 0x6eb5, + 0x6e6c, 0x6ee8, 0x3d31, 0x6edd, 0x6eda, 0x6ee6, 0x6eac, 0x3d34, 0x3d2e, + 0x3d3b, 0x6ed9, 0x6ee3, 0x6ee9, 0x6edb, 0x3d29, 0x716f, 0x3dd2, 0x3dd8, + 0x7148, 0x3dcf, 0x714a, 0x716b, 0x3dd9, 0x714f, 0x7157, 0x7174, 0x3dce, + 0x3dd3, 0x3dd0, 0x7145, 0x7151, 0x716d, 0x3ba1, 0x7251, 0x7250, 0x724e, + 0x3e47, 0x7341, 0x3e8b, 0x732e, 0x7346, 0x3ed4, 0x7427, 0x3ede, 0x7448, + 0x7453, 0x743d, 0x3edf, 0x745d, 0x7456, 0x3ed7, 0x741e, 0x7447, 0x7443, + 0x7458, 0x7449, 0x3ee1, 0x744c, 0x7445, 0x743e, 0x3f2f, 0x7501, 0x751e, + 0x3f62, 0x3f63, 0x757a, 0x75ee, 0x7602, 0x7697, 0x7698, 0x3fe2, 0x4004, + 0x4043, 0x775d, 0x7764, 0x7753, 0x7758, 0x7882, 0x7890, 0x788a, 0x40be, + 0x787a, 0x787d, 0x40ba, 0x788b, 0x7878, 0x40bc, 0xf94e, 0x788d, 0x7888, + 0x7892, 0x7881, 0x797e, 0x7983, 0x410d, 0x410e, 0x4111, 0x7980, 0x410f, + 0x4112, 0x4155, 0x7a0f, 0x4159, 0x415b, 0x7a1d, 0x4157, 0x7aa1, 0x7aa4, + 0x41ce, 0x7ae9, 0x7aea, 0x41fe, 0x7b62, 0x7b6b, 0x41fc, 0x7b5e, 0x41f5, + 0x7b79, 0x41f9, 0x41fa, 0x7b6f, 0x7b68, 0x4288, 0x4289, 0x7cae, 0x428a, + 0x4287, 0x428b, 0x7cb0, 0x42e6, 0x7d90, 0x42ed, 0x7d8a, 0x42e5, 0x7d8b, + 0x7d99, 0x7d95, 0x42e0, 0x7d87, 0x7d78, 0x7d97, 0x7d89, 0x7d98, 0x42e1, + 0x435b, 0x435c, 0x7fa3, 0x438f, 0x438b, 0x438d, 0x7fdd, 0x8057, 0x43b9, + 0x8163, 0x816a, 0x816c, 0x440f, 0x4419, 0x4413, 0x815d, 0x8175, 0x4418, + 0x815f, 0x4416, 0x817d, 0x816d, 0x4453, 0xf98d, 0x8241, 0x844f, 0x8484, + 0x44f6, 0x847f, 0x44f5, 0x8448, 0x842a, 0x847b, 0x8472, 0x8464, 0x842e, + 0x845c, 0x8453, 0x44f7, 0x8441, 0x84c8, 0x44f0, 0x8462, 0x8480, 0x843e, + 0x8483, 0x8471, 0x44f9, 0x844a, 0x8455, 0x8458, 0x4592, 0x4595, 0x4596, + 0x86fc, 0x86fd, 0x8715, 0x45b9, 0x8716, 0x86ff, 0x45bd, 0x45b8, 0x4612, + 0x8858, 0x88cf, 0x88e0, 0x4680, 0x4681, 0x469a, 0x4698, 0x89e7, 0x8a6a, + 0x8a80, 0x46d4, 0x8a6f, 0x8a65, 0x46da, 0x8a78, 0x8a7d, 0x8a88, 0x46d6, + 0x46db, 0x8a64, 0x8a7e, 0x46dc, 0x8a67, 0x8c63, 0x8c88, 0x4771, 0x8ccd, + 0x4772, 0x8cc9, 0x47a8, 0x8ded, 0x47f0, 0xf9db, 0x47f1, 0x47fd, 0x4838, + 0x4837, 0x4839, 0x8eb1, 0x4855, 0x4853, 0x8f04, 0x8f9e, 0x8fa0, 0x9043, + 0x9046, 0x9048, 0x9045, 0x9040, 0x904c, 0x48d5, 0x48bd, 0x910c, 0x9113, + 0x9115, 0x48f5, 0x916b, 0x9167, 0x925d, 0x9255, 0x9235, 0x4921, 0x9259, + 0x922f, 0x923c, 0x928f, 0x925c, 0x926a, 0x9262, 0x925f, 0x926b, 0x926e, + 0x923b, 0x9244, 0x9241, 0x959a, 0x4992, 0x9599, 0x49de, 0x49db, 0x49da, + 0x968f, 0x49df, 0x9696, 0x49f9, 0x49f8, 0x49fa, 0x96f4, 0x96fc, 0x4a0e, + 0x9755, 0x4a43, 0x9779, 0x4a56, 0x4a53, 0x4a9e, 0x97ee, 0x97f5, 0x4aa9, + 0x980b, 0x4afa, 0x98f3, 0x4b31, 0x4b30, 0x98f7, 0x98ff, 0x98f5, 0x4b32, + 0x98ec, 0x98f1, 0x4b29, 0x4b2e, 0x999a, 0x4b76, 0x9ae2, 0x9b3d, 0x9b5d, + 0x9ce8, 0x4ca5, 0x9ceb, 0x9cef, 0x9cee, 0x9e81, 0x9f14, 0x50d0, 0x50d9, + 0x50dc, 0x50d8, 0x348c, 0x50e1, 0x50eb, 0x348b, 0x3489, 0x50f4, 0x50e2, + 0x50de, 0x348d, 0x3486, 0x34d7, 0x51f4, 0x3504, 0x3507, 0x3503, 0x52ed, + 0x52ea, 0x3522, 0x5332, 0x3551, 0x53ae, 0x53b0, 0x3561, 0x55fb, 0x5603, + 0x560b, 0x35e9, 0x5607, 0x35e5, 0x55f8, 0x35e4, 0x5628, 0x561e, 0x35e3, + 0x5618, 0x5611, 0x5651, 0x5605, 0x5717, 0x5892, 0x3665, 0x588c, 0x3663, + 0x5878, 0x5884, 0x5873, 0x58ad, 0x5897, 0x5895, 0x5877, 0x5872, 0x5896, + 0x588d, 0x5910, 0x368c, 0x596c, 0x371a, 0x5ae7, 0x3715, 0x5ae4, 0x3720, + 0x3721, 0x5aef, 0x5626, 0x371c, 0x371b, 0x5af0, 0x5d7b, 0x37fe, 0x5d83, + 0x3804, 0x3801, 0x5d8b, 0x5d8c, 0x3800, 0x5d78, 0x5e52, 0x386d, 0x3893, + 0x5ed0, 0x5ecf, 0x38a1, 0x5fb3, 0x5fb4, 0x3976, 0x3979, 0x3972, 0x617b, + 0x3983, 0x616f, 0x6181, 0x613c, 0x6142, 0x6138, 0x6133, 0xf8a6, 0x6160, + 0x6169, 0x617d, 0x6186, 0x622c, 0x6228, 0x3a38, 0x644c, 0x3a30, 0x6457, + 0x647c, 0x3a34, 0x3a3a, 0x6455, 0x6462, 0x6471, 0x646a, 0x6456, 0x643b, + 0x6481, 0x3a35, 0x644f, 0x647e, 0x6464, 0x3a3f, 0x3a40, 0x3a32, 0x3a31, + 0x3a36, 0x6571, 0x30ba, 0x3b0f, 0x66a5, 0x669a, 0x669c, 0x3b10, 0x66a6, + 0x3b0d, 0x66a4, 0x698f, 0x69c5, 0x69c8, 0x6992, 0x69b2, 0x3ba9, 0x3bb4, + 0x3bac, 0x69e3, 0x69c0, 0x69d6, 0x69d1, 0x699f, 0x69a2, 0x69d2, 0x3bb8, + 0x3bae, 0x35f3, 0x69e1, 0x69d5, 0x699d, 0x3bb3, 0x3bba, 0x6998, 0x3c3f, + 0x6b74, 0x6ba1, 0x3d3c, 0x6ef0, 0x6ef3, 0x3d42, 0x3d40, 0x6f1b, 0x6f0c, + 0x6f1d, 0x6f34, 0x6f28, 0x6f17, 0x3d3e, 0x6f44, 0x6f42, 0x6f04, 0x6f11, + 0x6efa, 0x6f4a, 0x7191, 0x718e, 0x3de1, 0x718b, 0x718d, 0x717f, 0x718c, + 0x717e, 0x717c, 0x7183, 0x3de6, 0x7188, 0x3de0, 0x3e15, 0x7294, 0x3e93, + 0x7355, 0x7353, 0x734f, 0x7354, 0x746c, 0x7465, 0x7466, 0x7461, 0x746b, + 0x7468, 0x7476, 0x3ee7, 0x7460, 0x4a0f, 0x7474, 0x7506, 0x760e, 0x3fad, + 0x7607, 0x3fae, 0x3fe3, 0x76b9, 0x3ff5, 0x76b7, 0x76e2, 0x4006, 0x7774, + 0x7777, 0x7776, 0x7775, 0x404f, 0x7778, 0x7771, 0x4054, 0x777a, 0x715b, + 0x777b, 0x78a6, 0x78ae, 0x78b8, 0x40cb, 0x40e3, 0x40c9, 0x78b1, 0x78af, + 0x4113, 0x7989, 0x7987, 0x4115, 0x4161, 0x7a29, 0x4166, 0x7a2a, 0x4164, + 0x7a2d, 0x7a2c, 0x4160, 0x7a32, 0x4163, 0x7aec, 0x7af0, 0x7b81, 0x7b9e, + 0x7b83, 0x420a, 0x7b92, 0x4204, 0x7ba3, 0x7b9f, 0x7b93, 0x4207, 0x7b86, + 0x7cb8, 0x7cb7, 0x428d, 0x428f, 0x4290, 0x4292, 0x42ec, 0x7dc8, 0x7db6, + 0xf96c, 0x7dd1, 0x42e7, 0x7da8, 0x7dab, 0x42f2, 0x7db3, 0x7dcd, 0x42ee, + 0x7dcf, 0x7da4, 0x42ef, 0x434c, 0x7f41, 0x7f6f, 0x7f71, 0x435e, 0x435f, + 0x4376, 0x4374, 0x4372, 0x4390, 0x8023, 0x805b, 0x43be, 0x8061, 0x805f, + 0x8181, 0x4426, 0x4425, 0x8184, 0x8213, 0x4474, 0x824a, 0x824c, 0x44fd, + 0x4505, 0x4501, 0x84bd, 0x8495, 0x4509, 0x8492, 0x84c3, 0x450c, 0x8496, + 0x84a5, 0x84b5, 0x84b3, 0x84a3, 0x84e4, 0x84d8, 0x84d5, 0x450d, 0x84b7, + 0x84ad, 0x84da, 0x8493, 0x8736, 0x45c0, 0x45c5, 0x45c9, 0x873d, 0x872b, + 0x8747, 0x8739, 0x45d5, 0x8745, 0x871d, 0x4641, 0x88ff, 0x88ea, 0x4633, + 0x88f5, 0x463a, 0x8900, 0x88ed, 0x8903, 0x88e9, 0x4640, 0x4642, 0x89ea, + 0x46e8, 0x8a9b, 0x8a8e, 0x8aa2, 0x46e4, 0x8a9c, 0x8a94, 0x8a90, 0x8aa9, + 0x8aac, 0x46e7, 0x8a9f, 0x46e6, 0x46e1, 0x8a9d, 0x4739, 0x8c67, 0x475c, + 0x4775, 0x8cd0, 0x8cd6, 0x8cd4, 0x8d98, 0x8d9a, 0x8d97, 0x47ae, 0x47b0, + 0x47fa, 0x8e0b, 0x8e08, 0x8e01, 0x8eb4, 0x8eb3, 0x485b, 0x8fa1, 0x8fa2, + 0x48a5, 0x905a, 0x48a2, 0x9061, 0x905f, 0x48db, 0x48da, 0x9125, 0x917b, + 0x9176, 0x917c, 0x4924, 0x9289, 0x92f6, 0x92b1, 0x92ad, 0x9292, 0x9281, + 0x9284, 0x4926, 0x92ae, 0x9290, 0x929e, 0x4998, 0x4996, 0x499a, 0x95a2, + 0x95a7, 0x4997, 0x49e1, 0x49e0, 0x49e3, 0x49e2, 0x96a0, 0x969d, 0x969f, + 0x96d0, 0x49fb, 0x96d1, 0x4a12, 0x4a14, 0x9759, 0x4a45, 0x9764, 0x4a5c, + 0x4a5d, 0x4ab8, 0x9819, 0x4aba, 0x9814, 0x9815, 0x981a, 0x4b03, 0x4b35, + 0x4b36, 0x4b39, 0x9906, 0x4b2d, 0x98f8, 0x9901, 0x4b7a, 0x99be, 0x99bc, + 0x99b7, 0x99b6, 0x99c0, 0x4b78, 0x99b8, 0x4b7b, 0x4b7c, 0x4b7e, 0x99c4, + 0x4b7d, 0x99bf, 0x4bc9, 0x9ada, 0x9ae4, 0x9ae9, 0x9ae8, 0x9aea, 0x9ae5, + 0x4bf3, 0x9b26, 0x4c1a, 0x4c19, 0x9b40, 0x4c1f, 0x4ca6, 0x4ca7, 0x4ca8, + 0x4cab, 0x4ca9, 0x4d2e, 0x9ebd, 0x4d5e, 0x3495, 0x3493, 0x3492, 0x510e, + 0x3496, 0x50f7, 0x3497, 0x50fc, 0x510d, 0x5101, 0x51da, 0x51d9, 0x51db, + 0x5286, 0x528e, 0x52ee, 0x5333, 0x53b1, 0x35f5, 0x5647, 0x562d, 0x5654, + 0x35ea, 0x564b, 0x5652, 0x5631, 0x5644, 0x5656, 0x5650, 0x562b, 0x35f3, + 0x564d, 0x5637, 0x564f, 0x58a2, 0x58b7, 0x3669, 0x58b2, 0x366b, 0x58aa, + 0x58b5, 0x58b0, 0x366c, 0x58b4, 0x58a4, 0x58a7, 0x3668, 0x5926, 0x5afe, + 0x3728, 0x5b04, 0x3726, 0x5afc, 0x3725, 0x5b06, 0x5b0a, 0x5afa, 0x5b0d, + 0x5b00, 0x5b0e, 0x376b, 0x380f, 0x3808, 0x5d91, 0x380c, 0x5d8f, 0x5d90, + 0x5d98, 0x5da4, 0x5d9b, 0x5da3, 0x5d96, 0x5de4, 0x5e5a, 0x3860, 0x3862, + 0x5e5e, 0x3898, 0x5fb8, 0x6157, 0x615c, 0x61a6, 0x6195, 0x6188, 0x398a, + 0x61a3, 0x618f, 0x3984, 0x6164, 0x397f, 0x6159, 0x6178, 0x3982, 0x6185, + 0x6187, 0x619e, 0x3996, 0x3989, 0x6198, 0x619c, 0x398d, 0x39bc, 0x622f, + 0x6480, 0x649b, 0x648e, 0x648d, 0x6494, 0x64c6, 0x3a44, 0x64a8, 0x6483, + 0x3a3c, 0x64b9, 0x6486, 0x64b4, 0x64af, 0x6491, 0x3a4e, 0x64aa, 0x64a1, + 0x64a7, 0x66b6, 0x66b3, 0x3b14, 0x66bc, 0x66ac, 0x3b15, 0x66ad, 0x6a0e, + 0x3bce, 0x6a1c, 0x6a1a, 0x3be0, 0x3bc2, 0x6a0b, 0x3bbf, 0x69ef, 0x6a0c, + 0x69f0, 0x6a22, 0x3bc4, 0x69d8, 0x3bcf, 0x6a12, 0x69fa, 0x3bc8, 0x6a2a, + 0x3bcc, 0x6a10, 0x3bcd, 0x3bc7, 0x6a29, 0x69f9, 0x69ea, 0x6a2c, 0x6a24, + 0x4cb7, 0x69e9, 0x6b52, 0x6b4f, 0x6b53, 0x3c43, 0x3cb6, 0x6f10, 0x6f65, + 0x6f75, 0x3d51, 0x3d4a, 0x3d4d, 0x3d56, 0x6fd0, 0x3d53, 0x6f5c, 0x6f3d, + 0x6f71, 0x3d59, 0x6f91, 0x6f0b, 0x6f79, 0x6f81, 0x6f8f, 0x3d4e, 0x6f59, + 0x6f74, 0x3dee, 0x71ae, 0x3dec, 0x71a3, 0x71ad, 0x3deb, 0x3def, 0x71ab, + 0x71a6, 0x71a2, 0x3ded, 0x52f2, 0x7257, 0x7255, 0x7299, 0x734b, 0x747a, + 0x3ef2, 0x3eef, 0x3ef1, 0x748c, 0x7484, 0x3eed, 0x3ef0, 0x7482, 0x7493, + 0x747b, 0x3eee, 0x7509, 0x4c1b, 0x3f50, 0x3f66, 0x3684, 0x3fb8, 0x3ff6, + 0x778a, 0x4057, 0x7790, 0x405e, 0x78c6, 0x78d3, 0x78c0, 0x78d2, 0x78c7, + 0x78c2, 0x4119, 0x799f, 0x799d, 0x799e, 0x4170, 0x7a41, 0x416e, 0x7a38, + 0x7a3a, 0x7a42, 0x4172, 0x4176, 0x7a3e, 0x7ab0, 0x7bae, 0x7bb3, 0x4212, + 0x421f, 0x7bbf, 0x4211, 0x4216, 0x7bcd, 0x4219, 0x7bb2, 0x4224, 0x4214, + 0x4225, 0x4295, 0x4296, 0x4293, 0x4294, 0x7cc4, 0x7ccd, 0x7cc2, 0x7cc6, + 0x7cc3, 0x7cc9, 0x7cc7, 0x42a0, 0x7df8, 0x42fb, 0x7ded, 0x7de2, 0x42fc, + 0x4300, 0x42f8, 0x7ddc, 0x7e02, 0x7e01, 0x42f9, 0x7dd6, 0x4304, 0x7de4, + 0x7dfe, 0x4303, 0x7e00, 0x7dfc, 0x7dfd, 0x42f3, 0x7df5, 0x7dff, 0x42fa, + 0x7deb, 0x7de5, 0x7f78, 0x7fae, 0x7fe7, 0x43bf, 0x8065, 0x806a, 0x8066, + 0x8068, 0x806b, 0x8194, 0x81a1, 0x8192, 0x8196, 0x8193, 0x4479, 0x4510, + 0x8501, 0x4514, 0x84f8, 0x450e, 0x84f5, 0x451a, 0x8504, 0x4519, 0x4521, + 0x4523, 0x451f, 0x851b, 0x8503, 0x8533, 0x8534, 0x84ed, 0x4525, 0x452b, + 0x8535, 0x4516, 0x8505, 0x4522, 0x451b, 0x45ce, 0x45cf, 0x877d, 0x45cb, + 0x45d1, 0x45cc, 0x8771, 0x4617, 0x885c, 0x88e6, 0x890f, 0x891b, 0x4651, + 0x89a9, 0x89a5, 0x89ee, 0x8ab1, 0x46ed, 0x8acc, 0x8ace, 0x46f4, 0x8ab7, + 0x46f1, 0x8ab5, 0x8ae9, 0x8ab4, 0x46f8, 0x8ab3, 0x8ac1, 0x8aaf, 0x8aca, + 0x8ad0, 0x472f, 0x475e, 0x475d, 0x8c8e, 0x4776, 0x4777, 0x8ce9, 0x8cdb, + 0x477e, 0x8ceb, 0x8da4, 0x47b6, 0x8da2, 0x8d9d, 0x47b3, 0x47fc, 0x4803, + 0x4800, 0x8e2a, 0x8e28, 0x480a, 0x4802, 0x8eb8, 0x8eb6, 0x8eb9, 0x8eb7, + 0x8f22, 0x8f2b, 0x8f27, 0x8f19, 0x8fa4, 0x4887, 0x8fb3, 0x48a6, 0x9071, + 0x906a, 0x48a9, 0x48de, 0x9188, 0x918c, 0x92bf, 0x92b8, 0x92be, 0x92dc, + 0x92e5, 0x492e, 0x492d, 0x92d4, 0x92d6, 0x4930, 0x92da, 0x92ed, 0x92f3, + 0x92db, 0x492b, 0x92b9, 0x92e2, 0x92eb, 0x95af, 0x499e, 0x95b2, 0x95b3, + 0x499f, 0x49e5, 0x49e4, 0x96a3, 0x96a5, 0x49fd, 0x49fc, 0x4a17, 0x4a19, + 0x970a, 0x4a18, 0x9787, 0x9789, 0x978c, 0x97ef, 0x982a, 0x9822, 0x4abf, + 0x981f, 0x4b3c, 0x9919, 0x4b6b, 0x99ca, 0x99da, 0x4b83, 0x4b81, 0x4b80, + 0x99de, 0x99c8, 0x99e0, 0x4bca, 0x9ab6, 0x9ab5, 0x4bce, 0x9af4, 0x4bf6, + 0x9b6b, 0x9b69, 0x9b72, 0x9b63, 0x4c39, 0x9d0d, 0x4cae, 0x9d01, 0x9d0c, + 0x4cb5, 0x9cf8, 0x4cb3, 0x4cb4, 0x9cfe, 0x9d02, 0x9e84, 0x4d22, 0x9eab, + 0x9eaa, 0x511d, 0x5116, 0x3499, 0x512b, 0x511e, 0x511b, 0x5290, 0x5294, + 0x5314, 0x0b89, 0x3602, 0x5667, 0x3601, 0x567b, 0x36a1, 0x565f, 0x5661, + 0x35fd, 0x3673, 0x3674, 0x3670, 0x3676, 0x3675, 0x3672, 0x58c3, 0x58ca, + 0x58bb, 0x58c0, 0x58c4, 0x5901, 0x5b1f, 0x5b18, 0x5b11, 0x5b15, 0x3729, + 0x5b12, 0x5b1c, 0x372a, 0x5b22, 0x5b79, 0x5da6, 0x3816, 0x5db3, 0x5dab, + 0x5eea, 0x3899, 0x5f5b, 0x38d3, 0x38f5, 0x61b7, 0x61ce, 0x61b9, 0x61bd, + 0x61cf, 0x61c0, 0x6199, 0x6197, 0x3994, 0x61bb, 0x61d0, 0x61c4, 0x6231, + 0x3a56, 0x64d3, 0x64c0, 0x3a59, 0x3a58, 0x3a55, 0x3a52, 0x64dc, 0x64d1, + 0x64c8, 0x3a57, 0x64d5, 0x66c3, 0x3b1b, 0x3b1c, 0x66bf, 0x66c5, 0x3b19, + 0x66cd, 0x66c1, 0x6706, 0x3b3f, 0x6724, 0x6a63, 0x6a42, 0x6a52, 0x3bdb, + 0x6a43, 0x6a33, 0x3be2, 0x6a6c, 0x6a57, 0x3bd7, 0x6a4c, 0x6a6e, 0x3bde, + 0x3be5, 0x3be4, 0x3be6, 0x3bd6, 0x6a37, 0x3bdf, 0x6a71, 0x6a4a, 0x6a36, + 0x3bdc, 0x6a53, 0x3bda, 0x6a45, 0x6a70, 0x3bd3, 0x3bd0, 0x6a5c, 0x6b58, + 0x6b57, 0x3c86, 0x3c87, 0x3cad, 0x3cb7, 0x3d58, 0x3d6a, 0x6fbb, 0x3d62, + 0x3d61, 0x6fbe, 0x3d69, 0x3d6c, 0x3d65, 0x6fb5, 0x6fd3, 0x6f9f, 0x3d66, + 0x6fb7, 0x6ff5, 0x71b7, 0x3df5, 0x71bb, 0x3df4, 0x71d1, 0x3df7, 0x71ba, + 0x3df8, 0x71b6, 0x71cc, 0x3dfb, 0x3dfc, 0x71d3, 0x749b, 0x3ef5, 0x3ef8, + 0x7496, 0x74a2, 0x749d, 0x750a, 0x750e, 0x3f3c, 0x7581, 0x762c, 0x7637, + 0x7636, 0x763b, 0x3fc5, 0x76a1, 0x4062, 0x4063, 0x7798, 0x4067, 0x7796, + 0x4066, 0x40d9, 0x40db, 0x78d6, 0x78eb, 0x40d8, 0x78dc, 0x411b, 0x79a5, + 0x79a9, 0x9834, 0x7a53, 0x7a45, 0x4179, 0x7a4f, 0x417d, 0x7abd, 0x7abb, + 0x7af1, 0x422c, 0x4237, 0x7bec, 0x7bed, 0x4230, 0x429a, 0x7cd3, 0x4a00, + 0x7ce1, 0x4305, 0x7e19, 0x4307, 0x4309, 0x430a, 0x7e27, 0x7e26, 0x4379, + 0x43c2, 0x806e, 0x81af, 0x4438, 0x4437, 0x81ad, 0x4421, 0x81aa, 0x8218, + 0x445e, 0x453d, 0x4537, 0x4540, 0x856f, 0x854c, 0x451d, 0x8542, 0x4533, + 0x855c, 0x8570, 0x855f, 0x4535, 0x855a, 0x854b, 0x853f, 0x878a, 0x45d8, + 0x878b, 0x87a1, 0x878e, 0x45dc, 0x45de, 0x8799, 0x885e, 0x885f, 0x8924, + 0x89a7, 0x8aea, 0x8afd, 0x8af9, 0x8ae3, 0x8ae5, 0x46fa, 0x46fb, 0x8aec, + 0x473d, 0x473b, 0x473f, 0x475f, 0x8cf2, 0x477f, 0x8cef, 0x4784, 0x8da6, + 0x47bc, 0x4814, 0x480f, 0x8e3b, 0x8e43, 0x480e, 0x8e32, 0x8f31, 0x8f30, + 0x4860, 0x8f2d, 0x8f3c, 0x8fa7, 0x8fa5, 0x48ab, 0x48ac, 0x48aa, 0x9137, + 0x9195, 0x918e, 0x4904, 0x9196, 0x4908, 0x9345, 0x930a, 0x4933, 0x4934, + 0x92fd, 0x9317, 0x931c, 0x9307, 0x9331, 0x9332, 0x932c, 0x9330, 0x9303, + 0x9305, 0x49a2, 0x95c2, 0x49a4, 0x95b8, 0x49a5, 0x95c1, 0x49a7, 0x49a6, + 0x49e7, 0x96ab, 0x96b7, 0x49ff, 0x49fe, 0x9715, 0x9714, 0x4a1d, 0x4a1c, + 0x970c, 0x9717, 0x4a67, 0x9793, 0x4a94, 0x97d2, 0x4ac5, 0x4ac8, 0x9836, + 0x9831, 0x9833, 0x983c, 0x982e, 0x983a, 0x4ac9, 0x983d, 0x4ac7, 0x98b5, + 0x9922, 0x9923, 0x9920, 0x991c, 0x991d, 0x4b6c, 0x99a0, 0x4b8a, 0x99ef, + 0x99e8, 0x99eb, 0x4b88, 0x4b87, 0x4b86, 0x99e1, 0x99e6, 0x4bcf, 0x4bd0, + 0x9af8, 0x9af5, 0x4c1c, 0x4c23, 0x9b83, 0x9b94, 0x9b84, 0x4c49, 0x9b8b, + 0x9b8f, 0x4c43, 0x9b8c, 0x4c48, 0x9b89, 0x4c47, 0x9b8e, 0x4c46, 0x4c3f, + 0x4c44, 0x9d24, 0x9d0f, 0x4cbe, 0x9d13, 0x9d0a, 0x4cc2, 0x4cba, 0x4cbc, + 0x4cc6, 0x9d2a, 0x9d1a, 0x4cc8, 0x9d27, 0x9d16, 0x9d21, 0x4d23, 0x9e85, + 0x9eac, 0x9ec6, 0x9ec5, 0x9ed7, 0x9f53, 0x349d, 0x5128, 0x5127, 0x51df, + 0x3524, 0x5335, 0x53b3, 0x3607, 0x568a, 0x567d, 0x5689, 0x3679, 0x58cd, + 0x58d0, 0x3678, 0x5b2b, 0x5b33, 0x5b29, 0x5b35, 0x5b31, 0x5b37, 0x5c36, + 0x5dbe, 0x3819, 0x5db9, 0x381c, 0x5dbb, 0x3818, 0x61e2, 0x61db, 0x61dd, + 0x61dc, 0x61da, 0xf8af, 0x61d9, 0x39bd, 0x3a5d, 0x64df, 0x3a5a, 0x3a5e, + 0x64e1, 0x3a5c, 0x64ee, 0x3a5b, 0x65b5, 0x66d4, 0x66d5, 0x3b21, 0x66d0, + 0x66d1, 0x66ce, 0x66d7, 0x3b20, 0x3b32, 0x6a7d, 0x6a8a, 0x3bf2, 0x6aa7, + 0x3bf5, 0x6a99, 0x6a82, 0x6a88, 0x3bee, 0x3bec, 0x6a86, 0x3bea, 0x6a98, + 0x6a9d, 0x3bed, 0x3bf3, 0x6a8f, 0x3bf6, 0x6aaa, 0x3c48, 0x6b5d, 0x3c49, + 0x6c0a, 0x3d75, 0x6fd7, 0x6fd6, 0x6fe5, 0x3d6f, 0x3d7b, 0x3d73, 0x6fd9, + 0x6fda, 0x6fea, 0x3d70, 0x6ff6, 0x4039, 0x3d78, 0x71e3, 0x3dfe, 0x71e9, + 0x3e00, 0x71eb, 0x71ef, 0x71f3, 0x71ea, 0x3e01, 0xf921, 0x3e55, 0x3e56, + 0x3e9d, 0x7371, 0x3ef9, 0x74ae, 0x3eff, 0x74b3, 0x3efd, 0x74ac, 0x3f43, + 0x3f41, 0x7583, 0x7645, 0x764e, 0x7644, 0x76a3, 0x76a5, 0x77a6, 0x77a4, + 0x406f, 0x77a9, 0x77af, 0x408a, 0x40e5, 0x40e6, 0x78f0, 0x78f8, 0x78f1, + 0x417f, 0x7a49, 0x41b5, 0x41b6, 0x41bb, 0x7ac2, 0x7af2, 0x7af3, 0x7bfa, + 0x4240, 0x7bf6, 0x7bfc, 0x7c18, 0x7c08, 0x7c12, 0x429d, 0x429c, 0x7cdb, + 0x7cda, 0x430f, 0x4311, 0x430d, 0x7e2c, 0x7e4d, 0x4314, 0x4313, 0x7f46, + 0x7ff6, 0x802b, 0x8074, 0x81b8, 0x81c8, 0x4482, 0x4483, 0x454d, 0x8592, + 0x8593, 0x454f, 0x857f, 0x85ab, 0x8597, 0x454c, 0x4551, 0x85ac, 0x45ee, + 0x45e8, 0x4ccb, 0x87ce, 0x45eb, 0x87cd, 0x45e2, 0x45e6, 0x87c1, 0x87b1, + 0x87c7, 0x45ec, 0x8940, 0x4659, 0x893f, 0x8939, 0x465d, 0x8943, 0x4657, + 0x465b, 0x4656, 0x89ab, 0x46fe, 0x8b1f, 0x8b09, 0x8b0c, 0x4700, 0x4701, + 0x8c40, 0x4742, 0x8c96, 0x4760, 0x8cf6, 0x8cf7, 0x481d, 0x8e46, 0x8e4f, + 0x483e, 0x4869, 0x4865, 0x8f3d, 0x8f41, 0x9366, 0x9378, 0x935d, 0x9369, + 0x9374, 0x937d, 0x936e, 0x9372, 0x9373, 0x9362, 0x9348, 0x9353, 0x935f, + 0x9368, 0x4938, 0x937f, 0x936b, 0x49ae, 0x95c4, 0x49ad, 0x96af, 0x96ad, + 0x96b2, 0x4a02, 0x4a1f, 0x971a, 0x971b, 0x4a22, 0x4a20, 0xf9f5, 0x4a6c, + 0x979b, 0x979f, 0x4a68, 0x4a6d, 0x4a6e, 0x4aa0, 0x4ace, 0x4ad0, 0x4ad1, + 0x4acb, 0x9840, 0x4ad2, 0x9847, 0x4ad3, 0x98b7, 0x4b20, 0x4b4e, 0x4b4b, + 0x4b72, 0x4b70, 0x99a2, 0x4b92, 0x4b8f, 0x9a00, 0x99f3, 0x4b90, 0x9937, + 0x99f5, 0x4bd9, 0x4bd5, 0x9abd, 0x9b00, 0x9b02, 0x4bfa, 0x9b34, 0x9b49, + 0x9b9f, 0x4c4b, 0x9ba3, 0x9bcd, 0x9b99, 0x9b9d, 0x4cd0, 0x4cce, 0x9d39, + 0x4ccf, 0x9d44, 0x4cc4, 0x4ccc, 0x9d35, 0x4cd2, 0x4d35, 0x9eaf, 0x3e03, + 0x512f, 0x349e, 0x34af, 0x9f8e, 0x360c, 0x569f, 0x569b, 0x569e, 0x5696, + 0x5694, 0x56a0, 0x367c, 0x5b3b, 0x3730, 0x3731, 0x5b3a, 0x5dc1, 0x5f4d, + 0x5f5d, 0x61f3, 0x39a1, 0x399e, 0x3a68, 0x3a61, 0x64f6, 0x64e5, 0x64ea, + 0x64e7, 0x6505, 0x3a65, 0x64f9, 0x3a66, 0x3a6a, 0x3aab, 0x6aab, 0x6aed, + 0x6ab2, 0x6ab0, 0x6ab5, 0x6abe, 0x6ac1, 0x6ac8, 0x3bf9, 0x6ac0, 0x6abc, + 0x6ab1, 0x6ac4, 0x6abf, 0x3c58, 0x3c8a, 0x7008, 0x7003, 0x6ffd, 0x7010, + 0x7002, 0x7013, 0x3e04, 0x71fa, 0x7200, 0x74b9, 0x74bc, 0x3f02, 0x765b, + 0x7651, 0x764f, 0x76eb, 0x77b8, 0x4079, 0x77b9, 0x77c1, 0x77c0, 0x77be, + 0x790b, 0x40eb, 0x7907, 0x790a, 0x7908, 0x40e9, 0x790d, 0x7906, 0x7915, + 0x79af, 0x4120, 0x4121, 0x4181, 0x7af5, 0x424d, 0x4259, 0x7c2e, 0x4258, + 0x7c1b, 0x5cd1, 0x7c1a, 0x7c24, 0x42a5, 0x42a9, 0x7ce6, 0x7ce3, 0x431a, + 0x4319, 0x7e5d, 0x7e4f, 0x7e66, 0x7e5b, 0x7f47, 0x7fb4, 0x4396, 0x4398, + 0x4397, 0x7ffa, 0x802e, 0x65df, 0x43c8, 0x81ce, 0x4443, 0x4445, 0x8219, + 0x4552, 0x4557, 0x85cc, 0x85b2, 0x4555, 0x85bb, 0x85c1, 0x4556, 0x4558, + 0x45f2, 0x87e9, 0x87ee, 0x87f0, 0x87d6, 0x880e, 0x87da, 0x8948, 0x894a, + 0x894e, 0x894d, 0x89b1, 0x89b0, 0x89b3, 0x4707, 0x8b38, 0x8b32, 0x4708, + 0x8b2d, 0x470a, 0x8b34, 0x431b, 0x8b29, 0x8c74, 0x4761, 0x4762, 0x8d03, + 0x47c2, 0x47c6, 0x8da9, 0x8e58, 0x481e, 0x4825, 0x8ebf, 0x8ec1, 0x8f4a, + 0x8fac, 0x48b0, 0x9089, 0x913d, 0x913c, 0x91a9, 0x93a0, 0x493d, 0x9390, + 0x493e, 0x9393, 0x938b, 0x93ad, 0x93bb, 0x93b8, 0x4946, 0x4945, 0x939c, + 0x95d8, 0x95d7, 0x4a03, 0x4a26, 0x4a27, 0x975d, 0x97a9, 0x97da, 0x4a98, + 0x4aad, 0x4ad5, 0x4ada, 0x9854, 0x4ad9, 0x9855, 0x984b, 0x4add, 0x983f, + 0x98b9, 0x4b15, 0x4b16, 0x4b17, 0x4b21, 0x9938, 0x9936, 0x9940, 0x4b4c, + 0x993b, 0x9939, 0x99a4, 0x4b96, 0x4b98, 0x9a08, 0x9a0c, 0x4b9b, 0x9a10, + 0x4bff, 0x9b07, 0x4c25, 0x9bd2, 0x4c4f, 0x9bc2, 0x9bbb, 0x9bcc, 0x9bcb, + 0x4c56, 0x4c54, 0x9d4d, 0x9d63, 0x9d4e, 0x4cd8, 0x9d50, 0x9d55, 0x4cd7, + 0x9d5e, 0x4d26, 0x9e90, 0x9eb2, 0x9eb1, 0x4d38, 0x9eca, 0x9f02, 0x9f27, + 0x9f26, 0x4d8a, 0x56af, 0x58e0, 0x58dc, 0x3734, 0x5b39, 0x3735, 0xf86a, + 0x5b7c, 0x5bf3, 0xf870, 0x37a1, 0x5c6b, 0x5dc4, 0x650b, 0x6508, 0x650a, + 0x3a6c, 0x3a6d, 0x65dc, 0x3b29, 0x3b2a, 0x66e1, 0x66df, 0x6ace, 0x6ad4, + 0x6ae3, 0x6ad7, 0x6ae2, 0x3c00, 0x3c08, 0x3c06, 0x3c05, 0x6ad8, 0x6ad5, + 0x6ad2, 0x3cb1, 0x3d88, 0x701e, 0x702c, 0x7025, 0x6ff3, 0x7204, 0x7208, + 0x7215, 0x3e09, 0x74c4, 0x74c9, 0x74c7, 0x74c8, 0x76a9, 0x77c6, 0x77c5, + 0x7918, 0x791a, 0x7920, 0x4122, 0x7a66, 0x7a64, 0x7a6a, 0x41d5, 0x4261, + 0x425d, 0x4262, 0x424f, 0x4260, 0x7c35, 0x7c34, 0x42aa, 0x4322, 0x7e6c, + 0x4321, 0x7e6e, 0x7e71, 0x4446, 0x81d4, 0x81d6, 0x821a, 0x8262, 0x8265, + 0x8276, 0x85db, 0x85d6, 0x4562, 0x85e7, 0x4560, 0x4564, 0x85f4, 0xf9b6, + 0x87fd, 0x87d5, 0x8807, 0x45f6, 0x880f, 0x87f8, 0xf9c1, 0x4619, 0x8987, + 0x4691, 0x89b5, 0x89f5, 0x470d, 0x8b3f, 0x8b43, 0x8b4c, 0x4765, 0x8d0b, + 0x8e6b, 0x8e68, 0x8e70, 0x8e75, 0x8e77, 0x483f, 0x8ec3, 0x494b, 0x93e9, + 0x93ea, 0x93cb, 0x93c5, 0x93c6, 0x4948, 0x93ed, 0x93d3, 0x4952, 0x93e5, + 0x494a, 0x4951, 0x93db, 0x93eb, 0x93e0, 0x93c1, 0x4950, 0x494c, 0x95dd, + 0x49ee, 0x4a04, 0x4a06, 0x4a2d, 0x4a2e, 0x4a2f, 0x4a7b, 0x4a78, 0x4a77, + 0x97b2, 0x97b4, 0x97b1, 0x97b5, 0x97f2, 0x4aa2, 0x4aa1, 0x4ae3, 0x9856, + 0x4b1a, 0x4b19, 0x4b57, 0x9944, 0x4b9e, 0x9a26, 0x9a1f, 0x9a18, 0x9a21, + 0x9a17, 0x4bdd, 0x9b09, 0x4c05, 0x4c28, 0x9bc5, 0x9bdf, 0x4c60, 0x9be3, + 0x4c66, 0x9be9, 0x9bee, 0x4c67, 0x4c68, 0x9d66, 0x9d7a, 0x4cde, 0x9d6e, + 0x9d91, 0x9d83, 0x9d76, 0x9d7e, 0x9d6d, 0x4ce1, 0x9e95, 0x9ee3, 0x4d69, + 0x4d77, 0x9f03, 0x9f04, 0xfa19, 0x9f17, 0x34a6, 0x5136, 0x34a5, 0x5336, + 0x3614, 0x5b42, 0x3736, 0x3738, 0x5b44, 0x5b46, 0x5b7e, 0x5dca, 0x5dc8, + 0x5dcc, 0x5ef0, 0x3a70, 0x6585, 0x66e5, 0x66e7, 0x3b2b, 0x3c11, 0x3c0a, + 0x6af4, 0x3c0d, 0x6ae9, 0x3c16, 0x3c10, 0x3c09, 0x3c0e, 0x3c7a, 0x703d, + 0x3d8c, 0x7036, 0x3d91, 0x7216, 0x3e0a, 0x7212, 0x720f, 0x7217, 0x7211, + 0x720b, 0x3e08, 0x3e0b, 0x74cd, 0x74d0, 0x74cc, 0x74ce, 0x74d1, 0x3f07, + 0x7589, 0x40f2, 0x7a6f, 0x7c4b, 0x7c44, 0x7c55, 0x42ae, 0x4324, 0x4326, + 0x4327, 0x7e7f, 0x8b71, 0x4399, 0x802f, 0x807a, 0x807b, 0x807c, 0x455f, + 0x456a, 0x4571, 0x85fc, 0x8610, 0x8602, 0x456c, 0x456f, 0x85ee, 0x8603, + 0x4568, 0x860d, 0x8613, 0x8608, 0x860f, 0x8818, 0x8812, 0x4601, 0x4668, + 0x8967, 0x8965, 0x89bb, 0x8b69, 0x8b62, 0x4713, 0x8b6e, 0x4716, 0x8b61, + 0x4718, 0x8b64, 0x8b4d, 0x8c51, 0x4789, 0x47c8, 0x8e83, 0x8ec6, 0x4884, + 0x941f, 0x4954, 0x9404, 0x9417, 0x9408, 0x9405, 0x4956, 0x93f3, 0x941e, + 0x9402, 0x941a, 0x941b, 0x9427, 0x941c, 0x495a, 0x96b5, 0x4a05, 0x4a07, + 0x9733, 0x4a31, 0x9734, 0x9731, 0x97b8, 0x97ba, 0x4aa3, 0x97fc, 0x4aeb, + 0x4b1c, 0x98c3, 0x4b5a, 0x994d, 0x4b5b, 0x9a2f, 0x4ba6, 0x4baa, 0x4ba5, + 0x9ac9, 0x4be1, 0x9ac8, 0x9ac4, 0x9b2a, 0x9b38, 0x9b50, 0x4c2a, 0x9c0a, + 0x9bfb, 0x9c04, 0x9bfc, 0x9bfe, 0x4c72, 0x4c6f, 0x4c73, 0x9c02, 0x9bf6, + 0x9c1b, 0x9bf9, 0x9c15, 0x9c10, 0x9bff, 0x9c00, 0x9c0c, 0x4c6b, 0x4ce6, + 0x9d95, 0x9da5, 0x4ce9, 0x4cec, 0x4ce8, 0x4cf0, 0x9e98, 0x9ec1, 0x4d8c, + 0x9f5a, 0x5164, 0x56bb, 0x3615, 0x58e6, 0x5b49, 0x5bf7, 0x3771, 0x3826, + 0x5dd0, 0x38c6, 0x5fc2, 0x39a8, 0x6511, 0x3a73, 0x6aff, 0x6afe, 0x6afd, + 0x3c15, 0x6b01, 0x3d98, 0x3d97, 0x704b, 0x704d, 0x7047, 0x74d3, 0x7668, + 0x7667, 0x3fd7, 0x4080, 0x77d1, 0x7930, 0x7932, 0x792e, 0x4188, 0x9f9d, + 0x7ac9, 0x7ac8, 0x4269, 0x7c56, 0x7c51, 0x426b, 0x4329, 0x4328, 0x7e85, + 0x7e89, 0x7e8e, 0x7e84, 0x445f, 0x826a, 0x862b, 0x862f, 0x8628, 0x4574, + 0x8616, 0x8615, 0x861d, 0x881a, 0x4602, 0x466a, 0x4694, 0x89bc, 0x8b75, + 0x8b7c, 0x478a, 0x8d11, 0x8d12, 0x8f5c, 0x91bb, 0x4964, 0x93f4, 0x495e, + 0x4961, 0x942d, 0x4965, 0x4966, 0x96e4, 0x9737, 0x9736, 0x9767, 0x97be, + 0x97bd, 0x97e2, 0x9868, 0x9866, 0x98c8, 0x98ca, 0x98c7, 0x98dc, 0x4b5f, + 0x994f, 0x99a9, 0x9a3c, 0x4baf, 0x9a3b, 0x9ace, 0x4c0d, 0x9b14, 0x9b53, + 0x4c7c, 0x9c2e, 0x4c7a, 0x9c1f, 0x4c76, 0x4c79, 0x4c7d, 0x4c77, 0x9db0, + 0x9dbd, 0x4cf6, 0x4cf1, 0x9dae, 0x9dc4, 0x9e7b, 0x400b, 0x4d29, 0x9e9e, + 0x4d6f, 0x9f05, 0x4d9a, 0x9f69, 0x9fa1, 0x56c7, 0x571d, 0x5b4a, 0x5dd3, + 0x3869, 0x5f72, 0x6202, 0x39ab, 0x6235, 0x6527, 0x651e, 0x651f, 0x3b2c, + 0x3b2d, 0x6b07, 0x6b06, 0x3c17, 0x3d9a, 0x7054, 0x721c, 0x7220, 0x7af8, + 0x426e, 0x7c5d, 0x7c58, 0x432c, 0x7e92, 0x7f4e, 0x43ca, 0x4578, 0x4606, + 0x8827, 0x4607, 0x8b81, 0x8b83, 0x4720, 0x8c44, 0x4753, 0x47ce, 0x487a, + 0x4879, 0x9442, 0x944d, 0x9454, 0x944e, 0x496b, 0x9443, 0x4967, 0x496d, + 0x973c, 0x9740, 0x97c0, 0x4a85, 0x4ab0, 0x4af3, 0x4b63, 0x995a, 0x9a51, + 0x4bb6, 0x9add, 0x4c82, 0x4c7f, 0x9c38, 0x4c86, 0x9c45, 0x9c3a, 0x4c84, + 0x9c35, 0x4cfc, 0x4cfd, 0x4cfa, 0x9ef1, 0x4d87, 0x9f93, 0x529a, 0x361a, + 0x3619, 0x8641, 0x5dd7, 0x3a75, 0x6528, 0x3c1a, 0x3c1b, 0x3c19, 0x7053, + 0x7059, 0x3d9c, 0x7221, 0x3e10, 0x766f, 0x7937, 0x79b5, 0x7c62, 0x7c5e, + 0x7cf5, 0x457b, 0x457c, 0x863d, 0x4608, 0x882d, 0x8989, 0x8b8d, 0x8b87, + 0x8b90, 0x8d1a, 0x8e99, 0x4841, 0x48e3, 0x4972, 0x945f, 0x4973, 0x4968, + 0x9456, 0x9461, 0x945b, 0x945a, 0x945c, 0x9465, 0x4a35, 0x9741, 0x4a88, + 0x4a9d, 0x986e, 0x986c, 0x986d, 0x4275, 0x99aa, 0x9a5c, 0x9a58, 0x9ade, + 0x4c8f, 0x9c4f, 0x9c51, 0x4c8e, 0x9c53, 0x4d05, 0x4d04, 0x4cff, 0x9dfc, + 0x9f39, 0x4d9e, 0x513e, 0x3554, 0x56d2, 0x3681, 0x5b4f, 0x6b14, 0x40fa, + 0x7a72, 0x7a73, 0x4332, 0x4670, 0x466e, 0x8b91, 0xf9d6, 0x487c, 0x91bf, + 0x4975, 0x946c, 0x4974, 0x4977, 0x96e6, 0x9745, 0x4a37, 0x97c8, 0x97e4, + 0x995d, 0x4bba, 0x9b21, 0x4c11, 0x9b2c, 0x9b57, 0x4c92, 0x4c99, 0x9c5d, + 0x9c61, 0x9c65, 0x9e08, 0x4d0a, 0x4d2a, 0x4d2b, 0x4d44, 0x4d79, 0x9f45, + 0x34aa, 0x3748, 0x6205, 0x66ef, 0x6b1b, 0x6b1d, 0x7225, 0x7224, 0x7c6d, + 0x42b4, 0x8642, 0x8649, 0x460d, 0x8978, 0x898a, 0x8b97, 0x4754, 0x8c9b, + 0x8d1c, 0x4830, 0x8ea2, 0x4a09, 0x4a38, 0x4a36, 0x4a8b, 0x4af7, 0x4b66, + 0x4bbd, 0x4c1e, 0x9c6c, 0x4c96, 0x9c6f, 0x4d0d, 0x9e0e, 0x4d73, 0x9f08, + 0x9f1d, 0x9fa3, 0x373b, 0x373c, 0x5f60, 0x6b1c, 0x3da0, 0x40fb, ERROR, + 0x7cf3, 0x4581, 0x8b9b, 0x8ea7, 0x91c4, 0x4978, 0x947a, 0x4a8d, 0x4b73, + 0x9a61, 0x9a63, 0x9ad7, 0x9c76, 0x4da6, 0x9fa5, 0x39ad, 0x7067, 0x3e11, + 0x72ab, 0x864a, 0x897d, 0x8b9d, 0x8c53, 0x8f65, 0x947b, 0x4a39, 0x98cd, + 0x98dd, 0x4bbf, 0x9b30, 0x9e16, 0x4d0f, 0x4da7, 0x4db5, 0x3fdc, 0x4831, + 0x96e7, 0x9e18, 0x9ea2, 0x4da8, 0x9f7c, 0x4125, 0x7e9e, 0x9484, 0x4bc1, + 0x9e1c, 0x4190, 0x7c71, 0x97ca, 0x4696, 0x487f, 0x4d10, 0x9ea3, 0x4a0a, + 0x9c7b, 0x9f97, 0x4d12, 0x4a3a, 0x9750, 0x4a3b, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, 0x0086, 0x4e40, 0x4e41, 0x4e5a, 0x1fe8, 0x4e02, + 0x4e29, 0x010e, 0x0627, 0x5202, 0x353e, 0x5ddc, 0x053c, 0x0675, 0xf828, + 0x5342, 0x536a, 0x5b52, 0x193c, 0xf875, 0xf878, 0x5fc4, 0x624c, 0x72ad, + 0x4e12, 0x4e2f, 0x4e96, 0x4ed0, 0x5142, 0x5183, 0xf819, 0x06a5, 0x06aa, + 0x090f, 0x0a0e, 0x5383, 0x53b8, 0x0b9c, 0x0b9b, 0x123c, 0x5928, 0x1bc2, + 0x5c23, 0x5e01, 0x5f00, 0x33b4, 0x3cb8, 0x706c, 0x722b, 0x5188, 0x8279, + 0x8fb6, 0x4e17, 0x0065, 0x340c, 0x01b2, 0x3430, 0x4ee2, 0x4edb, 0x0477, + 0x0542, 0x51ad, 0x0633, 0x51f7, 0x34da, 0x06af, 0x0836, 0x3513, 0x531b, + 0x5388, 0x5387, 0x0b22, 0x53cf, 0x53fd, 0x3563, 0x53e7, 0x56dc, 0x11a3, + 0x56d9, 0x5725, 0x5727, 0x5933, 0x5c13, 0x1c25, 0x1c24, 0x5c75, 0x2052, + 0x2189, 0x24bf, 0x39c4, 0x39c3, 0x66f1, 0x33b5, 0x574c, 0x7f52, 0x8e14, + 0x8e12, 0x3401, 0x00a3, 0x00a2, 0x4e51, 0x4e6a, 0x01b6, 0x4f0c, 0x01b5, + 0x01b4, 0x4efe, 0x4f1b, 0x01c2, 0x01b8, 0x343a, 0x0479, 0x34ab, 0x5173, + 0x0508, 0x518e, 0x057a, 0x05b6, 0x06bd, 0x06b7, 0x06bc, 0x34dd, 0x06c4, + 0x06c9, 0x52a5, 0x3515, 0x52a7, 0x52a4, 0x0930, 0x0983, 0x0985, 0x0a12, + 0x0a34, 0x53bd, 0x0ae4, 0x0ade, 0x0b2a, 0x5402, 0x0baf, 0x0bb4, 0x0bb3, + 0x0bb1, 0x572b, 0x591b, 0x5935, 0x15de, 0x36a7, 0x36a5, 0x16b8, 0x16b0, + 0x36a6, 0x19c2, ERROR, 0x5c17, 0x377c, 0x1c2a, 0x5c70, 0x5c7d, 0x37a9, + 0x1fe9, 0x5de9, 0x2057, 0x3834, 0x3835, 0x21b6, 0x21d7, 0x21de, 0x38a8, + 0x5f19, 0x5f1c, 0x5f75, 0x24c2, 0x25ab, 0x38ff, 0x5fc8, 0x298f, 0x39c7, + 0x39c6, 0x39c8, 0x2a6d, 0x2eb5, 0x3ad0, 0x3ad1, 0x33c0, 0x33bf, 0x3c59, + 0x39b9, 0x3b1c, 0x6c12, 0x3cbd, 0x3c80, 0x4184, 0x4185, 0x3e28, 0x72b3, + 0x4724, 0x3ea9, 0x7390, 0x7536, 0x634c, 0x43cc, 0x6af6, 0x8281, 0x8fb8, + 0x8670, 0x48b4, 0x8675, 0x8e17, 0x4e23, 0x3416, 0x342c, 0x01f1, 0x4f2e, + 0x01da, 0x514f, 0x05b9, 0x51ba, 0x34df, 0x34e0, 0x5222, 0x06ce, 0x06d2, + 0x06d0, 0x3517, 0x0843, 0x52af, 0x52b0, 0x52b1, 0x084d, 0x0934, 0x352f, + 0x09d9, 0x5364, 0x0a18, 0x53d3, 0x0b38, 0x356a, 0x0bd7, 0x3570, 0x356d, + 0x0bdc, 0x0bcb, 0x0bd6, 0x0bd8, 0x356e, 0x0bd1, 0xf83e, 0xf83c, 0x0bd2, + 0x362b, 0x3628, 0x1259, ERROR, 0x593f, 0x15e5, 0x15e6, 0x3692, 0x15e8, + 0x598b, 0x16bd, 0x5991, 0x5995, 0x16be, 0x1949, 0x373f, 0x19cd, 0x5b8a, + 0x374f, 0x3774, 0x1b5e, 0x1bd0, 0x377d, 0x1d06, 0x37b7, 0x37a3, 0x37b0, + 0x37b1, 0x5c87, 0x37ab, 0x1d7c, 0x1d71, 0x1fef, 0x383a, 0x3837, 0x5e0d, + 0x3838, 0x3840, 0x218d, 0x21b7, 0x5e8e, 0x389f, 0x2333, 0x237f, 0x5f7a, + 0x25f2, 0x3904, 0x3909, 0x3906, 0x38fd, 0x390a, 0x3907, 0x2a2a, 0x2a8b, + 0x39ca, 0x2a83, 0x2a8a, 0x6290, 0x39c9, 0x2a8e, 0x629a, 0x2eb6, 0x653c, + 0x653a, 0x3a7f, 0x6598, 0x30d8, 0x3ad2, 0x3156, 0x33d2, 0x6765, 0xf8db, + 0x3b43, 0x33c2, 0x3887, 0x3881, 0x39c2, 0x39bc, 0x3b23, 0x3cc1, 0x3c93, + 0x3cc5, 0x3da3, 0x418d, 0x418e, 0x3e2a, 0x3e5f, 0x473b, 0x474d, 0x3e5d, + 0x4734, 0x4731, 0x48f2, 0x48f0, 0x3f17, 0x4c15, 0x4d28, 0x3f71, 0x3f72, + 0x4f25, 0x50e7, 0x400f, 0x50e9, 0x5417, 0x79c2, 0x4191, 0x626c, 0x6280, + 0x634b, 0x43b2, 0x43cf, 0x43ce, 0x809e, 0x68de, 0x68fb, 0x81eb, 0x6951, + 0x8289, 0x4496, 0x6b01, 0x6b02, 0x8296, 0x6b05, 0x8287, 0x6b03, 0x4497, + 0x8451, 0x8fc0, 0x488b, 0x8fc3, 0x8453, 0x867a, 0x8678, 0x8676, 0x8679, + 0x868f, 0x867c, 0x9578, 0x8e1b, 0x8e1c, 0x9625, 0x3d92, 0x4e75, 0x4e74, + 0x012e, 0x012c, 0x342d, 0x020c, 0x4f99, 0x020b, 0x3450, 0x344b, 0x0205, + 0x344f, 0x344c, 0xf805, 0x4f71, 0x5153, 0x51bf, 0x05c2, 0x05c3, 0x51c0, + 0x0648, 0x51ee, 0x0646, 0x34e4, 0x34e3, 0x06ea, 0x34e1, 0x06eb, 0x34e2, + 0x06ee, 0x523d, 0x3519, 0x52bd, 0x530c, 0x08d8, 0x4c1e, 0x09df, 0x09de, + 0x3541, 0x7f37, 0x0a4f, 0x53c0, 0x355e, 0x0c0d, 0x0c08, 0x3579, 0x0c09, + 0x546e, 0x5483, 0x0c12, 0x0c65, 0x545e, 0x545d, 0x577e, 0x5779, 0x1289, + 0x577a, 0x576c, 0x1284, 0x129e, 0x128b, 0x3632, 0x5787, 0x1562, 0x591d, + 0x3694, 0x5946, 0x3697, 0x15f9, 0x5943, 0x15f7, 0x3696, 0x3698, 0x1606, + 0x16dd, 0x36b2, 0x16d9, 0x16df, 0x16e2, 0x36b9, 0x5b61, 0x5b66, 0x00f1, + 0x5b90, 0x3775, 0x377f, 0x377e, 0x5c29, 0x378f, 0x1c3f, 0x1c3e, 0x1d0b, + 0x37bd, 0x5cb2, 0x1d83, 0x37bb, 0x37bc, 0x1d86, 0x5cc0, 0x207c, 0x383d, + 0x383e, 0x3874, 0x21f7, 0x387a, 0x3876, 0x3878, 0x3875, 0x21fb, 0x233b, + 0x38af, 0x38b0, 0x38c7, 0x38cc, 0x25f9, 0x25ca, 0x3916, 0x25ff, 0x3912, + 0x391d, 0x2609, 0x2603, 0x3915, 0x390f, 0x3914, 0x601f, 0x5fe2, 0x2610, + 0x299a, 0x299f, 0x39b0, 0x39bf, 0x39c0, 0x2a87, 0x39d2, 0x39d9, 0x2eb7, + 0x3a7a, 0x2f08, 0x2ef9, 0x3a81, 0x3a82, 0x2ef4, 0x6616, 0x65f9, 0x3ada, + 0x6657, 0x6788, 0x33d6, 0x679b, 0xf8de, 0x676e, 0x679e, 0x33d4, 0x3c22, + 0x3c1f, 0x3890, 0x388d, 0x3c21, 0x6b24, 0x3960, 0x39ce, 0x39cf, 0x3c5c, + 0x6b7d, 0x39d1, 0x3c7d, 0x3c8d, 0x3c8f, 0x6ce6, 0x3cca, 0x6ccb, 0x3cd0, + 0x3cb7, 0x3cd8, 0x3cb2, 0x3cbb, 0x3cb9, 0x6cb5, 0x3da7, 0x419e, 0x7097, + 0x41b2, 0x709b, 0x3e12, 0x456f, 0x45ac, 0x3e2f, 0x4623, 0x726b, 0x3e2e, + 0x3e2c, 0x3e5c, 0x476c, 0x72d5, 0x4732, 0x475e, 0x3e62, 0x3e67, 0x3eb4, + 0x48fb, 0x4b29, 0x4bbd, 0x4c1f, 0x7543, 0x2341, 0x4c1d, 0x759c, 0x4d31, + 0x4d2f, 0x3fea, 0x5043, 0x3ffb, 0x5041, 0x4014, 0x50f5, 0x4013, 0x4012, + 0x4010, 0x4011, 0x50f2, 0x4086, 0x77e4, 0x4098, 0x541e, 0x5754, 0x412a, + 0x5756, 0x5929, 0x5927, 0x5928, 0x7ace, 0x42b5, 0x6279, 0x627e, 0x64b6, + 0x64b7, 0x8013, 0x43d6, 0x43d8, 0x80b7, 0x43d9, 0x43d4, 0x43d7, 0xf981, + 0x80b9, ERROR, 0x664d, 0x81e4, 0x81fd, 0x820f, 0x4460, 0x6a09, 0x6a08, + 0x449e, 0x44a1, 0x6b1e, 0x6b1a, 0x6b23, 0x6b15, 0x6b19, 0x6b16, 0x82bf, + 0x82ca, 0x6b14, 0x6b18, 0x82c1, 0x44a0, 0x721f, 0x75dd, 0x75df, 0x8469, + 0x8fd0, ERROR, 0x846c, 0x48b9, 0x8693, 0x90ae, 0x8695, 0x8694, 0x8691, + 0x8697, 0x8e30, 0x49c1, 0x49c2, 0x9638, 0xfa18, 0x341c, 0x0231, 0x345e, + 0x4fbc, 0x3459, 0x345c, 0x0236, 0x345f, 0x4fe9, 0x4fbd, 0x4fe2, 0x5158, + 0x05c9, 0x05ca, 0x34ce, 0x0718, 0x0712, 0x0719, 0x0710, 0x0716, 0x52c6, + 0x085f, 0x52c8, 0x08df, 0x0917, 0x5328, 0x093c, 0x5329, 0x09ea, 0x09e9, + 0x0a1c, 0x0a58, 0x0a64, 0x0af3, 0x355f, 0x0c97, 0x3585, 0x0c5a, 0x0c59, + 0x3586, 0x0c8e, 0x57b4, 0x12bc, 0x57a9, 0x3687, 0x160d, 0x15fc, 0x160c, + 0x1707, 0x170a, 0x36ca, 0x1702, 0x36c3, 0x1726, 0x1708, 0x171d, 0x36c2, + 0x5b68, 0x194e, 0x3741, 0x19ed, 0x19ee, 0x19ef, 0x3780, 0x3781, 0x1c50, + 0x1c4c, 0x3793, 0x3792, 0x1c4f, 0x37c5, 0x1dd4, ERROR, 0x1db0, 0x3846, + 0x3841, 0x3845, 0x3842, 0x383f, 0x20a5, 0x2209, 0x3882, 0x3881, 0x387f, + 0x38a5, 0x5f2b, 0x38b3, 0x38b5, 0x23f3, 0x23d7, 0x5f8d, 0x38da, 0x24dc, + 0x38db, 0x390d, 0x6018, 0x390e, 0x260b, 0x391e, 0x3925, 0x3926, 0x391c, + 0x3921, 0x6057, 0x6048, 0x3927, 0x391a, 0x263a, 0x260d, 0x2611, 0x6038, + 0x2620, 0x2601, 0x3924, 0x2637, 0xf8a3, 0x6071, 0x29aa, 0x39c1, 0x39e1, + 0x2ae7, 0x2ae8, 0x6312, 0x39eb, 0x2af5, 0x39e2, 0x39d7, 0x39e9, 0x2b35, + 0x2ae6, 0x630a, 0x2af8, 0x6323, 0x2af1, 0x3a84, 0x2f14, 0x2f15, 0x2f09, + 0x3ab5, 0x3abc, 0x3adc, 0x3ade, 0x3adf, 0x317b, 0x662a, 0x317e, 0x3366, + 0x3367, 0x340a, 0x3b54, 0x67e0, 0x67be, 0x3b53, 0x3c24, 0x3c25, 0x6b29, + 0x3c28, 0x3c27, 0x389c, 0x3962, 0x39e1, 0x39de, 0x39df, 0x39e9, 0x3c8b, + 0x3ce4, 0x3cf7, 0x3cdc, 0x6d43, 0x3cea, 0x3cf6, 0x3d12, 0xf901, 0x70a6, + 0x3db2, 0x70c0, 0x41d9, 0x722f, 0x455f, 0x3e1b, 0x4573, 0x3e32, 0x7271, + 0x463f, 0x4778, 0x3e6b, 0x477d, 0x3e6c, 0x3e6d, 0x4912, 0x3eb9, 0x3eba, + 0x3f09, 0x3f0a, 0x4b2f, 0x74ea, 0x3f1b, 0x4b30, 0x4bdb, 0x7520, 0x3f58, + 0x4c29, 0x3f5a, 0xf936, 0x4d40, 0x3f77, 0x4d3d, 0x4d3e, 0x3f79, 0x75a9, + 0x4d38, 0x7685, 0x4f48, 0x3feb, 0x4fd0, 0x3ffd, 0x3ffc, 0x7706, 0x4015, + 0x4018, 0x76f6, 0x4016, 0x4017, 0x4019, 0x7700, 0x401b, 0x510e, 0x5109, + 0x7702, 0x5107, 0x4087, 0x535f, 0x5360, 0x409c, 0x542a, 0x409a, 0x5429, + 0x40ff, 0x40fe, 0x564d, 0x4131, 0x412e, 0x4130, 0x4132, 0x576c, ERROR, + 0x412f, 0x5767, 0x4195, 0x4196, 0x5939, 0x5934, 0x5a59, 0x41c5, 0x427a, + 0x6223, 0x4342, 0x6282, 0x4354, 0x6283, 0x62a8, 0x6355, 0x63f9, 0x63f8, + 0x63fc, 0x63fa, 0x8009, 0xf97a, 0x439f, 0x43a0, 0x43a2, 0x43e0, 0x6674, + 0x43e1, 0x666b, 0x6671, 0x43df, 0x6676, 0x6a0e, 0x4462, 0x4461, 0x6a10, + 0x6a0f, 0x44a7, 0x6b38, 0x6b39, 0x6b3a, 0x82da, 0x6b37, 0x6b3e, 0x830a, + 0x4589, 0x719c, 0x722a, 0x723a, 0x722b, 0x7228, 0x75aa, 0x760f, 0x461d, + 0x7610, 0x77e6, 0x472a, 0x7d25, 0x7e8e, 0x47d3, 0x4842, 0x4843, 0x848b, + 0x4891, 0x848c, 0x849a, 0x4890, 0x48bf, 0x86b3, 0x48bc, 0x86b2, 0x48c0, + 0x49c7, 0x49c5, 0x9655, 0x8e44, 0x9652, 0x4e35, 0x0158, 0x02a7, 0x5034, + 0x5001, 0x0263, 0x500a, 0x3466, 0x026a, 0x0265, 0x026b, 0x34ad, 0x04ed, + 0x05d9, 0x073b, 0x0732, 0x5258, 0x0735, 0x0731, 0x073e, 0x0743, 0x0736, + 0x086d, 0x351d, 0x08e4, 0x3531, 0x532b, 0x09f4, 0x354c, 0x0a69, 0x0a6b, + 0x3595, 0x3591, 0x3594, 0x0cbf, 0x0cc3, 0x0cae, 0x358f, 0x54ec, 0x0cb1, + 0x5515, 0x54fe, 0x0cbb, 0x0caf, 0x0cb0, 0x54e3, 0x5516, 0x3640, 0x12ef, + 0x3641, 0x12ed, 0x57d3, 0x12f0, 0x1593, 0x1634, 0x162b, 0x5959, 0x5a27, + 0x36d8, 0x36d2, 0x36da, 0x5a28, 0x5a10, 0x36d7, 0x5a0e, 0x3742, 0x3757, + 0x1a04, 0x1a03, 0x1a02, 0x5baf, 0x1a05, 0x5bba, 0x5bb1, 0x1a00, 0x1b74, + 0x3778, 0x3782, 0x3797, 0x1c65, 0x1c63, 0x37c9, 0x1dd7, 0x37c8, 0x37d6, + 0x37cc, 0x1de8, 0x37d0, 0x1ddb, 0x1dd8, 0x37ce, 0x37c7, 0x5cfc, 0x1e09, + 0x37cf, 0x37cb, 0x5cf2, 0x5cfe, 0x1de5, 0x1de7, 0x5df8, 0x203f, 0x3847, + 0x20c0, 0x3848, 0x20b9, 0x20ba, 0x3883, 0x3885, 0x3884, 0x2220, 0x234f, + 0x5f2c, 0x38b8, 0x38bc, 0x2491, 0x2490, 0x24ee, 0x24f3, 0x24ec, 0x24f1, + 0x24eb, 0x24f2, 0x24f4, 0x24ed, 0x2641, 0x2648, 0x2645, 0x3931, 0x3934, + 0x3936, 0x6082, 0x267f, 0x268b, 0x3923, 0x263b, 0x264e, 0x393a, 0x6091, + 0x608f, 0x267c, 0x39b4, 0x39b5, 0x39ed, 0x39ec, 0x39d8, 0x2af0, 0x2b36, + 0x2b3f, 0x2b43, 0x2b31, 0x2b34, 0x2b46, 0x39f6, 0x39e7, 0x2b2f, 0x2ec3, + 0x3a7c, 0x3a7b, 0x2f36, 0x3a88, 0x6547, 0x654c, 0x2f21, 0xf8c8, 0x658a, + 0x3073, 0x3abe, 0x30e6, 0x3ae7, 0x3ae5, 0x3aee, 0x67e1, 0x684a, 0x343f, + 0x3b59, 0x3b5e, 0x346b, 0x3b5a, 0x683f, 0x3b61, 0x3b58, 0x3b5b, 0x67bd, + 0x3471, 0x3b5f, 0xf8e2, 0x3c2a, 0x3c2d, 0x38b0, 0x3c23, 0x3c2b, 0x3c2c, + 0x39f3, 0x3c7e, 0xf8f5, 0x3c93, 0x3c99, 0x3b61, 0x3b5f, 0x3cb3, 0x3ce7, + 0x3cea, 0x3d28, 0x3d1e, 0x3d29, 0xf902, 0x3ceb, 0x3d66, 0x3db4, 0x41f6, + 0x70c9, 0x3e17, 0x4560, 0x4577, 0x45bb, 0x3e21, 0x45bc, 0x3e38, 0x3e37, + 0x3e74, 0x3e73, 0x3e75, 0x47a2, 0x47b2, 0x479e, 0x3e76, 0x3e78, 0x493a, + 0x4938, 0x73ba, 0x3f0c, 0x3f20, 0x3f1e, 0x4c4d, 0x3f5b, 0x4c5e, 0x3f5c, + 0x4d17, 0x3f83, 0x75c6, 0x3f80, 0x3f81, 0x3f7e, 0x3f88, 0x3f85, 0x3f89, + 0x3f7f, 0x3f8e, 0x4d64, 0x4d67, 0x3f84, 0x75b7, 0x768c, 0x4f59, 0x768d, + 0x4fda, 0x3fee, 0x3fed, 0x3ffe, 0x5051, 0x3fff, 0x5055, 0x513b, 0x5134, + 0x4023, 0x5137, 0x7717, 0x5131, 0x771c, 0x401f, 0x513f, 0x5159, 0x7714, + 0x5361, 0x408f, 0x4090, 0x5458, 0x5462, 0x5450, 0x40a0, 0x5451, 0x40a6, + 0x409f, 0x5446, 0x40a7, 0x40a1, 0x562d, 0x4102, 0x4136, 0x5948, 0x5951, + 0x594a, 0x594f, 0x5950, 0x5949, 0x5a63, 0x41c8, 0x5a66, 0x5a60, 0x41d8, + 0x7b0c, 0x41dd, 0x41dc, 0x5af1, 0x41d7, 0x5b07, 0x41da, 0x42ba, 0x5f9b, + 0x5fa3, 0x5f9d, 0x42be, 0x42c2, 0x42bb, 0x42c0, 0x5fa9, 0x5fa7, 0x5fa4, + 0x7d23, 0x5fba, 0x21c1, 0x6226, 0x4343, 0x4355, 0x6294, 0x6293, 0x4357, + 0x4368, 0x7f98, 0x7f90, 0x6407, 0x640d, 0x6402, 0x640c, 0x6409, 0x6408, + 0x6413, 0x43a1, 0x64d2, 0x803a, 0x653e, 0x653c, 0x6667, 0x669e, 0x43ea, + 0x66ad, 0x43e7, 0x66d9, 0x6642, 0x66a3, 0x66a0, 0x43e8, 0x43e9, 0x667c, + 0x6904, 0x4454, 0x6958, 0x6960, 0x69c9, 0x69c8, 0x8226, 0x4465, 0x6a1c, + 0x6a1a, 0x448a, 0x6b74, 0x44b0, 0x6b6e, 0x6b6f, 0x6b79, 0x44bc, 0x832e, + 0x6b77, 0x8355, 0x831a, 0x44b8, 0x833d, 0x6b7c, 0x44b2, 0x6b70, 0x8330, + 0x44bd, 0x6b7a, 0x6b82, 0x458a, 0x8651, 0x45a1, 0x7244, 0x45a2, 0x7243, + 0x8688, 0x7245, 0x4615, 0x7625, 0x761f, 0x4620, 0x4673, 0x77e8, 0x898e, + 0x898d, 0x7809, 0x78b7, 0x78b9, 0x7964, 0x7963, 0x8a09, 0x8a14, 0x46b1, + 0x7962, 0x7965, 0x472b, 0x7bac, 0x4745, 0x7d2a, 0x4797, 0x4798, 0x7e96, + 0x47d5, 0x7fc2, 0xf9de, 0x4893, 0x4896, 0x9007, 0x4894, 0x84aa, 0x84b0, + 0x48c7, 0x48c5, 0x86d4, 0x86cd, 0x86d6, 0x48c4, 0x87f0, 0x9579, 0x9584, + 0x49ce, 0x49ca, 0x49cc, 0x9657, 0x49c9, 0x96ba, ERROR, 0x9d4b, 0x0162, + 0x346e, 0x02b7, 0x5067, 0x02ac, 0x02ab, 0x3471, 0x02c1, 0x34bb, 0x34d3, + 0x05e8, 0x0769, 0x075d, 0x075f, 0x34f3, 0x34ed, 0x34f5, 0x0764, 0x0762, + 0x34f1, 0x34f2, 0x34f6, 0x3520, 0x08f9, 0x3528, 0x08ee, 0x5318, 0x532c, + 0x5359, 0x09ab, 0x09ac, 0x09aa, 0x5368, 0x537e, 0x0a86, 0x0a7a, 0x53a1, + 0x0d28, 0x35a1, 0x555b, 0x35aa, 0x35a9, 0x0d31, 0x35b5, 0x35a5, 0x35a8, + 0x5542, 0x35a7, 0x5547, 0x0d2d, 0xf843, 0x553d, 0x0d2b, 0x0d32, 0x5560, + 0x57eb, 0x1329, 0x1326, 0x1353, 0x364d, 0x1333, 0x1334, 0x159d, 0x369c, + 0x595f, 0x1641, 0x36ea, 0x36e5, 0x1791, 0x1769, 0x5b6f, 0x1a22, 0x375e, + 0x1a34, 0xf86d, 0x1b2e, 0x3786, 0x3784, 0x1bf4, 0x5c5a, 0x1e28, 0x37d9, + 0x1e1c, 0x37de, 0x1e11, 0x1e24, 0x1e15, 0x37db, 0x1e16, 0x1e54, 0x1e23, + 0x1fff, 0x3831, 0x20cf, 0x20d0, 0x384b, 0x20ce, 0x3849, 0x384a, 0x384c, + 0x21c7, 0x225c, 0x388a, 0x2236, 0x3889, 0x388b, 0x2243, 0x38bb, 0x5fa2, + 0x5f9d, 0x38e4, 0x252a, 0x2501, 0x5fa3, 0x250b, 0x250f, 0x393b, 0x392e, + 0x393e, 0x3946, 0x3953, 0x26df, 0x3944, 0x26d2, 0x393f, 0x3942, 0x394f, + 0x26cd, 0x3952, 0x394a, 0x60c2, 0x26db, 0x395a, 0x60a5, 0x3949, 0x26cf, + 0x621c, 0x29c0, 0x621d, 0x3a03, 0x2b81, 0x2b82, 0x2b8a, 0x2ba8, 0x2b8c, + 0x6395, 0x639a, 0x3a01, 0x3a06, 0x39fb, 0x39f9, 0x2b8e, 0x3a05, 0x39fa, + 0x2b8b, 0x63a6, 0x2b96, 0x39fe, 0x2bcc, 0x3a7d, 0x3a8c, 0x2f4f, 0x2f4a, + 0x6550, 0x3a8e, 0x2f4b, 0x2f3d, 0x6552, 0x2f44, 0x2f49, 0x309e, 0x30f3, + 0x65c8, 0x30f5, 0x3af0, 0x3af2, 0x31b3, 0x6658, 0x3af1, 0x3ae6, 0x31e5, + 0x31b6, 0xf8d8, 0x6888, 0x3486, 0x3b6f, 0x3b6d, 0x3b69, 0x34b6, 0x3485, + 0x3b6e, 0x34ab, 0x3c2f, 0x3c30, 0x3c63, 0x3a0d, 0x3a8b, 0x3a8c, 0x6bb8, + 0x3c80, 0x6bb9, 0x3c9a, 0x3c94, 0x3c96, 0x3c95, 0x3c97, 0x3b72, 0x3cf4, + 0x3cfe, 0x3d8f, 0x3d01, 0x3d79, 0x3d02, 0x3d77, 0x3cf9, 0x3d90, 0x3d88, + 0x3d80, 0x3d9e, 0x3cf6, 0x3cf7, 0x3d82, 0x3d34, 0x3d89, 0x3cff, 0x3d85, + 0x3d7e, 0x3d7a, 0x3da6, 0x6e0b, 0x3db5, 0x41f4, 0x3dbf, 0x3dbc, 0x7105, + 0x4229, 0x4226, 0x422a, 0x3dbe, 0x3dc0, 0x457e, 0x3e3b, 0x3e39, 0x465b, + 0x4661, 0x4660, 0x3e3c, 0x479b, 0x7314, 0x7304, 0x47c3, 0x3e7d, 0x47cd, + 0x3e7f, 0x3e7a, 0x3e7c, 0x7305, 0x3e7e, 0x7315, 0x730d, 0x3e80, 0x3ebf, + 0x3ec3, 0x4954, 0x4959, 0x3ecc, 0x3f0e, 0x3f0d, 0x4af5, 0x3f26, 0x3f24, + 0x3f25, 0x3f23, 0x3f21, 0x3f29, 0x4c69, 0x4c65, 0x3f8f, 0x3f8d, 0x4d7c, + 0x3f8b, 0x3f92, 0x4d80, 0x3f90, 0x4f65, 0x3fef, 0x3ff0, 0x4fdf, 0x5060, + 0x4001, 0x505e, 0x402e, 0x402d, 0x772e, 0x4028, 0x4029, 0x402c, 0x518f, + 0x5161, 0x515a, 0x7741, 0x4088, 0x5367, 0x4092, 0x4091, 0x77ea, 0x53bb, + 0x7844, 0x40a9, 0x40ac, 0x40ae, 0x40aa, 0x4106, 0x4105, 0x414a, 0x413e, + 0x413c, 0x413b, 0x579b, 0x4142, 0x4141, 0x4143, 0x57a9, 0x4145, 0x5966, + 0x419a, 0x419b, 0x419f, 0x419e, 0x5a72, 0x5a76, 0x5b14, 0x41de, 0x41e2, + 0x41e6, 0x5b0f, 0x7b29, 0x41e3, 0x7b27, 0x41df, 0x5e41, 0x5e46, 0x7c9d, + 0x5e4b, 0x5e43, 0x427e, 0x42c9, 0x42cc, 0x5fc6, 0x42d1, 0x5fc7, 0x42d0, + 0x5fce, 0x42cf, 0x42c8, 0x5fc9, 0x42cd, 0x5fcb, 0x5fc5, 0x4349, 0x4347, + 0x4358, 0x436b, 0x436c, 0x436a, 0x6369, 0x4380, 0x4382, 0x4384, 0x7fc8, + 0x4383, 0x641e, 0x64ba, 0x43b6, 0x6552, 0x6551, 0x6553, 0x669f, 0x66db, + 0x8126, 0x43f1, 0x66e3, 0x43f6, 0x43f3, 0x43f0, 0x811c, 0x66d7, 0x66e9, + 0x8128, 0x43f5, 0x43f4, 0x43f7, 0x66de, 0x66dc, 0x693c, 0xf98b, 0x4455, + 0x6a22, 0x6a32, 0x6a23, 0x448b, 0x44cb, 0x44c2, 0x6bd4, 0x6bc8, 0x6bbc, + 0x44ca, 0x44cc, 0x6bcd, 0x44c7, 0x44c9, 0x8370, 0x6bbe, 0x44c6, 0x6c40, + 0x6bd6, 0x44c3, 0x8382, 0x6bbd, 0x83ac, 0x6bba, 0x44c4, 0x6bc0, 0xf99b, + 0xf99d, 0x6bc1, 0x71a6, 0x71a5, 0x71a8, 0x45a9, 0x86ad, 0x45a8, 0x45a6, + 0x725f, 0x7270, 0x726a, 0x7265, 0x7267, 0x726f, 0x7287, 0x86ca, 0x8851, + 0x763d, 0x7643, 0x4622, 0x7640, 0x4626, 0x4624, 0x4625, 0x889d, 0x462a, + 0x4674, 0x7818, 0x4679, 0x8990, 0x467a, 0x7819, 0x78c1, 0x89d8, 0x89d7, + 0x4697, 0x78bc, 0x78c8, 0x8a2e, 0x7971, 0x46bc, 0x796e, 0x46b3, 0x7978, + 0x46bf, 0x46b7, 0xf9cd, 0x797a, 0x7bb1, 0x7baf, 0x7bb0, 0x4734, 0x4746, + 0x4748, 0x8c59, 0x7ca8, 0x7ca6, 0x4756, 0x4767, 0x7d48, 0x7d45, 0x4768, + 0x4799, 0x479a, 0x7ea0, 0x7ea4, 0x47d8, 0x7fd4, 0x47db, 0x47dc, 0x47dd, + 0x47d7, 0x7fd2, 0x8222, 0x4849, 0x484a, 0x8eda, 0x82b7, 0x82cc, 0x9033, + 0x84e6, 0x9018, 0x489a, 0x84c8, 0x48cd, 0x48ca, 0x86f4, 0x48cb, 0x86ed, + 0x48cf, 0x867e, 0xf9e3, 0x48cc, 0x48ea, 0x48ed, 0x87f9, 0x87fd, 0x48e9, + 0x8807, 0x491a, 0x91ef, 0x498d, 0x49d2, 0x8e78, 0x8e7a, 0x8e79, 0x8f8a, + 0x49f2, 0x907b, 0x91d5, 0x91e9, 0x4a3d, 0x91eb, 0x4a3e, 0x4af8, 0x4b23, + 0x9ad9, 0x4eb4, 0x016c, 0x50a0, 0x5090, 0x3475, 0x5086, 0x5084, 0x02fa, + 0x508a, 0x3476, 0x3473, 0x509f, 0x50a1, 0x0318, 0x5093, 0x34bd, 0x05f6, + 0x51d5, 0x078a, 0x0789, 0x34f9, 0x077f, 0x0788, 0x34fa, 0x0783, 0x0784, + 0x0798, 0x0763, 0x0787, 0x3521, 0xf827, 0x3529, 0x08f5, 0x0950, 0x3538, + 0x354e, 0x0a87, 0x0a8a, 0x0b65, 0x0db7, 0x0dc1, 0x0dc7, 0x35c8, 0x35bc, + 0x0dc5, 0x0dcb, 0x5590, 0x0dd1, 0x35bb, 0x35c2, 0x35c0, 0x0db8, 0x0dca, + 0x35ca, 0x0dde, 0x35c9, 0x0dce, 0x35b8, 0x5710, 0x5817, 0x1368, 0x364e, + 0x136b, 0x5844, 0x3650, 0x582b, 0x136a, 0x5845, 0x1366, 0x1377, 0x1396, + 0x136e, 0xf856, 0x368a, 0x1657, 0x5965, 0x1656, 0x179c, 0x179e, 0x36fc, + 0x36f9, 0x17a1, 0x3763, 0x1a42, 0x5bcf, 0x1a46, 0x1a3e, 0x1b33, 0x3787, + 0x3788, 0x1bfa, 0x379a, 0x1c97, 0x1c9b, 0x1caa, 0x5d56, 0x1e73, 0x1e7c, + 0x37e9, 0x1e86, 0x37ea, 0x5d54, 0x3850, 0x20f3, 0x20f0, 0x3856, 0x3852, + 0x384f, 0x3854, 0x3851, 0x20ec, 0x22af, 0x388e, 0x388f, 0x2264, 0x2268, + 0x235a, 0x5f3d, 0x251f, 0x2525, 0x38ed, 0x38eb, 0x5fa4, 0x26c6, 0x26d6, + 0x26c3, 0x3962, 0x272c, 0x395d, 0x272e, 0x275e, 0x2733, 0x3961, 0x3965, + 0x395c, 0x272d, 0x2746, 0x395f, 0x26c1, 0x273a, 0x29cc, 0x2b9d, 0x2b83, + 0x2bf6, 0x63ec, 0x3a16, 0x3a0a, 0x2bf8, 0x3a0e, 0x3a12, 0x2bfe, 0x2bf3, + 0x3a11, 0x2beb, 0x2bfa, 0x3a10, 0x2c07, 0x2bfc, 0x3a09, 0x63fa, 0x3a15, + 0x63d4, 0x2f72, 0x2f73, 0x2f74, 0x3a91, 0x3a95, 0x3a93, 0x3a92, 0x3a8f, + 0x2f5f, 0x2f60, 0x30aa, 0x3134, 0x3af6, 0x31b4, 0x3afb, 0x31f0, 0x6675, + 0x3af9, 0x320d, 0x31f3, 0x320f, 0x671c, 0x3b7d, 0x34c9, 0x3b7a, 0x3b7f, + 0x34c5, 0x3b78, 0x34d7, 0x34cc, 0x68d9, 0x34e7, 0x3b70, 0x3b82, 0x34c1, + 0x3b84, 0x34e8, 0x3c33, 0x38cb, 0x3c32, 0x3c36, 0x38c8, 0x397a, 0x3c56, + 0x3979, 0x397e, 0x3c67, 0x3a1b, 0x3c65, 0x3c64, 0x3c66, 0x3a1f, 0x3a19, + 0x3c81, 0x3c82, 0x3c83, 0x3c9e, 0x3b89, 0x6bf1, 0x3c9d, 0x3b8b, 0x3d0f, + 0x3d12, 0x3e09, 0x3dfe, 0x3e00, 0x3d10, 0x3d18, 0x3e0b, 0x3d14, 0x3d19, + 0x6e37, ERROR, 0x3e4a, 0x6e7d, 0x6e86, 0x3dc8, 0x3dc4, 0x3dc6, 0x4279, + 0x3dc7, 0x3dc3, 0x426c, 0x4299, 0xf91b, 0x4262, 0x4514, 0x3e19, 0x3e1c, + 0x45c8, 0x45d7, 0x460c, 0x3e41, 0x4670, 0x3e42, 0x3e43, 0x4671, 0x47df, + 0x47e4, 0x3e82, 0x47e7, 0x3e81, 0x3e94, 0x3e84, 0x4990, 0x3ed2, 0x3f0f, + 0x3f22, 0x4b4c, 0x3f27, 0x3f2a, 0x74fa, 0x3f28, 0x4b4f, 0x3f60, 0x4c7d, + 0x4c7e, 0x4c7c, 0x7572, 0x4c8d, 0x4d19, 0x3f9b, 0x3f9c, 0x4dc0, 0x3f93, + 0x3f94, 0x75dc, 0x3fa0, 0x3f99, 0x4db6, 0x3fa1, 0x4da8, 0x3ff1, 0x4feb, + 0x4fe7, 0x506f, 0x51c7, 0x4036, 0x519f, 0x4037, 0x403f, 0x403c, 0x51c4, + 0x4034, 0x4039, 0x403b, 0x4035, 0x4030, 0x4032, 0x4038, 0x403e, 0x403a, + 0x519b, 0x5197, 0x51c5, 0x536b, 0x53ce, 0x40b6, 0x7867, 0x54b1, 0x54ae, + 0x54b0, 0x40b3, 0x4109, 0x7977, 0x573e, 0x57b5, 0x57ba, 0x414c, 0x57b2, + 0x57b4, 0x4153, 0x414d, 0x4151, 0x414f, 0x7a9b, 0x5977, 0x41a2, 0x5986, + 0x597b, 0x41cd, 0x5a7e, 0x5b2e, 0x41e7, 0x5b2f, 0x41f0, 0x5b37, 0x41e9, + 0x41ec, 0x5b32, 0x41e8, 0x41ee, 0x4202, 0x5b36, 0x5b39, 0x5b35, 0x5e5c, + 0x4282, 0x4283, 0x4286, 0x5e7b, 0x5e61, 0x5fee, 0x5feb, 0x5fef, 0x6020, + 0x7d2a, 0x7d65, 0x434a, 0x6230, 0x435a, 0x7f64, 0x62be, 0x436e, 0x6367, + 0x637c, 0x4370, 0x436f, 0x6424, 0x438a, 0x4387, 0x4388, 0x6429, 0x64ef, + 0x8020, 0x43b7, 0x43fd, 0x8120, 0x670d, 0x4405, 0x813c, 0x4408, 0x4403, + 0x4402, 0x4404, 0x3b39, 0x4409, 0x43ff, 0x6764, 0x813f, 0x6715, 0x43fc, + 0x4401, 0x440a, 0x81f0, 0x81f5, 0x446b, 0x446c, 0x6a35, 0x6a36, 0x6a34, + 0x6a37, 0x6c47, 0x6c2b, 0x44de, 0x6c41, 0x6c43, 0x44db, 0x6c42, 0x44dd, + 0x44e3, 0x6c32, 0x44e0, 0x44d9, 0x44d8, 0x44e4, 0x6c44, 0x6c4a, 0x44da, + 0x44ef, 0xf9a0, 0x8415, 0x83be, 0x6c54, 0x6c6e, 0x6c52, 0x44d7, 0x45b3, + 0x45bb, 0x86e5, 0x45b2, 0x86d2, 0x45ad, 0x7292, 0x45af, 0xf9b8, 0x86e0, + 0x72bf, 0x4616, 0x4628, 0x4623, 0x88b3, 0x7641, 0x7669, 0x7665, 0x4675, + 0x467e, 0x467c, 0x7822, 0x781d, 0x78d2, 0x78da, 0x78db, 0x46ce, 0x46cd, + 0x46cf, 0x8a53, 0x79a4, 0x799e, 0x8a37, 0x8a47, 0x8a5c, 0x799d, 0x46c4, + 0x46cc, 0x46c8, 0x46c7, 0x79ad, 0x79a6, 0x79a7, 0x7bb3, 0x7be0, 0x7c35, + 0x7c37, 0x475a, 0x476a, 0x7d4a, 0x476b, 0x476d, 0x476f, 0x7e5e, 0x479e, + 0x7ec0, 0x47a4, 0x47a3, 0x47e4, 0x47e8, 0x47e9, 0x47e0, 0x47e3, 0x7ff9, + 0x47ea, 0x47e1, 0x47ed, 0x4834, 0x4835, 0x4851, 0x8ef0, 0x84f0, 0x489d, + 0x84f3, 0x851b, 0x84f2, 0x84fb, 0x871c, 0x8713, 0x48d0, 0x870f, 0x48ee, + 0x8816, 0x8811, 0x8812, 0x48f2, 0x880e, 0x921d, 0x4988, 0x8c67, 0x8cf2, + 0x8cda, 0x498f, 0x8cdc, 0x49d8, 0x8f94, 0x8f9b, 0x8f92, 0x8f9a, 0x9088, + 0x9086, 0x4a3f, 0x91ef, 0x4a52, 0x976b, 0x925e, 0x4a50, 0x9458, 0x4ab1, + 0x9456, 0x9454, 0x4af9, 0x959b, 0x9696, 0x96a4, 0x4b26, 0x4b28, 0x969a, + 0x9a12, 0x3480, 0x50c0, 0x3481, 0x036b, 0x347e, 0x347f, 0x0337, 0x033c, + 0xf80a, 0x04f7, 0x34be, 0x0566, 0x34d6, 0x07a9, 0x07ae, 0x07ad, 0x07c8, + 0x07a5, 0x07b0, 0x0895, 0x52e5, 0x0925, 0x3534, 0x0a99, 0x53af, 0x0b74, + 0x0b70, 0x0b6f, 0x0e41, 0x0e54, 0x35d5, 0x35d8, 0x0e40, 0x0e38, 0x35d4, + 0x55d8, 0x35d9, 0x0e52, 0x0e3a, 0x0e57, 0xf84a, 0x0e59, 0x5711, 0x5867, + 0x13b4, 0x13c0, 0x365d, 0x5843, 0x365e, 0x3659, 0x1375, 0x365a, 0x36a0, + 0x1660, 0x1647, 0x3705, 0x17f0, 0x3707, 0x17ef, 0x370e, 0x370c, 0x17ec, + 0x1983, 0x3745, 0x1984, 0x198f, 0x3764, 0x1a61, 0x3765, 0x1a69, 0x5bdd, + 0x3766, 0x1a62, 0x3789, 0x37ec, 0x37f1, 0x5d70, 0x5d6a, 0x37f0, 0x37f8, + 0x5d74, 0x5d5f, 0x1eae, 0x5d61, 0x5d73, 0x1eb2, 0x37f2, 0x37f4, 0x210b, + 0x3858, 0x2110, 0x210d, 0x385a, 0x3859, 0x3857, 0x385b, 0x5e50, 0x227f, + 0x2281, 0x38a6, 0x38c2, 0x38c1, 0x5f3f, 0x240b, 0x254e, 0x38ef, 0x5fb0, + 0x27ea, 0x2745, 0x3968, 0x6135, 0x612d, 0x3973, 0x396e, 0x3974, 0x6102, + 0x3966, 0x2728, 0x275d, 0x29dc, 0x39b9, 0x6226, 0x29d4, 0x3a0c, 0x2c64, + 0x2c68, 0x3a20, 0x2c62, 0x3a1d, 0x2c61, 0x3a1c, 0x2c66, 0x3a21, 0x3a1a, + 0x3a19, 0x2bf2, 0x2c69, 0x2c67, 0x3a7e, 0x2f9a, 0x2f9b, 0x2f85, 0x2f9c, + 0x3a9d, 0x2fa4, 0x3a9e, 0x3a9c, 0x656e, 0x2f99, 0x2f86, 0x2f90, 0x3081, + 0x30ae, 0x65b1, 0x65d4, 0x3acd, 0x3138, 0x3b0b, 0x3b0a, 0x6685, 0x353b, + 0x3b8f, 0x6972, 0x3b95, 0x3b90, 0x3b91, 0x354c, 0x693a, 0x3bb9, 0x3547, + 0x3535, 0x3b97, 0x3b9e, 0x3533, 0x3b8b, 0x3582, 0x3540, 0x3c3b, 0x3c3a, + 0x3c3c, 0x3c3d, 0x3c39, 0x3c3e, 0x3c6b, 0x3c6c, 0x3a36, 0x3b0e, 0x3ca2, + 0x3ca1, 0x3c9f, 0x3bad, 0x3baa, 0x3e17, 0x3d2d, 0x3e67, 0x3d36, 0x3d2b, + 0x3e72, 0x3d37, 0xf90a, 0x3e61, 0x3eb0, 0x6ead, 0x3d25, 0x3d2f, 0x3d2c, + 0x3e6e, 0x3e64, 0x3d32, 0x3e8c, 0x3e66, 0x6e95, 0x3e6b, 0x3e5f, 0x3e74, + 0x3e65, 0x42bb, 0x42be, 0x3dd5, 0x42b9, 0x3dd4, 0x3dd6, 0x42ef, 0x3dd1, + 0x7243, 0x45da, 0x3e46, 0x728f, 0x4690, 0x47e9, 0x3e8c, 0x3e8a, 0x3e88, + 0x4811, 0x480d, 0x47ed, 0x4821, 0x3edd, 0x4981, 0x49b1, 0x4b01, 0x3f2d, + 0x4b5e, 0x4b62, 0x3f2e, 0x3f2c, 0x3f2b, 0x3f30, 0x4b5b, 0x3f4e, 0x4c96, + 0x4c93, 0x3f64, 0x3f61, 0x4c92, 0x7575, 0xf939, 0x3f70, 0x3fa6, 0x3fa4, + 0x4dc4, 0x4dc7, 0x4dc3, 0x3fa8, 0x3fa2, 0x4dc8, 0x3fa7, 0x75ec, 0x3fa5, + 0x4dca, 0x3fa9, 0x4dc5, 0x4dcf, 0x4ddc, 0x4f7c, 0x5001, 0x403d, 0x51d3, + 0x51dc, 0x4044, 0x4045, 0x4046, 0x51d4, 0x7757, 0x51cc, 0x4047, 0x4048, + 0x4042, 0x51d6, 0x51db, 0x4041, 0x51d5, 0x53d9, 0x4094, 0x53dd, 0x53dc, + 0x53e0, 0x54cc, 0x40c0, 0x40b8, 0x40c1, 0x40c2, 0x40bb, 0x40bd, 0x40bf, + 0x40b9, 0x40b7, 0x54d2, 0x40c7, 0x54d3, 0x410c, 0x410b, 0x797b, 0x4110, + 0x568d, 0x415d, 0x7a21, 0x415a, 0x4158, 0x4156, 0x57d8, 0x4154, 0x7a16, + 0x57bc, 0x41a8, 0x41a7, 0x41cf, 0x41d0, 0x5a8a, 0x7ae8, 0x5a8b, 0x5a8d, + 0x41d1, 0x41eb, 0x5b53, 0x41fb, 0x7b6a, 0x5b59, 0x41fd, 0x41f8, 0x41f7, + 0x4200, 0x5b56, 0x5b57, 0x41f6, 0x7b5f, 0x5e73, 0x601b, 0x42df, 0x6021, + 0x6016, 0x6018, 0x42e2, 0x42e4, 0x6044, 0x7d82, 0x6026, 0x42e3, 0x6236, + 0x4359, 0x4371, 0x438e, 0x438c, 0x643a, 0x43a4, 0x64f4, 0x8055, 0x4414, + 0x6762, 0x675b, 0x676a, 0x4411, 0x6768, 0x441b, 0x4412, 0x440e, 0x4415, + 0x8168, 0x4410, 0x6781, 0x4417, 0x8246, 0x8243, 0x4470, 0x44ed, 0x6ce7, + 0x44ee, 0x6ce6, 0x6cd1, 0x6d11, 0x8481, 0x6cd0, 0x6cd9, 0x6d0a, 0x44f4, + 0x6cda, 0x6cdd, 0x6cc8, 0x6ce2, 0x6ce9, 0x6ccb, 0x847c, 0x6ccc, 0x6cc1, + 0x846a, 0x6cde, 0x8488, 0x44f2, 0x44f8, 0x44f3, 0x6d51, 0x6d12, 0x44fa, + 0x6ce0, 0x6d2b, 0xf9b4, 0x72d8, 0x72d1, 0x8710, 0x72d2, 0x72cd, 0x871f, + 0x45b6, 0x45b7, 0x733d, 0x870f, 0x72ca, 0x45ba, 0x72cb, 0x45bc, 0x72d7, + 0x75f4, 0x463b, 0x88d3, 0x462f, 0x7687, 0x768b, 0x7683, 0x4637, 0x4699, + 0x79c5, 0x79d2, 0x79c6, 0x79d3, 0x46d9, 0x46d8, 0x46d7, 0x79f0, 0x79cd, + 0x79cc, 0x79dc, 0x79d6, 0x4736, 0x7be6, 0x7c41, 0x7c3f, 0x8c87, 0x7cc5, + 0x7cc0, 0x7cc6, 0x7cbe, 0x7cbf, 0x8cc6, 0x4770, 0x7d63, 0x7ed3, 0x7eda, + 0x7ed5, 0x47a5, 0x47a6, 0x47a9, 0x47ee, 0x4854, 0x82ee, 0x4857, 0x82fc, + 0x8414, 0x48a1, 0x8523, 0x8522, 0x8530, 0x86b5, 0x48d3, 0x8738, 0x48d4, + 0x873f, 0x48d7, 0x90cc, 0x916d, 0x9170, 0x48f7, 0x48f6, 0x48f9, 0x48f8, + 0x9258, 0x9242, 0x9268, 0x9269, 0x8968, 0x8967, 0x9243, 0x8965, 0x9247, + 0x498a, 0x8c75, 0x8cf7, 0x8cf3, 0x8cf6, 0x4994, 0x8d00, 0x4993, 0x8cff, + 0x8cf5, 0x959d, 0x49dd, 0x49dc, 0x49f7, 0x96cf, 0x9092, 0x9206, 0x4a42, + 0x9207, 0x926b, 0x4a54, 0x926c, 0x4a55, 0x9393, 0x4a8f, 0x9394, 0x97f4, + 0x4ab4, 0x4ab3, 0x9462, 0x9463, 0x9809, 0x945f, 0x9464, 0x945b, 0x9459, + 0x4afb, 0x4afd, 0x95a4, 0x95ac, 0x98ab, 0x4afc, 0x96b5, 0x4b2c, 0x4b2f, + 0x96ae, 0x4b2b, 0x96c5, 0x4b33, 0x4b34, 0x98fb, 0x983b, 0x9aac, 0x9aae, + 0x9aaa, 0x4be8, 0x9abf, 0x9c2b, 0x9c84, 0x9c80, 0x9d4d, 0x9d4f, 0x9b5c, + 0x9d4c, 0x9f92, 0x4d5d, 0x50d2, 0x3485, 0x3488, 0x03ae, 0x0379, 0x348e, + 0x3484, 0x0371, 0x50df, 0x03b3, 0x3483, 0x032c, 0x0377, 0x052f, 0x07c3, + 0x3502, 0x07cd, 0x3506, 0x3505, 0x07c9, 0x34fe, 0x3501, 0x3500, 0x07ce, + 0x08a5, 0x08a0, 0x08fe, 0x0959, 0x0a9a, 0x35e7, 0x5619, 0x0ee4, 0x0ed7, + 0x0edc, 0x35e6, 0x0ee7, 0x35ed, 0x35e2, 0x35eb, 0x0ee5, 0x35e8, 0x35ec, + 0x560a, 0x3624, 0x589a, 0x1414, 0x3662, 0x13f1, 0x3661, 0x3660, 0x3664, + 0x368b, 0x15b6, 0x166e, 0x166c, 0x1681, 0x1842, 0x3719, 0x3716, 0x3718, + 0x3722, 0x181a, 0x371d, 0x3717, 0x371e, 0x1827, 0x1825, 0x1817, 0x181c, + 0x183d, 0x1820, 0x3769, 0x376a, 0x1a81, 0x376c, 0x377a, 0x378a, 0x1c09, + 0x1cc6, 0x1cc4, 0x379c, 0x1cc5, 0x37fd, 0x37f9, 0x1eef, 0x37ff, 0x1edf, + 0x1ede, 0x1eee, 0x1ef5, 0x1eec, 0x37fc, 0x1edd, 0x5d85, 0x37fb, 0x3802, + 0x385f, 0x5e56, 0x385e, 0x385d, 0x385c, 0x2122, 0x5e51, 0x3892, 0x2297, + 0x2295, 0x3894, 0x3895, 0x38d1, 0x24a9, 0x38f1, 0x2553, 0x5fb1, 0x2556, + 0x2555, 0x3977, 0x396f, 0x27e3, 0x27e2, 0x3987, 0x397d, 0x397c, 0x397e, + 0x3985, 0x398b, 0x3986, 0x3980, ERROR, 0x27a9, 0x3978, 0xf8ab, 0x2833, + 0x280a, 0x39ba, 0x2a59, 0x3a33, 0x2cbc, 0x3a2d, 0x2cc4, 0x2cc7, 0x2cc6, + 0x3a37, 0x645a, 0x6463, 0x2cb8, 0x2cda, 0x3a2e, 0x2cb7, 0x2cc0, 0x3a3d, + 0x2ccd, 0x3aa0, 0x2fbc, 0x2fab, 0x3aa3, 0x3086, 0x669b, 0x325a, 0x66a3, + 0x3b0e, 0x669e, 0x3343, 0x3bb6, 0x35ac, 0x3bab, 0x3bad, 0x3ba6, 0x35be, + 0x69b8, 0x3baa, 0x69ba, 0x3bb1, 0x35ab, 0x3ba8, 0x3baf, 0x3bb0, 0x3ba7, + 0x3bb2, 0x3b9d, 0x3ba5, 0x3bb5, 0x1b3e, 0x69c7, 0x69d7, 0x38f9, 0x3c41, + 0x38f3, 0x38f7, 0x6b70, 0x3a45, 0x3a48, 0x3c72, 0x6b9d, 0x3c6f, 0x3c71, + 0x3a44, 0x3c85, 0x3aaf, 0x3ab1, 0x3ca4, 0x3ca5, 0x3ca6, 0x3bcf, 0x3ca8, + 0x3bcb, 0x3bcd, 0x3ca3, 0x3c50, 0x3eec, 0x3f1a, 0x6f16, 0x6f24, 0x3ed8, + 0x3d43, 0x3ed0, 0x3ed1, 0x3d3d, 0x3d45, 0x3e7b, 0x3ed2, 0x3d44, 0x3ed4, + 0x3ee7, 0x3edf, 0x3ede, 0x6f45, 0x3ed9, 0x3ecf, 0x430d, 0x3de3, 0x7179, + ERROR, 0x3ddf, 0x3de4, 0x717a, 0x3de5, 0x4338, 0x7254, 0x3e22, 0x3e4a, + 0x46a9, 0x3e49, 0x3e44, 0x3e4b, 0x3e87, 0x3e89, 0x3e92, 0x3e91, 0x3e90, + 0x3e8e, 0x483e, 0x4846, 0x49ed, 0xf930, 0x3f12, 0x3f10, 0x3f11, 0x4b6c, + 0x3f32, 0x3f34, 0x3f37, 0x3f33, 0x3f36, 0x3f35, 0x3f65, 0x4cac, 0x757c, + 0x757b, 0x4dc9, 0x7612, 0x3fb0, 0x4e12, 0x3faf, 0x3faa, 0x4dfd, 0x4e01, + 0x4e11, 0x3fab, 0x4e89, 0x4e05, 0x4dfe, 0x4e0b, 0x4e20, 0x4e04, 0x4f88, + 0x3ff3, 0x5002, 0x3ff4, 0x5003, 0x76b6, 0x76e0, 0x4008, 0x404e, 0x4055, + 0x404b, 0x5229, 0x523b, 0x404d, 0x7773, 0x5206, 0x4052, 0x7772, 0x404c, + 0x7770, 0x4050, 0x4053, 0x5203, 0x4051, 0x5378, 0x5379, 0x537d, 0x4089, + 0x537f, 0x4095, 0x40cc, 0x40c8, 0x40ce, 0x5532, 0x40ca, 0x5500, 0x789d, + 0x5522, 0x40cd, 0x56a9, 0x415c, 0x4167, 0x4169, 0x4165, 0x4162, 0x5804, + 0x7a27, 0x7a35, 0xf959, 0x41aa, 0x59b8, 0x5a9b, 0x41d2, 0x7ba2, 0x4203, + 0x420c, 0x5b92, 0x4209, 0x4206, 0x4205, 0x7b89, 0x5b8f, 0x420b, 0x4208, + 0x5b98, 0x7ba5, 0x5bae, 0x428e, 0x5e9d, 0x7cb6, 0x42e8, 0x6049, 0x6050, + 0x6046, 0x42ea, 0x604e, 0x7da5, 0x7dc3, 0x6055, 0x42e9, 0x42eb, 0x6064, + 0x42f0, 0x6238, 0x434b, 0x7fab, 0x4373, 0x4375, 0x4392, 0x4391, 0x4393, + 0x8025, 0x43a7, 0x43a6, 0x43a8, 0x43aa, 0x64fe, 0x43a9, 0x8059, 0x43bb, + 0x43bc, 0x43ba, 0x43bd, 0x4427, 0x8185, 0x67a6, 0x4424, 0x441e, 0x441f, + 0x441d, 0x4420, 0x4423, 0x4429, 0x4422, 0x679c, 0x6799, 0x441c, 0x818e, + 0x4428, 0x67b5, 0x67a3, 0x67a0, 0x67a7, 0x679b, 0x69df, 0x69e1, 0x4471, + 0x4473, 0x4472, 0x6a4d, 0x4502, 0x6df3, 0x6d6f, 0x6d69, 0x44fe, 0x84be, + 0x6d6b, 0x6d78, 0x6d87, 0x4508, 0x6d85, 0x6d82, 0x6d90, 0x4507, 0x4504, + 0x6d80, 0x6d67, 0x4500, 0x44fc, 0x6d61, 0x4544, 0x6d93, 0x44f1, 0x6df2, + 0x6d86, 0x84a6, 0x4506, 0x71cd, 0x71c4, 0x45c6, 0x45c3, 0x45c1, 0x45c2, + 0x730f, 0x45c4, 0x45c7, 0x730d, 0x45bf, 0x45d2, 0x7373, 0x45ca, 0xf9ba, + 0x730a, 0x872f, 0x7308, 0x7313, 0x4613, 0x75f8, 0x4630, 0x463e, 0x4639, + 0x76ab, 0x76a8, 0x463c, 0x463f, 0x76a5, 0x4634, 0x463d, 0x76c3, 0x76a4, + 0x4638, 0x76d4, 0x76ba, 0x77f1, 0x89a0, 0x4682, 0x783f, 0x4683, 0x78ea, + 0x469b, 0x79f7, 0x46e0, 0x46dd, 0x79fa, 0x79f5, 0x46de, 0x79fe, 0x46e3, + 0x46e5, 0x7a00, 0x8a97, 0x46e2, 0x7a02, 0x79fb, 0x7a07, 0x46df, 0x7a1a, + 0x472e, 0x7bb8, 0x4737, 0x4738, 0x7be9, 0x7beb, 0x7c50, 0x7c4f, 0x8c8b, + 0x7d86, 0x3562, 0x7d8e, 0x4794, 0x4793, 0x47ab, 0x47ad, 0x7ef0, 0x7efb, + 0x47f5, 0x47f7, 0x8042, 0x47f6, 0x47f8, 0x8085, 0x47fb, 0x47f9, 0x4858, + 0x485a, 0x8305, 0x4859, 0x8f0f, 0x4885, 0x48a4, 0x48d8, 0x48d9, 0x874b, + 0x48dd, 0x48c8, 0x8763, 0x48fa, 0x48fb, 0x9275, 0x4927, 0x929f, 0x492a, + 0x4925, 0x8999, 0x4928, 0x8c81, 0x8d17, 0x8d10, 0x8d12, 0x95a6, 0x4995, + 0x969a, 0x8efa, 0x8ef3, 0x8ef2, 0x8ef5, 0x8ef6, 0x8fbb, 0x8fc2, 0x90a7, + 0x4a0f, 0x4a11, 0x90a8, 0x90a3, 0x4a10, 0x90aa, 0x4a15, 0x4a13, 0x9757, + 0x91dc, 0x4a47, 0x4a46, 0x920f, 0x4a59, 0x4a5b, 0x9279, 0x4a5e, 0x927f, + 0x9285, 0x4a5a, 0x4a91, 0x4a92, 0x4a90, 0x4a93, 0x941b, 0x97f7, 0x4abe, + 0x9477, 0x9476, 0x9498, 0x4abc, 0x4abb, 0x4ab7, 0x4ab9, 0x947a, 0x4b01, + 0x4afe, 0x95bc, 0x95ba, 0x4b02, 0x95b6, 0x4aff, 0x98b0, 0x95b4, 0x4b00, + 0x96cf, 0x4b37, 0x4b3a, 0x4b6f, 0x4b77, 0x4b79, 0x99c6, 0x987b, 0x4bc8, + 0x9a1c, 0x9a21, 0x9a1d, 0x9ac0, 0x4bf2, 0x9aff, 0x4bf1, 0x4bf0, 0x9b62, + 0x9d56, 0x4c34, 0x9fa1, 0x9fa2, 0x9fa6, 0xa256, 0xa257, 0x4d2c, 0x4d2d, + 0xa301, 0xa3ed, 0xfa1c, 0xa5f2, 0x50fa, 0x03b8, 0x3491, 0x03c0, 0x3494, + 0x03b7, 0x03e1, 0x34c4, 0x350a, 0x07e8, 0x5285, 0x08b2, 0x3552, 0x0aae, + 0x3559, 0x366f, 0x0f7e, 0x35f2, 0x35f4, 0x5643, 0x0f76, 0x35f1, 0x563c, + 0x0f96, 0x366a, 0x1420, 0x1421, 0x1423, 0x1429, 0x1677, 0x1851, 0x3724, + 0x1856, 0x3723, 0x1888, 0x1859, 0x1855, 0x3727, 0x1997, 0x1998, 0x376d, + 0x5bed, 0x376e, 0x376f, 0x1aa1, 0x1aa3, 0x5c35, 0x379f, 0x380a, 0x3806, + 0x380e, 0x1f0a, 0x380d, 0x3805, 0x1f3d, 0x1f0c, 0x380b, 0x3810, 0x382e, + 0x213d, 0x2139, 0x22b0, 0x22b2, 0x22ae, 0x3896, 0x3897, 0x38c4, 0x5f47, + 0x38c5, 0x2420, 0x38d2, 0x256e, 0x256d, 0x256a, 0x3981, 0x2832, 0x398e, + 0x3990, 0x398f, 0x2839, 0x3991, 0x3995, 0x3993, 0x27a3, 0x616d, 0x287f, + 0x2835, 0x283d, 0x29f4, 0x29f5, 0x3a3b, 0x3a48, 0x2d48, 0x2d28, 0x3a46, + 0x3a47, 0x2d27, 0x2d32, 0x2d2c, 0x3a4c, 0x2d2e, 0x3a4a, 0x3a50, 0x3a43, + 0x2d23, 0x2d31, 0xf8c5, 0x3a49, 0x3aa6, 0x3aa5, 0x3aa4, 0x2fc9, 0x3089, + 0x3ab9, 0x30bb, 0x3ace, 0x3acf, 0x3b13, 0x3397, 0x3393, 0x3628, 0x3bc6, + 0x3bc5, 0x3bca, 0x3bd9, 0x3bc1, 0x3618, 0x363b, 0x69f5, 0x3627, 0x3624, + 0x361b, 0x3631, 0x3bcb, 0x3626, 0x36a3, 0x363f, 0x3622, 0x3619, 0x6a03, + 0x3641, 0x362b, 0x6a65, 0x3c42, 0x390c, 0x6b75, 0x3c74, 0x3c73, 0x3a4e, + 0x3ab9, 0x3afa, 0x3be9, 0x3be8, 0x3be4, 0x6f8a, 0x6f56, 0x3d52, 0x3f5f, + 0x3f5d, 0x3f52, 0x3d50, 0x3f74, 0x3d4b, 0x3f46, 0x3d4c, 0x3d6d, 0x3faa, + 0x6f98, 0x3f4a, 0x3f59, 0x3f4b, 0x3d4f, 0x6f68, 0x3df0, 0x4350, 0x7234, + 0x7245, 0x3e4d, 0x3e4c, 0x46d0, 0x3e4f, 0x3e4e, 0x3e50, 0x46cc, 0x735c, + 0x3e96, 0x7356, 0x4864, 0x4865, 0x3e97, 0x3e95, 0x3e98, 0x485c, 0x4a15, + 0x3eec, 0x3eeb, 0x3f13, 0x3f14, 0x3f38, 0x3f3a, 0x3f39, 0x4b79, 0x3f68, + 0x3f67, 0x4cc5, 0x4cb8, 0x4e2c, 0x3fbe, 0x3fbc, 0x4e37, 0x4e35, 0x4e31, + 0x3fbb, 0x4e2f, 0x3fba, 0x4e2b, 0x3fb9, 0x3fb7, 0x4e2d, 0x4e2a, 0x3fc1, + 0x4f95, 0x3ff7, 0x523e, 0x4060, 0x5247, 0x5245, 0x4059, 0x405c, 0x405a, + 0x4058, 0x5252, 0x405b, 0x5270, 0x5250, 0x5258, 0x5251, 0x523d, 0x405d, + 0x5241, 0x520c, 0x523c, 0x5386, 0x5383, 0x5389, 0x53f3, 0x40d4, 0x40d3, + 0x78bf, 0x40d2, 0x78bd, 0x552d, 0x40d7, 0x40d1, 0x78e4, 0x40d5, 0x56c5, + 0xf955, 0x416d, 0x416f, 0x7a34, 0x4175, 0x416c, 0x4174, 0x5843, 0x4173, + 0x5837, 0x5845, 0x7a36, 0x41ac, 0x59e5, 0x5aa6, 0x5bdb, 0x4210, 0x5bda, + 0x5be6, 0x7bba, 0x7bbc, 0x420f, 0x7bc8, 0x4223, 0x7bc3, 0x421d, 0x7bb6, + 0x420e, 0x5bf8, 0x5be9, 0x4215, 0x7bc2, 0x4213, 0x5be8, 0x5bf6, 0x421b, + 0x7bc5, 0x4222, 0x4226, 0x5be7, 0x7bbd, 0x7bb0, 0x4221, 0x421c, 0x4217, + 0x5bd5, 0x421a, 0x7bbb, 0x5ed3, 0x5ec7, 0x5ed1, 0x4299, 0x5ec3, 0x4297, + 0x6080, 0x6098, 0x42fd, 0x6084, 0x42f6, 0x42fe, 0x42f5, 0x42ff, 0x42f7, + 0x6097, 0x6083, 0x6081, 0x4301, 0x7e04, 0x608c, 0x6242, 0x63ab, 0x4377, + 0x63a3, 0x63a6, 0x645c, 0x6469, 0x6467, 0x43ab, 0x658b, 0x65a8, 0x43c0, + 0x67d8, 0x4431, 0x442e, 0xf989, 0x67dc, 0x442c, 0x67e0, 0x67e5, 0x4432, + 0x442f, 0x442b, 0x442d, 0x4433, 0x6918, 0x6919, 0x81f1, 0x4457, 0x445c, + 0x447b, 0x6a5f, 0x6a5e, 0x447a, 0x6e02, 0x8522, 0x4513, 0x451e, 0x4517, + 0x4520, 0x452a, 0x4511, 0x4515, 0x450f, 0x4518, 0x8538, 0x6e12, 0x6e36, + 0x452c, 0x8532, 0xf9a8, 0x8510, 0x6e23, 0x6e03, 0x451c, 0x6e00, 0x4529, + 0x6e46, 0x6e61, 0x4512, 0x854f, 0x4597, 0x7384, 0x8772, 0x736b, 0x7362, + 0x7356, 0x736a, 0x7352, 0x7355, 0x45d4, 0x45d0, 0x877c, 0x7361, 0xf9bb, + 0x7358, 0x7377, 0x45d3, 0x4614, 0x76d7, 0x4646, 0x4645, 0x76de, 0x4643, + 0x76df, 0x890d, 0x4644, 0x4648, 0x76d1, 0x4647, 0x76e2, 0x76e1, 0x76dd, + 0x8908, 0x4649, 0x4685, 0x784b, 0x4684, 0x784e, 0x469d, 0x78fc, 0x469e, + 0x46a0, 0x78fa, 0x469c, 0x78fb, 0x469f, 0x78fe, 0x46f7, 0x46ea, 0x7a31, + 0x46ef, 0x46e9, 0x46f3, 0x46f0, 0x46eb, 0x7a38, 0x46ec, 0x46f2, 0x46f5, + 0x46ee, 0x7a3a, 0x7bbb, 0x473a, 0x474b, 0x7c59, 0x474a, 0x474c, 0x7cdb, + 0x7cdf, 0x7ce2, 0x4779, 0x477b, 0x4778, 0x7d9e, 0x7da1, 0x47b5, 0x7f10, + 0x47b4, 0x47b7, 0x8d9e, 0x4809, 0x47fe, 0x4808, 0x4807, 0x8076, 0x807f, + 0x807d, 0x4806, 0x4804, 0x4805, 0x47ff, 0x480b, 0x8082, 0x8257, 0x483b, + 0x485d, 0x485c, 0x485f, 0x485e, 0x8f28, 0x832e, 0x8f21, 0x4883, 0x858b, + 0x858d, 0x48a7, 0x9066, 0x906c, 0x8590, 0x48a8, 0x86ec, 0x876f, 0x876b, + 0x8771, 0x8778, 0x90f6, 0x48e0, 0x48df, 0x48fe, 0x48fc, 0x48ff, 0x48fd, + 0x89ad, 0x492c, 0x92ec, 0x92ba, 0x92e3, 0x92bd, 0x499d, 0x8d2f, 0x95b4, + 0x8f78, 0x4a40, 0x91f8, 0x9219, 0x4a5f, 0x929b, 0x9294, 0x9297, 0x9299, + 0x93a6, 0x93a4, 0x93a7, 0x97d1, 0x9495, 0x4ac0, 0x9823, 0x9490, 0x4ac1, + 0x4ac6, 0x949b, 0x95c4, 0x4b04, 0x4b05, 0x95c6, 0x990b, 0x4b3e, 0x4b3d, + 0x4b40, 0x4b3f, 0x96e3, 0x4b42, 0x96df, 0x96dd, 0x96e7, 0x4b84, 0x4b82, + 0x4b7f, 0x4b85, 0x9a2d, 0x9a2c, 0x4bcc, 0x9ab2, 0x4bcb, 0x4bcd, 0x9a34, + 0x9a38, 0x9adb, 0x9b1d, 0x4bf5, 0x9b1a, 0x9b1b, 0x9b14, 0x9af0, 0x9b17, + 0x9c21, 0x4c20, 0x4c21, 0x9caa, 0x9ca1, 0x4c37, 0x4c3e, 0x9b73, 0x4c3d, + 0x9b6e, 0x9d63, 0x9d79, 0x9d60, 0x9b65, 0x9d62, 0x4c3c, 0x9d61, 0x4c38, + 0x9b6a, 0x9d70, 0x9b6d, 0x9d6a, 0x4c3b, 0x9fc8, 0x4cb0, 0x9fc5, 0x9fbe, + 0x9fc2, 0x4cad, 0x4cb2, 0x4cb8, 0x9d0b, 0x9fc7, 0x4caf, 0x9fb0, 0x9fca, + 0x4d1a, 0x9e76, 0x4d20, 0x4d21, 0x4d30, 0x9ea8, 0x4d2f, 0xa30d, 0xa307, + 0xa396, 0xa3ef, 0x4d5f, 0x4d60, 0xa41e, 0xa41d, 0x9f11, 0xa590, 0x03eb, + 0x348a, 0x5119, 0x349c, 0x03ee, 0x349a, 0x03ef, 0x03ec, 0x07fa, 0x350c, + 0x350b, 0x350d, 0x5292, 0x0904, 0x0fd3, 0x35fe, 0x0fd1, 0x0ffa, 0x35ff, + 0x35fb, 0x35fc, 0x3609, 0x0fc8, 0x3600, 0x0fd5, 0x5675, 0x0fcd, 0x0fd2, + 0x0ffb, 0x122a, 0x1488, 0x1461, 0x3671, 0x1463, 0x1462, 0x596f, 0x0057, + 0x18c8, 0x1898, 0x372b, 0x1ac1, 0x1f3f, 0x1f41, 0x3814, 0x3811, 0x3812, + 0x2152, 0x3863, 0x215e, 0x386e, 0x389a, 0x22c7, 0x389b, 0x2370, 0x2427, + 0x38c8, 0x2471, 0x24b0, 0x38f6, 0x2842, 0x2843, 0x61a5, 0x398c, 0x3997, + 0x39a2, 0x61a0, 0x2857, 0x289d, 0x2d89, 0x2d8d, 0x2d8b, 0x2d80, 0x2d92, + 0x2d8a, 0x2dc8, 0x3a54, 0x2d8f, 0x2d93, 0x2d91, 0x3aa8, 0x2ff2, 0x2fde, + 0x3aa9, 0x30c8, 0x65b4, 0x65d8, 0x66c2, 0x3b18, 0x3b17, 0x3b1d, 0x32a7, + 0x32a1, 0x3b31, 0x368c, 0x367f, 0x3bd8, 0x3bd5, 0x367b, 0x3695, 0x3699, + 0x3be1, 0x368e, 0x3bd4, 0x36da, 0x368a, 0x369c, 0x3be3, 0x367e, 0x3c44, + 0x3c45, 0x391a, 0x3a55, 0x3c76, 0x3c75, 0x3a60, 0x6ba8, 0x3c88, 0x3caa, + 0x3bfb, 0x3cab, 0x3cac, 0x3bfd, 0x3d57, 0x6f83, 0x3d60, 0x3d5d, 0x3d6b, + 0x3fd0, 0x3d63, 0x3d67, 0x3fc5, 0x3d5e, 0x3fd2, 0x4011, 0x6fc5, 0x71cd, + 0x3df9, 0x3df3, 0x43ad, 0x43a4, 0x43a9, 0x43b0, 0x439d, 0x3df6, 0x4598, + 0x729c, 0x3e51, 0x3e53, 0x3e52, 0x4892, 0x3e9b, 0x488a, 0x3e9c, 0x488d, + 0x4896, 0x3ef7, 0x7499, 0x748f, 0x7491, 0x4a45, 0x4a4b, 0x4b0f, 0x4b16, + 0x3f3b, 0x4b8a, 0x3f3e, 0x3f3d, 0x4cc9, 0x3f69, 0x4cc8, 0x4cca, 0x4e64, + 0x3fc3, 0x3fc4, 0x3fc7, 0x4e5d, 0x4e63, 0x7639, 0x3fc6, 0x762e, 0x3fc8, + 0x4e88, 0x4f3a, 0x4f39, 0x769f, 0x76a0, 0x3fe6, 0x3ff8, 0x5017, 0x5093, + 0x4007, 0x5095, 0x4064, 0x4068, 0x5276, 0x7794, 0x4065, 0x77ae, 0x5280, + 0x527b, 0x4069, 0x5248, 0x52a8, 0x5288, 0x538b, 0x538a, 0x538c, 0x53fc, + 0x40da, 0x40e0, 0x78e6, 0x5558, 0x40de, 0x5551, 0x5555, 0x5553, 0x411c, + 0x411d, 0x411a, 0x56dc, 0x417b, 0x417a, 0x417c, 0x585c, 0x4178, 0x4177, + 0x5865, 0xf95a, 0x41b1, 0x59ee, 0x41b2, 0x41b0, 0x59f0, 0x7abc, 0x59f2, + 0x4236, 0x5c35, 0x422e, 0x5c22, 0x7bd6, 0x5c20, 0x4234, 0x5c2d, 0x5c28, + 0x5c26, 0x5c3c, 0x422a, 0x5c38, 0x4233, 0x422d, 0x422f, 0x4231, 0x422b, + 0x4232, 0x5c2a, 0x4235, 0x5c1a, 0x5c30, 0x5be3, 0x5c19, 0x5ee9, 0x5ee7, + 0x7ccf, 0x60d6, 0x60c4, 0x4308, 0x6087, 0x4306, 0x60c7, 0x60d9, 0x7e18, + 0x60df, 0x434d, 0x4361, 0x630a, 0x6301, 0x63b1, 0x4378, 0x63c1, 0x4394, + 0x4395, 0x6476, 0x650d, 0x650e, 0x43c1, 0x43c3, 0x806d, 0x6807, 0x4439, + 0x6809, 0x6816, 0x443a, 0x443b, 0x4435, 0x4436, 0x680e, 0x443c, 0x8190, + 0x6806, 0x691e, 0x694a, 0x4458, 0x447c, 0x447d, 0x448d, 0x448c, 0x6ea6, + 0x6e91, 0x453b, 0x453f, 0x6eb8, 0x6e96, 0x4532, 0x452d, 0x6ec5, 0x452f, + 0x4539, 0x452e, 0x453a, 0x6f0a, 0x4536, 0x4531, 0x453e, 0x4538, 0x8552, + 0x4534, 0x6eb2, 0x4541, 0x6eb7, 0x6eb4, 0x6e89, 0x6e8d, 0x4530, 0x6e87, + 0x6ec2, 0x6e9c, 0x6e92, 0x4543, 0x6eca, 0x8550, 0x6e8a, 0x71e0, 0x4598, + 0x71e6, 0x71e5, 0x87a0, 0x73a5, 0x73b3, 0x8786, 0x45da, 0x45d7, 0x73b5, + 0x73af, 0x8795, 0x73b0, 0x73cc, 0x878c, 0x73a2, 0x73be, 0x73c6, 0x73ac, + 0x73ae, 0x4618, 0x8860, 0xf9c3, 0x7708, 0x7705, 0x4652, 0x8928, 0x76fe, + 0x464e, 0x8920, 0x7700, 0x464f, 0x4650, 0x7864, 0x7868, 0x89a8, 0x4686, + 0x4687, 0x4689, 0x786a, 0x7869, 0x790d, 0x7912, 0x46a2, 0x46a3, 0x790f, + 0x46a1, 0x7a67, 0x7a79, 0x7a72, 0x7a66, 0x7a7c, 0x46f9, 0x46fd, 0x7a68, + 0x7a85, 0x7a76, 0x7a74, 0x7a71, 0x7a64, 0x473e, 0x473c, 0x7bf8, 0x474d, + 0x7c6c, 0x474e, 0x7ceb, 0x4781, 0x4783, 0x4782, 0x7db8, 0x4780, 0x4788, + 0x7f2d, 0x7f2e, 0x7f28, 0x7f29, 0x7f31, 0x47b9, 0x7f2f, 0x7f2a, 0x8e3a, + 0x80a4, 0x80b7, 0x80bf, 0x4811, 0x480d, 0x4810, 0x4813, 0x8263, 0x483c, + 0x4862, 0x4863, 0x8367, 0x85be, 0xf9e0, 0x8795, 0x879c, 0x4903, 0x4906, + 0x4902, 0x4901, 0x8871, 0x8872, 0x4905, 0x886f, 0x9194, 0x9311, 0x89f1, + 0x9337, 0x4936, 0x89e8, 0x4935, 0x9343, 0xf9ea, 0x49a1, 0x49a3, 0x8d49, + 0x8d64, 0x49a0, 0x8d48, 0x49ea, 0x96a6, 0x49e8, 0x8f2c, 0x8fe1, 0x8fef, + 0x90c0, 0x4a21, 0x4a1b, 0x90d7, 0x90d4, 0x4a49, 0x4a48, 0x92ad, 0x9795, + 0x4a62, 0x4a61, 0x4a64, 0x4a60, 0x4a63, 0x92ae, 0x92ac, 0x9796, 0x4a66, + 0x4aac, 0x4aab, 0x9427, 0x94ae, 0x4ac3, 0x94b0, 0x4ac4, 0x9825, 0x94c0, + 0x94c4, 0x4b08, 0x4b09, 0x4b0a, 0x4b06, 0x4b07, 0x4b41, 0x9707, 0x4b45, + 0x96fd, 0x4b43, 0x4b44, 0x9926, 0x9934, 0x4b47, 0xfa04, 0x981b, 0x981c, + 0x4b71, 0x98b2, 0x98b4, 0x98b7, 0x98b1, 0x98b3, 0x98ae, 0x4b8b, 0x4bd4, + 0x4bd3, 0x4bd1, 0x9aba, 0x4bd2, 0x9a3f, 0x9b36, 0x4bf7, 0x4bf8, 0x9b31, + 0x9b3b, 0x9b35, 0x9b3a, 0x9b37, 0x9c22, 0x9c36, 0x9c32, 0x4c22, 0x9cc0, + 0x4c45, 0x4c41, 0x9b81, 0x4c40, 0x9b8a, 0x9d85, 0x9b7f, 0x4c42, 0x9d89, + 0x4cc1, 0x4cc5, 0x9fe1, 0x4cbb, 0x4cb9, 0x4cbd, 0x4cc9, 0xa00a, 0x9d11, + 0xa009, 0x4cbf, 0x4cc7, 0x9fe8, 0x4cc3, 0x4d24, 0x4d31, 0x4d33, 0xa318, + 0x4d32, 0x4d34, 0x4d52, 0x4d61, 0x9ed9, 0x4d7a, 0x4d82, 0x9f3c, 0xa5c5, + 0x5123, 0x040d, 0x040c, 0x0421, 0x512c, 0x0616, 0x080e, 0x350f, 0x5295, + 0x0817, 0x3523, 0x3525, 0x1048, 0x3606, 0x3608, 0x5688, 0x1055, 0x1049, + 0x104c, 0x568b, 0x104f, 0x103d, 0x367a, 0x3677, 0x148a, 0x14a8, 0x168a, + 0x372e, 0x18cb, 0x372f, 0x18d5, 0x21d4, 0x381b, 0x3813, 0x1f5c, 0x1f75, + 0x3866, 0x2161, 0x3865, 0x1696, 0x38f7, 0x258a, 0x28d0, 0x61e1, 0x61d7, + 0x2849, 0x28cf, 0x399c, 0x2dd6, 0x2d7f, 0x3a53, 0x2dd2, 0x2dcf, 0x3006, + 0x3009, 0x3aba, 0x65a3, 0x3b22, 0x66d3, 0x3706, 0x36f1, 0x3704, 0x6a8b, + 0x36fa, 0x36f4, 0x3beb, 0x3bdd, 0x36f9, 0x3bef, 0x368b, 0x3703, 0x3c47, + 0x3c46, 0x39a2, 0x3c78, 0x6bac, 0x3c89, 0x3c0c, 0x3c0b, 0x3d68, 0x3d76, + 0x3d74, 0x3d79, 0x4024, 0x3d7a, 0x3d77, 0xf914, 0x3d71, 0x4025, 0x3d72, + 0x43f6, 0x3dff, 0x43fb, 0x3e05, 0x4532, 0x45fb, 0x3e54, 0x46f2, 0x46f3, + 0x3e9e, 0x3e9f, 0x7374, 0x489c, 0x4a72, 0x3efa, 0x4a74, 0x3f44, 0x3f3f, + 0x3f40, 0x4b86, 0x3f42, 0x4b8e, 0x4b90, 0x3f51, 0x4bcd, 0x4bf7, 0x4cd6, + 0x4e84, 0x4e95, 0x4e8a, 0x7640, 0x3fca, 0x4e97, 0x7641, 0x3fce, 0x3fc9, + 0x4fa0, 0x4fa1, 0x5022, 0x50a6, 0x50a4, 0x4009, 0x76e8, 0x406c, 0x406e, + 0x4070, 0x406d, 0x406b, 0x4071, 0x4072, 0x52af, 0x52b0, 0x52bd, 0x408c, + 0x40e4, 0x5576, 0x40e1, 0x557b, 0x5579, 0x78f6, 0x40e7, 0x7900, 0x40e2, + 0x411f, 0x56ee, 0x56f1, 0x417e, 0x5894, 0x4180, 0x7a59, 0x7a55, 0x5891, + 0x41b9, 0x41b7, 0x41b8, 0x5a10, 0x41ba, 0x7af4, 0x5aaf, 0x41d3, 0x423f, + 0x7c04, 0x4245, 0x4241, 0x7c15, 0x4242, 0x4243, 0x423b, 0x4238, 0x5c7b, + 0x5c77, 0x423a, 0x7bf5, 0x5c80, 0x5cc6, 0x423c, 0x5c7c, 0x5c90, 0x423e, + 0x5ca3, 0x5c7d, 0x5cbd, 0x429e, 0x429f, 0x42a1, 0x5f13, 0x429b, 0x4312, + 0x6111, 0x6144, 0x610d, 0x4318, 0x430c, 0x6314, 0x4362, 0x63b8, 0x437a, + 0x63b7, 0x6483, 0x43ae, 0x43af, 0x6514, 0x43ad, 0x651c, 0x43c4, 0x43c7, + 0x43c6, 0x43c5, 0x65d4, 0x65d5, 0x81c1, 0x4440, 0x6843, 0x6842, 0x443f, + 0x4441, 0xf98a, 0x6841, 0x694e, 0x447f, 0x6a87, 0x4486, 0x4481, 0x4480, + 0x448e, 0x454a, 0x6f39, 0x4547, 0x6f8f, 0x6f2a, 0x454b, 0x4546, 0x454e, + 0x857d, 0x6f2b, 0x85a5, 0x6f50, 0x4548, 0x6f6e, 0x4545, 0x6f3b, 0x6f53, + 0x6f5f, 0x6f2f, 0x6f30, 0x6f38, 0x6f4c, 0x71f1, 0x45db, 0x45e7, 0x45e4, + 0x7407, 0x7416, 0x45e1, 0x7414, 0x45e9, 0x73fb, 0x45e5, 0x45e0, 0x45e3, + 0x73f8, 0x7410, 0x741d, 0x73ff, 0x740b, 0x7404, 0x45ea, 0x73fe, 0x75ff, + 0x893a, 0x4654, 0x4658, 0x465c, 0x7723, 0x4655, 0x468b, 0x468c, 0x46a6, + 0x46a5, 0x792a, 0x7aa0, 0x7a98, 0x7a9c, 0x46ff, 0x7a9e, 0x7aa6, 0x7ab5, + 0x7ab0, 0x4730, 0x4740, 0x4741, 0x7cf9, 0x7cf5, 0x4786, 0x7dd2, 0x47bf, + 0x47bd, 0x7f50, 0x7f4e, 0x7f4b, 0x7f52, 0x7f4d, 0x47be, 0x4819, 0x80e4, + 0x481c, 0x80da, 0x481b, 0x4817, 0x4818, 0x8e51, 0x80df, 0x80e8, 0x483d, + 0x486a, 0x4866, 0x8370, 0x8372, 0x4867, 0x8377, 0x4868, 0x48ad, 0x48ae, + 0x85e6, 0x87aa, 0x48d6, 0x4909, 0x888c, 0x9198, 0x8889, 0x490c, 0x490a, + 0x8a32, 0x493b, 0x493a, 0x9384, 0x9381, 0x8a7a, 0x936f, 0x8c9e, 0x8ca0, + 0x8d70, 0x49af, 0x49aa, 0x49ab, 0x8d6e, 0x8d66, 0x49b1, 0x8d65, 0x49ac, + 0x49ec, 0x8f7f, 0x8fe0, 0x4a01, 0x8fff, 0x90f6, 0x90f7, 0x90f5, 0x4a23, + 0x90fc, 0x4a24, 0x4a1e, 0x90f9, 0x4a4a, 0x4a65, 0x4a6a, 0x92ca, 0x92c3, + 0x92c6, 0x4a69, 0x93b8, 0x93bd, 0x4a95, 0x93bc, 0x9405, 0x94e0, 0x94e9, + 0x9842, 0x94df, 0x94ec, 0x4acc, 0x94e5, 0x94de, 0xfa00, 0x4acf, 0x94f0, + 0x94e3, 0x4b0f, 0x95ec, 0x4b0e, 0x4b0b, 0x4b10, 0x4b0d, 0x4b0c, 0x95f2, + 0x95ef, 0x95e9, 0x96fb, 0x4b46, 0x4b48, 0x9937, 0x4b49, 0x9737, 0x98de, + 0x4b91, 0x4b8e, 0x98da, 0x4bd8, 0x4bd6, 0x9a4b, 0x4bda, 0x9a49, 0x4bd7, + 0x9ad5, 0x9aff, 0x4bf9, 0x9b52, 0x9b47, 0x4bfc, 0x9b48, 0x9ccc, 0x9cd0, + 0x9ba9, 0x4c4a, 0x9ba7, 0x4c4e, 0x9bb3, 0x9bac, 0x9bb0, 0x9d86, 0x9da7, + 0x9da3, 0x9b9c, 0x9db6, 0x9dad, 0xa013, 0x9d3c, 0x9d1c, 0x9d3a, 0x4cd3, + 0x4ccd, 0x4cd1, 0xa017, 0xa022, 0x9d32, 0x9d34, 0xa049, 0xa026, 0xfa0c, + 0xa03c, 0xa028, 0xa2a8, 0x9ec7, 0xa3fb, 0x4d62, 0xa432, 0xa4d6, 0xa548, + 0x4d83, 0x9f3f, 0xa5c6, 0x4d92, 0x349f, 0x34a0, 0x0425, 0x0426, 0x0424, + 0x0433, 0x0570, 0x3527, 0x0b90, 0x360b, 0x1095, 0x10a1, 0x1092, 0x108f, + 0x109f, 0x1096, 0x1098, 0x109d, 0x10a0, 0x368d, 0x1697, 0x18eb, 0x3770, + 0x1f87, 0x5eeb, 0x2432, 0x399a, 0x399f, 0x399d, 0x28d8, 0x28fb, 0x2906, + 0x399b, 0x28d1, 0x61d5, 0xf8b0, 0x3a60, 0x3a64, 0x3a69, 0x3a63, 0x3a67, + 0x3a62, 0x2df6, 0x2e04, 0x2dfe, 0x6502, 0x2dff, 0x2df7, 0x3018, 0x3aac, + 0x3014, 0x30cd, 0x3120, 0x32de, 0x3b26, 0x3b23, 0x3b25, 0x3745, 0x3753, + 0x3bf8, 0x374b, 0x3755, 0x3741, 0x3bf7, 0x3bfb, 0x3bfa, 0x375c, 0x3754, + 0x3a71, 0x3ad0, 0x3cb0, 0x3caf, 0x3c53, 0x4029, 0x407e, 0x3d7e, 0x4079, + 0x3d7d, 0x3d80, 0x4070, 0x406a, 0x3d7f, 0x3d86, 0x4085, 0x4064, 0x7012, + 0x4078, 0x3d81, 0x4432, 0x4427, 0x442f, 0x3e24, 0x3e58, 0x3e57, 0x3ea0, + 0x48ba, 0x3efe, 0x4a71, 0x4a8c, 0x3f15, 0x4b1a, 0x3f47, 0x3f46, 0x4b98, + 0x4ce4, 0x3f6b, 0x3f6c, 0x7585, 0x7654, 0x4ec2, 0x3fcc, 0x4eba, 0x7655, + 0x4ec8, 0x3fcb, 0x76a7, 0x76a8, 0x3ff9, 0x50b9, 0x50b8, 0x50a5, 0x52e2, + 0x4078, 0x407a, 0x4075, 0x52d9, 0x4076, 0x4077, 0x52ac, 0x52dd, 0x40ea, + 0x40ee, 0x40ed, 0x559d, 0x40ec, 0x790f, 0x5711, 0x5703, 0x4184, 0x4185, + 0x4183, 0x58ee, 0x41bc, 0x41bd, 0x41d4, 0x5ca4, 0x5cd8, 0x5cdd, 0x5cde, + 0x4255, 0x5ce7, 0x4250, 0x424c, 0x4248, 0x5cd4, 0x4253, 0x5cce, 0x4257, + 0x4254, 0x424e, 0x424a, 0x4251, 0x5cf1, 0x5cd3, 0x4249, 0x424b, 0x4263, + 0x5cca, 0x5ce9, 0x42a7, 0x42a6, 0x42a4, 0x5f1a, 0x5f41, 0xf968, 0x7ce4, + 0x7ce5, 0x613d, 0x6140, 0x7e65, 0x7e4e, 0x4317, 0x6143, 0x4316, 0x613f, + 0x613c, 0x4363, 0x6321, 0x6320, 0x7f82, 0x63c6, 0x437b, 0x437c, 0x63d1, + 0x63ca, 0x648e, 0x6491, 0x43b0, 0x802d, 0x65e3, 0x6888, 0x4442, 0x6870, + 0x4444, 0x699d, 0x6a9d, 0x6a91, 0x6a98, 0x6a99, 0x4488, 0x448f, 0x4553, + 0x455b, 0x6fbf, 0x4559, 0x6fae, 0x6fb1, 0x6fcc, 0x7004, 0x85ca, 0x7016, + 0x6fcd, 0x4554, 0x85bc, 0x6fe0, 0x6fcb, 0x6fd4, 0x6fc9, 0x71ff, 0x4599, + 0x71fd, 0x7457, 0x7452, 0x7450, 0x7445, 0x744d, 0x45f1, 0x7453, 0x45ef, + 0x7482, 0x7444, 0x75ce, 0x75cf, 0x75d2, 0x7602, 0x774f, 0x7758, 0x4662, + 0x7743, 0x4663, 0x7752, 0x4660, 0x4661, 0x465f, 0x7749, 0x7753, 0x774d, + 0x468d, 0x7884, 0x468e, 0x7883, 0x7932, 0x7ae2, 0x4709, 0x7ae4, 0x7ad3, + 0x4705, 0x7ad5, 0x7add, 0x4703, 0x4706, 0x7aec, 0x7ae6, 0x7ad2, 0x7afa, + 0x7ada, 0x4731, 0x7c06, 0x7c04, 0x474f, 0x7c7b, 0x7d04, 0x7d02, 0x4766, + 0x8cff, 0x47c4, 0x7f60, 0x47c3, 0x47c1, 0x47c5, 0x8107, 0x8105, 0x810c, + 0x4821, 0x815a, 0x481f, 0x4822, 0x811a, 0x4827, 0x4820, 0x838a, 0x486d, + 0x486c, 0x486b, 0x486f, 0x4870, 0x838c, 0x8609, 0x88a6, 0x91a6, 0x88ac, + 0x88a9, 0x4942, 0x8a8b, 0x93b6, 0x8a8c, 0x4944, 0x4940, 0x8a88, 0x8a89, + 0x493f, 0x8a93, 0x93ab, 0x498b, 0x8d83, 0x8f4f, 0x4a25, 0x4a28, 0x9120, + 0x9721, 0x9236, 0x92e2, 0x4a75, 0x4a72, 0x92ee, 0x4a6f, 0x92e7, 0x92e9, + 0x4a76, 0x4a71, 0x97a7, 0x92df, 0x4a97, 0x93c7, 0x4ad7, 0x9509, 0x4ad6, + 0x9501, 0x4ad8, 0x4adc, 0x4adb, 0x4ad4, 0x983e, 0x4b13, 0x4b11, 0x4b14, + 0x9605, 0x960c, 0x9778, 0x975d, 0x4b51, 0x4b50, 0x4b53, 0x4b54, 0x4b52, + 0x975e, 0x9760, 0x9767, 0x4b6d, 0xfa05, 0x98f4, 0x4b95, 0x4b99, 0x98f1, + 0x4b9a, 0x98fa, 0x4b93, 0x4b97, 0x98f8, 0x98f9, 0x9909, 0x98fd, 0x98f7, + 0x4bdc, 0x9a59, 0x4bfd, 0x9b60, 0x9b68, 0x4bfe, 0x4c00, 0x4c02, 0x4c01, + 0x4c03, 0x9b6a, 0x9c14, 0x9c3e, 0x9ce4, 0x4c27, 0x4c26, 0x4c24, 0x4c4c, + 0x9bbc, 0x4c50, 0x4c55, 0x4c53, 0x9bb7, 0x4c52, 0x9dd2, 0x4c57, 0x9bbe, + 0x4c58, 0x4cd6, 0xa058, 0xa050, 0x4cd4, 0xa05c, 0x4cda, 0x4cd9, 0x8119, + 0x9d62, 0x4cd5, 0x4ce4, 0xfa0e, 0x4cdc, 0x4d1b, 0x9e8f, 0x4d37, 0x4d36, + 0x4d4b, 0x9ecb, 0x4d66, 0x4d76, 0xa4df, 0x4d7e, 0x4d7d, 0x4d7f, 0x4d84, + 0x4d8b, 0xa5d9, 0x4d94, 0x34a1, 0x3511, 0x0966, 0x3610, 0x56a9, 0x10e1, + 0x10ef, 0x10e8, 0x1233, 0x5913, 0x18fe, 0x3732, 0x5bf4, 0x1aef, 0x1aec, + 0x1cec, 0x1f9c, 0x3820, 0x1f99, 0x2170, 0x216e, 0x389d, 0x2441, 0x61ec, + 0x61ef, 0x2902, 0x2901, 0x39a5, 0x2a1b, 0x2e23, 0x2e25, 0x2e24, 0x2e26, + 0x2e33, 0x2e2f, 0x308f, 0x3356, 0x3c02, 0x3bfe, 0x3c01, 0x6ad6, 0x3c03, + 0x3bff, 0x3799, 0x3c04, 0xf8ed, 0x3c4a, 0x3ad9, 0x3d87, 0x40b7, 0x3d84, + 0x40b6, 0x3d85, 0x7209, 0x4454, 0x4457, 0x447a, 0x3e59, 0x7379, 0x4a8e, + 0x74c6, 0x4a90, 0x4ab9, 0x3f04, 0x3f49, 0x3f48, 0x4cef, 0x3f6d, 0x3fd2, + 0x3fd3, 0x4ee2, 0x3fd1, 0x4ed6, 0x4ed8, 0x4eda, 0x4ede, 0x3fe7, 0x400a, + 0x77c3, 0x5308, 0x5304, 0x530a, 0x530b, 0x5302, 0x40f0, 0x55aa, 0x55c1, + 0x791f, 0x58d7, 0x58d9, 0x7a65, 0x58de, 0x58da, 0x41be, 0x41bf, 0x5a2a, + 0x7ac6, 0x7c3a, 0x5d31, 0x7c36, 0x5d2b, 0x5d2c, 0x5d29, 0x5d2e, 0x425e, + 0x5d27, 0x5d28, 0x425b, 0x5d5f, 0x5d30, 0x5d24, 0x7ceb, 0x42ab, 0x5f3a, + 0x42ac, 0x5f39, 0x5f40, 0x6180, 0x6184, 0x431f, 0x431d, 0x6175, 0x6176, + 0x431c, 0x617c, 0x431e, 0x6178, 0x619b, 0x617e, 0x625a, 0x4364, 0x632c, + 0x7f84, 0x649c, 0x6847, 0x688a, 0x4448, 0x4447, 0x6927, 0x704a, 0x455e, + 0x4561, 0x7027, 0x85e0, 0x85f3, 0x702e, 0x7026, 0x7208, 0x45f7, 0x74bd, + 0x7496, 0x45f4, 0x45f8, 0x881e, 0x74be, 0x748e, 0x7774, 0x4664, 0x7780, + 0x4692, 0x468f, 0x4690, 0x89b4, 0x4693, 0x46a8, 0x793c, 0x793d, 0x46a9, + 0x793a, 0x7942, 0x89f9, 0x7b24, 0x7b06, 0x8b44, 0x470e, 0x7b15, 0x470f, + 0x7b02, 0x7b0c, 0x470b, 0x7b08, 0x7b0a, 0x7b05, 0x7b1c, 0x4710, 0x4751, + 0x7c82, 0x4750, 0x7c86, 0x4763, 0x7e03, 0x7f7b, 0x47c7, 0x7f7a, 0x8e71, + 0x4824, 0x4826, 0x8e6e, 0x8180, 0x8e79, 0x8158, 0x8ec4, 0x4874, 0x4873, + 0x4872, 0x83aa, 0x83ab, 0x8436, 0x844a, 0x48b1, 0x908c, 0x87d6, 0x490e, + 0x4911, 0x4910, 0x490f, 0x4912, 0x4949, 0x93c9, 0x494f, 0x494d, 0x8b03, + 0x8acf, 0x4955, 0x8d9f, 0x8da2, 0x902a, 0x902f, 0x9144, 0x9140, 0x4a2c, + 0x4a2b, 0x9311, 0x930f, 0x4a79, 0x930d, 0x9307, 0x9303, 0x4a7a, 0x97b0, + 0x4a99, 0x4a9a, 0x9435, 0x4aae, 0x4aaf, 0x9504, 0x4ae4, 0x4ae1, 0x4ade, + 0x4ae6, 0x4adf, 0x9526, 0x4ae7, 0x4ae2, 0x4ae0, 0x951e, 0x4ae5, 0x985a, + 0x960e, 0x4b18, 0x961d, 0x961e, 0x961f, 0x4b56, 0x9788, 0x9946, 0x978d, + 0x9791, 0x9780, 0x4b6e, 0x9854, 0x9855, 0x4b9d, 0x4ba0, 0x4b9c, 0x9925, + 0x991a, 0x4ba1, 0x4ba2, 0x4b9f, 0x4bdf, 0x4bde, 0x9ac3, 0x4bea, 0x9b88, + 0x4c06, 0x9b7a, 0x4c04, 0x9b0f, 0x9b80, 0x9d1e, 0x9dfc, 0x9e25, 0x4c5f, + 0x9bf4, 0x9bfa, 0x4c5c, 0x9e0b, 0x4c5e, 0x9e06, 0x9e04, 0x9bdd, 0x4c59, + 0x9df9, 0x9e00, 0x4c64, 0x4c5d, 0x4c62, 0x9e02, 0x4c65, 0x9e07, 0x9bed, + 0x4c5b, 0x9bef, 0xa0b5, 0x4cdd, 0xa087, 0x4cdf, 0xa093, 0xfa0f, 0x4ce2, + 0xa0be, 0xa266, 0x4d27, 0xa2c7, 0xa2cf, 0x9e96, 0x4d3a, 0x4d3c, 0xa33d, + 0x4d39, 0xa33c, 0xa347, 0x4d3d, 0x4d3b, 0x9eb3, 0x4d4c, 0xa3c3, 0x4d68, + 0x9ee2, 0xa51b, 0x4d80, 0x4d85, 0xa5c9, 0x4d95, 0xa5dd, 0x4d96, 0xa693, + 0x9f8f, 0x043d, 0x34a4, 0x3512, 0x56b1, 0x3625, 0x14e6, 0x5b41, 0x3737, + 0x1af7, 0x1fb0, 0x1fae, ERROR, 0x3868, 0x3867, 0x389e, 0x259f, 0x259e, + 0x2930, 0x39aa, 0x294f, 0x39a9, 0x39a4, 0x2927, 0x2951, 0x3a71, 0x3a6f, + 0x2e51, 0x2e54, 0x2e56, 0x3027, 0x3aad, 0x3024, 0x6af6, 0x3c0c, 0x6af2, + 0x3c0b, 0x37ec, 0x37c4, 0x3c0f, 0x3c79, 0x40f8, 0x40f6, 0x40f7, 0x40ed, + 0x3d8d, 0x3d8f, 0x40f4, 0x40ef, 0x3d8e, 0x3e0c, 0x447f, 0x44a2, 0x447e, + 0x3ea6, 0x48c5, 0x3ea3, 0x3ea4, 0x3ea5, 0x7588, 0x3f6e, 0x4ef1, 0x4ef2, + 0x3ffa, 0x502f, 0x407c, 0x407e, 0x407b, 0x407d, 0x5323, 0x5329, 0x408d, + 0x40f4, 0x40f3, 0x571b, 0x58eb, 0x4189, 0x58ea, 0x5a33, 0x41c0, 0x5d63, + 0x4265, 0x5d92, 0x5d65, 0x42ad, 0x4325, 0x61a0, 0xf970, 0x625e, 0x43c9, + 0x68aa, 0x444a, 0x68a9, 0x8267, 0x4489, 0x709c, 0x4566, 0x4570, 0x7092, + 0x456d, 0x4569, 0x4567, 0x7086, 0x4572, 0x860e, 0x456e, 0x7083, 0x459c, + 0x45fc, 0x45fd, 0x4604, 0x45ff, 0xf9c2, 0x45fe, 0x4600, 0x74ce, 0x4666, + 0x4669, 0x7793, 0x46aa, 0x46ab, 0x4717, 0x7b2e, 0x7b27, 0x7b28, 0x4715, + 0x8b5e, 0x4712, 0x8d0e, 0x7e18, 0x7e16, 0x7f8d, 0x47ca, 0x7f8e, 0x47c9, + 0x47cb, 0x7f90, 0x7f8f, 0x8181, 0x4829, 0x4828, 0x818a, 0x818c, 0x828d, + 0x4840, 0x4875, 0x4876, 0x83b2, 0x4888, 0x87d9, 0x91b6, 0x4957, 0x9401, + 0x8b0d, 0x495f, 0x8b13, 0x941d, 0x4958, 0x495b, 0x8b1b, 0x942f, 0x8dac, + 0x49b3, 0x8db3, 0x49ef, 0x915e, 0x4a30, 0x9160, 0x9168, 0x9163, 0x9169, + 0x9167, 0x4a41, 0x4a4b, 0x9328, 0x4a7d, 0x932e, 0x9330, 0x4a7c, 0x9326, + 0x9331, 0x9341, 0x97e0, 0x93da, 0x97db, 0xf9fa, 0x940b, 0x9861, 0x9534, + 0x9533, 0x4ae8, 0x4aea, 0x4ae9, 0x9539, 0x953b, 0x9540, 0x9630, 0x4b1b, + 0x9632, 0x9637, 0x4b55, 0x994a, 0x4b59, 0x4b58, 0x9781, 0x979f, 0x97a7, + 0x4ba4, 0x4ba3, 0x9944, 0x9947, 0x9948, 0x993d, 0x9a33, 0x4ba7, 0x9949, + 0x4be0, 0x9a80, 0x9ba0, 0x9b9d, 0x4c08, 0x4c0a, 0x4c09, 0x9b9c, 0x9c47, + 0x9d07, 0x4c71, 0x9c0f, 0x4c6c, 0x9e49, 0x9c11, 0x9e44, 0x9c03, 0x9c01, + 0x4c6e, 0x9edf, 0x9c16, 0x9e4c, ERROR, 0x9e4f, 0x4ce0, 0x4cee, 0xa0c1, + 0x4ceb, 0xa0b9, 0xa0cb, 0xa0cf, 0xa0c4, 0x9d93, 0x4cea, 0x4cef, 0x4ce7, + 0xa0ca, 0xa0c3, 0xa2d0, 0xa351, 0x4d48, 0x4d49, 0xa3a8, 0xa3c7, 0xa3c6, + 0x4d4d, 0xa3ca, 0xa402, 0x4d55, 0xa45d, 0xa45a, 0x4d6a, 0x4d6c, 0xa459, + 0x4d6b, 0xa4cc, 0xa51c, 0xa5cc, 0x4d98, 0x4d99, 0x4d97, 0xa5e8, 0xa5ec, + 0xa5ea, 0xa6ad, 0xa6b0, 0x045f, 0x0458, 0x0457, 0x535b, 0x0b93, 0x3616, + 0x113b, 0x56bf, 0x1134, 0x14f2, 0x3739, 0x1afd, 0x1c1d, 0x3825, 0x5dce, + 0x2304, 0x2448, 0x2958, 0x2e4f, 0x3a74, 0x2e6e, 0x2e72, 0x3aae, 0x302e, + 0x37fc, 0x37f4, 0x3c36, 0x410e, 0x3d92, 0x3d94, 0x4114, 0x3d95, 0x4119, + 0x3e0d, 0x44a6, 0x3e25, 0x4ac9, 0x4ac0, 0x4acc, 0x4b1b, 0x4baa, 0x4ba8, + 0x4f03, 0x3fd5, 0x3fd6, 0x76ac, 0x3fe8, 0x5035, 0x407f, 0x77d2, 0x40f5, + 0x40f6, 0x40f7, 0x55d9, 0x4124, 0x418d, 0x418a, 0x5a3f, 0x5a3d, 0x426c, + 0x4266, 0x426a, 0x5d8b, 0x4267, 0x426d, 0x4268, 0x7c52, 0x5d68, 0x5d8a, + 0x5f58, 0x5f57, 0x61ce, 0x61bc, 0x61c0, 0x61c1, 0x61bf, 0x61ab, 0x625f, + 0x4365, 0x64a6, 0x439a, 0x6529, 0x43b1, 0x444b, 0x444d, 0x444c, 0x444e, + 0x68b8, 0x4573, 0x4575, 0x70dd, 0x70d6, 0xf9b1, 0x70d5, 0x70e7, 0x70d8, + 0x74ec, 0x4603, 0x7500, 0x7507, 0x74fd, 0x74f1, 0x74ff, 0x77aa, 0x77b0, + 0x7b48, 0x471e, 0x7b53, 0x8b73, 0x7b4d, 0x4719, 0x471c, 0x471a, 0x471d, + 0x8b76, 0x7b43, 0x7b50, 0x4743, 0x4752, 0x7c8c, 0x7e27, 0x4795, 0x7f99, + 0x47cc, 0x81b1, 0x482b, 0x81b0, 0x81aa, 0x81ac, 0x482a, 0x8ec7, 0x4877, + 0x83c8, 0x83ca, 0x8642, 0x87e0, 0x88e7, 0x88e8, 0x88e6, 0x4913, 0x4914, + 0x9434, 0x8b5b, 0x8b56, 0x495d, 0x8b5a, 0x4960, 0x943e, 0x4962, 0x8cb8, + 0x8dc5, 0x49b2, 0x49f0, 0x9048, 0x917d, 0x917c, 0x9181, 0x9182, 0x9162, + 0x4a4c, 0x9345, 0x4a82, 0x97bc, 0x4a81, 0x4a9b, 0x93e3, 0x4aa4, 0x4aee, + 0x4aec, 0x9550, 0x4aed, 0x954f, 0x4af0, 0x4aef, 0x9639, 0x4b1d, 0x963a, + 0x4b60, 0x4b5e, 0x4b5d, 0x97c1, 0x994e, 0x996e, 0x4bb1, 0x4bab, 0x4bac, + 0x4bad, 0x9971, 0x4bae, 0x9a8c, 0x9a89, 0x4be2, 0x9ae5, 0x9bb3, 0x9bb6, + 0x9bb4, 0x9c4d, 0x9b39, 0x9d13, 0x9e78, 0x9c2a, 0x4c7b, 0x9c26, 0x4c78, + 0x4c75, 0x9c27, 0x9e72, 0x4cf2, 0x4cf4, 0x4cf3, 0x9dc0, 0x9dc9, 0xa275, + 0xa2da, 0xa2d7, 0x4d3f, 0x4d3e, 0x4d40, 0x4d4e, 0x4d57, 0x4d59, 0x4d58, + 0x4d56, 0xa469, 0xa467, 0x4d6e, 0xa466, 0xa46f, 0xa471, 0x9eec, 0xa4cf, + 0xa523, 0x4d81, 0x4d86, 0xa5a5, 0x4d8f, 0xa5fe, 0xa5fb, 0xa5fd, 0x9f68, + 0x4d9b, 0x4db1, 0x4db3, 0x116d, 0x373a, 0x1b05, 0x1c20, 0x3827, 0x1fc8, + 0x1fc9, 0x386a, 0x39ac, 0x3127, 0x3c18, 0x381e, 0x3936, 0x3c4c, 0x413d, + 0x3d96, 0x48d7, 0x3f4a, 0x4bad, 0x4d00, 0x4081, 0x533a, 0x4083, 0x40f9, + 0x40f8, 0x5726, 0x418e, 0x418f, 0x41c1, 0x5db7, 0x5db6, 0x5dc0, 0x4270, + 0x5d9b, 0x4271, 0x61d8, 0x432a, 0x432d, 0x437d, 0x8032, 0x8031, 0x68c0, + 0x444f, 0x68bf, 0x6abf, 0x4490, 0x7120, 0x70d0, 0x710e, 0x4579, 0x711d, + 0x711e, 0x7115, 0x7114, 0x751e, 0x752c, 0x4605, 0x77b9, 0x77b8, 0x77b6, + 0x789e, 0x789c, 0x794d, 0x89fd, 0x7b6e, 0x7b60, 0x4721, 0x7b64, 0x7b62, + 0x61e5, 0x4732, 0x7fa3, 0x47cd, 0x47cf, 0x83d2, 0x83d5, 0x908e, 0x4916, + 0x4915, 0x49b5, 0x4a08, 0x9055, 0x4a32, 0x9193, 0x4a33, 0x4a34, 0x4a3c, + 0x9356, 0x97c2, 0x93e9, 0x4a9c, 0x9445, 0x4af4, 0x4af2, 0x967c, 0x4b62, + 0x97d3, 0x4b61, 0x4b64, 0x4bb5, 0x9a4b, 0x4bb4, 0x998e, 0x9a97, 0x4be3, + 0x9a9b, 0x9a99, 0x9b1c, 0x4c0e, 0x9bcf, 0x9b1b, 0x9c59, 0x4c2c, 0x4c2b, + 0x9d20, 0x9d23, 0x9d2a, 0x4c85, 0x4c81, 0x4c7e, 0x4c83, 0x4c80, 0x9eb0, + 0x9c42, 0xa12f, 0x9dd4, 0x4cfb, 0x4cf7, 0xa132, 0xa143, 0xa13f, 0xa139, + 0x4cf8, 0xa130, 0xa2dd, 0xa3da, 0xa3db, 0x4d5a, 0xa484, 0xa47f, 0xa472, + 0xa480, 0xa4ee, 0x4d78, 0xa52a, 0xa522, 0xa571, 0xa5cd, 0x4d9d, 0x4d9c, + 0xa60f, 0xa618, 0x046a, 0x34a9, 0x34bf, 0x56d0, 0x56cf, 0x1b0c, 0x5dda, + 0x25a6, 0x3a77, 0x3a76, 0x3037, 0x3abb, 0x66ea, 0x3ae2, 0x3d9b, 0x44bc, + 0x3e0f, 0x3e5b, 0x4ad5, 0x3f4c, 0x3f6f, 0x3fd9, 0x4f12, 0x4082, 0x534b, + 0x5341, 0x53a1, 0x55ec, 0x4274, 0x4272, 0x5dd4, 0x5dd8, 0x5dd9, 0x4273, + 0x5dda, 0x5f6c, 0x5f6d, 0x42b1, 0x432e, 0x61e7, 0x61eb, 0x61ec, 0x6262, + 0x434e, 0x652b, 0x660d, 0x68cd, 0x6ac3, 0x713f, 0x713c, 0x713e, 0x713d, + 0x713a, 0x7138, 0x7544, 0x7545, 0x460b, 0x7548, 0x7550, 0x466c, 0x8b89, + 0x7b78, 0x7b79, 0x478b, 0x7e3e, 0x47d0, 0x482d, 0x8654, 0x48e4, 0x4971, + 0x8bb9, 0x9458, 0x496f, 0x905f, 0x4a87, 0x4aa5, 0x9572, 0x9575, 0x4b1e, + 0x4b65, 0x4bb9, 0x4bb7, 0x4bb8, 0x4be4, 0x9aa3, 0x9aa5, 0x9bdc, 0x9bdd, + 0x9c5a, 0x4c8c, 0x4c89, 0x4c8a, 0x9edb, 0x9edc, 0x4c8b, 0xa1ab, 0xa184, + 0xa176, 0x4d01, 0x4cfe, 0x9de7, 0x4d03, 0x4d06, 0xa183, 0x9dea, 0x9df1, + 0xa27f, 0x4d1d, 0x4d43, 0xa373, 0xa3ad, 0xa3b0, 0x4d4f, 0xa40f, 0xa40c, + 0x4d5b, 0x4d70, 0xa579, 0x4d88, 0xa577, 0xa57a, 0x4d89, 0x9f44, 0xa632, + 0xa627, 0xa62a, 0xa62c, 0x9f6d, 0xa628, 0xa629, 0xa638, 0x082f, 0x117b, + 0x1b0d, 0x5dd9, 0x1fd6, 0x1fd5, 0x2ea1, 0x384c, 0x3d9e, 0x3d9f, 0x3ea7, + 0x3f4b, 0x3fdb, 0x3fda, 0x4fc0, 0x77d6, 0x408e, 0x4276, 0x5df4, 0x4330, + 0x432f, 0x61f0, 0x4366, 0x633f, 0x457e, 0x755d, 0x7572, 0x7562, 0x883a, + 0x7566, 0x8975, 0x466f, 0x7b88, 0x47d1, 0x482f, 0x81e8, 0x81e4, 0x48b2, + 0x4918, 0x4917, 0x88ff, 0x4976, 0x91af, 0x91ae, 0x4a4f, 0x4a89, 0x93f2, + 0x9448, 0x9581, 0x957e, 0x4af5, 0x4b1f, 0x9652, 0x97ef, 0x9a5d, 0x4be5, + 0x9aad, 0x9be6, 0x4c10, 0x9bed, 0x4c0f, 0x9be9, 0x9c61, 0x9c60, 0x9d33, + 0x4c2f, 0x4c30, 0x9c64, 0x9f0b, 0x9f08, 0x4c93, 0x4c94, 0x9f07, 0x4d07, + 0x4d09, 0x4d08, 0xa1ca, 0x4d0b, 0xa1c6, 0x9e0a, 0xa284, 0xa2eb, 0xa37d, + 0x4d50, 0x4d71, 0xa49b, 0xa4a2, 0xa4a1, 0xa4a0, 0xa49c, 0x4d7b, 0x4d7c, + 0xa580, 0x9f73, 0xa640, 0x4da1, 0xa639, 0xa63c, 0x4da0, 0x4da2, 0x08ca, + 0x361b, 0x1189, 0x3682, 0x303c, 0x3940, 0x4163, 0x4169, 0x3fe9, 0x5353, + 0x4084, 0x77e1, 0x5917, 0x591a, 0x5e00, 0x42b3, 0x4334, 0x4333, 0x4580, + 0x756f, 0x78ab, 0x46ad, 0x7b91, 0x4744, 0x4755, 0x7fb1, 0x47d2, 0x81ef, + 0x8df1, 0x8df2, 0x91b7, 0x91b5, 0x4a8a, 0x9586, 0x965a, 0x4b67, 0x99c6, + 0x99cb, 0x4be6, 0x9ab2, 0x4c13, 0x9bf3, 0x9b2d, 0x9f27, 0x4c97, 0x9e0c, + 0xa1d5, 0xa1d8, 0x4d0c, 0xa1ec, 0xa287, 0xa2f2, 0x4d46, 0x4d5c, 0x4d74, + 0x4d72, 0xa4ad, 0xa4b0, 0xa4fd, 0x9f1f, 0xa587, 0xa64a, 0x4da4, 0x4da3, + 0xa64e, 0xa649, 0xa651, 0xa64d, 0x4db4, 0x0472, 0x3536, 0x1b16, 0x386d, + 0x3941, 0x3cb2, 0x4171, 0x4174, 0x3f16, 0x7c70, 0x4277, 0x5f7c, 0x457f, + 0x718a, 0x7956, 0x487d, 0x9479, 0x8bfa, 0x974a, 0x4a8c, 0x965b, 0x4b68, + 0x4bbe, 0x4c15, 0xa1f5, 0xa1f0, 0xa2f3, 0xa37f, 0xa413, 0x4d75, 0x4da5, + 0x1b19, 0x2985, 0x2eb0, 0x4177, 0x55ff, 0x4278, 0x4335, 0x7e9d, 0x4582, + 0x7187, 0x4583, 0x718b, 0x4671, 0x7b9e, 0x487e, 0x4a8e, 0x958f, 0x9960, + 0x4b69, 0x9839, 0x99d4, 0x9af1, 0x9c02, 0x9c6b, 0x9d40, 0x4c9a, 0x4c9b, + 0xa210, 0xa4be, 0xa4b9, 0x4d90, 0xa664, 0x9f9e, 0x4ae9, 0x7190, 0x4586, + 0x4585, 0x721c, 0x460e, 0x7592, 0x4695, 0x7ba3, 0x4919, 0x91c9, 0x4bc0, + 0x99d8, 0x9d44, 0xa224, 0x9ef8, 0x9f3a, 0x9f7d, 0xa670, 0xa6d3, 0x400d, + 0x4c16, 0xa4c3, 0x4da9, 0x4daa, 0x4085, 0x5e21, 0x6aca, 0x759c, 0x9c73, + 0xa386, 0xa5c1, 0x9c09, 0x9f96, 0xa6d5, 0x4bc2, 0x4c31, 0x4d11, 0x4dab, + 0x4c9c, 0x91d4, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, 0x00d1, 0x00cb, 0x00c9, 0x010c, 0x0000, 0x0087, 0x010d, 0x010f, + 0xf81d, 0x2398, 0x00d2, 0x0111, 0x007e, 0x0ad3, 0x1552, 0x1cfe, 0x25a9, + 0x3942, 0x0009, 0x00d6, 0x04dd, 0x04dc, 0x0502, 0x0573, 0x0676, 0x06a7, + 0x06a8, 0x0833, 0x08cc, 0x0a0d, 0x0a2c, 0x0b1b, 0x355a, 0x0b1d, 0x0b99, + 0x123e, 0x1d2d, 0x1d2f, 0x2399, 0x33b3, 0x39b6, 0x3b1b, 0x44ef, 0x48e9, + 0x0014, 0x0094, 0x00e1, 0x0506, 0x054a, 0x0544, 0x0631, 0x067a, 0x06ad, + 0x06ae, 0x06b1, 0x0838, 0x0837, 0x097d, 0x097e, 0x0a2d, 0x0a32, 0x0b23, + 0x0b26, 0xf83a, 0x0ba0, 0x16a8, 0x193f, 0x19bc, 0x1bc4, 0x1d3b, 0x2019, + 0x2018, 0x21b3, 0x23aa, 0x24be, 0x25ac, 0x2a25, 0x2a66, 0x2a6b, 0x3943, + 0x39b5, 0x3aec, 0x3c76, 0x3cbc, 0x4614, 0x15dc, 0x471c, 0x471d, 0x64d0, + 0x6612, 0x6af3, 0x8669, 0x49b9, 0x8e11, 0x8e15, 0x8e10, 0x8e13, 0x00a4, + 0x00a5, 0x01d0, 0x01ba, 0x01cb, 0x057b, 0x0686, 0x06bb, 0x06ba, 0x06c3, + 0x06b9, 0x06c0, 0x34de, 0x0839, 0x083b, 0x0841, 0x08d1, 0x08cf, 0x08d2, + 0x092e, 0x096e, 0x098c, 0x0988, 0x0a35, 0x3543, 0x0a3a, 0x0a3b, 0x0a38, + 0x0a39, 0x0b2e, 0x0b2c, 0x0bc8, 0x0bb5, 0x0bad, 0x0bb0, 0x0bab, 0x11b3, + 0x11a9, 0x16bb, 0x16b9, 0x1b5a, 0x1bcd, 0x1c2b, 0x1d05, 0x37ac, 0x37aa, + 0x1d51, 0x1d4b, 0x1fea, 0x1fed, 0x2036, 0x2062, 0x2056, 0x2055, 0x2064, + 0x2058, 0x5e07, 0x21da, 0x21d8, 0x23ad, 0x23ab, 0x24c0, 0x24c3, 0x25b3, + 0x25b7, 0x25ba, 0x5fcb, 0x38fe, 0x25c7, 0x25b5, 0x298e, 0x2a73, 0x2a6c, + 0x2a74, 0xf8b4, 0x2a72, 0x2a71, 0x2a82, 0x2a70, 0x313f, 0x33ba, 0x33b8, + 0x39b7, 0x4723, 0x4721, 0x472b, 0x4726, 0x4722, 0x4d25, 0x50e4, 0x5415, + 0x64e4, 0x6633, 0x662a, 0x6632, 0x6629, 0x6afb, 0x795b, 0x795c, 0x7c28, + 0x866f, 0x866d, 0x866b, 0x866e, 0x8e16, 0x0022, 0x0116, 0x0148, 0x01d8, + 0x0200, 0x3441, 0x0480, 0x04e4, 0x34b4, 0x04e7, 0x050c, 0x0553, 0x05b7, + 0x0ae8, 0x06d1, 0x06e5, 0x06d8, 0x06d6, 0x06da, 0x06d9, 0x06d5, 0x06e6, + 0x06d4, 0x06d3, 0x0844, 0x08d6, 0x08d7, 0x0913, ERROR, 0x0970, 0x0992, + 0x09db, 0x09da, 0x0a41, 0x0a43, 0x0b33, 0x0bf6, 0x0bd4, 0x0bdd, 0x0bd0, + 0x0c04, 0x0bd9, 0x0bdb, 0x0c05, 0x0bd3, 0x0be1, 0x1280, 0x1277, 0x1281, + 0x1282, 0x1283, 0xf85c, 0x1561, 0x1560, 0x16d8, 0x16d6, 0x16d7, 0x4605, + 0x194d, 0x1948, 0x1bd6, 0x1bcf, 0x1bd9, 0x1bd8, 0x1c3d, 0x37b3, 0x1d54, + 0x1d5b, 0x1d5c, 0x37b4, 0x1d59, 0x1d58, 0x1d5a, 0x1d55, 0x1d56, 0x1d82, + 0x1ff0, 0x201c, 0x206a, 0x2069, 0x2071, 0x2067, 0x206c, 0x206e, 0x2079, + 0x218b, 0x21b8, 0x21e7, 0x21e8, 0x21e4, 0x21e6, 0x21e5, 0x21f0, 0x2383, + 0x23b7, 0x23bb, 0x23b9, 0x23c5, 0x2453, 0x24c4, 0x24c6, 0x24cb, 0x25c8, + 0xf89f, 0x25c9, 0x25db, 0x2994, 0x2a95, 0x2a88, 0x2a8d, 0x2eec, 0x2eee, + 0x2ef1, 0x312e, 0x3149, 0x335f, 0x33d1, 0x33cb, 0x3885, 0x3c1d, 0x394a, + 0x3947, 0x394b, 0x39bb, 0x39c4, 0x3c7c, 0x3b02, 0x3c82, 0x3c91, 0x3c8f, + 0x3c92, 0x418f, 0x4191, 0x41b4, 0x4192, 0x44f4, 0x45aa, 0x4735, 0x4737, + 0x473d, 0x473c, 0x472f, 0x4730, 0x48f8, 0x48ef, 0x4b26, 0x3f55, 0x4d26, + 0x4d27, 0x4f41, 0x4fc6, 0x4fc7, 0x50eb, 0x50e8, 0x50ea, 0x541a, 0x5419, + 0x4126, 0x5923, 0x5924, 0x5e25, 0x6635, 0x6634, 0x6a07, 0x721d, 0x77e1, + 0x7bab, 0x8460, 0x8677, 0x867d, 0x49bc, 0x8e1e, 0x8e1a, 0x8e1d, 0x006b, + 0x012d, 0x014c, 0x022a, 0x344a, 0x0215, 0x022c, 0x0206, 0x0208, 0x020a, + 0x344e, 0x0556, 0x0584, 0x34c9, 0x05c6, 0x06f5, 0x0709, 0x06f8, 0x06e8, + 0x06fb, 0x06e9, 0x06f6, 0x52b7, 0x52b8, 0x0852, 0x52b6, 0x52ba, 0x0854, + 0x0851, 0x0939, 0x093a, 0x0998, 0x0a4e, 0x357b, 0x0c36, 0x0c0c, 0x0c10, + 0x0c32, 0x0c11, 0x0c18, 0x0c1c, 0x0c1a, 0x0c19, 0x0c0b, 0x0c0f, 0x0c1d, + 0x0c21, 0x0c13, 0x0c1b, 0x0c15, 0x3620, 0x11d1, 0x11c8, 0x128d, 0x12b5, + 0x3689, 0x3695, 0x15f8, 0x16e0, 0x16e1, 0x36be, 0x16de, 0x16fe, 0x16dc, + 0x1701, 0x16fd, 0x1700, 0x19d7, 0x19d6, 0x19d9, 0x1b65, 0x1bd2, 0x1bdc, + 0x1be1, 0x1bde, 0x1c42, 0x1c4b, 0x37c3, 0x1d8e, 0x1d91, 0x1d8b, 0x1d90, + 0x1d88, 0x1d89, 0x1d84, 0x1daa, 0x208d, 0x208f, 0x207d, 0x207f, 0x207b, + 0x2080, 0x207e, 0x2083, 0x2081, 0x2086, 0x208a, 0x21bd, 0x21be, 0x3877, + 0x21f4, 0x21f3, 0x2202, 0x21f6, 0x21f5, 0x21f2, 0x2204, 0x233d, 0x23c6, + 0x2489, 0x24d4, 0x24d6, 0x24d2, 0x25fa, 0x2606, 0x260c, 0x260a, 0x260f, + 0x2a2f, 0x39d4, 0x2ab7, 0x2abe, 0x2abc, 0x2ae2, 0x2f06, 0x2ef7, 0x2f07, + 0x2ef6, 0x3b35, 0x315f, 0x3165, 0x3164, 0x3161, 0x315a, 0x315d, 0xf8d7, + 0x33d7, 0x33d5, 0x33de, 0x33e1, 0x33e0, 0x33d9, 0x3b4c, 0x33da, 0x33df, + 0x33f6, 0x3403, 0x3c20, 0x3893, 0x388b, 0x3891, 0x3892, 0x388a, 0x3889, + 0x388f, 0x3956, 0x3959, 0x39ca, 0x39cc, 0x3c5b, 0x39d0, 0x39cd, 0x39d6, + 0x39cb, 0x3a83, 0x3a82, 0x3b06, 0x3b2a, 0x3b2c, 0x3b2b, 0x3b29, 0x3cbd, + 0x3cb3, 0x3cbe, 0x3cc0, 0x3cb5, 0x3cb6, 0x419d, 0x419f, 0x4620, 0x3e2d, + 0x461e, 0x461c, 0x4632, 0x461f, 0x462b, 0x4621, 0x4626, 0x4624, 0x461d, + 0x4627, 0x475b, 0x4759, 0x4780, 0x4755, 0x4750, 0x475a, 0x4756, 0x4763, + 0x4752, 0x4758, 0x3e63, 0x4739, 0x48f9, 0x4b28, 0x3f18, 0x4bbc, 0x4bd6, + 0x4c05, 0x4c20, 0x3f74, 0x4d33, 0x4f46, 0x4f42, 0x4f43, 0x4f47, 0x4fcb, + 0x5042, 0x5045, 0x50fd, 0x50f4, 0x50f9, 0x50fa, 0x535e, 0x541d, 0x4128, + 0x5758, 0x5755, 0x5a57, 0x5a58, 0x5ad9, 0x5adc, 0x5adb, 0x5e27, 0x5f85, + 0x5f87, 0x5f8a, 0x628b, 0x634f, 0x6530, 0x652f, 0x6668, 0x6649, 0x43da, + 0x6648, 0x663f, 0x664b, 0x665c, 0x6646, 0x6640, 0x6a0d, 0x6b1b, 0x6b1d, + 0x6b17, 0x44a4, 0x6b22, 0x75a7, 0x7608, 0x7806, 0x847d, 0x488e, 0x8463, + 0x8464, 0x847f, 0x846b, 0x847c, 0x8468, 0x8465, 0x846a, 0x8698, 0x8699, + 0x86ae, 0x8e2b, 0x8e2d, 0x8e31, 0x8e2e, 0x8e2f, 0x006d, 0x0131, 0x022d, + 0x0239, 0x0238, 0x345b, 0x023a, 0x0235, 0x0262, 0x04ea, 0x04eb, 0x0515, + 0x05cc, 0x05c8, 0x05cd, 0x05db, 0x05cb, 0x0711, 0x0726, 0x0862, 0x085e, + 0x0861, 0x0941, 0x093f, 0x0975, 0x3965, 0x0b49, 0x09eb, 0x0a1a, 0x0a57, + 0x0c6b, 0x0ca9, 0x0c54, 0x0c62, 0x0caa, 0x0c58, 0x0c72, 0x0c63, 0x0c73, + 0x0c8b, 0x0c8c, 0x0c5c, 0x0c51, 0x0c16, 0x0c60, 0x0c61, 0x0c5e, 0x0c5d, + 0x0c64, 0x0c53, 0x0c5f, 0x0c5b, 0x0c6e, 0x0c55, 0x0c52, 0x0c68, 0x11d2, + 0x11d6, 0x11d3, 0x12b8, 0x12bb, 0x12eb, 0x12e8, 0x12b6, 0x12ea, 0x12e7, + 0x12e9, 0x1591, 0x1610, 0x160e, 0x160f, 0x170b, 0x1703, 0x172b, 0x1709, + 0x1728, 0x172c, 0x1725, 0x1727, 0x170f, 0x19e9, 0x19ec, 0x3753, 0x1b27, + 0x1b73, 0x1be2, 0x1be6, 0xf876, 0x1c61, 0x1c51, 0x1d12, 0x1d0e, 0x1dad, + 0x1daf, 0x1db1, 0x1dd3, 0x2094, 0x2092, 0x2090, 0x209d, 0x2093, 0x2095, + 0x2098, 0x2097, 0x3880, 0xf88a, 0x2207, 0x220b, 0x2208, 0x23d9, 0x23d5, + 0x24d7, 0x24df, 0x38dd, 0x24de, 0x24e3, 0x24e2, 0x38de, 0x2647, 0x3922, + 0x263d, 0x2638, 0x2a44, 0x2a3a, 0x2ab8, 0x2b2a, 0x2b00, 0x2af3, 0x2af2, + 0x2aeb, 0x2afa, 0x2aed, 0x2aec, 0x2aff, 0x2afb, 0x6306, 0x2b4e, 0x2aef, + 0x2af7, 0x2f10, 0x2f11, 0x2f0c, 0x2f0b, 0x30dd, 0x3130, 0x3adb, 0x317a, + 0x3177, 0x3328, 0x3327, 0x3365, 0x340e, 0x340b, 0x3441, 0x3413, 0x340f, + 0x3412, 0x3430, 0x38a0, 0x38a3, 0x389e, 0x3897, 0x38a1, 0x389d, 0x389b, + 0x3963, 0x39e3, 0x39e4, 0x39e6, 0x39e7, 0x39dd, 0x6b85, 0x39ec, 0x39e5, + 0x39f1, 0x3b3b, 0x3b39, 0x3b3a, 0x3b3c, 0x3b3d, 0x3b47, 0x3b3f, 0x3b44, + 0x3c48, 0x3c49, 0x3c60, 0x3ce3, 0x3ce9, 0x3cf0, 0x3cda, 0x3cdb, 0x3cf2, + 0x3ced, 0x3cec, 0x3ce6, 0x3d16, 0x3cd7, 0x41bc, 0x41be, 0x41c0, 0x41e0, + 0x4500, 0x4502, 0x44fe, 0x455e, 0x45b3, 0x45b7, 0x463a, 0x4639, 0x463e, + 0x4638, 0x463d, 0x464f, 0x476e, 0x475f, 0x4781, 0x4782, 0x4771, 0x477b, + 0x4779, 0x4777, 0x4773, 0x476f, 0x4797, 0x477e, 0x48fc, 0x4911, 0x4932, + 0x4931, 0x4910, 0x4aec, 0x4aeb, 0x4b2c, 0x4b2d, 0x4bda, 0x4c2e, 0x4c2c, + 0x4c2a, 0x4c33, 0x4c4b, 0x4d18, 0x4d42, 0x4d3b, 0x4d3f, 0x4d41, 0x4d43, + 0x4d3c, 0x4f4c, 0x4f4a, 0x4f49, 0x4f56, 0x4fcf, 0x5047, 0x5048, 0x5046, + 0x511b, 0x5111, 0x5114, 0x511d, 0x5117, 0x511e, 0x510b, 0x511c, 0x5112, + 0x5116, 0x510d, 0x5115, 0x5113, 0x5118, 0x401a, 0x53ac, 0x5444, 0x542c, + 0x5445, 0x5766, 0x576e, 0x5765, 0x5768, 0x5784, 0x5938, 0x593b, 0x593a, + 0x593f, 0x5adf, 0x5add, 0x5ade, 0x5ae2, 0x41d6, 0x5e2c, 0x5e2f, 0x5f8f, + 0x5f90, 0x5f8c, 0x5f93, 0x6225, 0x6288, 0x62a7, 0x63f7, 0x64bb, 0x6538, + 0x6539, 0x6537, 0x6614, 0x666e, 0x667b, 0x43de, 0x666c, 0x667f, 0x6678, + 0x667a, 0x666f, 0x43e5, 0x68fe, 0x6b48, 0x6b4b, 0x6b41, 0x6b49, 0x6b3b, + 0x722d, 0x75e3, 0x761a, 0x760d, 0x7613, 0x7611, 0x761c, 0x4672, 0x78b5, + 0x46af, 0x7c29, 0x7ca1, 0x7d24, 0x7fbb, 0x82a1, 0x8483, 0x848d, 0x8487, + 0x8485, 0x848a, 0x84a3, 0x8489, 0x8484, 0x84a2, 0x86b1, 0x86b0, 0x86af, + 0x86b6, 0x86c9, 0x86ca, 0x86c8, 0x86b4, 0x8c59, 0x8cc9, 0x8e41, 0x8e4c, + 0x49c4, 0x8e45, 0x8e5a, 0x00b9, 0x0294, 0x026e, 0x02a2, 0x0267, 0x3463, + 0x02a3, 0x0276, 0x026c, 0x0264, 0x02a5, 0x0230, 0x02a6, 0x0269, 0x02a4, + 0x0490, 0x055f, 0x0560, 0x05da, 0x05d8, 0x05dd, 0x34ec, 0x0759, 0x075b, + 0x075a, 0x0739, 0x0734, 0x0744, 0x0733, 0x073c, 0x0758, 0x076a, 0x086f, + 0x0872, 0x0870, 0x0871, 0x086e, 0x08f0, 0x08eb, 0x0949, 0x094c, 0x09f5, + 0x0a20, 0x0a6a, 0x0a72, 0x0b4b, 0x0b5d, 0x0c50, 0x0cf9, 0x0cfa, 0x0cfb, + 0x0d23, 0x0cb7, 0x0d22, 0x0cb5, 0x0cc4, 0x0cb4, 0x0cef, 0x3598, 0x0ccd, + 0x0cf0, 0x0cb8, 0x0ccb, 0x0cf1, 0x0cba, 0x0d03, 0x0cf8, 0x0cb6, 0x0cbc, + 0x0cb3, 0x0d21, 0x0cf7, 0x0cc2, 0x0cbe, 0x0cc9, 0x0cbd, 0x0cce, 0x0cb9, + 0x0cc7, 0x0cca, 0x0ccc, 0x0d26, 0x11e4, 0x11e0, 0x11f0, 0x12ec, 0x1324, + 0x1318, 0x132f, 0x1325, 0x1528, 0x1522, 0x156a, 0x0157, 0x1594, 0x1592, + 0x159c, 0x1622, 0x1630, 0x161d, 0x1623, 0x1735, 0x1733, 0x172f, 0x174d, + 0x1731, 0x175b, 0x175a, 0x1732, 0x175c, 0x1759, 0x175d, 0x1969, 0x196d, + 0x2232, 0x3758, 0x1a0a, 0x1a20, 0x1a1f, 0x1a0d, 0x1be8, 0x1bec, 0x1c77, + 0x1c70, 0x1c71, 0x1df8, 0x1dd6, 0x1dd9, 0x1dde, 0x1dd5, 0x1de1, 0x37d3, + 0x1de2, 0x1ddd, 0x1de0, 0x1e0e, 0x1e08, 0x1ddc, 0x1e0a, 0x1e0c, 0x20b4, + 0x20b1, 0x20b6, 0x20bc, 0x221d, 0x2224, 0x2219, 0x221b, 0x2222, 0x221a, + 0x221c, 0x2221, 0x23e6, 0x23e4, 0x23e7, 0x23ea, 0x38e2, 0xf89b, 0x24f0, + 0x24f5, 0x24ef, 0x2642, 0x266e, 0x263c, 0x2697, 0x268c, 0x2681, 0x2671, + 0x26ce, 0x26ba, 0x267a, 0x267e, 0x3954, 0x2672, 0x26bb, 0x392f, 0x2673, + 0x2682, 0x39b6, 0x29ba, 0x29b8, 0x2a4b, 0x2a48, 0x2b2b, 0x2af4, 0x2b2c, + 0x2b42, 0x2b48, 0x2b44, 0x2b45, 0x2b3c, 0x2b37, 0x2b33, 0x2b41, 0x2b32, + 0x2b87, 0x2f27, 0x2f23, 0x2f2d, 0x2f1f, 0x2f2c, 0x2f28, 0x3075, 0x3074, + 0x30e7, 0x3132, 0x3131, 0x3199, 0x3196, 0x3198, 0x319d, 0x3192, 0x3194, + 0x3195, 0x3197, 0x66b9, 0x3b35, 0x3411, 0x343b, 0x3479, 0x3442, 0x3443, + 0x3b5d, 0x3478, 0x38ac, 0x3c29, 0x38b1, 0x38b4, 0x38b3, 0x38af, 0x38aa, + 0x38b2, 0x3968, 0x39f2, 0x39fe, 0x39f8, 0x39f9, 0x39ff, 0x39f5, 0x39f7, + 0x39fd, 0x3a00, 0x3a88, 0x3b6e, 0x3b5d, 0x3b63, 0x3b60, 0x3c61, 0x3d37, + 0x3d71, 0x3d23, 0x3d22, 0x3d1f, 0x3d25, 0x41fd, 0x4211, 0x4223, 0x41f0, + 0x41ef, 0x450e, 0x450c, 0x45ba, 0x3e1f, 0x4652, 0x4655, 0x4653, 0x4654, + 0x4651, 0x4658, 0x47b0, 0x479f, 0x3e72, 0x47a1, 0x479a, 0x47be, 0x47a0, + 0x4937, 0x3f0b, 0x4af1, 0x4af2, 0x4b34, 0x4b37, 0x4b35, 0x238c, 0x4bdf, + 0x4c4c, 0x4c4e, 0x4c64, 0x4c63, 0x4c36, 0x4d58, 0x4d68, 0x4d5b, 0x4d5f, + 0x4d59, 0x4d65, 0x4d60, 0x4d5e, 0x4fd5, 0x4fd6, 0x504e, 0x5052, 0x5135, + 0x5139, 0x5158, 0x5141, 0x5157, 0x5138, 0x513d, 0x5132, 0x5144, 0xf944, + 0x5363, 0x5362, 0x53b8, 0x53b0, 0x53b1, 0x544d, 0x5463, 0x5470, 0x544b, + 0x544f, 0x544e, 0x5453, 0x5447, 0x40a2, 0x5454, 0x5452, 0x5459, 0x547e, + 0x562b, 0x562e, 0x577f, 0x577e, 0x5781, 0x5783, 0x5947, 0x5954, 0x594d, + 0x594c, 0x594b, 0x5957, 0x5a65, 0x5a64, 0x5a61, 0x5a62, 0x5af0, 0x5af3, + 0x5af9, 0x5af4, 0x5af5, 0x5aef, 0x5af8, 0x5afc, 0x5af7, 0x5afd, 0x5b17, + 0x5e34, 0x5e36, 0x5e38, 0x5faf, 0x5fae, 0x5fac, 0x5fa2, 0x6228, 0x2ec2, + 0x629c, 0x62b3, 0x6290, 0x6406, 0x6404, 0x640b, 0x6405, 0x6540, 0x654f, + 0x66ab, 0x669d, 0x66b8, 0x66b2, 0x66d2, 0x66cf, 0x66a2, 0x43ec, 0x66a5, + 0x66a9, 0x66a7, 0x66d0, 0x6902, 0x69cf, 0x69d0, 0x6a16, 0x6a19, 0x6b75, + 0x6b71, 0x6b91, 0x6b72, 0x6b8e, 0x6b6d, 0x6b88, 0x6b73, 0x44bb, 0x6b81, + 0x6b76, 0x6b7b, 0x6b7f, 0x6b90, 0x6b78, 0x724b, 0x7248, 0x725b, 0x7251, + 0x723d, 0x7240, 0x7246, 0x724d, 0x723b, 0x724a, 0x7241, 0x723e, 0x724e, + 0x75ac, 0x75e6, 0x75e9, 0x7629, 0x4621, 0x7633, 0x762e, 0x761e, 0x461f, + 0xf9c5, 0x7622, 0x7627, 0x77e7, 0x780b, 0x7966, 0x7bad, 0x7bae, 0x8c38, + 0x7c2b, 0x7c2a, 0x7d2c, 0x7d2d, 0x4791, 0x4796, 0x7e8f, 0x7e93, 0x7fc6, + 0x7fc5, 0x8215, 0x8213, 0x82b1, 0x82a9, 0x8ece, 0x84a8, 0x84ab, 0x84be, + 0x84ac, 0x84a9, 0x84a6, 0x84c1, 0x86cc, 0x86d1, 0x86d3, 0x86e4, 0x86cb, + 0x86e1, 0x86d2, 0x86e3, 0x86cf, 0x86d0, 0x86e5, 0x870e, 0x8ccc, 0x8cca, + 0x8ccb, 0x8e5c, 0x8e61, 0x8e5d, 0x8e59, 0x9077, 0x9684, 0x0041, 0x00fd, + 0x011a, 0x0163, 0x02b6, 0x02b2, 0x02e9, 0x02e7, 0x02d6, 0x0330, 0x02ec, + 0x02dd, 0x02e8, 0x02b0, 0x02b5, 0x02e1, 0x0498, 0x0499, 0x34bc, 0x0593, + 0x05e5, 0x34d8, 0x0760, 0x075e, 0x34f4, 0x087b, 0x08f1, 0x08f3, 0x0a7f, + 0xf838, 0x0b57, 0x0b58, 0x0d39, 0x0da7, 0x0d35, 0x0d60, 0x0d51, 0x0d62, + 0x0d42, 0x0d3c, 0x0d43, 0x0dab, 0x0da9, 0x0db4, 0x0d79, 0x0d6a, 0x0d3b, + 0x0daa, 0x0d33, 0x0d37, 0x0d27, 0x0da8, 0x0d70, 0x0d2f, 0x0d36, 0x0db5, + 0x0d30, 0x0d3a, 0x0d38, 0x0db1, 0x0dac, 0x0d2e, 0x0d75, 0x0db0, 0x11f7, + 0x1200, 0x11f1, 0x11f3, 0x1360, 0x1361, 0x1332, 0x132d, 0x134a, 0x132a, + 0x1567, 0x15a2, 0x15a3, 0x159e, 0x15a4, 0x1644, 0x1632, 0x179b, 0x1798, + 0x1799, 0x179a, 0x1766, 0x1762, 0x176b, 0x4562, 0x1767, 0x1a3b, 0x1a23, + 0x1a29, 0x1b7e, 0x1bf3, 0x3785, 0x1bf5, 0x3783, 0x1c80, 0x1c7e, 0x1c7c, + 0x1c7f, 0x1c7d, 0x1c81, 0x1e25, 0x1e29, 0x1e17, 0x1e63, 0x1e67, 0x1e65, + 0x1e2a, 0x1e68, 0x1e26, 0x1e64, 0x1e1b, 0x1e62, 0x1e69, 0x1ffe, 0x2044, + 0x2042, 0x20b7, 0x20d2, 0x20d4, 0x20d7, 0x20dc, 0x20d1, 0x20d5, 0x20cd, + 0x20d8, 0x219a, 0x2242, 0x2235, 0x2258, 0x2234, 0x223c, 0x223b, 0x223e, + 0x223d, 0x225a, 0x2241, 0x2238, 0x2245, 0x2233, 0x2326, 0x38ba, 0x23f7, + 0x23ef, 0x23f0, 0x23ee, 0x249d, 0x2506, 0x2511, 0x2508, 0x2502, 0x250a, + 0x2507, 0x2691, 0x268e, 0x2685, 0x26e8, 0x2717, 0x26d4, 0x3969, 0x26c4, + 0x26d5, 0x3945, 0x26d8, 0x2680, 0x26de, 0x2742, 0x29c7, 0x29bf, 0x2b8d, + 0x2b89, 0x2b90, 0x2b9a, 0x2bc8, 0x2b92, 0x2ba1, 0x2b84, 0x2f57, 0x2f47, + 0x2f77, 0x2f3a, 0x2f50, 0x2f42, 0x2f43, 0x2fa3, 0x3077, 0x31b2, 0x31e2, + 0x31bd, 0x3374, 0x3482, 0x34b8, 0x3b6c, 0x34ba, 0x34b9, 0x34bb, 0x3487, + 0xf8e4, 0x3483, 0x34b7, 0x0043, 0x38ce, 0x38ba, 0x3973, 0x3a09, 0x3a0a, + 0x3a0b, 0x3a07, 0x3a05, 0x3a0e, 0x3a97, 0x3b77, 0x3b7b, 0x3b7a, 0x3b74, + 0x3b79, 0x3d86, 0x3df5, 0x3da5, 0x3d9d, 0x3dbe, 0x3d96, 0x3de1, 0x3da4, + 0x3da1, 0x3df6, 0x3d04, 0x3d8d, 0x3d8b, 0x3d78, 0x3d98, 0x3e0a, 0x425d, + 0x4227, 0x425f, 0x45c0, 0x45c1, 0x466d, 0x465e, 0x468a, 0x4662, 0x4664, + 0x3e3a, 0x47c0, 0x47ca, 0x47d1, 0x3e79, 0x47c7, 0x47ce, 0x7309, 0x47c5, + 0x4936, 0x4957, 0x4977, 0x4af6, 0x4af7, 0x4b55, 0x4b44, 0x4b3e, 0x4b42, + 0x4b52, 0x4be1, 0x4c08, 0x4c68, 0x4c67, 0x3f5d, 0xf937, 0x4d7e, 0x4d93, + 0x4d79, 0x4d81, 0x4d7d, 0x4d7b, 0x4d94, 0x3f8a, 0x4f66, 0x4fd9, 0x4fe0, + 0xf93e, 0x505f, 0x515f, 0x515e, 0x5168, 0x4027, 0x5188, 0x516a, 0x516c, + 0x5166, 0x5167, 0x5189, 0x5160, 0x5185, 0x032a, 0x5368, 0x53b9, 0x53ba, + 0x53be, 0x546f, 0x5480, 0x5474, 0x5481, 0x547a, 0x549c, 0x5473, 0x5482, + 0x547f, 0x54a7, 0x5479, 0x5478, 0x547d, 0x54a8, 0x547c, 0x5668, 0x564e, + 0x579e, 0x4146, 0x4140, 0x5798, 0x413f, 0x5785, 0x579c, 0x57c5, 0x579a, + 0x5968, 0x5965, 0x5967, 0x5961, 0x5960, 0x419d, 0x41cb, 0x5a7b, 0x41e1, + 0x5b19, 0x5b0e, 0x5b31, 0x5b12, 0x5b10, 0x5b15, 0x5b3f, 0x5b1d, 0x5b1e, + 0x5e4d, 0x5e48, 0x5e45, 0x5e42, 0x5e49, 0x5e4a, 0x5e47, 0x427f, 0x5e4c, + 0x5fcd, 0x5fd5, 0x5fc4, 0x5fca, 0x5fc3, 0x4346, 0x6229, 0x62b4, 0x636d, + 0x6366, 0x636a, 0x6415, 0x64d3, 0x64ec, 0x6555, 0x441a, 0x66d6, 0x66d8, + 0x6751, 0x66e0, 0x6703, 0x6704, 0x66da, 0x66ea, 0x6702, 0x66d3, 0x66e4, + 0x66e5, 0x693b, 0x6966, 0x6a2c, 0x6a21, 0x6a26, 0x6ad4, 0x6ad5, 0x6ad9, + 0x6bd5, 0x6beb, 0x6bc5, 0x44d3, 0x6c27, 0x6bf0, 0x6bb9, 0x6c18, 0x6bee, + 0x44d0, 0x6bb7, 0x6bbb, 0x6bef, 0x6bb8, 0x6bdf, 0x6bda, 0x6be3, 0x6bc9, + 0x6bec, 0x71a4, 0x458e, 0x71a3, 0x725e, 0x7261, 0x7262, 0x7263, 0x728e, + 0x7269, 0x726b, 0x7285, 0x728d, 0x7264, 0x726d, 0x764c, 0x7649, 0x7647, + 0x7648, 0x7642, 0x7645, 0x765b, 0x765d, 0x7646, 0x7813, 0x781a, 0x780e, + 0x780f, 0x781b, 0x7812, 0x78c3, 0x78be, 0x78bd, 0x7979, 0x797c, 0x46c3, + 0x46b6, 0x7980, 0x7975, 0x799b, 0x8a2f, 0x7974, 0x46c0, 0x46b8, 0x2041, + 0x2494, 0x7c30, 0x7ca7, 0x7ca5, 0x7ca4, 0x7d3a, 0x7e5b, 0x7e9f, 0x7ea8, + 0x7eb3, 0x7ea1, 0x7ea7, 0x7eb2, 0x7e9d, 0x7ea3, 0x7ea2, 0x7fef, 0x7fd9, + 0x47d9, 0x7fd5, 0x7fdd, 0x7fda, 0x7fee, 0x7fd7, 0x821a, 0x8219, 0x8218, + 0x82b3, 0x82bf, 0x82bb, 0x82c0, 0x82b9, 0x82b8, 0x82d5, 0x8411, 0x8410, + 0x84c3, 0x84c2, 0x84e9, 0x84cd, 0x84e5, 0x84ca, 0x84c7, 0x84e8, 0x86f1, + 0x870c, 0x86ef, 0x86ee, 0x86f3, 0x870d, 0x86f6, 0x86f0, 0x48ec, 0x87f5, + 0x87f4, 0x87f8, 0x87fe, 0x8911, 0x8922, 0x8942, 0x8c5c, 0x8c5a, 0x8c5d, + 0x8cd1, 0x8cd0, 0x8e75, 0x8e7b, 0x8f89, 0x944d, 0x9689, 0x9692, 0x968c, + 0x9688, 0x9867, 0x9868, 0x0321, 0x02f2, 0x0309, 0x02f8, 0x02f0, 0x02f3, + 0x02f5, 0x02fb, 0x02f7, 0x02ef, 0x030b, 0x04a2, 0x05f5, 0x05f3, 0x05f4, + 0x05f2, 0x0698, 0x0768, 0x0780, 0x0785, 0x078e, 0x078f, 0x02f4, 0x0786, + 0x07a4, 0x0886, 0x0889, 0x0887, 0x0885, 0x52dc, 0x0888, 0x0aff, 0x0b66, + 0x35cc, 0x0dc3, 0x35a2, 0x0dc4, 0x0e3b, 0x0de7, 0x0df8, 0x0dfb, 0x35b6, + 0x0dbe, 0x0dc6, 0x35c5, 0x35c6, 0x0dfc, 0x0dc0, 0x0e33, 0x0dc9, 0x0dfe, + 0x0dda, 0x0dcc, 0x0dbb, 0x0dfd, 0x0ddf, 0x0dcd, 0x0dc2, 0x0dc8, 0x0e32, + 0x0e2d, 0x0dd2, 0x0e31, 0x0dd3, 0x0e2e, 0x0dcf, 0x11ff, 0x1209, 0x11fc, + 0x1372, 0x13aa, 0x13ab, 0x13a7, 0x137b, 0x1376, 0x13a8, 0x13ac, 0x3683, + 0x5921, 0x15aa, 0x0a03, 0x15ac, 0x15ad, 0x15ab, 0x1650, 0x1658, 0x17dd, + 0x36f8, 0x17ae, 0x17a2, 0x17ab, 0x17e3, 0x17af, 0x17e0, 0x17e4, 0x36f6, + 0x17a7, 0x17aa, 0x17e2, 0x17e1, 0x17df, 0x17ad, 0x17e5, 0x17d1, 0x17ac, + 0x17d5, 0x17a3, 0x179f, 0x1979, 0x1976, 0x1a43, 0x1a3d, 0x1a47, 0x1a44, + 0x1a3f, 0x1a5b, 0x1b7f, 0x1c9a, 0x1c9c, 0x379b, 0x1d1e, 0x1e88, 0x1e6a, + 0x1e76, 0x1e72, 0x1e70, 0x1e7e, 0x1e6c, 0x1e6f, 0x1e75, 0x1e77, 0x1e78, + 0x1e8a, 0x1e79, 0x1e94, 0x2001, 0x2105, 0x20f1, 0x20ee, 0x20ef, 0x2104, + 0x5e3f, 0x20fa, 0x2107, 0x20f4, 0x20f5, 0x219c, 0x226d, 0x2269, 0x2266, + 0x2262, 0x2246, 0x388d, 0x2265, 0x225d, 0x225e, 0x225f, 0x238e, 0x2402, + 0x2406, 0x2404, 0x2403, 0x2462, 0x2527, 0x2521, 0x2520, 0x2524, 0x2529, + 0x2531, 0x2523, 0x2522, 0x26dc, 0x274d, 0x26e5, 0x26d3, 0x26ee, 0x26e6, + 0x3956, 0x2736, 0x2740, 0x283f, 0x273d, 0x2744, 0x395b, 0x275f, 0x2729, + 0x2749, 0x278a, 0x272a, 0x2787, 0x274c, 0x2731, 0x2748, 0x272b, 0x273b, + 0x2741, 0x26c9, 0x2734, 0x2753, 0x2735, 0x2747, 0x2738, 0x29d1, 0x29d2, + 0x2a51, 0x2a55, 0x2a52, 0x2a53, 0x2b8f, 0x2bf4, 0x2c47, 0x2c0d, 0x2c1c, + 0x2bfb, 0x2c19, 0x2bf7, 0x2bf9, 0x2bf5, 0x2be9, 0x2c0a, 0x2bee, 0x2c0b, + 0x2bfd, 0x2c06, 0x2c02, 0x2c16, 0x2c18, 0x2bf0, 0x2ed4, 0x2f66, 0x2f6a, + 0x2f75, 0x2f76, 0x2f80, 0x2f6d, 0x3a96, 0x2f69, 0x2f67, 0x2f68, 0x2f5d, + 0x30a4, 0x30fe, 0x30fd, 0x31ec, 0x31e9, 0x3221, 0x31eb, 0x31e7, 0x31f2, + 0x3220, 0x337a, 0x352d, 0x352e, 0x34ca, 0x352f, 0x34c8, 0x3b7e, 0x34cb, + 0x34c3, 0x3484, 0x34d2, 0x34c6, 0x3b81, 0x34cf, 0x34d5, 0x34d4, 0x34dd, + 0x352b, 0x35a3, 0x34db, 0x352c, 0x3513, 0x3c35, 0x38d1, 0x38cc, 0x38d5, + 0x38c9, 0x38cf, 0x38d2, 0x397b, 0x397c, 0x3a23, 0x3a1d, 0x3a1c, 0x3a1e, + 0x3a22, 0x3a24, 0x3a20, 0x3a18, 0x3a21, 0x3b88, 0x3b8a, 0x3b94, 0x3b8f, + 0x3b8e, 0x3b90, 0x3c9b, 0x3ba7, 0x3c64, 0x3d00, 0x3e18, 0x3e14, 0x3e1d, + 0x3e05, 0x3dff, 0x3e1b, 0x3e1a, 0x3e19, 0x3e03, 0x3e0e, 0x3e47, 0x3e04, + 0x3e5a, 0x3e07, 0x3e20, 0x426a, 0x4266, 0x427a, 0x4265, 0x42af, 0x45cd, + 0x45cf, 0x45d1, 0x45ce, 0x465f, 0x4677, 0x4674, 0x4688, 0x4675, 0x4689, + 0x4672, 0x47c6, 0x47ea, 0x47e0, 0x4807, 0x47e6, 0x47e5, 0x47dd, 0x47e3, + 0x47da, 0x49ae, 0x497e, 0x497d, 0x497f, 0x3ed3, 0x49d9, 0x4afa, 0x4afb, + 0x4b4d, 0x4b54, 0x4b51, 0x4b50, 0x4d98, 0x4d95, 0x4d9d, 0x4dc1, 0x4d9a, + 0x4d9b, 0x3f9f, 0x4d9c, 0x4dd7, 0x4da4, 0x4d96, 0x4da0, 0x4f31, 0x4fe9, + 0x506e, 0x519a, 0x51a5, 0x5194, 0x51a6, 0x5199, 0x518b, 0x5198, 0x5191, + 0x518c, 0x51a1, 0x51a3, 0x51c6, 0x536f, 0x536d, 0x536a, 0x536c, 0x5371, + 0x536e, 0x53df, 0x54ac, 0x54aa, 0x40b1, 0x54b5, 0x54ad, 0x54b2, 0x54b3, + 0x54ab, 0x54b6, 0x54c7, 0x54c6, 0x566c, 0x5670, 0x57b3, 0x414b, 0x598c, + 0x5981, 0x5983, 0x597d, 0x5985, 0x5990, 0x59a2, 0x598d, 0x598f, 0x597e, + 0x598a, 0x597f, 0x5976, 0x5987, 0x5978, 0x5a80, 0x5a82, 0x5a81, 0x5a83, + 0x5b5a, 0x5b34, 0x5b2c, 0x5b2a, 0x5b40, 0x5b2d, 0x5b33, 0x5b2b, 0x5b4b, + 0x7b3f, 0x5b3c, 0x5e5a, 0x5e77, 0x5e60, 0x5ffa, 0x5ff9, 0x5ffc, 0x42d6, + 0x5ff5, 0x5fe8, 0x6009, 0x5fe7, 0x5fe6, 0x5fe9, 0x6232, 0x622c, 0x62bd, + 0x62bc, 0x637a, 0x637e, 0x6379, 0x4389, 0x6423, 0x6430, 0x6428, 0x64d4, + 0x6ace, 0x64f1, 0x64f0, 0x6560, 0x6565, 0x66a8, 0x670a, 0x671b, 0x6712, + 0x6707, 0x674f, 0x670e, 0x6752, 0x6716, 0x4400, 0x6753, 0x6754, 0xf984, + 0x6756, 0x696d, 0x6972, 0x6a2f, 0x6c2a, 0x44dc, 0x6c63, 0x6c84, 0x6caf, + 0x6c45, 0x6c70, 0x6c56, 0x6c16, 0x6c3d, 0x6c38, 0x6c6f, 0x6c77, 0x6c2e, + 0x6c31, 0x6c4c, 0x6c5f, 0x6c75, 0x6c39, 0x6c3a, 0x6c2c, 0x6c2d, 0x6c3f, + 0x6c2f, 0x6c30, 0x6c3e, 0x83d0, 0x4590, 0x71b2, 0x72b7, 0x728f, 0x45b1, + 0x7296, 0x729e, 0x7297, 0x7295, 0x72a5, 0x7298, 0x86e7, 0x72a3, 0x729a, + 0x72ad, 0x72a6, 0x72b6, 0x7299, 0x72af, 0x72ac, 0x45aa, 0x729f, 0x7294, + 0x75eb, 0x766f, 0x766d, 0x767e, 0x766c, 0x7661, 0x7663, 0x766b, 0x765e, + 0x763e, 0x7664, 0x76ad, 0x467d, 0x7820, 0x78d1, 0x78d5, 0x79ae, 0x79af, + 0x799f, 0x79a8, 0x79ca, 0x7be1, 0x7c39, 0x7c38, 0x7c3b, 0x7cad, 0x7cb5, + 0x7caf, 0x7cb1, 0x7cae, 0x7cb4, 0x7cb0, 0x7d4b, 0x7d51, 0x7d4c, 0x4769, + 0x7d60, 0x7ebe, 0x7eb9, 0x7eb7, 0x7eb6, 0x47a1, 0x7ebd, 0x7eb8, 0x7ec1, + 0x7ff7, 0x7ff3, 0x7ff4, 0x7ffb, 0x7ffd, 0x7ff5, 0x47e7, 0x7ffa, 0x8014, + 0x47ec, 0x7ff2, 0x7ffc, 0x8000, 0x47df, 0x822b, 0x8229, 0x822e, 0x4833, + 0x82d7, 0x82db, 0x82d9, 0x82d8, 0x82e6, 0x82d6, 0x82d1, 0x82e7, 0x82d0, + 0x82dc, 0x84ed, 0x851a, 0x8519, 0x8516, 0x84ec, 0x84ef, 0x84ee, 0x84f4, + 0x852f, 0x8730, 0x8719, 0x8718, 0x8711, 0x8716, 0x8712, 0x8710, 0x8714, + 0x880c, 0x880d, 0x8910, 0x8929, 0x8928, 0x8c65, 0x8c66, 0x8cde, 0x8cdf, + 0x8ce0, 0x8cd9, 0x8cdb, 0x8cd8, 0x8ce3, 0x8cd7, 0x8ea6, 0x8ea7, 0x8ebf, + 0x8ea8, 0x8e9f, 0x8ea1, 0x8ea2, 0x8ead, 0x8ea3, 0x8ea0, 0x9083, 0x9085, + 0x9082, 0x9084, 0x91ee, 0x925d, 0x9392, 0x9455, 0x9453, 0xf9fc, 0x9451, + 0x9452, 0x9450, 0x959d, 0x9687, 0x9697, 0x969b, 0x969d, 0x9869, 0x9a11, + 0x4bee, 0x9c7a, 0x4c32, 0x3244, 0x00c6, 0x0340, 0x032e, 0x0368, 0x032d, + 0x0334, 0x0332, 0x0369, 0x0331, 0x036a, 0x033e, 0x036f, 0x0375, 0x04f6, + 0x0520, 0x0528, 0x0567, 0x05fb, 0x05fe, 0x05fc, 0x05fd, 0x05ff, 0x05fa, + 0x07ac, 0x07af, 0x07b1, 0x34fc, 0x07bf, 0x07be, 0x07a7, 0x07aa, 0x0894, + 0x0893, 0x0899, 0x352a, 0x08fa, 0x0956, 0x0a22, 0x0a91, 0x0a92, 0x0b08, + 0x0b06, 0x0dd6, 0x0e37, 0x0e4b, 0x0ece, 0x0ed0, 0x0e39, 0x0e64, 0x0ecf, + 0x0e46, 0x0e66, 0x0e56, 0x0e43, 0x0e4a, 0x0e58, 0x0e65, 0x0e5a, 0x0e5b, + 0x0e55, 0x0e50, 0x0e4c, 0x0ecd, 0x0e51, 0x0e47, 0x35d3, 0x0e53, 0x0e62, + 0x0ecc, 0x35d7, 0x0e7f, 0x0e4d, 0x120a, 0x120c, 0x120f, 0x13bb, 0x13b9, + 0x13eb, 0x13ae, 0x13c1, 0x13ea, 0x13be, 0x13bf, 0x13ba, 0x13b7, 0x13b3, + 0x13e9, 0x156e, 0x15af, 0x15b3, 0x15b2, 0x1668, 0x1669, 0x166a, 0x17de, + 0x17eb, 0x1811, 0x17ed, 0x17e9, 0x17f7, 0x17f4, 0x17ea, 0x1812, 0x17e8, + 0x1813, 0x198e, 0x1986, 0x1a63, 0x1a65, 0x1b99, 0x1cc2, 0x1cae, 0x1cb0, + 0x1cad, 0x1eb4, 0x1ed1, 0x1ead, 0x37f3, 0x1ebd, 0x1eb7, 0x1eab, 0x1eaf, + 0x1ec1, 0x1eb5, 0x210f, 0x210e, 0x211c, 0x2113, 0x210a, 0x211e, 0x2114, + 0x211a, 0x21cb, 0x2287, 0x2293, 0x3891, 0x2284, 0x2285, 0x2292, 0x2280, + 0x232b, 0x2363, 0x240a, 0x38c0, 0x2466, 0x2534, 0x2533, 0x254d, 0x2789, + 0x2757, 0x6117, 0x274a, 0x3963, 0x2739, 0x273f, 0x2790, 0x278f, 0x27b2, + 0x279f, 0x2795, 0x27a1, 0x279c, 0x278e, 0x27a0, 0x27ae, 0x2796, 0x27ca, + 0x27ac, 0x3970, 0x27a6, 0x2797, 0x2793, 0x03b6, 0x29d6, 0x29e0, 0x29d8, + 0x2a56, 0x2c6e, 0x2c7e, 0x2c74, 0x2c77, 0x2c80, 0x2c7a, 0x2c6b, 0x2c5f, + 0x2c76, 0x2cb0, 0x2c63, 0x2f92, 0x2f82, 0x2f9d, 0x2f94, 0x2f83, 0x2f8b, + 0x2f84, 0x3057, 0x3084, 0x30b5, 0x3109, 0x31e6, 0x3b02, 0x3225, 0x3251, + 0x333e, 0xf8da, 0x3385, 0x353f, 0x3542, 0x3538, 0x353a, 0x354e, 0x3545, + 0x3539, 0x3537, 0x3544, 0xf8e7, 0x35a4, 0x353d, 0x3541, 0x38df, 0x38de, + 0x38ca, 0x38e9, 0x38e2, 0x38e0, 0x3989, 0x3987, 0x3a32, 0x3a33, 0x3aac, + 0x3af9, 0x3b0d, 0x3bb9, 0x3e5e, 0x3e6a, 0x3d35, 0x3e81, 0x3e69, 0x3eac, + 0x3e80, 0x3e75, 0x3e71, 0x3e76, 0x3e6f, 0x42b6, 0x4303, 0x42bf, 0x4301, + 0x42b2, 0x42c4, 0x45db, 0x45dc, 0x45d8, 0x9672, 0x46b5, 0x46a8, 0x468f, + 0x469e, 0x468e, 0x47de, 0x47e2, 0x4820, 0x481d, 0x481a, 0x4819, 0x482b, + 0x4818, 0x4810, 0x480e, 0x4824, 0x481f, 0x4813, 0x4835, 0x4983, 0x3ee0, + 0x49d7, 0x4b02, 0x4b03, 0x4b5c, 0x4b5f, 0x4bc7, 0x4c9a, 0x4c97, 0x4ca3, + 0x4df7, 0x4dc6, 0x4dcc, 0x4dd6, 0x4dcd, 0x4df9, 0x4dd9, 0x4dd8, 0x3f9a, + 0x4dd1, 0x4dce, 0x4dd5, 0x3fa3, 0x4dd4, 0x4df8, 0x4f7a, 0x4f79, 0x4f7f, + 0x4ff3, 0x4ff5, 0x4ff6, 0x4ff4, 0x4ff7, 0x4005, 0x5079, 0x519c, 0x51df, + 0x51f5, 0x51ff, 0x51d1, 0x51da, 0x51cf, 0x51cd, 0x51de, 0x51d8, 0x3aad, + 0x51e0, 0x51fe, 0x519e, 0x5375, 0x5373, 0x5372, 0x53d8, 0x54d0, 0x54d6, + 0x54d7, 0x54ca, 0x54cd, 0x568a, 0x5689, 0x568b, 0x57d3, 0x57da, 0x57ce, + 0x57d2, 0x415e, 0x57d4, 0x57d7, 0x57d5, 0x57fb, 0x57cd, 0x57fa, 0x57d6, + 0x41a6, 0x599b, 0x599e, 0x599d, 0x59a4, 0x599f, 0x59a5, 0x59a8, 0x5a8f, + 0x5a8c, 0x5a95, 0x5b60, 0x5b55, 0x5b5c, 0x5b6f, 0x5b51, 0x5b61, 0x5ba7, + 0x5b5e, 0x5b62, 0x5b54, 0x5b6e, 0x5b52, 0x5b58, 0x5b6d, 0x5b5f, 0x5b6c, + 0x5b50, 0x5b5d, 0x5b8e, 0x5e72, 0x5e78, 0x5e75, 0x5e76, 0x5e7c, 0x5e7e, + 0x5e7d, 0x6015, 0x6014, 0x601d, 0x601c, 0x6023, 0x6057, 0x62c8, 0x435d, + 0x62c9, 0x62c5, 0x6387, 0x638a, 0x6394, 0x6439, 0x6440, 0x643e, 0x6438, + 0x64d6, 0x43b8, 0x6577, 0x6578, 0x657d, 0x66dd, 0x675e, 0x6777, 0x67d4, + 0x6766, 0x675f, 0x6773, 0x6772, 0x6797, 0x675a, 0x6796, 0x675d, 0x6765, + 0x6770, 0x6775, 0x6774, 0x675c, 0x6760, 0x4434, 0x676d, 0x6941, 0x6a3c, + 0x6a3e, 0x446f, 0x6a49, 0x6be4, 0x6d0c, 0x6d15, 0x6d0e, 0x6cd4, 0x6cc7, + 0x6d14, 0x6cdb, 0x6d5f, 0x6ced, 0x6d09, 0x6ccf, 0x6cff, 0x6d1a, 0x6cf5, + 0x6cee, 0x6ce5, 0x6d0d, 0x6cdf, 0x6cec, 0x6cd7, 0x6d2c, 0x6ccd, 0x6ce3, + 0x6d00, 0x6ceb, 0x6cfd, 0x6d0f, 0x6d2d, 0x6d50, 0x6cfe, 0x6cc4, 0x6ce1, + 0x6cf9, 0x71bb, 0x71bc, 0x4594, 0x4593, 0x71ba, 0x72d0, 0x72d6, 0x72ce, + 0x72e1, 0x72d5, 0x72cf, 0x72d3, 0x8714, 0x72d4, 0x75b5, 0x7690, 0x76a1, + 0x7681, 0x7685, 0x766e, 0x7688, 0x7682, 0x7686, 0x768f, 0x7689, 0x7680, + 0x7684, 0x88d1, 0x7829, 0x782b, 0x782a, 0x7830, 0x78e2, 0x78e3, 0x78e1, + 0x79d5, 0x79c4, 0x79c9, 0x79e0, 0x79df, 0x79cb, 0x79dd, 0x79e8, 0x79d4, + 0x7a1c, 0x7bb5, 0x7bb6, 0x7be5, 0x7c45, 0x7c49, 0x7c40, 0x7c46, 0x7c44, + 0x7c4a, 0x7cc9, 0x7cc4, 0x7cc2, 0x7d68, 0x8ccb, 0x7d82, 0x7d6b, 0x7d67, + 0x7d6c, 0x7d6d, 0x7d71, 0x4792, 0x7ed7, 0x7ed2, 0x7ed9, 0x47aa, 0x7ebc, + 0x7edd, 0x7ed6, 0x47a7, 0x7ed8, 0x8020, 0x8016, 0x8018, 0x8015, 0x8019, + 0x8027, 0x8050, 0x801d, 0x802c, 0x801c, 0x8029, 0x802b, 0x8024, 0x47ef, + 0x8028, 0x8239, 0x82f2, 0x82f0, 0x8eed, 0x82ed, 0x82ef, 0x82ea, 0x8301, + 0x84bc, 0x855c, 0x855b, 0x855a, 0x8526, 0x8743, 0x8733, 0x873a, 0x8737, + 0x8736, 0x873c, 0x8734, 0x874a, 0x873b, 0x8735, 0x873d, 0x8740, 0x873e, + 0x8717, 0x8826, 0x8824, 0x8810, 0x8836, 0x8825, 0x4922, 0x8966, 0x8c7f, + 0x8c7a, 0x8cfb, 0x8cfd, 0x8cfc, 0x8cfa, 0x8ed6, 0x8ed2, 0x8ec8, 0x8ec2, + 0x8ec7, 0x8ecd, 0x8ec1, 0x8ec6, 0x8ecc, 0x8fa1, 0x9095, 0x9094, 0x9097, + 0x9096, 0x9093, 0x90a1, 0x9209, 0x9208, 0x9267, 0x9265, 0x9262, 0x9261, + 0x9397, 0x9401, 0x9419, 0x9418, 0x945c, 0x9467, 0x946c, 0x4ab5, 0xf9fd, + 0x9466, 0x9461, 0x946e, 0x945d, 0x945a, 0x95a2, 0x95a9, 0x95a5, 0x95a6, + 0x95b2, 0x95a3, 0x96ac, 0x96aa, 0x96af, 0x96ab, 0x96b1, 0x96c6, 0x96ad, + 0x96b9, 0x9870, 0x4b75, 0x9c0c, 0x9c81, 0x9c83, 0x9c7e, 0x9d51, 0x9f99, + 0x9f94, 0x9f95, 0xa2fe, 0xa418, 0x0105, 0x0372, 0x3482, 0x0399, 0x04ad, + 0x0606, 0x07c2, 0x07cb, 0x07d5, 0x07d2, 0x07cc, 0x07d7, 0x07c5, 0x07ca, + 0x52ec, 0x08a2, 0x08a3, 0x08a1, 0x52e8, 0x08a6, 0x08a4, 0x08ff, 0x0900, + 0x3535, 0x0a06, 0x0a25, 0x0a9f, 0x0b7f, 0x0eea, 0x0eeb, 0x0ede, 0x0f18, + 0x0ee0, 0x0ee8, 0x0edf, 0x0ef1, 0x0eec, 0x0f1a, 0x0ee6, 0x0ee1, 0x0f5d, + 0x0077, 0x0f1e, 0x35f0, 0x0f80, 0x1217, 0x141d, 0x13f7, 0x13ef, 0x13ee, + 0x13ed, 0x13f5, 0x141e, 0x15bd, 0x57ff, 0x15be, 0x166d, 0x1676, 0x184c, + 0x1819, 0x1848, 0x181e, 0x184a, 0x1849, 0x1826, 0x1995, 0x1a85, 0x1a7e, + 0x1a97, 0x1a7d, 0x1b42, 0x1b9e, 0x1c0c, 0x1c0b, 0x1c0e, 0x1ccf, 0x1ed8, + 0x1ee0, 0x1ee8, 0x1ee9, 0x1ee2, 0x1ee1, 0x1eda, 0x1ee3, 0x1ed9, 0x1ef0, + 0x1ee7, 0x1ee4, 0x2123, 0x2131, 0x2133, 0x210c, 0x69e0, 0x2126, 0x2124, + 0x2132, 0x2127, 0x2121, 0x2130, 0x21a2, 0x21cc, 0x2296, 0xf88f, 0x2298, + 0x229c, 0x229b, 0x236b, 0x2412, 0x2414, 0x255a, 0x2554, 0x2551, 0x255e, + 0x2558, 0x38f0, 0x2559, 0x279a, 0x27f2, 0x27ad, 0x2820, 0x27f1, 0x27f0, + 0x27f3, 0x27f4, 0x27e9, 0x27fe, 0x282e, 0x27e8, 0x27e7, 0x27ff, 0x27f5, + 0x29e5, 0x29e7, 0x29e6, 0x29e9, 0x2a58, 0x2c6c, 0x2cd9, 0x3a3e, 0x2ccb, + 0x3a39, 0x2cbe, 0x2cb5, 0x2cd1, 0x2cc2, 0x2cb6, 0x2cd3, 0xf8c2, 0x2eda, + 0x3aa2, 0x2fae, 0x3aa1, 0x2fac, 0x2fa9, 0x2fba, 0x2fa7, 0x2fb3, 0x2fbd, + 0x2fb1, 0x310e, 0x3111, 0x310f, 0x3252, 0x326a, 0x3254, 0x3255, 0x3253, + 0x3257, 0xf8d0, 0x325b, 0x3258, 0x3259, 0x3b3b, 0x35b8, 0x35b5, 0x35bf, + 0x35c1, 0x35bb, 0x3bb7, 0x35c3, 0x35ad, 0x35a8, 0x35ae, 0x35aa, 0x35d0, + 0x35b1, 0x35bc, 0x35b7, 0x35b0, 0x35fa, 0x35fb, 0x35b9, 0x3907, 0x38fc, + 0x38ff, 0x38f2, 0x38f8, 0x38f4, 0x3c57, 0x3c70, 0x3aae, 0x3b0f, 0x3b10, + 0x9ac1, 0x3bc7, 0x3bc6, 0x3bce, 0x3ca7, 0x3bdc, 0x3ed5, 0x3ed3, 0x3f20, + 0x3ee2, 0x3ef1, 0x3edb, 0x3eea, 0x3eeb, 0x3ee1, 0x3eff, 0x3ed6, 0x3ee0, + 0x3ed7, 0x3ee5, 0x3d54, 0x431b, 0x4310, 0x430f, 0x430e, 0x4339, 0x430a, + 0x4314, 0x430c, 0x4523, 0x455a, 0x45e2, 0x4693, 0x46b0, 0x46ab, 0x46bd, + 0x46b1, 0x468d, 0x46ad, 0x46aa, 0x46ac, 0x46bc, 0x46c9, 0x4847, 0x4862, + 0x4840, 0x4844, 0x483f, 0x4843, 0x483d, 0x4860, 0x485f, 0x483a, 0x4842, + 0x485e, 0x485d, 0x49bc, 0x49e0, 0x49ee, 0x49eb, 0x4a0d, 0x4b09, 0x4b0c, + 0x4b69, 0x4b74, 0x4b67, 0x3f31, 0x7527, 0x4cad, 0x4dff, 0x4e16, 0x4e08, + 0x4e09, 0x4e00, 0x4dfc, 0x4e13, 0x4e14, 0x4e0a, 0x983e, 0x4e29, 0x4e17, + 0x4e3b, 0x4dfb, 0x3fbf, 0x4e0e, 0x3fe4, 0x5008, 0x521b, 0x521a, 0x5219, + 0x5202, 0x404a, 0x5217, 0x5207, 0x5213, 0x5209, 0x520a, 0x5212, 0x52aa, + 0x5238, 0x537b, 0x537c, 0x537a, 0x53ea, 0x53eb, 0x53ef, 0x53f0, 0x5509, + 0x5502, 0x5501, 0x552b, 0x5507, 0x40cf, 0x5528, 0x54fb, 0x552a, 0x54fe, + 0x5504, 0x5529, 0x550a, 0x798c, 0x56c2, 0x7991, 0x56a6, 0x4114, 0x2fc6, + 0x1c07, 0x580a, 0x57fd, 0x5806, 0x580d, 0x5809, 0x580b, 0x5800, 0x5805, + 0x583d, 0x59d5, 0x59bf, 0x59ba, 0x59c7, 0x5a98, 0x5a9a, 0x420d, 0x5ba4, + 0x5b9c, 0x5b9d, 0x5ba2, 0x5b96, 0x5b95, 0x5ba5, 0x5baa, 0x5bad, 0x5b9a, + 0x5ba3, 0x5b97, 0x5b90, 0x5baf, 0x5b8d, 0x4201, 0x5ba8, 0x5bee, 0x5ea3, + 0x5e99, 0x5ea1, 0x5e9c, 0x5ea4, 0x5ecb, 0x6056, 0x6048, 0x6059, 0x604a, + 0x605c, 0x42f1, 0x604f, 0x604d, 0x605d, 0x623a, 0x62e3, 0x62e1, 0x62de, + 0x6397, 0x639a, 0x6448, 0x644a, 0x644c, 0x644e, 0x644f, 0x644b, 0x644d, + 0x6447, 0x6451, 0x64da, 0x64f9, 0x64fc, 0x64fb, 0x64fd, 0x64f8, 0x64fa, + 0x658a, 0x658e, 0x6588, 0x6589, 0x658d, 0x6590, 0xf97e, 0x671c, 0x67ab, + 0x67a4, 0x67a8, 0x67ad, 0x679f, 0x679a, 0x67b0, 0x67a5, 0x67d5, 0x67a2, + 0x67b2, 0x679d, 0x67a1, 0x6915, 0x6942, 0x6973, 0x6984, 0x69dd, 0x6a5c, + 0x6a4c, 0x4476, 0x6a4b, 0x6c67, 0x6da8, 0x6d7f, 0x6d8d, 0x6d8b, 0x6df7, + 0x6da9, 0x6df4, 0x6d9a, 0x6d8c, 0x6d95, 0x6d7e, 0x6d77, 0x450a, 0x4503, + 0x6d71, 0x6dfd, 0x6d88, 0x6d99, 0x6d6d, 0x6dd4, 0x6d91, 0x6d7d, 0x6d63, + 0x6d75, 0x6df9, 0x6d8e, 0x6d74, 0x6dd9, 0x6d66, 0x6dfa, 0x6df5, 0x8660, + 0x71c1, 0x71c9, 0x7303, 0x732c, 0x7334, 0x7317, 0x7309, 0x7304, 0x7306, + 0x731a, 0x730e, 0x7327, 0x7305, 0x7307, 0x7319, 0x7314, 0x730c, 0x731d, + 0x7322, 0x7323, 0x75bb, 0x75bc, 0x75ba, 0x76a9, 0x76b5, 0x76ac, 0x76aa, + 0x76af, 0x76b7, 0x4635, 0x4636, 0x783d, 0x7845, 0x7848, 0x783c, 0x783e, + 0x78ec, 0x78ed, 0x78e9, 0x7a0a, 0x7a0b, 0x79f8, 0x7a04, 0x79f6, 0x79f9, + 0x7c53, 0x7c52, 0x7c60, 0x7c63, 0x7cce, 0x7ccd, 0x7cd0, 0x7ccc, 0x7d87, + 0x7d8d, 0x7d9d, 0x4773, 0x7e63, 0x7ef4, 0x7ef1, 0x7eff, 0x7ef5, 0x7efc, + 0x7ef2, 0x7ef6, 0x47b1, 0x7efa, 0x47af, 0x802e, 0x8045, 0x8043, 0x8051, + 0x804c, 0x8073, 0x8047, 0x804b, 0x804f, 0x47f4, 0x8044, 0x804d, 0x804e, + 0x804a, 0x8041, 0x8052, 0x809f, 0x8054, 0x8059, 0x80a2, 0x824b, 0x8248, + 0x830d, 0x831f, 0x8308, 0x830e, 0x831d, 0x8304, 0x8418, 0x841b, 0x8566, + 0x8562, 0x8583, 0x8567, 0x8762, 0x874f, 0x874e, 0x8767, 0x8753, 0x874d, + 0x874c, 0x8768, 0x8751, 0x48dc, 0x8758, 0x875b, 0x8750, 0x876a, 0x8839, + 0x8838, 0x8982, 0x8984, 0x8986, 0x8c80, 0x8c86, 0x8d25, 0x8d11, 0x4999, + 0x8d0e, 0x8d15, 0x8d0f, 0x8d18, 0x8d0d, 0x8d13, 0x8d16, 0x8d19, 0x8f08, + 0x8ef7, 0x8efb, 0x8efc, 0x8fb4, 0x8fbe, 0x8fc1, 0x90a6, 0x90a5, 0x90a2, + 0x90a4, 0x9212, 0x920e, 0x927a, 0x9278, 0x927d, 0x927e, 0x9281, 0x9283, + 0x9280, 0x9282, 0x939b, 0x9399, 0x939c, 0x939a, 0x93a1, 0x941a, 0x941c, + 0x948a, 0x9479, 0x9473, 0x9475, 0x947c, 0x9478, 0x9460, 0x9483, 0x9470, + 0x4ab6, 0x4abd, 0x9487, 0x9484, 0x947b, 0x947e, 0x9474, 0x95b9, 0x95b8, + 0x95b7, 0x95b5, 0x96cc, 0x96ce, 0x96d1, 0x9904, 0x96cb, 0x999b, 0x987e, + 0x987a, 0x9877, 0x988c, 0x98e1, 0x9a20, 0x9a1e, 0x9ac2, 0x9b0f, 0x9b00, + 0x4bf4, 0x9b10, 0x9c0d, 0x9c0e, 0x9c8e, 0x9c8d, 0x9c8a, 0x9c8b, 0x9c8c, + 0x9c8f, 0x9d57, 0x4c35, 0x9d55, 0x9d5b, 0x9fac, 0x9fa7, 0x9fa0, 0x9f9e, + 0x4caa, 0xa28d, 0x4d1f, 0xa393, 0xa394, 0xa392, 0x0181, 0x03d6, 0x03c3, + 0x03e4, 0x03e2, 0x0409, 0x03bf, 0x03c8, 0x03c7, 0x04b5, 0x04b2, 0x060c, + 0x060b, 0x060a, 0x0605, 0x07d3, 0x07e6, 0x07e9, 0x07f0, 0x07ea, 0x07e7, + 0x08b1, 0x08b3, 0x08b4, 0x08b0, 0x095c, 0x095d, 0x095e, 0x09c0, 0x0aaf, + 0x3550, 0x0b86, 0x0b83, 0x0b84, 0x0f5c, 0x0f70, 0x0f8c, 0x0f7b, 0x0f66, + 0x0f79, 0x0f63, 0x0fc5, 0x0f6b, 0x0f6d, 0x0f72, 0x0f69, 0x0f75, 0x0f89, + 0x0fc6, 0x0fa5, 0x03e7, 0x0f6a, 0x0f97, 0x145a, 0x145c, 0x1459, 0x1424, + 0x1425, 0x1430, 0x1458, 0x1431, 0x1576, 0x15c1, 0x1685, 0x167d, 0x1865, + 0x1887, 0x1852, 0x1854, 0x188a, 0x1850, 0x1886, 0x184f, 0x1868, 0x199d, + 0x1aa0, 0x1aba, 0x1abd, 0x1ab8, 0x1ba6, 0x377b, 0x1cde, 0x1cd8, 0x1cd1, + 0x1f13, 0x3809, 0x1f0e, 0x1f1b, 0x1f3a, 0x3807, 0x1f1c, 0x1f12, 0x1f16, + 0x1f1a, 0x1448, 0x214b, 0x2137, 0x2136, 0x2138, 0x213a, 0x2149, 0x213c, + 0x214a, 0x22b1, 0x22c2, 0x22b5, 0x22c4, 0x22b6, 0x241e, 0x241f, 0x24af, + 0x256b, 0x256f, 0x2792, 0x27e4, 0x282c, 0x27ef, 0x6184, 0x284f, 0x2852, + 0x2850, 0x283a, 0x2837, 0x2847, 0x2864, 0x2840, 0x283c, 0x2845, 0x2841, + 0x29f3, 0x39bb, 0x2cc1, 0x2cb4, 0x3a4b, 0x2d2a, 0x2d22, 0x2d29, 0x3a4d, + 0x2d3e, 0x2d3c, 0x2d30, 0x2fc7, 0x2fd5, 0x2fd6, 0x2fd3, 0x2fce, 0x2fc8, + 0x305c, 0x305f, 0x3062, 0x3ac2, 0x30bd, 0x30bf, 0x325c, 0x32b6, 0x3b1a, + 0x329d, 0x327f, 0x3b12, 0x3294, 0x3281, 0x3347, 0x3346, 0x3b3c, 0x3394, + 0x3675, 0x361a, 0x362a, 0x3632, 0x3617, 0x3623, 0x3674, 0x3bc3, 0x3676, + 0x362e, 0x3625, 0x3620, 0x3671, 0x3616, 0x3670, 0x362c, 0x362f, 0x361f, + 0x3664, 0x3bc0, 0x3908, 0x3914, 0x390a, 0x390b, 0x3a4f, 0x3a59, 0x3a54, + 0x3a51, 0x3ab6, 0x3bec, 0x3bed, 0x3bea, 0x3eee, 0x3f5a, 0x3f73, 0x3f65, + 0x3f61, 0x3f55, 0x3f6b, 0x3f64, 0x3f5b, 0x3f4c, 0x3f6f, 0x3f84, 0x3f70, + 0x435d, 0x4357, 0x4366, 0x4353, 0x4398, 0x4397, 0x4528, 0x45eb, 0x45ea, + 0x45e8, 0x45ec, 0x45ef, 0x46d1, 0x46ca, 0x729f, 0x46cf, 0x46cd, 0x46ce, + 0x4870, 0x4867, 0x4873, 0x486d, 0x4876, 0x4879, 0x486a, 0x488b, 0x4872, + 0x4871, 0x486e, 0x487a, 0x4a16, 0x4a39, 0x4a3b, 0x4b10, 0x4b96, 0x4b7b, + 0x4b7c, 0x4b7d, 0x4cbe, 0x4e5c, 0x4e38, 0x4e39, 0x4e2e, 0x4e34, 0x4e32, + 0x4e5b, 0x4e33, 0x4e3c, 0x3fe5, 0x500e, 0x500f, 0x5010, 0x5087, 0x525b, + 0x5253, 0x405f, 0x525c, 0x523f, 0x5259, 0x524a, 0x5244, 0x524c, 0x5240, + 0x525f, 0x525e, 0x524e, 0x5254, 0x5243, 0x5287, 0x5382, 0x5385, 0x5531, + 0x5547, 0x552e, 0x552f, 0x5548, 0x5534, 0x4118, 0x059f, 0x5832, 0x5836, + 0x5833, 0x5831, 0x5840, 0x5841, 0x59dd, 0x59d2, 0x59d9, 0x41ad, 0x59df, + 0x59db, 0x59d8, 0x59d3, 0x59de, 0x59e0, 0x59d4, 0x59d7, 0x59da, 0x5aa7, + 0x5bfe, 0x5bdd, 0x5c40, 0x5be2, 0x421e, 0x5bd6, 0x5bde, 0x5bef, 0x4227, + 0x5beb, 0x5bea, 0x5be4, 0x5bd1, 0x4218, 0x5bec, 0x5bfa, 0x5bd9, 0x5bf3, + 0x5be1, 0x5bdc, 0x5be5, 0x5bdf, 0x5bd4, 0x4220, 0x5c05, 0x5ed6, 0x5ed5, + 0x5ed0, 0x5ec8, 0x5ec4, 0x5ec9, 0x5ecd, 0x5ed2, 0x5ecc, 0x5eca, 0x60a0, + 0x6092, 0x42f4, 0x4302, 0x608b, 0x60a1, 0x6095, 0x6088, 0x6086, 0x608d, + 0x6085, 0x6091, 0x6089, 0x60a2, 0x62f0, 0x62f3, 0x62f4, 0x62ef, 0x6306, + 0x63a2, 0x645e, 0x6463, 0x6460, 0x645b, 0x647b, 0x6458, 0x6459, 0x645d, + 0x6505, 0x6506, 0x6502, 0x6503, 0x6504, 0x65a2, 0x65a7, 0x65a6, 0x65a4, + 0x65ac, 0x65a9, 0x67e7, 0x6801, 0x67df, 0x67d9, 0x67e3, 0x680f, 0x691a, + 0x6945, 0x6948, 0x697b, 0x6985, 0x6986, 0x69fe, 0x69ff, 0x6a64, 0x6a71, + 0x6a72, 0x6a61, 0x6a62, 0x6a6c, 0x6a60, 0x6a5d, 0x6a63, 0x6a67, 0x6e01, + 0x6e2a, 0x6e30, 0x6e06, 0x6e7d, 0x6e22, 0x6eb9, 0x6e0a, 0x6e10, 0x6d8f, + 0x6e80, 0x6e13, 0x6e2e, 0x6e18, 0x6e17, 0x6e1a, 0x6e14, 0x6e47, 0x6e63, + 0x6e38, 0x4524, 0x6e7f, 0x6e21, 0x6e37, 0x6e31, 0x6e1b, 0x6ea5, 0x6f6c, + 0x71d3, 0x7388, 0x736e, 0x735c, 0x7374, 0x7354, 0x7383, 0x8770, 0x7365, + 0x7360, 0x7370, 0x736f, 0x736d, 0x7372, 0x736c, 0x7376, 0x7375, 0x7359, + 0x73c7, 0x75c1, 0x75f9, 0x76e3, 0x76e7, 0x76d6, 0x76cf, 0x76da, 0x76e9, + 0x76d2, 0x7855, 0x784f, 0x784d, 0x7851, 0x7856, 0x78f9, 0x78f8, 0x7906, + 0x7903, 0x7909, 0x78f7, 0x78f5, 0x7a47, 0x7a45, 0x7a3e, 0x7a46, 0x7a29, + 0x7a34, 0x7a3f, 0x7a44, 0x7a35, 0x7a5a, 0x7a2a, 0x7a33, 0x7a37, 0x7a43, + 0x7a39, 0x7a30, 0x7a5d, 0x7a32, 0x7a27, 0x7bbd, 0x7bba, 0x7bbc, 0x7bf1, + 0x7bf0, 0x7c61, 0x7c5c, 0x7c58, 0x7c5d, 0x7cda, 0x7cd9, 0x7cdd, 0x7cdc, + 0x7cde, 0x477d, 0x7da0, 0x7da2, 0x7f0f, 0x7f13, 0x7f12, 0x7f11, 0x7f14, + 0x7f19, 0x7f0e, 0x7f17, 0x7f21, 0x7f20, 0x7f16, 0x8078, 0x8e37, 0x8087, + 0x8079, 0x8080, 0x8077, 0x8081, 0x8046, 0x807a, 0x809c, 0x8083, 0x8084, + 0x80ad, 0x809d, 0x809e, 0x8255, 0x8336, 0x832b, 0x8327, 0x8346, 0x832c, + 0x8345, 0x8333, 0x832d, 0x8334, 0x8322, 0x4864, 0x841f, 0x85b3, 0x858c, + 0x858f, 0x85af, 0x85ad, 0x858e, 0x85ac, 0x85b0, 0x85b1, 0x85ae, 0x8599, + 0x86eb, 0x8774, 0x8775, 0x878e, 0x876d, 0x8770, 0x878c, 0x884f, 0x8851, + 0x8858, 0x884c, 0x884e, 0x8915, 0x89be, 0x89db, 0x89b3, 0x89ae, 0x8c87, + 0x8c8a, 0x8c88, 0x8c8b, 0x8c8c, 0x8d44, 0x8d2d, 0x8d2a, 0x8d31, 0x8d2c, + 0x8d45, 0x8d30, 0x8d29, 0x8d46, 0x8ef4, 0x8f14, 0x8f10, 0x8f0f, 0x8f12, + 0x8f0b, 0x8f0c, 0x8f0a, 0x8f13, 0x8f0e, 0x8fd9, 0x8fd0, 0x9703, 0x90c1, + 0x90bf, 0x90bd, 0x90bc, 0x90ba, 0x90bb, 0x90d1, 0x90be, 0x90d0, 0x90b9, + 0x921a, 0x921c, 0x921b, 0x9291, 0x9296, 0x929f, 0x929c, 0x929a, 0x929d, + 0x93ad, 0x93a5, 0x93ae, 0x9403, 0x9426, 0x9420, 0x9423, 0x9424, 0x9421, + 0x9428, 0x9425, 0x941e, 0x9494, 0x9493, 0x948f, 0x949a, 0x94ad, 0x4ac2, + 0x95ca, 0x95c5, 0x96bb, 0x96e1, 0x96ea, 0x96e4, 0x96ed, 0x96e6, 0x96e0, + 0x96e8, 0x96e5, 0x981a, 0x9894, 0x9896, 0x989e, 0x9895, 0x98a1, 0x988e, + 0x989b, 0x9892, 0x9897, 0x9899, 0x9893, 0x9a32, 0x9a2f, 0x9a2e, 0x9a33, + 0x9b1c, 0x9b1e, 0x9b11, 0x9b20, 0x9b1f, 0x9b19, 0x9b16, 0x9cac, 0x9cb9, + 0x9cb3, 0x9ca6, 0x9ca2, 0x9ca9, 0x9ca7, 0x9d6c, 0x9d6d, 0x9d69, 0x9d80, + 0x9d66, 0x9d65, 0x9d71, 0x9d6b, 0x9fbd, 0x9fc1, 0x9fd3, 0x9fb6, 0x4cac, + 0x9fb9, 0x9fd4, 0x9fb7, 0x9fdb, 0x9fb8, 0x9fc0, 0x9fbc, 0x9fd5, 0x9fbf, + 0x9fc3, 0x9fc9, 0xa258, 0xa290, 0xa295, 0xa297, 0xa309, 0xa308, 0xa306, + 0xa305, 0xa310, 0xa397, 0xa395, 0xa3ee, 0xa41f, 0xfa1a, 0x1b4b, 0x018e, + 0x03e8, 0x03f0, 0x03f4, 0x0406, 0x03ed, 0x349b, 0x03e9, 0x0400, 0x04b8, + 0x056d, 0x0804, 0x0801, 0x0803, 0x0802, 0x52f6, 0x3526, 0x0962, 0x0aba, + 0x0b13, 0x0fde, 0x0fd7, 0x0fe4, 0x0fce, 0x0fe3, 0x0fdd, 0x103a, 0x0fdb, + 0x0fd6, 0x0fe0, 0x0fd4, 0x0fcb, 0x0fe1, 0x0fc9, 0x0fdf, 0x103c, 0x0ffc, + 0x0fcf, 0x1479, 0x1476, 0x1478, 0x1687, 0x189c, 0x18b1, 0x18c1, 0x189a, + 0x1892, 0x41af, 0x18c2, 0x1896, 0x18c0, 0x1891, 0x1895, 0x19a2, 0x1ac3, + 0x1ac0, 0x1ac2, 0x0b8a, 0x1bb0, 0x1c16, 0x1f46, 0x1f4a, 0x1f3e, 0x1f45, + 0x1f42, 0x3815, 0x1f5b, 0x1f44, 0x2004, 0x4022, 0x2155, 0x2157, 0x2151, + 0x214e, 0x215a, 0x22c6, 0x22c3, 0x389c, 0x22c5, 0x22cc, 0x2371, 0x2426, + 0x24b2, 0x257a, 0x2584, 0x257b, 0x2874, 0x288c, 0x2851, 0x2848, 0x288d, + 0x2892, 0x2898, 0x2893, 0x28b0, 0x284e, 0x2896, 0x2897, 0x289c, 0x28ca, + 0x2d33, 0x2d83, 0x2d84, 0x2d9a, 0x2d8c, 0x64cc, 0x2d99, 0x2ee0, 0x2fe4, + 0x2ff8, 0x2fed, 0x2ff3, 0x2ff4, 0x2ff5, 0x2ffd, 0x3119, 0x329e, 0x32c4, + 0x329f, 0x339b, 0x339f, 0x339a, 0x36aa, 0x369d, 0x3692, 0x36a2, 0x36af, + 0x36eb, 0x36a0, 0x36a1, 0x3694, 0x3698, 0x368f, 0x3687, 0x3684, 0x36a9, + 0x367c, 0x3918, 0x3a5f, 0x3a62, 0x3a61, 0x3ac0, 0x3b15, 0x3bfc, 0x3bf9, + 0x3fc8, 0x3fc9, 0x3fde, 0x3fca, 0x3fe2, 0x3d64, 0x3d6e, 0x4004, 0x3fcc, + 0x3fdd, 0x3fe4, 0x3fd3, 0x3fc7, 0x3fc6, 0x3d5f, 0x4037, 0x43d8, 0x43ee, + 0x43b2, 0x43a3, 0x43b3, 0x43ed, 0x43f8, 0x4531, 0x455b, 0x4566, 0x4569, + 0x4596, 0x459b, 0x45f7, 0x45f3, 0x45f4, 0x45f5, 0x46e2, 0x46e7, 0x46e5, + 0x46e9, 0x46e6, 0x46e3, 0x4874, 0x487f, 0x488f, 0x4890, 0x4897, 0x48a3, + 0x488e, 0x4898, 0x488c, 0x4a42, 0x4a44, 0x4a69, 0x4a43, 0x4a68, 0x3ef6, + 0x4b8d, 0x4b88, 0x4b8b, 0x4b89, 0x4ccc, 0x4d1f, 0x4e80, 0x4e5e, 0x4e67, + 0x4e68, 0x4e65, 0x764a, 0x4e74, 0x4e69, 0x4e61, 0x4e62, 0x4e6c, 0x4e93, + 0x4e86, 0x4f9d, 0x4f9b, 0x501b, 0x5016, 0x5019, 0x5014, 0x5018, 0x5015, + 0x5099, 0x5098, 0x525d, 0x5289, 0x527a, 0x527d, 0x524b, 0x4073, 0x5278, + 0x527f, 0x5277, 0x527e, 0x5279, 0x52ab, 0x527c, 0x5274, 0x5275, 0x52a7, + 0x538d, 0x554e, 0x5566, 0x5561, 0x554d, 0x554f, 0x40dd, 0x5554, 0x557c, + 0x56da, 0x56de, 0x56d8, 0x56dd, 0x56df, 0x5866, 0x5862, 0x585f, 0x5864, + 0x5863, 0x5860, 0x5888, 0x586a, 0x5867, 0x5887, 0x583f, 0x586c, 0x586e, + 0x58ad, 0x59f1, 0x59f4, 0x59f6, 0x59f5, 0x59f8, 0x59fb, 0x59ec, 0x59ef, + 0x59ed, 0x7ab9, 0x59f7, 0x59f9, 0x59fd, 0x5ab1, 0x5c36, 0x5c1b, 0x5c32, + 0x5c42, 0x5c4d, 0x5c1f, 0x5c21, 0x5c1c, 0x5c31, 0x5c2e, 0x5c47, 0x5c3b, + 0x5c41, 0x5c18, 0x5c39, 0x5c1d, 0x5c27, 0x5c23, 0x7bd7, 0x5eee, 0x5ee8, + 0x5ee5, 0x5eef, 0x5ee4, 0x5eec, 0x5ef0, 0x60d7, 0x60d8, 0x60d4, 0x60ca, + 0x60d2, 0x60cb, 0x60d3, 0x60e6, 0x60e2, 0x6249, 0x6248, 0x62ff, 0x6309, + 0x63b0, 0x63af, 0x647c, 0x6478, 0x647a, 0x6472, 0x6479, 0x647e, 0x650c, + 0x650b, 0x65cd, 0x65be, 0x65bc, 0x65bf, 0x65c0, 0x65bd, 0x6838, 0x6808, + 0x6805, 0x683b, 0x6810, 0x680c, 0x680d, 0x6804, 0x683a, 0x6813, 0x6837, + 0x6839, 0x691f, 0x694b, 0x69ee, 0x6a75, 0x6a78, 0x6a7c, 0x6a74, 0x6a76, + 0x6aea, 0x6aeb, 0x6dfb, 0x6e19, 0x6ea7, 0x6e8c, 0x6edc, 0x6e98, 0x6ebe, + 0x6e9e, 0x6f0f, 0x6e9f, 0x6edd, 0x6e93, 0x6ebb, 0x6eb6, 0x6e90, 0x6ea1, + 0x6ebd, 0x6ede, 0x6e3a, 0x6f22, 0x6e97, 0x6e94, 0x6ec3, 0x6e8e, 0x6ea8, + 0x6e99, 0x6ead, 0x6e9b, 0x6ea2, 0x6f21, 0x6eac, 0x6f0e, 0x6f31, 0x71e1, + 0x71de, 0x71df, 0x71dc, 0x71dd, 0x71ec, 0x71e7, 0x7369, 0x73b8, 0x73a1, + 0x73a8, 0x73ba, 0x73c2, 0x73a6, 0x73a4, 0x73a3, 0x73ab, 0x73bc, 0x73b7, + 0x73bf, 0x73ad, 0x73b1, 0x73ca, 0x73c4, 0x73b9, 0x75c8, 0x75c6, 0x75c7, + 0x770a, 0x770d, 0x76fb, 0x7703, 0x7702, 0x76fc, 0x76f9, 0x76f8, 0x786e, + 0x7863, 0x7862, 0x7861, 0x786b, 0x4688, 0x786f, 0x7866, 0x786c, 0x790e, + 0x7915, 0x7916, 0x7910, 0x7917, 0x7911, 0x7a6e, 0x7a6c, 0x7a87, 0x7a83, + 0x7a63, 0x7adc, 0x7bc0, 0x7bf7, 0x7bfa, 0x7c70, 0x7c6a, 0x7c68, 0x7c69, + 0x7c84, 0x7cec, 0x7ce7, 0x7cee, 0x7dba, 0x7db2, 0x7db5, 0x7dcb, 0x080b, + 0x7dd0, 0x7e6d, 0x7e6c, 0x47bb, 0x7f45, 0x7f46, 0x7f34, 0x7f2c, 0x7f35, + 0x7f44, 0x47ba, 0x7f76, 0x80b1, 0x80aa, 0x80a1, 0x80b2, 0x4812, 0x80a6, + 0x80b5, 0x80b4, 0x80b8, 0x80af, 0x80b0, 0x80a3, 0x8262, 0x8264, 0x8356, + 0x8351, 0x834f, 0x8368, 0x834c, 0x8350, 0x4861, 0x8348, 0x834a, 0x8421, + 0x85e3, 0x85b9, 0x85de, 0x85b7, 0x85e1, 0x85b6, 0x85b5, 0x85df, 0x48e1, + 0x8797, 0x879a, 0x879b, 0x8798, 0x8792, 0x8793, 0x87d7, 0x8773, 0x886b, + 0x8874, 0x8878, 0x886d, 0x8918, 0x89e9, 0x89f5, 0x89ea, 0x8a2e, 0x89e7, + 0x89fe, 0x89e5, 0x8a36, 0x89f0, 0x89e6, 0x8a2c, 0x8c89, 0x8c95, 0x8c93, + 0x8d4d, 0x8d4a, 0x8d4f, 0x8d50, 0x8d4b, 0x8f2a, 0x8f2b, 0x8f2f, 0x8f2e, + 0x8f7c, 0x8fed, 0x8fe2, 0x90e0, 0x90dc, 0x90da, 0x90d6, 0x90f4, 0x90d9, + 0x90d5, 0x9222, 0x9221, 0x9224, 0x9225, 0x9226, 0x9223, 0x92aa, 0x92af, + 0x92b0, 0x92ab, 0x93af, 0x93b7, 0x93b5, 0x93b2, 0x93b3, 0x942b, 0x94d8, + 0x94c2, 0x94af, 0x94bc, 0x94b8, 0x94be, 0x94b7, 0x94b4, 0x94bf, 0x94b3, + 0x94b1, 0x94bb, 0x94bd, 0x94d6, 0x94dd, 0x95d8, 0x95d3, 0x95d5, 0x95e3, + 0x95e2, 0x95d9, 0x95de, 0x95df, 0x95da, 0x95d4, 0x96f3, 0x96e2, 0x970d, + 0x9701, 0x9705, 0x971a, 0x9703, 0x971f, 0x9716, 0x96fa, 0x96fc, 0x970a, + 0x999f, 0x98bc, 0x98ca, 0x98b6, 0x98c7, 0x98bf, 0x4b89, 0x98b9, 0x4b8c, + 0x98b0, 0x98b8, 0x98bd, 0x9891, 0x98bb, 0x98be, 0x9a3e, 0x9a3d, 0x9b38, + 0x9b3d, 0x9b39, 0x9b33, 0x9c33, 0x9cbb, 0x9cc6, 0x9cc5, 0x9cc7, 0x9ccb, + 0x9ca8, 0x9cc8, 0x9cbe, 0x9cc1, 0x9cbd, 0x9d82, 0x9d9e, 0x9d81, 0x9d84, + 0x9b8d, 0x9d96, 0x9d8e, 0x9d88, 0x9d87, 0x9fe0, 0xa00d, 0x9fdf, 0x9fe4, + 0x9fe2, 0x9fdd, 0x9fec, 0x9fde, 0x9fe7, 0x9fea, 0x9fe3, 0xa25c, 0x9e77, + 0xa25d, 0xa29c, 0xa31d, 0xa39d, 0xa39e, 0xa39b, 0xa3b5, 0xa3b9, 0xa3b6, + 0xa3f3, 0xa3f2, 0xa3f4, 0xa426, 0xa427, 0xa425, 0xa506, 0xa50b, 0xa53a, + 0xa53c, 0x040a, 0x040b, 0x04bf, 0x04fd, 0x0618, 0x91df, 0x5390, 0x069e, + 0x07fc, 0x0810, 0x080f, 0x080d, 0x08b9, 0x08b7, 0x08ba, 0x090a, 0x1041, + 0x108b, 0x1046, 0x1053, 0x10e2, 0x103f, 0x0f7c, 0x104b, 0x104e, 0x108a, + 0x1047, 0x1493, 0x7dce, 0x148c, 0x14af, 0x14c9, 0x15c6, 0x15c8, 0x1691, + 0x18cf, 0x18d4, 0x18ce, 0x1add, 0x1ad4, 0x1f49, 0x1f63, 0x1f5d, 0x381a, + 0x1f67, 0x1fbb, 0x1f60, 0x1f80, 0x215f, 0x2160, 0x22da, 0x22d2, 0x22dd, + 0x258e, 0x2588, 0x256c, 0x289e, 0x28c9, 0x28a4, 0x3998, 0x28d9, 0x28d2, + 0x28da, 0x28dd, 0x28ce, 0x28fc, 0x2a14, 0x2a60, 0x2dd7, 0x2dcb, 0x2dcd, + 0x2dd5, 0x2ee7, 0x3000, 0x300a, 0x300f, 0x3002, 0x3001, 0x311d, 0x32ca, + 0x32cb, 0x32cd, 0x334f, 0x339c, 0x3680, 0x370d, 0x3702, 0x3bf1, 0x3707, + 0x36f7, 0x36f8, 0x36fd, 0x3724, 0x36fb, 0x3739, 0x373a, 0x3922, 0x6ba9, + 0x3a6a, 0x3a6d, 0x3a74, 0x3c0e, 0x3fdf, 0x402b, 0x3fe3, 0x4026, 0x402a, + 0x4023, 0x4035, 0x404a, 0x43fd, 0x4400, 0x441e, 0x43ff, 0x459e, 0x45fa, + 0x46f1, 0x4895, 0x48a8, 0x48a6, 0x4a6e, 0x4a83, 0x4a6d, 0x4b8f, 0x3f6a, + 0x4cdf, 0x4cd5, 0x4ce0, 0x4cd3, 0x4cd8, 0x4e8c, 0x764b, 0x4e94, 0x4e96, + 0x4e85, 0x4e8f, 0x4ea9, 0x4e8e, 0x4e90, 0x4eb8, 0x4ec3, 0x4ebb, 0x4fa5, + 0x4fa2, 0x76a2, 0x4fa3, 0x50b5, 0x50ac, 0x50a8, 0x52ad, 0x52b8, 0x52b4, + 0x52ae, 0x52b6, 0x4485, 0x52c1, 0x52bf, 0x5392, 0x5400, 0x5401, 0x5575, + 0x5572, 0x5578, 0x5570, 0x557e, 0x557d, 0x557f, 0x56ef, 0x586d, 0x588e, + 0x588f, 0x588a, 0x588d, 0x5895, 0x588b, 0x588c, 0x58b0, 0x5893, 0x59fc, + 0x5a15, 0x5a0e, 0x5a18, 0x5a11, 0x5a0d, 0x5abb, 0x5ab3, 0x4239, 0x5ca1, + 0x5c9a, 0x5c84, 0x5ca0, 0x5c86, 0x5c9d, 0x5caa, 0x5c78, 0x5c8d, 0x5c8a, + 0x5ca6, 0x5c7a, 0x5c97, 0x5c88, 0x5c8e, 0x423d, 0x4244, 0x5c76, 0x5c81, + 0x5c85, 0x5c75, 0x5ca8, 0x5c8f, 0x5c91, 0x5ca2, 0x5c9c, 0x5c89, 0x5c7f, + 0x5c96, 0x5c79, 0x5c9f, 0x5ca7, 0x4246, 0x5c87, 0x5c9b, 0x5ca5, 0x5c8b, + 0x5cc9, 0x5eff, 0x5f03, 0x5f00, 0x5f02, 0x5f04, 0x5f05, 0x5ee6, 0x5f1f, + 0x6114, 0x430e, 0x610c, 0x610f, 0x6119, 0x610b, 0x6113, 0x60d5, 0x4310, + 0x611c, 0x6250, 0x624e, 0x6312, 0x63b9, 0x6485, 0x6488, 0x6490, 0x6513, + 0x65d0, 0x65d1, 0x65d2, 0x65d7, 0x65d6, 0x65e5, 0x6846, 0x686b, 0x6845, + 0x683f, 0x683e, 0x443e, 0x686a, 0x6868, 0x684c, 0x6923, 0x6922, 0x6997, + 0x6991, 0x5ab5, 0x6998, 0x699c, 0x6a89, 0x4484, 0x6a8b, 0x6a8a, 0x6a8d, + 0x6a8e, 0x6a88, 0x6f4e, 0x6f44, 0x6f37, 0x6f75, 0x6f54, 0x6f76, 0x6f34, + 0x6f6b, 0x6f32, 0x6f57, 0x6f52, 0x6f45, 0x4549, 0x6eb1, 0x6f4b, 0x6f47, + 0x6f33, 0x6f40, 0x6f3c, 0x6f43, 0x6f4f, 0x6f55, 0x6f41, 0x6fb2, 0x6fc0, + 0x7434, 0x73f9, 0x7419, 0x740d, 0x73fa, 0x741e, 0x741f, 0x740e, 0x7440, + 0x7408, 0x45df, 0x7413, 0x744c, 0x45f0, 0x75cc, 0x75cb, 0x7724, 0x7725, + 0x773d, 0x7720, 0x7727, 0x7726, 0x771d, 0x771e, 0x7732, 0x776c, 0x7759, + 0x468a, 0x787a, 0x7879, 0x791b, 0x792e, 0x7923, 0x7920, 0x791f, 0x7ab6, + 0x7ab9, 0x7aa1, 0x7aa3, 0x7aa8, 0x7aaf, 0x7a9a, 0x7a99, 0x7aa2, 0x7a9d, + 0x4702, 0x7aab, 0x7bc9, 0x7bfe, 0x7c00, 0x7bfc, 0x7c07, 0x7c75, 0x7c72, + 0x7c73, 0x7c74, 0x7cfa, 0x7cfc, 0x7cf8, 0x7cf6, 0x7cfb, 0x7dcd, 0x7dd1, + 0x7dcf, 0x7e74, 0x7e72, 0x7e73, 0x7f54, 0x7f51, 0x47c0, 0x7f53, 0x7f49, + 0x7f4c, 0x7f4a, 0x7f4f, 0x7f56, 0x8100, 0x80d5, 0x80d7, 0x80ff, 0x80d9, + 0x80e3, 0x80d3, 0x4815, 0x80d8, 0x80d4, 0x80de, 0x8271, 0x8374, 0x8388, + 0x837f, 0x836b, 0x8387, 0x8379, 0x8378, 0x8389, 0x8380, 0x8376, 0x8429, + 0x8428, 0x842f, 0x85e5, 0x8604, 0x8603, 0x85f0, 0x85e8, 0x85ea, 0x85f1, + 0x8601, 0x8602, 0x87a9, 0x87ab, 0x87b7, 0x87b6, 0x48e2, 0x88a0, 0x888e, + 0x8886, 0x8887, 0x8885, 0x888b, 0x8888, 0x8890, 0x891a, 0x8934, 0x8a37, + 0x8a2f, 0x8a30, 0x8a39, 0x8a34, 0x8a33, 0x8a85, 0x8a84, 0x8a3a, 0x8c9f, + 0x8d69, 0x8d6c, 0x8d6a, 0x8d67, 0x8d6b, 0x8f3f, 0x8f40, 0x900b, 0x90d2, + 0x90f8, 0x9101, 0x90fa, 0x9116, 0xf9f6, 0x922c, 0x922d, 0x922f, 0x922e, + 0x92c1, 0x92f5, 0x92c4, 0x92de, 0x92cc, 0x92d2, 0x92c2, 0x92cd, 0x92cf, + 0x92dd, 0x92c8, 0x93ba, 0x93be, 0x93bf, 0x942e, 0x9430, 0x94e7, 0x94ee, + 0x94e8, 0x94e6, 0x94e2, 0x94e4, 0x94fb, 0x94fc, 0x94ea, 0x95ed, 0x95f6, + 0x95f3, 0x95f4, 0x95f1, 0x95f7, 0x95f5, 0x95ea, 0x95eb, 0x9700, 0x972c, + 0x9712, 0x973d, 0x9733, 0x4b4d, 0x9730, 0x9740, 0x9731, 0x9757, 0x4b4a, + 0x9735, 0x9732, 0x972d, 0x9736, 0x9738, 0x9762, 0x975f, 0x978a, 0x98d6, + 0x98d8, 0x98dd, 0x98e4, 0x98e3, 0x9a4d, 0x9ad7, 0x9b4a, 0x9b4c, 0x9b50, + 0x9b4b, 0x9b4e, 0x9b4f, 0x9c39, 0x9cd2, 0x9ccd, 0x9cd3, 0x9ce1, 0x9cce, + 0x9cd5, 0x9cdd, 0x9cd4, 0x9ccf, 0x9dcb, 0x9da6, 0x9dc2, 0x9da5, 0x9da9, + 0x9da2, 0x9da4, 0x9db0, 0x9dcc, 0x9daf, 0x9dbf, 0xa024, 0xa01a, 0xa014, + 0xa03a, 0xa020, 0xa01b, 0xa021, 0xa025, 0xa01e, 0xa03f, 0xa040, 0xa018, + 0xa02c, 0xa015, 0xa02d, 0xa01f, 0xa029, 0xa04b, 0xa2b3, 0xa2a5, 0xa2a7, + 0xa2ab, 0xa2a6, 0xa2aa, 0xa322, 0xa323, 0xa3a1, 0xa3a3, 0xa3a0, 0xa3bd, + 0xa3ba, 0xa3fa, 0xa3f8, 0xa3fc, 0xa3f6, 0xa434, 0xa443, 0x4d63, 0xa4d4, + 0xa50d, 0xa543, 0xa541, 0xa53d, 0xa540, 0xa53e, 0xa53f, 0xa546, 0x4d93, + 0xa5d4, 0x0435, 0x0436, 0x0432, 0x043a, 0x04c8, 0x0536, 0x061e, 0x061d, + 0x061f, 0x081c, 0x081d, 0x0820, 0x350e, 0x08c0, 0x109a, 0x1093, 0x10dd, + 0x360a, 0x10a3, 0x10a9, 0x109c, 0x109b, 0x360d, 0x1097, 0x14b1, 0x14ca, + 0x14b3, 0x14cd, 0x18ea, 0x18ee, 0x18ef, 0x1adf, 0x1b50, 0x1bbb, 0x1f88, + 0x1f89, 0x1f8c, 0x1f85, 0x1f5e, 0x1f94, 0x1f95, 0x216b, 0x216a, 0x2169, + 0x22e3, 0x22f1, 0x2437, 0x2433, 0x2591, 0x258f, 0x2597, 0x28d4, 0x28de, + 0x28d3, 0x28e0, 0x2943, 0x290b, 0x28ff, 0x2904, 0x2907, 0x2df9, 0x2dfa, + 0x2dfb, 0x2df8, 0x3012, 0x3010, 0x311f, 0x32df, 0x32e3, 0x3352, 0x33a9, + 0x3765, 0x3787, 0x3742, 0x3752, 0x374c, 0x369f, 0x3701, 0x3748, 0x374f, + 0x377e, 0x374d, 0x3758, 0x3747, 0x375e, 0x3749, 0x374e, 0x375d, 0x375a, + 0x3786, 0x3751, 0x3929, 0x39a6, 0x39a7, 0x3a70, 0x3a6f, 0x3ad3, 0x3ad2, + 0x3c28, 0x3c1b, 0x3c1a, 0x3c1c, 0x3c21, 0x4032, 0x4066, 0x407d, 0x4073, + 0x407f, 0x4065, 0x4080, 0x4061, 0x4075, 0x406e, 0x4067, 0x4071, 0x406c, + 0x4063, 0x4062, 0x4083, 0x40b2, 0x4081, 0x406f, 0x406b, 0x4082, 0x408a, + 0x4429, 0x4430, 0x4431, 0x4597, 0x4600, 0x45ff, 0x48b6, 0x48b5, 0x48c3, + 0x4a8d, 0x4b18, 0x4b9c, 0x4b9a, 0x4b99, 0x4eb7, 0x4ec4, 0x4ec6, 0x4ec7, + 0x4ebc, 0x4ec0, 0x4ec5, 0x4ecd, 0x4ec1, 0x4ebe, 0x4fa7, 0x4fb8, 0x5023, + 0x4074, 0x52e8, 0x52de, 0x52e3, 0x52ef, 0x52dc, 0x52e4, 0x52e1, 0x52e5, + 0x5395, 0x5394, 0x5393, 0x538e, 0x5598, 0x559c, 0x5599, 0x55a0, 0x559e, + 0x5704, 0x58d3, 0x58b4, 0x58bb, 0x58b7, 0x58b8, 0x58bd, 0x58b6, 0x58b9, + 0x58b5, 0x5a22, 0x5a21, 0x5ac3, 0x5abc, 0x5cff, 0x5ce5, 0x5cf7, 0x5cd2, + 0x5d00, 0x5cdb, 0x5cf0, 0x5ce2, 0x5ccd, 0x4256, 0x5ce1, 0x5cf2, 0x5cdc, + 0x5ccc, 0x5cd6, 0x5cf3, 0x5cfa, 0x5cf6, 0x5cec, 0x5cea, 0x5ce3, 0x5cd0, + 0x425a, 0x5c95, 0x5cd5, 0x5cf4, 0x5ccb, 0x5cda, 0x5cc8, 0x5cdf, 0x5cf5, + 0x5ccf, 0x5cc7, 0x5cd7, 0x5f24, 0x42a3, 0x5f1c, 0x5f21, 0x5f1e, 0x5f18, + 0x5f1b, 0x42a8, 0x6146, 0x614b, 0x6148, 0x6147, 0x6167, 0x6154, 0x6315, + 0x6322, 0x63c5, 0x6329, 0x63c7, 0x648d, 0x651b, 0x6520, 0x65e2, 0x65e7, + 0x65e8, 0x65e1, 0x6872, 0x687b, 0x6874, 0x6871, 0x6879, 0x6875, 0x6890, + 0x6877, 0x687d, 0x694f, 0x6950, 0x69a3, 0x69a2, 0x69f4, 0x6a94, 0x6a9a, + 0x6a9b, 0x6aa7, 0x6a97, 0x6a95, 0x6a92, 0x6a9c, 0x6a96, 0x6fb6, 0x6fb8, + 0x6fb0, 0x7018, 0x6fc5, 0x6fb5, 0x6fc2, 0x7006, 0x7019, 0x6fb9, 0x7015, + 0x6fd6, 0x6fac, 0x453c, 0x6fc6, 0x6fb3, 0x6fc3, 0x6fca, 0x6fcf, 0x6fbd, + 0x6fce, 0x7014, 0x6fba, 0x701a, 0x6fc1, 0x6fbb, 0x459b, 0x459a, 0x7201, + 0x71fc, 0x745a, 0x7454, 0x7461, 0x745c, 0x7455, 0x744a, 0x744b, 0x7451, + 0x7469, 0x746b, 0x87f1, 0x7466, 0x7458, 0x745d, 0x7467, 0x7456, 0x7488, + 0x7464, 0x744e, 0x7757, 0x775a, 0x7751, 0x774a, 0x774b, 0x465e, 0x7747, + 0x776f, 0x776a, 0x776b, 0x7746, 0x776d, 0x7754, 0x776e, 0x774c, 0x7878, + 0x7886, 0x7882, 0x46a7, 0x7ae1, 0x7ae5, 0x7adb, 0x7ade, 0x7ad7, 0x7c03, + 0x7c7c, 0x7c7e, 0x7d05, 0x7d07, 0x7de6, 0x7de1, 0x7dfb, 0x7de5, 0x7de7, + 0x7ddf, 0x7dff, 0x7e76, 0x7f63, 0x7f66, 0x7f65, 0x7f5e, 0x7f64, 0x7f6b, + 0x7f5f, 0x7f67, 0x7f68, 0x8108, 0x8109, 0x8117, 0x8115, 0x811b, 0x810b, + 0x8128, 0x810e, 0x8118, 0x8153, 0x8145, 0x810d, 0x810a, 0x8113, 0x814a, + 0x8279, 0x83a1, 0x838d, 0x83a2, 0x8390, 0x486e, 0x8431, 0x8430, 0x861f, + 0x8619, 0x860c, 0x861e, 0x861d, 0x8607, 0x8766, 0x87c5, 0x87ba, 0x87bd, + 0x87c2, 0x87c3, 0x87bf, 0x490d, 0x88a1, 0x88a2, 0x88a8, 0x88a3, 0x88aa, + 0x88af, 0x88b9, 0x8937, 0x8a8f, 0x4943, 0x8a8e, 0x8a87, 0x8a8a, 0x8a92, + 0x8a97, 0x8a9f, 0x8b05, 0x8ca9, 0x8ca7, 0x8d8a, 0x8d82, 0x8d85, 0x8d8b, + 0x8d89, 0x8d81, 0x8d80, 0x8d87, 0x8d86, 0x8f4d, 0x901c, 0x901f, 0x9121, + 0x911d, 0x9122, 0x90fe, 0x911b, 0x913a, 0x9137, 0x9117, 0x9138, 0x9126, + 0x9118, 0x9234, 0x9235, 0x9232, 0x4a73, 0x92e1, 0x92fd, 0x92e3, 0x92e8, + 0x92f9, 0x92ff, 0x92fe, 0x4a74, 0x92e0, 0x9300, 0x4a70, 0x92ec, 0x92e4, + 0x92ef, 0x92fa, 0x93ca, 0x9431, 0x9432, 0x9434, 0x9441, 0x9500, 0x9506, + 0x9508, 0x9505, 0x9503, 0x950b, 0x9502, 0x950a, 0x95f0, 0x9613, 0x960a, + 0x960f, 0x9611, 0x9608, 0x960b, 0x9612, 0x960d, 0x975b, 0x9763, 0x9761, + 0x9768, 0x975a, 0x984e, 0x984d, 0x9850, 0x98fc, 0x9912, 0x98f5, 0x991e, + 0x98f0, 0x98f3, 0x98f2, 0x9901, 0x98ef, 0x98ee, 0x9916, 0x98f6, 0x98fb, + 0x991c, 0x4bdb, 0x9a5d, 0x9a60, 0x9a66, 0x9a5f, 0x9a61, 0x9a5b, 0x9a62, + 0x9a57, 0x9b69, 0x9b6b, 0x9b61, 0x9b77, 0x9b5f, 0x9b63, 0x9b62, 0x9b65, + 0x9cef, 0x9ce2, 0x9d00, 0x9ce8, 0x9cf2, 0x9ce7, 0x4c29, 0x9ce5, 0x9dd5, + 0x9dd0, 0x9dda, 0x9dd3, 0x4c51, 0x9dd9, 0x9dcf, 0x9dd6, 0x9dd8, 0x9df5, + 0x9dce, 0x9dd7, 0x9df4, 0x9dcd, 0x9e01, 0x9bba, 0xa052, 0xa055, 0xa05a, + 0xa04d, 0xa054, 0xa053, 0xa05e, 0xa067, 0xa065, 0xa04e, 0x4cdb, 0xa04f, + 0xa061, 0xa06e, 0xa051, 0xa05b, 0xa263, 0xa2b7, 0xa2b6, 0xa2c3, 0xa2bb, + 0xa2b5, 0xa32e, 0xa330, 0xa333, 0xa331, 0xa3a4, 0xa3c1, 0xa3bb, 0xa3be, + 0xa400, 0xa3ff, 0xa440, 0x4d65, 0xa43f, 0xa444, 0x4d64, 0x4d67, 0xa4db, + 0xa50f, 0xa511, 0xa54e, 0xa54d, 0xa54b, 0xa54c, 0xa595, 0x043b, 0x0445, + 0x0444, 0x043e, 0x043c, 0x043f, 0x04cc, 0x04ce, 0x0622, 0x0623, 0x069f, + 0x08c5, 0x08c4, 0x10e9, 0x1099, 0x3611, 0x10e6, 0x10e7, 0x10f7, 0x14d2, + 0x3733, 0x18fd, 0x190c, 0x190b, 0x1ced, 0x3821, 0x3822, 0x1f9b, 0x200a, + 0x216f, 0x2175, 0x22f2, 0x22f8, 0x243e, 0x2924, 0x290e, 0x2916, 0x2918, + 0x2910, 0x2931, 0x2944, 0x39a6, 0x2929, 0x292f, 0x294b, 0x2936, 0x39a3, + 0x2e34, 0x2e00, 0x2e2b, 0x3020, 0x3021, 0x301e, 0x301d, 0x32f5, 0x32f2, + 0x32f6, 0x3790, 0x379d, 0x379c, 0x3792, 0x3794, 0x37d1, 0x3793, 0x37b7, + 0x3797, 0x37b0, 0x379f, 0x37c9, 0x392d, 0x392c, 0x3a77, 0x3c2c, 0x40c0, + 0x40b9, 0x4453, 0x4540, 0x4702, 0x46fb, 0x3ea1, 0x4a8b, 0x4aae, 0x4aab, + 0x4ba1, 0xa2cd, 0x4cea, 0x4edd, 0x4edc, 0x4ed9, 0x4fab, 0x4fac, 0x4fad, + 0x4fb2, 0x502c, 0x502b, 0x50c2, 0x5300, 0x530d, 0x5306, 0x52ff, 0x5303, + 0x5301, 0x5310, 0x530f, 0x5305, 0x5398, 0x5397, 0x5396, 0x5399, 0x55ac, + 0x55ab, 0x5712, 0x58d8, 0x58df, 0x58d6, 0x5a2d, 0x5a32, 0x5d3f, 0x5d2f, + 0x5d26, 0x5d3a, 0x5d39, 0x425f, 0x5d3b, 0x5d35, 0x5d2a, 0x5d21, 0x5d38, + 0x5d37, 0x5d34, 0x425c, 0x5d22, 0x5d36, 0x5d44, 0x5f45, 0x5f3b, 0x5f36, + 0x5f42, 0x617a, 0x6186, 0x618b, 0x617f, 0x6181, 0x632a, 0x63d5, 0x649f, + 0x649d, 0x6526, 0x65f4, 0x65f5, 0x6815, 0x688e, 0x688f, 0x6926, 0x69a7, + 0x69af, 0x6aad, 0x6aac, 0x6aab, 0x6aaa, 0x702f, 0x7021, 0x7023, 0x70a3, + 0x7049, 0x703a, 0x7048, 0x702d, 0x7025, 0x7029, 0x7032, 0x7034, 0x7024, + 0x702c, 0x704b, 0x703b, 0x7020, 0x7028, 0x7498, 0x45f5, 0x7497, 0x8804, + 0x749d, 0x74a8, 0x75d5, 0x7777, 0x7778, 0x7772, 0x7773, 0x7802, 0x793b, + 0x7afe, 0x7b0b, 0x7aff, 0x7b07, 0x4711, 0x470c, 0x7b30, 0x7bcd, 0x7bcf, + 0x7c10, 0x7c0a, 0x7c83, 0x7d15, 0x7d0e, 0x7d0c, 0x7e02, 0x7dfe, 0x7e05, + 0x7e15, 0x7e08, 0x7f7f, 0x7f77, 0x7f7c, 0x7f82, 0x7f7e, 0x7f78, 0x7f7d, + 0x7f79, 0x7f81, 0x814b, 0x8163, 0x8164, 0x8156, 0x8154, 0x814e, 0x8110, + 0x814f, 0x8157, 0x815e, 0x8151, 0x816a, 0x8169, 0x83ad, 0x83a4, 0x83ac, + 0x83a9, 0x83ae, 0x044c, 0x8650, 0x8635, 0x8632, 0x87d8, 0x87d1, 0x87cf, + 0x87be, 0x88d5, 0x88c1, 0x88c6, 0x88c3, 0x88c2, 0x88c0, 0x88c5, 0x88c7, + 0x88bf, 0x88c4, 0x88d4, 0x8a90, 0x8ad2, 0x494e, 0x8ad4, 0x8caf, 0x8cae, + 0x8cb2, 0x8cad, 0x8d9c, 0x8da0, 0x8db6, 0x8f3d, 0x8f56, 0x8f82, 0x9028, + 0x902b, 0x913c, 0x913e, 0x913f, 0x9142, 0x913d, 0x9141, 0x913b, 0x9149, + 0x9143, 0x9239, 0x9238, 0x9322, 0x9308, 0x930c, 0x9306, 0x9313, 0x9304, + 0x9320, 0x931d, 0x9305, 0x930a, 0x93d6, 0x93d7, 0x9436, 0x9437, 0x9523, + 0x9522, 0x9520, 0x951a, 0x951d, 0x961c, 0x9620, 0x9677, 0x977f, 0x978b, + 0x977d, 0x9799, 0x9784, 0x9789, 0x9785, 0x9783, 0x9786, 0x979e, 0x9853, + 0x9917, 0x4b94, 0x9919, 0x9920, 0x991f, 0x9923, 0x9918, 0x9921, 0x9929, + 0x9924, 0x9926, 0x9a5e, 0x9a6f, 0x9a6e, 0x9a74, 0x9a72, 0x9a73, 0x9b7d, + 0x9b7e, 0x9b85, 0x9b7f, 0x9b84, 0x9c44, 0x9cf5, 0x9cf8, 0x9d03, 0x9cf6, + 0x9e28, 0x4c63, 0x9e39, 0x9dfb, 0x9e0e, 0x9dfd, 0x9e1f, 0x4c61, 0x9e03, + 0x9bd8, 0x9e10, 0x4c5a, 0x9e0d, 0x9e27, 0x9e41, 0xa072, 0xa078, 0xa080, + 0x4ce3, 0xa085, 0xa07b, 0x9d7c, 0xa07d, 0xa091, 0xa088, 0xa0aa, 0xa08d, + 0xa089, 0xa095, 0xa09b, 0xa08c, 0xa09e, 0xa07c, 0xa086, 0xa084, 0xa268, + 0xa2c5, 0xa2c4, 0xa2c9, 0xa2c6, 0xa342, 0xa345, 0xa341, 0xa344, 0xa3a6, + 0xa3c2, 0xa442, 0xa449, 0xa448, 0xa44a, 0xa44c, 0xa44b, 0xa517, 0xa518, + 0xa515, 0xa552, 0xa554, 0xa553, 0xa59a, 0xa59b, 0xa5dc, 0xa5e4, 0xa691, + 0x4daf, 0xa6ba, 0x0451, 0x045b, 0x04cf, 0x3305, 0x1113, 0x1115, 0x1114, + 0x1123, 0x3613, 0x1111, 0x1112, 0x3680, 0x14f0, 0x169b, 0x1912, 0x1916, + 0x1917, 0x19b5, 0x1cf4, 0x1fb1, 0x2179, 0x22ff, 0x22fc, 0x22fb, 0x243f, + 0x2444, 0x259d, 0x2932, 0x294c, 0x292b, 0x295a, 0x2a1f, 0x2e01, 0x2e2d, + 0x2e27, 0x2e59, 0x2e5a, 0x2e4d, 0x2e58, 0x3023, 0x3025, 0x302b, 0x32ff, + 0x33ae, 0x37cb, 0x37ca, 0x37d0, 0x37ce, 0x37cc, 0x37d8, 0x37c6, 0x37d2, + 0x37cf, 0x37c8, 0x3b17, 0x4db0, 0x40c4, 0x9240, 0x40e9, 0x40f2, 0x40fc, + 0x40ea, 0x40eb, 0x40fd, 0x4478, 0x4477, 0x4473, 0x449e, 0x4479, 0x45a2, + 0x4603, 0x4704, 0x4705, 0x48ce, 0x4abf, 0x4ef6, 0x4ef7, 0x5031, 0x5030, + 0x50c9, 0x50c7, 0x531c, 0x5328, 0x531a, 0x531e, 0x531b, 0x531f, 0x55bf, + 0x55bb, 0x55bc, 0x55c0, 0x571a, 0x58ef, 0x58ec, 0x58e9, 0x58f0, 0x58fe, + 0x5a34, 0x5d6a, 0x5d95, 0x5d6c, 0x5d72, 0x5d67, 0x5d60, 0x5d6b, 0x5d5e, + 0x5d6f, 0x5d66, 0x7c46, 0x5d62, 0x5d5d, 0x5d5c, 0xf965, 0x5f50, 0x619f, + 0x4323, 0x619e, 0x61a6, 0x6335, 0x6338, 0x6336, 0x633a, 0x63dc, 0x687c, + 0x68ab, 0x4449, 0x68a8, 0x68a7, 0x692b, 0x692c, 0x6928, 0x092b, 0x69a9, + 0x69aa, 0x69ab, 0x69f8, 0x6ab1, 0x6af0, 0x6aef, 0x70a8, 0x708b, 0x7094, + 0x709e, 0x708f, 0x7088, 0x707e, 0x7081, 0x7030, 0x709b, 0x7082, 0x7090, + 0x7085, 0x707f, 0x70a9, 0x70de, 0x720d, 0x45fa, 0x74cf, 0x74cb, 0x74d8, + 0x74dd, 0x74d3, 0x74d0, 0x74d5, 0x74d6, 0x75d6, 0x7792, 0x7795, 0xa5cb, + 0x778d, 0x779b, 0x779d, 0x778f, 0x779e, 0x77a6, 0x7896, 0x7892, 0x7b16, + 0x7b2a, 0x7b29, 0x7b2c, 0x7c15, 0x7c12, 0x7c11, 0x7c13, 0x7c88, 0x7c8b, + 0x7c8a, 0x7c87, 0x7d17, 0x7d16, 0x7d1a, 0x7e19, 0x7e17, 0x7f91, 0x7f94, + 0x818b, 0x8190, 0x818f, 0x8186, 0x8183, 0x818e, 0x8187, 0x81a8, 0x8185, + 0x81a6, 0x8182, 0x81a7, 0x83b9, 0x83b7, 0x83b4, 0x83b6, 0x83b3, 0x83c6, + 0x863c, 0x8640, 0x8638, 0x8791, 0x87a6, 0x87da, 0x88da, 0x88d8, 0x88d9, + 0x88db, 0x88d7, 0x8b16, 0x8b12, 0x8b1f, 0x4959, 0x8b14, 0x8b1a, 0x8b10, + 0x8cb3, 0x8dae, 0x8dc1, 0x8db0, 0x8daf, 0x8db1, 0x8dad, 0x8db2, 0x8dc4, + 0x903c, 0x903f, 0x9161, 0x9166, 0x923c, 0x923b, 0x932c, 0x4a7e, 0x932a, + 0x933e, 0x932f, 0x9332, 0x9327, 0x9329, 0x9340, 0x93df, 0x93de, 0x943c, + 0x943b, 0x943e, 0x9521, 0x9546, 0x953c, 0x9536, 0x9538, 0x9535, 0x9631, + 0x9636, 0x962d, 0x9633, 0x962f, 0x962e, 0x9635, 0x97ac, 0x97a9, 0x97a6, + 0x4ba8, 0x994c, 0x9943, 0x9941, 0x994f, 0x9942, 0x9951, 0x4ba9, 0x9940, + 0x9950, 0x9945, 0x994a, 0x994b, 0x9a83, 0x9a82, 0x9a81, 0x9ae0, 0x9b98, + 0x9b9f, 0x9b9b, 0x9b9a, 0x9b99, 0x9b96, 0x9bae, 0x9b9e, 0x9d09, 0x9d0d, + 0x9e4e, 0x9e4a, 0x9e4d, 0x9e40, 0x9e3e, 0x9e48, 0x9e42, 0x9e62, 0x9e45, + 0x9e51, 0xa0c6, 0xa0d0, 0xa0c0, 0xa0b7, 0xa0c2, 0xa0bc, 0xa0c5, 0xa0dc, + 0xa0db, 0xa0d2, 0xa0c7, 0xa0b6, 0xa0c9, 0xa0cc, 0xa0d1, 0xa0cd, 0xa0da, + 0xa0ba, 0xa0d3, 0xa0ce, 0xa0f6, 0xa0bd, 0xa0dd, 0xa0c8, 0xa10d, 0xa135, + 0xa271, 0xa26e, 0xa26f, 0xa2d6, 0xa34c, 0xa34f, 0xa354, 0xa353, 0xa3c9, + 0xa3c8, 0xa403, 0x4d54, 0xa404, 0xfa16, 0xa457, 0xa452, 0xa453, 0x4d6d, + 0xa456, 0xa45c, 0xa455, 0xa564, 0xa55d, 0xa55e, 0xa5a2, 0xa5a3, 0x4d8e, + 0xa5e7, 0xa5e6, 0xa698, 0xa6ac, 0xa6af, 0xa6ae, 0x0459, 0x05a9, 0x082a, + 0x08c7, 0x1141, 0x1137, 0x1135, 0x1133, 0x1139, 0x1132, 0x14ff, 0x1501, + 0x14f8, 0x191b, 0x1919, 0x1bbf, 0x1fbc, 0x1fbe, 0x1fbd, 0x217d, 0x2446, + 0x2447, 0x25a4, 0x2a21, 0x2a62, 0x2e86, 0x3a72, 0x302f, 0x3031, 0x3c14, + 0x37f8, 0x37f5, 0x37f9, 0x37f2, 0x37fa, 0x37f3, 0x3814, 0x37fd, 0x380f, + 0x380e, 0x3801, 0x3937, 0x3935, 0x3934, 0x3931, 0x3a7a, 0x3a7b, 0x3c37, + 0x412b, 0x40fb, 0x4116, 0x4113, 0x3d93, 0x4111, 0x410f, 0x411b, 0x4138, + 0x44a4, 0x4709, 0x4707, 0x470b, 0x48d3, 0x48d1, 0x48d8, 0x4b1d, 0x4ba9, + 0x4bd0, 0x7215, 0x4f02, 0x4f05, 0x4f01, 0x4f00, 0x532e, 0x5330, 0x532f, + 0x5331, 0x55d2, 0x55d3, 0x5902, 0x5a40, 0x5a42, 0x5a3b, 0x5ace, 0x5d98, + 0x5d8f, 0x5d94, 0x5d91, 0x426f, 0x5dba, 0x5d90, 0x5d86, 0x5d9a, 0x5d8c, + 0x5d93, 0x5d87, 0x5d88, 0x5d97, 0x5d8d, 0x5d9c, 0x5dbd, 0x5f3c, 0x5f59, + 0x42b0, 0x61d1, 0x61bb, 0x61be, 0x625d, 0x63e2, 0x6605, 0x68ba, 0x352e, + 0x68f4, 0x69b2, 0x69f9, 0x6ab7, 0x6ab6, 0x7089, 0x70f9, 0x70d9, 0x70e8, + 0x70d4, 0x70db, 0x70e2, 0x70df, 0x70d1, 0x70e9, 0x70ea, 0x7213, 0x7211, + 0x74fa, 0x74f8, 0x74f4, 0x74fb, 0x750e, 0x7502, 0x750f, 0x7790, 0x77ad, + 0x77a9, 0x7948, 0x7b5a, 0x7b4f, 0x7b4e, 0x7b55, 0x7b54, 0x7b4a, 0x7bd5, + 0x7c18, 0x7c8d, 0x7d1d, 0x7d19, 0x7e26, 0x7e28, 0x7e2b, 0x7e7d, 0x7fa0, + 0x7f9a, 0x7f9b, 0x81b5, 0x81ad, 0x81b2, 0x8294, 0x83c9, 0x864e, 0x864f, + 0x8644, 0x8652, 0x88e9, 0x8939, 0x4969, 0x957e, 0x8dc7, 0x8dd3, 0x8dc6, + 0x8dc3, 0x49b4, 0x8dd2, 0x8f66, 0x917f, 0x9180, 0x9184, 0x9185, 0x91e3, + 0x4a4d, 0x9241, 0x9244, 0x9243, 0x934e, 0x934f, 0x4a83, 0x9349, 0x934a, + 0x934b, 0x9343, 0x93e0, 0x93e5, 0x93e1, 0x93e6, 0x93e2, 0x940c, 0x9440, + 0x9549, 0x954a, 0x9554, 0x954c, 0x9555, 0x9556, 0x963b, 0x963d, 0x97a4, + 0x97a8, 0x97c3, 0x97bf, 0x97c8, 0x97c2, 0x97ca, 0x97cc, 0x97c9, 0x97be, + 0x97cd, 0x97c7, 0x97c5, 0x985d, 0x4bb0, 0x996c, 0x996b, 0x9970, 0x996d, + 0x996f, 0x9989, 0x9984, 0x9a8d, 0x9a8a, 0x9a8e, 0x9a91, 0x9bb5, 0x9bb1, + 0x9baf, 0x9bb9, 0x9bb7, 0x9bb0, 0x4c0c, 0x9c17, 0x4c18, 0x9c4f, 0x9d19, + 0x9d10, 0x9d18, 0x9d11, 0x9d1c, 0x9d12, 0x9e76, 0x9e71, 0x9c20, 0x9e7a, + 0x9e7f, 0x9c22, 0x9e73, 0x9eab, 0x9c1e, 0x9e77, 0x9e74, 0x9e7e, 0x9e9b, + 0x9e84, 0x9e7c, 0xa129, 0xa12b, 0xa10e, 0xa100, 0xa10b, 0xa0fe, 0xa0fa, + 0xa117, 0xa0ff, 0xa10c, 0xa10f, 0x4cf5, 0xa102, 0xa101, 0xa0fc, 0xa149, + 0xa106, 0xa112, 0xa113, 0xa278, 0xa35b, 0xa362, 0xa35f, 0xa35d, 0xa3ab, + 0xa3d5, 0xa3d4, 0xa3d3, 0xa407, 0xa46c, 0xa470, 0xa46e, 0xa468, 0xa46d, + 0xa477, 0xa46a, 0xa4ce, 0xa4ec, 0xa569, 0xa568, 0xa5a6, 0xa5a9, 0xa5aa, + 0xa600, 0xa60d, 0xa5f8, 0xa5fc, 0xa60a, 0xa5f7, 0xa601, 0xa6b6, 0xa6bb, + 0xa6b7, 0xa6b9, 0xa6ca, 0x0469, 0x0625, 0x1159, 0x1507, 0x1509, 0x1922, + 0x1b07, 0x1b04, 0x330f, 0x1cf8, 0x1fc7, 0x1fd1, 0x217e, 0x2308, 0x244a, + 0xf898, 0x24b9, 0x2e88, 0x2e91, 0x2e84, 0x2e73, 0x2e89, 0x2e85, 0x3033, + 0x3313, 0x381d, 0x381f, 0x381c, 0x3820, 0x381a, 0x381b, 0x3939, 0x39af, + 0x3ae5, 0x3c3c, 0x4137, 0x413a, 0x44bb, 0x3e0e, 0x4710, 0x470d, 0x4baf, + 0x4c11, 0x3fd8, 0x4f0d, 0x4f0c, 0x4f0b, 0x50d4, 0x533d, 0x533e, 0x533b, + 0x5343, 0x5340, 0x5346, 0x5411, 0x55dd, 0x55df, 0x55ea, 0x574a, 0x5906, + 0x5dc1, 0x5db9, 0x5dc6, 0x5db8, 0x5dbb, 0x5dc8, 0x5dc5, 0x5dbf, 0x5dc7, + 0x5dc4, 0x5f65, 0x5f67, 0x61d7, 0x61db, 0x61d4, 0x61d6, 0x63e8, 0x660a, + 0x6abd, 0x6abe, 0x711a, 0x710d, 0x710f, 0x711b, 0x7110, 0x7111, 0x7113, + 0x7218, 0x7520, 0x751f, 0x7523, 0x751d, 0x7537, 0x7525, 0x7524, 0x752a, + 0x7527, 0x7533, 0x7528, 0x7534, 0x77ba, 0x8970, 0x789d, 0x794c, 0x7b5c, + 0x7b6a, 0x7b5d, 0x7b65, 0x7b63, 0x7b5e, 0x7c19, 0x7c97, 0x7e3f, 0x7e33, + 0x7e32, 0x7fa1, 0x7fa5, 0x7fa4, 0x7fa2, 0x81c1, 0x482c, 0x81c7, 0x81c4, + 0x81c6, 0x81c5, 0x81d4, 0x81ca, 0x8653, 0x88f1, 0x8921, 0x496e, 0x8bb7, + 0x8b92, 0x8dd4, 0x8f44, 0x9198, 0x919b, 0x9191, 0x9195, 0x919a, 0x9192, + 0x9353, 0x9357, 0x4a86, 0x935c, 0x935d, 0x9364, 0x93ea, 0x93ed, 0x9442, + 0x9443, 0x9564, 0x9561, 0x9560, 0x967d, 0x97d4, 0x97d5, 0x97d9, 0x9987, + 0x9999, 0x998c, 0x998a, 0x998f, 0x4bb3, 0x998b, 0x9982, 0x999b, 0x4beb, + 0x9bc8, 0x9bc4, 0x9bcc, 0x9bc7, 0x9bc3, 0x9bc6, 0x9bcb, 0x9bca, 0x9bc9, + 0x9bcd, 0x9c53, 0x9d21, 0x9d29, 0x9d1d, 0x9d24, 0x9d28, 0x9c43, 0x9eb1, + 0x9eb2, 0x9eb5, 0x9ed6, 0x9eaf, 0x9eca, 0x9eb8, 0xfa12, 0xfa11, 0xa145, + 0xa147, 0xa134, 0xa16e, 0xa142, 0xa131, 0xa12e, 0xa156, 0xa138, 0xa137, + 0xa14b, 0xa12d, 0xa133, 0xa136, 0x9de0, 0xa148, 0xa2dc, 0x4d42, 0xa366, + 0xa36d, 0xa363, 0xa364, 0x4d41, 0xa367, 0xa3d9, 0xa40b, 0xa47e, 0xa48b, + 0xa526, 0xa52c, 0xa529, 0xa56f, 0xa56b, 0xa56d, 0xa56e, 0xa61c, 0xa611, + 0xa610, 0xa624, 0xa612, 0xa615, 0xa617, 0x4dac, 0x046f, 0x05ab, 0x082e, + 0x08c9, 0x0b96, 0x1185, 0x16a0, 0x192b, 0x230d, 0x3036, ERROR, 0x3b2f, + 0x3b2e, 0x33b1, 0x384a, 0x3837, 0x383c, 0x3838, 0x383a, 0x383e, 0x3849, + 0x3c4d, 0x3c7b, 0x3a80, 0x3a7f, 0x3ae3, 0x3c3f, 0x4152, 0x414e, 0x414a, + 0x414b, 0x44d5, 0x4ad8, 0x4b20, 0x4bb3, 0x4bb1, 0x4bb0, 0x4f17, 0x50d9, + 0x5349, 0x5413, 0x55ed, 0x55eb, 0x55ee, 0x590a, 0x590b, 0x5a4a, 0x5dd5, + 0x5dd7, 0x5dde, 0x5ddc, 0x5dee, 0x5f70, 0x42b2, 0x61d9, 0x63d7, 0x68cb, + 0x68c7, 0x69fc, 0x713b, 0x7139, 0x714b, 0x7143, 0x7140, 0x7146, 0x754d, + 0x7543, 0x7547, 0x754b, 0x7555, 0x7552, 0x7b5f, 0x4722, 0x7b7c, 0x7b7b, + 0x7fa8, 0x7fa9, 0x81de, 0x81d7, 0x81dd, 0x81d6, 0x81d8, 0x829b, 0x83e0, + 0x83e8, 0x83e6, 0x88f8, 0x88fb, 0x8bbb, 0x9459, 0x8bb8, 0x4970, 0x8cc1, + 0x8cc0, 0x91a4, 0x91ab, 0x924d, 0x9365, 0x9367, 0x936a, 0x9366, 0x9369, + 0x9573, 0x9580, 0x956f, 0x9571, 0x97e4, 0x97e6, 0x97e7, 0x99a0, 0x99a4, + 0x9aa2, 0x9aa7, 0x9aa4, 0x9bde, 0x9bdb, 0x9c58, 0x9c5c, 0x9d2f, 0x9d2e, + 0x9edd, 0x9ee4, 0x9ed8, 0x9ee7, 0x9eda, 0x9e75, 0x4c95, 0xa179, 0xa180, + 0xa17f, 0xa17c, 0xa175, 0xa17b, 0xa182, 0x4d00, 0xa189, 0xa174, 0xa17d, + 0xa17a, 0xa186, 0xa1a8, 0xa172, 0x4d02, 0xa18b, 0xa191, 0xa1b3, 0xa181, + 0xa282, 0xa2e1, 0xa2e3, 0xa2e2, 0xa376, 0xa374, 0xa372, 0xa375, 0xa40e, + 0xa40d, 0xa494, 0xa492, 0xa493, 0xa491, 0xa48f, 0xa495, 0xa4d0, 0xa4f7, + 0xa576, 0xa5af, 0x4d9f, 0xa626, 0xa625, 0xa62d, 0xa6a0, 0xa6c3, 0x04d7, + 0x0acc, 0x1179, 0x117a, 0x1515, 0x1fdb, 0x2185, 0x2970, 0x297b, 0x2ea5, + 0x2e9f, 0x3317, 0x33b2, 0x3839, 0x3840, 0x384e, 0x393e, 0x3ae8, 0x3ae7, + 0x4166, 0x4161, 0x44da, 0x4714, 0x48df, 0x4f18, 0x5039, 0x503a, 0x5730, + 0x5732, 0x590e, 0x5a4c, 0x5de8, 0x5df1, 0x5deb, 0x5dec, 0x5f74, 0x5f73, + 0x61f1, 0x6342, 0x633e, 0x6341, 0x652c, 0x68d2, 0x69bb, 0x7158, 0x7157, + 0x7156, 0x715a, 0x457d, 0x7561, 0x7568, 0x7565, 0x755f, 0x7564, 0x755e, + 0x755b, 0x7567, 0x77c3, 0x78a2, 0x7953, 0x7b7d, 0x7c20, 0x7fae, 0x7faf, + 0x7fb0, 0x81e7, 0x81e6, 0x81e9, 0x83f1, 0x83eb, 0x83ea, 0x83e9, 0x8663, + 0x8902, 0x88fe, 0x8bde, 0x8cc2, 0x8de6, 0x8f5d, 0x91ad, 0x9375, 0x9372, + 0x9377, 0x4af6, 0x9651, 0x97e8, 0x97ed, 0x97ee, 0x99b9, 0x99a1, 0x99b6, + 0x9aae, 0x9be8, 0x4c12, 0x9c1e, 0x9d31, 0x9d32, 0x4c91, 0x9f0e, 0x9f12, + 0x9f09, 0x9f05, 0x4c90, 0x9f03, 0x9f1f, 0x9f0d, 0x9f0c, 0x9f04, 0x9f0a, + 0xa1c2, 0xa1bf, 0xa1c9, 0xa1b2, 0xa1c1, 0xa1af, 0xa1b4, 0xa1b0, 0xa1b6, + 0xa1b7, 0xa1bb, 0xa1b1, 0xa2f0, 0xa378, 0xa37a, 0xa379, 0xa3e4, 0xa3e6, + 0xa49f, 0xa49d, 0xa498, 0xa499, 0xa4f9, 0xa530, 0xa582, 0xa581, 0xa5b3, + 0xa57f, 0xa63a, 0xa63e, 0xa648, 0x1186, 0x1936, 0x1b13, 0x1c22, 0x1fdd, + 0x25a7, 0x297d, 0x3a79, 0x331c, 0x3865, 0x3860, 0x3867, 0x3c4e, 0x3b1a, + 0x4ae3, 0x5734, 0x5918, 0x5a52, 0x5dfc, 0x5f79, 0x5f78, 0x5f76, 0x61fa, + 0x61f8, 0x652d, 0x68d6, 0x69bd, 0x69bf, 0x69be, 0x7144, 0x7170, 0x7162, + 0x716e, 0x756e, 0x757c, 0x7574, 0x7578, 0x7570, 0x7579, 0x7571, 0x77cc, + 0x78a7, 0x78a6, 0x7b93, 0x7c21, 0x7c9c, 0x829d, 0x83f4, 0x83f3, 0x8df0, + 0x91b8, 0x91b6, 0x91bd, 0x9373, 0x9382, 0x9587, 0x9656, 0x9659, 0x97f6, + 0x99c9, 0x99c5, 0x99c7, 0x99ca, 0x99c2, 0x99c4, 0x9bf2, 0x9bf0, 0x9d3b, + 0x9d3a, 0x9f26, 0x9f28, 0x9f34, 0x9f2d, 0xa1d7, 0xa1d2, 0xa1d6, 0xa1dc, + 0xa1d3, 0xa1d1, 0xa286, 0x4d1e, 0xa2ef, 0xa2ee, 0xa3e8, 0xa4ac, 0xa4a9, + 0xa4aa, 0xa4ab, 0xa4fb, 0xa533, 0xa588, 0xa5b6, 0xa5b7, 0xa5d0, 0xa5cf, + 0xa64f, 0xa659, 0xa64c, 0x1b18, 0x1fe0, 0x3869, 0x4173, 0x4172, 0x4ae8, + 0x55fb, 0x591c, 0x5e09, 0x5e0a, 0x5e08, 0x5f7d, 0x5f7f, 0x6267, 0x717a, + 0x717b, 0x77d1, 0xf9cb, 0x7b9d, 0x7c9d, 0x81fc, 0x81fb, 0x81fd, 0x83f5, + 0x83f6, 0x8c0f, 0x8c1d, 0x91c7, 0x91c1, 0x91bf, 0x9254, 0x937f, 0x93f5, + 0x958a, 0x958c, 0x965c, 0x9865, 0x99cf, 0x99d0, 0x9ab8, 0x9bfa, 0x9c66, + 0x9f40, 0x9f41, 0x9c72, 0xa1f7, 0xa1f3, 0xa1ef, 0xa1f4, 0xa1ed, 0xa1f2, + 0xa1f1, 0xa1f9, 0xa4b4, 0xa4fc, 0xa5bc, 0xa65e, 0xa65b, 0xa65f, 0xa65d, + 0xa6cf, 0xa6ce, 0x193a, 0x1fe1, 0x2315, 0x2314, 0x4178, 0x4179, 0x44e6, + 0x4bb8, 0x4f22, 0x55fe, 0x68db, 0x6a06, 0x6ac8, 0x7189, 0x7586, 0x78ad, + 0x7b99, 0x7bd8, 0x7c23, 0x7d23, 0x7fb5, 0x83f9, 0x8907, 0x8c1e, 0x8dfb, + 0x8f72, 0x8f73, 0x9387, 0x9449, 0x965d, 0x97f8, 0x9c03, 0x9f4e, 0x9f4d, + 0x9f50, 0x9f55, 0xa209, 0xa207, 0xa20c, 0xa203, 0xa206, 0xa20b, 0xa20a, + 0xa289, 0xa4bb, 0xa4ff, 0xa536, 0xa58b, 0xa666, 0xa669, 0xa667, 0xa6c2, + 0xa6d2, 0x1fe2, 0x3828, 0x2988, 0x335b, 0x3876, 0x417d, 0x45a6, 0x535a, + 0x5e17, 0x68dc, 0x718f, 0x7594, 0x7595, 0x7fb6, 0x8204, 0x87ee, 0x938a, + 0x93f9, 0x9c07, 0x9c1f, 0x9c2a, 0x9d45, 0x9f5c, 0x9f5b, 0x9f61, 0x9f5d, + 0xa218, 0xa21f, 0xa383, 0xa416, 0xa414, 0xa4bf, 0xa4c0, 0xa673, 0xa6c0, + 0x1517, 0x2989, 0x591e, 0x591f, 0x5a54, 0x5e18, 0x6205, 0x7195, 0x7598, + 0x759b, 0x7959, 0x8208, 0x8401, 0x91ce, 0x93fa, 0x9abe, 0x9d47, 0x9f6a, + 0x9f69, 0x9f68, 0x9f67, 0xa225, 0xa228, 0xa4c4, 0xa537, 0xa58d, 0xa58c, + 0x4d91, 0xf920, 0x5e22, 0x5f82, 0x77d9, 0x8c38, 0x93fb, 0x99e1, 0x9c72, + 0x9d48, 0x9f6c, 0x9f70, 0xa231, 0xa230, 0xa679, 0x5e23, 0x68f8, 0x9c74, + 0x9f73, 0xa234, 0xa387, 0xa3b2, 0xa5c2, 0xa67d, 0x1fe5, 0x938c, 0x9f77, + 0x9f75, 0xa238, 0xa23a, 0xa683, 0xa681, 0x4180, 0x7199, 0x4587, 0x944a, + 0x9d4a, 0xa23c, 0xa6c8, 0x5604, 0x78af, 0xa689, 0xa2fa, 0x9661, 0xa23f, + 0x7193, 0xa4c9, 0x77de, 0x9391, 0xa68e, 0xa68d, 0x7198, 0x69c5, 0xa6a5, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xf802, + 0x0062, 0x3405, 0x0088, 0x00d0, 0x00cf, 0x011e, 0x011f, 0x0120, 0x090e, + 0x092c, 0x0061, 0x0004, 0x0005, 0x0003, 0x3404, 0xf801, 0x007d, 0x008d, + 0x01a3, 0x01a4, 0x04db, 0x0500, 0xf81e, 0x06a3, 0x0832, 0x353f, 0x0ad4, + 0x0ad5, 0x1c23, 0x232c, 0x237a, 0x0503, 0x0007, 0x0008, 0x008f, 0x009c, + 0x00d5, 0x0112, 0x0113, 0x0114, 0x0121, 0x01a8, 0x01a6, 0x0476, 0x0501, + 0x053d, 0xf814, 0x053e, 0x0629, 0x0677, 0x0678, 0x06a6, 0x06a9, 0x06ac, + 0x0834, 0x0504, 0x097b, 0x0a10, 0x062f, 0x0ad7, 0x0b1c, 0x0b1f, 0x0b1a, + 0xf836, 0x0b1e, 0x0b9e, 0x0b9a, 0x11a0, 0x11a1, 0x15d2, 0x15d3, 0x19b9, + 0x1b1d, 0x1b55, 0x1cff, 0x1fe7, 0x382a, 0x2011, 0x2013, 0x2012, 0x21af, + 0x21b1, 0xf890, 0x232d, 0x237b, 0x239d, 0x239a, 0x38a7, 0x239f, 0x23a0, + 0x239c, 0x24bd, 0x38fa, 0x25aa, 0x306c, 0x3091, 0x3c74, 0x456a, 0xf929, + 0x5605, 0x626b, 0x626a, 0x00e0, 0x0012, 0x3400, 0x007f, 0x00a0, 0x0099, + 0x0095, 0x009e, 0x00df, 0x00de, 0x01af, 0x01ad, 0x01b0, 0x04df, 0x0543, + 0x0541, 0x0548, 0x0575, 0xf81a, 0x0632, 0x067b, 0x0679, 0x06b3, 0x34db, + 0x0ba7, 0x06b2, 0x06b0, 0x06b4, 0xf829, 0x08cd, 0x08ce, 0xf82b, 0x0910, + 0x0980, 0x09d3, 0x0a30, 0x0098, 0x0a2f, 0x0a31, 0x0ada, 0x0ad9, 0x0b27, + 0x0b28, 0x0b21, 0x0b25, 0x0ba6, 0x0ba2, 0x0ba1, 0x0ba4, 0xf839, 0x0baa, + 0x0ba5, 0x0ba3, 0x0064, 0x123f, 0x1244, 0x151b, 0x1553, 0x1584, 0x1586, + 0x15d5, 0xf860, 0x193e, 0x1940, 0x1bca, 0x1bc9, 0x1c26, 0x1d00, 0x1d31, + 0x1d3c, 0x1d30, 0x1d33, 0x1d32, 0x1d38, 0x2034, 0x2053, 0x2054, 0x21b4, + 0x21b2, 0x232f, 0x23a5, 0x23a7, 0x23a4, 0x23a8, 0x23a9, 0x23a2, 0x23a3, + 0x23a6, 0x2481, 0x2480, 0x25ad, 0x2a24, 0x2a65, 0x2a68, 0x2a69, 0x313c, + 0x313b, 0x335d, 0x3944, 0x4182, 0x44f1, 0x456b, 0x471b, 0x48eb, 0x4bba, + 0x4bd3, 0x4d13, 0x5922, 0x6af4, 0x820f, 0x8210, 0x0507, 0x9c0b, 0x9c0a, + 0x0019, 0x001a, 0x0018, 0x0066, 0x0082, 0x00a8, 0x00e5, 0x00e7, 0x00e4, + 0x0115, 0x0123, 0x0124, 0x0143, 0x01c3, 0x01bc, 0x01bb, 0x3438, 0x01b7, + 0x01b9, 0x01cf, 0xf80d, 0x047a, 0x047b, 0x04e1, 0x04e0, 0x0509, 0x054d, + 0xf816, 0x054b, 0x0579, 0x05b1, 0x0636, 0x0635, 0x0637, 0x0638, 0x067f, + 0x0680, 0x0681, 0x6953, 0x067e, 0x06cd, 0x06bf, 0x06be, 0x06c2, 0x06b8, + 0x06c1, 0x6530, 0x0931, 0x092f, 0x096f, 0x0982, 0x353a, 0x0987, 0x0986, + 0x098d, 0x0994, 0x09d7, 0x09d4, 0x09d8, 0x0a16, 0x0a14, 0x0a2e, 0x0a36, + 0x0a37, 0x1fee, 0x0ae0, 0x0ae5, 0x0adf, 0x0b2b, 0x0b29, 0x0b2d, 0x0b2f, + 0x0bb7, 0x0bc9, 0x0bc1, 0x0bca, 0x0bb2, 0x0bac, 0x0bae, 0x11b2, 0x11a8, + 0x11b0, 0x11a7, 0xf851, 0x1252, 0x124a, 0x1556, 0x1555, 0x155f, 0x155e, + 0x1588, 0xf85d, 0x15dd, 0x15e2, 0x15e1, 0x15df, 0x15e0, 0x16af, 0x16b1, + 0x16ba, 0x1945, 0x1943, 0x19bd, 0x19c8, 0xf86c, 0x19be, 0x19bf, 0xf874, + 0x1b59, 0x1c29, 0x1c2c, 0x1c2f, 0x1c2d, 0x1c2e, 0x1d04, 0x1d02, 0x1d01, + 0x1d40, 0x1d4a, 0x1d3f, 0x1d4f, 0x1d41, 0x1d4e, 0x1feb, 0x1fec, 0x00ac, + 0x205b, 0x2063, 0x205a, 0x2059, 0x21dc, 0x21db, 0x21d9, 0x21e0, 0x21dd, + 0x0020, 0x23b0, 0x23b1, 0x23b2, 0x23b6, 0x2451, 0x2452, 0x2450, 0x2484, + 0x38c9, 0x2483, 0x25c3, 0x25b8, 0x25b9, 0x25b2, 0x2990, 0x2a26, 0x2a29, + 0x2a6e, 0x3140, 0x313e, 0x3141, 0x335e, 0x33bb, 0x33bc, 0x33b9, 0xf8ef, + 0x3880, 0x3c4f, 0x3945, 0x39ba, 0x39bd, 0x3c56, 0x3c55, 0x3c75, 0x3c77, + 0x3c81, 0xf8fa, 0x3c83, 0x3c8b, 0x3c84, 0x4186, 0x4183, 0x418b, 0x456d, + 0x4616, 0x4728, 0x48ea, 0x4bd4, 0x4c03, 0x4d15, 0x4f3d, 0x4f3e, 0x5416, + 0xf94c, 0x5606, 0x574d, 0x6222, 0x6273, 0x626d, 0x626e, 0x64b1, 0x054e, + 0x662d, 0x43cd, 0x68f9, 0x6952, 0x6b00, 0x6afc, 0x6afa, 0x4492, 0x6af7, + 0x6af8, 0xf990, 0xf9c4, 0x7c27, 0x8211, 0x00ae, 0x8450, 0x844f, 0x844d, + 0x8671, 0xf9e2, 0x8672, 0x8e18, 0x0a44, 0x0021, 0x0067, 0x00af, 0x00b0, + 0x0029, 0x0117, 0x0122, 0xf803, 0x0025, 0x0128, 0x01ff, 0x01d9, 0x01db, + 0x01de, 0x01f2, 0x01fe, 0x01f4, 0x01dd, 0x3445, 0xf804, 0x0201, 0x01dc, + 0x047d, 0x0481, 0x047e, 0x047f, 0x04e5, 0x050f, 0x34b5, 0x050a, 0x34b6, + 0x050b, 0x0551, 0x0552, 0x0550, 0x05b8, 0x063d, 0x063e, 0x063c, 0x0687, + 0x06d7, 0x06db, 0x06cf, 0x06e0, 0x084c, 0x0842, 0x08d4, 0x0911, 0x0914, + 0x0915, 0x0912, 0x0933, 0x0935, 0x3537, 0x0971, 0x3530, 0x0991, 0x0993, + 0x0995, 0x09dc, 0x0a42, 0x0a40, 0x53a6, 0x0ae6, 0x128f, 0x0b32, 0xf837, + 0x0b31, 0x0bf5, 0x0bcd, 0x0bde, 0x0bd5, 0x0bda, 0x0bee, 0x0bec, 0x0bcf, + 0x0bce, 0xf83d, 0x0bcc, 0x0bf3, 0x11c1, 0x11c4, 0x11c6, 0x11b4, 0x11c3, + 0x11b8, 0x11bb, 0x11b7, 0x11bc, 0x11bf, 0x11c7, 0x11be, 0x1260, 0x125d, + 0x1276, 0x126c, 0x1275, 0x125b, 0x1271, 0x1273, 0x1261, 0x125a, 0x1262, + 0x1272, 0x125f, 0x1258, 0x151e, 0x1558, 0x158b, 0x158a, 0x15f4, 0x15f0, + 0x16d2, 0x16cd, 0x16ce, 0x16bc, 0x16d0, 0x1946, 0x1947, 0x373e, 0x374d, + 0x3751, 0x19ce, 0x19cf, 0x19cc, 0x19cb, 0xf872, 0x1b60, 0x1b5f, 0x1b5d, + 0x1bd4, 0x1c3a, 0x1c38, 0x1c3c, 0x1c36, 0x1d08, 0x1d7e, 0x1d5e, 0x1d6e, + 0x1d53, 0x1d70, 0x1d57, 0x1d5d, 0x1d63, 0x1d7a, 0x1d79, 0x1d93, 0xf881, + 0x201d, 0x2068, 0x2073, 0x2074, 0x2066, 0x206f, 0x2075, 0x207a, 0x2070, + 0x206d, 0x2065, 0x218a, 0x21ed, 0x21e9, 0x21e3, 0x21ef, 0x3873, 0x21ea, + 0x2331, 0xf891, 0x2338, 0x6b20, 0x2335, 0x233a, 0x2381, 0x2380, 0x23b8, + 0x23c1, 0x23ba, 0x2488, 0x24cf, 0x24ca, 0x24c7, 0x24c5, 0x24c8, 0x24d0, + 0x24c9, 0x25bb, 0x25b6, 0x25bd, 0xf89d, 0x25b4, 0x25c1, 0x25d1, 0x25d2, + 0x25cc, 0x25d4, 0x25cb, 0x25ce, 0x25d5, 0x25d8, 0x2995, 0x2993, 0x2999, + 0x2996, 0x39be, 0x2a89, 0x2a94, 0x2a91, 0x2a8f, 0x2a84, 0x2a97, 0x2a86, + 0x2a85, 0x2a8c, 0x2ef2, 0x2eed, 0x2eef, 0x30d9, 0x3146, 0x3147, 0x314b, + 0x3150, 0x314a, 0x314e, 0x314c, 0x3148, 0x3363, 0x3361, 0x3362, 0x3360, + 0x33c3, 0x33c5, 0x33c1, 0x33d0, 0xf8dc, 0x3882, 0x3c1e, 0x3886, 0x3884, + 0x394c, 0x3948, 0x39b8, 0x39bf, 0x39c1, 0x39c6, 0x39c5, 0x39c7, 0x39c0, + 0x39c3, 0x3aed, 0x3b03, 0x3b22, 0x3b21, 0x3c9f, 0x3c90, 0x3c9e, 0x3cc8, + 0x3ca0, 0x3c94, 0x3c95, 0x3ca1, 0x3cc3, 0x3cc7, 0x419a, 0x4190, 0x44f2, + 0x44f3, 0x456e, 0x45ab, 0x45a9, 0x461a, 0x4618, 0x461b, 0x4760, 0x474c, + 0x4742, 0x4733, 0x473f, 0x473e, 0x4738, 0x4743, 0x4746, 0x4736, 0x48ee, + 0x48f5, 0x48f4, 0x3f56, 0x4c1b, 0x3540, 0x4d2b, 0x4d29, 0x4d2a, 0x4d2e, + 0x503f, 0x50e6, 0x53a7, 0x53a8, 0x5418, 0x5608, 0x5750, 0x5753, 0x5a56, + 0x5a55, 0x626f, 0x627f, 0x64b3, 0x663a, 0x6638, 0x6637, 0x6636, 0x0554, + 0xf980, 0x68dd, 0x68fc, 0x68fa, 0x6933, 0x6b04, 0x6b07, 0x6b08, 0x6b06, + 0x6b09, 0xf991, 0xf993, 0x721e, 0xf9d2, 0x840b, 0x8443, 0x8452, 0x8458, + 0x845e, 0x8668, 0x868d, 0x8682, 0x867b, 0x8c58, 0x49bd, 0xf800, 0x002c, + 0x002e, 0x160b, 0x002d, 0x0069, 0x00b2, 0x00b6, 0x00a9, 0x00ed, 0x0119, + 0x014f, 0x0216, 0x0203, 0x020e, 0x0204, 0x0207, 0x0210, 0x0227, 0x0228, + 0x020d, 0x0229, 0x020f, 0x0222, 0x0211, 0x0485, 0x0484, 0x0483, 0x048a, + 0x0486, 0x0510, 0x0558, 0x055a, 0x070c, 0x05c4, 0x05c5, 0x0647, 0x0649, + 0x064a, 0x064b, 0x21bb, 0x068d, 0x068b, 0x0707, 0x0706, 0xf820, 0x06ef, + 0x06f0, 0x06ed, 0x06f9, 0x0702, 0x06e7, 0x06f4, 0x06f7, 0x06f1, 0x0853, + 0x0855, 0x351a, 0x08da, 0x08d9, 0x352c, 0x0938, 0x0999, 0x09a2, 0x099c, + 0x099a, 0x099b, 0x09e5, 0x09e3, 0x09e1, 0x09e0, 0x09e2, 0x09e4, ERROR, + 0x09e8, 0xf82f, 0x0a13, 0x0a56, 0x0a4b, 0x0a4a, 0x0a4d, 0x0a4c, 0x3549, + 0x0aea, 0x0ae9, 0x0aeb, 0x0aec, 0x0b3a, 0x0b3c, 0x0b39, 0x0b3b, 0x0c14, + 0x0c0e, 0x0c35, 0x0c0a, 0x0c3f, 0x0c38, 0x357c, 0x0c4e, 0x0c17, 0xf83f, + 0x0c1e, 0x11b6, 0x11ce, 0x11ca, 0x11cb, 0x11cc, 0x11c9, 0x12b4, 0x12ac, + 0x1288, 0x1286, 0x128c, 0x1293, 0x128a, 0x12a4, 0x1287, 0x12a5, 0x12a6, + 0x1285, 0x12a3, 0x128e, 0x151f, 0x1563, 0x158d, 0x15fa, 0x15fb, 0x1609, + 0x15fe, 0x15ff, 0x1602, 0x1604, 0x15fd, 0x1605, 0x16f9, 0x16f7, 0x16db, + 0x16da, 0x1951, 0x1950, 0x1957, 0x19e2, 0x19d8, 0x19da, 0x19dc, 0x1b20, + 0x1b1f, 0x1b69, 0x1bdd, 0x1c40, 0x1c41, 0x1c43, 0x1d0d, 0x1d0c, 0x1d87, + 0x1da9, 0x1d92, 0x1d85, 0x37bf, 0x1d8c, 0x1da2, 0x1d8f, 0x1d8a, 0x37ba, + 0x1d8d, 0x1ff1, 0x2037, 0x208b, 0x2087, 0x2082, 0x218e, 0x21bc, 0x21f8, + 0x21fa, 0x21eb, 0x21f9, 0x21fc, 0x2205, 0x231b, 0x231d, 0x231e, 0xf892, + 0x233c, 0x233e, 0x2384, 0x23c8, 0x23c9, 0x23d3, 0x23c7, 0x23d2, 0x2455, + 0xf896, 0x248c, 0x248a, 0x24d5, 0x24d3, 0x38d8, 0x24d8, 0x25d0, 0x25ee, + 0x25f1, 0x25fb, 0x25d3, 0x25ec, 0x25cd, 0x2615, 0x2626, 0x260e, 0x2627, + 0x262a, 0x2600, 0x2604, 0x2628, 0x2608, 0x2614, 0x299b, 0x39b2, 0x29a1, + 0x299d, 0x29a0, 0x299e, 0x29a2, 0x299c, 0x2a32, 0x2a34, 0x2a93, 0x2a96, + 0x2a90, 0x2ab4, 0x2ab5, 0xf8b6, 0x2ab6, 0x2ac2, 0xf8b5, 0x2aba, 0x2a92, + 0x2efb, 0x2f05, 0x2ef3, 0x2efe, 0x2efd, 0x455d, 0x2efa, 0x3043, 0x3095, + 0x3094, 0x3ac4, 0x316f, 0x3173, 0x315c, 0x315b, 0x3166, 0x3174, 0x3163, + 0x3167, 0x3160, 0x3162, 0x3171, 0x3172, 0x315e, 0x3323, 0x3326, 0x3364, + 0xf8d6, 0x33f2, 0x3401, 0x33dd, 0x33dc, 0x33db, 0x33f3, 0x33fd, 0x33d8, + 0x33f8, 0x33fb, 0x3883, 0x388c, 0x388e, 0x3949, 0x3954, 0x3952, 0x394e, + 0x3958, 0x3951, 0x3955, 0x3953, 0x3957, 0x3950, 0x394f, 0x394d, 0x39d2, + 0x39d3, 0x39c9, 0x39d4, 0x3aef, 0xf8f8, 0x00b1, 0x3b05, 0x3b04, 0x3b2e, + 0x3b2d, 0x3c45, 0x3c5b, 0x3c5a, 0x3c59, 0x3c9d, 0x3c8e, 0x3cbc, 0x3cdd, + 0x3cba, 0xf8fd, 0x3cd8, 0x3ccb, 0x3cd9, 0x3cda, 0x3cc4, 0x3cb8, 0x3cbf, + 0x3cdb, 0x3cc1, 0xf8fc, 0x3cc5, 0xf919, 0x41b1, 0x41af, 0xf918, 0x44f7, + 0x44f6, 0x44f8, 0x4550, 0x4551, 0x4571, 0x4570, 0x45b0, 0x45af, 0x45ae, + 0x45ad, 0x4625, 0x462c, 0x4622, 0x4633, 0x4634, 0x3e2b, 0x473a, 0x4740, + 0x4768, 0x3e61, 0x4764, 0x475c, 0x4757, 0x4753, 0x474f, 0x4751, 0x4754, + 0x4766, 0x72dd, 0x3eb2, 0x490d, 0x4908, 0xf92b, 0x48fa, 0x4aea, 0x4b2a, + 0x4bbb, 0x4bd5, 0x4bd7, 0x1da4, 0x00f0, 0x00b5, 0x4c06, 0x4c28, 0x4c22, + 0x4c21, 0x2456, 0x4c23, 0x11cd, 0x4d30, 0x4d34, 0x4fc9, 0x4fca, 0x4fc8, + 0xf93d, 0x5044, 0x50f3, 0xf941, 0x50f8, 0x50fc, 0x50f6, 0x50fb, 0x50f7, + 0x5100, 0x5102, 0xf940, 0xf94d, 0x5424, 0x560d, 0x4129, 0x5762, 0x5930, + 0x592b, 0x592a, 0x4192, 0x592d, 0x5ada, 0x5e28, 0x5f86, 0x6277, 0x627c, + 0x6350, 0x634e, 0x63f2, 0x64b2, 0x64ce, 0x64cf, 0x64e5, 0x3407, 0x6535, + 0x6531, 0x6613, 0x662b, 0x662c, 0x6645, 0x6660, 0x6641, 0x6658, 0x6647, + 0x665b, 0x6650, 0xf982, 0x665f, 0x664a, 0x6656, 0x6643, 0x6644, 0x6651, + 0x68fd, 0x6934, 0x6935, 0x6954, 0x6955, 0x6a0c, 0x6a0b, 0x6a0a, 0x6af9, + 0x6b35, 0x6b24, 0x6b13, 0x6b1c, 0x6b69, 0x6b25, 0x6b21, 0xf995, 0xf996, + 0xf998, 0x7220, 0x75a9, 0x75a8, 0x75de, 0x7609, 0x760a, 0x760b, 0x77e3, + 0x7807, 0x78b2, 0x78b3, 0x795d, 0x7e58, 0x7e86, 0x7e87, 0x7fb9, 0x7fb8, + 0x840c, 0x8444, 0x8466, 0x8480, 0x8475, 0x846d, 0x847e, 0x8467, 0x8481, + 0x8477, 0x86a8, 0x86a2, 0x86a5, 0x869b, 0x8c57, 0x8e0f, 0x8e32, 0x8e2c, + 0x8e33, 0x91e7, 0x006e, 0x00b7, 0x00f6, 0x00f2, 0x00f3, 0x0517, 0x0130, + 0x0154, 0x0153, 0x0252, 0x023d, 0x023c, 0x0234, 0x0233, 0x0254, 0x022f, + 0x3458, 0x0255, 0x023f, 0x0237, 0x0256, 0x0261, 0x0258, 0xf806, 0x023b, + 0x0232, 0x022e, 0x023e, 0x003b, 0x048c, 0x048d, 0x0513, 0x0516, 0x0512, + 0x055b, 0x058a, 0x05d7, 0x05ce, 0x0650, 0x0651, 0x064f, 0x068e, 0x068f, + 0x06f2, 0xf821, 0x0728, 0x071a, 0x0725, 0x071d, 0x0714, 0x0720, 0x071f, + 0x071b, 0x0717, 0x0715, 0x071c, 0x0713, 0xf825, 0x0860, 0x351c, 0x0866, + 0x08e3, 0x08de, 0x08e0, 0x08e1, 0x091a, 0x091b, 0x0918, 0x091c, 0x0919, + 0x0942, 0x0940, 0x093e, 0x0944, 0x0974, 0x0943, 0xf82d, 0x09f2, 0x0a1b, + 0x0a19, 0x0a1e, 0xf830, 0x0a5e, 0x0a66, 0x0a5d, 0x0a5a, 0x0a5f, 0x0a60, + 0x0a5b, 0x0a5c, 0x0a59, 0x0af0, 0x0af1, 0x0b43, 0x0b40, 0x0b42, 0x0b41, + 0x0b3f, 0x0c57, 0x0c69, 0x0c6f, 0x0cab, 0x0c71, 0x0c93, 0x0c56, 0x0c90, + 0x0c6d, 0x0c6c, 0x0c70, 0x0c66, 0x0c67, 0x11d7, 0x11b5, 0x11db, 0x11d8, + 0x11d5, 0x11d4, 0x12ba, 0x12b7, 0x12be, 0x12b9, 0x3637, 0x12e0, 0x12dd, + 0x12de, 0x4918, 0x12d8, 0x12bd, 0x12db, 0x151d, 0x1525, 0x1721, 0x170c, + 0x1729, 0x172d, 0x171b, 0x170e, 0x171f, 0x1704, 0x171c, 0x1705, 0x1706, + 0x1720, 0x170d, 0x172a, 0x1723, 0x1711, 0x195c, 0x1966, 0x195b, 0x194f, + 0x195e, 0x195d, 0x19f1, 0x19ea, 0x19f4, 0x19eb, 0x19f0, 0x19fa, 0x19fb, + 0x1b28, 0x1b2c, 0x1b6b, 0x1b2a, 0x1b6a, 0x1b6f, 0x1bdb, 0x1be0, 0x4fd1, + 0x1be3, 0x1be5, 0x1be7, 0x1c4d, 0x1c55, 0x1c54, 0x1c53, 0x1c52, 0x1c4e, + 0x1c60, 0x21c0, 0x1d0f, 0x1d11, 0x1d13, 0x1dc6, 0x1db3, 0x1dc7, 0x1dd2, + 0x1db8, 0x1dac, 0x1dae, 0x1dcf, 0x1dc5, 0xf87b, 0x1dcc, 0x1dab, 0x1dc9, + 0x1db9, 0x1ffb, 0x1ff8, 0x1ff7, 0x1ff9, 0x2020, 0x203b, 0x2039, 0x209e, + 0x209a, 0x20aa, 0x20ab, 0x20af, 0x2096, 0x20a9, 0x20a6, 0x2091, 0x3843, + 0x20ae, 0x209f, 0x20ac, 0x20a0, 0x2192, 0x2191, 0x21bf, 0x2217, 0x220a, + 0x220c, 0x234a, 0x2346, 0x2334, 0x2345, 0x2343, 0x2344, 0xf893, 0x2387, + 0x2386, 0x238a, 0x23da, 0x23d8, 0x38b4, 0x0518, 0x0134, 0x23d6, 0x23d4, + 0x2454, 0x2459, 0x245a, 0x2457, 0x38e0, 0x24dd, 0x24e9, 0x24e0, 0x2605, + 0x2612, 0x2613, 0x2607, 0x2616, 0x2623, 0x2602, 0xf8a1, 0x264a, 0x2636, + 0x2640, 0x2656, 0x2643, 0xf8a0, 0x264b, 0x2646, 0x263e, 0x2649, 0x29a7, + 0x29b6, 0x29a6, 0x29a8, 0x29ac, 0x29a9, 0x29ab, 0x2a38, 0x2a37, 0x2a39, + 0x2a41, 0x2a3e, 0x2ac0, 0x2abb, 0x2abf, 0x2abd, 0x2afe, 0x2b1e, 0x2aee, + 0x2afc, 0xf8b7, 0x2af9, 0x2b06, 0x2ae4, 0x2ae9, 0x2ae5, 0x2b03, 0x2afd, + 0x2b49, 0x2ebe, 0x2f0a, 0x5626, 0x2f18, 0x2f0d, 0x2f0f, 0x2f0e, 0x2f20, + 0x3071, 0x3099, 0x30e2, 0x30df, 0x30de, 0x3178, 0x3179, 0x3ae4, 0x317c, + 0x317d, 0x3184, 0x318b, 0x318a, 0xf8d2, 0x3189, 0x332c, 0x3329, 0x336c, + 0x6804, 0x3409, 0x3408, 0x340c, 0x340d, 0x3410, 0x3c26, 0x389f, 0x3898, + 0x38a2, 0x389a, 0x39d5, 0x39e2, 0x39f0, 0x39ea, 0x39eb, 0x39ed, 0x39e8, + 0x39e0, 0x3a85, 0x3a86, 0x3af0, 0x1e46, 0x3b45, 0x3b38, 0x3b3e, 0x3b42, + 0x3b40, 0x3c47, 0x3c5c, 0x3c5e, 0x3cb4, 0x3cc2, 0x3d14, 0x3ce5, 0x3d15, + 0x3d11, 0xf8ff, 0x3cee, 0x3ce7, 0x3cf5, 0x3cf4, 0x3ce8, 0x3d01, 0x3cef, + 0x3cf1, 0xf900, 0x41db, 0x41bf, 0x41da, 0x41c7, 0x41dd, 0xf91a, 0x41eb, + 0x41e1, 0x41c1, 0x41bd, 0x4507, 0x44fd, 0x4501, 0x450a, 0x4503, 0x4572, + 0x4574, 0x4575, 0x45b2, 0x45b1, 0x45b4, 0x464c, 0x4642, 0x4640, 0x4649, + 0x463c, 0x464d, 0x464a, 0x463b, 0x4761, 0x4774, 0xf926, 0x477f, 0x477a, + 0x4788, 0x477c, 0x3e6f, 0x4770, 0x490f, 0x4928, 0x4913, 0x492a, 0x4aed, + 0x4aef, 0x4b2e, 0x4bc1, 0x4bdd, 0x0b47, 0x4c2d, 0x4c2b, 0x4c35, 0x4c2f, + 0x4c31, 0x4c34, 0xf935, 0x4c30, 0x4d3a, 0x4d39, 0x4d37, 0x4d4b, 0x4d54, + 0x4d4d, 0x4d51, 0x4d47, 0x4f27, 0x4f50, 0x4f4d, 0x4f4e, 0x4f54, 0x4fd2, + 0x4fce, 0x504b, 0x5049, 0x5105, 0x510f, 0x5119, 0xf943, 0x5106, 0x510c, + 0x5129, 0x5104, 0x5108, 0x5125, 0x401c, 0x5103, 0x5127, 0x5110, 0x510a, + 0xf942, 0x6b5d, 0x53aa, 0x53ab, 0x53a9, 0x5441, 0x543a, 0x543c, 0x542b, + 0x5449, 0x5615, 0x4100, 0x5616, 0xf953, 0x5631, 0x3c4a, 0x573c, 0x577c, + 0x576d, 0x576a, 0x5763, 0x576b, 0x577b, 0x5764, 0x577a, 0x5769, 0x576f, + 0x5937, 0x5935, 0x593c, 0x5936, 0x593d, 0x593e, 0x5ae1, 0x5ae0, 0x5e2d, + 0x5e2b, 0x5f8d, 0x5f92, 0x42b6, 0x5f8e, 0xf96b, 0x5f91, 0x5f96, 0x627b, + 0x6278, 0x6281, 0x6296, 0x62a3, 0x6295, 0x6297, 0x6354, 0x6352, 0x63f5, + 0x6400, 0x63fb, 0x63f4, 0x63f6, 0x64e8, 0x64ea, 0x663e, 0x663d, 0x663b, + 0x6680, 0x43e4, 0x6688, 0x6681, 0x6682, 0x66ce, 0x6683, 0x6677, 0x6679, + 0x6673, 0x666d, 0x6670, 0x668d, 0x6675, 0x668c, 0x666a, 0x6691, 0x6689, + 0x668e, 0x12dc, 0x68ff, 0x6959, 0x69c7, 0x6a12, 0x6a14, 0x6a13, 0x6acb, + 0x6b42, 0x44ad, 0x6b3d, 0x82ff, 0x6b40, 0x6b44, 0x6b62, 0x6b43, 0x6b3f, + 0x6b45, 0x6b3c, 0xf997, 0x6b46, 0x6b47, 0xf9b3, 0x719e, 0x719d, 0x722c, + 0x7229, 0x722f, 0x722e, 0x7230, 0x75e1, 0x75e2, 0x760e, 0x7619, 0x7612, + 0x78b4, 0x7bda, 0x7d26, 0x7e59, 0x7e5a, 0x7e88, 0x7fc0, 0x7fba, 0x82a0, + 0xf9dd, 0x82a2, 0x8486, 0x8fec, 0x849d, 0x8488, 0x848f, 0x848e, 0x849b, + 0x86c1, 0x86c3, 0x86c4, 0x8696, 0x86c7, 0x86c6, 0x86bf, 0x48c3, 0x890f, + 0x8e55, 0x8e42, 0x8e46, 0x8e4b, 0x8e43, 0x8e53, 0x8e48, 0x8e49, 0x8e4a, + 0x8e4e, 0x4bde, 0x0691, 0x944b, 0x9680, 0x9681, 0x9683, 0x028a, 0x9682, + 0x2342, 0x0922, 0x0070, 0x0071, 0x00bc, 0x1d18, 0x00be, 0x00ba, 0x00f8, + 0x0137, 0x0135, 0x0afc, 0x0156, 0x0159, 0x015e, 0x026d, 0x0291, 0x0292, + 0x0268, 0x0266, 0x0273, 0x3467, 0x0296, 0x028b, 0x028c, 0x0496, 0x04ee, + 0x051c, 0x051a, 0x0519, 0x051b, 0x055d, 0x055e, 0xf818, 0x05dc, 0x05e2, + 0x0652, 0x0692, 0x0730, 0x0752, 0x0742, 0x0741, 0x0745, 0x0737, 0x0740, + 0x073f, 0x073d, 0x0738, 0x073a, 0x0749, 0x086b, 0x0878, 0x0879, 0xf826, + 0x086c, 0x08e9, 0x08e6, 0x08e5, 0x08ea, 0x08e7, 0x08e8, 0x091f, 0x094b, + 0x094a, 0x0953, 0x0976, 0x09a3, 0x09a4, 0x09f6, 0x09f3, 0x09f9, 0x09f7, + 0x09fc, 0x0a1d, 0x0a6d, 0x0a71, 0x0a6c, 0x0a6e, 0x0a70, 0x0a6f, 0x0a67, + 0x0a68, 0x0afa, 0x0af9, 0x0b4e, 0x53de, 0x0b4d, 0x0b4f, 0x0b4a, 0x0b4c, + 0x3596, 0xf842, 0x0cee, 0x0cb2, 0x0cc0, 0x0cc1, 0x0cf4, 0x0cc8, 0x0cc5, + 0x0cc6, 0x0cad, 0x11e2, 0x11ea, 0x11e3, 0x11e1, 0x12f7, 0x1301, 0x1312, + 0x12f6, 0x12f1, 0x131f, 0x12ee, 0xf852, 0x12f3, 0x1315, 0x1316, 0x1317, + 0x12f8, 0x1319, 0x12f2, 0x12f4, 0x12f5, 0x1313, 0x1306, 0x1526, 0x1524, + 0x155a, 0x2ec8, 0x1597, 0x1595, 0x159a, 0x161f, 0x0afb, 0x1629, 0x1620, + 0xf862, 0xf863, 0x174c, 0x1730, 0x1738, 0x173d, 0x1751, 0x174f, 0x174a, + 0x1734, 0x1736, 0x5a30, 0x196a, 0x1968, 0x1a1c, 0x1a0e, 0x1a1e, 0x3759, + 0x1a09, 0x1a08, 0x1a13, 0x1a01, 0x1a0f, 0x1a14, 0x1a06, 0x1a07, 0x5bb2, + 0xf873, 0x3776, 0x1b79, 0x1bea, 0x1bed, 0x1be9, 0x1bee, 0x1c68, 0x1c64, + 0x1c67, 0x1c72, 0x1c62, 0x1c74, 0x1c79, 0x1d19, 0x1d17, 0x1d15, 0x1d16, + 0x1de6, 0x62a4, 0x1dee, 0x37d2, 0x1ddf, 0x1de4, 0x1dda, 0x1dea, 0x1ded, + 0x1de3, 0x1de9, 0x1ffd, 0x0657, 0x2021, 0x20c6, 0x20b8, 0x20cb, 0xf885, + 0x20bd, 0x20b5, 0x20bb, 0x20bf, 0x20be, 0x20b2, 0x20c1, 0x20c2, 0x2199, + 0x21c6, 0x222c, 0x222d, 0x2225, 0x221e, 0x221f, 0x2223, 0x2350, 0x234e, + 0x234d, 0x2352, 0x23e9, 0x23ec, 0x23e8, 0x2458, 0x245c, 0x245b, 0x248f, + 0x3972, 0x24f6, 0x2500, 0x24fc, 0x24f8, 0x24ea, 0x24fe, 0x24f7, 0x24fd, + 0x2670, 0x2662, 0x2644, 0x3920, 0x264d, 0x264c, 0x263f, 0x2666, 0x2635, + 0x3929, 0x2634, 0x268d, 0x2684, 0x3938, 0x2686, 0x2689, 0x2687, 0x2683, + 0x2675, 0x2679, 0x26af, 0x26b0, 0x29b7, 0x29bb, 0x29b9, 0x2a46, 0x2a47, + 0x2a45, 0x2aea, 0x2af6, 0x2b68, 0x2b39, 0xf8b9, 0x2b3d, 0x2b3b, 0x2b4d, + 0x2b30, 0x2b4a, 0x2b3e, 0x2b40, 0x2b4c, 0x2b47, 0x2b38, 0x2b52, 0x2b3a, + 0x2b53, 0x2ec4, 0x2ec1, 0x2f1c, 0x2f1d, 0x2f2a, 0x2f1e, 0x2f2f, 0x2f22, + 0x2f2e, 0x2f25, 0x3a89, 0x3ab0, 0x304a, 0x304b, 0x3076, 0x3abf, 0x30e8, + 0x30ef, 0x30e9, 0x3ac5, 0x30ea, 0xf8cc, 0x3aea, 0x319b, 0x319e, 0x3193, + 0x31a7, 0x319c, 0x31a0, 0x319a, 0x31ab, 0x31be, 0x31a9, 0x332d, 0x336e, + 0x3444, 0x343d, 0x343a, 0x3468, 0x343c, 0x346a, 0xf8e0, 0x3438, 0x3465, + 0x3439, 0x346d, 0x3436, 0xf8e3, 0x343e, 0x347e, 0x3437, 0x3899, 0x38a9, + 0x38ad, 0x38a7, 0x38a8, 0x3966, 0x3969, 0x396d, 0x3967, 0x396b, 0x396a, + 0x39ee, 0x3a01, 0x3a03, 0x39f4, 0x39fb, 0x3c37, 0x39f6, 0x39fc, 0x3af4, + 0x3b08, 0x3b0a, 0x3b09, 0x3b6d, 0x3b62, 0x3b41, 0x3b5e, 0x3b5c, 0x3cf3, + 0x3d26, 0x3ce4, 0x3d39, 0xf904, 0x3d6c, 0x3d2b, 0x3d2e, 0x3d3b, 0x3d5e, + 0x3dfb, 0x3d27, 0x3d24, 0x3d69, 0x3d30, 0xf905, 0x3d62, 0x3d38, 0x3d35, + 0x3d2a, 0x3d2c, 0x3d68, 0x3d31, 0x3d2f, 0x3d2d, 0x3d3a, 0x3d36, 0xf903, + 0x3d21, 0x3d3c, 0x3d20, 0x3d64, 0x3d3e, 0x3ce8, 0x41f7, 0x4212, 0x41f1, + 0x41f5, 0x4222, 0x41f2, 0x41df, 0x4215, 0x4216, 0x457a, 0x4576, 0x45be, + 0x3e20, 0x45bd, 0x4609, 0x4608, 0x4657, 0x47a3, 0x47bf, 0x47b8, 0x47af, + 0x479c, 0x47a5, 0x4772, 0x4775, 0x479d, 0x4799, 0x47b9, 0x494e, 0x4939, + 0x493b, 0x4935, 0x493c, 0x4955, 0x4af0, 0x4af3, 0x4af4, 0x4b3b, 0x4b3c, + 0x4b3a, 0x4b36, 0x4c07, 0x0ceb, 0x4c55, 0x4c50, 0x4c4f, 0x4c52, 0x4c56, + 0x00bd, 0x4c32, 0x4d63, 0x4d6b, 0x4d66, 0x4d57, 0x4d5d, 0x3f86, 0x4d6d, + 0x4d61, 0x4d69, 0x4d5a, 0x4d5c, 0x4d62, 0x4f2a, 0x4f29, 0x4f58, 0x4f5a, + 0x4fd7, 0x4fdb, 0x4fdc, 0x4fdd, 0x4fd8, 0x5054, 0x505b, 0x505c, 0x5053, + 0x504f, 0x5056, 0x5050, 0x505a, 0x506b, 0x5136, 0x5153, 0x513a, 0x513c, + 0x513e, 0x5149, 0x5140, 0xf946, 0xf947, 0x5364, 0x5365, 0x53b5, 0x53b6, + 0x53b2, 0x5448, 0x544a, 0x5472, 0x5469, 0x545a, 0x544c, 0x562c, 0x5630, + 0x564b, 0x5649, 0x5642, 0x5644, 0x564a, 0x564f, 0x5792, 0xf957, 0x5797, + 0x5780, 0x5782, 0x5786, 0x5953, 0x595e, 0x5952, 0x595b, 0x594e, 0x5a6d, + 0x5a6e, 0x5afa, 0x5af6, 0x5afb, 0x5e33, 0x5e3d, 0x5e37, 0x5e3e, 0x5e35, + 0x5f9a, 0x5fab, 0x5fa6, 0x5fb0, 0x5f99, 0x5fa0, 0x5f9e, 0x5fa8, 0x5fa1, + 0x5faa, 0x5fad, 0x5fbb, 0x5f9c, 0x5fa5, 0x00b3, 0x6227, 0x628d, 0x628e, + 0x628f, 0x6292, 0x4356, 0x6291, 0x62ad, 0x6357, 0x6358, 0x635e, 0x635d, + 0x635c, 0x635b, 0x4367, 0x640a, 0x6403, 0x640e, 0x64b8, 0x654d, 0x653f, + 0x6547, 0x654b, 0x654a, 0x653d, 0x8038, 0x6541, 0x654c, 0x8081, 0x6662, + 0x6669, 0x6661, 0x43d1, 0x66aa, 0x66a6, 0x66ac, 0x66bd, 0x66bb, 0x66a4, + 0x66ba, 0x669a, 0x43eb, 0x66a1, 0x66c1, 0x68e0, 0x690a, 0x6903, 0x6906, + 0x6939, 0x693a, 0x6936, 0x695b, 0x695f, 0x695e, 0x6967, 0x6961, 0x6962, + 0x695d, 0x69ca, 0x69cc, 0x69ce, 0x6a18, 0x6a1d, 0x6a1f, 0x6a20, 0x6a17, + 0x6a15, 0x6b1f, 0x6b27, 0x6b26, 0x1e10, 0x6b8b, 0x6bae, 0x6b8a, 0xf999, + 0x6b92, 0x6b89, 0x6b87, 0x44b6, 0x6b8f, 0x6b84, 0x6b83, 0x6b8c, 0x6b93, + 0x6b8d, 0x6b98, 0x6b7d, 0x6b7e, 0x6bd2, 0x6b80, 0x6b99, 0x71ac, 0x7250, + 0x7255, 0x7242, 0x723f, 0x723c, 0x45a3, 0x724c, 0x7249, 0x7257, 0x7258, + 0x724f, 0x725c, 0x7247, 0xf9b7, 0x75ab, 0x4610, 0x75af, 0x75ad, 0x75e8, + 0x75e7, 0x7630, 0x7626, 0x762f, 0x7628, 0x762b, 0x761d, 0x762d, 0x7620, + 0x762a, 0x762c, 0x7635, 0x7621, 0x7623, 0x7624, 0x7636, 0x7637, 0x77e9, + 0x78ba, 0x78b8, 0xf9cc, 0x796d, 0x796a, 0x7968, 0x7969, 0x796b, 0x7961, + 0x7bdc, 0x7bdb, 0x7c2d, 0x7c2c, 0x7ca2, 0x7d2b, 0x7d32, 0xf9d7, 0x7e94, + 0x7e92, 0x7e90, 0x7fc9, 0x7fc4, 0x7fc1, 0x7fc3, 0x7fcd, 0x8214, 0x82a7, + 0x82af, 0x82aa, 0x840d, 0x8454, 0x845b, 0x8461, 0x84ae, 0x84b3, 0x84c0, + 0x84c4, 0x84bf, 0x84cb, 0x84ad, 0x84a7, 0x84a4, 0x84bd, 0x84af, 0x84b2, + 0x84a5, 0x86e7, 0x86e0, 0x86ce, 0x86de, 0x86d5, 0x86df, 0x86d9, 0x87f2, + 0x8923, 0x8940, 0x491b, 0x893e, 0x4987, 0x8ccf, 0x0b54, 0x8e5b, 0x8e58, + 0x8e62, 0x8e5f, 0x8e67, 0x8e63, 0x8e5e, 0x8e60, 0x8f85, 0x8f86, 0x8f87, + 0x91e8, 0x91e6, 0x9671, 0x9685, 0xfa02, 0x9686, 0x9810, 0x09f8, 0x00bf, + 0x0b61, 0x00fe, 0x00fc, 0x0139, 0x0161, 0x0160, 0x02e2, 0x02ea, 0x02e3, + 0x02b4, 0x02ae, 0x02be, 0x02b8, 0x02a8, 0x02aa, 0x02a9, 0x02b3, 0x02d5, + 0x02ad, 0x02b9, 0x02bb, 0x02b1, 0x02c2, 0xf808, 0x02eb, 0x02ba, 0x02d2, + 0x02d4, 0x04f1, 0x051d, 0xf812, 0x0562, 0x058c, 0x05e6, 0x05e7, 0x065a, + 0x0658, 0x0659, 0x0696, 0x0697, 0x0761, 0x0767, 0x0771, 0x0765, 0x077d, + 0x077e, 0x087d, 0x0884, 0x087c, 0x087e, 0x087f, 0x0880, 0x08ef, 0x08f4, + 0x091e, 0x094e, 0x09fb, 0x09fa, 0x09fd, 0xf831, 0xf832, 0x0a79, 0x0a7c, + 0x0a7d, 0x0a84, 0x0a7b, 0x0a78, 0x3557, 0x0b5e, 0x0b5a, 0x0b5c, 0x0b59, + 0x0b55, 0x0b63, 0x0b56, 0x0b5f, 0x0b60, 0x0b5b, 0x0d4a, 0x0d65, 0x0db3, + 0x0d2c, 0x0d77, 0x0d3d, 0x0d52, 0x0d61, 0x0d2a, 0x0d3e, 0x0d34, 0x0d29, + 0x0db2, 0x0dad, 0x0d40, 0x0d53, 0xf844, 0x0d3f, 0x0d41, 0x0d72, 0x11f6, + 0x11f5, 0x11f4, 0x11f2, 0x11f9, 0x1327, 0x1354, 0x1355, 0x132e, 0xf854, + 0xf853, 0x132c, 0x1338, 0x1339, 0x1331, 0x134f, 0x1373, 0x1330, 0x132b, + 0x1351, 0x152c, 0x155b, 0x155c, 0x1568, 0x156c, 0x156b, 0x1569, 0x159f, + 0x1638, 0x163c, 0x163a, 0x1635, 0x369d, 0x1639, 0x1636, 0x163b, 0x1760, + 0x1761, 0x1763, 0x1764, 0x1794, 0x1793, 0x175e, 0x1768, 0x176a, 0x1765, + 0xf866, 0x1790, 0x175f, 0x1772, 0xf865, 0x1a3c, 0x1a27, 0x1a24, 0x1a26, + 0x1a25, 0x375f, 0x1a28, 0x1a36, 0x1b31, 0x1b30, 0x1b34, 0x1b81, 0x1b7d, + 0x1b82, 0x1b80, 0x3779, 0x02d3, 0x1bf2, 0x1c66, 0x1c8c, 0x1c7b, 0x1c83, + 0x3798, 0x1c8e, 0x1c7a, 0x1c92, 0x1c91, 0x1c82, 0x1d1b, 0x1d1c, 0x1e27, + 0x1e21, 0x37dc, 0x5d2b, 0x1e43, 0x37df, 0x1e18, 0x1e7b, 0x1e1a, 0x1e4b, + 0x1e4a, 0x1e4d, 0x1e4f, 0x1e19, 0x1e35, 0x1e13, 0x1e52, 0x1e14, 0x1e1e, + 0x1e2c, 0x1e20, 0x1e22, 0x1e12, 0x1e1f, 0x2000, 0x2023, 0x2040, 0x2043, + 0x20e4, 0x20db, 0x20ea, 0x20dd, 0x20cc, 0x20d9, 0x20e8, 0x20f6, 0x20e3, + 0x20d3, 0x20da, 0x20d6, 0x20e7, 0x223a, 0x223f, 0x2240, 0x2248, 0x2259, + 0x2237, 0x2244, 0xf88c, 0xf88b, 0x2255, 0x2239, 0x2354, 0x2355, 0x2356, + 0x2357, 0x2358, 0x2359, 0x238d, 0x23f2, 0x23f8, 0x23f5, 0x23f6, 0x23fc, + 0x23fe, 0x23f1, 0x23fd, 0x245e, 0x2496, 0x2497, 0x249c, 0x249b, 0x2495, + 0xf89a, 0x251a, 0x2509, 0x2504, 0x250e, 0x251c, 0x2518, 0x250d, 0x2510, + 0x250c, 0x2503, 0x267b, 0x26a6, 0x2677, 0x2688, 0x2674, 0x26da, 0x2676, + 0x2678, 0x268a, 0x268f, 0x267d, 0x2690, 0x26ed, 0x26d9, 0x26d0, 0x271a, + 0x26d7, 0x26e2, 0x26e1, 0x26c5, 0x26e0, 0x26ca, 0x2725, 0x26cc, 0xf8b3, + 0x29c6, 0x29c1, 0x2a4d, 0x2b4b, 0x2b64, 0x2b95, 0x2b99, 0xf8bc, 0x2b94, + 0x2ba2, 0x2bae, 0x2b9e, 0x2ba7, 0x2b86, 0x39fd, 0x2ba4, 0x2b91, 0x2b93, + 0xf8bb, 0x2b88, 0x2ecd, 0x2eca, 0x2f3f, 0x2f40, 0x2f46, 0x2f41, 0x2f45, + 0x2f58, 0x2f3b, 0x2f48, 0x304e, 0x3052, 0x304f, 0x307b, 0x307a, 0x30a0, + 0x309f, 0x30fb, 0x30f7, 0x31b8, 0x31b9, 0x31bb, 0x31b7, 0x3af4, 0x31ba, + 0x3aef, 0x31da, 0x31b5, 0x31bf, 0x31bc, 0x31c0, 0xf8d3, 0xf8d9, 0x3375, + 0x3379, 0x3376, 0x3435, 0x3440, 0x34c0, 0x3481, 0x34ad, 0x34af, 0x34ac, + 0x348f, 0x34a8, 0x34aa, 0x34a9, 0x3488, 0x347f, 0x3480, 0x34bc, 0x38ae, + 0x38bb, 0x38bd, 0x3c31, 0x3978, 0x3974, 0x3a0c, 0x3a11, 0x3a08, 0x3a06, + 0x3a10, 0x3a8f, 0x3a90, 0x3a8d, 0x3a8e, 0x3a96, 0x3a95, 0x3b0b, 0x3b0c, + 0x3b7c, 0x3b73, 0x3b75, 0x3b76, 0x3b7d, 0x3b78, 0x3b71, 0x3c4b, 0x3c4e, + 0x3d33, 0x3d32, 0x3d03, 0x3d91, 0x3de7, 0x3de9, 0x3da2, 0x3d94, 0x3d87, + 0x3da3, 0x3ddd, 0x3d7b, 0x3d83, 0x3d81, 0x3ddf, 0x3d7c, 0x3de4, 0x3de2, + 0x3d93, 0x3d7d, 0x3dbf, 0x3d9b, 0x3d8e, 0x3d9f, 0x3d09, 0x3d8c, 0x3d7f, + 0x3d9c, 0x3d84, 0x3d42, 0x3de6, 0x4251, 0x424a, 0x4264, 0x4225, 0x422f, + 0x422e, 0x422b, 0x4228, 0x4232, 0x422d, 0x4231, 0x4239, 0x422c, 0x4261, + 0x4511, 0x4510, 0x4512, 0x4553, 0x4555, 0x457b, 0x4581, 0x457d, 0x457c, + 0x45c2, 0x45c5, 0xf922, 0x45c4, 0xf923, 0x466b, 0x4668, 0x3e3e, 0x465c, + 0x465d, 0x466a, 0xf924, 0x4c76, 0x4776, 0x3e77, 0x47c4, 0x47cb, 0x47c8, + 0x47d4, 0x47d5, 0x47c9, 0x47d7, 0x3e7b, 0x4978, 0x495a, 0x495b, 0x495c, + 0x4956, 0x4958, 0x4971, 0x69d4, 0x4b40, 0xf933, 0x4b3f, 0x4b43, 0x4b41, + 0x4be2, 0x4be0, 0x4be3, 0x4c66, 0x4c73, 0x4c6c, 0x4c71, 0x4c6a, 0x4c6d, + 0x4c6e, 0x4c6b, 0x4d8c, 0x4d77, 0xf93a, 0x4d7f, 0x4d89, 0x4d7a, 0x4d85, + 0x4d78, 0x4d8a, 0x4d86, 0x4f2c, 0x4f67, 0x4f5b, 0x4fe5, 0x4fe1, 0x5061, + 0x5069, 0x506a, 0x5165, 0x516d, 0x5163, 0x5186, 0x515c, 0x5162, 0xf948, + 0x5179, 0x5169, 0x5170, 0x5176, 0x515d, 0x5187, 0x516e, 0x5171, 0x517c, + 0x5173, 0x515b, 0x516b, 0x53bf, 0x53c1, 0x53bd, 0x53c9, 0x53bc, 0x53c2, + 0x53c0, 0x5492, 0x54a9, 0x548f, 0x5476, 0x547b, 0x5475, 0x54a4, 0x5664, + 0x573d, 0x57af, 0x413a, 0xf958, 0x579d, 0x5799, 0x57b1, 0x5963, 0x5962, + 0x5964, 0x5969, 0x41a0, 0x5a75, 0x5a73, 0x5a71, 0x5a74, 0x5b0c, 0x5b16, + 0x41e5, 0x5b11, 0x5b1f, 0x5b1a, 0x5b0d, 0x5b1b, 0x5b13, 0x5e4e, 0x5e55, + 0x5e50, 0x427d, 0x5fd2, 0x5fd3, 0x5fd1, 0x5ff1, 0x5fdc, 0x5fc8, 0x5fcc, + 0x5fd0, 0x5fcf, 0x5fdf, 0x622b, 0x622e, 0x622d, 0x629d, 0x629e, 0x629f, + 0x62a9, 0x62a0, 0x6298, 0x62a1, 0x62ab, 0x62af, 0x636e, 0x635f, 0x635a, + 0x436d, 0x6365, 0x6368, 0x6372, 0x6417, 0x6416, 0x6418, 0x6419, 0x641a, + 0x6422, 0x641b, 0x641c, 0x64be, 0x64ee, 0x655a, 0x6550, 0x6558, 0x6554, + 0x6557, 0x6556, 0x6615, 0x669b, 0x6693, 0x6692, 0x6672, 0x6698, 0x6699, + 0x66df, 0x43f8, 0x66d5, 0x8158, 0x66d4, 0x66f3, 0x66f4, 0x66e7, 0x66e1, + 0x66e6, 0x66eb, 0x66ec, 0x02db, 0x4450, 0x690d, 0x690c, 0x1b2f, 0x6968, + 0x6965, 0x696b, 0x6969, 0x69d1, 0x69d3, 0x6a27, 0x6a28, 0x4468, 0x4467, + 0x6a24, 0x6ad7, 0x6bca, 0x6bc7, 0xf99e, 0x6bd8, 0x6be1, 0x6bc6, 0x6bf8, + 0x6bc3, 0x6bf4, 0x6c17, 0x6bea, 0x6bcb, 0x6b86, 0x6bc4, 0x6bd9, 0x6c19, + 0x6bc2, 0x6be2, 0x44cf, 0x6bde, 0x6bed, 0xf99c, 0x44cd, 0x6c1d, 0x6bdd, + 0x6bdb, 0x6be8, 0x6be9, 0x6bbf, 0x6be0, 0x6bd1, 0x6bdc, 0x6bce, 0x6c1e, + 0x6bcc, 0x6bf2, 0x6bf3, 0xf99f, 0xf9a2, 0xf9a3, 0xf9a1, 0x71ab, 0x71aa, + 0x71a7, 0x71a9, 0x7288, 0x7275, 0x7260, 0x726c, 0x7273, 0x45ab, 0x726e, + 0x7274, 0x7276, 0x7268, 0x7277, 0x7286, 0x75ea, 0x7651, 0x7650, 0x7658, + 0x764d, 0x764f, 0x764e, 0x765c, 0x7652, 0x7644, 0x764a, 0x764b, 0x77ea, + 0x7810, 0x7811, 0x78cd, 0x78bf, 0x78c4, 0x78d0, 0x78ce, 0x78c0, 0x78c2, + 0x78cf, 0x78c9, 0x78bb, 0x7997, 0x7992, 0x796f, 0x797e, 0x799a, 0x46c1, + 0x7986, 0x7973, 0x8a24, 0x7977, 0x798f, 0x7970, 0x7981, 0x7982, 0x7999, + 0x797d, 0x797f, 0x797b, 0x7987, 0x7bb2, 0x7c2f, 0x7c34, 0x7c2e, 0x7c32, + 0x4747, 0x7caa, 0x4757, 0x7ca9, 0x7d38, 0x7d36, 0x7d37, 0x7d47, 0x7d33, + 0x7d39, 0x7d35, 0x7d44, 0x7ea5, 0x7ea6, 0x7e9e, 0x7fe3, 0x7fdf, 0x7fd3, + 0x7ff1, 0x7fe4, 0x7fe0, 0x7fd6, 0x8dc3, 0x7fe6, 0x7fd8, 0x7fde, 0x7fdb, + 0x7fdc, 0x821b, 0x821f, 0x821d, 0x821c, 0x821e, 0x8220, 0x8221, 0x484e, + 0x82b6, 0x82bc, 0x82c6, 0x82c7, 0x82ba, 0x82be, 0x82bd, 0x82b5, 0x82b4, + 0x840f, 0x8462, 0x84eb, 0x84d9, 0x84e4, 0x84d7, 0x84d8, 0x84d6, 0x84ce, + 0x84dd, 0x84e7, 0x84d2, 0x84c5, 0x84c9, 0x84db, 0x8692, 0x868a, 0x868b, + 0x8689, 0x8708, 0x8703, 0x8706, 0x8705, 0x86f5, 0x870b, 0x86fb, 0x87fc, + 0x8801, 0x8802, 0x87fa, 0x8808, 0x87f7, 0x8800, 0x87ff, 0x8806, 0x87f6, + 0x87fb, 0x880a, 0x8925, 0x8943, 0x8944, 0x8c64, 0x8c62, 0x8c5e, 0x8c5b, + 0x8cd6, 0x0072, 0x00c2, 0x8e77, 0x8e82, 0x8e7c, 0x8e7d, 0x8e86, 0x8e81, + 0x8e84, 0x8e76, 0x8e83, 0x8e7f, 0x8e7e, 0x8f88, 0x8f8d, 0x8f8b, 0x8f91, + 0x8f8f, 0x907c, 0x9079, 0x907a, 0x91ea, 0x944c, 0x9599, 0x02d1, 0x968b, + 0x968d, 0x968a, 0x968e, 0x9811, 0x2256, 0xfa15, 0x0074, 0x00c3, 0x00c4, + 0x011b, 0x015f, 0x016a, 0x0169, 0x016b, 0x030c, 0x02f6, 0x02ed, 0x0329, + 0x02fe, 0x02f1, 0x0317, 0x02ff, 0x02ee, 0x02fd, 0x031c, 0x02fc, 0x0300, + 0x0320, 0x3477, 0x02f9, 0x0367, 0x0308, 0x049e, 0x04f3, 0x0525, 0x0527, + 0x051f, 0x0565, 0x0563, 0x0594, 0x0597, 0x05f1, 0x065f, 0x0662, 0x51f2, + 0x0660, 0xf822, 0x078c, 0x0782, 0x0790, 0x078b, 0x078d, 0x0781, 0x079d, + 0x088e, 0x088f, 0x0892, 0x0923, 0x0952, 0xf82e, 0x0a00, 0x0a01, 0x0a02, + 0x0a1f, 0x0a8c, 0x0a89, 0x0a8b, 0x0a88, 0x0a8d, 0x0a8f, 0x6385, 0x0b00, + 0x0b05, 0x0b01, 0x0b68, 0x0b6e, 0x0b67, 0x0b75, 0x55b6, 0xf845, 0x0dd7, + 0xf846, 0x0048, 0x0dd4, 0x0dd8, 0xf847, 0xf848, 0x0dba, 0xf849, 0x0ddb, + 0x0dbf, 0x0e35, 0x0dbc, 0x0dd9, 0x35c4, 0x0ddd, 0x0e00, 0x0dd5, 0x0e30, + 0x0dbd, 0x0ddc, 0x11fd, 0x11fe, 0x1207, 0x4517, 0x136f, 0x1369, 0x1370, + 0x1367, 0x13a9, 0x1395, 0x1390, 0x136c, 0x1397, 0x1371, 0x3652, 0x1374, + 0x136d, 0x138e, 0x152f, 0xa31b, 0x15a9, 0x164e, 0xf85f, 0x165a, 0x1648, + 0x1655, 0x164c, 0x1649, 0x164f, 0x164a, 0x17d6, 0x17a0, 0x17a9, 0xf867, + 0x179d, 0x17d4, 0x17a4, 0x17a8, 0x17a6, 0x17e6, 0x197d, 0x1977, 0x197a, + 0x1a41, 0x1a49, 0x1a59, 0x1a45, 0x1a48, 0x1a40, 0x1b8e, 0x1b95, 0x1b90, + 0x1bf7, 0x1bf8, 0x1bf6, 0x1bfb, 0x1c9e, 0x1c9d, 0x1c99, 0xf877, 0x1ca3, + 0x1ca9, 0x1c98, 0x1ca0, 0x1c96, 0x1c94, 0x1c95, 0x1c9f, 0x1ca1, 0x1d21, + 0x1d1d, 0x1d1f, 0x1e6d, 0xf87c, 0x1e9a, 0x1e92, 0x1e7a, 0x1e7d, 0x1ea1, + 0x1e9d, 0x1e99, 0x1e6b, 0x1e6e, 0xf87d, 0x2045, 0xf884, 0x20fb, 0x20eb, + 0x20f2, 0x20f9, 0xf886, 0x20f8, 0x20ed, 0x2101, 0x20f7, 0x2106, 0x219b, + 0x21ca, 0x386b, 0x5ec3, 0x226b, 0x226c, 0x2274, 0x2267, 0x225b, 0x2260, + 0x2276, 0x2263, 0x2261, 0x2328, 0x235b, 0x235e, 0x2360, 0x235d, 0x235c, + 0x23f4, 0x2400, 0x2408, 0x2407, 0x2401, 0x2405, 0x2464, 0x2463, 0x249e, + 0x24a0, 0x24a1, 0x249f, 0x2526, 0x252d, 0x2528, 0x251d, 0x26ec, 0x26e3, + 0x26eb, 0x2716, 0x26c8, 0x661b, 0x26e9, 0x26e4, 0x2724, 0x26d1, 0x3941, + 0x26dd, 0x26c2, 0x26cb, 0x26c7, 0x26e7, 0x3950, 0x26ea, 0x274b, 0xf8a5, + 0x2760, 0x277d, 0x273e, 0xf8a4, 0x2752, 0x274e, 0x273c, 0x2732, 0x2730, + 0x2723, 0x29ca, 0x29cb, 0x29c9, 0x29c8, 0x29cd, 0x2b98, 0x2ba0, 0x2b9f, + 0x2b9c, 0x2ba3, 0x2b97, 0xf8be, 0x2bf1, 0x2c09, 0x2c03, 0x2bea, 0x2c45, + 0x2bed, 0x2c05, 0x2c1a, 0x2c15, 0x2c01, 0x2bec, 0x2c0e, 0x2c17, 0x2c42, + 0x2c12, 0x2c10, 0x2bef, 0x2bff, 0x2c00, 0x2c0c, 0x2c0f, 0x2c04, 0x2c08, + 0x2c14, 0x2c43, 0xf8bd, 0x2c1b, 0x2c11, 0x2c13, 0x2ecf, 0x2ece, 0x2f6f, + 0x2f6e, 0x2f7a, 0x2f70, 0x2f64, 0x2f5e, 0x2f6c, 0xf8c9, 0x2f5b, 0x2f61, + 0x2f65, 0x307f, 0x3080, 0x307c, 0x30a7, 0x30a6, 0x30a1, 0x3ac0, 0x30a8, + 0x30a3, 0x30a2, 0x30ad, 0x30a5, 0x3101, 0x30ff, 0x30fc, 0x3100, 0x3135, + 0x31ee, 0x31ef, 0x31f6, 0x31e8, 0x31ea, 0x31e3, 0x321f, 0x3afc, 0x31e4, + 0x31fa, 0x31f1, 0x31fb, 0xf8d4, 0x333d, 0x333c, 0x3479, 0x3378, 0x3377, + 0x440b, 0x34d1, 0x34c7, 0x34df, 0x34d0, 0x34e0, 0x34d6, 0x34d8, 0x3516, + 0x350e, 0x34d9, 0x350f, 0x3511, 0x34cd, 0x3489, 0x34ce, 0x3514, 0x34da, + 0x3512, 0x34d3, 0x34c2, 0x34e1, 0x34e9, 0x34ea, 0x34de, 0x3515, 0x38d9, + 0x38d6, 0x38cd, 0x38d0, 0x38d3, 0xf8f0, 0x3982, 0x3985, 0x397f, 0x397d, + 0x3981, 0x3983, 0x3984, 0x84a0, 0x3a28, 0x3a0f, 0x3a17, 0x3a1a, 0x3a25, + 0xf8f7, 0x3a9b, 0x3a99, 0x3b92, 0x3b8c, 0x3b95, 0x3b8d, 0x3ba3, 0x3b93, + 0x3b91, 0x3ddb, 0x3d99, 0x3d9a, 0x3e08, 0x3e4c, 0x3e0d, 0x3e01, 0x3e4e, + 0x3e02, 0x3e4d, 0x3e21, 0x3dfc, 0xf909, 0x3d8a, 0xf908, 0x3d95, 0x3e11, + 0x3e12, 0x3e46, 0x3e1c, 0x3e49, 0x3e0c, 0x3d1e, 0x3e13, 0x3e16, 0x3dfd, + 0x3e0f, 0x3e1f, 0x4230, 0x426e, 0x426b, 0x429b, 0x427b, 0x4263, 0x4297, + 0x426d, 0x429c, 0x4298, 0x426f, 0x4267, 0x4269, 0x4515, 0x4563, 0x4586, + 0x458a, 0x4587, 0x4588, 0x4585, 0x4589, 0x45ca, 0x45c7, 0x45cb, 0x45cc, + 0x45c9, 0x460d, 0x4683, 0x4684, 0x4678, 0x4682, 0x4673, 0x4679, 0x468c, + 0x47d0, 0x47cf, 0x47d2, 0x47d9, 0x47cc, 0x47eb, 0x47fd, 0x47ec, 0x47e8, + 0x47f8, 0x47fa, 0xf927, 0x3e85, 0x47e1, 0x47fb, 0x48e7, 0xf92e, 0x49a5, + 0x4991, 0x49a6, 0x497c, 0x4992, 0x49a2, 0x49a0, 0x4afc, 0x4afe, 0x4b57, + 0x4b53, 0x4b58, 0x4be7, 0x4c8e, 0xf938, 0x4c83, 0x4c8b, 0x4c84, 0x3f97, + 0x4da2, 0x4db7, 0x4da9, 0x4da5, 0x4d9f, 0x4daa, 0x4d97, 0x4da1, 0x4d9e, + 0x4dab, 0x4d99, 0x4da3, 0x4f30, 0x4f32, 0x4f2f, 0x4f70, 0x4f6c, 0x4f6f, + 0x4fe8, 0x4fee, 0x4fea, 0x506d, 0x5076, 0x5070, 0x5071, 0x506c, 0x51eb, + 0x51b5, 0x5196, 0x5190, 0x518d, 0xf949, 0x51a2, 0x51b0, 0x5192, 0x51a0, + 0x5193, 0x51c3, 0x518e, 0x51b6, 0x519d, 0x5195, 0x51b3, 0x51a4, 0x5370, + 0x53d4, 0x4093, 0x53cf, 0x0170, 0x5494, 0x7861, 0x54c0, 0x54b4, 0x54c1, + 0x40b2, 0x54bd, 0x54af, 0x5677, 0x5678, 0x566b, 0x566d, 0x566e, 0x5672, + 0x566f, 0x5671, 0x30ab, 0x568c, 0x573f, 0x57b6, 0x57b7, 0x7a06, 0x57bb, + 0x57b8, 0x079c, 0x57b9, 0x7a01, 0x598b, 0x597a, 0x5984, 0x5988, 0x5991, + 0x5979, 0x598e, 0x5980, 0x5982, 0x597c, 0x41a4, 0x5a84, 0x5a7f, 0x41f2, + 0x5b3b, 0x5b71, 0x5b3d, 0x5b30, 0x41f1, 0x5b3e, 0x5b38, 0x5e5e, 0x5e64, + 0x4281, 0x5e5d, 0x5e6d, 0x5e4f, 0x5e62, 0x5e5f, 0x5fec, 0x5ff2, 0x5ff4, + 0x5ff7, 0x5ff6, 0x6007, 0x5fed, 0x5fea, 0x5ff0, 0x5ff8, 0x5ff3, 0x42dc, + 0xf972, 0x6231, 0x622f, 0x62b6, 0x62ae, 0x62aa, 0x62bf, 0x62cc, 0x62c7, + 0x6c83, 0x6380, 0x637b, 0x637f, 0x637d, 0x6383, 0xf978, 0x6446, 0x642d, + 0x6425, 0x6426, 0x642c, 0x6437, 0x6431, 0x6433, 0x6432, 0x6427, 0x642a, + 0x642e, 0x642f, 0x64c0, 0x6571, 0x6561, 0x6562, 0x6566, 0x6618, 0x66c5, + 0x66c3, 0x66c4, 0x66c2, 0x66ae, 0x6710, 0x6708, 0x671f, 0x673a, 0x673b, + 0x6736, 0x670c, 0x6706, 0x672a, 0x6757, 0x6750, 0x6720, 0xf985, 0x672c, + 0x6721, 0x670b, 0x6719, 0x6735, 0x6718, 0x670f, 0x6713, 0x6755, 0x6739, + 0x671a, 0x440c, 0x6717, 0x68e4, 0x68e9, 0x458b, 0x6910, 0x6912, 0x693f, + 0x696e, 0x4518, 0xf98c, 0x69d6, 0x69d5, 0x69d7, 0x0b02, 0x446d, 0x6a31, + 0x6a30, 0x6a3a, 0x6b85, 0x6b6b, 0x6c48, 0x6c4b, 0x6c37, 0x6c7b, 0x6c6c, + 0x6c85, 0x6c65, 0x6c36, 0x6c86, 0x6c34, 0x6c68, 0x6c5a, 0x6c58, 0x6c72, + 0x6c6a, 0x6bd3, 0x6c3c, 0x6c33, 0x6c3b, 0x6c4d, 0x6c4f, 0x6c7c, 0x6cb0, + 0x6c5b, 0x6c55, 0x6c64, 0x6c6b, 0x6c53, 0x44e6, 0x6c57, 0x6c5e, 0x6c6d, + 0x6c35, 0x6c69, 0x6c59, 0x6c66, 0x6c50, 0x6c51, 0x6c5c, 0x6d5d, 0x6c87, + 0x6c78, 0x6c49, 0x6c4e, 0x6bf1, 0x6c73, 0x6c88, 0x6bcf, 0xf9a4, 0x71b1, + 0x71b3, 0x729c, 0x72a4, 0x7290, 0x72b8, 0x72a0, 0x729d, 0x72a8, 0x72a9, + 0xf9b9, 0x72b1, 0x7293, 0x729b, 0x72a2, 0x72a1, 0x72b0, 0x72a7, 0x75b3, + 0x8849, 0x75b4, 0x75f1, 0x75ed, 0x75ec, 0x7668, 0x7675, 0x766a, 0x7662, + 0x7667, 0x7660, 0x7677, 0x765f, 0x7679, 0x7823, 0x7821, 0x781c, 0x8999, + 0x781f, 0x781e, 0x78d6, 0x78d3, 0x78d9, 0x78d7, 0x78d4, 0x78dc, 0x78d8, + 0x79a3, 0x46d1, 0x79be, 0x79a9, 0x79a1, 0x79a0, 0x79ab, 0x79a2, 0x79ba, + 0x79c2, 0x799c, 0x79bb, 0x79aa, 0x79ac, 0x79a5, 0x79c1, 0x472c, 0x7be2, + 0x7c36, 0x7c3d, 0x7c3a, 0x2461, 0x7c48, 0x7c3c, 0x7cb7, 0x7cac, 0x7cb3, + 0x7cb6, 0x7cb2, 0x476e, 0x7d5d, 0x7d49, 0x7d4e, 0x7d4f, 0x7d4d, 0x7d5c, + 0x7e5d, 0x7ebb, 0x7ece, 0x7ebf, 0x7eba, 0x7ec3, 0x47e5, 0x8006, 0x7ff8, + 0x7ffe, 0x8013, 0x7ff6, 0x47e6, 0x8234, 0x822d, 0x822a, 0x8235, 0x822c, + 0x82d4, 0x82da, 0x82d3, 0x82d2, 0x82ce, 0x82cf, 0x489f, 0x84fd, 0x850b, + 0x84fe, 0x84f8, 0x84f7, 0x8517, 0x84fa, 0x84f9, 0x8500, 0x84f5, 0x84f1, + 0x8503, 0x8505, 0x851c, 0x86ac, 0x869a, 0x86ad, 0x86a0, 0x871b, 0x8725, + 0x8724, 0x8726, 0x8727, 0x8728, 0x872a, 0x871a, 0x872e, 0x8715, 0x8815, + 0x8814, 0x8817, 0x8818, 0x880f, 0x8813, 0x880b, 0x8822, 0x137a, 0x8926, + 0x921f, 0x8951, 0x894d, 0x894e, 0x894a, 0x894b, 0x894c, 0x8950, 0x8962, + 0x894f, 0x8952, 0x8c68, 0x8c69, 0x8ce5, 0x8cf0, 0x8ce1, 0x8ce2, 0xf9f2, + 0x8ea5, 0x8ea9, 0x8ea4, 0x8eaf, 0x8eac, 0x8eae, 0x8eaa, 0x8f95, 0x8f99, + 0x8f93, 0x8f9d, 0x8f98, 0x8f9c, 0x8f97, 0x4a0d, 0x9089, 0x9087, 0x91d7, + 0x91ed, 0x91f1, 0x91f0, 0x9205, 0x9203, 0x9204, 0x925f, 0x9457, 0x959c, + 0x95a1, 0x959a, 0x968f, 0x9693, 0x969e, 0x96a3, 0x9698, 0x9699, 0x9695, + 0x986e, 0x986a, 0x9af4, 0x9af7, 0x9c79, 0x9f8f, 0x9f91, 0xa00b, 0xa502, + 0x0084, 0x0104, 0x0180, 0x032f, 0x033f, 0x033b, 0x0362, 0x0344, 0x0333, + 0x035f, 0x032b, 0xf809, 0x0339, 0x0336, 0x0348, 0x0335, 0x036c, 0x0358, + 0x033a, 0x04a8, 0x04f4, 0x0529, 0x059a, 0x0600, 0x07bb, 0x07bd, 0x07b7, + 0x07b2, 0x34f8, 0x07a8, 0x07ab, 0x07a6, 0x07bc, 0x0897, 0x0896, 0x08f8, + 0x5313, 0x0951, 0x3533, 0x09b5, 0x09b4, 0x09b6, 0x353c, 0x09b7, 0x0a05, + 0x0a23, 0x0a95, 0x0a98, 0x354f, 0x0a94, 0x0a93, 0x0b07, 0x0b73, 0x0b71, + 0x0b72, 0x0b78, 0x0e5f, 0x0e6a, 0x0e67, 0x0e6b, 0x0e69, 0x0e8e, 0x0e49, + 0x0e80, 0x35dc, 0x0e44, 0x0e8f, 0x0e45, 0xf84c, 0x0e4f, 0x0e63, 0x0e36, + 0x0e48, 0x0e5c, 0x0e93, 0x0e61, 0x0e60, 0x0e4e, 0x0e5e, 0x0e3f, 0x0ea4, + 0x55e0, 0x0e68, 0x120b, 0x1211, 0x120d, 0x120e, 0x13c2, 0xf857, 0x13b0, + 0x13c3, 0x13c8, 0x1365, 0x13d7, 0x13bd, 0x13b8, 0x13b6, 0x13c7, 0x13bc, + 0x13b1, 0x13af, 0xf85b, 0x1535, 0x1530, 0x155d, 0x0b76, 0x156f, 0x15b0, + 0xf85e, 0x15b4, 0x165c, 0x165d, 0x1808, 0x17ee, 0x180b, 0x17f2, 0x17fd, + 0x17f1, 0x1810, 0xf868, 0x1814, 0x198b, 0x198c, 0x1985, 0x1a7a, 0x1a6c, + 0x1a60, 0x1a67, 0x1a66, 0x1a6a, 0x1a5f, 0x1a6d, 0x1a68, 0x1a64, 0x1b3a, + 0x1b3b, 0x1b39, 0x1c02, 0x1c04, 0x1c03, 0x1cb4, 0x1cb3, 0x1cbb, 0x1cac, + 0x1cb6, 0x1cb1, 0x1caf, 0x1cb5, 0x1cbe, 0x1cb2, 0x1d24, 0x1eb6, 0x1eb9, + 0x1eac, 0x1eb0, 0x1ed7, 0x1ebb, 0x1efe, 0x1ecb, 0xf87f, 0x37f5, 0x1eb3, + 0x1ebe, 0x1ecd, 0x1ebc, 0x1eba, 0x1ec7, 0x2116, 0x211b, 0x2117, 0x2115, + 0x219f, 0xf88e, 0x2282, 0x2283, 0x228e, 0x226a, 0x2289, 0x2294, 0x2286, + 0x2290, 0x2362, 0x2390, 0x240c, 0x240f, 0x38c3, 0x24a5, 0x24a7, 0x24a6, + 0x24a4, 0x2535, 0x2538, 0x2536, 0x2543, 0x2547, 0x2537, 0x2743, 0x27a2, + 0x2751, 0x2772, 0x276d, 0x272f, 0x2754, 0x276e, 0x2755, 0x2737, 0x274f, + 0x2750, 0x6139, 0x279e, 0xf8a8, 0x27b3, 0x27a7, 0x3971, 0x27f9, 0x2791, + 0xf8a7, 0x27b6, 0x27dd, 0x2799, 0x29df, 0x29d5, 0x47f5, 0x2c28, 0x2c40, + 0x2c71, 0x2c98, 0x2c95, 0x2c65, 0x2c78, 0x2c7f, 0x2c60, 0x2c7c, 0x2c96, + 0x2c6a, 0x2c79, 0x2c73, 0x2c72, 0x2c7b, 0x2c70, 0x2ed5, 0x2ed7, 0x2f8f, + 0x2f89, 0x2f9e, 0x2f87, 0x2fa0, 0x2f8d, 0x2f88, 0x2f7f, 0x2f8c, 0x2f93, + 0x3059, 0x95b0, 0x30b1, 0x51f4, 0x30af, 0x30b2, 0x3108, 0x310a, 0x3136, + 0x3137, 0xf8cf, 0x3b01, 0x3236, 0x3229, 0x324a, 0x3226, 0x3228, 0x3224, + 0x322a, 0x3248, 0x3344, 0x3384, 0x338c, 0x34c4, 0x34dc, 0x3587, 0x3553, + 0x357f, 0x3531, 0x3551, 0x354b, 0x3552, 0x3580, 0x35a5, 0x3581, 0x3543, + 0x3534, 0x3536, 0x3532, 0x3548, 0x3549, 0x353c, 0x354d, 0x354a, 0xf8e6, + 0x358a, 0x3546, 0x353e, 0x3583, 0x3550, 0x35b4, 0x38f0, 0x38e4, 0x38e3, + 0x38e5, 0x38e6, 0x38e7, 0x38e1, 0x38ef, 0x38e8, 0x38dd, 0x3903, 0x3988, + 0x3a26, 0x3a16, 0x3a3b, 0x3a2f, 0x3a39, 0x3a34, 0xf8f4, 0x3a35, 0x3a31, + 0x3a38, 0x0b81, 0x3aaa, 0x3aa3, 0x3aa4, 0x3aa0, 0x3aa1, 0x3aa9, 0x3aa5, + 0x3baf, 0x3bb1, 0x3bab, 0x3bae, 0x3bb0, 0x3bb3, 0x3bac, 0x3ba9, 0x3bb2, + 0x3ba8, 0x3bb4, 0x3bc2, 0x3c4f, 0x3c66, 0x3e1e, 0x3e15, 0x3e10, 0x3e7f, + 0x3e7e, 0x3e60, 0x3ecc, 0x3eb2, 0x3e62, 0x3e8d, 0x3e8e, 0x3e77, 0x3e7c, + 0x3e8f, 0x3e5d, 0x3e6d, 0x3e63, 0x3eaf, 0x3e90, 0x3e7d, 0x3e7a, 0x3e06, + 0xf90b, 0x3e68, 0x3eb4, 0x3e78, 0x3eb1, 0x6ed7, 0xf90c, 0x3d41, 0x42e8, + 0x42e9, 0x42c0, 0x3dd7, 0x42ea, 0x42b7, 0x42ba, 0x42b5, 0xf91d, 0x42b4, + 0x42bc, 0x42c6, 0x42b8, 0x42bd, 0x42c2, 0x434d, 0x42f0, 0x42c7, 0x42c1, + 0x42c3, 0x42f1, 0x42ec, 0x3de2, 0x451c, 0x4520, 0x4558, 0x4565, 0x4564, + 0x458c, 0x458d, 0x45d9, 0x45e0, 0x4610, 0x4694, 0x4692, 0x4696, 0x4695, + 0x46bf, 0x46a0, 0x3e45, 0x47f4, 0x47f6, 0x47dc, 0x733d, 0x4816, 0x4815, + 0x481c, 0x480f, 0x482c, 0x4814, 0x4825, 0x4817, 0x4812, 0x481e, 0x4980, + 0x49a8, 0x49af, 0x49d6, 0x49e2, 0x49b4, 0x49b3, 0x49b0, 0x49b2, 0x49a1, + 0x4b60, 0x4b66, 0x4b61, 0x4b4e, 0x4b5d, 0x4b63, 0x4be6, 0x4bef, 0x4bec, + 0x4c98, 0x4ca7, 0x4c94, 0x4c95, 0x4c91, 0x4c9d, 0x4c99, 0x4c9b, 0x4c9c, + 0x4d1d, 0x4d1c, 0x4dd0, 0x4de0, 0x4dcb, 0x4ddb, 0x4dda, 0x4dc2, 0x4dd3, + 0x4de5, 0x4f7d, 0x4f7b, 0x4fff, 0x3ff2, 0x4ff9, 0x5077, 0x507c, 0x5078, + 0x507b, 0x507a, 0x51d2, 0x51cb, 0x51c9, 0x51ce, 0x51e4, 0x51ca, 0x51d0, + 0x2fa5, 0x4049, 0x51d9, 0x51ee, 0x51dd, 0x5200, 0x51e1, 0x53de, 0x53e2, + 0x53da, 0x54ce, 0xf94f, 0x54cf, 0x54da, 0x54d1, 0x54d4, 0x54ed, 0x54cb, + 0x54d5, 0x54f1, 0x569c, 0x5688, 0x5741, 0x57d0, 0x57f7, 0x57cf, 0x57d1, + 0x57db, 0x57de, 0x57f8, 0x57dc, 0x57d9, 0x59a0, 0x59b2, 0x59a1, 0x59aa, + 0x59a9, 0x41a9, 0x59a6, 0x599c, 0x59b5, 0x59a7, 0x5a8e, 0x5a90, 0x5a91, + 0x5b85, 0x5b5b, 0x5b70, 0x5b64, 0x5b67, 0x5b63, 0x5b77, 0x5b68, 0x5b65, + 0x5b6a, 0x5b78, 0x5b66, 0x5e88, 0x5e9e, 0x5e74, 0x5e7a, 0x5e79, 0x5e8b, + 0x5e7f, 0x6013, 0x601e, 0x6017, 0x601a, 0x6022, 0x6043, 0x6019, 0x601f, + 0x6027, 0x6012, 0x6024, 0x6025, 0x035e, 0x6235, 0x6234, 0x62d1, 0x62c4, + 0x62ca, 0x62c6, 0x62cb, 0x62cd, 0x62e2, 0x6389, 0x638b, 0x6386, 0x6388, + 0x638d, 0x643b, 0x643c, 0x643d, 0x64f5, 0x6579, 0x6575, 0x6582, 0x657f, + 0x6585, 0x6576, 0x657c, 0x657e, 0x657b, 0x6580, 0x657a, 0x2548, 0x43cb, + 0x661d, 0x66f6, 0x66f7, 0x66f9, 0x6763, 0x676c, 0x676e, 0x6714, 0x440d, + 0x6767, 0x676f, 0x6769, 0x6776, 0x6795, 0x6771, 0x6761, 0x6778, 0x676b, + 0x6785, 0x6784, 0x6914, 0x6976, 0x59b6, 0x6975, 0x6974, 0x69e2, 0x6a3f, + 0x6a44, 0x6a3d, 0x6a47, 0x6a48, 0x6adb, 0x6adc, 0x6add, 0x6be5, 0x6be6, + 0x6cc2, 0x6d2e, 0x6d1d, 0x6cf8, 0x6cf0, 0x6cf6, 0x6cc5, 0x6cc6, 0x6cfc, + 0x6d52, 0x6d2f, 0x6d10, 0x6cf3, 0x6cd2, 0x6cea, 0x6cdc, 0x6d1b, 0x6cfb, + 0x6cc3, 0x6d16, 0x6d07, 0x6cc9, 0x6cd8, 0x6d30, 0x6d13, 0x6d31, 0x6cfa, + 0x6cf2, 0x6de3, 0x6cd5, 0x6d01, 0x6cf1, 0x6d1c, 0x6cd6, 0x6d08, 0x6d0b, + 0x6d17, 0x6d20, 0x6cca, 0x6d32, 0x6d05, 0x6ce4, 0x6cce, 0x6d33, 0x6d02, + 0x6d19, 0x6d1e, 0x6cd3, 0x6cf7, 0x6ce8, 0x6d1f, 0x6cf4, 0x6dd8, 0x71bf, + 0x71be, 0x71bd, 0x72dc, 0x72dd, 0x72ab, 0x72c9, 0x72c8, 0x72df, 0x72d9, + 0x72db, 0x72cc, 0x72e0, 0x72ef, 0x72f3, 0x72ae, 0x7301, 0x75b7, 0x75b9, + 0x75b6, 0x75b8, 0x75f6, 0x75f3, 0x75f5, 0x75f2, 0x7691, 0x769d, 0x769b, + 0x7692, 0x768d, 0x769e, 0x768c, 0x4631, 0xf9c7, 0x7695, 0xf9c6, 0x768a, + 0x768e, 0x769c, 0x77ef, 0x782d, 0x7852, 0x7835, 0x7828, 0x782e, 0x78e5, + 0x79ea, 0x79f1, 0x79eb, 0x79d8, 0x79d0, 0x79f3, 0x79db, 0x79ce, 0x46d5, + 0x79da, 0x79d7, 0x79e1, 0x79f2, 0x79c8, 0x79d9, 0x79de, 0x79d1, 0x79e7, + 0x79cf, 0x7bb7, 0x7c47, 0x7c42, 0x7c43, 0xf9d3, 0x7cc3, 0x7cc1, 0x7cc7, + 0x7d64, 0x7d6a, 0x7d66, 0x7d50, 0x7d6e, 0x7d65, 0x38ec, 0x7d7f, 0xf9d5, + 0x7d9a, 0x7d69, 0x7d72, 0x7d6f, 0x7d7d, 0x7d70, 0x7e60, 0x7ec2, 0x7ee7, + 0x7ed1, 0x7eeb, 0x7ed4, 0x7edc, 0x7edb, 0x8037, 0x8025, 0x801f, 0x801e, + 0x8021, 0x801b, 0x8017, 0x8022, 0x802a, 0x801a, 0x802d, 0x8023, 0x8026, + 0x8036, 0x7fff, 0x823a, 0x8240, 0x8242, 0x8238, 0x823b, 0x823c, 0x8243, + 0x82e8, 0x4856, 0x82f9, 0x82eb, 0x82f1, 0x82e9, 0x82ec, 0x8415, 0x8447, + 0x8446, 0x8445, 0x8524, 0x8556, 0x8521, 0x8527, 0x854d, 0x8531, 0x851e, + 0x852c, 0x854f, 0x852b, 0x8553, 0x8551, 0x8554, 0x8529, 0x8550, 0x851f, + 0x8532, 0x852a, 0x851d, 0x8528, 0x852e, 0x852d, 0x86bc, 0x86bb, 0x86bd, + 0xf9e4, 0x8747, 0x8741, 0xf9e5, 0x8749, 0x48f4, 0x882e, 0x8827, 0x896a, + 0x897b, 0x8973, 0x8975, 0x8969, 0x8979, 0x8972, 0x8c76, 0x8c77, 0x8c74, + 0x8c73, 0x8d02, 0x8cfe, 0x8d01, 0x8cf9, 0x8cf4, 0x8ed3, 0x8ed5, 0x8ed8, + 0x8ec3, 0x8eca, 0x8ed0, 0x8ecb, 0x8ece, 0x8ec5, 0x8ee6, 0x8ec4, 0x8ec0, + 0x8ed4, 0x8ee8, 0x8f76, 0x8fa2, 0x8fae, 0x8fa8, 0x8fa3, 0x8fa7, 0x8f96, + 0x8fa9, 0x8fa5, 0x8faf, 0x8fa4, 0x8fab, 0x8faa, 0x8fa6, 0x8fa0, 0x9098, + 0x91db, 0x91f6, 0x91f5, 0x920c, 0x920a, 0x9775, 0x9268, 0x9263, 0x9266, + 0x4a58, 0x9264, 0x926a, 0x9269, 0x9395, 0x9402, 0x946a, 0x945e, 0x9468, + 0x9469, 0x9465, 0xf9fe, 0x95a7, 0x95ae, 0x95a8, 0x95b3, 0x969c, 0x96a9, + 0x96b6, 0x96b3, 0x96b2, 0xfa03, 0x96b8, 0x96c0, 0x96bf, 0x96ba, 0x96a8, + 0x983c, 0x9872, 0x9871, 0x9875, 0x9873, 0x9a17, 0x9a15, 0x9a16, 0x9a1b, + 0x9afa, 0x9af9, 0x9c2c, 0x9c85, 0x9c82, 0x9c7f, 0x9c7d, 0x9c88, 0x42f3, + 0x9d4e, 0x9d50, 0x9f93, 0x9f97, 0x9f98, 0x9f9b, 0x9f9c, 0x9f96, 0xa28b, + 0xa2fd, 0xa2fc, 0xfa17, 0x398b, 0x0108, 0x0107, 0x0373, 0x03a2, 0x03af, + 0x0382, 0x037b, 0x0374, 0x03b0, 0x0376, 0x03b9, 0x039e, 0x03b1, 0x03a1, + 0x03b2, 0x036e, 0xf80b, 0x3487, 0x0378, 0x037a, 0x0383, 0x039a, 0x04f8, + 0x0531, 0x0569, 0x0568, 0x059c, 0x0604, 0x0699, 0x07c7, 0x07c6, 0x07dc, + 0x07c4, 0x07d8, 0x07d4, 0x07df, 0x07d1, 0x07d0, 0x07d6, 0x07cf, 0x08ad, + 0x08af, 0x08a7, 0x08fd, 0x095b, 0x095a, 0x0a07, 0x0a9d, 0x0a9b, 0x0aab, + 0x0aa4, 0x0a9c, 0x0a9e, 0x0aa5, 0x0aaa, 0x0aa6, 0x0b0e, 0x0b7e, 0x0b7c, + 0x0eee, 0x0ed5, 0x0ee9, 0x0e42, 0x0ee2, 0x0f23, 0x0ed9, 0x0ed4, 0x0ee3, + 0x0f15, 0x0eef, 0x0ef0, 0x0ed6, 0x0edd, 0x0ef6, 0x0f1c, 0x0ed8, 0x0edb, + 0x0eda, 0x0eed, 0x1411, 0x1215, 0x1218, 0x121a, 0x121f, 0x1216, 0xf84d, + 0x1219, 0xf84b, 0x13f0, 0x1409, 0x141b, 0x7be7, 0x13f6, 0x13f4, 0x13b5, + 0x1410, 0x13f2, 0x1415, 0x13f3, 0x13f8, 0x1539, 0x153b, 0x1536, 0x140e, + 0x1572, 0x1574, 0x15b9, 0x15b7, 0x15b8, 0x1672, 0x166b, 0x181d, 0x1837, + 0x1822, 0x1843, 0x184d, 0x1838, 0x185b, 0x1879, 0x181b, 0x17f3, 0x1991, + 0x1a7b, 0x1a94, 0xf86f, 0x1a96, 0x1a7f, 0x1a8f, 0x1a84, 0x1a7c, 0x1a8e, + 0x1a90, 0x1a98, 0x1a83, 0x1a80, 0x1a93, 0x1a82, ERROR, 0x1b3d, 0x1b41, + 0x1ba1, 0x1b9f, 0x1c0a, 0x1c0d, 0x1cc8, 0x1cc9, 0x1cc7, 0x1ccd, 0x1d25, + 0x1eb1, 0x1edc, 0xf880, 0x1ee5, 0x1ef4, 0x1ebf, 0x1edb, 0x1eea, 0x1ef2, + 0x37fa, 0x1ef1, 0x1eed, 0x1ee6, 0x2002, 0xf882, 0x2125, 0x2118, 0x211f, + 0x2120, 0x21cf, 0x229d, 0x2299, 0x22a8, 0x2368, 0x2366, 0x2367, 0x2391, + 0x2413, 0x2415, 0x241d, 0x2416, 0x2419, 0x246b, 0x2468, 0x246a, 0x246d, + 0x2469, 0x24aa, 0x2557, 0x2552, 0x2550, 0x255f, 0x2567, 0x254f, 0x38f2, + 0x255b, 0x255c, 0x255d, 0x281f, 0x279d, 0x27b1, 0x27b0, 0x2794, 0x27c3, + 0x27af, 0x27a8, 0x27dc, 0x2798, 0x27c4, 0x27a4, 0x27ab, 0x27aa, 0x27a5, + 0x2821, 0x27eb, 0x27e6, 0x27f7, 0x27f8, 0x27fc, 0x27fa, 0x27e0, 0xf8aa, + 0x27f6, 0xf8a9, 0x27e1, 0x29ec, 0x29e2, 0x29e4, 0x29f9, 0x2c6f, 0x3a4c, + 0x2cbb, 0x2ce1, 0x2d00, 0x2cd8, 0x3a2f, 0x2cd6, 0x2ce2, 0x2cc3, 0x2cb3, + 0x2cd2, 0xf8c1, 0x2cce, 0x2cd0, 0x2cd5, 0x2cb9, 0x2cba, 0x2ccf, 0x2cbd, + 0x2edb, 0x2faa, 0x2fad, 0x2fb8, 0x2fb6, 0x2fb5, 0x2faf, 0x2fb4, 0x2fb7, + 0x2fa8, 0x2fb9, 0x2fbe, 0x3082, 0x30bc, 0x30b8, 0x30b6, 0x30b9, 0x3ac1, + 0x3110, 0x3227, 0x3269, 0x3270, 0x3256, 0x326b, 0x327a, 0x326c, 0x326d, + 0xf8d5, 0x67c1, 0x338d, 0x3390, 0x35b6, 0x3610, 0x3612, 0x35ba, 0x35bd, + 0x3605, 0x35c2, 0x3607, 0x35f5, 0xf8e9, 0x35af, 0x35f4, 0x35f7, 0x35f8, + 0x3611, 0x38f6, 0x38f5, 0x38fb, 0x3901, 0x3900, 0x3902, 0x38fe, 0x38fa, + 0x38fd, 0x3c40, 0x3a37, 0x3a49, 0x3a4b, 0x3a46, 0x3a47, 0x3ab3, 0x3ab2, + 0x3ab0, 0x3ab7, 0x3b11, 0x3bcc, 0x3bdf, 0x3bd3, 0x3bd5, 0x3bdb, 0x3bc5, + 0x3bc8, 0x3bc9, 0x3be2, 0x3bca, 0x3bd1, 0x3bd2, 0x3bdd, 0x3e6c, 0x3e73, + 0x3f21, 0x3ef0, 0x3f1f, 0x3f3b, 0x3f22, 0x3f23, 0x3ee8, 0x3edd, 0x3d3f, + 0x3f1b, 0x3eed, 0xf90e, 0x3ef2, 0x3d46, 0x3edc, 0x3ee9, 0x3f1d, 0x3eda, + 0x3ee6, 0x4313, 0x4315, 0x4316, 0x433c, 0x430b, 0x431c, 0x433a, 0x433d, + 0x439a, 0x431d, 0x4309, 0x4308, 0x433b, 0x4522, 0x4526, 0x4525, 0x4524, + 0x039b, 0x458f, 0x4590, 0x45e6, 0x45e3, 0x45e5, 0x4611, 0xf925, 0x46ae, + 0x46be, 0x46b4, 0x46b3, 0x46af, 0x4691, 0x46c2, 0x46b6, 0x46b2, 0x4857, + 0x483b, 0x4858, 0x4851, 0x4841, 0x4839, 0x3e8f, 0x4859, 0x4845, 0x4861, + 0x48e8, 0x49fa, 0x49ea, 0x49ef, 0x49f2, 0x49f0, 0x4b08, 0x4b70, 0x4b6a, + 0x4b73, 0x4b68, 0x4bc8, 0x4bf2, 0x0b7b, 0x4cae, 0x4cab, 0x4cb5, 0x4caf, + 0x4cb2, 0x4cb6, 0x4cb0, 0x4d1e, 0x4e03, 0x4e06, 0x4e1f, 0x3fac, 0x4e0f, + 0x4e02, 0x4e19, 0x4e18, 0x4e22, 0x4e15, 0x4e07, 0x4e0d, 0x4e24, 0x4e0c, + 0x4e1e, 0x4f89, 0x4f8a, 0x500a, 0x500b, 0x5007, 0x5004, 0x5009, 0x5084, + 0x5083, 0x5218, 0x5214, 0x5205, 0x5216, 0x520e, 0x5211, 0x5208, 0x520b, + 0x5215, 0x5085, 0x5237, 0x522a, 0x520d, 0x520f, 0x537e, 0x5376, 0x5377, + 0x53ec, 0x54fc, 0x5508, 0x54ff, 0x5503, 0x5510, 0x5505, 0x5506, 0x54fa, + 0x56c7, 0x56c0, 0x56c3, 0x56a7, 0x56a8, 0x56ab, 0x56c1, 0x56aa, 0x56c8, + 0x5743, 0x5802, 0x580e, 0x5801, 0x57fe, 0x5803, 0x4168, 0x5822, 0x5821, + 0x5807, 0x5808, 0x580c, 0x59ca, 0x59bc, 0x59be, 0x59bd, 0xf95c, 0x59bb, + 0x59b9, 0x41ab, 0x59c5, 0x5a99, 0x5b6b, 0x5b93, 0x5b94, 0x5ba9, 0x5ba0, + 0x5ba6, 0xf961, 0x5bab, 0x5b9e, 0x5b9b, 0x5b91, 0x5b99, 0x5eb6, 0x5eb8, + 0x5e9a, 0x4291, 0x5e98, 0x5e9b, 0x5eb3, 0x5ea2, 0x22aa, 0x5ea0, 0x5e9f, + 0x605b, 0x6070, 0x6054, 0x6071, 0x6065, 0x6051, 0x609d, 0x6061, 0x605a, + 0x6074, 0x604c, 0x604b, 0x605e, 0x6058, 0x6053, 0x6052, 0x623b, 0x6239, + 0x62d6, 0x62e7, 0x62d7, 0x62d8, 0x62d9, 0x62da, 0x62db, 0x62dc, 0x62e0, + 0x62e4, 0x62dd, 0x62f5, 0x62f1, 0x6398, 0x639d, 0x6399, 0x6450, 0x6449, + 0x7fe4, 0x6462, 0x64d7, 0x6501, 0x64f7, 0xf97d, 0x658c, 0x659c, 0x8088, + 0x661f, 0x661e, 0x673d, 0x673f, 0x6711, 0x6759, 0x673e, 0x6758, 0x6800, + 0x679e, 0x67b6, 0x67aa, 0x67af, 0x67ac, 0x4430, 0x67c0, 0x67a9, 0x0b10, + 0x68ee, 0x6977, 0x6979, 0x697a, 0x697d, 0x697f, 0x6983, 0x6978, 0x697e, + 0x69e4, 0x69e6, 0x69e5, 0x445d, 0x6a4e, 0x6a59, 0x4475, 0xf98e, 0x6a4f, + 0x6a4a, 0x6ae3, 0x6ade, 0x6ae2, 0x6c74, 0x6cac, 0x6c61, 0x6c62, 0x6c76, + 0x6c7a, 0x6c79, 0x6c60, 0x6d64, 0x6e81, 0x6ddf, 0x6d84, 0x6d8a, 0x6d92, + 0x6d79, 0x6dde, 0x6d98, 0x6d6c, 0x6de1, 0xf9a5, 0x6d7c, 0x6d72, 0x6d81, + 0x6de0, 0x6d65, 0x44ff, 0x6d6a, 0x6d97, 0x6daa, 0x6dd3, 0x6dab, 0x6d6e, + 0x6dac, 0x6d76, 0x6d7b, 0x6dad, 0xf9a6, 0x6d94, 0x6dd7, 0x6d70, 0x6dd5, + 0x6df1, 0x6d7a, 0x6d68, 0x6d96, 0x450b, 0x6d73, 0x6dae, 0x6ddd, 0x6dda, + 0x6daf, 0x6db0, 0x6ddb, 0x6d62, 0x6df8, 0x71c2, 0x71c7, 0x71c8, 0x71c5, + 0x71c3, 0x71c6, 0x72de, 0x45c8, 0x7311, 0x7315, 0x7328, 0x7321, 0x732d, + 0x7351, 0x732b, 0x7316, 0x7324, 0x7335, 0x731f, 0x7312, 0x7310, 0x7380, + 0x733b, 0x7329, 0x732a, 0x731b, 0x7318, 0x7320, 0x733f, 0x731c, 0x7326, + 0x730b, 0x75be, 0x75c4, 0x75bd, 0x75fa, 0x75fb, 0x76b1, 0x76b2, 0x76b0, + 0x76b9, 0x76a6, 0x76bd, 0x76b6, 0x76b8, 0x76b4, 0x76b3, 0x76a7, 0x76ae, + 0x76bc, 0x77f2, 0x77f3, 0x77f4, 0x783b, 0x7840, 0x7846, 0x78f0, 0x78ee, + 0x78e8, 0x78f1, 0x78eb, 0x78ef, 0x79fc, 0x7a20, 0x7a09, 0x7a06, 0x7a03, + 0xf9cf, 0x7a19, 0x7a24, 0x7a1b, 0x7a1d, 0x79fd, 0x7a1e, 0x79f4, 0x7a01, + 0x7a08, 0x7a05, 0x7a23, 0x79ff, 0x7bea, 0x7c4d, 0x7c4e, 0x7c56, 0x7c57, + 0x7c51, 0x7c55, 0x7c54, 0x7ccb, 0x7cd4, 0x7cd1, 0x7ccf, 0x7cd2, 0x7cca, + 0x7cd6, 0x7d8b, 0x7d88, 0x7d85, 0x7d89, 0x1a9b, 0x7dbb, 0x7d8c, 0x4774, + 0x7d99, 0x7d8a, 0x7eec, 0x7eef, 0x7ef9, 0x7f09, 0x7ef8, 0x7ef3, 0x7f00, + 0x7f1d, 0x47ac, 0x7efd, 0x8048, 0x805c, 0x8055, 0x805e, 0x8049, 0x8063, + 0x8060, 0x8053, 0x8062, 0x8040, 0x8249, 0x824a, 0x824c, 0x824d, 0x830a, + 0x8306, 0x832f, 0x8321, 0x8307, 0x8309, 0x8302, 0x8316, 0x8303, 0x830b, + 0x830f, 0x8560, 0x8568, 0x855e, 0x855d, 0x8563, 0x855f, 0x8564, 0x8578, + 0x8561, 0x8569, 0x8565, 0x86da, 0x86e6, 0x86db, 0x86dc, 0x8739, 0x8757, + 0x8755, 0x8765, 0x8761, 0x8754, 0x8845, 0x8841, 0x883e, 0x8837, 0x8912, + 0x8913, 0x892c, 0x8996, 0xf9e9, 0x899c, 0x899d, 0x8985, 0xf9e8, 0x899f, + 0x89a3, 0x8c82, 0x8c83, 0xf9ee, 0x8d1d, 0x8d14, 0x8d1f, 0x8d20, 0x8e47, + 0x8e80, 0x8ec9, 0x8ef9, 0x8f06, 0x8ef0, 0x8ef8, 0x8eef, 0x8efd, 0x8ef1, + 0x8efe, 0x8fb8, 0x8fc0, 0x8fc3, 0x8fb5, 0x8fb6, 0x8fc9, 0xf9f3, 0x8fbd, + 0x8fba, 0x8fbf, 0x8fb3, 0x8fc6, 0x8fb2, 0x8fbc, 0x8fb7, 0x8fb9, 0x8fc8, + 0x90b5, 0x90b3, 0x4a16, 0x90ac, 0x90a9, 0x90ad, 0x9211, 0x920d, 0x9216, + 0x9289, 0x927c, 0x928b, 0x927b, 0x9288, 0x9284, 0x939d, 0x9398, 0x9488, + 0x9486, 0x9482, 0x948b, 0xf9ff, 0x9471, 0x9472, 0x9481, 0x948c, 0x9480, + 0x9489, 0x95bb, 0x95c1, 0x95be, 0xfa01, 0x95bd, 0x96c1, 0x96b4, 0x96b7, + 0x96c8, 0x4b3b, 0x96d3, 0x96d0, 0x96b0, 0x96ca, 0x96cd, 0x9815, 0x9819, + 0x9817, 0x983f, 0x9840, 0x9844, 0x987c, 0x9878, 0x9879, 0x9888, 0xfa06, + 0x9889, 0x987d, 0x9a23, 0x9a24, 0x9a26, 0x9a22, 0x9a27, 0x9a1f, 0x9ac9, + 0x9ac3, 0x9b0a, 0x9b0b, 0x9b04, 0x4bef, 0x9b03, 0x9b01, 0x9b09, 0x9c0f, + 0x9c2e, 0x9c2d, 0x9c91, 0x9c99, 0x9c9e, 0x9c90, 0x9c94, 0x9c9d, 0x9c98, + 0x9c9b, 0x9c9c, 0x9c9a, 0x9d54, 0x9f9d, 0x9f9f, 0x9fa3, 0x9fa4, 0x9fa5, + 0xa302, 0xa417, 0xa41b, 0xa419, 0xa4d1, 0x1537, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x0055, 0x0182, 0x0189, + 0x0187, 0x03be, 0x03bd, 0x03ca, 0x03d4, 0x03bc, 0x03c4, 0x03c1, 0x03c2, + 0x03d7, 0x0370, 0x03ba, 0x03e3, 0x03bb, 0x04b1, 0x04b6, 0x04b0, 0x056c, + 0x060d, 0x0607, 0x07f1, 0x07f5, 0x07ed, 0x07ef, 0x07eb, 0x07ec, 0x07ee, + 0x0807, 0x09c4, 0x0a08, 0x0ab3, 0x0aad, 0x0ab0, 0x0b11, 0x018a, 0x0f83, + 0x0f7a, 0x0f82, 0x0f68, 0x0f71, 0x0fb0, 0x0faf, 0x35f6, 0x0f6c, 0x0f6f, + 0x0f62, 0x0f65, 0x0f81, 0x0f7f, 0x0f64, 0x0f73, 0x0f6e, 0x0f67, 0x0f74, + 0x0f7d, 0x0f78, 0x0f85, 0x0faa, 0x0f88, 0x0fa6, 0xf84e, 0x0f8a, 0x0f84, + 0x5655, 0x1224, 0x1222, 0x1223, 0x1432, 0x145b, 0x144f, 0x3667, 0x1426, + 0x143e, 0x1442, 0x1447, 0x1422, 0x069b, 0x144a, 0x141f, 0x1449, 0x142b, + 0x1433, 0xf858, 0x142a, 0x1428, 0x153d, 0x153c, 0x15bf, 0x1679, 0x1680, + 0x167c, 0x167a, 0x1678, 0x1882, 0x185c, 0x185a, 0x184b, 0x187c, 0x187f, + 0x181f, 0x1889, 0x188b, 0x1857, 0x187e, 0x187d, 0x1853, 0x1a9f, 0x1abc, + 0x1aa5, 0x1a86, 0x1adc, 0x1aa4, 0x1ab6, 0x1aa2, 0x1ab4, 0x1b48, 0x1b46, + 0x1ba7, 0x1c14, 0x1c12, 0x1c11, 0x1ce1, 0x1cd0, 0x1d26, 0x1d28, 0x1d29, + 0x1f2f, 0x1f0d, 0x1f25, 0x1f14, 0x1f3c, 0x1f0b, 0x1f11, 0x1f30, 0x1f18, + 0x1f19, 0x1f36, 0x1f17, 0x1f10, 0x1f15, 0x2003, 0x2029, 0x204c, 0x213f, + 0x213e, 0x2134, 0x2142, 0x2135, 0x07f3, 0x21cd, 0x21d1, 0x21d2, 0x22ad, + 0x22ba, 0x22c1, 0x22bb, 0x22b4, 0x22bc, 0x236c, 0x2392, 0x2421, 0x2424, + 0x3f19, 0x24ad, 0x24ae, 0x24ab, 0x24ac, 0x2570, 0x2576, 0x2571, 0x2577, + 0x617f, 0x27ec, 0x281c, 0x27fb, 0x27ee, 0x28e2, 0x27fd, 0x281e, 0x283b, + 0x284a, 0xf8ae, 0x3992, 0x287d, 0x2856, 0x2844, 0x284b, 0x29fa, 0x29e8, + 0x29f8, 0x29ff, 0x29f7, 0x29f6, 0x29fe, 0x2a07, 0x2a5d, 0x2cd4, 0xf8c3, + 0x2cc8, 0x2cc5, 0xf8c0, 0x2cc9, 0x2d4d, 0x2d20, 0x2d36, 0x2d35, 0x2d88, + 0x2d25, 0x2d21, 0x2d26, 0x3a45, 0x2d3f, 0x2d3b, 0x2d24, 0x2d43, 0x2d4e, + 0x2d4f, 0x2d44, 0x2d40, 0x2d41, 0x2d39, 0x2d2b, 0x2edd, 0x2ede, 0x2fcd, + 0x2fcb, 0x2fdb, 0x2fd8, 0x2fd9, 0x2fd2, 0x2fca, 0x2fd1, 0x2fd4, 0x2ff9, + 0x2fd0, 0x305e, 0x305d, 0x308a, 0x3114, 0x3283, 0x3284, 0x329b, 0x3282, + 0x327d, 0x327c, 0x3299, 0x327e, 0x329a, 0x3295, 0x327b, 0x3286, 0x3348, + 0x3392, 0x35b2, 0x3642, 0x3672, 0x3615, 0x3630, 0x3643, 0x365b, 0x361d, + 0x3673, 0x362d, 0x3bc9, 0x3621, 0x361c, 0xf8ea, 0x3629, 0x361e, 0x3633, + 0x3910, 0x390e, 0xf8f1, 0x390d, 0x3911, 0x3912, 0x3917, 0x3909, 0x390f, + 0x3998, 0x3994, 0x3996, 0x3999, 0x3995, 0x3997, 0x3a50, 0x3a52, 0x3a4d, + 0x3a57, 0x3a53, 0x3a56, 0x3ab8, 0x3b12, 0x3bf1, 0x3bf0, 0x3bee, 0x3bef, + 0x3be5, 0x3beb, 0x3be7, 0x3bf2, 0x3be6, 0x3bf7, 0x3c09, 0x3c6b, 0x3c6a, + 0x3e79, 0x3ecd, 0x3eef, 0x3ee4, 0x3ee3, 0x3f6c, 0x3f67, 0x3f62, 0x3f58, + 0x3f69, 0x3fab, 0x3f57, 0x3fad, 0x3f54, 0x3fae, 0x3f76, 0x3f49, 0x3f45, + 0x3f4f, 0xf90f, 0x3f50, 0x3f7d, 0x3f44, 0x3f66, 0x3f48, 0x3fa3, 0x3f51, + 0x3f53, 0xf910, 0x3f60, 0x3f47, 0x3f5e, 0x3f85, 0x3fac, 0x3f6d, 0x3f75, + 0x3fa8, 0x3d55, 0x3f43, 0x3f4e, 0x3f5c, 0x3f56, 0x3f6e, 0x3f63, 0x3f6a, + 0x4356, 0x4312, 0x435c, 0x4358, 0x4355, 0x437e, 0x43a8, 0x4311, 0x4359, + 0x435a, 0x4367, 0x4354, 0x435b, 0x43f0, 0x4529, 0x452c, 0x452a, 0x4527, + 0x4567, 0x4568, 0x4593, 0x4595, 0x459a, 0x45ee, 0x45f1, 0x45ed, 0x45e9, + 0x46cb, 0x46df, 0x46db, 0x483c, 0x484e, 0x486c, 0x487b, 0x487c, 0x4883, + 0x486b, 0x4866, 0x4863, 0x48a0, 0x4885, 0x4868, 0x48a2, 0x49ec, 0x3ee8, + 0x49e7, 0x4a10, 0x4a18, 0x4a3a, 0x4a1a, 0x4a38, 0x4a41, 0x4a1b, 0x4a14, + 0x4a1c, 0x4a1d, 0x4b12, 0x4b0d, 0x4b07, 0x4b7e, 0x4b7f, 0x0ab9, 0x4b80, + 0x4b7a, 0x4bf3, 0x4cb9, 0x4cbb, 0x4cba, 0x4cbd, 0x4cb7, 0x4cbf, 0x4d21, + 0x4e3a, 0x4e3d, 0x4e36, 0x4e49, 0x4e81, 0x3fb6, 0x4e3f, 0x4e4d, 0x4e3e, + 0x3fbd, 0x4e30, 0x4e4f, 0x4f37, 0x4f98, 0x4f99, 0x5011, 0x500d, 0x5088, + 0x508a, 0x521c, 0x5255, 0x5256, 0x5262, 0x5257, 0x5242, 0x5210, 0x524d, + 0x525a, 0x5266, 0x5246, 0x287e, 0x524f, 0x62f9, 0x5387, 0x5384, 0x53f4, + 0x53f5, 0x53f2, 0x53f7, 0x5545, 0xf950, 0x5549, 0x5535, 0x54fd, 0x5530, + 0x5543, 0x5546, 0x40d6, 0x5533, 0x56c6, 0xf956, 0x56d4, 0x71d8, 0x56e0, + 0x0fa7, 0x5744, 0x0398, 0x5854, 0x583e, 0x5835, 0x583a, 0x4171, 0x5834, + 0x5839, 0x5846, 0x585a, 0x585b, 0x583c, 0x59dc, 0x59d6, 0x59d0, 0xf95e, + 0x5aac, 0xf95d, 0x5aa5, 0x5bf4, 0x5c24, 0x5be0, 0x5bfd, 0x5bf2, 0x5bfc, + 0x5c02, 0x5bf1, 0x5bff, 0x5bd2, 0x5bd8, 0x5bd3, 0x5bf9, 0xf963, 0x5bed, + 0x5bf7, 0x5bf0, 0x5bd7, 0x5c09, 0x5bf5, 0x5ec2, 0x5ec5, 0x5ecf, 0x4298, + 0x5ec1, 0x5ec6, 0x5ed4, 0x5ece, 0x609b, 0x6099, 0x608f, 0x60b7, 0x6082, + 0x6093, 0x60b4, 0x60c1, 0x6090, 0x609a, 0x6094, 0x609c, 0x60b5, 0xf96f, + 0xf96e, 0x609f, 0x608e, 0x609e, 0x623c, 0x6247, 0x6241, 0x62eb, 0x62ec, + 0x62ed, 0x62ee, 0x62df, 0x62f2, 0x630d, 0x630e, 0x0186, 0x63a9, 0x63a4, + 0x63a5, 0x645f, 0x645a, 0x6466, 0x6468, 0x646a, 0x6464, 0x6465, 0x64c1, + 0x64d8, 0xf97b, 0x64d9, 0x6509, 0x65aa, 0x65a3, 0x65b9, 0x59e2, 0x65a5, + 0x65ab, 0x6620, 0x6789, 0x678b, 0x67db, 0x67e4, 0x67ef, 0x67e2, 0x67e9, + 0x67f0, 0x67f3, 0x67dd, 0x681e, 0x691d, 0x6946, 0x697c, 0x6980, 0x6981, + 0x6982, 0x6987, 0x6988, 0x698a, 0x698c, 0x69e7, 0x69eb, 0x69ea, 0x6a68, + 0x6a6b, 0x6a69, 0x6a66, 0x6a6a, 0x6a65, 0x6ae5, 0x6ae4, 0x6ae6, 0x6d18, + 0x6e24, 0x6e48, 0x6e2f, 0x6e7e, 0x6d89, 0x6e1e, 0x6e49, 0x6e26, 0x6e09, + 0x6e34, 0x6e2d, 0x6e4a, 0x6e15, 0xf9a9, 0x6e33, 0x6e28, 0x6e27, 0x6e20, + 0x6e2b, 0x6e29, 0x6e6a, 0x6e0b, 0x6e0e, 0x6e1c, 0x6dff, 0xf9aa, 0x6e35, + 0x6e11, 0x6e4b, 0x6e4c, 0x6e1f, 0x6e0f, 0x6e39, 0x6e68, 0x6e1d, 0x6e08, + 0x6e0c, 0x6e0d, 0x6e62, 0x6eaf, 0x6e32, 0x6e2c, 0x6e64, 0x6e04, 0x6e16, + 0x6e4d, 0x6e07, 0x6eae, 0x71d4, 0x71d1, 0x71d5, 0x71d0, 0x7371, 0x735d, + 0x735b, 0x737a, 0xf9bd, 0x737f, 0x7379, 0x7367, 0x739e, 0x7394, 0x7364, + 0x735e, 0x7381, 0x735a, 0x7357, 0x737c, 0x7398, 0x7366, 0x737e, 0x7382, + 0x7368, 0x735f, 0x7363, 0x7397, 0x45cd, 0x7353, 0x737b, 0x737d, 0x7378, + 0x7406, 0x75c0, 0x75c2, 0x75c3, 0x76dc, 0x76e6, 0x76ec, 0x76f2, 0x76e8, + 0x76eb, 0x76ea, 0x76e5, 0x76e0, 0x76d0, 0x76d8, 0x76d5, 0x76d3, 0x76e4, + 0x76f3, 0x76db, 0x772f, 0x77f9, 0x785d, 0x785b, 0x784c, 0x7858, 0x7860, + 0x7853, 0x7850, 0x7907, 0x7908, 0x78f4, 0x78f6, 0x7904, 0x78fd, 0x7905, + 0x7a28, 0x7a56, 0x7a42, 0x7a5c, 0x7a3d, 0x7a2f, 0x7a2b, 0x7a58, 0x7a61, + 0x7a2c, 0x7a51, 0x7a50, 0x7a3c, 0x7a36, 0x46f6, 0x7a60, 0x7a5b, 0x7a2e, + 0x7a40, 0x7a5f, 0x7a26, 0x7a2d, 0x7a5e, 0x7a3b, 0x7bef, 0x7bf3, 0x7bee, + 0x7bed, 0x7c5a, 0x7c62, 0x7c5b, 0x7c5f, 0x7c5e, 0x7c64, 0x7ce0, 0x7ce1, + 0x7ce5, 0x7da5, 0x7d9b, 0x7d9f, 0x7d9c, 0x477a, 0x7daa, 0x7da4, 0x7da3, + 0x7e67, 0x7f26, 0x7f1a, 0x47b8, 0x7f1c, 0x7f15, 0x7f1b, 0x7f18, 0x7f1e, + 0x7f25, 0xf9dc, 0x807b, 0x8075, 0x8093, 0x808f, 0x807c, 0x809b, 0x8088, + 0x8091, 0x807e, 0x4801, 0x8086, 0x825b, 0x8254, 0x8335, 0x8340, 0x8337, + 0x8329, 0x8326, 0x8323, 0x8330, 0x8320, 0x8328, 0x8332, 0x832a, 0x8331, + 0x8324, 0x8341, 0x8342, 0x8343, 0x8325, 0x8338, 0x841c, 0x841d, 0x841e, + 0x84f6, 0x85a5, 0x8589, 0x859d, 0x858a, 0x8587, 0x85ab, 0x8586, 0x859e, + 0x8593, 0x85a1, 0x8588, 0x85a3, 0x859f, 0x85a0, 0x86ff, 0x8700, 0x8702, + 0x86f8, 0x86f7, 0x8701, 0x8787, 0x8789, 0x8776, 0x876e, 0x8777, 0x8782, + 0x8785, 0x8783, 0x8784, 0x8857, 0x884b, 0x8856, 0x885d, 0x8860, 0x884d, + 0x8855, 0x8854, 0x8853, 0x8850, 0x8863, 0x8862, 0x8917, 0x8916, 0x892d, + 0x89d9, 0x89bf, 0x492f, 0x89b2, 0x89ac, 0x89b0, 0x89cf, 0x89b8, 0x4931, + 0x89d3, 0x89b1, 0x89af, 0x89ce, 0x89b4, 0x89b7, 0x89d5, 0x499c, 0x8d38, + 0x8d28, 0x8d3f, 0x8d40, 0x8d41, 0x8d33, 0x8d2b, 0x8d2e, 0x8f11, 0x8f18, + 0x8f17, 0x8f19, 0x8f16, 0x49e6, 0x8f0d, 0x8f26, 0x8f79, 0x8fd8, 0x8ff3, + 0x8fd7, 0x8fcc, 0x8fcf, 0x8fcb, 0x8fd1, 0x8fce, 0x8fd4, 0x8fd5, 0x8fd3, + 0x8fd6, 0x8fcd, 0x8fda, 0x8fd2, 0x8fde, 0x90cc, 0x90b8, 0x90b7, 0x90c2, + 0x90c3, 0x91fa, 0x91f9, 0x921f, 0x921d, 0x4382, 0x92a6, 0x9290, 0x929e, + 0x9298, 0x9293, 0x9292, 0x92a5, 0x9295, 0x93a9, 0x93a8, 0x93aa, 0x93ab, + 0x93ac, 0x941f, 0x9422, 0x94aa, 0x9496, 0x9491, 0x94ab, 0x94a2, 0x94a4, + 0x949d, 0x9497, 0x947d, 0x949f, 0x949c, 0x9499, 0x94a6, 0x9492, 0x94a7, + 0x95c9, 0x95c8, 0x95c7, 0x95cb, 0x9674, 0x96c9, 0x4b38, 0x96d2, 0x96db, + 0x96eb, 0x96e9, 0x96ef, 0x96ee, 0x96f9, 0x96de, 0x9816, 0x9845, 0x987f, + 0x9898, 0x989f, 0x9886, 0x9890, 0x989a, 0x989d, 0x988d, 0x989c, 0x98a0, + 0x98a7, 0x988f, 0x9a41, 0x9a35, 0x9a37, 0x9a30, 0x9a3a, 0x9a36, 0xfa08, + 0x9aca, 0x9b12, 0x9b15, 0x9b22, 0x9b13, 0x9b18, 0x9b21, 0x9c10, 0x9c20, + 0x9c2f, 0x9ca5, 0x9ca3, 0x9cb6, 0x9cab, 0x9d68, 0x9d67, 0x9d6f, 0x9d77, + 0x9d64, 0x9d78, 0x4c3a, 0x9d76, 0x9d6e, 0x4cb1, 0x9fd0, 0x9fb3, 0x9fcb, + 0x9fd6, 0x9fb1, 0x9fb4, 0x9fd7, 0x9fc6, 0x9fba, 0x9fd1, 0x9fd2, 0x9fb5, + 0x9fc4, 0x9fcc, 0x9fbb, 0x9fb2, 0xa25b, 0xa25a, 0xa259, 0xa299, 0xa294, + 0xa296, 0xa293, 0xa291, 0xa28f, 0xa298, 0xa30c, 0xa30a, 0xa30e, 0xa312, + 0xa311, 0xa30b, 0xa39a, 0x4d47, 0xa3b4, 0x4d51, 0xa41c, 0xa420, 0xa421, + 0xa4d3, 0xa4d2, 0xa538, ERROR, 0x4ccf, 0x011d, 0x0192, 0x018f, 0x018c, + 0x03ea, 0x04b9, 0x056e, 0x05a0, 0x91dd, 0x0612, 0x0617, 0x066d, 0x0805, + 0x07fb, 0x07fd, 0x0806, 0x0800, 0x07ff, 0x07fe, 0x08b6, 0x0905, 0x0907, + 0x0abc, 0x0abb, 0x0b8b, 0x0b87, 0x7bfb, 0x0fe7, 0x0fe6, 0x0fe2, 0x85d3, + 0x0fd9, 0x0fca, 0x1012, 0x1010, 0x0fdc, 0x0fd0, 0x0f8b, 0x1013, 0x2a10, + 0x0fda, 0xf84f, 0x0ffd, 0x0fe5, 0x0fcc, 0x1039, 0x0fc7, 0x0fd8, 0x1460, + 0x1464, 0x1486, 0x145e, 0x1466, 0x145f, 0x1477, 0x1482, 0x1496, 0x153e, + 0x1579, 0x157a, 0x1688, 0x1689, 0x168c, 0x43e0, 0x167b, 0x1686, 0x1894, + 0x1897, 0x18b7, 0x18b5, 0x18b8, 0x1893, 0x18b2, 0x18b4, 0x1899, 0x18c3, + 0x189d, 0x189b, 0x18a3, 0x3747, 0x199f, 0x199e, 0x19a3, 0x19a0, 0x19a1, + 0x1ac5, 0x1ac6, 0x1abe, 0x1ac4, 0x1abf, 0x1b4c, 0x1b4a, 0x1bb1, 0x1c15, + 0x1c17, 0x1c10, 0x1c18, 0x1ce0, 0x1cdf, 0x1d27, 0x1f43, 0x1f48, 0x1f1d, + 0x1f50, 0x1f58, 0x1f47, 0x1f54, 0x1f53, 0x1f40, 0x1f55, 0x3817, 0x1f5a, + 0x2470, 0x215b, 0x214d, 0x2156, 0x214f, 0xf887, 0x2159, 0xf888, 0x2154, + 0x2153, 0x2150, 0x22b3, 0x236e, 0x38a3, 0x236f, 0x2393, 0x2429, 0x2425, + 0x2428, 0x246f, 0x32b8, 0xf897, 0x24b3, 0x2579, 0x257e, 0x257c, 0x2583, + 0xf8ac, 0x2800, 0x2834, 0x2865, 0x2836, 0x28a7, 0x2859, 0x2858, 0x2831, + 0x2862, 0x2838, 0x2873, 0x283e, 0x2855, 0x2854, 0x2895, 0xf8ad, 0x28a5, + 0x2894, 0x289a, 0x289b, 0x2899, 0x289f, 0x2853, 0x2a12, 0x2a0a, 0x2a09, + 0x2a0c, 0x2a0b, 0x2a0e, 0x2a0d, 0x2a08, 0x2d38, 0x2d3a, 0x2d37, 0x2d3d, + 0x2d2d, 0x2d82, 0x2d95, 0x2d87, 0x2d9d, 0x2db5, 0x2d81, 0x2dc7, 0x2d9b, + 0x2d98, 0x2d94, 0x2d86, 0x2d90, 0x2d34, 0x2d8e, 0x2d85, 0x2da6, 0x2d96, + 0x2fea, 0x2fdf, 0x32bd, 0x2ff7, 0x2feb, 0x2fe0, 0x2fe8, 0x2fe1, 0x2fe9, + 0x2fee, 0x2fe5, 0x2fec, 0x3063, 0x30c6, 0x30c2, 0x30c1, 0x30c0, 0x30c3, + 0x3118, 0x32ae, 0x32a3, 0x32c5, 0x32a0, 0x32b4, 0x32a5, 0x3b1e, 0x32a4, + 0x32a8, 0x32a6, 0x36a8, 0x368d, 0x3682, 0x369e, 0x3689, 0x3683, 0x3691, + 0x36a6, 0x369a, 0x3690, 0x3685, 0x367d, 0xf8ec, 0x369b, 0x36a5, 0x36f0, + 0x3696, 0x3688, 0x36d6, 0x36d8, 0x3686, 0x36a4, 0x3697, 0x391c, 0x3919, + 0x399e, 0x399f, 0x399d, 0x399c, 0x3a5d, 0x3a5e, 0x3a73, 0x3a63, 0x3abe, + 0x3ac1, 0x3abc, 0x3abf, 0x3abb, 0x3abd, 0x3b13, 0x3b14, 0x3bf8, 0x3bfa, + 0x3c06, 0x3bfe, 0x3c51, 0x400b, 0x3ff1, 0x3fa9, 0x3fd5, 0x3fdc, 0x3fcb, + 0x3ff2, 0x405f, 0x3fdb, 0x3fd6, 0x3fd9, 0x3fd1, 0x3fcf, 0x3fd8, 0x3fe0, + 0x3fd4, 0x3ff3, 0x4005, 0x3fce, 0x3ff4, 0xf912, 0x3fda, 0x400e, 0x4006, + 0x3fd7, 0x3fcd, 0x4007, 0x3fe1, 0x4008, 0x43be, 0x43ef, 0x43d9, 0x43da, + 0x71d7, 0x43a0, 0x43df, 0x439e, 0x43bf, 0x43af, 0x43a7, 0x43aa, 0x43f4, + 0x43ae, 0x43b5, 0x43b8, 0x43db, 0x43c0, 0x43b7, 0x43a2, 0x43dd, 0x43a1, + 0x43a5, 0x43b4, 0x43a6, 0x43ab, 0x43ac, 0x439f, 0x43b1, 0x43fc, 0x452e, + 0x4530, 0x4599, 0x45f8, 0x45f6, 0x46f4, 0x46eb, 0x46e1, 0x46e4, 0x4875, + 0x4869, 0x3e9a, 0x4899, 0x489e, 0x4894, 0x4893, 0x4891, 0x4a19, 0x4a17, + 0x4a49, 0x4a47, 0x4a48, 0x4a52, 0x4a40, 0x4a63, 0x4a46, 0x4a5f, 0x4b0e, + 0x4b85, 0x4b87, 0x4bcb, 0x4bcc, 0x4bc9, 0x4ccb, 0x1ce7, 0x4d20, 0x4e5f, + 0x4e60, 0x4e6a, 0x4e76, 0x4e73, 0x4e71, 0x4e66, 0x3fc2, 0x4e6b, 0x4e79, + 0x4e7b, 0x4f3c, 0x4f9e, 0x4f9c, 0x501c, 0x501e, 0x5021, 0x5096, 0x50a1, + 0x50b6, 0x50a0, 0x5094, 0x5097, 0x5281, 0x5286, 0x52c0, 0x528a, 0xf94b, + 0x5285, 0x5295, 0x5249, 0x5282, 0x5284, 0x2878, 0x5290, 0x52b1, 0x53fe, + 0x53fb, 0x5550, 0x5556, 0x555a, 0x554c, 0x40dc, 0x5557, 0x56e1, 0x56d9, + 0x56db, 0x56f4, 0x5745, 0x5747, 0x5874, 0x586b, 0x5868, 0x5869, 0x5879, + 0xf95b, 0x5880, 0x5881, 0x5861, 0x5870, 0x586f, 0x5873, 0x585d, 0x59fa, + 0x41b3, 0x59f3, 0x5a0a, 0x5a17, 0xf95f, 0x5ab0, 0x5c3e, 0x5c46, 0x5c4f, + 0x5c44, 0x5c69, 0x5c33, 0x5c2f, 0x5c4e, 0x5c3a, 0x5c2b, 0x5ca9, 0x5c50, + 0x5c45, 0x5c37, 0x5c25, 0x5c2c, 0x5c3f, 0x5c34, 0x5c29, 0x5c1e, 0x5c3d, + 0x5eed, 0xf966, 0x5ef3, 0x5eea, 0x5eeb, 0x60cc, 0x60ce, 0x60d0, 0x60e3, + 0x60e0, 0x60d1, 0x60dc, 0x60dd, 0x60f0, 0x60db, 0x60e5, 0x60f1, 0x60c9, + 0x60e8, 0x60e7, 0x60c8, 0x60de, 0x60cd, 0x60c5, 0x60c6, 0x60e4, 0x60c3, + 0x62fb, 0x62fc, 0x62fe, 0x6303, 0x6300, 0x62fd, 0x6305, 0x6313, 0x63a7, + 0x63b4, 0x6470, 0x6474, 0x6471, 0x6475, 0x647d, 0x6473, 0x64c4, 0x64c3, + 0x64de, 0x64dd, 0x6511, 0x650f, 0x6510, 0x65c3, 0x65c2, 0x65ca, 0x65c1, + 0x6623, 0x67b1, 0x6824, 0x6811, 0x6825, 0x680a, 0x681f, 0x6820, 0x6814, + 0x6828, 0x6803, 0x6812, 0x680b, 0x6817, 0x2a11, 0x6949, 0x6989, 0x6990, + 0x698f, 0x6996, 0x6995, 0x6993, 0x69ed, 0x69f0, 0x43de, 0x6a85, 0x6a77, + 0x6a7a, 0x6a84, 0x6a79, 0x6a7d, 0x6a7b, 0x6aed, 0x6aec, 0x6df6, 0x6d9b, + 0x6e9d, 0x6f11, 0x6ec4, 0x6ec8, 0x6edf, 0x6ebf, 0x6eb3, 0x6eba, 0x6f10, + 0x6f06, 0x6e88, 0x6e9a, 0x6ee0, 0x6ecc, 0x6eb5, 0x6ee1, 0x6ebc, 0x6ec6, + 0x6f0b, 0x6ea4, 0x6e95, 0x6ea3, 0x6ee2, 0x6ecd, 0x6ee3, 0x6eab, 0x6ecb, + 0x6e8f, 0xf9ab, 0x6ea9, 0x6f24, 0x6ee4, 0x6f12, 0x6ee5, 0x6f67, 0x6eaa, + 0x6ea0, 0x6ee6, 0x6ec1, 0x6ee7, 0x6f0d, 0x6e86, 0x6eb0, 0x6e8b, 0x6ee8, + 0x6ec9, 0x6f19, 0x6ec0, 0x6f0c, 0x6ee9, 0x6eea, 0x71ed, 0x71e3, 0x71e4, + 0x71e8, 0x71d2, 0x71e2, 0x8666, 0x73cf, 0x73d1, 0x73c3, 0x73c9, 0x73ea, + 0x73b4, 0x73dc, 0x73bd, 0x73e6, 0x73c8, 0x73ec, 0x73b2, 0x73a9, 0x73d3, + 0x73c0, 0x73e9, 0x73d5, 0x45d9, 0x73c5, 0x45dd, 0x73cb, 0x73d0, 0x73d2, + 0x73e4, 0x73e8, 0x73cd, 0x73b6, 0x73aa, 0x73d4, 0x8449, 0x73c1, 0x73dd, + 0x73ce, 0x75c9, 0x75ca, 0x76fd, 0x76d9, 0x76ff, 0x7704, 0x76fa, 0x7706, + 0x7715, 0x7711, 0x7707, 0x770b, 0x77fc, 0x77fd, 0x786d, 0x7865, 0x7914, + 0x7913, 0x790c, 0x790b, 0x7918, 0x7922, 0x7a7d, 0x7a6f, 0x7a75, 0x7a7b, + 0x7a80, 0x7a7f, 0x7a96, 0x7a6d, 0x7a6b, 0x7a86, 0x7a73, 0x7a62, 0x7a77, + 0x7a81, 0x7a69, 0x7a82, 0x7a97, 0x7a84, 0x46fc, 0x7a78, 0xf9d0, 0x7a7a, + 0x7a6a, 0x7a65, 0x7a7e, 0x7a94, 0x7bc2, 0x7bc1, 0x7bf9, 0x7c71, 0x7c6b, + 0x7c6d, 0x7c6f, 0x7c6e, 0x7cf2, 0x7ce8, 0x7cef, 0x7ce9, 0x7cea, 0x7ced, + 0x7cf3, 0x7ce6, 0x7dc9, 0x7db4, 0x7db3, 0x7db9, 0x7dca, 0x7db1, 0x7db6, + 0x7dc7, 0x7dc4, 0x7db7, 0x7e6f, 0x7f33, 0x7f32, 0x7f1f, 0xf9d9, 0x7f2b, + 0x7f30, 0x7f36, 0x7f42, 0x7f41, 0xf9d8, 0x80a5, 0x80ab, 0x80a9, 0x80b3, + 0x80a7, 0x80a0, 0x80d2, 0x80a8, 0x80b6, 0x80ac, 0x80ae, 0x80e6, 0x8265, + 0x8347, 0x8363, 0x834d, 0x835f, 0x834b, 0x8360, 0x8349, 0x8353, 0xf9df, + 0x8f3a, 0x8357, 0x834e, 0x8352, 0x8354, 0x8420, 0x8422, 0x85c1, 0x85d7, + 0x85d5, 0x85c4, 0x85d0, 0x85bb, 0x85e2, 0x85cb, 0x85b8, 0x85bf, 0x85d8, + 0x85c0, 0x85ba, 0x85b4, 0x85bc, 0x85d4, 0x85ed, 0x85c2, 0x85d9, 0x85cc, + 0x872f, 0x8723, 0x8796, 0x878d, 0x879e, 0x8799, 0x8883, 0x4907, 0x886a, + 0x8869, 0x8875, 0x886c, 0x8880, 0x886e, 0x8881, 0x8877, 0x8876, 0x8873, + 0x8870, 0x8884, 0x8919, 0x89f2, 0x933d, 0x89ec, 0x89eb, 0x89f6, 0x89ef, + 0x89f4, 0x89ee, 0x89f3, 0x89ed, 0x8c9b, 0x8c98, 0x8c94, 0x147a, 0x8c9a, + 0xf9f0, 0x8d4c, 0x49a8, 0x8d57, 0x8d51, 0x8d62, 0x8d52, 0x8d5c, 0x8d53, + 0xf9ef, 0x8e85, 0x8f2d, 0x8f3e, 0x8f30, 0x8f7d, 0x8fe6, 0x8ff6, 0x8fe4, + 0x8fe9, 0x8fec, 0x8ff2, 0x8fe8, 0x8fe3, 0x8feb, 0x8ff0, 0x8fea, 0x8fe7, + 0x8ffd, 0x8fe5, 0x8fee, 0x8ff5, 0x8ff9, 0x8ff1, 0x8ff4, 0xf9f4, 0x9011, + 0x90de, 0x90d8, 0x90dd, 0x90db, 0x90d3, 0x90e1, 0x91de, 0x91fc, 0x9228, + 0x92b7, 0x92b8, 0x92c7, 0x92b2, 0x92a9, 0x92b9, 0x92bc, 0x92b3, 0x92d1, + 0x93b0, 0x93b1, 0x93b6, 0x9404, 0x942c, 0x94c1, 0x949e, 0x94ba, 0x4aca, + 0x94d1, 0x94d3, 0x94d4, 0x94d5, 0x94c5, 0x94b6, 0x94b2, 0x94b5, 0x94c3, + 0x94b9, 0x94c6, 0x95d6, 0x95e0, 0x95db, 0x95d7, 0x95dd, 0x9715, 0x970c, + 0x970f, 0x970e, 0x96fe, 0x9704, 0x970b, 0x9702, 0x96ff, 0x9708, 0x9710, + 0x9717, 0x9713, 0x9706, 0x9709, 0x9824, 0x9826, 0x9825, 0x9848, 0x98b5, + 0x98d2, 0x98d5, 0x98c4, 0x98af, 0x98ad, 0x98c1, 0x98c0, 0x98cc, 0x98cd, + 0x98c3, 0x98c8, 0x98c5, 0x98ba, 0x98d0, 0x98c2, 0x98ce, 0x4b8d, 0x9a43, + 0x9a42, 0x9a40, 0x9a31, 0x9acf, 0x9ace, 0x9b30, 0x9b34, 0x9b32, 0x9b43, + 0x9b3c, 0x9c11, 0x9c35, 0x9c34, 0x9c37, 0x9c31, 0x9cbf, 0x9cbc, 0x9cc2, + 0x9cc9, 0x9d83, 0x9d8b, 0x9da0, 0x9d8d, 0x9d8c, 0x9d9a, 0x9d8a, 0x9d91, + 0x9ff1, 0xa00f, 0xa001, 0xa007, 0xa00c, 0x4cc0, 0x9fdc, 0x9fee, 0x9ff7, + 0x9ff2, 0x9ff8, 0x9feb, 0x4cca, 0x9fe6, 0x9fed, 0x9fe9, 0xa008, 0xa000, + 0x9fe5, 0x9ffc, 0xa261, 0xa25e, 0xa25f, 0x4d25, 0xa29b, 0xa316, 0xa315, + 0xa320, 0xa314, 0xa31a, 0xa317, 0xa39c, 0x4d4a, 0xa3f1, 0x4d53, 0xa3f0, + 0xa428, 0xa424, 0xa42a, 0xa42b, 0xa4d5, 0xa504, 0xa505, 0xa591, 0xa592, + 0xa6a6, 0x0109, 0x0422, 0x041a, 0x040e, 0x041b, 0x0408, 0x50b3, 0xf81c, + 0x069d, 0x0812, 0x081e, 0x08bb, 0x08bf, 0x08bc, 0x0908, 0x0909, 0x0963, + 0x09c8, 0x3728, 0x0b8e, 0x0b8d, 0x1043, 0x104d, 0x106d, 0x1042, 0x1052, + 0x1051, 0x1069, 0x1050, 0x1056, 0x106c, 0x1044, 0x1045, 0x106b, 0x3605, + 0x1068, 0x1057, 0x122e, 0x1231, 0x122d, 0x148b, 0x14b2, 0x148d, 0x14a3, + 0x14a4, 0x1490, 0x1489, 0x148e, 0x1492, 0x157b, 0x1690, 0x168f, 0x18e9, + 0x18cd, 0x18c5, 0x18d0, 0x18c9, 0x18d1, 0x18c7, 0x18d2, 0x185f, 0x18e1, + 0x18cc, 0x18c6, 0x18e4, 0x19a9, 0x1ad3, 0x1ada, 0x1ad2, 0x1adb, 0x1b4d, + 0x1b4e, 0x1c1c, 0x1ce8, 0x1f6c, 0x1f5f, 0x1f66, 0x1f64, 0x1f78, 0x1f65, + 0x1f6d, 0x1f61, 0x1f7a, 0x2007, 0x2166, 0x2168, 0x2162, 0x22d3, 0x22d4, + 0x22d1, 0x22dc, 0x2373, 0x2372, 0x242d, 0x242c, 0x242f, 0x2472, 0x24b4, + 0x2589, 0x28cd, 0x28a6, 0x28a2, 0x28a0, 0x2846, 0x28a1, 0x6857, 0x28a3, + 0x28b1, 0x28db, 0x28f6, 0x28dc, 0x28d6, 0x2a13, 0x2d9c, 0x2d97, 0x2dd8, + 0x2de4, 0x2dd4, 0x2de5, 0x2ddb, 0x2dd0, 0x2dda, 0x2dcc, 0x2ddc, 0x2ded, + 0x2dd3, 0x2dd1, 0x2dce, 0x2dd9, 0x2ddd, 0xf8c6, 0x2ee6, 0x2ee5, 0x2ee9, + 0x2fff, 0x2ffe, 0x300e, 0x308c, 0x30ca, 0x30cb, 0x311a, 0x32d7, 0x32cf, + 0x32d0, 0x32c9, 0x32cc, 0x32d3, 0x33a4, 0x33a3, 0x3681, 0x3726, 0x36f3, + 0x3727, 0x36f2, 0x36ff, 0x36f5, 0x36fc, 0x370e, 0x3bf0, 0x36f6, 0x3700, + 0x3723, 0x3705, 0x3725, 0x3708, 0x3750, 0x3925, 0x3920, 0x3923, 0x3921, + 0x39a1, 0x3a69, 0x3a6c, 0x3a68, 0x3a6b, 0x3acc, 0x3acd, 0x3c10, 0x3c0d, + 0x3c0a, 0x3c16, 0x3c14, 0x3c52, 0x4028, 0x402e, 0x402c, 0x404d, 0x4049, + 0x4031, 0x4030, 0x4033, 0x402d, 0x4036, 0x403e, 0x402f, 0x4027, 0x4034, + 0x404c, 0x43fe, 0x4412, 0x441f, 0x4417, 0x43f5, 0x4415, 0x43f7, 0x3e02, + 0x1f7d, 0x43fa, 0x43f9, 0x444b, 0x459c, 0x459d, 0x3e23, 0x46f0, 0x46f6, + 0x46ef, 0x489d, 0x489a, 0x48a7, 0x48af, 0x48aa, 0x4a64, 0x4a86, 0x4a75, + 0x4a70, 0x4a84, 0x4a6b, 0x4a85, 0x4a6c, 0x4b17, 0x4b94, 0x4b93, 0x4cd2, + 0x4cd7, 0x4cd4, 0x4ea6, 0x4ea7, 0x4e9c, 0x4e8b, 0x4e8d, 0x4e98, 0x4eb9, + 0x4e9b, 0x4e9d, 0x4e99, 0x4ea8, 0x4e91, 0x4e87, 0x4e9a, 0x4fa6, 0x501f, + 0x50a7, 0x50b1, 0x50b2, 0x50b7, 0x52d0, 0x52b3, 0x52b5, 0x52c4, 0x52c3, + 0x52bc, 0x52b2, 0x52ba, 0x52bb, 0x52c2, 0x52cd, 0x52be, 0x52b7, 0x538f, + 0x5403, 0x5404, 0x5571, 0x5577, 0x5574, 0x558b, 0x557a, 0xf951, 0x558c, + 0x5573, 0x56ff, 0x56fb, 0x56fd, 0x56f0, 0x56f3, 0x56fc, 0x56f2, 0x5892, + 0x589e, 0x58ae, 0x5896, 0x5a14, 0x5a12, 0x5a13, 0x5a16, 0x5a0f, 0x5ab6, + 0x5abd, 0x5c8c, 0x5cae, 0x5cac, 0x5cab, 0x5c99, 0x5c92, 0x5cbb, 0x5c9e, + 0x5c7e, 0x5caf, 0x5cbc, 0x5c98, 0x5f01, 0x5f09, 0x5f06, 0xf967, 0x5f07, + 0x5f08, 0x60cf, 0x610e, 0x6132, 0x4315, 0x6112, 0x6116, 0x6117, 0x611b, + 0x6115, 0x6131, 0x6118, 0x611a, 0x6110, 0x610a, 0x6109, 0x624f, 0xf973, + 0x630f, 0x6310, 0xf975, 0x6328, 0x6311, 0x6316, 0x6317, 0x6302, 0x63bb, + 0x63ba, 0x63c3, 0x63bc, 0x648a, 0x6484, 0x6486, 0x64e0, 0x6517, 0x6518, + 0x651e, 0x6515, 0x65d3, 0x65da, 0x65d9, 0x67e6, 0x67f4, 0x67e1, 0x6869, + 0x6840, 0x6858, 0x686c, 0x684d, 0x6921, 0x6999, 0x69f1, 0x3f68, 0x6a86, + 0x6f5b, 0x6f5c, 0x6f77, 0x6f2c, 0xf9ad, 0x6f58, 0x6f64, 0x6f61, 0x6f48, + 0x6f97, 0x6f59, 0x6f29, 0x6f62, 0x6f2e, 0x6f68, 0x6f90, 0x6f3a, 0x6f3d, + 0x6f5e, 0x6f46, 0x6f69, 0x6f65, 0x6f3e, 0x6f49, 0x6f56, 0x6fe1, 0x6f78, + 0x6f79, 0x6f66, 0x6f4a, 0x6f35, 0x6f7a, 0x6f92, 0x6f60, 0x6f36, 0x6f51, + 0x6f42, 0x455d, 0x6f3f, 0x6f7b, 0x6f5d, 0x6f94, 0x6f6a, 0xf9b5, 0x71f2, + 0x73bb, 0x741b, 0x741a, 0x7433, 0x7417, 0x740a, 0x7415, 0x7412, 0x7401, + 0x742d, 0x73fd, 0x7423, 0x7405, 0x7411, 0x7400, 0x741c, 0x7435, 0x742e, + 0x7436, 0x0abf, 0x742f, 0x740c, 0x7409, 0x7431, 0x73fc, 0x740f, 0x7418, + 0x7402, 0x7600, 0x771f, 0x7737, 0x465a, 0x7738, 0x772b, 0x772e, 0x7721, + 0x7730, 0x7729, 0x7731, 0xf9c9, 0x7701, 0x772c, 0x7722, 0x77ff, 0x7877, + 0x7867, 0x787f, 0x787d, 0x787b, 0x787e, 0x791e, 0x791c, 0x7921, 0x7926, + 0x7927, 0x7929, 0x792c, 0x791d, 0x792b, 0x7abf, 0x7aa4, 0x7aaa, 0x7aae, + 0x7a9f, 0x7ad0, 0x7ab1, 0x7aad, 0x7a9b, 0x7ab2, 0x7aa9, 0x7ab3, 0x7ab4, + 0x7aba, 0x7aa5, 0x7ab7, 0x7aac, 0x7acb, 0x7acf, 0x7bc6, 0x7c01, 0x7bff, + 0x7bfd, 0x7c77, 0x7c78, 0x7c76, 0x7cf7, 0x7dcc, 0x4785, 0x7dd4, 0x7dd7, + 0x7dd5, 0x7dd6, 0x7dd3, 0x7f5d, 0x7f55, 0x80e0, 0x8148, 0x80ee, 0x80db, + 0x80e7, 0x80d6, 0x80e5, 0x80e1, 0x80dd, 0x80e2, 0x8270, 0x8266, 0x826f, + 0x826e, 0x8381, 0x8369, 0x836e, 0x836d, 0x836c, 0x8384, 0x8385, 0x8371, + 0x8373, 0x836a, 0x836f, 0x837b, 0x856a, 0x857c, 0x857d, 0x8581, 0x85fa, + 0x8605, 0x85eb, 0x85fb, 0x85e9, 0x85ef, 0x85fc, 0x85e7, 0xf9e1, 0x85ee, + 0x85fd, 0x8732, 0x87a7, 0x87b5, 0x87b1, 0x87b9, 0x87a8, 0x87b3, 0xf9e6, + 0x888a, 0x8891, 0x888d, 0x8899, 0x490b, 0x889a, 0x889b, 0x8892, 0x888f, + 0x88ab, 0x4cdb, 0x4939, 0x8a75, 0x8a31, 0x8a38, 0x4937, 0x8a35, 0x8a69, + 0x8a3b, 0x8a3d, 0x8a6c, 0x8a79, 0x8a3c, 0x8a3e, 0x8c97, 0x8ca5, 0x8ca2, + 0x8c9d, 0x8ca1, 0x8d68, 0x8d6f, 0x8d6d, 0x8d72, 0x8d75, 0x8d77, 0x8d79, + 0x8eb5, 0x8eea, 0x8eab, 0x8f43, 0x8f41, 0x8f42, 0x9009, 0x9008, 0x9006, + 0x9001, 0x9003, 0x9000, 0x9004, 0x900a, 0x900e, 0x900d, 0x9007, 0x900f, + 0x9014, 0x9002, 0x9015, 0x900c, 0x9010, 0x9005, 0x90fd, 0x90ff, 0x9104, + 0x9100, 0x9109, 0x922b, 0xf9f7, 0x9231, 0x92db, 0x92c5, 0x92d3, 0x92ce, + 0x4a6b, 0x92c9, 0x92bf, 0x92cb, 0x92c0, 0x92d0, 0x92d4, 0x93c1, 0x93b9, + 0x93bb, 0x93c3, 0x93c9, 0x9407, 0x942d, 0x94f8, 0x94e1, 0x94fa, 0x94ef, + 0x94fd, 0x4acd, 0x94eb, 0x94f1, 0x94ed, 0x94fe, 0x95f8, 0x9603, 0x95ee, + 0x95e8, 0x9601, 0x96ec, 0x9722, 0x9714, 0x9734, 0x972f, 0x9739, 0x9741, + 0x973c, 0x9749, 0x9758, 0x973a, 0x9742, 0x973f, 0x9822, 0x9823, 0x984a, + 0x98dc, 0x98d9, 0x98db, 0x98e2, 0xfa07, 0x98df, 0x98e0, 0x98d7, 0x9a4f, + 0x9a46, 0x9a53, 0x9a55, 0x9a4e, 0x9a4a, 0x9a4c, 0x9a63, 0x9b51, 0x9b53, + 0x9b58, 0x9b4d, 0x9b5a, 0x9b49, 0x9b5d, 0x9c12, 0x9c3c, 0x9cd1, 0x9cdf, + 0x9cd6, 0x9cd8, 0x9ce0, 0x9cd9, 0x9db1, 0x9dac, 0x9daa, 0x9dee, 0x9dbd, + 0x4c4d, 0x9dc3, 0x9da8, 0x9dae, 0x9dab, 0xa01d, 0xa027, 0xa038, 0xa012, + 0xa048, 0xa02b, 0xa016, 0xa019, 0xa03d, 0xa023, 0xa02a, 0xa264, 0xa2ad, + 0xa2ac, 0xfa14, 0xa2b1, 0xa2af, 0xa32c, 0xa324, 0xa325, 0xa328, 0xa3f9, + 0xa3f7, 0xa3fd, 0xa3fe, 0xa439, 0xa433, 0xa4d7, 0xa4d8, 0xa4e4, 0x14a1, + 0xa50e, 0xa53b, 0xa544, 0xa542, 0xa594, 0xa593, 0xa5d5, 0xa6a7, 0x0431, + 0x0423, 0x0428, 0x0427, 0x04c6, 0x05a3, 0x0621, 0x081b, 0x3510, 0x08c1, + 0x08c3, 0x092a, 0x0969, 0x0a27, 0x10b6, 0x10a7, 0x10a4, 0x10a6, 0x1090, + 0x109e, 0x1094, 0x10a8, 0x10a5, 0x10a2, 0x1091, 0x367b, 0x14bc, 0x14bd, + 0x14b4, 0x14b0, 0x14e4, 0x1545, 0x154b, 0x157e, 0x157f, 0x157d, 0x15c3, + 0x18fc, 0x18f7, 0x18f0, 0x18ed, 0x18f1, 0x18f8, 0x1ae9, 0x1ceb, 0x381d, + 0x1f90, 0x1f8d, 0x1f86, 0x1f91, 0x1f8a, 0x2008, 0x2050, 0x22ea, 0x22e6, + 0x22e2, 0x22e7, 0x22ed, 0x22e1, 0x2434, 0x2476, 0x2475, 0x2473, 0x24b5, + 0x2590, 0x2592, 0x28e1, 0x28df, 0x28d5, 0x28f2, 0x28fe, 0x2913, 0x292e, + 0x2a19, 0x2e08, 0x64f5, 0x2e05, 0x2e09, 0x2e06, 0x2e03, 0x2dfd, 0x2dfc, + 0x2e02, 0x2e42, 0x301a, 0x3011, 0x3015, 0x3016, 0x30cc, 0x30cf, 0x30d0, + 0x3122, 0x311e, 0x3121, 0x32e5, 0x3b27, 0x3354, 0x32ef, 0x3353, 0x3351, + 0x33ad, 0x3767, 0x3768, 0x37a4, 0x3777, 0x3789, 0x3744, 0x378b, 0x3779, + 0x375b, 0x3743, 0x3757, 0x374a, 0x377c, 0x3746, 0x377b, 0x3756, 0x39a8, + 0x3a76, 0x3a72, 0x3ad6, 0x3ad8, 0x3ad1, 0x3c22, 0x3c20, 0x3c23, 0x3c1e, + 0x3c6e, 0x40a3, 0x4077, 0x40a6, 0x406d, 0x40a2, 0x407c, 0x4084, 0x4068, + 0x4074, 0x4086, 0x40a5, 0x407b, 0x407a, 0x4069, 0x4072, 0x4076, 0x444a, + 0x4437, 0x442a, 0x442d, 0x4446, 0x4428, 0x4426, 0x4442, 0x442c, 0x4438, + 0x442b, 0x4433, 0x4445, 0x4539, 0x46f9, 0x46fa, 0x48b8, 0x48b7, 0x48bb, + 0x48b9, 0x48b4, 0x4a6f, 0x4a87, 0x4a8f, 0x4aa2, 0x4aa3, 0xf931, 0x4b9b, + 0x4b9d, 0x4bce, 0x3fcf, 0x4ebd, 0x4ebf, 0x4e92, 0x3fcd, 0x4eef, 0x4ec9, + 0x4fa4, 0x4fa8, 0x4faa, 0x5028, 0x5024, 0x5025, 0x5026, 0x50a9, 0x50ba, + 0x50be, 0x50bc, 0x50c0, 0x52f0, 0x52df, 0x52e0, 0x52ed, 0x52db, 0x52fb, + 0x52b9, 0x52da, 0x52eb, 0x52ec, 0x559a, 0x559f, 0x559b, 0x5597, 0x55a1, + 0x570f, 0x5705, 0x5748, 0x4182, 0x58bc, 0x58ba, 0x5abf, 0x5d01, 0x5ce8, + 0x5cef, 0x5ce4, 0x5ce6, 0x5d02, 0x5ceb, 0x5ce0, 0x5ced, 0x5cd9, 0xf964, + 0x5d14, 0x5cee, 0x4252, 0x5d13, 0x5cf9, 0x5cf8, 0x5f25, 0xf969, 0x5f19, + 0x5f20, 0x5f43, 0x5f3f, 0x6145, 0x614c, 0x6149, 0x614f, 0x6141, 0x613e, + 0x614d, 0x6152, 0x614a, 0x614e, 0x6173, 0x6142, 0x6151, 0x6155, 0x6150, + 0x616c, ERROR, 0x616a, 0x6153, 0x6168, 0x6255, 0x6256, 0x631c, 0x631d, + 0x7f80, 0x631e, 0x6323, 0x631f, 0x63e1, 0x63cd, 0x63cb, 0x63cc, 0x63c8, + 0x63c9, 0x649b, 0x6494, 0x6492, 0x6496, 0x6493, 0x6495, 0x648f, 0x651d, + 0x6522, 0x6521, 0x65e9, 0x65ef, 0x65e0, 0x65e6, 0x65e4, 0x6829, 0x682c, + 0x6876, 0x6883, 0x6878, 0x683c, 0x4443, 0x687a, 0x4451, 0x68f2, 0x699e, + 0x699b, 0x699a, 0x69f6, 0x69f5, 0x6aa5, 0x6a93, 0x6aa4, 0x6e82, 0x6ec7, + 0x6fb7, 0x701d, 0x6fe2, 0x6fd7, 0x6fe3, 0x6fe4, 0x6fbc, 0x6fd3, 0x455a, + 0x6f5a, 0x6fd2, 0x6f2d, 0xf9af, 0x6fc4, 0x6fd0, 0x6fe5, 0x7005, 0x7007, + 0x6fe6, 0x701b, 0x6fe7, 0x6fd8, 0x6fbe, 0x7017, 0x6fb4, 0x6fd9, 0x6fe8, + 0x6fad, 0x6faf, 0x6fc8, 0x6fe9, 0x6fea, 0x71fe, 0x71fb, 0x7200, 0x7472, + 0x7470, 0x7446, 0x7459, 0x745e, 0x7448, 0x744f, 0x7471, 0x7460, 0x745f, + 0x746e, 0x7473, 0xf9c0, 0xf9bf, 0x7447, 0x746d, 0x746f, 0x7481, 0x746c, + 0x7478, 0x7483, 0x7449, 0x7468, 0x7474, 0x7463, 0x746a, 0x6885, 0x7465, + 0x7462, 0x74c8, 0x75d0, 0x75d4, 0x75d1, 0x7603, 0x7742, 0x7763, 0x7756, + 0x775b, 0x7755, 0x7750, 0x772d, 0x7744, 0x7748, 0x7745, 0x7782, 0x4665, + 0x7762, 0x7885, 0x788d, 0x7936, 0x792f, 0x7931, 0x7937, 0x7aa7, 0x7ad9, + 0x7af0, 0x7af2, 0x7afd, 0x7ae8, 0x7aeb, 0x7aee, 0x7ae0, 0x7ae9, 0x7aed, + 0x7ad6, 0x7af8, 0x7ad4, 0x7adf, 0x7ae7, 0x7ad8, 0x7ae3, 0x7aef, 0x7b0f, + 0x7bca, 0x1546, 0x7c05, 0x7c0c, 0x7c0d, 0x7c7f, 0x7c80, 0x7c81, 0x7d01, + 0x7d03, 0x7df2, 0x7de2, 0x7de3, 0x7dde, 0x7de9, 0x7de8, 0x7de0, 0x7e01, + 0x7df5, 0x7de4, 0x8d01, 0x7e77, 0x7f74, 0x7f6f, 0x7f62, 0x7f61, 0x7f6d, + 0x7f73, 0x7f6a, 0x7f69, 0x8112, 0x812d, 0x8114, 0x810f, 0x8129, 0x8116, + 0x8103, 0x8146, 0x815c, 0x8111, 0x8106, 0x80dc, 0x812b, 0x812a, 0x812c, + 0x8127, 0x827a, 0x839c, 0x8399, 0x8395, 0x838b, 0x8398, 0x8396, 0x8432, + 0x85a4, 0x85aa, 0x861b, 0x48af, 0x860d, 0x861c, 0x860a, 0x8620, 0x8608, + 0x861a, 0x8613, 0x8611, 0x875d, 0x875f, 0x875e, 0x8760, 0x87bb, 0x87bc, + 0x87c1, 0x87c0, 0x87c8, 0x87ce, 0x88a7, 0x88b2, 0x88b6, 0x88a5, 0x88ba, + 0x88b5, 0x88ad, 0x88a4, 0x88d3, 0x88b0, 0x88b1, 0x891d, 0x8a8d, 0x4941, + 0x8a91, 0x8ab6, 0x8ab7, 0x8abd, 0x8abc, 0x8a96, 0x8a94, 0x8aa0, 0x8ca8, + 0x8ca6, 0x8d84, 0x8d96, 0x8d88, 0x8d9a, 0x8ed1, 0x8ecf, 0x8f50, 0x8f51, + 0x8f4e, 0x8f80, 0x8f81, 0x901b, 0x9017, 0x9020, 0x9019, 0x901a, 0x9021, + 0x901e, 0x9018, 0x901d, 0x4a29, 0x912d, 0x9124, 0x9127, 0x912e, 0x9125, + 0x911c, 0x9119, 0x4a2a, 0x9123, 0x911f, 0x911a, 0x912b, 0x911e, 0x91e0, + 0x9233, 0x92e6, 0x92fc, 0x92e5, 0x92f8, 0x92f6, 0x92ea, 0x92f2, 0x92ed, + 0x92eb, 0x92f0, 0x92f1, 0x93c6, 0x93c8, 0x93ce, 0x93c5, 0x4a96, 0x93cb, + 0x9513, 0x9514, 0x9507, 0x950c, 0x961a, 0x4b12, 0x9617, 0x9606, 0x9616, + 0x9607, 0x9610, 0x9609, 0x9619, 0x9615, 0x976e, 0x973b, 0x973e, 0x976c, + 0x9765, 0x9764, 0x9759, 0x977c, 0x9770, 0x9779, 0x982c, 0x9852, 0x9851, + 0x984c, 0x9900, 0x9910, 0x9913, 0x98ff, 0x98fe, 0x98ed, 0x9a5a, 0x9a58, + 0x9a5c, 0x9ada, 0x9b78, 0x9b5e, 0x9b67, 0x9b64, 0x9c13, 0x9c23, 0x9c41, + 0x9c3f, 0x9c40, 0x9ced, 0x9ce3, 0x9cea, 0x9cf0, 0x9ce6, 0x9ce9, 0x9cf1, + 0x9cee, 0x9dd4, 0x9dd1, 0x9ddc, 0x9dec, 0xa069, 0xa06d, 0xa057, 0xa066, + 0xa0f9, 0xa04a, 0xa060, 0xa056, 0xa059, 0xa04c, 0xa06a, 0xa062, 0xa063, + 0xa070, 0xa05f, 0xfa0d, 0xa064, 0xa05d, 0xa068, 0xa09f, 0xa2ba, 0xa2b8, + 0xa2bc, 0xa2b9, 0xa2b4, 0xa33b, 0xa32d, 0xa338, 0xa32f, 0xa332, 0xa441, + 0xa4cb, 0xa4de, 0xa4dd, 0xa4da, 0xa4dc, 0xa510, 0xa54f, 0xa549, 0xa598, + 0xa596, 0xa597, 0xa5c7, 0x019c, 0xa5da, 0xa5d8, 0xa6a8, 0x010a, 0x019d, + 0x04cb, 0x0538, 0x0539, 0x05a6, 0x0823, 0x0822, 0x0821, 0x09ce, 0x0b92, + 0x0b91, 0x10ec, 0x10e0, 0x10ed, 0x1108, 0x10e5, 0x10ee, 0x10e4, 0x10eb, + 0x10e3, 0x10ea, 0x110a, 0xf859, 0x14d1, 0x14e3, 0x14d4, 0x14d0, 0x14d9, + 0x367e, 0x58e1, 0x14da, 0x14d3, 0x154c, 0x154d, 0x157c, 0x1580, 0x15cc, + 0x18ff, 0x1908, 0xa508, 0x1901, 0xf86b, 0x1900, 0x1aed, 0x1af3, 0x1aee, + 0x1af1, 0x1af0, 0x1ade, 0x1b51, 0x1f82, 0x1fa9, 0x1f98, 0x1f9d, 0x1f9a, + 0x1f9e, 0x1f9f, 0x1fa6, 0x1fa7, 0x2009, 0x202f, 0x2171, 0x216d, 0x2172, + 0x22ef, 0x22f0, 0x243b, 0x2439, 0x243c, 0x2438, 0x4bfd, 0x243a, 0x2478, + 0x2479, 0x2477, 0x2598, 0x259c, 0x2599, 0x259a, 0x2911, 0x290a, 0x28fd, + 0x290f, 0x2919, 0x2903, 0x2915, 0x290c, 0x2909, 0x2912, 0x2934, 0x292a, + 0x2908, 0x292d, 0x2928, 0xf8b1, 0x292c, 0x2926, 0x2933, 0x39a7, 0x2a1a, + 0x2a1e, 0x2e07, 0x2e2c, 0x2e32, 0x2e28, 0x2e31, 0x2e29, 0x2e30, 0x2e2a, + 0x2e44, 0x2e2e, 0x30d1, 0x3124, 0x32f7, 0x32f4, 0x32f3, 0x32f8, 0x37b5, + 0x3796, 0x3798, 0x3795, 0x3791, 0x37b2, 0x379e, 0x3759, 0x37a3, 0x379a, + 0x379b, 0x4320, 0x6183, 0x3ada, 0x3adf, 0x3b16, 0x3c1f, 0x3c2d, 0x3c2e, + 0x3c2b, 0x40b8, 0x40bb, 0x40bf, 0x40ba, 0x40d5, 0x40e3, 0x40c1, 0x40be, + 0x40bd, 0x40b4, 0x40c2, 0x40a1, 0x4087, 0x40d7, 0x40ca, 0x40b5, 0x40da, + 0x40d9, 0x40b3, 0x40d8, 0x4467, 0x4471, 0x4462, 0x445c, 0x4468, 0x4452, + 0x4456, 0x1109, 0x0442, 0x45a0, 0x4700, 0x46fe, 0x46ff, 0x48cb, 0xf928, + 0x48ca, 0x48a9, 0x48c8, 0x4ab4, 0x4aac, 0x4aaa, 0x4aa9, 0x4c0e, 0x4ce9, + 0x4ced, 0x4cf2, 0x4ceb, 0x4cee, 0x4ee8, 0x4edb, 0x4ed7, 0x4ee3, 0x4ee5, + 0x4eee, 0x4ed5, 0x4fb3, 0x502d, 0x50c1, 0x50c3, 0x530c, 0x530e, 0x5307, + 0x5317, 0x5309, 0x5316, 0x539a, 0x539c, 0x55b4, 0x55b7, 0x55b3, 0x154e, + 0x5713, 0x5714, 0x58e6, 0x58dc, 0x58e8, 0x58e5, 0x5a2e, 0x5a2c, 0x5a2b, + 0x5acd, 0x5d3d, 0x5d32, 0x5d2d, 0x5d45, 0x5d3e, 0x5d50, 0x5d25, 0x5d53, + 0x5d23, 0x5f37, 0x5f38, 0x5f47, 0x5f3d, 0x5f3e, 0x5f49, 0x5f4a, 0x5f1d, + 0x7ce9, 0x61a5, 0x618c, 0x618d, 0x6189, 0x6196, 0x6185, 0x618f, 0x6177, + 0x618e, 0x6182, 0x618a, 0x6188, 0x617b, 0x6197, 0x617d, 0x6179, 0x6259, + 0x6324, 0x632d, 0x632e, 0x632b, 0xf976, 0x63da, 0x63d8, 0x63d6, 0x6487, + 0x64a0, 0x6528, 0x6525, 0x651f, 0x65f3, 0x65f7, 0x65f6, 0x682b, 0x685b, + 0x6848, 0x81cb, 0x685c, 0x686d, 0x689d, 0x6899, 0x688c, 0x6891, 0x689b, + 0x689a, 0x689c, 0x6895, 0x688d, 0x6896, 0x68a5, 0x692a, 0x69a1, 0x69a4, + 0x69ad, 0x6aa9, 0x6aae, 0x6ab0, 0x700d, 0x6f63, 0x6f71, 0x7051, 0x7054, + 0x702a, 0x7044, 0x7055, 0x7099, 0x7039, 0x703f, 0x703e, 0x704f, 0x704d, + 0x7035, 0x7040, 0x7031, 0x6fd5, 0x702b, 0x7033, 0x7041, 0x7056, 0x704c, + 0x7046, 0x703c, 0x7045, 0x7043, 0x703d, 0x7070, 0x7057, 0x7038, 0x7058, + 0x4565, 0x7037, 0x7207, 0x7206, 0x7209, 0x74ab, 0x7490, 0x7493, 0x74bc, + 0x74a9, 0x749e, 0x74bf, 0x74aa, 0x7491, 0x74a4, 0x749a, 0x74a7, 0x74a1, + 0x749c, 0x74a2, 0x749b, 0x749f, 0x7494, 0x748f, 0x72f0, 0x7492, 0x7495, + 0x74a5, 0x74a6, 0x7604, 0x779c, 0x7779, 0x777a, 0x777e, 0x777b, 0x7771, + 0x7781, 0x777f, 0x777c, 0x777d, 0x7775, 0x7776, 0x788e, 0x788f, 0x793e, + 0x793f, 0x7940, 0x7941, 0x4704, 0x7b0d, 0x7b17, 0x7b10, 0x7b0e, 0x7aea, + 0x7b1d, 0x7b03, 0x7b22, 0x7b04, 0x7b00, 0x7b20, 0x7b21, 0x7b23, 0x7b13, + 0x7b09, 0x7b11, 0x7bcb, 0x7bce, 0x7bd0, 0x7bcc, 0x7bd4, 0x14db, 0x7c09, + 0x7c0b, 0x7c85, 0x7d06, 0x7d0d, 0x4764, 0x7d14, 0x7d0f, 0x7e09, 0x7e14, + 0x7e0b, 0x7dfc, 0x7e04, 0x7e0a, 0x7e00, 0x7dfd, 0x7e07, 0x7e06, 0x7e11, + 0x7e79, 0x7e78, 0x7f88, 0x7f80, 0x7f8b, 0x8159, 0x8161, 0x8175, 0x4823, + 0x8155, 0x815b, 0x815f, 0x8152, 0x8162, 0x8172, 0x815d, 0x8168, 0x8171, + 0x8165, 0x8166, 0x8167, 0x8176, 0x814c, 0x8160, 0x8174, 0x8150, 0x828a, + 0x8281, 0x8286, 0x827f, 0x8280, 0x83a5, 0x83a7, 0x83a8, 0x83a6, 0x83af, + 0x6195, 0x83b1, 0x8435, 0x8439, 0x85c3, 0x8630, 0x862a, 0x862b, 0x862d, + 0x862e, 0x862c, 0x8623, 0x8621, 0x8622, 0x876c, 0x8781, 0x878f, 0x8780, + 0x87d0, 0x87cd, 0x87d5, 0x87d4, 0x88d1, 0x88be, 0x88cb, 0x88ce, 0x88bd, + 0x88d0, 0x8b04, 0x8ad5, 0x8ad0, 0x8ad3, 0x8afb, 0x8ad8, 0x8ad1, 0x8afd, + 0x8ad9, 0x8ad6, 0x8ae6, 0x8af9, 0x8da1, 0x8d9d, 0x8d9e, 0x95d9, 0x8eff, + 0x8f5f, 0x8f57, 0x8f60, 0x8f59, 0x902c, 0x9025, 0x9027, 0x9030, 0x9024, + 0x9026, 0x902d, 0x902e, 0x9029, 0x9031, 0x9145, 0x9147, 0x9152, 0x914a, + 0x9150, 0x9146, 0x914f, 0x914e, 0x9153, 0x9321, 0x9309, 0x931a, 0x931b, + 0x5315, 0x9310, 0xf9f9, 0x9314, 0x930e, 0x9312, 0x930b, 0x93cf, 0x93d2, + 0x93d0, 0x93d4, 0x93d3, 0x93d1, 0x0b18, 0xf9fb, 0x9409, 0x951c, 0x9527, + 0x9525, 0x951b, 0x9529, 0x951f, 0x9530, 0x9524, 0x9528, 0x9519, 0x952f, + 0x9624, 0x9621, 0x9625, 0x9626, 0x9627, 0x9676, 0x9766, 0x9775, 0x9769, + 0x977e, 0x978f, 0x9774, 0x7210, 0x97ad, 0x982b, 0x982a, 0x9858, 0x9922, + 0x991d, 0x992b, 0x992c, 0x992d, 0x9933, 0x991b, 0x9927, 0x992a, 0x9928, + 0x993b, 0x9a7e, 0x9a71, 0x9a79, 0x9a78, 0x9a70, 0x9a6d, 0x9a7d, 0x9a75, + 0x9a76, 0x9ade, 0x9b66, 0x9b83, 0x9b87, 0x9b7b, 0x9b89, 0x9b86, 0x9b82, + 0x9b7c, 0x9b81, 0x9c43, 0x9c45, 0x9cf7, 0x9cf9, 0x9cfa, 0x9e05, 0x9dfe, + 0x9e0f, 0x9dff, 0x9dfa, 0x9e09, 0x9e20, 0x9e0c, 0x9e3c, 0x9e22, 0x9df8, + 0x9e0a, 0x9e08, 0x9df7, 0xa08e, 0xa077, 0xa08b, 0xa0b4, 0xa08a, 0xa09a, + 0xa079, 0xa083, 0xa07f, 0xa0a1, 0xa08f, 0xa0a3, 0xa081, 0xa094, 0xa07e, + 0xa082, 0xa090, 0xa0a5, 0xa0ad, 0xa09d, 0xa267, 0xa269, 0xa2cb, 0xa2c8, + 0xa2d1, 0xa340, 0xa34b, 0xa349, 0xa346, 0xa33e, 0xa343, 0xa33f, 0xa3a5, + 0xa3a7, 0xa44e, 0xa44d, 0x259b, 0xa4e5, 0xa4e1, 0xa4e2, 0xa516, 0xa514, + 0xfa1b, 0xa559, 0xa551, 0xa55f, 0xa54a, 0xa557, 0xa558, 0xa5ca, 0xa5db, + 0xa5de, 0xa5e0, 0xa5e1, 0xa5df, 0xa5e2, 0xa5e3, 0xa692, 0xa6bf, 0xa6be, + 0x010b, 0x0452, 0x044e, 0x34b9, 0xf813, 0x05a7, 0x0826, 0x0827, 0x08c6, + 0x090b, 0x096a, 0x0978, 0x111a, 0x1116, 0x1119, 0x1117, 0x111b, 0x1118, + 0x1120, 0x1237, 0x14ec, 0x1581, 0x923d, 0x190f, 0x19ad, 0x1afb, 0x1b52, + 0x1faf, 0x1fb7, 0x1fb2, 0x2178, 0x21ac, 0x2300, 0x22fe, 0x2302, 0x22fd, + 0x2303, 0x2440, 0x2443, 0x2442, 0x24b7, 0x25a2, 0x2900, 0x2935, 0x2941, + 0x2905, 0x0453, 0x2950, 0x294e, 0x2953, 0x2e53, 0x2e50, 0x2e57, 0x2e5f, + 0x2e55, 0x2eea, 0x3026, 0x9830, 0x302a, 0x3028, 0x302c, 0x302d, 0x30d4, + 0x3307, 0x3358, 0x3359, 0x37c5, 0x37cd, 0x37c7, 0x37e8, 0x3c4b, 0x3932, + 0xa697, 0x3ade, 0x3c32, 0x0ac8, 0xf915, 0x40f1, 0x40f0, 0x40ec, 0x4109, + 0x40f9, 0x40f5, 0x40fe, 0x4474, 0x4481, 0x447c, 0x4475, 0x4489, 0x4482, + 0x4497, 0x4486, 0x447d, 0x4493, 0x449c, 0x4476, 0x4480, 0x4545, 0x06a1, + 0x4703, 0x48c9, 0x48cd, 0x48d0, 0x4aad, 0x4ac5, 0x4ba2, 0x4cec, 0x4cf6, + 0x4cf3, 0x4ef3, 0x4efa, 0x4ef9, 0x4ef5, 0x4ef4, 0x4ef8, 0x4fb6, 0x4fb4, + 0x5032, 0x50cd, 0x50c8, 0x50ce, 0x50ca, 0x532a, 0x5321, 0x531d, 0x55bd, + 0x55be, 0x55c2, 0x40f1, 0x55c9, 0x571f, 0x58f1, 0x58ed, 0x58f2, 0x58e0, + 0x58f7, 0x5a30, 0x5a37, 0x5a31, 0x5a36, 0x5ac8, 0x5d6d, 0x5d69, 0x5d7d, + 0x5d61, 0x5d70, 0x5d71, 0x5d73, 0x5d76, 0x5d75, 0x5d78, 0x5d79, 0x5d64, + 0x5d6e, 0x5f51, 0x5f4f, 0x5f22, 0x61af, 0x61aa, 0x61a3, 0x619d, 0x619c, + 0x61a1, 0x61b6, 0x61ac, 0x61a2, 0x61a7, 0x61b0, 0x61a9, 0x61c3, 0x6331, + 0x6332, 0x6333, 0x6334, 0x6337, 0x633c, 0x63d9, 0x63dd, 0x63de, 0x63df, + 0x63e0, 0x64a5, 0x64aa, 0x64a2, 0x64a3, 0x6604, 0x6603, 0x65fe, 0x6628, + 0x68af, 0x68ad, 0x68a6, 0x69ac, 0x69a5, 0x69b0, 0x69b1, 0x6a01, 0x6ab2, + 0x6ad2, 0x6af1, 0x6fd1, 0x7047, 0x70c9, 0x70a7, 0x70c8, 0x7095, 0x708e, + 0x7091, 0x707d, 0x70ee, 0x708d, 0x708c, 0x70b0, 0x7096, 0x7042, 0x707c, + 0x70b1, 0x70b2, 0x7084, 0x709d, 0x70a1, 0x7098, 0x70b3, 0x7022, 0x707b, + 0x708a, 0x70ce, 0x7080, 0x7097, 0x70b4, 0x70b5, 0x709a, 0x709f, 0x7093, + 0x7212, 0x720b, 0x720e, 0x74a3, 0x74cc, 0x74dc, 0x74e1, 0x74de, 0x74d2, + 0x74db, 0x74d9, 0x74d7, 0x74d4, 0x74c9, 0x74eb, 0x74da, 0x74d1, 0x7504, + 0x74ca, 0x74e2, 0x75d7, 0x778c, 0x7799, 0x77a2, 0x7796, 0x7794, 0x779f, + 0x4667, 0x778e, 0x7803, 0x7894, 0x7893, 0x7944, 0x7b2f, 0x7b35, 0x7b2b, + 0x7b32, 0x7b2d, 0x7b36, 0x4714, 0x7b31, 0x7b12, 0x7b33, 0x7b1f, 0x7b34, + 0x7b40, 0x7b3f, 0x7b41, 0x7bd3, 0x7c89, 0x7d18, 0x7d10, 0x7e1a, 0x7e25, + 0x7e1e, 0x7f92, 0x7f95, 0x7f93, 0x8184, 0x819a, 0x8189, 0x818d, 0x8188, + 0x8191, 0x819b, 0x819c, 0x9548, 0x828e, 0x8292, 0x83c5, 0x83c1, 0x83b8, + 0x83be, 0x83b5, 0x83c7, 0x843c, 0x4889, 0x85ec, 0x863f, 0x8639, 0x8637, + 0x87a1, 0x8794, 0x87a0, 0x87de, 0x87db, 0x87df, 0x87dc, 0x88d6, 0x88dc, + 0x88dd, 0x88e0, 0x88e3, 0x88e1, 0x8b18, 0x8b19, 0x8b53, 0xf9ec, 0x8b44, + 0x8b0e, 0x8b0f, 0x8b47, 0x8b17, 0x8b1d, 0x8b11, 0x8cb4, 0x8cb6, 0x8db7, + 0x8dbe, 0x8dc2, 0x8db4, 0x8f31, 0x8f15, 0x8f83, 0x903b, 0x9036, 0x9042, + 0x9050, 0x9040, 0x9034, 0x9038, 0x903d, 0x903e, 0x9035, 0x903a, 0x9046, + 0x9037, 0x9039, 0x9045, 0x9177, 0x915d, 0x916a, 0x9176, 0x916b, 0x916c, + 0x9165, 0x9164, 0x9171, 0x915f, 0x9172, 0x91fe, 0x91ff, 0x923e, 0x932b, + 0x9336, 0x932d, 0x9339, 0x933f, 0x933b, 0x9333, 0x9342, 0x933a, 0x93d5, + 0x93d8, 0x93d9, 0x940d, 0x940a, 0x9439, 0x943a, 0x953d, 0x9545, 0x953a, + 0x9537, 0x953e, 0x9542, 0x9787, 0x978c, 0x9782, 0x976b, 0x97a0, 0x979a, + 0x9790, 0x978e, 0x97a1, 0x97bd, 0x97b2, 0x97b5, 0x97b7, 0x97aa, 0x97a2, + 0x97a5, 0x97ae, 0x97ab, 0x97bc, 0x9832, 0x985a, 0x9964, 0x995c, 0x994d, + 0x993f, 0x993e, 0x9952, 0x9958, 0x9957, 0x995e, 0x9953, 0x9954, 0x9956, + 0x8f65, 0x9a84, 0x9a85, 0x9a86, 0x9b97, 0x9ba1, 0x9ba2, 0x4c0b, 0xfa0a, + 0x9ba3, 0x9ba6, 0x4c17, 0x9c15, 0x9c24, 0x9c4a, 0x9c49, 0x9c48, 0x9c4b, + 0x9d0e, 0x9962, 0x9d0b, 0x9d0a, 0x9d08, 0x9d06, 0x9e43, 0x9e47, 0x9e3f, + 0x9e46, 0x9e50, 0x4c6d, 0x9e4b, 0x4c70, 0x9e52, 0xa0d7, 0xa0bf, 0xa0d8, + 0xa0e0, 0xa0e7, 0xa0b8, 0xa0d5, 0xa0ef, 0xa0e6, 0xa0e4, 0xa0d4, 0xa0d6, + 0xa0ea, 0x4ced, 0xa0bb, 0xa0e9, 0xfa10, 0xa26d, 0xa270, 0xa273, 0xa272, + 0xa2d4, 0xa2ce, 0xa2d5, 0xa35a, 0xa358, 0xa352, 0xa350, 0xa355, 0xa34e, + 0xa34d, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3d1, 0xa458, 0xa463, 0xa45e, 0xa454, + 0xa45b, 0xa4e9, 0xa4e7, 0xa4e8, 0xa51d, 0xa567, 0xa55a, 0xa55c, 0xa55b, + 0xa561, 0xa5a1, 0x4d8d, 0xa5a4, 0xa5e9, 0xa5ef, 0xa5e5, 0xa5f5, 0xa5eb, + 0xa5ed, 0xa696, 0xa695, 0xa6b3, 0xa6b5, 0xa6b1, 0x34a7, 0x044d, 0x0624, + 0x082b, 0x09cf, 0x0ac9, 0x1136, 0x1131, 0x1154, 0x113a, 0x1138, 0x1239, + 0x1238, 0x14f4, 0x14f3, 0x14f6, 0x14fc, 0x14f5, 0x14f1, 0x169c, 0x1918, + 0x191a, 0x1afc, 0x1afe, 0x1b03, 0x1b53, 0x1d2b, 0x1fc6, 0x1fc1, 0x217b, + 0x2306, 0x2449, 0x24b8, 0x25a3, 0x2952, 0x294d, 0x295f, 0x295e, 0x2961, + 0x2a23, 0x2e8c, 0x2e6f, 0x2e75, 0x2e74, 0x2e71, 0x2e70, 0x2e6c, 0x3126, + 0x3308, 0x6707, 0x37f0, 0x37ef, 0x37fb, 0x3810, 0x380c, 0x37f6, 0x37fe, + 0x3a7c, 0x3ae1, 0x3c38, 0x3c6f, 0x4118, 0x4115, 0x411c, 0x4110, 0x4135, + 0xf917, 0x4117, 0x411d, 0x4126, 0x4128, 0x4129, 0x412a, 0x411a, 0xf916, + 0x2307, 0x44ab, 0x44ac, 0x44a1, 0x44ae, 0x44a3, 0x44a7, 0x4548, 0x4604, + 0x46fd, 0x3e5a, 0x4708, 0x48d2, 0x4ac6, 0x4abe, 0x4b1c, 0x4ba6, 0x4ba7, + 0x4bab, 0x4c00, 0x4cfb, 0x4cfc, 0x4cf9, 0x4d01, 0x4f06, 0x4f04, 0xf93c, + 0x5034, 0x5336, 0x5332, 0x5342, 0x532d, 0x5335, 0x55d8, 0x5723, 0x5720, + 0x5901, 0x5900, 0x5903, 0xa6bc, 0x5a3c, 0x5a41, 0x5a35, 0x5ac9, 0x5d8e, + 0x5d9e, 0x5d99, 0x5db4, 0x5daa, 0x5d9f, 0x5d96, 0x5d9d, 0x5dc3, 0x5d74, + 0x5dab, 0x42af, 0x5f63, 0x5f5b, 0x5f5a, 0x61c5, 0x61c4, 0x61cf, 0x61c8, + 0x61a4, 0x61bd, 0x61d3, 0x6260, 0x633b, 0x63e3, 0x63e7, 0x64a8, 0x64ac, + 0x64a9, 0x652a, 0x6608, 0x6609, 0x68b9, 0x6ac1, 0x6ac2, 0x6ab8, 0x70e1, + 0x70eb, 0x70e5, 0x70fa, 0x70e4, 0x710b, 0x70d7, 0x70ef, 0x70e0, 0x70ec, + 0x70fb, 0xf9b0, 0x70d3, 0x70e6, 0x70fc, 0x70e3, 0x70cf, 0x70da, 0x70dc, + 0x70d2, 0x70a4, 0x456b, 0x7217, 0x7216, 0x74f2, 0x74fc, 0x7518, 0x74f6, + 0x74fe, 0x74f3, 0x74f7, 0x7501, 0x74f9, 0x7506, 0x74f5, 0x7510, 0x74df, + 0x7503, 0x7508, 0x75d8, 0x7605, 0x7797, 0x77b3, 0x77ae, 0x77af, 0x77a7, + 0x77b1, 0x77a8, 0x77ac, 0x77ab, 0x7804, 0x789a, 0x794a, 0x7b42, 0x7b58, + 0x7b4b, 0x7b45, 0x7b49, 0x7b4c, 0x7b59, 0x7b56, 0x471b, 0x7b46, 0x7b44, + 0x7b5b, 0x7b69, 0x7c8e, 0x7c8f, 0x7d1e, 0x68bc, 0x7e2f, 0x7f9e, 0x7f9d, + 0x7f9f, 0x7f9c, 0x81b4, 0x81ae, 0x81ab, 0x81b3, 0x81af, 0x81c2, 0x8293, + 0x8295, 0x8296, 0x8297, 0x83cf, 0x83ce, 0x83cb, 0x844b, 0x8646, 0x8643, + 0x8645, 0x8651, 0x87ae, 0x87af, 0x87b0, 0x87b8, 0x87e2, 0x87e3, 0x87e6, + 0x88ed, 0x88ea, 0x893a, 0x8b59, 0x8b84, 0x8b5f, 0x8b7c, 0x8b5c, 0x8b58, + 0x8b55, 0x8b5d, 0x8b7e, 0x8b80, 0x8b83, 0x8b57, 0x4963, 0x8b5e, 0x8cba, + 0x8dd5, 0x8f58, 0x8f68, 0x8f67, 0x904a, 0x904c, 0x9052, 0x9049, 0x904e, + 0x9047, 0x904d, 0x904b, 0x904f, 0x917e, 0x9187, 0x9183, 0x9189, 0x4aca, + 0x9186, 0x9188, 0x9247, 0x9242, 0x9249, 0x9248, 0x4a80, 0x4a84, 0x4a7f, + 0x9344, 0x9351, 0x9346, 0x9347, 0x93e4, 0x940f, 0x943f, 0x954b, 0x9557, + 0x9552, 0x4af1, 0x9551, 0x9558, 0x955e, 0x9553, 0x955d, 0x954d, 0x963c, + 0x963f, 0x9646, 0x963e, 0x9644, 0x9645, 0x9641, 0x9638, 0x9642, 0x9643, + 0x967a, 0x97a3, 0x97ba, 0x97c0, 0x97c4, 0x97c6, 0x97cb, 0x9861, 0x997a, + 0x9973, 0x9972, 0x9974, 0x9980, 0x9981, 0x9a47, 0x9a95, 0x9a8f, 0x9a90, + 0x9a92, 0x9a94, 0x9a8b, 0x9ae6, 0x9bb2, 0x9bb8, 0x9bbd, 0x9bbe, 0x9bce, + 0x9bba, 0x9c16, 0x9c26, 0x9c25, 0x9c4c, 0x9c50, 0x9c4e, 0x9c51, 0x9c52, + 0x9d14, 0x9d15, 0x9d1b, 0x9e82, 0x9e99, 0x9e9a, 0x9e7d, 0x9e85, 0x9e86, + 0x9e9c, 0x9e79, 0x9e7b, 0x9e80, 0x9e83, 0x9e81, 0xa11e, 0xa11b, 0xa12a, + 0xa0fb, 0xa105, 0xa120, 0xa111, 0xa104, 0xa0fd, 0xa103, 0xa110, 0xa118, + 0xa10a, 0xa14e, 0xa109, 0xa107, 0xa11c, 0x4d1c, 0xa277, 0xa276, 0xa2d8, + 0xa2d9, 0xa361, 0xa35c, 0xa35e, 0xa360, 0xa3aa, 0xa3d6, 0xa3d8, 0xa409, + 0xa408, 0xa46b, 0xa465, 0xa473, 0xa474, 0xa4ed, 0xa524, 0xa525, 0xa56a, + 0xa5a7, 0xa5a8, 0xa60b, 0xa5fa, 0xa5f9, 0xa5ff, 0xa604, 0xa5f6, 0xa605, + 0xa699, 0xa6ab, 0xa6bd, 0xa6b8, 0x34a8, 0x0464, 0x045a, 0x0572, 0x097a, + 0x0b95, 0x115f, 0x1161, 0x115e, 0x115a, 0x115c, 0x115d, 0x116e, 0x1157, + 0x1158, 0x1502, 0x150b, 0x1508, 0x1551, 0x1925, 0x1928, 0x1923, 0x1921, + 0x1924, 0x1929, 0x1b06, 0x1b0a, 0x1fca, 0x1fcc, 0x1fcb, 0x1fcf, 0x217f, + 0x217c, 0x21d6, 0x2309, 0x230b, 0x2376, 0x247d, 0x25a5, 0x295b, 0x295c, + 0x295d, 0x2965, 0x2e6d, 0x2e82, 0x2e83, 0x2e87, 0x2e95, 0x2e8a, 0x30d6, + 0x3128, 0x330d, 0x382e, 0xf8ee, 0x382d, 0x3821, 0x3819, 0x393b, 0x393c, + 0x393a, 0x3a7e, 0x3c3b, 0x4147, 0x4139, 0x4134, 0x4136, 0x4146, 0x413b, + 0x4141, 0x4145, 0x44c0, 0x44c4, 0x44ba, 0x44bd, 0x44be, 0x45a3, 0x470c, + 0x48d9, 0x4acd, 0x4bae, 0x4cff, 0x4d24, 0x4fbb, 0x4fbc, 0x5036, 0x50d5, + 0x50d3, 0x50d6, 0x533c, 0x533f, 0x55de, 0x55e3, 0x5727, 0x5729, 0x418b, + 0x5905, 0x5907, 0x590c, 0x5ad0, 0x5dbe, 0x5dbc, 0x5dd0, 0x5dc2, 0x5db5, + 0x5dc9, 0x5f66, 0x432b, 0x61d5, 0x61e2, 0x61dc, 0x61e3, 0x61da, 0x61c2, + 0x61e8, 0x63e9, 0x64af, 0x64ad, 0x64ae, 0x660b, 0x68c1, 0x69b6, 0x69b9, + 0x6ac0, 0x70a5, 0x7128, 0x7122, 0x7129, 0x7118, 0x711f, 0x711c, 0x7112, + 0x712a, 0x457a, 0x7121, 0x712b, 0x7117, 0x70f0, 0x7116, 0x7123, 0x752b, + 0x7526, 0x753d, 0x7522, 0x753a, 0x7531, 0x7532, 0x7554, 0x7521, 0x7535, + 0x4609, 0x752e, 0x7530, 0x752f, 0x7536, 0x75da, 0x75d9, 0x77bb, 0x77bc, + 0x77b7, 0x77c2, 0x77bd, 0x77b2, 0x466d, 0x5344, 0x5dd1, 0x7b52, 0x7b6b, + 0x7b67, 0x471f, 0x7b61, 0x7b6c, 0x7b51, 0x7b74, 0x7b77, 0x7b6f, 0x7b6d, + 0x7b68, 0xf9d1, 0x7b84, 0x7c90, 0x7c92, 0x7c93, 0x7d1f, 0x7e31, 0x7e38, + 0x7e39, 0x7e37, 0x7fab, 0x81c3, 0x81c8, 0x81cb, 0x81cf, 0x8298, 0x83d4, + 0x83d3, 0x83d8, 0x83d9, 0x83dd, 0x83d1, 0x83d6, 0x843e, 0x8658, 0x8657, + 0x8655, 0x87c4, 0x87e4, 0x88ee, 0x88ef, 0x88f3, 0x88f2, 0x88f0, 0x8bab, + 0x8b9a, 0x8baf, 0x8b97, 0x496a, 0x496c, 0x8bbf, 0x8b94, 0x8b93, 0x8cbe, + 0x8cbb, 0x8cbc, 0x8dd9, 0x8f6c, 0x9053, 0x9054, 0x905b, 0x9058, 0x9056, + 0x9057, 0x919f, 0x9194, 0x9196, 0x9197, 0x924a, 0x924b, 0x9355, 0x935a, + 0x935e, 0x935f, 0x9359, 0x935b, 0x9358, 0x9354, 0x93e8, 0x93eb, 0x93ec, + 0x9413, 0x9566, 0x956b, 0x9562, 0x9569, 0x9563, 0x955f, 0x954e, 0x9648, + 0x964a, 0x97e3, 0x97db, 0x97d8, 0x97d6, 0x9986, 0x9990, 0x9991, 0x9988, + 0x9994, 0x9983, 0x4bb2, 0x999c, 0x998d, 0x9985, 0x9a98, 0x9a9a, 0x9a9c, + 0x9ae7, 0x9bc5, 0x9bd0, 0x9bd1, 0x9c19, 0x9c27, 0x4c1d, 0x9c54, 0x9d2d, + 0x9d22, 0x4c2d, 0x9d1f, 0x9ebd, 0x9eae, 0x9ebb, 0x9ead, 0x9ebc, 0x9eb9, + 0x9eb4, 0x9ecb, 0x9eb7, 0x9eb3, 0x9eba, 0x9eb6, 0x9ecd, 0x9ebe, 0x9ec9, + 0xfa0b, 0xa15f, 0xa13b, 0xa161, 0xa15c, 0xa18a, 0xa15a, 0xa14d, 0xa146, + 0xa144, 0xa13d, 0xa140, 0xa13c, 0xa18c, 0xa141, 0xa14c, 0xa13e, 0xa14a, + 0xa27c, 0xa27a, 0xa365, 0xa36e, 0xa369, 0xa36a, 0xa36f, 0xa36c, 0xa370, + 0xa368, 0xa36b, 0x4d45, 0xa3ac, 0xa3de, 0xa3dd, 0xa3dc, 0x44c5, 0xa48c, + 0xa483, 0xa482, 0xa488, 0xa485, 0xa481, 0xa4f5, 0xa4ef, 0xa4f4, 0xa4f2, + 0xa4f6, 0xa4f3, 0xa4f0, 0xa4f1, 0xa52b, 0xa527, 0xa528, 0xa56c, 0xa5ae, + 0xa60e, 0xa61b, 0xa616, 0xa61f, 0xa622, 0xa620, 0xa621, 0xa614, 0xa613, + 0xa69d, 0xa69c, 0xa69e, 0xa69f, 0x046b, 0x08c8, 0x1178, 0x1176, 0x1170, + 0x1171, 0x150a, 0x192c, 0x2311, 0x247e, 0x2957, 0x2966, 0x2969, 0x2967, + 0x2968, 0x2971, 0x296f, 0xa3ae, 0x2e8b, 0x2e96, 0x3035, 0x303a, 0x306b, + 0x3316, 0x3843, 0x3846, 0x383f, 0x383b, 0x383d, 0x39b1, 0x39b2, 0x3ae4, + 0x3c40, 0x415d, 0x4151, 0x414d, 0x414c, 0x415b, 0x44d4, 0x44d2, 0x44ca, + 0x44c8, 0x44d0, 0x44c9, 0x4549, 0x45a4, 0x4712, 0x470f, 0x4711, 0x48db, + 0x48dd, 0x48dc, 0x4ad4, 0x4b21, 0x4bb2, 0x4d04, 0x4d02, 0x4f11, 0x4f16, + 0x4f10, 0x4fbe, 0x721a, 0x534c, 0x534a, 0x55f2, 0x55f1, 0x572a, 0x572c, + 0x572f, 0x5731, 0x5911, 0x5912, 0x5a4b, 0x5ddb, 0x5dd6, 0x5ddd, 0x5de2, + 0x5de4, 0x5de0, 0x5ddf, 0x5de3, 0x5f6e, 0x5f71, 0x61e9, 0x61ea, 0x6263, + 0x63eb, 0x63ea, 0x68bd, 0x68bb, 0x68c6, 0x68cc, 0x68c8, 0x44cf, 0x68c9, + 0x68ca, 0x68cf, 0x68d0, 0x69ba, 0x69fb, 0x6a03, 0x6ac4, 0x7149, 0x7153, + 0x7136, 0x714a, 0x7141, 0x714e, 0x7119, 0x714d, 0x7145, 0x714c, 0x7147, + 0x7148, 0x714f, 0x7137, 0x7142, 0x754a, 0x7546, 0x460a, 0x7549, 0x754f, + 0x7551, 0x754c, 0x460c, 0x7606, 0x7951, 0x7b7a, 0x7b83, 0x7b7e, 0x7b7f, + 0x7b80, 0x4bb5, 0x7c91, 0x7c94, 0x7c95, 0x7d21, 0x7d20, 0x7e3d, 0x7e40, + 0x7e46, 0x7e84, 0x7fac, 0x7fad, 0x482e, 0x81da, 0x81d9, 0x83e2, 0x83e1, + 0x83e3, 0x83e4, 0x83de, 0x83df, 0x8641, 0x8659, 0x865c, 0x865a, 0x87e8, + 0x88f6, 0x88fc, 0x88f7, 0x88fa, 0x88f9, 0x8bc4, 0x8bbe, 0x8bd2, 0x8bbd, + 0x8b95, 0x8bd4, 0x8de4, 0x9061, 0x9062, 0x9063, 0x9064, 0x9060, 0x905c, + 0x905d, 0x905e, 0x91a5, 0x91a6, 0x924c, 0x9368, 0x936e, 0x9371, 0x936b, + 0x936f, 0x93ee, 0x93f1, 0x93f0, 0x93ef, 0x9415, 0x9414, 0x8f6e, 0x9447, + 0x957c, 0x957a, 0x9574, 0x9576, 0x956e, 0x9578, 0x956d, 0x956c, 0x964e, + 0x97d7, 0x97ea, 0x97e5, 0x9864, 0x99b3, 0x99a3, 0x99a5, 0x99a7, 0x99a2, + 0x999f, 0x99a6, 0x999e, 0x99a8, 0x9aa9, 0x9aa6, 0x9aaa, 0x9aab, 0x9aa0, + 0x9aa1, 0x9aa8, 0x9ae8, 0x9ae9, 0x9aea, 0x9be4, 0x9bdf, 0x9be0, 0x9c28, + 0x9c5d, 0x9c5b, 0x9c56, 0x9c57, 0x9c5f, 0x9c62, 0x9ee1, 0x9ee3, 0x9ede, + 0x9ed9, 0x9ee8, 0x9ef2, 0x9ef6, 0x9ee6, 0x9ef4, 0x9ef5, 0x9ee5, 0x9ee2, + 0x4c8d, 0xa196, 0xa1aa, 0xa197, 0xa170, 0xa1a1, 0xa19d, 0xa1a9, 0xa16f, + 0xa17e, 0xa194, 0xa19a, 0xa173, 0xa187, 0xa171, 0xa177, 0xa188, 0xa18d, + 0xa185, 0xa178, 0xa1ad, 0xa280, 0xa281, 0xa2e5, 0xa2e7, 0xa37c, 0xa3af, + 0xa3e1, 0xa496, 0xa4a3, 0xa490, 0xa4f8, 0xa52e, 0xa575, 0xa57e, 0xa57d, + 0xa57b, 0xa578, 0xa5b0, 0xa634, 0xa636, 0xa630, 0xfa1d, 0xa62e, 0xa637, + 0x0ace, 0x0b97, 0x0b98, 0x117c, 0x117e, 0x117d, 0x117f, 0x150f, 0x16a4, + 0x1931, 0x192e, 0x192f, 0x1932, 0x1d2c, 0x1fd4, 0x1fdc, 0x1fd8, 0x200e, + 0x2183, 0x2184, 0x2312, 0x2972, 0x297c, 0x297e, 0x2ea6, 0x2ea0, 0x2e9e, + 0x2ea2, 0x312a, 0x3318, 0x384d, 0x3858, 0x385b, 0x5914, 0xf8f2, 0x3ae6, + 0x4164, 0x4168, 0x4160, 0x4162, 0x44d7, 0x454b, 0x48e0, 0x4b22, 0x4d05, + 0x4f19, 0x4f1a, 0x4fc3, 0x50d8, 0x50dc, 0x534f, 0x55f7, 0x55f4, 0x55f8, + 0x5913, 0x5a50, 0x5df0, 0x5de9, 0x5def, 0x5ded, 0x5dea, 0x5df8, 0x5e05, + 0x5df2, 0x5f72, 0x4331, 0x61f9, 0x61f3, 0x61f6, 0x61f2, 0x61f7, 0x6266, + 0x6265, 0x6340, 0xf977, 0x68d1, 0x68d3, 0x6a04, 0x7159, 0x7160, 0x715b, + 0x715d, 0x715e, 0x7169, 0x715c, 0x7161, 0x716a, 0x715f, 0x754e, 0x755c, + 0x7560, 0x7563, 0x75db, 0x77ca, 0x77c9, 0x77c8, 0x78a5, 0x78a3, 0x7b8e, + 0x7b87, 0x7b89, 0x7b85, 0x7b86, 0x7b8f, 0x7b8a, 0x7b90, 0x7c98, 0x7c9b, + 0x7e47, 0x7e49, 0x7e48, 0x81e5, 0x81ea, 0x81ed, 0x83f0, 0x83ef, 0x83f2, + 0x83ec, 0x8440, 0x8660, 0x865f, 0x87eb, 0x87ec, 0x8900, 0x8901, 0x8be2, + 0x8bdf, 0x8be0, 0x8be1, 0x8be3, 0x8cc3, 0x8deb, 0x8dea, 0x8f61, 0x8f71, + 0x906b, 0x9068, 0x9069, 0x9067, 0x91b0, 0x91b1, 0x91b2, 0x9251, 0x9374, + 0x957f, 0x9584, 0x9653, 0x9654, 0x97f0, 0x97f4, 0x97f1, 0x9837, 0x99bf, + 0x4bbc, 0x4bbb, 0x99bd, 0x99be, 0x99b7, 0x99c0, 0x99ba, 0x99b8, 0x99bc, + 0x99bb, 0x9aeb, 0x9be7, 0x9c1d, 0x9c1c, 0x9c63, 0x244b, 0x9d38, 0x9d36, + 0x9d34, 0x9d37, 0x9f06, 0x9f1c, 0x9f02, 0x9f1d, 0x9f1e, 0x9ee0, 0x9f11, + 0x9f18, 0x9f21, 0x9f20, 0x9f10, 0xa1bd, 0xa1ae, 0xa1b5, 0xa1b8, 0xa1b9, + 0xa1be, 0xa1c4, 0xa1bc, 0xa1ba, 0xa283, 0xa2ea, 0xa2ec, 0xa37e, 0xa37b, + 0xa3e5, 0xa4a7, 0xa49e, 0xa49a, 0xa52f, 0xa531, 0xa583, 0xa5b5, 0xa646, + 0xa641, 0xa643, 0xa63d, 0xa642, 0xa63b, 0xa647, 0x096b, 0x09d0, 0x118e, + 0x1b11, 0xf871, 0xf889, 0x244c, 0x312b, 0x384f, 0x385e, 0x3863, 0x386b, + 0x393f, 0x3ae9, 0x416d, 0x416b, 0x416a, 0x9f2a, 0x44e0, 0x44dd, 0x44e1, + 0x44de, 0x44dc, 0x454d, 0x4716, 0x48e3, 0x4ae5, 0x4ae4, 0x4f1d, 0x574b, + 0xa6c1, 0x5a4e, 0x5ad6, 0x5dfd, 0x5e07, 0x5dfe, 0x5e03, 0x5e0b, 0x5dff, + 0x5f7a, 0x5f77, 0x61fb, 0x6343, 0x63ed, 0x69bc, 0x44df, 0x6a05, 0x6ac6, + 0x6ac5, 0x7174, 0x7173, 0x7172, 0x7178, 0x7573, 0x757a, 0x4f1c, 0x7576, + 0x7575, 0x7577, 0x77cf, 0x77ce, 0x77cd, 0x78a8, 0x7b98, 0x7b92, 0x7b94, + 0x7c9a, 0x7fb4, 0x81eb, 0x81f4, 0x81f3, 0x81ee, 0x81f2, 0x81f0, 0x8664, + 0x8c05, 0x8bfb, 0x8bfc, 0x8df3, 0x906c, 0x91ba, 0x9379, 0x937e, 0x9378, + 0x93f4, 0x9416, 0x9657, 0x99c8, 0x99c3, 0x99ce, 0x9ab3, 0x9aed, 0x9aee, + 0x9bf1, 0x9bf8, 0x4c14, 0x9c64, 0x9c65, 0x9f35, 0x9f29, 0x9f2c, 0x9f31, + 0x9f2b, 0x9f2e, 0x9f25, 0xa1da, 0xa1e0, 0xa1d4, 0xa1e1, 0xa1dd, 0xa3e7, + 0xa412, 0xa4ae, 0xa4af, 0xa586, 0xa585, 0xa5d1, 0xa658, 0xa63f, 0xa652, + 0xa64b, 0xa653, 0xa650, 0xa656, 0xa657, 0xa6cd, 0xa6cb, 0x0831, 0x0830, + 0x09d1, 0x361c, 0x1192, 0x1190, 0x118f, 0x1193, 0x1191, 0x3772, 0x2313, + 0x247f, 0x2eac, 0x4170, 0x44e5, 0x4b23, 0x4b24, 0x4d08, 0x4d07, 0x4f1f, + 0x4f20, 0x4f21, 0x50e1, 0x5354, 0x5357, 0x5355, 0x55fa, 0x5738, 0x7186, + 0x5737, 0x5a53, 0x5f7e, 0x5f7b, 0xf971, 0x61fd, 0x61fc, 0x6346, 0x6932, + 0x6ac7, 0x7171, 0x7183, 0x716f, 0x717e, 0x717d, 0x7181, 0x717c, 0x758a, + 0x757e, 0x7580, 0x757d, 0x757f, 0x7582, 0x77d4, 0x77d0, 0x77d2, 0x7955, + 0x7b9b, 0x7b9a, 0x7e4e, 0x81f1, 0x83f8, 0x83fd, 0x865e, 0x8666, 0x8905, + 0x8c0a, 0x8c0b, 0x8c0e, 0x8c0d, 0x8c11, 0x8c09, 0x8c10, 0x8c0c, 0x8c12, + 0x8cc4, 0x8df7, 0x8df8, 0x8f6a, 0x8f6b, 0x91c0, 0x91c2, 0x9385, 0x9380, + 0x9384, 0x9381, 0x91c4, 0x958b, 0x958d, 0x958e, 0x9ab7, 0x9ab9, 0x9aef, + 0x9bfb, 0x9bff, 0x9c67, 0x9c68, 0x9c69, 0x9d3f, 0x9f3c, 0x9f4c, 0x9f3d, + 0x9f3e, 0x9f3f, 0x9f3b, 0xa1ff, 0x4d0e, 0xa1f6, 0xa1ee, 0xa1fc, 0xa1f8, + 0xa201, 0xa1fa, 0xa288, 0xa380, 0xa411, 0xa4fe, 0xa500, 0xa535, 0x503c, + 0xa5bd, 0xa5bb, 0xa65c, 0xa65a, 0xa6d1, 0xa6d0, 0x0a0b, 0x3873, 0x1939, + 0x1b1a, 0x1fe3, 0x2187, 0x2377, 0x2378, 0x2eb1, 0x386a, 0x3874, 0x3aeb, + 0x417b, 0x45a5, 0x48e4, 0x4d0b, 0x4d0e, 0x4d0c, 0x5739, 0x5e10, 0x5e11, + 0x5e16, 0x5f81, 0x5f80, 0x61fe, 0x6201, 0x6200, 0x6347, 0x63ef, 0x7188, + 0x758b, 0x758d, 0x7587, 0x7585, 0x758f, 0x7584, 0x7588, 0x758e, 0x758c, + 0x77d7, 0x77d6, 0x7b9f, 0x2188, 0x8203, 0x83fe, 0x87ef, 0x8909, 0x8908, + 0x8c20, 0x8c24, 0x8c1f, 0x9070, 0x9256, 0x93f7, 0x93f8, 0x93f6, 0x9590, + 0x965e, 0x97f7, 0x99d6, 0x99d5, 0x9abb, 0x9af0, 0x9c01, 0x9c6c, 0x9d41, + 0x9d42, 0x9f4f, 0x9f53, 0x9f58, 0xa212, 0xa204, 0xa213, 0xa205, 0xa20d, + 0xa382, 0xa381, 0xa4b5, 0xa4ba, 0xa5be, 0xa665, 0xa663, 0xa66e, 0xa66a, + 0xa66c, 0xa6c4, 0x096c, 0x7ba5, 0x1b12, 0x244d, 0x331f, 0x3877, 0x3878, + 0x3c44, 0x417c, 0x44eb, 0x44ea, 0x44ec, 0x45a7, 0x4719, 0x4f23, 0x7674, + 0x5601, 0x5e1c, 0x6203, 0x6348, 0x68da, 0x7191, 0x7192, 0x7596, 0x7597, + 0x7591, 0x7593, 0x77d8, 0x77d5, 0x7957, 0x7958, 0x7ba2, 0x8205, 0x83fa, + 0x890c, 0x890a, 0x8c2e, 0x8c29, 0x8c2f, 0x8cc5, 0x9072, 0x91c8, 0x925a, + 0x9259, 0x9389, 0x9388, 0x99db, 0x99d9, 0x99da, 0x9abc, 0x4bec, 0x9c06, + 0x9c05, 0x9c6f, 0x9c6d, 0x9c70, 0x9f60, 0x9f5e, 0x9f63, 0x9f5a, 0x9f5f, + 0xa219, 0xa21d, 0xa21b, 0xa222, 0xa21c, 0xa21e, 0xa2f7, 0xa384, 0xa415, + 0xa4b8, 0xa4c1, 0xa501, 0xa50a, 0xa5d2, 0xa675, 0xa674, 0xa672, 0x0ad0, + 0x1b1b, 0x2010, 0x2379, 0x44ed, 0x4bb9, 0x4f24, 0x4fc5, 0x5603, 0x634a, + 0x68f7, 0x69c1, 0x69c2, 0x7194, 0x7599, 0x759a, 0x795a, 0x7ba8, 0x7c25, + 0x7c9e, 0x8441, 0x8c32, 0x8c33, 0x91cb, 0x91ca, 0x91cc, 0x9593, 0x99e0, + 0x9c71, 0x9f6b, 0xa22b, 0xa229, 0xa21a, 0xa226, 0xa227, 0xa22a, 0xa2f8, + 0x503d, 0xa676, 0x1518, 0x387a, 0x417f, 0x4279, 0x63f0, 0x719a, 0x7196, + 0x759e, 0x759d, 0x75dc, 0x77da, 0x820b, 0x8402, 0x8442, 0x8667, 0x938b, + 0x99e2, 0x9f71, 0xa22f, 0xa22e, 0xa4c6, 0xa58e, 0xa67b, 0xa677, 0xa678, + 0xa67c, 0x387c, 0x6207, 0x7197, 0x7bd9, 0x890d, 0x890e, 0x99e3, 0x99e4, + 0x9af3, 0x9c75, 0xa237, 0xa235, 0xa58f, 0xa680, 0xa67f, 0xa6d4, 0x2eb4, + 0xa3ec, 0x8f75, 0x4d10, 0x6269, 0x75a4, 0x77db, 0x91d1, 0x938d, 0x9f76, + 0xa239, 0xa684, 0xa682, 0x0ad2, 0x44ee, 0x4d11, 0x5f84, 0x8f74, 0x938f, + 0x938e, 0xa23b, 0x08cb, 0xa688, 0xa686, 0x335c, 0x53a4, 0x9075, 0xa68b, + 0x1519, 0x7c9f, 0x99e5, 0xa240, 0x4d12, 0xa2fb, 0xa68c, 0x53a5, 0x9c77, + 0x9c78, 0xa6d6, 0x77df, 0x91d2, 0x151a, 0x7ba9, 0x91d3, 0xa4ca, 0x69c4, + 0x78b1, 0x9664, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, +}; + +/* + * The second table is generated by running the following sh+Perl + * over CNS.TXT: + +cat CNS.TXT | \ +perl -ne '$a{$1,hex$2,hex$3}=hex$4 if /^0x(\S)(\S\S)(\S\S)\s+0x(\S+)\s/;' \ + -e 'END {$o=" "; for $p (0..6) { for $r (0..93) { for $c (0..93) {' \ + -e '$k=$a{$p+1,$r+33,$c+33}; $k = 0 if !defined $k; $k >>= 16;' \ + -e '$k <= 3 or die; $v |= $k << $sh; $sh += 2;' \ + -e 'if ($sh == 32) { $o .= sprintf"0x%08xU, ", $v; $v=$sh=0; }' \ + -e '(print "$o\n"), $o=" " if length $o > 64; } } }' \ + -e 'if ($sh > 0) { $o .= sprintf"0x%08xU, ", $v; $v=$sh=0; }' \ + -e 'print "$o\n"; }' + + */ +static const unsigned int cns11643_forward_2[(7*94*94+15)/16] = { + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00800000U, 0x00002000U, 0x00000000U, 0x00002000U, + 0x00200080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x02000002U, 0x80000000U, 0x00000000U, 0x02000000U, + 0x00000000U, 0x00000000U, 0x00200800U, 0x00000000U, 0x00000020U, + 0x00000080U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000200U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000800U, 0x00000000U, 0xa0080000U, 0x00008000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, 0x00200000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000008U, 0x00000020U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000200U, 0x00000000U, 0x00000008U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008080U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, 0x00000000U, + 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000008U, 0x80000008U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x20000000U, 0x00000200U, 0x00000000U, 0x00000800U, 0x08000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x20000000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000200U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00800000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x20000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00020000U, 0x00000000U, 0x00000000U, 0x02000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000800U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00002000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x20000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x08000000U, 0x00000000U, 0x02000000U, 0x00000000U, + 0x00002000U, 0x00000000U, 0x00000000U, 0x80000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000080U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000020U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000008U, 0x00000000U, + 0x00000000U, 0x00080000U, 0x00000200U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000800U, 0x00000000U, 0x00000008U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00020000U, 0x02000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00820000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00080000U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000002U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x02000000U, 0xa02a0282U, 0x2aa00002U, 0x000808a8U, + 0x28228088U, 0x80080080U, 0xa28a02a2U, 0x208a0a20U, 0xaa00a2aaU, + 0x080aa2a2U, 0x0880808aU, 0x8082802aU, 0x82a0a282U, 0x80a20880U, + 0x022a0088U, 0xaa08888aU, 0x88a082a8U, 0x022808a0U, 0x82800a80U, + 0x0a280022U, 0xa2288022U, 0x8a0a08aaU, 0x828a0a2aU, 0x8a08a00aU, + 0x8aaa8088U, 0x08222822U, 0x22088a02U, 0xa082a802U, 0xa8200a08U, + 0x8a088020U, 0x2a00080aU, 0x80202208U, 0x02822802U, 0x288202a0U, + 0x82088808U, 0x08020a82U, 0x8a0882a2U, 0x2a80a200U, 0x8022228aU, + 0xaa0aa280U, 0x80208000U, 0x8282aa82U, 0x0aa8882aU, 0xa0020088U, + 0xa2288aa8U, 0x822288aaU, 0xa20a88aaU, 0x00888282U, 0x20a00028U, + 0xa8000080U, 0x20a08a28U, 0x00a888a0U, 0x00002a88U, 0x2a828aaaU, + 0x82282220U, 0x28828200U, 0x0002220aU, 0x22288a00U, 0x2a082008U, + 0x08aaa888U, 0xa2828a20U, 0xa2aaa0a2U, 0x220a2028U, 0xa820a080U, + 0x08aaa2a8U, 0x820a80a2U, 0x02a8880aU, 0x822a0000U, 0x28808a02U, + 0xa2228020U, 0xaaaa0280U, 0x0a2802aaU, 0x0aaa8008U, 0x088a020aU, + 0x88002080U, 0x02822020U, 0x22a08aaaU, 0x80282a00U, 0xa0000088U, + 0x8a880880U, 0x22a08a08U, 0x8aaa8208U, 0x02a08802U, 0x00a0a8a8U, + 0x8aa22aaaU, 0x0aa282a8U, 0x8020a88aU, 0x88880a08U, 0xa02aa082U, + 0xa00a2088U, 0x000022a0U, 0x2a82288aU, 0xa02200a0U, 0x00802282U, + 0xa8a828a0U, 0x82a22820U, 0xa2a8a888U, 0x00822808U, 0x0220028aU, + 0xa8220202U, 0x8882000aU, 0x22a8a0a0U, 0x2808a808U, 0x80002a02U, + 0xa0aa2220U, 0x2a028aa2U, 0x08822a08U, 0x080a0000U, 0x08820a00U, + 0x82a0008aU, 0x80000080U, 0x02a00880U, 0x880a2802U, 0x2000a208U, + 0x20aa8a00U, 0xa2a80280U, 0x88082a02U, 0x0aaa8882U, 0x2282aaa0U, + 0xa0280800U, 0x02aa0888U, 0x08a02828U, 0x082280a0U, 0x02280a22U, + 0x0022a2a8U, 0x82002002U, 0x88aa8a28U, 0x2282aa82U, 0x088088a0U, + 0x0a88aa88U, 0x8a882a22U, 0x2800a022U, 0x22a028a8U, 0x2aa8a02aU, + 0x028a2820U, 0x22a800a8U, 0x28820a82U, 0x28a08882U, 0x08200a02U, + 0x0020082aU, 0x22a0aa82U, 0x080808a8U, 0x020a2a20U, 0x808aa220U, + 0x0aa80000U, 0x00a2a02aU, 0x2088a288U, 0x2aa80aa0U, 0x80828820U, + 0x80000802U, 0x2aa80008U, 0x8280208aU, 0x220002a0U, 0xaa80a802U, + 0xa0080a00U, 0x088082aaU, 0x88000800U, 0x822a22aaU, 0x822aa88aU, + 0x0282a288U, 0xaaa22a82U, 0x282aa222U, 0x80282aa0U, 0x28a088a0U, + 0x80000822U, 0xa0028820U, 0x000a0a00U, 0x222882a0U, 0x08aa2a02U, + 0x08080aa8U, 0x0a20a080U, 0x8a80a000U, 0xa2802a20U, 0x20822aa8U, + 0x8a8aa028U, 0x08828802U, 0xaa2020a8U, 0x280880a2U, 0x00002a8aU, + 0x08008022U, 0x20828802U, 0x82a28280U, 0xa8220088U, 0x20020008U, + 0x8aaa2a2aU, 0x2aa28022U, 0x0288880aU, 0xaa02a82aU, 0xa82aa2a2U, + 0x2a8a2002U, 0x80000022U, 0x0a22a822U, 0x0888a280U, 0x20a0aa28U, + 0xaa008088U, 0x8828028aU, 0xa80822a8U, 0x0808a82aU, 0x2aa00880U, + 0x82aa8080U, 0xaa208a80U, 0xa0800022U, 0x02828880U, 0x222a2000U, + 0xa228a02aU, 0x08088088U, 0x20800020U, 0x0288028aU, 0x0a20a8a2U, + 0x002a2a8aU, 0x00002020U, 0x800080aaU, 0xaa2a0820U, 0x2800222aU, + 0x22a20008U, 0x80088880U, 0x80200a20U, 0x08a82220U, 0x00000882U, + 0x00800020U, 0xaaa80a00U, 0xa2a0a880U, 0x82888282U, 0x28820802U, + 0xa082808aU, 0x282220a8U, 0x8222a082U, 0x8280222aU, 0x20008020U, + 0x2a880008U, 0x8a0aaaa0U, 0x02882080U, 0x8200a820U, 0x20008822U, + 0xaa8808aaU, 0x82888aa0U, 0x88202088U, 0x0a2a22aaU, 0x0a0800a0U, + 0xa8800aa8U, 0xaa880808U, 0xa022a0a0U, 0x2a022802U, 0xaa2a8a00U, + 0xaaa020a2U, 0xa2088a80U, 0x08080202U, 0x8000a028U, 0x088a82a0U, + 0x8802888aU, 0x00aaa8aaU, 0x2000a008U, 0x000a2a0aU, 0x200a0280U, + 0x288a8200U, 0x8a82a002U, 0xa28228aaU, 0x22802800U, 0x20a00000U, + 0xaa20288aU, 0x2082a80aU, 0x2202a202U, 0x00208882U, 0x2a082802U, + 0xa80008a0U, 0x08002800U, 0x00aa880aU, 0xa2200080U, 0x8208aaa8U, + 0x0a880082U, 0xa88a00a0U, 0x2a002828U, 0x0a888822U, 0xa8000a20U, + 0xa880a282U, 0x88028a00U, 0x8a8a2aa8U, 0x8a20880aU, 0xaaa800a2U, + 0x00228a8aU, 0xa22a0a28U, 0x08082822U, 0x02882002U, 0x22008aa8U, + 0x208aa00aU, 0x2a00a02aU, 0x28082280U, 0x2a202aaaU, 0x82282020U, + 0x22a88888U, 0xa2aa8800U, 0x08a82288U, 0x200a202aU, 0x282800a8U, + 0x88002008U, 0xa288aa2aU, 0xaa28a028U, 0xa0820a82U, 0xaa20aa00U, + 0x8882aa82U, 0x8a2aa080U, 0x2aa0200aU, 0x82082280U, 0x82a808a0U, + 0x00a00082U, 0x2000a08aU, 0xaaa2a002U, 0xaaa0a000U, 0x8208008aU, + 0x20082200U, 0x28a88000U, 0x0a2a0208U, 0x88a0a22aU, 0x2a8a2828U, + 0x28828a80U, 0x20802808U, 0xa028a222U, 0xaaa28808U, 0x002aa020U, + 0x02882a00U, 0x080808a0U, 0x82800002U, 0xa080a8a2U, 0x08828882U, + 0x22a0a0a0U, 0x2200a200U, 0x280aaaa2U, 0x28aaa022U, 0xa2a80080U, + 0xaa82280aU, 0xa0280220U, 0x20882808U, 0x2280a880U, 0x0208aa28U, + 0x8a2a8a2aU, 0xaa00228aU, 0x88820a00U, 0x8000a8a0U, 0x0a000a8aU, + 0x20a88aaaU, 0xaaa22aa0U, 0xa8088a2aU, 0xa2a00088U, 0x2a280aa2U, + 0x822a0aa0U, 0x802a2282U, 0x88028228U, 0x080aa008U, 0x080a080aU, + 0x022022a8U, 0x2a0280a0U, 0x228a2028U, 0xaa2282a8U, 0x0a2a8802U, + 0x88aaa2aaU, 0xa0222aaaU, 0x828a2a22U, 0x202a28aaU, 0x020822a0U, + 0xa088a2a0U, 0x20a20a08U, 0x0088880aU, 0xa800aa00U, 0x2aa08828U, + 0x02a800a2U, 0x8a008000U, 0x00002020U, 0xa8202002U, 0x22a2a822U, + 0x02aaaa28U, 0xa0888880U, 0x20202882U, 0x28aa80aaU, 0xaa20828aU, + 0x2a882a28U, 0xa88aa228U, 0x28a820a0U, 0x280022a0U, 0xaa28828aU, + 0x2008a220U, 0x0082a802U, 0x0aaa2800U, 0x08200a8aU, 0x2a208080U, + 0x0280a2a2U, 0x02a82200U, 0x22028288U, 0x0a28a220U, 0x82080288U, + 0xa8200888U, 0x82822a00U, 0xa828022aU, 0x008a8282U, 0xa0280228U, + 0x22a0a228U, 0x20202082U, 0xa0208200U, 0x2a08a802U, 0x880880a8U, + 0xaa888880U, 0x288a8a20U, 0x00a2a80aU, 0xa882a82aU, 0x80880a80U, + 0x00aa2088U, 0x28a2a0aaU, 0xaaa80a88U, 0xa828a222U, 0x220aa8a2U, + 0x0802aaa2U, 0x02028080U, 0x88aaaaa8U, 0x2aaa0800U, 0x0088aaaaU, + 0x2a222828U, 0x8a02aaa0U, 0x22aa8280U, 0x22088080U, 0xa28802a0U, + 0x02000a2aU, 0x280002a0U, 0x02a20a2aU, 0x8a20a288U, 0xa0202288U, + 0x8a200222U, 0xaaa2aa8aU, 0x02822a28U, 0x82220220U, 0x20a28008U, + 0x08800a82U, 0xaa8aa2a8U, 0x200a82a8U, 0x80822082U, 0x0a8a82a8U, + 0xaaaaa8aaU, 0x8208a0a2U, 0xa8002820U, 0x002a280aU, 0x20a2a082U, + 0x2aa8aa0aU, 0x202000aaU, 0x8208a888U, 0x0aa0a202U, 0x02a88a0aU, + 0x2a22020aU, 0x0a220aa8U, 0x2a08aa22U, 0xaa882280U, 0xa0888a28U, + 0x0a2a00a8U, 0x028a88aaU, 0xa80820a2U, 0x8802aa0aU, 0x82aa8208U, + 0x8888288aU, 0x808280a8U, 0x08008aaaU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaa2aU, + 0xa2aaaaaaU, 0xaaa2aaaaU, 0x82aaaaaaU, 0xaaa2aaaaU, 0xaaaaa82aU, + 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaaa8aU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0x2a2aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aa2U, + 0xa8aaaaaaU, 0xaaaa2aaaU, 0xa8aaa8aaU, 0x0aaaa28aU, 0xaaa2aa82U, + 0x2a8aaaaaU, 0xaaaaa8a8U, 0xaaaaa2aaU, 0xaa2aaaaaU, 0x2aaaaaaaU, + 0xaaaaaaaaU, 0xaa2a8aaaU, 0xaaaa2aaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, + 0xaa8aa2a2U, 0xaaa2aaaaU, 0xaa2aaaaaU, 0xa8aa8aaaU, 0xaaaaaaaaU, + 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, + 0xaaaaaaaaU, 0x8aaaa2aaU, 0xaaaaa88aU, 0x8aaaa8aaU, 0xaaaaaaaaU, + 0xaaa8aaaaU, 0xaa0aaaaaU, 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaa8aaaaaU, 0xa8aaaaaaU, 0x8aaaaaaaU, 0xaaaaa8aaU, + 0xaaaaa88aU, 0x2aaaaaaaU, 0xaaaa2aaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, + 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, + 0xaaaaa2aaU, 0x8aaaaaaaU, 0x8aaaaaaaU, 0xaaaaa8a2U, 0xaaaaaaaaU, + 0xaa8aaaaaU, 0xaaaaaa28U, 0xaaaaaaaaU, 0xaaa8aaaaU, 0xaaaa2aa2U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaa8aU, 0x8a8aaaaaU, 0xa0aa2aaaU, + 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa28a2aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa88aU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaa2aU, 0xaaa8a2aaU, 0xaaaaaaaaU, 0xaaaa8aaaU, + 0xaaaaaaaaU, 0xaaa8aaaaU, 0x28a8aaaaU, 0x2aaaaaaaU, 0xaaa8aaaaU, + 0xaaaaaaa2U, 0xaaaaaaaaU, 0x0aaaa882U, 0xaaaaaaa2U, 0xaaa2aa8aU, + 0xaaaaaa2aU, 0xaa2aaaaaU, 0xa8aaaaa2U, 0xaaaaaaaaU, 0x82aaaaaaU, + 0xaaaaa08aU, 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x2aaaaaaaU, 0x0a2aa22aU, 0xaaaaaaaaU, 0x2aaaaaaaU, + 0xaaa2aaa8U, 0xaaaaaaa2U, 0xaaa2aaaaU, 0x2aaaaaaaU, 0xaa8aaaaaU, + 0xaaaaaaaaU, 0xaaa2aa2aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, + 0xaaaaaaaaU, 0xaaa8aa8aU, 0xaaaaaa8aU, 0xa28aaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, + 0xaaaaaa8aU, 0x2aaaaaaaU, 0xaaaa2aaaU, 0xaaaaa2aaU, 0xaaa8aaaaU, + 0xaaaaaaa2U, 0x2a0aaaaaU, 0x2aaa8aaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaa2aa2aaU, 0xa8a8a2aaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaa22aaaaU, 0xaaaaaaaaU, 0x2aaa2aaaU, 0xaaaaaaaaU, + 0x8aaaaaaaU, 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa8aU, + 0xa8aaa8aaU, 0xaaaaa22aU, 0xaaaaa2aaU, 0xaaaaaaaaU, 0xaaaaa2aaU, + 0xaaaaaaaaU, 0xaaa8aaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaaaaaU, + 0xaaaaa2a2U, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaa8aaa8U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x2aaaa8aaU, 0xaaaaaaaaU, 0xaa8aa2aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaa8aaaa0U, 0xaaa2aaaaU, 0xaaaaaaaaU, 0x2aa8aaaaU, + 0xaaaa2a2aU, 0xaa2a8aaaU, 0xaaaaaaaaU, 0xaaa8aaaaU, 0xaaaaaaaaU, + 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaaaaaa2aU, 0xa8aaaaa8U, 0xaaaaa2a8U, + 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa8U, 0xaa88aaaaU, 0xaaaaa22aU, 0xaa8aaaaaU, 0xaaaaaaa8U, + 0xa2aaa0aaU, 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa82aaaaaU, + 0x88aaaaaaU, 0xaaaaa8aaU, 0xaaa2aaaaU, 0xaaaaa222U, 0xaaaa2aaaU, + 0xaaaa2aaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, + 0xaa0aaaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, 0xa82aaaaaU, 0xaaaaaaaaU, + 0x2aaa8aaaU, 0xaa2aaaa2U, 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaa2aaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa82aaaaU, 0xaaa22aaaU, 0x2aaaa8aaU, + 0xaaa88aaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xa8aaaaaaU, 0xaaaaa2a2U, 0xaaaaaaaaU, 0x8aaaaaa2U, 0xaaaaa2a2U, + 0x2a8a2a8aU, 0xaaa8aaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xa8aaaaaaU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaa2aaU, 0xaa2aaaaaU, 0xaaaa8aaaU, + 0x8aa2a2aaU, 0xaaa8aaaaU, 0xaaaa0aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa8aaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, + 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa8aaaaU, 0xaaaaaaaaU, + 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa2aU, + 0xaaaaaaaaU, 0x82aaa8aaU, 0xaaaaaaaaU, 0xa2aaaaaaU, 0x2aaaaaaaU, + 0xaa2aaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xa2aaa0aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaa8U, + 0xaaaa2aaaU, 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0x8aaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa2aU, 0xaaaaaaaaU, + 0xa2aa8aaaU, 0xaaaaaa2aU, 0x2aaaaa2aU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa22aa2aU, + 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, 0xa2aaaa2aU, + 0xaaaaaaaaU, 0x2aa8aaaaU, 0xa8aaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0xaaaa8aaaU, 0xaaaa0aaaU, 0xaaaa2aaaU, 0xa2aa8aaaU, 0xaaaaaaaaU, + 0x8aaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaa8a2aaaU, 0xaaa8aaaaU, + 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaa8aU, 0xaaaaaaa8U, 0x2aaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, + 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xa8aaaa8aU, 0x2a8aaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaa8aaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xa8aaaaaaU, 0x2aa2aaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaa82aU, + 0x2aaaaaa2U, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, + 0xa8aaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaaaa28aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xa2aaaaaaU, 0x8aaaaa2aU, + 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaaaaa828U, 0xa8aaaaaaU, 0xaaaa0aa2U, + 0xaa2a8aaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0x2aaa2aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa88U, + 0xaaaaaaa0U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaaaU, 0x88aa8aaaU, + 0xaa8a2aa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x8aaaa8aaU, 0xaaaaaaa2U, + 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaa2aa8aU, 0xaaaaaa2aU, 0xaaaaaaaaU, 0xaaaaaa8aU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaa2aaaaaU, 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaa2aa2aaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaa8a2aaU, 0x2aaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa8aU, 0xaaa2aaa2U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aa0aaU, 0xaaa8aa8aU, 0xaaaaaaaaU, + 0xaa8aaaaaU, 0x88aaaaaaU, 0x8a28aaaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2a8aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa2U, 0x8aaaa8aaU, + 0xaa2aaaaaU, 0x2aaaaaaaU, 0xaaaaaa2aU, 0xaaaaa8aaU, 0x28aaaaaaU, + 0xaaaaa8aaU, 0xaaa8aaaaU, 0x0aaaa02aU, 0xaaaaaaaaU, 0x8aaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaa2U, 0xaaaaa88aU, 0xaaaaaaaaU, 0x2aaa2aaaU, + 0xaaaa2aaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaa2aaaaU, 0xa8aa2a2aU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x8aa2aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa8aaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, + 0xaaaa2aaaU, 0x002aaaaaU, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0xaaaa8a00U, 0x8aaaaa2aU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xa8aaaaa2U, 0xa2aaaaa2U, 0xaaaaaaaaU, 0xaaaaaa8aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaa8aa8aaU, 0xaaaaaaaaU, 0xa8aaaaaaU, + 0xaaa88aaaU, 0x2aaaaaaaU, 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaa02U, 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, 0xaaaaa2aaU, 0x0aa2aaaaU, + 0xaaaaaaaaU, 0xaaa22aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa8aaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa28aU, 0xaa2aaa8aU, + 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aa2aaaU, + 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa2U, 0x2aaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0x8aaaaaaaU, 0xa82aaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa2a8aaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaa2aU, 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa8aaaaU, 0x2aaaaaaaU, + 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, + 0xaa2aa2aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaa2aaaU, + 0xaaaaaaaaU, 0xaaaaaa2aU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaa22aaaU, + 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa2aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa8aa2aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaa8aa8U, 0xaaaaaaa2U, + 0xaaaaa2aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaa2a2U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8a2a2a0U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaa2aaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaaa2aU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaa2aaU, 0xaaaa2a28U, + 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaa8aaaaU, 0xaaaaaa8aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa88U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaaaU, + 0xa2aaaa2aU, 0x0aaaa8aaU, 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, + 0xaaaaaaaaU, 0xaaaa88aaU, 0xaaaaaaaaU, 0xaaaaaa2aU, 0x8aaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaa2aaaaU, 0xaaa8aaa8U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, + 0xaaaa2aa8U, 0xaaaaaaa2U, 0xaa2aaaaaU, 0xaaaaaaaaU, 0xaaa22aaaU, + 0x2aaaaa2aU, 0xaaaaaaa8U, 0xaaa2a2aaU, 0xaaaaaaaaU, 0xaaaaa2aaU, + 0xaaaaaaaaU, 0xa28aaaaaU, 0x22aaaaaaU, 0xaaaaaaaaU, 0xaaaaaa2aU, + 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa8U, 0xaaaaaaa8U, 0xaaaaa2aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa82aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaa8aa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaa8aaU, 0x8aaa8aaaU, 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa8aU, 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8a8aaaaU, + 0xaaaaaaa8U, 0xaaaaa2a8U, 0xa2a8aa28U, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaa8aaaaU, 0xaaa2aaaaU, + 0xaaaaa8aaU, 0xaaaaaa2aU, 0xa2aaaaa8U, 0x2aaaaa2aU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2a22aaa2U, 0xaaaaa2aaU, 0xaaaaa2aaU, + 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaa2aaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaa8aa2aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa22aaaaaU, 0xaaaaaaa2U, + 0xaaaaa8aaU, 0xaaa2a2aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, + 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaa8aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa8U, 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaa2aaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaa2a2aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xa2aaaaaaU, + 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa8aU, + 0xaaaaaaaaU, 0xaaa2a8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, + 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0x2aaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaa2U, 0xaaaaaaaaU, 0xa2aaaaaaU, + 0xaaaaa2aaU, 0xaaaaa8aaU, 0xaaaa28aaU, 0xaaaaaaaaU, 0xaaaa2aaaU, + 0xaa2aaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, + 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaaaU, + 0x0000aaaaU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0xaaaa0000U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaa8aaaaaU, 0xaaaaaaa2U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, + 0xaaaaaaa2U, 0xa2aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa8aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0xaa2a2aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaaaaa2U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa8aU, 0xa2aaaaaaU, 0xaaaaa8aaU, 0xaaaaa2aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaa2aaa2aU, 0xaaa2aaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaa2aa88aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, + 0xaaaaaaaaU, 0xaa2aaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, + 0x2aaaaaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa8aU, 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaa88aaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaa2aU, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaa8aaU, + 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, 0x8aaa2aaaU, + 0xaaa2aaaaU, 0xaaaaa88aU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa8aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, + 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, 0xa8aaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8a8aaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, + 0xaa2aaaaaU, 0x2aaaaaaaU, 0xaaaaaaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaa8a8U, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaa8aaaU, 0xaaaaaaaaU, + 0xaaa8aaa8U, 0xaaaaaaaaU, 0xaaa2aaaaU, 0xa2aaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, + 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaa2aaaaU, 0xaaaaaaa2U, 0x2aa8aaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa82U, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaa2aaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, + 0xaaaaaaaaU, 0xaaaa8aaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa2aU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x8aaaaaaaU, + 0xaa8aaaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa8a8U, 0xaaa88aaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, + 0xa8aaaaaaU, 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, + 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa2aaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaa2aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaa2U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, + 0x2aaaa80aU, 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaa8aaU, 0xaaaaaaaaU, 0xaaaa2aaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaa2aaU, + 0xaaaaaaa2U, 0xaa2aaaaaU, 0xa8aaaaaaU, 0x2aa2aaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0x0aaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa2aU, 0xaaaaa8a8U, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaa8aU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x2aaaaaaaU, 0xaaaaa8aaU, + 0xaaa8aaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa8U, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0x8aaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaa0aaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaa2U, + 0xaaaaaaaaU, 0xaa8aa8aaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaa8aaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaa2aU, 0xaaaaaaaaU, 0xaaaa8aaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xa8aaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, 0xaaaaaaaaU, + 0xaaaaaaaaU, 0xaaaaaaaaU, 0x0000002aU, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, + 0x00000000U, +}; + +/* + * Mapping from Unicode back to CNS 11643. + * + * This inverse is done the same way the SBCS ones are done: I + * provide a list of CNS 11643 positions, sorted into ascending + * order of their Unicode values. Then we can binary-search through + * this list, referring to the above table for each comparison, to + * find the coordinates for a given code point. + * + * Generated by running the following sh+Perl over CNS.TXT: + +cat CNS.TXT | \ +perl -ne '$a{hex$4}=[$1,hex$2,hex$3]if/^0x([1-7])(\S\S)(\S\S)\s+0x(\S+)\s/;' \ + -e 'END {$o=" ";for$k(sort{$a<=>$b}keys %a){($p,$r,$c)=@{$a{$k}}; ' \ + -e '$o .= $C; $C = ", "; (print "$o\n"), $o=" " if length $o > 65;' \ + -e '$o.=sprintf"%d",(($p-1)*94+($r-33))*94+($c-33);} print "$o\n"; }' + + */ + +static const unsigned short cns11643_backward[] = { + 79, 181, 113, 16, 111, 112, 454, 452, 453, 455, 451, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 24, 22, 154, 67, 68, 69, 70, + 12, 11, 73, 74, 78, 96, 167, 95, 168, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 490, 491, 492, 493, 494, 495, 496, 497, + 498, 499, 149, 146, 148, 147, 150, 151, 153, 152, 158, 114, 121, + 134, 133, 130, 131, 138, 139, 141, 140, 129, 122, 120, 123, 118, + 119, 132, 135, 3102, 3103, 3104, 3105, 3106, 3107, 3108, 3109, + 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, + 3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, + 3132, 3133, 3134, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 212, 213, + 215, 216, 217, 218, 210, 209, 208, 207, 206, 223, 224, 226, 225, + 219, 220, 222, 221, 231, 232, 233, 191, 192, 193, 194, 195, 196, + 197, 198, 205, 204, 203, 202, 201, 200, 199, 211, 214, 91, 90, + 84, 83, 93, 92, 89, 88, 81, 85, 82, 227, 228, 230, 229, 87, 86, + 145, 142, 144, 143, 564, 565, 566, 567, 568, 569, 570, 572, 573, + 574, 575, 576, 577, 579, 580, 581, 582, 584, 585, 586, 587, 588, + 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, + 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, + 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, + 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, + 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, + 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, + 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, + 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, + 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, + 771, 772, 773, 774, 775, 776, 0, 2, 3, 80, 49, 50, 45, 46, 53, + 54, 57, 58, 41, 42, 162, 37, 38, 71, 72, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 5, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 94, 178, 179, 173, 174, 175, 177, + 180, 176, 137, 136, 172, 44285, 26605, 44195, 44182, 26562, 26717, + 27186, 19484, 20004, 18268, 18405, 17862, 26718, 26903, 20605, + 26564, 17756, 17749, 17752, 17754, 44413, 17846, 26618, 17838, + 17839, 35551, 17995, 17992, 17998, 44636, 18273, 35724, 26908, + 26911, 18272, 35730, 26910, 26907, 18283, 18628, 45459, 27190, + 18627, 36002, 27191, 18621, 27188, 27193, 36359, 19498, 19037, + 27516, 46083, 27954, 19487, 19497, 27959, 28505, 20010, 28499, + 28504, 47710, 48030, 20011, 20606, 20609, 20612, 29057, 29058, + 29053, 29055, 38688, 29632, 29628, 29623, 21143, 49620, 29624, + 21138, 30888, 21137, 21134, 21142, 29627, 30264, 21625, 21624, + 30266, 21623, 21627, 21629, 22107, 30892, 40100, 30890, 22496, + 22798, 31936, 31937, 32376, 32726, 23236, 23234, 57705, 58135, + 33402, 23715, 26620, 27520, 22799, 17757, 17854, 18006, 35554, + 44646, 44648, 18007, 18635, 57180, 18561, 27961, 36853, 28510, + 29063, 33403, 18637, 20015, 30269, 17719, 17860, 18009, 35733, + 18290, 18289, 18291, 27200, 18639, 19048, 19047, 27962, 20018, + 20019, 29065, 21144, 36856, 26572, 44306, 17765, 26629, 35453, + 26725, 26726, 26925, 26927, 26923, 26922, 18644, 18648, 18645, + 36375, 27968, 19058, 19060, 27972, 27973, 27967, 36859, 27969, + 27974, 20025, 48673, 28515, 28518, 20023, 38055, 20619, 29642, + 29644, 29643, 29637, 21148, 21146, 29640, 29639, 21147, 30270, + 30897, 30896, 30898, 41386, 31471, 55834, 32377, 32727, 26575, + 26633, 26731, 18021, 26930, 45010, 45502, 27532, 19062, 27975, + 28524, 21151, 31474, 22500, 31475, 40110, 31943, 27977, 28526, + 38063, 45013, 19508, 42857, 26738, 44673, 27534, 20026, 48683, + 29075, 38709, 33702, 44671, 28529, 17727, 44448, 17871, 48687, + 18303, 26518, 44206, 44905, 26937, 17875, 35465, 17873, 18027, + 18026, 18025, 18307, 45035, 18655, 19067, 27537, 19068, 28530, + 48693, 39402, 21153, 30274, 23673, 17732, 19069, 46876, 19511, + 30276, 35376, 17734, 17877, 26941, 27220, 20579, 21156, 30133, + 26582, 17781, 17777, 17883, 17881, 18029, 26744, 18028, 18034, + 26747, 26752, 18035, 26746, 18032, 18031, 18043, 18052, 18325, + 18312, 26944, 18321, 35753, 45050, 18661, 18675, 18674, 18677, + 18669, 27222, 27225, 18665, 27546, 19080, 27541, 19072, 19079, + 27542, 27540, 46152, 19085, 36412, 19518, 19526, 27991, 37397, + 19524, 19517, 27997, 19515, 28000, 27998, 27994, 27993, 19884, + 27996, 37403, 20039, 28552, 20042, 20033, 28543, 28538, 20046, + 20051, 20034, 28545, 20050, 28544, 20044, 47776, 37406, 37407, + 20037, 28537, 28550, 28548, 20054, 37395, 20052, 20047, 38094, + 29087, 29083, 20632, 38098, 29084, 29089, 20630, 20633, 48709, + 29659, 21167, 21164, 21162, 29656, 29651, 29662, 21160, 21645, + 29660, 29663, 29658, 38729, 30283, 30279, 21653, 30280, 21641, + 53061, 30906, 30907, 22122, 30902, 30905, 30910, 22117, 22115, + 55106, 31477, 22503, 31478, 30908, 41391, 31945, 22801, 41396, + 32379, 41980, 42382, 23238, 23412, 33011, 23607, 23606, 33633, + 59140, 17783, 17766, 17888, 35770, 18329, 18679, 19087, 29665, + 32729, 17784, 18061, 26758, 18072, 18073, 26757, 18076, 18078, + 18074, 18067, 18336, 26960, 18340, 18341, 18697, 45564, 18695, + 18696, 18694, 18690, 19090, 27556, 27558, 19094, 19093, 19095, + 19098, 19533, 19534, 19540, 19531, 28012, 28556, 20059, 28559, + 20070, 47797, 20061, 20066, 29102, 29104, 20636, 20638, 29099, + 29101, 29671, 29670, 29668, 21176, 29672, 21174, 53089, 21669, + 21659, 30286, 21661, 21665, 30277, 22125, 30919, 22128, 22123, + 22124, 22127, 22126, 31487, 22510, 22507, 31486, 55851, 22808, + 56529, 42385, 23675, 33635, 37439, 21840, 18699, 27230, 35775, + 28568, 29673, 21188, 31955, 17791, 17897, 17899, 26764, 18089, + 26964, 35776, 26970, 26966, 26971, 18704, 28016, 46939, 19547, + 20074, 29105, 22119, 17755, 17903, 17901, 26655, 26658, 26654, + 17900, 18097, 18102, 18095, 18094, 18092, 18099, 18346, 18356, + 26974, 18363, 18347, 18355, 18364, 18368, 18349, 26978, 18365, + 18359, 18351, 18357, 35780, 18354, 18345, 27242, 27238, 18705, + 18707, 27236, 19112, 19115, 19110, 19122, 19120, 27568, 19116, + 19129, 19125, 19117, 27572, 27567, 19106, 27569, 19130, 19119, + 19114, 19107, 28020, 19557, 19564, 19552, 19573, 28019, 19563, + 19554, 19556, 20102, 20092, 20105, 20089, 20107, 20097, 20095, + 20090, 37457, 20099, 37449, 28575, 20100, 20084, 28574, 20101, + 20082, 20098, 20094, 20093, 29108, 20651, 29110, 20663, 20662, + 20657, 20652, 29113, 20654, 29112, 20665, 20660, 20664, 20661, + 20658, 21192, 29680, 29685, 29681, 29679, 21190, 21199, 21198, + 29684, 29686, 21194, 21195, 29682, 30295, 30293, 21676, 21674, + 30299, 21672, 22139, 22142, 30926, 31491, 31493, 22810, 22811, + 32387, 41985, 23045, 23047, 23240, 32732, 23241, 33016, 33250, + 23753, 23754, 17905, 44737, 26772, 18370, 27245, 27574, 19133, + 20114, 29116, 54156, 23716, 17793, 17906, 44738, 18104, 26775, + 18106, 44739, 18376, 36079, 18721, 18722, 18724, 27575, 36469, + 46214, 19585, 19580, 19581, 28025, 46963, 19583, 20116, 28577, + 29119, 29121, 29124, 20672, 29693, 29694, 21683, 29696, 30302, + 30304, 30305, 31958, 23416, 59146, 26776, 26983, 46225, 20117, + 27585, 46973, 29697, 39452, 26662, 26779, 26985, 26984, 27249, + 27250, 27586, 36932, 28030, 36930, 28029, 28583, 28584, 29126, + 29698, 17797, 17910, 26987, 18379, 18380, 27254, 27253, 18730, + 18729, 18727, 27587, 46980, 19588, 28586, 37481, 29702, 30309, + 23052, 17737, 26782, 17799, 17800, 17798, 17801, 17913, 26666, + 35486, 26786, 35485, 17914, 17915, 26783, 26784, 18111, 35611, + 35615, 18115, 18116, 26781, 18388, 45116, 26994, 26995, 26991, + 18383, 45111, 18386, 18387, 35797, 18731, 27256, 27600, 27592, + 27590, 19145, 27604, 27594, 19141, 27599, 27603, 27596, 19142, + 46245, 36485, 19150, 27593, 19605, 19592, 28034, 19595, 28040, + 46990, 19596, 28036, 46993, 19599, 19602, 20130, 20133, 20124, + 28593, 28595, 20136, 29127, 20131, 20127, 29131, 29128, 29139, + 38146, 29140, 48805, 20676, 29132, 29705, 49761, 29716, 29713, + 29704, 21202, 29707, 21208, 21205, 29717, 21204, 30315, 30311, + 39461, 21685, 39457, 30310, 30318, 21687, 30314, 30312, 21684, + 30319, 30931, 30932, 31497, 30930, 40159, 22146, 54187, 22523, + 22519, 40823, 31496, 22521, 55871, 32393, 41990, 41991, 33019, + 23417, 33253, 43832, 17918, 44257, 20139, 30320, 17802, 28045, + 17803, 26670, 26671, 17920, 26791, 26793, 18120, 26790, 18121, + 26999, 27000, 27264, 26794, 27261, 27263, 45656, 18744, 27262, + 27260, 27611, 27613, 28050, 28051, 28048, 28052, 19611, 28602, + 28597, 28604, 28601, 20143, 28603, 20140, 28600, 29147, 29142, + 29146, 29145, 29148, 29722, 29721, 29720, 29718, 21697, 21698, + 30934, 31502, 31500, 32738, 32737, 23535, 33256, 47881, 21211, + 30936, 17923, 17922, 17921, 18123, 44782, 27001, 27006, 27004, + 35819, 27005, 18397, 27003, 18399, 18746, 18747, 27269, 36101, + 27268, 27267, 27616, 27618, 27617, 19158, 19613, 28057, 28055, + 28058, 19612, 37514, 28607, 28608, 20148, 38164, 29725, 21212, + 29728, 29729, 30326, 30327, 21700, 22150, 30937, 30939, 40171, + 32397, 32739, 26798, 18403, 21215, 54202, 27270, 29152, 44268, + 26675, 17926, 17927, 18127, 18408, 27009, 27010, 18751, 27272, + 45679, 27273, 18752, 27622, 36979, 28060, 27623, 20153, 20150, + 38172, 29154, 29153, 48830, 30328, 30330, 23419, 27011, 30942, + 44541, 18412, 27012, 18411, 19619, 20155, 20156, 29730, 30332, + 22152, 17808, 45149, 18413, 27277, 27279, 18755, 36110, 36114, + 18756, 45688, 36510, 28063, 19621, 19622, 28616, 20157, 28615, + 29158, 38800, 29732, 49796, 22153, 30945, 31504, 44273, 17928, + 17931, 26806, 35508, 26681, 18420, 18422, 18136, 26803, 18421, + 26805, 26808, 18130, 26804, 26807, 18145, 18418, 27280, 27282, + 27022, 18762, 18427, 27017, 18426, 27023, 27021, 27015, 18761, + 27292, 18771, 27287, 27018, 27284, 19174, 46299, 27288, 36116, + 27643, 27299, 27285, 27286, 27291, 18758, 46305, 19173, 18767, + 28070, 36529, 19634, 27637, 19624, 19166, 27638, 19631, 27639, + 19168, 46309, 19179, 27646, 28069, 28071, 28077, 19626, 47924, + 28078, 19636, 28075, 37000, 28072, 19627, 20161, 28087, 28082, + 20159, 19628, 19638, 20170, 28079, 47930, 20166, 28081, 28073, + 36526, 20165, 37539, 28085, 37545, 28629, 28623, 20175, 28632, + 20178, 28627, 28621, 38181, 20684, 28628, 29169, 20179, 29162, + 36997, 20174, 20685, 20692, 29166, 29738, 38197, 48858, 21220, + 29165, 29167, 20695, 21218, 29737, 29751, 21219, 20694, 29743, + 29742, 29744, 21712, 29748, 30336, 21715, 21222, 21710, 29745, + 29747, 29741, 21720, 21707, 29746, 30949, 21723, 30338, 30340, + 30339, 30342, 53201, 30344, 22162, 30343, 21719, 30950, 40839, + 31962, 31968, 31511, 31964, 22818, 31963, 22817, 30951, 42011, + 32746, 32403, 42006, 56599, 23421, 32745, 32743, 23538, 33257, + 23775, 17933, 18147, 27029, 45169, 27650, 27651, 36532, 19641, + 20184, 29173, 29755, 39502, 21724, 22531, 44821, 27030, 27031, + 27304, 18773, 26598, 26597, 17812, 26685, 26684, 26686, 26815, + 26811, 18153, 18154, 18157, 18152, 27033, 18436, 35839, 18435, + 18447, 27312, 27654, 27034, 18434, 27305, 27311, 18775, 18430, + 18776, 18778, 27663, 18786, 27313, 18777, 27309, 27653, 27652, + 18779, 18774, 19195, 19185, 19642, 19192, 19201, 27662, 19188, + 19186, 28103, 28106, 28102, 19657, 47111, 28110, 19660, 19661, + 28100, 19645, 28092, 19650, 28105, 28101, 20190, 19655, 28653, + 28641, 19646, 29176, 20696, 28643, 20189, 28650, 28647, 28644, + 20191, 20188, 28655, 28640, 20193, 29187, 29186, 20702, 29183, + 29181, 20700, 20706, 29179, 29185, 20707, 20721, 20714, 20710, + 20718, 20711, 20717, 20712, 20704, 29759, 29768, 49837, 21238, + 21257, 21256, 29757, 21241, 21250, 21258, 29763, 21236, 38826, + 21242, 30352, 21735, 29771, 38824, 21254, 21255, 30365, 21732, + 53229, 30356, 30357, 30353, 30369, 30363, 39505, 30361, 39509, + 21741, 30364, 22173, 31514, 30962, 22172, 22167, 22177, 22171, + 22170, 22534, 22539, 22537, 22532, 22535, 31972, 22820, 31977, + 31975, 31973, 22826, 22828, 31976, 22819, 31974, 22829, 23058, + 23059, 32750, 23249, 32749, 42773, 23423, 33025, 23610, 33410, + 33409, 43625, 27036, 27667, 27666, 28112, 29191, 26821, 18167, + 27039, 27040, 27320, 18790, 19205, 27669, 46352, 19664, 28113, + 19666, 28117, 28664, 28660, 28663, 28662, 28661, 37597, 20202, + 29199, 29196, 29198, 20723, 29773, 38837, 38835, 29776, 30372, + 30371, 30370, 30966, 30969, 22830, 31985, 32755, 33028, 18168, + 46353, 20726, 18449, 27324, 19208, 19938, 20203, 30375, 31519, + 33412, 27325, 27676, 46357, 48004, 49868, 39522, 17940, 45199, + 46361, 19672, 19675, 29208, 30377, 30378, 26689, 26690, 26824, + 18169, 18172, 18171, 18173, 18454, 18452, 27044, 36142, 27326, + 18796, 27327, 27328, 18793, 18805, 45754, 27679, 28132, 27678, + 19214, 46364, 19217, 27680, 47142, 28127, 28131, 28128, 19680, + 47140, 20211, 28669, 20205, 20206, 28674, 20216, 28671, 48022, + 20210, 48908, 38229, 20729, 20734, 20737, 20732, 20730, 20739, + 20735, 29211, 29210, 20731, 21267, 29781, 21261, 21265, 39530, + 30379, 21747, 21750, 30975, 30974, 22184, 39527, 22180, 22181, + 30976, 54295, 22548, 22543, 31521, 31991, 31992, 31990, 55921, + 23061, 23062, 23253, 23543, 23544, 43317, 43316, 17943, 30979, + 22549, 18459, 19221, 36570, 19686, 20217, 28892, 38858, 39535, + 22188, 17945, 18176, 26829, 18179, 18466, 18461, 18471, 18468, + 35862, 18807, 18811, 27338, 27335, 18808, 27690, 27684, 27687, + 27691, 19225, 36576, 27685, 27694, 19228, 27689, 19224, 19702, + 28140, 19687, 19692, 37030, 28139, 28143, 28138, 28689, 19701, + 19706, 28684, 20223, 28681, 20240, 20225, 28679, 37618, 28682, + 20221, 37624, 28690, 20230, 28692, 20231, 20244, 20220, 20222, + 29227, 20760, 20749, 20759, 29214, 29217, 29218, 20755, 20752, + 20747, 29216, 20741, 29224, 20745, 20746, 20769, 20744, 20742, + 29800, 29225, 20743, 20831, 20750, 29801, 29788, 29798, 29795, + 21274, 29791, 29786, 21276, 29787, 21285, 29796, 29797, 29793, + 29799, 21290, 21275, 29802, 29784, 38864, 21284, 29221, 21291, + 21759, 39556, 30387, 21757, 39544, 21764, 30384, 30383, 21774, + 21769, 53282, 30385, 30395, 21771, 21773, 21753, 21766, 22218, + 22217, 30989, 30983, 22206, 22199, 30982, 30386, 22214, 22193, + 22212, 31530, 22202, 22208, 21756, 30987, 22196, 30993, 22204, + 22203, 22205, 22561, 31529, 22559, 22564, 22558, 31532, 55230, + 40867, 22552, 22565, 22554, 22567, 31999, 31995, 22839, 32001, + 32000, 32414, 32418, 23070, 32415, 32413, 32417, 32420, 23073, + 23072, 23071, 23261, 23255, 32760, 32758, 23257, 23262, 32763, + 23260, 23254, 42776, 23427, 23259, 23547, 33259, 23614, 23612, + 23613, 35665, 44853, 27054, 35867, 27057, 27053, 27699, 27339, + 27340, 45771, 27343, 27342, 36579, 27696, 27700, 27701, 27697, + 19710, 28145, 28146, 47171, 28696, 28694, 20247, 37634, 28697, + 46409, 29234, 29231, 29230, 29232, 29233, 29235, 21293, 49906, + 29807, 30405, 21785, 30995, 30996, 31536, 31535, 22569, 22571, + 32422, 57247, 33262, 43326, 43630, 44560, 18829, 18702, 20249, + 28700, 38884, 22845, 26693, 18478, 35879, 27062, 18830, 18832, + 18831, 19248, 19712, 28147, 28706, 28705, 28707, 28703, 20251, + 20776, 29236, 29237, 20777, 29815, 38885, 29816, 29813, 30409, + 30408, 31000, 30999, 31538, 32764, 23263, 43327, 35671, 27065, + 27703, 19250, 28152, 28710, 28711, 28712, 20778, 29818, 22222, + 22223, 31003, 31540, 22846, 27350, 17950, 27066, 18482, 27067, + 18834, 27705, 28155, 28157, 28156, 28158, 19716, 27706, 28154, + 37658, 20253, 28716, 28713, 29242, 20780, 29241, 29240, 29828, + 29821, 29822, 29823, 38893, 29825, 31004, 31006, 31007, 22224, + 32007, 32006, 23077, 33706, 27709, 18483, 19717, 21786, 22225, + 26554, 17819, 17818, 17955, 35427, 26697, 18193, 18188, 26836, + 18202, 44878, 18199, 26838, 18184, 44879, 44873, 18197, 18488, + 18486, 18485, 18489, 18487, 27071, 18495, 18493, 18835, 36193, + 27073, 18851, 36186, 36187, 27353, 18853, 18843, 46423, 19255, + 19256, 27710, 46454, 19259, 27711, 19718, 19273, 19272, 19269, + 19260, 28160, 19726, 28172, 28173, 19723, 28167, 19741, 19722, + 20256, 19739, 28161, 28177, 37661, 28163, 28165, 47198, 37064, + 20271, 19736, 20272, 19728, 47220, 19733, 28718, 28723, 20278, + 28719, 20266, 28726, 20283, 20280, 20262, 28724, 28727, 20260, + 20264, 20274, 20784, 48110, 29256, 20785, 20796, 20794, 20813, + 20797, 29249, 29258, 29246, 20807, 29257, 20793, 20801, 29261, + 20788, 20806, 38264, 29248, 29251, 20791, 20808, 21296, 29838, + 21307, 49940, 21300, 49021, 21299, 29835, 29842, 29839, 49945, + 21791, 30424, 30426, 21792, 21805, 30433, 30422, 21790, 30418, + 21795, 38909, 53362, 21793, 31009, 22226, 21799, 31012, 31018, + 40253, 31011, 22230, 22229, 31015, 40244, 22234, 22238, 31016, + 31543, 22232, 22227, 31013, 22233, 30427, 40245, 22577, 22583, + 31551, 31553, 22579, 31545, 22573, 31544, 31549, 22586, 31546, + 31548, 22578, 32013, 32011, 32017, 32014, 32023, 32426, 32428, + 32018, 32424, 23078, 23265, 32769, 32773, 32770, 23267, 33034, + 42799, 33035, 33037, 33264, 23430, 23429, 23548, 33415, 23617, + 33540, 33541, 23757, 17963, 26839, 18206, 18501, 27078, 18511, + 18506, 18870, 18856, 18869, 18864, 18863, 18858, 27360, 19283, + 27718, 19287, 19750, 19749, 19759, 28186, 28191, 28185, 28192, + 20295, 28738, 28734, 20294, 28735, 28737, 28733, 20118, 20303, + 20289, 20297, 20825, 20818, 20827, 29276, 20815, 20826, 29273, + 29271, 29274, 49025, 20816, 20821, 29854, 21326, 21316, 49044, + 29851, 29855, 29857, 21324, 21813, 21810, 21818, 21808, 21814, + 30435, 31024, 22244, 22242, 31030, 22246, 22248, 31023, 22251, + 22252, 22588, 31555, 22590, 22595, 55277, 22796, 22853, 31557, + 23275, 23086, 23269, 23276, 32774, 33039, 43106, 33417, 23619, + 23777, 27083, 18513, 19795, 21327, 18873, 27721, 19761, 28744, + 18514, 27365, 28745, 18516, 18517, 36616, 46467, 27725, 29860, + 55284, 32027, 33041, 17745, 19288, 26701, 18210, 26842, 45294, + 27090, 35900, 27089, 27086, 18875, 18878, 27367, 18877, 19289, + 19290, 27728, 27727, 28195, 37080, 28194, 28199, 19763, 47257, + 19762, 28749, 28751, 28752, 29864, 49061, 29279, 20835, 29863, + 29861, 29865, 30440, 30439, 30443, 30442, 30444, 31033, 31035, + 31034, 31560, 22597, 22598, 32029, 32028, 32433, 57790, 33418, + 27091, 26846, 18218, 26843, 18217, 45298, 27096, 35921, 18526, + 18521, 18522, 27097, 27371, 27373, 27374, 18881, 45848, 19292, + 36625, 27730, 27729, 27731, 27735, 47264, 27736, 37084, 28207, + 47272, 28208, 28204, 28210, 28206, 28213, 28758, 28756, 20315, + 28760, 48162, 29866, 29285, 29867, 29284, 20837, 29283, 29871, + 49991, 29870, 29869, 29868, 21329, 28759, 30452, 30447, 30451, + 30453, 54415, 31037, 31039, 22599, 31563, 31564, 32030, 42044, + 32780, 32781, 32782, 32778, 33542, 17967, 26704, 17969, 17970, + 18222, 18220, 18221, 18531, 18885, 45308, 18533, 27098, 18534, + 18892, 19295, 27376, 27377, 28214, 19304, 19305, 19296, 28215, + 19306, 19303, 19770, 19773, 19772, 28218, 19769, 19774, 20323, + 28762, 37706, 20840, 20320, 20319, 20849, 29290, 20842, 20846, + 38303, 20855, 21341, 53414, 30457, 30456, 21830, 21835, 21826, + 21831, 21827, 21825, 22255, 40292, 31042, 22256, 22601, 31568, + 22605, 32032, 22603, 22858, 32439, 23282, 27378, 27379, 36631, + 27740, 28220, 28219, 28763, 29877, 29878, 29876, 30458, 30459, + 32035, 33709, 26851, 35925, 18537, 18896, 27382, 19311, 19312, + 27742, 19310, 27741, 28226, 28764, 28225, 28223, 28224, 28222, + 28766, 28769, 28227, 28767, 29299, 29298, 29294, 29297, 20859, + 29300, 38955, 29880, 29883, 29881, 29885, 29884, 29882, 30460, + 30462, 30461, 31050, 22262, 31053, 31052, 31571, 31572, 22608, + 31574, 22607, 31570, 32038, 32037, 32441, 32440, 33266, 33543, + 33420, 19313, 29302, 21838, 31577, 20335, 35692, 44903, 18223, + 27386, 18902, 27388, 27744, 27746, 37103, 19779, 20336, 28771, + 29306, 20862, 20863, 29305, 29886, 21839, 30465, 30464, 31055, + 40904, 32041, 32042, 32443, 32784, 33421, 29310, 26854, 26855, + 35930, 18545, 27391, 18906, 27394, 18905, 18907, 19323, 27752, + 27756, 27750, 27751, 19321, 27748, 27760, 27754, 46510, 19320, + 27753, 27755, 37112, 28233, 19783, 28231, 27757, 28230, 28236, + 19782, 28234, 28781, 28782, 20341, 20346, 48185, 20344, 28785, + 38321, 28778, 28779, 20343, 20345, 37720, 28784, 28787, 29317, + 38325, 29312, 29321, 29311, 29319, 29316, 29323, 29895, 29899, + 50020, 21347, 21349, 29894, 29892, 53447, 30479, 21841, 30478, + 30476, 30474, 30470, 53451, 30469, 38972, 30482, 54447, 31059, + 31060, 22268, 31065, 31061, 31067, 31589, 31585, 32050, 32046, + 56004, 31588, 56000, 32447, 32444, 32445, 33049, 33050, 23437, + 43111, 33422, 33545, 33544, 23794, 18226, 18909, 19325, 19785, + 20869, 21350, 38974, 39630, 31073, 32452, 33052, 33640, 27109, + 27399, 18910, 27767, 27766, 28238, 28239, 28789, 49117, 29907, + 29909, 21352, 21842, 30484, 31074, 32053, 32787, 27111, 27402, + 27401, 27768, 27770, 19326, 28242, 19786, 20349, 20870, 38336, + 21355, 31077, 29913, 31595, 32453, 23523, 33785, 18230, 26858, + 27117, 27118, 27116, 27115, 27113, 27404, 27407, 27408, 27405, + 27409, 36266, 27411, 45895, 18913, 27779, 19330, 19339, 19333, + 27774, 19334, 37121, 28247, 28248, 19793, 19791, 28249, 28245, + 28244, 20351, 28804, 20355, 28805, 20356, 28800, 28803, 28794, + 28796, 28806, 28801, 28808, 28802, 28798, 29329, 28807, 28797, + 29343, 29340, 20871, 29332, 29333, 29334, 29338, 29339, 49132, + 38980, 29916, 29924, 29919, 29914, 21360, 29926, 29929, 29922, + 29927, 21363, 29915, 21844, 30492, 30489, 30491, 30494, 30490, + 30500, 21846, 39637, 30486, 22270, 22271, 31079, 31083, 22275, + 22273, 31080, 31087, 31601, 31597, 31600, 31598, 22617, 31599, + 31602, 31603, 40327, 41526, 32060, 32062, 32063, 32058, 22864, + 32059, 32791, 32789, 32792, 32790, 33054, 23438, 33269, 33424, + 33271, 33642, 33790, 27120, 27416, 28254, 29933, 22620, 31607, + 32795, 33548, 27784, 27785, 28257, 28256, 48232, 29346, 29935, + 17971, 18231, 27122, 27421, 18917, 27419, 18921, 18826, 27792, + 27789, 27795, 36679, 19798, 19343, 19344, 27791, 27794, 28261, + 28264, 19799, 28262, 19797, 28263, 19801, 20362, 37750, 48240, + 28819, 20359, 28814, 29359, 29352, 29358, 20882, 29355, 20885, + 29356, 20879, 29357, 29351, 29353, 29354, 29361, 29937, 21372, + 29940, 21370, 29936, 29944, 29938, 39001, 30515, 30511, 30509, + 30508, 30517, 53489, 30514, 22280, 22276, 31095, 22277, 54482, + 40344, 31099, 31096, 31610, 31616, 21371, 31608, 22621, 22622, + 31614, 22874, 32066, 22870, 32070, 32068, 32067, 32460, 57305, + 23284, 32797, 32796, 33056, 33057, 33058, 33273, 33272, 23678, + 23758, 18924, 27424, 27423, 45911, 19347, 27797, 19350, 19807, + 28266, 28265, 20368, 20367, 28820, 29364, 29363, 20893, 20894, + 20897, 29366, 20895, 20898, 21375, 39013, 21378, 39659, 21853, + 31105, 22282, 31103, 31104, 31617, 22879, 22880, 23097, 33060, + 23801, 35703, 18234, 35945, 45348, 27125, 18549, 18550, 18552, + 27427, 27432, 27428, 27426, 27429, 27798, 19354, 19359, 47351, + 28270, 28269, 19816, 28268, 37156, 37154, 28273, 28272, 28274, + 19811, 28276, 37153, 19817, 28267, 37762, 28825, 28829, 20374, + 28831, 20377, 28830, 20378, 28828, 29374, 20899, 29372, 20904, + 29371, 20901, 29370, 20902, 29946, 29368, 38368, 21386, 21379, + 29950, 21388, 21383, 29949, 21381, 29947, 50082, 29948, 30524, + 30520, 21859, 30521, 21857, 53503, 21863, 30527, 30525, 30523, + 21864, 31112, 31111, 22288, 31108, 31107, 31109, 22290, 31620, + 22626, 31622, 22881, 56037, 32076, 32074, 32075, 23443, 32800, + 33062, 58229, 33061, 33275, 33276, 23806, 26862, 45353, 18931, + 18930, 27434, 27435, 19364, 19363, 19362, 28278, 28279, 19818, + 37166, 28281, 28280, 47360, 20379, 28834, 20380, 48272, 20381, + 38376, 29378, 29377, 49168, 29955, 50095, 30531, 39670, 40141, + 31118, 31115, 31117, 54504, 22628, 22629, 31627, 31628, 31626, + 31630, 22630, 32078, 32079, 32469, 32470, 32803, 33277, 17973, + 18555, 27439, 18935, 19368, 27806, 19365, 37167, 20382, 28837, + 20907, 29379, 29380, 29385, 29958, 31633, 32080, 23101, 36284, + 27814, 27809, 19371, 27816, 19372, 27812, 27811, 28285, 28292, + 19823, 37169, 28286, 28290, 19824, 47367, 28287, 28840, 28847, + 28844, 20387, 29386, 28845, 20393, 28848, 20386, 28842, 48280, + 48275, 20915, 29397, 29393, 29392, 20917, 20918, 29388, 20913, + 29391, 20910, 29394, 39047, 28849, 29960, 21396, 29965, 29964, + 21400, 29969, 29963, 21394, 29968, 29961, 39031, 30546, 30540, + 30535, 21872, 21869, 30551, 21878, 30549, 21873, 30563, 39694, + 21875, 30565, 30554, 30562, 30544, 39685, 21870, 39704, 30561, + 30556, 30542, 21877, 21879, 30557, 39689, 31133, 31139, 22294, + 31136, 31124, 31137, 22298, 31138, 31140, 31135, 31128, 31142, + 31122, 22295, 31642, 40966, 31645, 31641, 31649, 40982, 31652, + 31634, 22635, 31637, 31639, 31640, 40983, 31636, 40999, 32089, + 32100, 32096, 32101, 32088, 22883, 32095, 23105, 32087, 32097, + 56054, 32091, 32094, 32085, 41567, 32093, 22886, 22884, 41580, + 32483, 42095, 23103, 32480, 42087, 23106, 23102, 23104, 32102, + 32805, 33066, 33069, 33071, 23447, 33067, 23450, 33065, 33070, + 23553, 42834, 33281, 33283, 33430, 33434, 33429, 23656, 33549, + 33711, 33737, 59468, 27440, 19378, 19382, 47377, 28298, 37186, + 19831, 48285, 28854, 28855, 20396, 20395, 28856, 20925, 20921, + 20922, 20924, 20926, 21404, 29973, 21405, 21406, 50113, 21407, + 21882, 21883, 21880, 21881, 30572, 53540, 30570, 22299, 31660, + 22642, 22641, 31656, 31657, 21891, 31658, 41593, 32107, 22891, + 32106, 32105, 41599, 22892, 23109, 32488, 32490, 32808, 23289, + 57835, 42849, 33438, 43358, 33647, 23724, 27131, 45939, 18948, + 18946, 18949, 27817, 27823, 19384, 19383, 27821, 19388, 27824, + 19387, 27822, 19385, 19389, 28307, 28299, 19836, 19843, 28300, + 28309, 19845, 28306, 28304, 28302, 19841, 19846, 19838, 20419, + 37799, 20410, 20415, 20404, 20413, 20402, 48302, 20414, 29401, + 20936, 20942, 29405, 29410, 29406, 20932, 20928, 21413, 29976, + 29985, 29980, 29986, 21408, 20930, 21419, 21422, 29988, 39061, + 21416, 21911, 39718, 30579, 30577, 30581, 21898, 21902, 21914, + 21893, 21896, 30575, 30578, 30580, 21897, 30585, 39719, 21907, + 21904, 22303, 31154, 22305, 31152, 22306, 22307, 31666, 22647, + 41014, 22645, 41021, 22646, 31661, 22651, 22650, 55390, 32119, + 32117, 31665, 22896, 22895, 22944, 32499, 32496, 32501, 32495, + 56629, 23112, 23110, 42489, 23290, 32809, 23291, 23292, 23452, + 23451, 33285, 58241, 23556, 33286, 33439, 33552, 33551, 58862, + 23681, 33649, 33648, 33738, 27442, 27832, 19848, 19851, 37193, + 28313, 19849, 28312, 28865, 29990, 21423, 31159, 33444, 18562, + 18953, 18952, 18950, 27444, 27833, 46604, 27836, 28314, 29412, + 28867, 20943, 20944, 38420, 21427, 21428, 31160, 31668, 32122, + 32506, 33084, 33554, 46613, 27837, 19206, 28317, 28315, 28316, + 47403, 28870, 28874, 28873, 29413, 21431, 29992, 21430, 29993, + 21429, 30590, 31164, 22310, 31670, 32127, 32128, 33287, 19395, + 19396, 28319, 19852, 28320, 28323, 28321, 19854, 19853, 28877, + 28878, 37813, 28876, 20947, 29415, 20948, 29414, 20946, 21432, + 29995, 29994, 29996, 31166, 31167, 22903, 22905, 22904, 23295, + 33086, 20422, 20423, 27454, 27455, 27847, 27456, 19857, 29417, + 29999, 29998, 30000, 30003, 30001, 30596, 31676, 31673, 31674, + 32133, 33088, 26866, 19401, 19400, 19859, 28326, 28882, 38431, + 20951, 30007, 30005, 30006, 30008, 21435, 21920, 30599, 31171, + 22311, 31172, 31678, 31681, 31680, 31679, 22909, 32813, 23559, + 49238, 26708, 44596, 26868, 26867, 18566, 46631, 18570, 18565, + 27141, 27137, 27142, 27138, 27140, 35963, 18575, 18568, 36302, + 27462, 27457, 27459, 18959, 18956, 45964, 36308, 19412, 27856, + 27861, 27862, 27854, 46640, 36736, 19871, 28337, 28333, 19869, + 28336, 28343, 28342, 28335, 28344, 47431, 19865, 19864, 19868, + 28898, 28883, 20428, 28894, 37832, 28899, 28890, 28889, 28891, + 28886, 20435, 28888, 28893, 28900, 48033, 48367, 49247, 29428, + 20955, 29431, 29424, 29427, 20957, 29420, 29429, 20962, 29433, + 20960, 20956, 37203, 29426, 30022, 30015, 30013, 30014, 30016, + 22317, 30019, 30017, 30012, 21440, 21439, 30009, 30024, 30018, + 30610, 30605, 30611, 30602, 30609, 50180, 30601, 30608, 30612, + 38453, 31180, 31181, 22315, 22314, 31175, 31178, 31179, 31183, + 41042, 31688, 31685, 31689, 32137, 22911, 32139, 22912, 23115, + 32513, 32512, 42499, 32815, 33089, 33091, 33090, 33092, 33291, + 47443, 56121, 18647, 20965, 27865, 28349, 30616, 31188, 19414, + 19415, 19875, 30617, 50196, 22320, 23457, 27150, 27466, 27465, + 18964, 19417, 27871, 19876, 47456, 47455, 20439, 28903, 28904, + 48382, 38458, 29436, 30032, 30034, 30033, 21443, 50199, 39115, + 21931, 30621, 30618, 31189, 31190, 31693, 31697, 31696, 22658, + 22659, 41054, 40934, 31695, 32145, 32818, 27874, 28353, 31192, + 31191, 31698, 32146, 33294, 44602, 17976, 17978, 18242, 26875, + 26882, 18247, 18584, 18588, 18585, 18591, 27153, 18583, 27166, + 27154, 18586, 18590, 35974, 18582, 18970, 27469, 18973, 18974, + 18969, 18976, 18978, 45991, 27876, 19428, 27888, 19431, 19422, + 19425, 46677, 19424, 27885, 19423, 19432, 36754, 27880, 27891, + 19427, 28355, 28369, 28374, 19891, 28366, 28362, 19887, 28363, + 28359, 28354, 28360, 47481, 19877, 47477, 37233, 19890, 19893, + 37227, 28933, 28921, 28920, 28925, 28914, 37841, 28916, 28911, + 20448, 28919, 20449, 20446, 28917, 28922, 20450, 48416, 20441, + 29437, 29439, 28926, 20984, 30058, 29460, 29462, 29447, 20972, + 20970, 20981, 29461, 20990, 29465, 30054, 21446, 30040, 50231, + 30053, 21448, 30036, 39131, 30050, 21447, 30062, 30049, 30045, + 21451, 39130, 50251, 21454, 21463, 21936, 30631, 21932, 30629, + 30647, 30624, 21934, 30630, 21952, 30626, 30632, 21940, 21938, + 21955, 30642, 22326, 30625, 21943, 30627, 21941, 21954, 21942, + 39799, 21949, 30644, 30628, 21950, 30636, 31200, 31204, 31202, + 31219, 31208, 31199, 22328, 31212, 22332, 31207, 22322, 31210, + 31203, 31205, 31195, 41654, 22321, 31209, 31196, 22323, 31214, + 31224, 30056, 31713, 31705, 31701, 31711, 41072, 31699, 31704, + 22667, 22660, 31706, 22663, 22668, 22914, 32147, 32158, 22918, + 22921, 22915, 22922, 32150, 56141, 32148, 55477, 32516, 23300, + 23126, 32517, 23124, 23127, 56826, 32820, 32825, 23310, 32824, + 23301, 57881, 23306, 32823, 32829, 23307, 32821, 23302, 32827, + 33094, 23462, 33095, 23560, 33298, 58267, 23626, 23627, 43526, + 33556, 33713, 33650, 23761, 33740, 33742, 33768, 33767, 43927, + 18594, 27477, 27894, 19434, 19433, 19435, 37244, 19899, 37867, + 20461, 20994, 38497, 38496, 20995, 20996, 30649, 31229, 32165, + 41668, 41667, 32831, 18249, 18986, 18988, 18989, 27896, 27898, + 46696, 19905, 19904, 28385, 19902, 28384, 28382, 37887, 47509, + 28939, 20468, 28941, 20466, 37871, 28937, 28934, 20465, 20467, + 29475, 29476, 21004, 21000, 29480, 28935, 29482, 21003, 30073, + 21469, 30067, 30068, 30066, 30070, 21470, 30065, 30071, 50268, + 21471, 30076, 21959, 21961, 53707, 21956, 21957, 30659, 21960, + 30074, 30665, 30658, 21476, 31237, 22337, 54696, 31236, 31722, + 22341, 54698, 22342, 41095, 31732, 31727, 22676, 31733, 31724, + 31731, 22677, 31723, 22671, 31729, 31740, 22674, 22681, 22670, + 32174, 41098, 32172, 22923, 32527, 42144, 23133, 32524, 32528, + 42530, 32832, 32833, 32837, 32835, 32838, 23317, 23467, 33103, + 32834, 33305, 23561, 23563, 23629, 58284, 58623, 33457, 58628, + 23727, 33770, 18992, 46706, 19906, 21005, 30082, 30666, 27902, + 28945, 21963, 31249, 23137, 18595, 18995, 27485, 36782, 27905, + 36778, 28397, 28947, 28400, 28401, 28399, 28946, 20478, 28403, + 20475, 20473, 20472, 19029, 29487, 30084, 49360, 21482, 30092, + 39179, 39180, 29491, 30096, 30086, 21484, 29485, 30089, 30093, + 30085, 30090, 21489, 21479, 21490, 30671, 30674, 30669, 30668, + 30677, 30675, 30682, 31257, 31260, 31261, 21968, 31254, 31744, + 31748, 22690, 22688, 31745, 22683, 55516, 22689, 31746, 22686, + 41695, 32189, 32187, 32188, 32183, 32185, 32533, 56213, 32840, + 57438, 23318, 32841, 23468, 33460, 58297, 23683, 33563, 23682, + 33744, 36322, 27906, 28404, 28952, 19452, 19451, 28406, 28408, + 28954, 37902, 28953, 20480, 21009, 21010, 30101, 30103, 30685, + 30683, 31265, 31266, 40531, 31267, 41112, 31749, 31750, 32193, + 32195, 32536, 32537, 23139, 32535, 32539, 23469, 33772, 23809, + 28413, 21012, 29492, 21011, 30105, 30692, 30687, 30689, 30694, + 30690, 31275, 31272, 31273, 31752, 31751, 41708, 32540, 32543, + 32843, 32844, 33653, 18998, 36324, 19000, 27917, 19456, 28420, + 19925, 19921, 37278, 28423, 37285, 19931, 19935, 19928, 28418, + 19926, 19934, 28422, 37284, 47546, 19933, 37277, 28970, 20486, + 20487, 28973, 28972, 20483, 20488, 20484, 28971, 28961, 28960, + 28962, 20497, 48484, 20496, 21016, 49382, 21023, 29499, 29498, + 29497, 21019, 21024, 21027, 30108, 30111, 30121, 30107, 21505, + 30117, 30113, 21496, 30114, 21504, 21502, 21492, 30700, 30697, + 30703, 30705, 21973, 30708, 30699, 30702, 21978, 30706, 30701, + 21976, 30707, 53762, 30696, 21982, 31281, 22353, 22354, 54752, + 31282, 22692, 31757, 22696, 22697, 41130, 32205, 56874, 32202, + 32206, 22937, 22940, 32199, 22942, 32555, 42161, 23142, 32550, + 32552, 32560, 42160, 32851, 23324, 57450, 32849, 23326, 32845, + 23328, 33116, 33118, 57921, 33117, 33119, 33112, 58303, 23566, + 33315, 43377, 27488, 27920, 48499, 20498, 30123, 21988, 31762, + 32212, 33319, 28429, 20499, 29505, 30125, 30126, 21507, 30711, + 22357, 31290, 22356, 31289, 22358, 31763, 31764, 22699, 33123, + 33655, 27922, 28430, 47565, 28431, 30714, 30712, 30715, 31292, + 31294, 32215, 32563, 32561, 33124, 23568, 23731, 33656, 28435, + 47567, 19942, 28981, 21509, 21990, 21989, 22359, 22701, 22947, + 22948, 32565, 56902, 23146, 32219, 28436, 28439, 37925, 28982, + 28984, 20505, 28985, 48512, 28986, 29516, 21031, 21033, 39206, + 50363, 21510, 21992, 21993, 30721, 30719, 53789, 30720, 39880, + 21996, 22361, 31300, 31296, 31298, 31297, 22363, 55572, 31767, + 31301, 23332, 23473, 33464, 36796, 38559, 30136, 30135, 33127, + 36797, 27924, 27925, 28440, 28441, 19947, 19949, 20508, 28988, + 20513, 20509, 37931, 20512, 28991, 28990, 29521, 29522, 38567, + 21035, 29523, 38563, 30137, 50374, 30138, 21517, 39217, 21518, + 39215, 22002, 30726, 30724, 21999, 30727, 53796, 31307, 40573, + 40566, 22365, 31770, 31776, 31769, 41154, 32224, 22950, 32223, + 32221, 32225, 22951, 32568, 23333, 32858, 32856, 32859, 33129, + 33321, 23569, 33322, 33466, 33565, 33658, 27491, 19002, 27927, + 19457, 28449, 28444, 37305, 19954, 28446, 28447, 28448, 19955, + 37948, 28995, 28999, 20520, 28996, 28992, 48525, 48531, 37941, + 28993, 28994, 28998, 20519, 37944, 29000, 29524, 38582, 21037, + 21039, 39227, 30141, 30144, 30142, 30145, 30148, 21519, 30147, + 22003, 21040, 30730, 30739, 22005, 53813, 22009, 22004, 30737, + 30738, 30736, 30732, 30731, 30729, 22008, 30740, 31315, 22370, + 22367, 31316, 31314, 40579, 31317, 22366, 41168, 31782, 31783, + 31777, 31781, 31779, 22704, 22954, 32231, 32235, 32229, 32232, + 56924, 32571, 22955, 32572, 32234, 32864, 32863, 33135, 33131, + 43188, 33467, 58648, 33566, 23734, 23795, 20525, 37952, 29001, + 29002, 20524, 21042, 21041, 21043, 30743, 31319, 31787, 22707, + 23153, 32868, 23637, 27492, 27493, 19459, 19962, 19963, 19967, + 28452, 28453, 19964, 19965, 19961, 47600, 20531, 20526, 29003, + 20533, 21046, 29525, 21045, 49447, 29527, 30149, 30152, 30150, + 21525, 30745, 30744, 30747, 30746, 22374, 40595, 31320, 31321, + 39920, 22709, 31789, 31792, 31794, 22708, 31788, 32239, 32238, + 32237, 41756, 32240, 32241, 32580, 32579, 32578, 32869, 32870, + 33137, 23571, 23570, 23686, 33716, 33746, 23810, 30751, 23336, + 30154, 22019, 32872, 57487, 18253, 26885, 18596, 35980, 27498, + 27495, 19460, 27930, 27933, 19461, 27931, 19968, 28460, 19972, + 20542, 29006, 20537, 48543, 20541, 29530, 21530, 30155, 21528, + 22021, 30754, 30758, 22024, 22381, 22379, 22380, 31795, 31796, + 56298, 22960, 32585, 33569, 17828, 26713, 18257, 18258, 18259, + 18603, 27174, 19009, 27501, 21057, 19016, 27499, 27503, 19012, + 19013, 46042, 27941, 27937, 19465, 27936, 30160, 28463, 28465, + 28470, 28462, 19975, 28467, 29013, 20547, 29535, 29537, 21056, + 31799, 29539, 30156, 30157, 21534, 21533, 39261, 30159, 22025, + 30766, 30765, 40607, 41199, 23638, 33469, 19018, 19468, 19469, + 28475, 28471, 19978, 37339, 28472, 29015, 20549, 20550, 20551, + 29019, 49487, 21061, 29544, 29543, 29546, 29545, 30162, 30163, + 30768, 30770, 30767, 30769, 31330, 31329, 31327, 22385, 31333, + 31328, 54853, 22387, 31800, 31805, 55633, 31804, 41772, 32588, + 32591, 32590, 32589, 32592, 33145, 33146, 33327, 33326, 33571, + 33570, 33774, 28477, 46784, 19985, 20554, 20559, 20556, 20562, + 21067, 38616, 21539, 30168, 21547, 30165, 30170, 30167, 22042, + 30772, 22034, 22033, 53885, 22037, 53891, 22390, 22391, 31341, + 31339, 55644, 22726, 55640, 31808, 31807, 22966, 22968, 32256, + 32253, 56330, 32248, 41782, 32252, 22975, 22974, 23161, 32593, + 23166, 23155, 23173, 32596, 42224, 32595, 23172, 23167, 23164, + 23338, 32599, 23343, 32875, 32881, 42602, 23351, 32882, 33150, + 23480, 32878, 33152, 23481, 33154, 57975, 23478, 23483, 23484, + 23578, 23642, 42916, 58350, 23576, 58351, 23579, 43198, 33473, + 43396, 33470, 23639, 23641, 23690, 23688, 33573, 23691, 23765, + 46786, 29022, 29556, 32259, 19986, 28479, 20565, 29026, 20569, + 20566, 21082, 29563, 29561, 30176, 21552, 21556, 21551, 39275, + 21553, 53899, 30777, 22047, 22050, 31348, 31344, 22402, 31345, + 22404, 22406, 22409, 22408, 54884, 31817, 31818, 31823, 22731, + 22729, 31816, 31821, 33157, 32886, 42922, 33328, 35436, 17829, + 17983, 35716, 44952, 27182, 27183, 18607, 36351, 27505, 19020, + 27504, 27949, 27946, 19478, 27947, 19480, 27945, 19994, 19988, + 28480, 19991, 19993, 19995, 19990, 20570, 29028, 20575, 21086, + 21085, 29568, 29567, 21084, 21088, 21558, 21557, 21560, 21559, + 22052, 22051, 53913, 22410, 31352, 31350, 31824, 23175, 32888, + 33158, 19481, 28485, 20581, 20577, 20580, 20578, 29569, 21091, + 21090, 21092, 21565, 22056, 22055, 22414, 22413, 22301, 31827, + 22735, 22979, 23176, 23353, 23177, 23354, 33329, 23736, 23813, + 19997, 20584, 48614, 21095, 30186, 30190, 30187, 21567, 30193, + 21568, 30192, 50474, 22057, 22060, 22058, 31358, 22418, 22417, + 31835, 22736, 22740, 31357, 22739, 31832, 31834, 32262, 22980, + 22981, 32263, 56361, 56369, 32607, 32606, 23178, 23179, 23180, + 32890, 23356, 33331, 33333, 33334, 23649, 23738, 23694, 23737, + 23785, 23817, 23819, 33335, 28489, 28491, 29035, 30781, 32896, + 29573, 21097, 21570, 30197, 30196, 31362, 31361, 31837, 32897, + 33165, 42930, 33576, 29040, 20588, 29037, 21100, 29576, 29578, + 21099, 49545, 30199, 30205, 30200, 21572, 21573, 30202, 30784, + 31368, 31366, 31365, 31369, 31367, 31838, 31373, 22421, 22745, + 31843, 31839, 55701, 22742, 22746, 22747, 32271, 41829, 32275, + 32269, 41818, 41826, 32268, 32274, 23183, 23182, 32610, 32614, + 23181, 32902, 32899, 42622, 58004, 58002, 33169, 33167, 42936, + 58003, 23583, 43211, 33475, 23651, 33577, 33664, 23739, 33720, + 23767, 33747, 29580, 30208, 30206, 30207, 30209, 22423, 31846, + 56392, 32278, 22985, 32616, 32617, 33170, 33339, 23652, 21101, + 22748, 23190, 23189, 23361, 33172, 33476, 20590, 20591, 20592, + 21104, 31375, 31374, 22986, 32619, 32620, 23584, 29042, 29584, + 29583, 38653, 39321, 30218, 21574, 30219, 21576, 30217, 30216, + 39322, 30212, 22067, 30794, 30797, 40013, 31378, 31380, 22425, + 30798, 22435, 22426, 22433, 54944, 22752, 31854, 55720, 22749, + 31858, 22750, 22751, 22754, 22756, 32287, 22987, 32282, 32280, + 32284, 22990, 22988, 32286, 32285, 22993, 32624, 32626, 32630, + 32623, 32629, 23191, 32622, 32632, 32625, 32628, 32914, 32916, + 32915, 23363, 33174, 33176, 33173, 33179, 33178, 58015, 33342, + 23585, 33341, 33582, 43561, 23740, 28492, 29045, 21106, 29592, + 29597, 29593, 30222, 30227, 30230, 30221, 30225, 21580, 30801, + 30802, 31387, 31388, 31384, 31385, 31386, 31864, 31867, 31866, + 31863, 31861, 31865, 32290, 56399, 32289, 32291, 22996, 22997, + 22998, 32635, 23194, 23193, 32921, 23364, 33181, 33479, 33583, + 22758, 22999, 19483, 28493, 20594, 20595, 29049, 20593, 29050, + 21116, 20597, 29602, 29599, 21585, 21117, 29600, 21109, 21108, + 21113, 29604, 29605, 21581, 21582, 30232, 53979, 21583, 30233, + 50509, 22069, 30806, 30805, 30808, 30807, 31389, 30810, 31393, + 31394, 31391, 31872, 31397, 31873, 31875, 41282, 22760, 23003, + 41277, 22759, 32297, 32296, 32300, 32298, 32299, 32924, 32639, + 23195, 32927, 32926, 23366, 23368, 33185, 33184, 23498, 33183, + 33346, 33344, 23586, 33347, 33480, 23741, 33667, 33722, 33750, + 22071, 22442, 32304, 32645, 30234, 22762, 31401, 22761, 23768, + 20598, 38675, 21119, 30235, 21594, 30236, 21588, 21596, 21597, + 21600, 21598, 30816, 22076, 22075, 30815, 22074, 30814, 30817, + 22450, 22449, 22448, 40713, 22444, 31408, 40715, 54997, 31879, + 22765, 22768, 31878, 22764, 32312, 42283, 32307, 23007, 32313, + 23008, 32308, 32310, 23011, 32650, 32648, 23197, 32655, 32649, + 32653, 32654, 32932, 32931, 23372, 23370, 32938, 42651, 42658, + 23371, 33190, 33191, 33192, 33194, 23502, 42970, 33189, 58403, + 43231, 33350, 33348, 23589, 33482, 33483, 33481, 23698, 58951, + 58950, 23742, 33723, 23788, 33776, 23804, 33800, 20000, 20599, + 30239, 21602, 22080, 30822, 30820, 30823, 22083, 22453, 22454, + 31411, 31413, 31410, 31409, 22772, 31882, 31886, 31881, 22771, + 31884, 41878, 32319, 23203, 32657, 32656, 32940, 23374, 33197, + 33353, 33484, 33587, 33670, 20601, 29611, 32659, 43235, 59398, + 20602, 38025, 50539, 30247, 30246, 30244, 21609, 39348, 30828, + 22085, 31416, 31417, 31889, 22776, 31892, 32321, 32324, 23013, + 32325, 32327, 32326, 32328, 32663, 23205, 32661, 32944, 32946, + 32945, 57616, 42988, 23505, 33357, 33592, 33590, 23700, 43571, + 33672, 59105, 33724, 33786, 57620, 42990, 21612, 21611, 21837, + 22457, 58416, 23743, 21614, 30835, 30836, 31426, 22458, 32335, + 23015, 32334, 32333, 23206, 41901, 23380, 33362, 33361, 58420, + 33597, 33598, 33801, 38027, 30250, 39359, 30839, 30851, 22090, + 54029, 30856, 30849, 30842, 30840, 22472, 31431, 31429, 31435, + 22465, 22473, 31428, 22471, 22469, 22467, 22462, 31897, 22780, + 32336, 55782, 31899, 23017, 32338, 41907, 32342, 32340, 23023, + 32339, 23022, 32344, 32346, 32678, 42320, 32688, 32672, 32682, + 32674, 32669, 23209, 42316, 32683, 42310, 32681, 32685, 23211, + 23214, 23215, 23398, 32952, 57638, 32958, 23387, 57640, 32950, + 23386, 23388, 33210, 23512, 23515, 33209, 23513, 23510, 33207, + 23508, 23514, 33368, 23592, 33370, 33367, 23591, 33369, 23597, + 33366, 23594, 33491, 33492, 33495, 33490, 58752, 23664, 23661, + 43580, 43575, 23703, 33602, 33603, 43431, 23745, 33676, 23704, + 33757, 33758, 33804, 21124, 21615, 21616, 21617, 21619, 39366, + 21618, 40067, 30862, 22092, 30867, 30858, 54032, 30863, 22097, + 22098, 22095, 21780, 30864, 31441, 22480, 31440, 22481, 31442, + 22476, 31447, 55031, 31437, 22479, 31450, 22790, 31438, 22482, + 31448, 22485, 31443, 55038, 22672, 22791, 31914, 22786, 22788, + 22785, 31915, 22793, 31913, 32350, 32356, 32347, 23030, 23027, + 32353, 32352, 41929, 32359, 32691, 23218, 32693, 32964, 23225, + 32696, 42327, 32357, 23399, 32975, 23404, 23402, 32973, 32967, + 23403, 57655, 32965, 32974, 23405, 23519, 33213, 33215, 33214, + 43024, 23518, 33376, 33381, 23601, 33375, 23599, 23600, 33500, + 23668, 43439, 33499, 43447, 33502, 23667, 23666, 33503, 33605, + 33607, 33606, 23709, 33609, 33680, 23747, 59242, 23791, 23811, + 33802, 23816, 30870, 32360, 58100, 33508, 43698, 39368, 30872, + 30873, 22102, 22489, 31451, 55049, 23032, 32699, 23524, 23710, + 23711, 30256, 30257, 21620, 30876, 30874, 31452, 31455, 31453, + 31456, 22794, 32363, 32362, 23036, 32706, 32703, 32710, 32704, + 32709, 33222, 33221, 33223, 43284, 43279, 33509, 23712, 58466, + 33684, 54066, 32980, 32981, 55058, 32364, 32712, 32985, 33224, + 33513, 33615, 54068, 31457, 55060, 42725, 32988, 33228, 33225, + 33227, 33226, 33386, 33516, 33685, 29621, 21622, 30881, 30882, + 31458, 31928, 41362, 41955, 41952, 32366, 41956, 32714, 23228, + 32991, 32994, 32992, 42731, 33231, 23526, 33517, 33616, 33687, + 23749, 33686, 33730, 32367, 23229, 33392, 23713, 31460, 33622, + 33623, 32370, 32369, 32371, 32717, 33238, 31461, 31932, 32372, + 32718, 33239, 23603, 33519, 33522, 23041, 32373, 23408, 57692, + 42740, 33241, 33762, 43893, 31935, 41372, 32375, 32720, 32722, + 33000, 32998, 32999, 23528, 33246, 33398, 33397, 23671, 43472, + 33630, 33627, 33631, 33695, 33694, 33731, 23773, 23792, 23799, + 33788, 33789, 33803, 43304, 42372, 42429, 33247, 33248, 33700, + 23793, 3290, 3292, 26513, 3293, 17677, 17676, 8841, 3312, 3310, + 3313, 3311, 8842, 3355, 8850, 8848, 3354, 3353, 26532, 3449, 3448, + 3447, 26560, 3450, 3446, 3573, 3574, 17831, 17830, 17832, 26716, + 17984, 4015, 17672, 26514, 17683, 3314, 3356, 8851, 26533, 3357, + 8870, 3740, 9228, 27509, 17673, 3315, 3358, 3451, 8871, 18267, + 17674, 26509, 26510, 8836, 3294, 3317, 17687, 8843, 3318, 17685, + 3359, 3452, 3454, 3453, 26608, 3575, 3576, 17896, 4016, 18613, + 4792, 3291, 26511, 8837, 3295, 3320, 3319, 17709, 17708, 17833, + 3577, 26609, 17985, 4017, 26900, 26899, 18614, 5250, 10573, 20003, + 20005, 6213, 11897, 11898, 17675, 3296, 17684, 3361, 17834, 4018, + 3297, 8844, 3321, 17688, 3362, 3364, 8852, 3365, 3363, 26534, + 17747, 17835, 3578, 4019, 17987, 18269, 4020, 4394, 571, 3322, + 3366, 17710, 3579, 3581, 3580, 3741, 4021, 4022, 4395, 4396, 18617, + 18616, 18618, 18615, 4793, 28495, 11899, 20604, 16015, 3298, 17689, + 17690, 3368, 3367, 8853, 3369, 3375, 17712, 3370, 3371, 8855, + 8854, 3373, 3374, 17715, 3372, 17714, 17713, 26535, 3457, 3458, + 3459, 3460, 3456, 3463, 8877, 26566, 8873, 8876, 3464, 3480, 17748, + 8875, 26565, 3461, 3462, 3455, 17753, 17751, 8872, 8874, 17844, + 17837, 3594, 8914, 3591, 3595, 8924, 8912, 3592, 8916, 17840, + 17836, 17851, 3593, 17843, 3596, 26614, 3582, 8915, 3597, 8919, + 17842, 8923, 8920, 17841, 17849, 8917, 3583, 3585, 3598, 26611, + 3587, 8909, 3590, 3588, 3589, 8925, 8922, 8913, 3586, 17845, 17852, + 8910, 3584, 17850, 26615, 17848, 8918, 8921, 17847, 8911, 9031, + 26720, 3763, 3750, 18001, 17993, 9032, 3747, 18000, 3765, 17991, + 3755, 17990, 3754, 9020, 3758, 3753, 9025, 9033, 17999, 9029, + 17994, 3756, 17996, 17988, 3759, 3744, 3768, 9022, 17989, 17997, + 9240, 3742, 3764, 3743, 3751, 3752, 9027, 9023, 3757, 3749, 9019, + 3745, 9030, 3766, 3769, 3748, 3761, 3767, 3746, 9028, 3762, 9034, + 9021, 3760, 9024, 9026, 4036, 9242, 9254, 4028, 18274, 9255, 4023, + 4033, 26913, 18282, 4026, 9236, 4034, 9235, 9239, 9246, 9244, + 4042, 4037, 9230, 9232, 4039, 4027, 9233, 9245, 9252, 4032, 9238, + 9231, 4031, 9234, 4035, 9237, 18271, 4030, 18284, 4025, 18275, + 4040, 9247, 4041, 9251, 18270, 9249, 9253, 4038, 9241, 9229, 26905, + 9243, 4029, 9248, 4024, 9250, 18279, 18276, 18278, 18277, 18280, + 4411, 4399, 18624, 18625, 9589, 9597, 18633, 4398, 4406, 4418, + 18623, 9603, 9601, 9596, 27189, 27195, 18622, 4400, 9602, 9592, + 4414, 4405, 4413, 9587, 18629, 9599, 18626, 9590, 4409, 9591, + 18630, 9586, 4416, 4403, 4412, 4402, 18619, 9588, 9593, 18620, + 9600, 4410, 4407, 9595, 4415, 9598, 9594, 4404, 4417, 4408, 4401, + 4397, 27196, 18632, 18631, 27194, 9604, 4819, 4797, 19027, 4813, + 19032, 4818, 10044, 10043, 10048, 10049, 4800, 19023, 4809, 19043, + 19031, 19041, 4822, 19025, 4810, 27513, 19030, 19028, 19026, 10037, + 4803, 10038, 19034, 4824, 27515, 4815, 4794, 4795, 10057, 5267, + 19038, 4808, 4807, 10039, 4811, 10589, 4802, 10050, 4817, 4816, + 4806, 10042, 10051, 19024, 10036, 4805, 10052, 4814, 10040, 4796, + 19033, 4799, 4798, 10053, 4812, 4801, 4821, 4823, 10047, 4820, + 19036, 10055, 10041, 10056, 19022, 10045, 27512, 10054, 19035, + 10046, 19039, 19040, 4804, 10597, 10585, 19485, 5255, 19488, 10590, + 10596, 5254, 10583, 5258, 10587, 10580, 5256, 10584, 5261, 5266, + 19493, 10601, 19490, 10579, 19491, 5262, 19042, 10600, 19496, + 19486, 5257, 10586, 5253, 10581, 10577, 10591, 10578, 10576, 10588, + 10594, 10595, 5259, 19489, 27956, 11216, 10592, 10575, 10593, + 19500, 5269, 10598, 5268, 10574, 19492, 10582, 10599, 5264, 5263, + 5260, 5265, 19501, 19499, 5251, 19494, 19495, 5252, 5747, 20012, + 11219, 11212, 28501, 5744, 28500, 11220, 20008, 20009, 28503, + 11210, 11213, 5743, 11214, 20006, 28498, 5746, 11218, 28509, 11208, + 11207, 5748, 20007, 5749, 5745, 5750, 11206, 11217, 11215, 11209, + 28506, 28497, 28507, 5742, 11211, 20610, 20613, 6220, 6214, 11903, + 6223, 11909, 11912, 6216, 6217, 11906, 6215, 11915, 6221, 11916, + 20611, 11911, 6222, 20608, 11900, 6219, 11901, 29054, 11910, 11908, + 20614, 11904, 6218, 11902, 6224, 11907, 11914, 11905, 11913, 20607, + 20615, 6671, 6668, 21130, 6669, 29622, 12596, 12588, 6667, 6664, + 12589, 21133, 21131, 6666, 12592, 21132, 12594, 21141, 29630, + 12601, 21135, 21140, 12600, 12595, 6663, 12587, 6661, 12590, 6672, + 12593, 21136, 12597, 6665, 6662, 12599, 12598, 6670, 12591, 21139, + 7052, 13211, 21628, 13208, 7053, 30262, 7051, 21630, 13215, 13212, + 13205, 7050, 21632, 7054, 13206, 7049, 7057, 13209, 13210, 7055, + 7056, 13216, 13213, 13214, 21631, 21626, 7444, 13852, 7441, 13849, + 7443, 7445, 22106, 13850, 7442, 30889, 13851, 22110, 13848, 22105, + 22109, 7740, 14422, 7741, 14420, 31464, 14421, 14419, 14418, 22498, + 22497, 14423, 7739, 22108, 31468, 14887, 14888, 22797, 13207, + 14886, 7742, 8188, 15250, 15251, 23235, 8431, 8432, 15838, 15837, + 8515, 8514, 16166, 23672, 3299, 3323, 3377, 26536, 3376, 3466, + 3465, 3601, 3600, 3602, 3599, 17853, 3771, 3770, 3772, 18005, + 26722, 18004, 18002, 4044, 26914, 4043, 4045, 18285, 4419, 27197, + 182, 10058, 183, 5270, 185, 184, 11221, 20013, 186, 6673, 187, + 23410, 3300, 17691, 3378, 3603, 4046, 18634, 3301, 3381, 3379, + 3380, 3604, 17855, 26621, 3773, 4048, 4047, 4049, 18984, 4825, + 20616, 7446, 17678, 26537, 17716, 17711, 17717, 8849, 26557, 3467, + 3468, 17759, 17760, 3605, 26623, 9035, 18288, 4421, 4420, 10060, + 10059, 5271, 17679, 3382, 8856, 17761, 18008, 9256, 18636, 4422, + 19046, 4828, 19044, 4826, 4827, 19045, 19502, 7447, 578, 3469, + 26569, 3606, 8926, 17859, 17858, 17857, 18010, 3774, 3775, 18011, + 9036, 26724, 9257, 4050, 9258, 26915, 26918, 18638, 18640, 18641, + 10062, 10063, 4831, 19049, 10064, 19050, 10061, 4832, 4830, 4829, + 10065, 19504, 10602, 19503, 20020, 20017, 11222, 28512, 20021, + 11917, 12602, 21634, 21633, 21635, 7058, 7448, 13853, 22499, 3302, + 3316, 17686, 17692, 17720, 17762, 17861, 18012, 18292, 26920, + 5272, 5752, 47726, 6674, 21145, 8838, 3383, 26571, 3472, 3470, + 3471, 4051, 18293, 3303, 3304, 26517, 3324, 17693, 17721, 3384, + 3385, 3386, 8879, 3473, 17764, 8878, 3610, 17864, 8928, 3608, + 3609, 8927, 17863, 17865, 3611, 3607, 17866, 9037, 4370, 9038, + 18016, 18018, 9039, 26727, 18013, 3777, 3776, 18015, 18014, 3780, + 3778, 3779, 18017, 4057, 18294, 4056, 9263, 9260, 9261, 18297, + 9259, 4058, 4054, 4053, 18298, 4055, 4052, 18296, 26929, 4059, + 4424, 9605, 18642, 9262, 4429, 18643, 9606, 4425, 4428, 4427, + 4426, 4423, 18646, 10068, 19059, 4835, 10071, 4833, 19056, 27525, + 19053, 10067, 4836, 4834, 4837, 10069, 10070, 19051, 10066, 10072, + 19057, 19052, 19054, 19055, 19505, 5756, 5273, 10603, 10605, 10604, + 10606, 5274, 20024, 5753, 20022, 5754, 5755, 19506, 6226, 11919, + 20618, 11918, 11920, 11921, 6227, 20617, 6225, 12603, 12604, 6676, + 6675, 12942, 30272, 21636, 7059, 7060, 7061, 7063, 13217, 13218, + 7062, 21637, 22111, 7449, 30899, 7450, 22112, 31472, 15252, 15840, + 15839, 16167, 23605, 3305, 17694, 17723, 17722, 3475, 3474, 3612, + 26635, 26632, 8929, 26634, 17867, 3782, 3783, 3781, 3784, 9040, + 9041, 26733, 26734, 26735, 18020, 18019, 18300, 35745, 35742, + 35743, 18299, 35746, 4061, 9264, 26931, 4060, 18301, 9607, 4433, + 9608, 4432, 18651, 18649, 27206, 4430, 27208, 4431, 18650, 19066, + 10073, 19063, 19061, 19064, 19065, 5275, 10608, 19507, 5278, 10607, + 5462, 5277, 5276, 5759, 37391, 5758, 5757, 6228, 20622, 20621, + 6231, 6232, 6230, 29073, 6229, 20623, 38704, 12605, 21150, 12606, + 38700, 21149, 21638, 13220, 7064, 13219, 21819, 7451, 14424, 7743, + 40109, 15253, 8336, 583, 3325, 3387, 8857, 17724, 3388, 3389, + 17725, 17768, 17767, 3476, 3477, 17769, 3613, 9042, 9265, 9266, + 26932, 4434, 10074, 5280, 5279, 11224, 11223, 48681, 22113, 3306, + 3390, 3478, 27979, 5281, 8839, 26576, 8880, 3479, 17771, 8931, + 3615, 3614, 8930, 3785, 18022, 18652, 27211, 27213, 4838, 27535, + 27980, 10609, 6233, 12607, 6677, 21152, 21639, 13854, 22501, 23237, + 15583, 17680, 3391, 17726, 18023, 9267, 9609, 5284, 5282, 5283, + 3307, 26523, 3326, 17695, 3394, 17728, 3393, 3392, 3482, 3481, + 17869, 8881, 8932, 17870, 17872, 4065, 4062, 4064, 4063, 18302, + 4435, 18653, 27981, 5760, 33009, 3308, 17729, 3395, 17772, 3484, + 3483, 9043, 26740, 4066, 18577, 27985, 17681, 26524, 8858, 17773, + 3486, 3485, 3616, 3617, 9044, 3786, 18024, 3787, 18304, 4067, + 4068, 4069, 18305, 4436, 9610, 18654, 27986, 4839, 20624, 8840, + 26543, 3396, 17730, 26578, 26577, 17774, 8933, 17874, 9045, 9046, + 9268, 18306, 9269, 9612, 9611, 9614, 9613, 4437, 10610, 4841, + 10075, 4840, 19509, 27989, 11225, 5761, 20029, 11226, 20028, 20627, + 20626, 20625, 12608, 6678, 21154, 29077, 21155, 21640, 7065, 22502, + 15254, 17682, 17731, 26544, 8859, 17775, 3487, 26641, 17876, 26940, + 18308, 18309, 5285, 19510, 20030, 3309, 3327, 3398, 3397, 17733, + 3399, 17735, 26580, 17776, 17878, 26742, 4071, 18310, 4070, 4072, + 18659, 18658, 4438, 18657, 18656, 46147, 4842, 20628, 13855, 8016, + 3328, 3489, 3504, 3499, 26583, 3494, 3493, 3500, 3498, 3491, 3505, + 3492, 3488, 3503, 3502, 3501, 3490, 17782, 3497, 17778, 17779, + 3496, 17780, 3506, 3495, 26581, 17880, 17882, 3623, 26645, 3629, + 3625, 17884, 3631, 8934, 3628, 3618, 3621, 3624, 3620, 3627, 3630, + 3619, 3622, 3626, 3632, 17885, 17886, 17879, 9055, 9052, 18039, + 3800, 9053, 3788, 3790, 3814, 3809, 18042, 18047, 18038, 9060, + 9054, 3792, 3794, 9059, 3801, 9049, 3813, 3815, 3789, 3806, 18051, + 9047, 3812, 18040, 3797, 18044, 3807, 3808, 9048, 3805, 3803, + 18033, 3804, 3810, 9056, 3791, 18048, 3811, 9058, 3799, 3796, + 18036, 9051, 3795, 9061, 3798, 18045, 3802, 18041, 18037, 18030, + 3793, 9057, 18046, 18049, 9050, 18050, 26951, 26950, 18313, 9286, + 9285, 4090, 9288, 9290, 9279, 9282, 9289, 4091, 18319, 18323, + 9276, 9280, 18320, 26946, 9284, 9629, 4086, 9633, 4073, 9281, + 4074, 4087, 4080, 4076, 18316, 9277, 4079, 4084, 4093, 9278, 9271, + 4078, 9272, 9274, 26947, 4081, 18311, 4083, 9270, 9275, 18315, + 18324, 4092, 4088, 9283, 4094, 18318, 4085, 9273, 4082, 18314, + 18322, 4077, 4075, 9287, 4089, 18671, 18672, 9628, 9616, 9631, + 18666, 18668, 9618, 4445, 4459, 4441, 4458, 4450, 4455, 4439, + 9617, 9623, 4454, 9635, 4456, 18670, 4446, 18663, 18673, 9625, + 9622, 4444, 18660, 9615, 4457, 9630, 4449, 9632, 4460, 4440, 4451, + 4448, 9620, 4452, 9626, 9627, 4447, 4453, 4443, 18664, 18678, + 18676, 4442, 9619, 18662, 9624, 18667, 9634, 10095, 4855, 10077, + 27554, 10082, 4848, 4859, 10080, 4843, 4853, 4858, 10087, 27547, + 4854, 4857, 19074, 19082, 10090, 4849, 10081, 19071, 19075, 19083, + 10093, 10094, 19076, 4851, 10092, 4847, 4862, 27550, 10084, 19078, + 4845, 19077, 10097, 10085, 10089, 4850, 4861, 10086, 4856, 10091, + 10098, 10625, 19070, 10096, 4863, 4844, 10088, 10079, 19073, 4852, + 27549, 27555, 10078, 19081, 19086, 10083, 10076, 4860, 19520, + 10617, 19529, 5304, 10631, 5302, 5299, 10622, 5295, 10626, 5306, + 10616, 10621, 10620, 4846, 5301, 10629, 19527, 10632, 10613, 28004, + 5779, 19528, 10633, 5307, 27999, 5293, 5290, 10624, 5287, 28001, + 10630, 19516, 5294, 10634, 19513, 10614, 10628, 5297, 10615, 10618, + 10623, 19523, 19522, 5298, 5296, 5308, 19512, 20043, 19525, 27992, + 5303, 19519, 5291, 5443, 28007, 5292, 10619, 5305, 5300, 10627, + 5289, 19514, 5288, 10611, 10612, 11231, 20049, 5762, 5765, 11242, + 5785, 11245, 5763, 11238, 5769, 5775, 6050, 20038, 20045, 5773, + 11235, 5786, 5766, 5774, 11243, 11935, 11248, 11236, 28541, 11227, + 11240, 11234, 5772, 11246, 20035, 20031, 5768, 5788, 5781, 20040, + 5770, 5767, 20053, 5778, 20041, 11247, 11233, 11239, 11241, 11229, + 11244, 5764, 11228, 20055, 5771, 5787, 5783, 11230, 5777, 20048, + 5784, 5780, 5776, 20036, 11237, 47760, 5782, 11933, 11929, 20634, + 11944, 11922, 11931, 6247, 6248, 6240, 11940, 6250, 11927, 11926, + 11924, 11942, 6238, 11936, 11925, 6241, 11934, 6236, 11930, 11937, + 11939, 20631, 29088, 11943, 6245, 11923, 6239, 11928, 20032, 6234, + 48726, 6246, 11938, 6242, 6243, 6249, 6237, 188, 6235, 11932, + 20629, 6244, 11941, 6694, 6689, 21163, 12623, 12619, 21157, 12613, + 6683, 6679, 12622, 6680, 12616, 12618, 21158, 12621, 21171, 6685, + 21161, 6692, 6686, 29664, 21159, 12611, 6687, 6688, 12614, 6693, + 21169, 12612, 12617, 6684, 12610, 6690, 6682, 21168, 29652, 6681, + 12615, 12620, 21166, 6691, 21197, 12609, 21165, 7072, 13237, 21652, + 13234, 21643, 7066, 7078, 7079, 21648, 7069, 13232, 7071, 13224, + 7077, 21655, 13236, 7068, 13238, 7067, 30284, 13233, 13235, 7070, + 13231, 13225, 13222, 30281, 21649, 11232, 13228, 21642, 13221, + 13227, 13226, 21646, 13223, 21654, 7074, 21656, 21651, 21170, + 21647, 7073, 21644, 53082, 21650, 7075, 13229, 7452, 13230, 13864, + 22120, 13857, 22121, 7464, 13861, 7456, 7460, 13860, 22116, 7459, + 7455, 7458, 7453, 7463, 13862, 13858, 7462, 13856, 7461, 13863, + 13859, 7076, 30912, 7465, 13865, 7457, 7454, 22118, 22505, 14431, + 14433, 7745, 14434, 14432, 14430, 14429, 7747, 14428, 7748, 31479, + 22506, 22504, 31483, 14426, 14427, 7744, 7749, 7746, 14425, 22806, + 8017, 22805, 14891, 14889, 14894, 14892, 22803, 14890, 14893, + 22804, 22802, 22807, 8189, 15257, 15258, 8190, 32380, 15259, 15255, + 15260, 15256, 8018, 23042, 32728, 15584, 15586, 8339, 15585, 8338, + 8337, 23411, 8340, 15842, 15843, 33013, 8434, 8433, 8435, 15841, + 16017, 16016, 23531, 8516, 8518, 8517, 16018, 8573, 16281, 33405, + 33404, 8614, 23674, 16280, 16353, 8845, 17758, 26586, 3508, 3507, + 26584, 3635, 3634, 8936, 3633, 8935, 17889, 3818, 9064, 18059, + 9063, 18053, 3816, 3819, 18058, 18057, 9062, 18056, 3817, 18087, + 18054, 18055, 18331, 9291, 18328, 9292, 4095, 18327, 18330, 18326, + 4461, 18680, 10099, 10100, 4864, 4865, 19088, 10636, 5309, 5311, + 10635, 5310, 11249, 5789, 20057, 20056, 28553, 29095, 6251, 6252, + 11945, 20635, 6696, 21172, 6695, 13239, 13867, 13866, 23532, 16413, + 3329, 8860, 17736, 8882, 8883, 17785, 26587, 26588, 3638, 3642, + 8938, 26650, 3640, 3639, 8937, 3641, 3637, 17892, 17893, 3636, + 8939, 17890, 17891, 3829, 18064, 18077, 3826, 18063, 3822, 9065, + 18079, 18069, 18062, 9066, 18075, 3824, 18060, 9068, 3820, 9069, + 9067, 3823, 3825, 3828, 3827, 3821, 9070, 18065, 18080, 18081, + 18066, 18071, 18070, 18068, 4100, 9305, 18334, 4102, 18332, 4101, + 18335, 9306, 4099, 4098, 9296, 26956, 9295, 18337, 9293, 9298, + 9297, 9294, 9303, 9304, 9301, 9299, 4097, 18338, 26953, 26955, + 9302, 4103, 9307, 26952, 18339, 9300, 18333, 4462, 4096, 26961, + 4463, 9640, 18684, 18683, 9646, 18687, 18682, 18685, 4469, 9644, + 9650, 18692, 9641, 9645, 9647, 9649, 9643, 18691, 9642, 9637, + 9638, 4464, 18686, 4466, 4465, 9639, 9648, 18688, 18693, 18689, + 27229, 18681, 4468, 27227, 9636, 10110, 19091, 10109, 10114, 10105, + 19097, 10108, 10107, 19096, 10111, 19105, 10115, 4866, 4869, 19101, + 19102, 10106, 10112, 19100, 19089, 19104, 4868, 10101, 19092, + 4467, 10650, 10113, 19103, 10104, 27560, 4867, 10103, 19099, 10641, + 19535, 19538, 5312, 5316, 10657, 10639, 10653, 5317, 10655, 19539, + 10661, 19541, 10665, 19530, 28008, 10656, 10644, 10652, 19532, + 10666, 10664, 10654, 10649, 10642, 11257, 10640, 5321, 10647, + 5322, 5318, 10637, 10659, 10645, 19536, 19542, 10643, 10662, 5319, + 19543, 10668, 5313, 5315, 10651, 10646, 4870, 5314, 10648, 10663, + 10667, 10658, 10660, 10638, 28554, 20063, 11252, 20058, 11261, + 11260, 5797, 11253, 20060, 5798, 5796, 20069, 11255, 5793, 11259, + 20065, 11254, 11256, 11250, 5791, 28560, 11269, 11268, 11265, + 5790, 5794, 5795, 10102, 11262, 5792, 5320, 11264, 11251, 11267, + 11266, 20067, 11270, 20062, 11959, 20064, 11263, 29100, 28558, + 28562, 11258, 11951, 6262, 6265, 6260, 11950, 11954, 11949, 20640, + 6254, 6264, 11946, 6258, 11953, 20644, 6256, 6255, 11956, 6257, + 11958, 20639, 11955, 6253, 20647, 20645, 20641, 6263, 11960, 11948, + 11957, 20646, 29096, 11947, 20643, 20642, 6259, 20637, 6261, 11952, + 11961, 21184, 21179, 12631, 6697, 12637, 21183, 21177, 6702, 12633, + 12640, 12625, 6704, 6698, 12630, 7080, 12629, 12638, 6699, 21178, + 6703, 12628, 12634, 12639, 12624, 6701, 12632, 21175, 21186, 12636, + 12642, 12626, 12635, 21173, 6700, 12641, 21182, 21185, 21181, + 12627, 29666, 7084, 13241, 7082, 7081, 13243, 13248, 21657, 13244, + 21667, 13247, 7087, 21668, 7439, 7086, 21662, 13240, 13246, 21180, + 7085, 13245, 21664, 13242, 21660, 7083, 21666, 21663, 21658, 13872, + 22131, 13874, 13869, 7467, 13871, 22132, 7466, 13873, 22129, 22133, + 7469, 13875, 7468, 13868, 13870, 22130, 22508, 7753, 14437, 22509, + 7752, 14438, 7751, 14436, 7750, 14435, 8020, 8019, 15261, 15263, + 23044, 15262, 8191, 8192, 23043, 56530, 8193, 15587, 8341, 23413, + 16169, 16168, 8615, 3330, 3400, 17894, 3830, 18084, 18082, 18083, + 18342, 9651, 18698, 19544, 5799, 5800, 20071, 11962, 6705, 12643, + 13249, 22134, 17696, 8861, 17786, 17895, 9071, 18701, 18700, 17697, + 18085, 9308, 9652, 10116, 4871, 21187, 15264, 32385, 8436, 3331, + 3509, 8884, 17787, 3643, 3644, 26651, 4104, 26963, 19546, 5323, + 37440, 6707, 20648, 6708, 6706, 21670, 3332, 26548, 3401, 3403, + 3402, 8862, 3404, 3510, 8885, 17789, 3511, 17788, 26589, 17790, + 26652, 17898, 3645, 3646, 8940, 18088, 3831, 26761, 9072, 26968, + 4108, 9309, 26965, 4106, 4107, 4105, 10117, 18343, 18344, 4473, + 4472, 4474, 4471, 18703, 9653, 4109, 4470, 4872, 4873, 27565, + 4874, 19548, 10669, 19549, 19550, 28017, 5801, 11271, 5324, 20072, + 20073, 28570, 20649, 6266, 20650, 6710, 6709, 12644, 21189, 7088, + 7470, 30922, 14895, 16019, 16170, 3333, 3512, 17792, 3513, 8946, + 3648, 3651, 17902, 8944, 8942, 3650, 8945, 8947, 8941, 3653, 3652, + 3649, 3647, 8943, 17904, 18100, 3842, 26766, 18091, 3839, 9077, + 9080, 9079, 26768, 3833, 3841, 18090, 26769, 3838, 9076, 9074, + 3837, 18101, 18098, 18093, 3832, 3835, 18096, 9075, 9082, 9078, + 3836, 3840, 3843, 9073, 9081, 3834, 18362, 18348, 4114, 4122, + 18353, 9321, 9314, 4123, 9325, 9310, 9317, 18366, 18361, 4113, + 9311, 4111, 9318, 9322, 4110, 18358, 9323, 9316, 18352, 9319, + 18350, 4125, 4116, 9326, 9324, 18360, 4121, 4119, 9315, 4118, + 9313, 9312, 4117, 4115, 4124, 4120, 4112, 18711, 9320, 18367, + 4476, 18718, 4483, 9667, 4475, 9659, 9655, 18706, 9671, 9654, + 18717, 4478, 9664, 4481, 4484, 18719, 4479, 9668, 4482, 18708, + 4881, 9674, 9656, 18709, 18710, 9658, 9665, 9669, 9673, 9670, + 9663, 9666, 18716, 18714, 9660, 4486, 9662, 9661, 9672, 4477, + 9657, 4485, 18715, 4480, 18713, 4887, 10125, 19113, 4886, 18712, + 27573, 10123, 27571, 4875, 19128, 4880, 19123, 10122, 10119, 10124, + 4876, 10118, 19127, 4879, 4877, 19111, 10126, 4878, 4882, 19108, + 19118, 4883, 19121, 4885, 19131, 27566, 27570, 4884, 19109, 19553, + 19575, 10120, 10121, 19126, 46208, 19124, 10127, 10676, 5325, + 11285, 10675, 10694, 19559, 19555, 5331, 19568, 10692, 19570, + 5330, 5326, 10701, 10685, 10688, 19565, 5334, 10698, 10690, 5327, + 5335, 19561, 10695, 10693, 19566, 19578, 10678, 10699, 10687, + 10682, 19577, 10672, 10700, 10684, 10671, 19576, 5333, 10689, + 10702, 10686, 10674, 10679, 10670, 19558, 5332, 19579, 10683, + 10680, 5328, 10673, 19567, 10697, 5329, 19562, 10681, 10677, 19560, + 19571, 10696, 19569, 19574, 19572, 5802, 11278, 20106, 11275, + 11292, 11280, 11293, 20113, 5804, 20088, 20086, 20077, 11289, + 11286, 20080, 20108, 20103, 20078, 20085, 11287, 11290, 11294, + 20112, 10691, 11296, 11982, 20091, 5805, 11297, 11273, 11283, + 20087, 11288, 20081, 20083, 5803, 5806, 11295, 11298, 11277, 11274, + 20104, 20079, 11276, 20076, 20111, 11281, 11279, 5807, 20075, + 11291, 20110, 20109, 11282, 11284, 11272, 11970, 11968, 6275, + 6273, 11978, 11969, 11979, 11975, 11967, 11981, 11966, 11973, + 6272, 6271, 6270, 11971, 11976, 6267, 6274, 20656, 11964, 20655, + 11974, 11963, 11972, 6268, 11977, 11965, 6269, 11980, 20653, 20096, + 20659, 12648, 6715, 6714, 6716, 12660, 12650, 12656, 12645, 12659, + 12658, 12662, 12655, 6711, 12654, 6717, 21193, 12647, 6712, 21191, + 12661, 6713, 12649, 12652, 12657, 12651, 12646, 21196, 21200, + 12653, 13251, 7092, 13254, 13253, 13256, 13258, 21679, 7090, 21675, + 13252, 21671, 13250, 21681, 13259, 13257, 13255, 21673, 13261, + 21677, 13260, 7094, 7089, 21678, 7091, 7093, 21680, 21682, 13262, + 13882, 22137, 22140, 13881, 13880, 22138, 13883, 13876, 22136, + 13877, 13885, 13878, 22141, 7471, 13887, 22135, 13886, 13879, + 22143, 14442, 7756, 14440, 14445, 14444, 13884, 22513, 7755, 22511, + 14443, 14439, 14447, 14446, 7754, 22515, 14441, 22512, 7472, 22514, + 22516, 8021, 23046, 22812, 22809, 14896, 15265, 15266, 15267, + 8342, 32731, 23239, 8343, 23242, 15588, 23243, 15845, 15844, 23414, + 23533, 16020, 16021, 16171, 16282, 23676, 3334, 3335, 26525, 3336, + 3405, 3514, 8948, 3654, 3655, 3846, 3847, 3845, 3844, 4126, 18369, + 26979, 9327, 4128, 4127, 9328, 26980, 27243, 4487, 18720, 4888, + 10128, 10704, 28023, 5336, 5809, 10703, 5808, 20666, 6718, 20667, + 12663, 7473, 22144, 7757, 14448, 23049, 8344, 23244, 8519, 17698, + 8886, 17794, 3515, 8887, 3658, 17907, 3656, 3657, 3659, 26774, + 3849, 3848, 18105, 9083, 3850, 26982, 9084, 9329, 18373, 9330, + 18371, 4129, 4131, 4133, 4130, 4134, 4132, 18375, 18372, 18374, + 4491, 4488, 4490, 4492, 4489, 10129, 9675, 18723, 10131, 10130, + 4894, 27579, 4890, 27582, 46223, 4891, 4893, 4895, 4892, 19136, + 4897, 4896, 27581, 19135, 19134, 5341, 10706, 10705, 5340, 19584, + 5339, 5338, 5342, 5337, 19582, 11304, 11301, 5811, 11300, 11305, + 28579, 5813, 11303, 5810, 5812, 11302, 20115, 11983, 20669, 11984, + 11985, 20670, 20671, 20668, 29123, 6719, 6727, 12664, 6721, 6725, + 12665, 6726, 6722, 6723, 6720, 6724, 7097, 11299, 7098, 7096, + 30303, 7095, 13888, 7474, 14449, 14450, 23050, 32388, 8194, 8345, + 23415, 3337, 17795, 3660, 18109, 18107, 18108, 18377, 4493, 10132, + 4898, 19137, 19138, 5345, 5344, 5343, 5814, 5815, 11306, 6728, + 7475, 3338, 8863, 3406, 8888, 26590, 17796, 8949, 3661, 26661, + 17909, 18378, 4135, 18725, 20119, 11986, 20673, 3339, 26550, 3407, + 8950, 9085, 26986, 9086, 18110, 3851, 18726, 11307, 5816, 11987, + 30308, 22517, 7758, 3340, 3360, 3408, 8889, 3516, 17911, 3855, + 3854, 3852, 3853, 9331, 4137, 4138, 9332, 4136, 18381, 18382, + 4497, 9676, 4496, 4494, 4495, 4901, 4899, 19139, 19140, 10134, + 4900, 10133, 4889, 10707, 28032, 19586, 5347, 5348, 20121, 20120, + 5346, 19587, 6729, 12666, 7099, 7100, 13263, 7759, 14897, 14898, + 23053, 8437, 16283, 8846, 3409, 26664, 3341, 8891, 8890, 26593, + 17912, 3662, 8952, 8953, 8951, 26665, 8954, 17917, 18112, 18117, + 9094, 26785, 9089, 9091, 9093, 9090, 3859, 9087, 18113, 9088, + 3856, 3857, 9092, 9095, 3858, 9096, 18114, 9346, 18390, 9340, + 9335, 4140, 9343, 9341, 9334, 9347, 9350, 9345, 9338, 4142, 9344, + 4143, 9339, 9342, 9333, 9337, 9349, 4144, 26992, 4145, 18391, + 9336, 9348, 4139, 4141, 18389, 18392, 18384, 26997, 18385, 9693, + 9686, 9692, 9685, 9687, 9681, 9679, 18736, 9694, 9691, 9677, 18732, + 4499, 9689, 9690, 9688, 9680, 9678, 4498, 9684, 9682, 18733, 18739, + 9683, 9695, 18735, 18738, 18740, 18734, 4906, 19148, 4905, 19144, + 10135, 4902, 10137, 19149, 4907, 10138, 27605, 19146, 4910, 19147, + 4908, 10139, 9696, 10141, 19143, 4904, 27601, 4903, 27606, 10136, + 10140, 4909, 5350, 5349, 19594, 19591, 19590, 10709, 10713, 10715, + 5351, 10718, 19600, 5355, 10720, 19601, 5357, 19598, 5353, 5361, + 19604, 5358, 10711, 5352, 20126, 10710, 10708, 10722, 10712, 19589, + 5354, 10721, 5359, 10717, 10716, 5360, 10714, 5356, 19597, 46991, + 19593, 10723, 19603, 10719, 11322, 11329, 11318, 5819, 11314, + 11330, 11308, 11327, 11325, 11319, 20137, 11328, 11321, 20123, + 11313, 11331, 11311, 11324, 11309, 20122, 11332, 20138, 5820, + 20125, 11326, 11990, 11312, 5817, 20129, 11316, 20135, 5818, 11315, + 11320, 20134, 28596, 11317, 28590, 20132, 11323, 20128, 11994, + 29134, 20680, 29136, 11997, 11989, 20677, 11991, 20675, 11996, + 11995, 6276, 29130, 11310, 11993, 20674, 20678, 6277, 29129, 11988, + 11992, 29137, 29133, 12673, 21209, 12680, 12671, 21201, 12678, + 12669, 12677, 12681, 12668, 12672, 12667, 21203, 6730, 29715, + 12670, 6731, 12676, 12675, 12674, 21206, 21207, 12679, 21688, + 21689, 21686, 13267, 13269, 7102, 13270, 21694, 13265, 21690, + 13264, 13274, 21692, 13272, 7101, 13275, 13266, 13271, 13273, + 13268, 21693, 21691, 22145, 13892, 13897, 13891, 13896, 22148, + 13889, 13899, 13895, 13900, 13894, 13890, 13898, 22147, 13901, + 13893, 14451, 7763, 22520, 7761, 22522, 7760, 7762, 22518, 14899, + 22813, 15163, 15268, 23054, 15589, 15590, 23246, 8346, 23245, + 15846, 23247, 8438, 33020, 15847, 23418, 16023, 8521, 23534, 8520, + 16022, 8574, 23609, 16172, 33535, 33407, 17699, 26519, 3342, 3663, + 8955, 9097, 4001, 5362, 19606, 21695, 3343, 3519, 3518, 3517, + 26668, 3860, 4911, 11998, 3344, 3345, 3346, 3410, 18118, 18393, + 4500, 27609, 9697, 18742, 18741, 5821, 3347, 8864, 17738, 26551, + 3520, 3521, 8892, 3664, 35497, 17919, 18119, 9098, 18122, 3861, + 26792, 9099, 4151, 18395, 18394, 9352, 4149, 4148, 9351, 4146, + 9353, 4147, 4150, 4501, 18743, 4503, 9701, 9698, 9699, 9700, 9702, + 4502, 10143, 10142, 19151, 4913, 19154, 4912, 19153, 19155, 19152, + 19610, 5365, 10725, 19608, 5364, 5366, 5363, 19607, 19609, 5823, + 10724, 37503, 5824, 11334, 20016, 5825, 11333, 5822, 20141, 20142, + 20144, 12001, 12003, 6278, 12002, 12000, 11999, 29149, 29724, + 21210, 12684, 6736, 6734, 29719, 6735, 12682, 12683, 21696, 6732, + 13279, 13277, 21699, 7104, 13278, 7105, 7103, 6733, 13904, 13902, + 13903, 13276, 14453, 7764, 14452, 14900, 14901, 13905, 15269, + 3348, 3522, 3666, 8956, 3665, 18396, 4152, 6279, 17700, 3411, + 3523, 4504, 5826, 17701, 8893, 17804, 8894, 17805, 8957, 3863, + 9103, 9101, 3864, 9100, 9102, 9104, 26797, 3862, 18125, 18124, + 4156, 4157, 4154, 18398, 18400, 4153, 9706, 4155, 18401, 4505, + 18745, 9705, 9707, 9704, 9708, 4506, 4916, 10144, 19157, 10146, + 4914, 10147, 4915, 10145, 19156, 9703, 10726, 10729, 10730, 10727, + 5370, 5369, 5367, 5368, 10728, 19616, 19615, 20146, 5371, 20147, + 20145, 5828, 5829, 47882, 5830, 12004, 12006, 12008, 6281, 6280, + 5827, 12007, 12005, 12688, 21214, 21213, 12686, 12692, 6737, 12693, + 12690, 6738, 12687, 12685, 12691, 7107, 13281, 12689, 7109, 13282, + 7108, 7111, 13283, 7106, 7110, 13910, 13908, 13907, 13909, 13906, + 22149, 31960, 8196, 15591, 15592, 23248, 15848, 16024, 8649, 17702, + 17924, 4158, 3865, 18402, 18404, 4507, 18749, 18748, 19159, 3349, + 3412, 26552, 3524, 8958, 18126, 3866, 9105, 18406, 9709, 4508, + 6739, 3350, 17739, 17806, 17925, 3667, 20149, 6282, 3351, 3413, + 3414, 3526, 3525, 26676, 8959, 3668, 26677, 9106, 18128, 3867, + 18407, 9355, 9356, 9357, 18409, 4159, 4160, 9354, 4161, 27271, + 27621, 4509, 9710, 18750, 10149, 4917, 19160, 10148, 19617, 5372, + 10731, 5373, 10732, 19618, 20154, 20152, 5831, 28612, 20151, 29155, + 12009, 20681, 12695, 12694, 6740, 30329, 7112, 13284, 7476, 13911, + 7765, 22814, 8522, 16174, 17703, 17704, 17807, 17908, 9358, 18410, + 9711, 5374, 11335, 6283, 20682, 22151, 22815, 8022, 23755, 17705, + 3869, 18129, 3868, 4510, 18753, 10150, 5376, 5648, 5377, 5375, + 5832, 20683, 12696, 6741, 7113, 23536, 8847, 8960, 26678, 9108, + 3870, 9107, 3871, 26801, 4165, 9361, 9360, 4164, 4162, 4163, 9359, + 18415, 18414, 4512, 9712, 4515, 4511, 4517, 4513, 4514, 4516, + 27276, 19161, 19163, 4920, 4919, 4918, 19162, 10734, 5378, 5381, + 5379, 10733, 5384, 28062, 5380, 10735, 5383, 5382, 28061, 28066, + 28617, 11337, 11336, 20158, 5835, 5833, 5834, 11338, 6284, 12011, + 6285, 12010, 29159, 29734, 13285, 21216, 21217, 7115, 12697, 7114, + 21701, 6742, 13913, 13912, 7766, 14454, 15270, 15593, 15594, 23420, + 3415, 26529, 3527, 17810, 26682, 8895, 17809, 35507, 3873, 3875, + 18135, 8963, 9111, 9110, 9109, 17929, 8962, 8961, 3670, 3874, + 3872, 3669, 17930, 17932, 18134, 4166, 9362, 18138, 4167, 9116, + 27025, 9118, 9117, 9363, 18133, 18131, 9113, 18423, 3879, 3877, + 18139, 9112, 9114, 9120, 18143, 3876, 18142, 9115, 9124, 4169, + 18140, 9121, 3878, 18144, 9119, 9122, 18137, 4168, 18132, 4170, + 9123, 18417, 18425, 9383, 9370, 9368, 9382, 9377, 4522, 4171, + 9378, 9381, 4518, 9380, 4172, 4177, 4175, 9371, 27281, 9366, 9373, + 4182, 9384, 4519, 9374, 27024, 4520, 4178, 9376, 18763, 9727, + 4521, 9365, 4179, 4523, 4180, 4176, 4181, 9375, 9364, 9379, 4173, + 18416, 18764, 9367, 9372, 9369, 4174, 18419, 9713, 27296, 9714, + 18424, 9724, 10154, 9725, 4529, 9728, 9718, 4528, 9720, 27290, + 9721, 18769, 19170, 9723, 4524, 18759, 19164, 4924, 18760, 18766, + 9719, 9715, 4925, 19175, 27289, 9729, 4921, 10152, 9722, 18757, + 10151, 9717, 9726, 18768, 18770, 4527, 4922, 4533, 4923, 9730, + 10153, 4526, 4927, 4532, 4531, 4530, 4926, 9731, 4928, 4525, 27302, + 9716, 19171, 19169, 19172, 18765, 19167, 5385, 10157, 10159, 27640, + 10161, 4929, 4935, 10738, 10165, 10156, 5387, 10736, 19177, 4934, + 4932, 10167, 27648, 10737, 27647, 10158, 19180, 4933, 10162, 4936, + 10164, 19623, 19165, 4931, 10163, 10166, 10160, 19182, 4930, 5388, + 19632, 10155, 5386, 19633, 28086, 19178, 19183, 5389, 19176, 19630, + 19181, 10740, 10749, 5838, 20167, 5391, 5396, 5839, 10751, 5403, + 11340, 10741, 5395, 5398, 5393, 10739, 10753, 10756, 11355, 28083, + 10754, 11344, 5394, 5401, 5405, 10748, 11339, 10752, 5390, 11341, + 10755, 11343, 10744, 19625, 5836, 20169, 10742, 10743, 5400, 20168, + 19629, 5399, 10746, 5404, 10750, 5397, 10747, 19640, 5402, 5840, + 5837, 11342, 20171, 10745, 20172, 5392, 19637, 19639, 20173, 20160, + 19635, 5845, 5849, 11346, 6290, 5847, 11350, 5851, 12012, 11352, + 6292, 5843, 5846, 11353, 20177, 11354, 11360, 5853, 6293, 29168, + 11356, 11361, 11349, 6303, 20162, 6294, 5852, 11347, 11362, 20164, + 6302, 5850, 6287, 11359, 20176, 5854, 11351, 11345, 5844, 11348, + 38179, 11357, 20690, 6286, 6291, 5841, 11358, 20180, 6289, 20181, + 20182, 20163, 5842, 6301, 12699, 12023, 20688, 12015, 12698, 29164, + 12019, 12021, 20686, 20691, 12018, 21228, 6300, 29163, 12017, + 6304, 21227, 48853, 20687, 12714, 21225, 20693, 6299, 6744, 12024, + 12700, 21226, 20689, 6297, 12016, 12020, 6743, 6288, 12013, 12014, + 6745, 6296, 6298, 6295, 12022, 12704, 12705, 12710, 7120, 12717, + 21702, 6751, 21713, 6750, 12712, 21703, 7119, 12701, 6749, 21230, + 12716, 6747, 6748, 21711, 12713, 13302, 7117, 5848, 21231, 12715, + 7124, 12707, 30346, 7118, 21223, 7123, 12702, 12706, 12703, 12709, + 6752, 7116, 6746, 21714, 13288, 12711, 21221, 7122, 21232, 7125, + 53190, 12708, 21224, 7121, 13287, 39489, 21716, 21233, 21717, + 21706, 13292, 7480, 13286, 13925, 13301, 7129, 21709, 7127, 7478, + 13298, 13294, 7133, 21705, 13916, 22161, 21721, 22160, 7131, 13293, + 21722, 13914, 21718, 13297, 30952, 13300, 13291, 21708, 7132, + 30948, 21704, 7126, 13915, 7479, 13299, 7128, 7130, 13296, 7134, + 13295, 13290, 13289, 7477, 13303, 13918, 14456, 7482, 22154, 13924, + 22156, 13922, 22163, 14457, 22157, 7483, 13923, 22159, 13920, + 7768, 14455, 22165, 13917, 13919, 7769, 7485, 7767, 7484, 7771, + 13921, 7481, 22155, 22158, 22164, 31970, 14910, 31508, 14902, + 22530, 22528, 22525, 22527, 22526, 14463, 14903, 14459, 31507, + 22524, 8023, 14461, 14460, 7770, 14458, 14462, 14911, 14907, 14909, + 32399, 14904, 14905, 32400, 14908, 14906, 8197, 22816, 8200, 8199, + 8198, 8347, 15595, 8348, 15271, 8439, 15849, 8440, 8523, 8575, + 16175, 23537, 16176, 16177, 23717, 16459, 3416, 8896, 3528, 3672, + 3673, 3671, 17934, 3674, 3881, 3880, 18146, 9385, 4184, 4183, + 18772, 10168, 5406, 5407, 28089, 28091, 20183, 5855, 12025, 6305, + 6306, 12027, 12029, 12028, 29174, 12719, 21235, 12718, 6753, 12720, + 21234, 13304, 7135, 21725, 7486, 22166, 7772, 8024, 7773, 23539, + 3417, 17740, 17741, 17811, 9125, 18149, 18150, 9386, 4186, 4185, + 4187, 4534, 9732, 9733, 19184, 10169, 4937, 5408, 5856, 11363, + 3418, 26530, 3352, 3419, 17813, 8897, 3532, 3531, 3529, 3530, + 17938, 3677, 8970, 8972, 3676, 8964, 17935, 8965, 17936, 8971, + 8967, 8969, 3675, 8966, 8973, 8968, 17937, 3888, 3897, 3895, 9135, + 9132, 9140, 3893, 9141, 18166, 3886, 9138, 18155, 3892, 9134, + 9133, 3890, 9139, 3891, 4188, 3885, 9136, 18151, 9126, 3882, 18164, + 3901, 9131, 9137, 3887, 3889, 18156, 9127, 18163, 9128, 9129, + 26814, 3900, 3894, 3899, 9130, 3898, 3884, 3883, 3896, 18162, + 26817, 18160, 18161, 18165, 18158, 18159, 18440, 18433, 4202, + 9398, 9391, 4197, 4216, 9387, 9394, 9396, 9399, 4211, 18429, 9395, + 9388, 4209, 9392, 18431, 9400, 4194, 18428, 9397, 4204, 4203, + 9390, 4192, 18443, 18441, 4193, 4191, 18442, 4215, 4207, 4201, + 4189, 9393, 4200, 4190, 4208, 4217, 9734, 4205, 9389, 4195, 4198, + 4199, 18437, 4213, 4214, 4212, 4206, 4210, 4196, 4535, 18439, + 18446, 18444, 18445, 18438, 18432, 18782, 9740, 4547, 4539, 4541, + 4546, 9752, 4544, 10170, 4938, 4549, 9737, 9745, 4545, 9744, 9741, + 9749, 9751, 4538, 4542, 4548, 4940, 9746, 4540, 4551, 9739, 18784, + 18785, 36132, 4543, 4939, 4537, 27316, 9736, 9743, 9735, 9738, + 9742, 10171, 4550, 27308, 9747, 9748, 9750, 4536, 18781, 19193, + 19194, 18780, 18783, 27318, 4954, 10183, 4952, 4953, 10173, 10189, + 19187, 4943, 19190, 19196, 10757, 10191, 10185, 19199, 10176, + 19198, 10194, 10179, 4949, 10780, 10182, 4951, 4942, 19203, 10196, + 10184, 4945, 10177, 10174, 10175, 4946, 10190, 10197, 4948, 10181, + 10180, 4956, 4955, 4941, 4947, 4950, 10193, 19189, 19200, 10187, + 4944, 10172, 10195, 10186, 10188, 10192, 19191, 19202, 19197, + 10758, 19662, 5416, 5436, 5435, 19652, 5424, 19654, 10776, 10772, + 10769, 10787, 5419, 5411, 19651, 19663, 10774, 5872, 5415, 10782, + 19647, 5437, 5434, 10778, 10761, 19643, 19656, 5433, 10784, 10760, + 5422, 5426, 10783, 19648, 10770, 5427, 5421, 10759, 19644, 5858, + 10786, 10768, 5432, 10771, 10785, 5431, 19649, 11364, 28098, 5412, + 10766, 5417, 5428, 28099, 5423, 10775, 10765, 10763, 10781, 5409, + 5429, 5413, 5857, 10779, 5414, 28108, 5410, 5425, 5420, 5418, + 10767, 5430, 10764, 10777, 10773, 11366, 11365, 19658, 19659, + 10762, 11382, 20196, 5860, 20195, 11388, 11371, 11385, 12030, + 5863, 11389, 11392, 5862, 11374, 11391, 11390, 5864, 11367, 5859, + 5867, 20198, 5865, 11387, 28656, 11377, 5869, 11394, 11386, 11395, + 5877, 5875, 11384, 11383, 20186, 11381, 11375, 5868, 20185, 5866, + 10178, 11368, 20187, 12060, 11369, 5861, 5874, 12032, 28639, 5870, + 5871, 11370, 11393, 12031, 11378, 11373, 5873, 11379, 11376, 20197, + 20192, 5878, 28654, 20194, 6321, 20720, 20697, 12035, 12054, 12059, + 12047, 6317, 12064, 6314, 12033, 20705, 12034, 6307, 6316, 12041, + 6319, 6320, 12042, 20703, 12055, 12061, 6315, 20709, 6309, 12040, + 12036, 12063, 12045, 12046, 12037, 12057, 12048, 12058, 12050, + 20708, 6310, 12721, 6313, 6311, 12062, 12053, 12049, 20701, 20698, + 12038, 6763, 12052, 6318, 12044, 20699, 12043, 20719, 21248, 20713, + 6312, 6308, 12742, 12056, 12051, 12039, 20715, 20716, 12737, 21237, + 12722, 12733, 21251, 12740, 6761, 5876, 12738, 6756, 21243, 21247, + 21239, 6755, 12745, 29764, 12723, 12736, 12724, 12735, 6759, 12739, + 11380, 21244, 29765, 21253, 12746, 12731, 6762, 13318, 7136, 21246, + 12744, 12743, 6764, 13305, 7137, 13306, 21245, 12727, 12728, 12725, + 12730, 12726, 12747, 6758, 7138, 6760, 6765, 21240, 12729, 21252, + 12741, 21726, 21249, 12734, 21734, 13309, 21737, 6754, 7141, 13932, + 13314, 13313, 13315, 21729, 21728, 13312, 7142, 21740, 7148, 7145, + 21730, 7146, 13307, 13310, 13320, 7154, 7152, 21727, 13311, 11372, + 7139, 13317, 13308, 21743, 7155, 13316, 6757, 7144, 12732, 21744, + 21733, 7147, 21742, 7151, 7153, 7150, 7149, 21739, 7143, 13319, + 7140, 7156, 21738, 21736, 7490, 7491, 13931, 7500, 7497, 22169, + 7488, 7495, 13933, 7493, 7487, 21731, 7494, 22176, 13930, 7775, + 7489, 40199, 7496, 7774, 13929, 13928, 22175, 7498, 22168, 7499, + 22178, 13927, 13926, 7776, 13936, 7492, 13934, 22174, 22533, 7777, + 22536, 7782, 14466, 14468, 22822, 7779, 22824, 14469, 14465, 22823, + 14467, 7780, 7783, 22538, 14464, 7778, 7781, 8026, 13935, 8025, + 55901, 22821, 8031, 14915, 22827, 8029, 8030, 14918, 14914, 8027, + 14912, 8201, 14916, 31981, 14917, 14913, 22825, 8028, 15272, 23056, + 15275, 23057, 23055, 15276, 15274, 15277, 8202, 15273, 23422, + 15599, 8350, 15598, 15597, 15596, 8349, 8351, 15850, 8442, 8441, + 23541, 23542, 16026, 16025, 16028, 8576, 8524, 16179, 16027, 23540, + 23611, 16178, 8578, 8577, 8616, 16284, 16354, 3420, 44443, 18787, + 11396, 13937, 17742, 17743, 3678, 8974, 3904, 3902, 26820, 3903, + 26819, 9401, 4218, 4552, 18789, 9753, 18791, 9754, 18788, 4553, + 10199, 27670, 4957, 4958, 10198, 19204, 27671, 19668, 19667, 5444, + 28116, 5440, 28120, 10788, 5447, 5446, 5439, 5442, 5445, 5441, + 19665, 11400, 5438, 5879, 20199, 20200, 20201, 5881, 5882, 11399, + 11402, 5880, 11397, 11401, 11398, 20722, 6322, 20725, 29200, 12065, + 20724, 21259, 6766, 12748, 7501, 7157, 13321, 7158, 7159, 13323, + 13322, 13324, 13939, 13938, 14471, 14470, 7784, 7785, 15278, 23250, + 3421, 18103, 18448, 27674, 19207, 11403, 19669, 19670, 5884, 5883, + 12066, 14919, 8443, 16180, 3422, 26822, 4959, 19209, 5449, 5448, + 11404, 11405, 6323, 12749, 6767, 13940, 31520, 3423, 3533, 18450, + 4219, 9402, 9755, 4554, 5450, 19671, 11406, 5885, 6324, 29206, + 13325, 13326, 30971, 22540, 14472, 8032, 16355, 3424, 18451, 9403, + 4220, 4555, 18792, 9756, 4960, 10203, 10201, 10202, 4961, 10200, + 19673, 28125, 19676, 19674, 5452, 5453, 10789, 5454, 5451, 11407, + 20204, 11408, 12067, 29207, 6769, 6768, 30972, 14473, 14920, 23060, + 15280, 15279, 15600, 17744, 8865, 4556, 19678, 20727, 3425, 3534, + 17814, 3680, 3679, 17942, 17941, 3681, 3682, 8976, 8975, 9142, + 3905, 9145, 9144, 9143, 9146, 18170, 27043, 4221, 9409, 9405, + 9414, 18458, 18453, 4228, 18457, 4226, 9410, 9406, 9413, 4225, + 4232, 9408, 9404, 4231, 9411, 4224, 9412, 4227, 4229, 9416, 9415, + 9407, 4223, 4222, 4230, 27042, 18455, 18456, 18799, 18795, 9761, + 9767, 18802, 4562, 4559, 9758, 9763, 18797, 4565, 4557, 9762, + 4560, 4563, 18794, 27330, 9765, 18798, 4558, 9770, 4561, 18800, + 4564, 9759, 9764, 9768, 9760, 9757, 18803, 18804, 9769, 9766, + 18801, 18728, 19213, 4969, 4962, 4965, 19219, 4968, 19211, 10206, + 19216, 4963, 10204, 19215, 4967, 19220, 19212, 4964, 19210, 10207, + 4966, 19679, 28130, 10793, 5456, 10792, 10794, 5455, 5460, 10205, + 19218, 10791, 10795, 19681, 5457, 10790, 5459, 19682, 5458, 20215, + 11415, 20208, 11410, 20214, 5886, 5890, 5887, 11413, 11416, 20212, + 5888, 28673, 5889, 5894, 12076, 11414, 5892, 11411, 11409, 20207, + 5893, 20209, 11412, 20213, 6330, 29212, 12068, 6327, 6328, 6326, + 12073, 12072, 12069, 6332, 20738, 20733, 12071, 5891, 20736, 20728, + 12075, 12070, 6329, 6325, 6331, 12074, 21263, 29778, 21264, 6772, + 29782, 12752, 12751, 12750, 6770, 29780, 21268, 21262, 21266, + 6771, 13329, 13332, 7161, 21749, 21751, 7160, 13333, 13328, 7163, + 13330, 21746, 7162, 13327, 21745, 13331, 7507, 7504, 13949, 13948, + 21748, 13947, 13942, 22182, 13943, 22186, 30973, 22179, 7505, + 22183, 7502, 7506, 13941, 7503, 13944, 13945, 13950, 22185, 22546, + 13946, 22544, 22545, 14474, 31522, 22541, 22542, 7787, 22547, + 14923, 7786, 14921, 14922, 8033, 8204, 15281, 23064, 8203, 23063, + 15602, 15603, 23251, 8352, 23252, 15601, 8444, 33413, 16181, 8579, + 16285, 16286, 23718, 3426, 26599, 3683, 3684, 3906, 18174, 9417, + 4566, 4970, 5461, 5286, 5895, 5896, 5751, 11417, 6333, 12754, + 12753, 22187, 57754, 3427, 3685, 9418, 4234, 18460, 4233, 18806, + 9771, 9772, 10208, 10209, 4971, 4972, 19685, 4973, 10796, 19684, + 19683, 5463, 28678, 5898, 20218, 5897, 12077, 12346, 12755, 13951, + 22189, 8034, 8353, 3428, 3537, 3538, 3536, 3539, 3535, 17815, + 3688, 17946, 8984, 3687, 3689, 17947, 17944, 8979, 8978, 8981, + 8980, 8983, 3686, 8977, 8982, 18181, 9147, 3916, 9148, 9152, 3915, + 18182, 9156, 9151, 9154, 3908, 3909, 3910, 3911, 18178, 3918, + 18177, 9150, 3913, 3919, 18180, 9149, 9155, 18175, 3912, 9153, + 3914, 3907, 3917, 18183, 26827, 4255, 18462, 9420, 4235, 27050, + 4245, 4246, 4238, 4256, 4240, 9428, 4251, 9423, 4241, 9438, 9439, + 9431, 9424, 4254, 9436, 4249, 4247, 18473, 9437, 18464, 9435, + 9427, 9419, 9426, 4242, 27046, 4248, 18465, 4236, 9430, 9429, + 9421, 18470, 4250, 9433, 9422, 4253, 9440, 4237, 18463, 4244, + 9425, 9434, 4252, 27048, 4239, 4243, 27051, 9432, 18469, 18467, + 9804, 4574, 4587, 18821, 9799, 9789, 4580, 9787, 4573, 9782, 4583, + 9795, 9776, 9778, 18813, 27692, 27337, 18815, 9781, 9773, 9794, + 9810, 4578, 9783, 9801, 18812, 9775, 9808, 9809, 9812, 9803, 9788, + 9796, 4584, 4571, 4579, 4591, 4568, 4570, 18816, 18810, 18825, + 9780, 4588, 4581, 9806, 9777, 4590, 4585, 9786, 27336, 27681, + 4589, 9793, 9785, 4582, 9805, 9797, 18809, 4576, 9811, 9784, 4572, + 9802, 9792, 4577, 9798, 4569, 9774, 4586, 4988, 4575, 9791, 9790, + 9779, 18472, 9807, 18819, 9800, 18817, 4567, 18824, 18822, 45765, + 18823, 10229, 4995, 10230, 19236, 10218, 4984, 4996, 19230, 10211, + 19226, 10220, 10228, 19234, 10210, 10237, 4974, 19237, 19243, + 19223, 10236, 10231, 19238, 10232, 4982, 4993, 10222, 19229, 10223, + 10233, 10224, 19242, 10219, 10213, 10214, 10227, 10221, 19227, + 19222, 4975, 4979, 10235, 10215, 4991, 4987, 19233, 27688, 4990, + 4997, 4980, 4992, 10226, 4994, 4977, 19232, 4976, 10212, 27682, + 10216, 4985, 10234, 10225, 10217, 4989, 4986, 18814, 4978, 4981, + 19241, 19231, 19240, 19239, 10817, 19698, 10801, 10802, 10806, + 19709, 10821, 10818, 19691, 10811, 10810, 5470, 10814, 10829, + 10797, 19704, 10830, 10816, 10834, 10822, 5469, 10820, 5464, 5485, + 5475, 19700, 5479, 5478, 10798, 28136, 10827, 10833, 10825, 10832, + 19694, 10813, 10799, 10831, 10815, 5467, 5480, 19703, 10824, 5473, + 19690, 19705, 19693, 10823, 10800, 5481, 19688, 5483, 10826, 5484, + 5466, 10807, 10828, 19697, 19545, 5472, 5482, 10809, 10819, 10804, + 10808, 5477, 10803, 5465, 5474, 5471, 10812, 4983, 11440, 5468, + 19689, 19695, 19707, 19708, 19699, 20246, 5476, 20242, 11443, + 11465, 11454, 5918, 20233, 5913, 11437, 5914, 11453, 20239, 11446, + 11459, 5910, 11419, 11461, 5900, 11427, 5903, 5902, 28687, 5919, + 19696, 11421, 11455, 11456, 5905, 5901, 11435, 20238, 5912, 11430, + 20227, 11457, 5908, 11449, 11462, 11424, 11429, 11423, 20219, + 5907, 11442, 12099, 11425, 5911, 11434, 11458, 5906, 11431, 11428, + 11445, 5909, 5899, 5921, 11448, 11447, 20226, 20243, 20234, 20236, + 20229, 20224, 11420, 5904, 11460, 11436, 11438, 20232, 11451, + 11450, 11418, 5915, 5917, 11426, 11433, 11441, 5916, 11432, 11444, + 11463, 11452, 20237, 20245, 20228, 11464, 11422, 20241, 12119, + 6341, 20748, 12117, 12096, 12101, 12094, 20766, 12113, 12080, + 12087, 29220, 12111, 12121, 12097, 20751, 12084, 12103, 12108, + 12088, 20754, 12105, 12085, 20740, 20764, 12092, 12093, 6343, + 12112, 12110, 20762, 12081, 12115, 20763, 12116, 12118, 6347, + 6339, 20758, 10805, 12089, 12107, 12090, 6336, 6352, 12114, 6350, + 6346, 12079, 6338, 20768, 12082, 6351, 20767, 12098, 12078, 20765, + 6344, 12102, 12086, 6345, 12095, 6335, 5920, 12104, 11439, 12083, + 29215, 20756, 12109, 6340, 12106, 6337, 12100, 6348, 12091, 12120, + 20753, 20770, 6342, 12231, 20761, 6349, 12769, 12767, 21269, 12789, + 12765, 21272, 12783, 6334, 6775, 12761, 12788, 21292, 12766, 12780, + 6780, 6773, 21289, 12786, 21281, 12759, 12785, 21282, 6791, 12776, + 12792, 6789, 12768, 6774, 12770, 12784, 6783, 12763, 6787, 6777, + 12772, 12762, 12756, 21273, 12782, 6784, 12791, 12757, 6781, 29790, + 12778, 29792, 6782, 12764, 12775, 12771, 12773, 21278, 6776, 12790, + 6790, 12774, 21270, 12793, 29804, 21271, 12758, 12779, 6779, 6788, + 6786, 12760, 12781, 6785, 21280, 21283, 6778, 12777, 21288, 21279, + 29805, 21765, 12787, 21287, 13345, 21277, 13341, 13337, 13357, + 13354, 7166, 21781, 21777, 13361, 13344, 7177, 13351, 21760, 21762, + 13340, 13350, 7174, 13370, 30390, 13367, 13353, 13338, 21776, + 21768, 13358, 13360, 7170, 13348, 13343, 13334, 7167, 7175, 30401, + 13363, 7176, 13335, 13369, 13356, 13362, 7173, 21758, 21761, 13359, + 21752, 13366, 21772, 7178, 21767, 7172, 13352, 13339, 13371, 13336, + 13364, 7169, 21755, 13346, 21754, 13347, 7168, 7165, 13342, 7171, + 21763, 7164, 21779, 13365, 13368, 13349, 13964, 21775, 21770, + 21778, 13956, 22195, 13952, 7520, 22211, 22207, 7509, 7514, 7510, + 13966, 13977, 7508, 13958, 13967, 13355, 13968, 22191, 22194, + 7515, 22215, 13983, 7519, 7522, 13954, 22210, 7518, 22200, 13981, + 13982, 13972, 13971, 13963, 22192, 22213, 13973, 13980, 13979, + 22198, 7513, 7511, 13965, 13962, 22219, 13959, 13978, 7521, 13976, + 7517, 7516, 22190, 13970, 30404, 13953, 13955, 13957, 13975, 13969, + 7512, 22197, 13960, 22201, 13974, 22216, 22209, 13961, 22550, + 7795, 14492, 7788, 14477, 22556, 14488, 7790, 14495, 22560, 14484, + 22557, 14479, 22551, 31526, 14496, 14475, 14486, 22566, 7797, + 14491, 14497, 14485, 7789, 14487, 14476, 7796, 22562, 22555, 14494, + 14481, 7792, 22563, 14483, 14480, 7798, 14482, 7791, 7794, 14490, + 14478, 14493, 22553, 14489, 22568, 22831, 8036, 14934, 8041, 8042, + 22834, 22842, 22833, 8035, 14933, 22835, 14930, 14931, 8039, 14925, + 14929, 8038, 22841, 14926, 22836, 22844, 22840, 22837, 8040, 8037, + 22843, 14924, 14928, 14932, 22838, 15287, 15284, 15293, 23065, + 15292, 15290, 15285, 23076, 8208, 23066, 23075, 32416, 23068, + 23074, 15286, 8207, 7793, 15289, 8206, 15294, 15288, 15283, 14927, + 23069, 23067, 8205, 15282, 15607, 23258, 15606, 15291, 8354, 22832, + 15610, 15611, 15605, 15609, 32759, 15604, 23256, 32757, 15854, + 15608, 8447, 8445, 15852, 23426, 23425, 23424, 15855, 23428, 15851, + 15853, 8446, 23546, 23545, 16030, 16031, 8525, 16029, 16184, 8580, + 16182, 16183, 16287, 23677, 8650, 16358, 16356, 16357, 16359, + 23719, 23756, 23720, 16460, 3429, 3690, 17948, 4257, 27058, 9441, + 18474, 18475, 9813, 27341, 18827, 19245, 10238, 10240, 19244, + 10239, 19246, 10241, 5486, 10836, 10242, 19711, 10835, 10837, + 10838, 11466, 5923, 11467, 11469, 5924, 5922, 11468, 20772, 12127, + 12125, 12124, 20771, 12123, 12122, 6353, 12126, 6792, 12794, 12796, + 6793, 12795, 7180, 21783, 7179, 13372, 21782, 21784, 13985, 13984, + 13986, 22221, 22220, 7523, 14498, 7799, 22570, 14935, 8043, 15295, + 8526, 3430, 3540, 3691, 3920, 4258, 4259, 18476, 18477, 4592, + 18828, 19247, 10243, 20250, 20248, 29810, 20773, 6354, 20774, + 21294, 30407, 13498, 7524, 8044, 3431, 17816, 3692, 27063, 9443, + 4260, 9442, 18479, 9814, 4593, 9815, 36168, 4594, 10245, 4999, + 4998, 19249, 10843, 10841, 10842, 10840, 19713, 10839, 11470, + 11473, 5926, 11471, 5925, 11472, 12128, 20775, 29814, 12797, 12798, + 12799, 21295, 13375, 13374, 7181, 13373, 13376, 13987, 31002, + 40877, 13988, 13989, 31539, 14499, 7800, 8045, 15296, 8448, 8866, + 18480, 4595, 9816, 5000, 28151, 28153, 5487, 19714, 5927, 11474, + 20252, 6356, 6355, 20779, 12800, 12801, 7182, 7183, 13991, 13990, + 14936, 16185, 3432, 8867, 3541, 17949, 3921, 9157, 18481, 4596, + 6357, 3433, 9817, 4597, 9818, 7801, 3434, 9444, 9819, 18833, 10250, + 10249, 10247, 19253, 10246, 10251, 10248, 19251, 19252, 5488, + 5489, 19715, 5928, 11475, 28715, 11476, 11477, 20254, 12132, 12133, + 12131, 20781, 12129, 12130, 6358, 12802, 13379, 13378, 13377, + 13380, 13993, 13992, 7525, 13994, 7802, 14500, 22572, 14937, 15297, + 16032, 3435, 3543, 3542, 26696, 4261, 8868, 8898, 3693, 8985, + 9158, 9159, 4262, 18484, 9445, 4598, 9820, 9821, 5001, 5005, 10252, + 5004, 5002, 5003, 10844, 5490, 5931, 20255, 5929, 5930, 11478, + 20782, 20783, 6794, 3436, 8899, 17820, 3544, 17817, 8902, 17954, + 3547, 8901, 3546, 3545, 3922, 8900, 17821, 17822, 8986, 8990, + 8992, 8993, 3703, 3704, 8989, 3699, 17952, 8987, 17958, 8991, + 3700, 18194, 3695, 17951, 3696, 17956, 3702, 8988, 3694, 3923, + 3697, 3698, 3701, 9176, 9174, 9161, 3935, 9168, 3930, 9162, 18491, + 9170, 18189, 9167, 3933, 9166, 3940, 9175, 3942, 18192, 3944, + 17953, 9160, 18196, 3931, 9177, 18190, 3938, 3941, 18185, 9468, + 3925, 3948, 3939, 9163, 3928, 3943, 9171, 3926, 3927, 9466, 9164, + 3934, 3945, 9178, 9165, 3932, 18186, 3937, 9446, 3946, 9172, 3936, + 18490, 3947, 3924, 9169, 3929, 9173, 9467, 18187, 18191, 18201, + 18198, 18195, 18200, 4274, 4290, 9453, 4281, 18845, 9474, 4266, + 18498, 4269, 9465, 27077, 9451, 9455, 4277, 4279, 9458, 4286, + 4272, 4270, 4271, 4285, 9470, 4280, 9457, 9459, 4278, 4283, 9460, + 9473, 18500, 4599, 4289, 27070, 4267, 9472, 18499, 9476, 9456, + 9478, 9463, 4276, 9452, 4275, 4293, 4282, 18497, 9450, 9830, 4288, + 4292, 9464, 9469, 18492, 4294, 4287, 4273, 4263, 18496, 4268, + 27068, 9454, 4264, 9477, 18494, 9448, 9447, 9461, 9449, 4291, + 5006, 4284, 9462, 4265, 18846, 4614, 9475, 18837, 9837, 9840, + 18847, 9843, 9832, 18839, 18841, 9846, 9849, 9851, 9829, 4600, + 4605, 10257, 4621, 9844, 9852, 9836, 9828, 18840, 18838, 18844, + 10284, 4608, 9841, 9833, 9835, 4613, 19265, 9838, 4607, 9825, + 9847, 18842, 9850, 18836, 18854, 4604, 18850, 4616, 9822, 4618, + 4602, 4622, 9848, 9824, 4619, 10278, 9471, 4606, 4601, 9831, 9823, + 4620, 4612, 9842, 4617, 4615, 9834, 4609, 9826, 4610, 4611, 9827, + 9845, 4603, 9839, 27354, 18852, 18848, 19262, 19258, 10260, 5014, + 5019, 19264, 19275, 19261, 10269, 10275, 10271, 10258, 10261, + 10254, 10255, 5026, 5011, 10270, 10279, 5021, 5007, 19254, 5016, + 10262, 5018, 10263, 10273, 19271, 19274, 19257, 5020, 10288, 10256, + 5013, 5012, 5024, 10253, 10286, 10274, 10287, 10281, 10267, 10282, + 19270, 10276, 10285, 10283, 5025, 10268, 5010, 5009, 5017, 5023, + 10280, 5022, 10265, 5491, 19263, 10289, 10264, 10259, 5015, 5027, + 5008, 19276, 10272, 10277, 19268, 19266, 19267, 5525, 10846, 10850, + 19724, 5506, 5504, 19735, 19740, 5495, 10848, 10847, 5515, 20257, + 10853, 5509, 19727, 10871, 10883, 5492, 10868, 10861, 5527, 10845, + 19719, 10873, 19720, 5524, 5512, 5523, 5502, 10857, 10875, 10867, + 5503, 5497, 10881, 19721, 10874, 10876, 5505, 5513, 10878, 10855, + 10872, 10860, 10880, 5518, 5494, 5516, 10865, 10863, 10864, 5507, + 10859, 10858, 5496, 10852, 10882, 5498, 10862, 5528, 19729, 5522, + 10851, 5519, 5517, 5526, 10869, 5521, 10266, 10870, 5520, 10877, + 5493, 10866, 5511, 10854, 5510, 19737, 5508, 5500, 5499, 11479, + 10879, 20270, 19747, 10856, 19745, 19742, 11500, 19725, 5501, + 19732, 19743, 19731, 19744, 19734, 28182, 19738, 19748, 19746, + 20261, 5960, 5514, 5942, 11494, 5956, 20259, 11482, 5939, 5935, + 11512, 5941, 5945, 5940, 5949, 11516, 11507, 20284, 20286, 11489, + 5954, 5948, 11501, 5932, 11513, 11506, 5936, 11495, 5951, 11524, + 11525, 28728, 5933, 11511, 5953, 11499, 11485, 11486, 5957, 11490, + 11497, 11491, 20267, 5955, 5963, 11487, 11480, 11481, 20263, 11483, + 5938, 11496, 20287, 5952, 5961, 20265, 20282, 11498, 11522, 11514, + 5934, 11520, 5946, 20279, 5944, 20277, 11526, 5943, 11504, 11492, + 11502, 5966, 11508, 11505, 11488, 5962, 11518, 11515, 11523, 5937, + 11503, 5965, 20268, 11510, 20799, 20273, 5947, 5950, 20269, 11509, + 5964, 11493, 10849, 20258, 20285, 11519, 11517, 11521, 20275, + 28731, 20276, 20281, 28732, 11484, 5959, 12164, 12163, 12137, + 6364, 20789, 12162, 12140, 12141, 29264, 6374, 12171, 6369, 12161, + 20792, 12134, 6375, 6365, 12149, 12139, 12142, 12166, 6359, 12173, + 12165, 6368, 12154, 6379, 20787, 20795, 6378, 6372, 20805, 29255, + 12172, 6360, 12152, 12143, 12156, 12168, 6380, 20798, 6362, 12151, + 20786, 12144, 6371, 20790, 6370, 12147, 12157, 12167, 12138, 12148, + 6363, 12158, 6376, 6367, 12145, 6366, 12136, 12150, 12170, 5958, + 6822, 12153, 12803, 12155, 12169, 6373, 12146, 6361, 6377, 7201, + 12135, 49019, 12160, 20809, 20803, 20812, 12159, 20802, 20810, + 20804, 20800, 20811, 12831, 6819, 12820, 12825, 6808, 21297, 12805, + 6821, 21298, 6799, 12804, 12837, 6823, 12808, 12824, 21312, 12810, + 12840, 12836, 6797, 6807, 13406, 6820, 6805, 12806, 21310, 12835, + 6809, 12832, 12845, 12812, 12821, 21801, 21302, 12843, 12833, + 6804, 21787, 21311, 12819, 6798, 6796, 6814, 29832, 21306, 12817, + 12814, 12815, 21301, 12839, 21303, 12844, 12842, 6802, 12846, + 6806, 6813, 29833, 12807, 13382, 12816, 21305, 6800, 6818, 6815, + 6803, 12826, 12811, 6816, 12828, 6810, 6812, 6795, 21304, 12830, + 12822, 12809, 6811, 12838, 12841, 12818, 12829, 21797, 6801, 7184, + 12827, 13381, 21309, 12834, 21308, 29847, 21313, 12813, 13391, + 13401, 7187, 13400, 13412, 7189, 13398, 30417, 13402, 7200, 21806, + 13393, 7192, 21796, 13405, 14002, 7204, 7203, 13407, 13390, 13417, + 7198, 21788, 7188, 13410, 30434, 13414, 13419, 13408, 13396, 7191, + 7194, 7202, 7197, 21798, 13399, 12823, 21807, 21789, 13395, 13418, + 7193, 21802, 7196, 13420, 7185, 13409, 13383, 13415, 7811, 21803, + 13397, 31010, 7186, 13392, 7190, 13384, 6817, 13388, 30416, 13413, + 13389, 13387, 7195, 21804, 13411, 21800, 13386, 13404, 13403, + 13416, 13394, 7199, 30429, 14005, 22237, 7538, 7528, 14017, 13997, + 7530, 14009, 7537, 7532, 14007, 14502, 14013, 14019, 14012, 13995, + 14010, 14021, 14023, 7527, 14022, 7533, 7539, 22235, 7536, 22239, + 14016, 7535, 14011, 22228, 13999, 14004, 22231, 14015, 7534, 7531, + 7526, 7529, 14003, 31021, 13385, 13998, 14001, 14018, 14006, 13996, + 14501, 14020, 14000, 14014, 21794, 22236, 14504, 7815, 22575, + 22574, 7803, 22580, 22581, 7807, 14506, 14512, 14510, 7805, 7806, + 7813, 14513, 14505, 7808, 22576, 14509, 14508, 14514, 7814, 22582, + 7809, 7812, 14507, 7816, 7810, 7817, 7804, 14511, 23082, 14503, + 22240, 22584, 14950, 8050, 14947, 14949, 22849, 8048, 14945, 14946, + 14941, 22851, 22848, 14008, 14942, 8049, 14938, 22847, 8046, 14951, + 8047, 14939, 14940, 14944, 8052, 22850, 8051, 32021, 22852, 14943, + 8214, 15301, 15307, 8215, 15298, 8212, 8209, 15309, 8213, 23079, + 8210, 15300, 15303, 15304, 15305, 15308, 23081, 14948, 15299, + 8211, 15306, 15623, 15302, 23080, 15614, 8356, 15617, 8357, 15626, + 15616, 15613, 23266, 15615, 15619, 15622, 15621, 15625, 15612, + 23264, 8355, 15620, 15624, 15627, 15618, 15856, 15857, 15861, + 15862, 23433, 15859, 15860, 15858, 23431, 8449, 23432, 8527, 16036, + 23615, 23549, 16033, 16034, 16035, 8528, 23616, 16187, 16186, + 16290, 8617, 16288, 16291, 16289, 16360, 8651, 8665, 16436, 16414, + 23776, 16435, 16479, 16480, 3437, 26555, 17961, 17959, 3705, 8994, + 17960, 17964, 9179, 18207, 3949, 18204, 3952, 18203, 9180, 18208, + 3950, 3951, 18205, 18510, 9487, 9489, 9484, 9481, 9483, 18507, + 18503, 18508, 4298, 18502, 18512, 18509, 4296, 18505, 18504, 9485, + 4297, 9482, 9479, 4295, 9486, 27080, 9480, 4299, 9488, 27082, + 9854, 18861, 9858, 18859, 18857, 4631, 18855, 27359, 18868, 18865, + 9861, 18862, 4623, 4626, 4628, 4630, 4627, 9857, 9856, 18867, + 4625, 9859, 9860, 18866, 9853, 4629, 18871, 4624, 18860, 9855, + 27361, 19277, 10303, 10304, 10305, 5032, 27720, 5028, 10294, 19279, + 10302, 10307, 5033, 19280, 10292, 10298, 10291, 10301, 19286, + 19284, 10297, 5029, 5031, 10306, 19278, 10290, 10293, 10299, 19282, + 10300, 10308, 10296, 19281, 5030, 19285, 5533, 10890, 19755, 19757, + 10892, 10888, 19754, 10900, 10886, 10899, 5529, 10884, 11530, + 10894, 5532, 19760, 10895, 10898, 19753, 10902, 19751, 10891, + 28187, 10896, 19752, 19756, 5530, 5531, 10901, 10889, 10885, 10903, + 19758, 10893, 10897, 10887, 5967, 5968, 11540, 5974, 20293, 11528, + 11537, 11527, 5971, 11535, 11533, 20302, 11534, 5969, 20301, 11538, + 20288, 20299, 20291, 20304, 11531, 11529, 5970, 11532, 11536, + 20300, 20298, 20290, 5972, 20292, 20296, 11539, 12179, 12186, + 12188, 12194, 20828, 6393, 12174, 20817, 6385, 20819, 12189, 6390, + 12195, 6381, 20822, 12192, 20829, 12176, 12193, 12175, 6395, 20823, + 12187, 6382, 12196, 21365, 6387, 12180, 6392, 12191, 12178, 12185, + 12181, 12177, 6384, 6391, 6389, 6386, 6394, 6383, 12184, 20820, + 6388, 20830, 5973, 20814, 12190, 12182, 20824, 12183, 29852, 29856, + 12854, 21322, 6826, 21321, 21319, 12850, 12856, 12852, 21323, + 6828, 12851, 12855, 12847, 21325, 12849, 6827, 21317, 21320, 21318, + 21315, 12853, 12848, 21314, 6829, 6824, 12857, 6825, 13426, 13423, + 13435, 13429, 13431, 7205, 13425, 13433, 21817, 21811, 13432, + 13430, 21816, 13436, 7208, 13427, 13434, 21815, 7206, 21812, 21809, + 13422, 13424, 7207, 13421, 13437, 13428, 22249, 22241, 14027, + 7546, 22247, 22243, 14038, 14036, 7540, 14026, 14029, 14030, 14025, + 7550, 7551, 14024, 14039, 14034, 7544, 7541, 14033, 14031, 22250, + 31022, 7547, 14035, 7542, 22245, 7543, 22253, 14032, 7545, 14028, + 54378, 14037, 7548, 14040, 14041, 7549, 7819, 7826, 14515, 14521, + 22587, 14519, 7822, 7821, 7818, 14517, 22589, 22594, 22591, 7824, + 7823, 7820, 22592, 14520, 14516, 14518, 22593, 7825, 8056, 14954, + 22854, 8053, 8054, 14956, 8055, 14953, 22855, 14952, 15313, 14955, + 23083, 15314, 8216, 15312, 23084, 32429, 15311, 23274, 15310, + 8217, 23271, 8358, 23273, 23270, 15628, 15629, 23085, 23268, 23272, + 15865, 15864, 8450, 23550, 15863, 16037, 16038, 23551, 23618, + 16188, 16292, 23722, 23721, 16361, 16461, 8685, 16481, 3438, 26556, + 4300, 4301, 18872, 27363, 4632, 20305, 30437, 7827, 3439, 4302, + 5034, 6396, 3440, 18874, 5534, 6830, 8869, 18515, 9862, 10309, + 29277, 12858, 30438, 7828, 3441, 4303, 9863, 9864, 11541, 5975, + 20834, 12197, 20833, 20832, 6397, 12859, 29859, 21821, 7209, 21820, + 8218, 3442, 11542, 3443, 3707, 8995, 3706, 3955, 3954, 3953, 9181, + 18209, 18518, 18519, 4304, 18520, 4305, 9490, 27088, 9865, 18876, + 9868, 4634, 9866, 27368, 4633, 9867, 4635, 10312, 10311, 10310, + 5035, 19291, 10905, 10906, 5535, 10904, 10907, 5977, 5536, 20307, + 20306, 5976, 11546, 11545, 20308, 11543, 11544, 11547, 12199, + 12198, 12202, 29280, 12201, 12200, 6831, 12862, 21328, 12861, + 6832, 12860, 13438, 21822, 13439, 7210, 31032, 14042, 14043, 39596, + 15319, 8219, 15318, 15317, 15315, 15316, 8451, 15630, 16039, 16362, + 23778, 3444, 26531, 8903, 3548, 8904, 17965, 17966, 26702, 8996, + 8997, 18216, 18214, 9187, 18211, 18212, 9183, 18215, 9182, 4306, + 9186, 3957, 9184, 3956, 9188, 9185, 18213, 9494, 9869, 9492, 9499, + 18523, 4307, 18527, 4310, 9500, 9496, 18524, 9497, 27093, 9491, + 4309, 9493, 4308, 9498, 18525, 9495, 45307, 9873, 4637, 4638, + 18884, 9876, 9870, 18883, 9875, 18879, 9871, 4636, 9874, 9872, + 18882, 18880, 10318, 10315, 19293, 10317, 5040, 5039, 5037, 10314, + 10319, 5036, 5038, 10316, 10915, 10313, 10320, 19294, 28202, 28209, + 20309, 10910, 10914, 37087, 10913, 11549, 11560, 28212, 19766, + 10916, 19765, 10911, 11548, 5540, 28201, 28211, 5539, 10909, 10912, + 5541, 19764, 5538, 5537, 10908, 10917, 11551, 11558, 20310, 5979, + 11557, 11554, 20317, 5981, 20312, 20314, 20313, 11556, 20838, + 20316, 11550, 11552, 11555, 11553, 5980, 11559, 5978, 6398, 20311, + 12206, 12205, 12203, 49065, 6401, 6400, 12207, 20836, 12204, 12863, + 6833, 6399, 20839, 12209, 12208, 21823, 12866, 12864, 7211, 21332, + 6834, 12865, 13441, 21331, 21333, 21330, 30448, 7212, 13440, 13449, + 13448, 13446, 30446, 13445, 13442, 13443, 13444, 13447, 13450, + 14048, 14045, 14046, 7552, 14044, 14050, 14049, 14047, 14523, + 14524, 7829, 22600, 7830, 14522, 31565, 8058, 14957, 8057, 8220, + 32434, 8221, 8359, 15632, 15631, 15866, 16040, 8529, 16190, 16189, + 16191, 3549, 9877, 5041, 5542, 10918, 3550, 8905, 3445, 17823, + 17746, 8998, 17968, 26705, 9193, 9191, 9192, 9189, 3958, 9190, + 18219, 18536, 9508, 18530, 4313, 9506, 9502, 9505, 18529, 9501, + 4315, 9504, 18528, 4312, 4311, 18535, 4314, 9507, 9503, 18532, + 4642, 4645, 9885, 9884, 9883, 4639, 9892, 9882, 27739, 4641, 10325, + 18887, 9889, 9887, 4644, 18890, 9879, 9890, 18886, 9881, 9891, + 9888, 9880, 18889, 4640, 9893, 9878, 4643, 18893, 18888, 18891, + 10330, 10321, 10332, 19299, 10324, 10335, 10336, 10322, 10334, + 10331, 10329, 10333, 5047, 19301, 5045, 19308, 19297, 10327, 19307, + 10323, 19302, 10326, 10337, 10328, 5046, 9886, 19298, 5042, 5044, + 19768, 10932, 10921, 10919, 20327, 10920, 19300, 10927, 19771, + 10928, 10924, 5547, 10929, 10926, 10923, 19767, 5545, 10922, 5543, + 5546, 10925, 10933, 5043, 5544, 10931, 10930, 5548, 20325, 20329, + 11565, 20318, 20330, 20321, 11566, 5991, 20328, 11572, 20850, + 20324, 11574, 11567, 5985, 11571, 11570, 5986, 5992, 20841, 5993, + 11573, 5983, 11564, 11562, 11568, 11561, 5990, 11563, 11569, 11575, + 5984, 5989, 5987, 5988, 20322, 20331, 5982, 20326, 20845, 20858, + 6408, 12216, 6407, 12220, 20852, 12210, 20857, 12221, 20851, 20843, + 20854, 12211, 12212, 20856, 12222, 12219, 12217, 12218, 12214, + 12213, 20844, 12223, 6404, 20848, 12215, 20853, 6409, 6403, 6410, + 6411, 20847, 6406, 6405, 21342, 21337, 12867, 6836, 6835, 21335, + 21336, 12872, 21339, 7213, 6837, 21338, 21334, 6839, 12873, 6402, + 6838, 12869, 12871, 12868, 21344, 12870, 21340, 13460, 21824, + 21834, 13459, 13456, 7216, 14051, 7217, 13455, 21832, 7215, 21829, + 13457, 13454, 13451, 13458, 13452, 13453, 7214, 21828, 31044, + 14528, 31045, 14055, 21833, 14054, 14056, 22257, 14525, 7555, + 31043, 14052, 22254, 7553, 22259, 7557, 7556, 14053, 14057, 22258, + 7554, 14532, 7833, 8059, 7834, 7831, 14529, 14527, 22606, 14530, + 22602, 14533, 7832, 14531, 14526, 22604, 14960, 14963, 15322, + 14958, 22856, 15633, 14964, 22857, 8222, 14962, 8060, 14959, 14961, + 14965, 15323, 23087, 15321, 32436, 23089, 23090, 23088, 8223, + 15320, 23279, 23277, 23280, 8360, 23278, 23281, 23434, 8453, 16042, + 8452, 16044, 16041, 16043, 8581, 16293, 3551, 9509, 10338, 10339, + 5549, 12224, 7558, 8224, 8530, 16294, 3552, 9510, 189, 27381, + 18895, 9894, 18894, 9895, 18897, 19309, 10340, 10341, 5550, 5551, + 20332, 28768, 11576, 12227, 12226, 12225, 12874, 20860, 12875, + 12876, 6840, 21345, 13462, 13461, 21836, 22260, 14058, 7559, 7560, + 22261, 14537, 14534, 14535, 14536, 14967, 14966, 8061, 15324, + 15867, 3553, 4646, 19775, 5552, 12228, 20861, 3554, 27385, 10342, + 5553, 19776, 20333, 5994, 5995, 38956, 3555, 3556, 8999, 3960, + 3959, 4647, 9896, 11577, 3557, 3558, 3559, 3560, 26706, 3961, + 3962, 9195, 9194, 18540, 4316, 9513, 9511, 9512, 18541, 18538, + 27103, 18539, 18900, 9897, 9898, 18898, 18901, 4651, 4649, 18903, + 4650, 4648, 18899, 5048, 19315, 19314, 19317, 19316, 5052, 5051, + 10343, 5050, 5049, 19318, 10344, 19777, 5556, 10935, 10934, 5554, + 5555, 19780, 19778, 5997, 5996, 11579, 20338, 20337, 11578, 5557, + 20339, 28775, 29308, 6412, 12230, 6413, 12229, 20864, 29889, 29888, + 12877, 13463, 7218, 14059, 22263, 22609, 14538, 32043, 8226, 8225, + 32783, 23283, 8531, 3561, 9514, 20340, 5558, 12878, 6841, 17824, + 18224, 9196, 9197, 9515, 4318, 4319, 18543, 27106, 4317, 18544, + 4655, 4656, 4653, 4654, 18904, 9899, 18908, 27395, 9900, 4652, + 10345, 19324, 5056, 5057, 19322, 5561, 10351, 27761, 5062, 5060, + 10352, 10347, 5059, 5058, 5053, 10350, 10349, 10346, 5061, 19319, + 10348, 5054, 27749, 5055, 5562, 10939, 10940, 5563, 10936, 10938, + 10942, 10941, 10937, 19781, 5559, 5560, 11587, 6002, 6001, 11581, + 5999, 28783, 11584, 6003, 11585, 6004, 11582, 5998, 6000, 11586, + 20342, 11583, 11580, 29320, 12243, 20865, 12232, 6415, 6418, 6417, + 6422, 6421, 12244, 12242, 12235, 12239, 12238, 6419, 12241, 12237, + 12245, 12236, 6420, 6414, 6416, 20866, 12234, 21348, 12880, 6845, + 12884, 6844, 12881, 6843, 21346, 12233, 12240, 12883, 29891, 6846, + 12885, 12882, 12879, 13466, 13470, 13472, 13468, 13467, 13465, + 7221, 7219, 7224, 7225, 13469, 7222, 13464, 7223, 6842, 13471, + 7220, 22264, 14061, 31066, 14060, 14068, 14062, 14067, 14064, + 7561, 14066, 22266, 22265, 7562, 31064, 7563, 22267, 14065, 14063, + 31584, 31587, 7836, 14539, 22612, 22610, 7835, 14542, 14540, 14541, + 40304, 40911, 7837, 22611, 22861, 14971, 22860, 8064, 14972, 32044, + 32048, 8062, 14973, 8063, 14970, 14974, 22859, 14968, 8227, 15325, + 8228, 8361, 14969, 8362, 23436, 23435, 8454, 15868, 8533, 16045, + 8532, 23620, 16192, 8618, 8619, 59363, 16475, 17825, 4657, 9901, + 6005, 6006, 3562, 3708, 9000, 18225, 9198, 3963, 18227, 4320, + 27397, 4658, 4659, 4660, 10944, 10353, 5063, 27762, 27764, 5564, + 10943, 19784, 11589, 6008, 20347, 11588, 6007, 20867, 20868, 12246, + 7226, 13476, 13473, 13474, 13475, 31071, 31072, 22269, 40924, + 22613, 14543, 22614, 14975, 32051, 32052, 23091, 15635, 15634, + 33051, 16046, 3563, 9516, 5064, 20348, 6009, 12247, 29911, 21353, + 12886, 21351, 7227, 14069, 14976, 15636, 3564, 18228, 18229, 4321, + 4663, 9902, 4664, 4662, 18911, 4661, 10354, 5065, 19327, 19328, + 5066, 5067, 5566, 10945, 5565, 19787, 19789, 19788, 20350, 11590, + 5567, 6010, 12248, 6423, 6424, 29912, 6847, 21354, 6848, 7228, + 7565, 14070, 7564, 31596, 14544, 7838, 22862, 14977, 15637, 3565, + 3964, 9519, 9518, 4322, 9517, 4323, 9520, 27406, 9908, 4667, 4666, + 9910, 9909, 4671, 18914, 4670, 18912, 27410, 4665, 27414, 9904, + 9905, 9906, 27403, 4672, 9903, 4668, 9907, 4669, 19337, 19332, + 10357, 10361, 10359, 10358, 27782, 10362, 19331, 27776, 19341, + 10363, 10364, 10356, 27778, 10355, 19796, 5069, 5070, 19340, 10365, + 10360, 19338, 10954, 19792, 10366, 5071, 5068, 19329, 19336, 10948, + 28246, 10947, 19790, 10949, 10950, 10952, 10951, 10956, 5571, + 5568, 5572, 10946, 5573, 10955, 5570, 10953, 5569, 19335, 19794, + 28253, 20357, 20354, 11593, 11595, 11591, 11592, 20352, 20353, + 11596, 11598, 11599, 11594, 11597, 6011, 12252, 20874, 12257, + 12249, 12253, 29336, 20875, 12258, 12254, 6425, 6433, 20872, 6428, + 12250, 12251, 6852, 6436, 6429, 20873, 6434, 6427, 12256, 6435, + 12255, 6431, 6426, 6432, 12259, 12891, 12893, 29925, 21362, 29923, + 29920, 21356, 21359, 21358, 21357, 21361, 6430, 21364, 21366, + 12888, 6850, 12894, 6851, 12892, 12887, 12890, 12895, 6849, 12889, + 7230, 13480, 13479, 21843, 7233, 7231, 13477, 7229, 13478, 21845, + 7232, 31082, 14078, 22274, 14080, 22272, 14079, 14071, 14075, + 14074, 14072, 7567, 7568, 7566, 14073, 14076, 14077, 22616, 7569, + 22615, 7843, 14552, 22618, 7840, 14546, 7842, 7844, 31084, 22619, + 7841, 14551, 14547, 7839, 14550, 14545, 14549, 14548, 22863, 22865, + 14979, 8067, 8068, 8065, 22868, 8066, 22867, 22866, 14978, 32454, + 15328, 23093, 23092, 8229, 15326, 15327, 15638, 15641, 15639, + 15640, 15869, 23439, 33055, 8455, 16193, 16295, 33547, 8620, 16363, + 16364, 8666, 3566, 4673, 19342, 11600, 20358, 12260, 33643, 3567, + 3965, 27121, 4324, 18915, 9911, 9912, 5072, 28258, 11601, 6012, + 6437, 7845, 14553, 15329, 15642, 3568, 18232, 18233, 9526, 9521, + 9523, 9525, 9524, 9522, 4325, 4674, 9921, 18918, 9916, 9913, 18920, + 18923, 9920, 18916, 18919, 4676, 4677, 9919, 9918, 9917, 9914, + 9915, 9922, 4675, 18922, 5076, 5082, 5081, 10375, 10369, 10367, + 19345, 5079, 10963, 5074, 10372, 10376, 10378, 10374, 10368, 5080, + 10373, 10371, 5073, 10379, 5083, 10377, 5077, 10370, 19346, 5078, + 5075, 19805, 5575, 28260, 10964, 19806, 19800, 10957, 10959, 10961, + 19802, 10962, 10960, 5576, 19804, 10965, 19803, 10958, 11605, + 6013, 11613, 20363, 11602, 48236, 11614, 20360, 11603, 11604, + 20364, 28815, 11612, 11611, 11608, 5574, 6014, 11606, 11609, 6015, + 11610, 11607, 20361, 20884, 12271, 20880, 12275, 6444, 20881, + 12901, 6447, 12273, 20890, 20876, 12270, 12265, 12267, 12268, + 12261, 20888, 6443, 20878, 20883, 6442, 20887, 6438, 12264, 20877, + 6445, 20889, 6446, 12263, 12266, 12274, 6440, 6441, 12272, 12262, + 29942, 12903, 6854, 12905, 12269, 12907, 6858, 12908, 12904, 21367, + 6855, 12900, 6857, 12897, 12902, 12906, 12899, 21368, 21374, 6439, + 21373, 12896, 6856, 12898, 21369, 7236, 13482, 7240, 30512, 7238, + 30510, 21849, 6853, 21852, 13489, 13490, 7235, 21847, 21851, 13488, + 13491, 7237, 7234, 13484, 13481, 13486, 13483, 7241, 13485, 21850, + 21848, 13487, 7239, 22278, 7571, 14087, 22281, 14081, 14085, 14091, + 14092, 14088, 14089, 14086, 30516, 14083, 31097, 7573, 7570, 14082, + 14084, 22279, 7572, 14090, 7849, 22623, 22625, 14560, 14554, 7848, + 31613, 7846, 22624, 14562, 7847, 14557, 14558, 14555, 14563, 14559, + 31615, 7850, 14556, 14564, 14561, 22876, 22871, 22873, 14983, + 22872, 22869, 14980, 22875, 8069, 32071, 14984, 14986, 14985, + 14981, 14982, 22877, 15334, 23094, 8230, 23095, 15331, 15333, + 15330, 15335, 32463, 23096, 15332, 15644, 15647, 15643, 8363, + 15645, 15646, 15648, 8364, 8366, 8365, 15870, 23442, 15872, 23440, + 15871, 23441, 16047, 23621, 16296, 16365, 3569, 17972, 9199, 4326, + 9528, 4327, 4328, 9527, 9927, 9926, 4678, 4681, 4680, 4679, 9923, + 9925, 9924, 10382, 5085, 10386, 10385, 10384, 10380, 5084, 5088, + 5091, 19348, 19349, 5092, 10381, 10383, 5090, 5089, 5087, 5086, + 10972, 19351, 10970, 10966, 5577, 20365, 10967, 5578, 10968, 10969, + 10971, 19809, 5579, 19808, 11618, 20366, 11617, 11616, 11615, + 20371, 20369, 28821, 12279, 6448, 29365, 12276, 12278, 20891, + 6449, 20896, 6450, 12277, 20892, 20370, 21377, 12917, 21376, 12910, + 12911, 39009, 6861, 6859, 6860, 12919, 39011, 12918, 12915, 12914, + 12913, 12912, 12916, 12909, 13492, 13497, 13495, 21855, 21856, + 21854, 13494, 13493, 13496, 14093, 22283, 7574, 7851, 14566, 22284, + 7852, 14565, 14988, 14987, 8070, 22878, 15336, 8231, 15649, 8534, + 16048, 23622, 16298, 16297, 8906, 4682, 4683, 10973, 6452, 3570, + 3968, 3967, 3966, 26861, 18547, 18546, 9529, 18548, 18551, 4330, + 4329, 18553, 4686, 9929, 9932, 9930, 18927, 4684, 4685, 18925, + 18926, 9928, 9931, 18928, 5099, 19353, 19352, 19358, 10393, 10395, + 10394, 5096, 10389, 19355, 19360, 5094, 5093, 19356, 5097, 5095, + 19357, 5098, 10392, 10387, 10388, 10391, 10390, 19361, 19812, + 19810, 19814, 19813, 10976, 10977, 10975, 19815, 10974, 5580, + 20372, 6020, 48261, 11619, 11621, 11623, 6019, 48256, 20373, 6017, + 20376, 11620, 6018, 11622, 6016, 20375, 20900, 12289, 12280, 12283, + 12287, 6456, 12285, 29375, 12284, 12281, 12282, 6454, 12288, 6453, + 20903, 6458, 6457, 6455, 29369, 12286, 12925, 29952, 12924, 21380, + 21382, 12920, 21385, 21384, 6862, 12923, 12922, 6863, 21387, 30522, + 29953, 30530, 7246, 21860, 13499, 21861, 7247, 7243, 7245, 21865, + 7242, 7244, 21858, 21862, 14094, 22287, 7577, 14096, 14095, 22627, + 12921, 7579, 7578, 7575, 7576, 22289, 22286, 14571, 31624, 14569, + 7853, 14570, 31623, 14572, 14568, 14567, 14989, 8073, 8071, 8072, + 23099, 32466, 23098, 15337, 15338, 8233, 23100, 8232, 15651, 15652, + 15650, 23285, 16049, 16050, 23679, 23680, 3571, 9001, 3969, 9530, + 4332, 4331, 9531, 18929, 18932, 9934, 4687, 9933, 4688, 18934, + 18933, 5100, 10398, 10396, 10402, 5101, 10397, 10401, 10399, 10400, + 10978, 10980, 19821, 5581, 19820, 10979, 5582, 6023, 6022, 6021, + 11624, 19819, 28832, 12292, 6459, 6460, 20905, 12291, 12290, 20906, + 12926, 6865, 6864, 12927, 12928, 7249, 7248, 21866, 14100, 13500, + 13502, 13501, 14099, 14097, 14101, 14098, 40375, 7580, 22292, + 31120, 22291, 14573, 7854, 14574, 14575, 22631, 8074, 8075, 32472, + 8367, 23446, 23445, 8582, 3572, 18235, 18236, 27130, 18556, 18939, + 9935, 18940, 18938, 18936, 18937, 10403, 5102, 19366, 19369, 19370, + 19367, 5733, 5732, 19822, 20384, 6025, 11626, 6024, 11625, 20383, + 29382, 20908, 20909, 12293, 21389, 6866, 12929, 6867, 21390, 22293, + 22632, 22633, 31631, 22882, 8368, 15653, 23552, 3709, 4333, 9532, + 18942, 4690, 18941, 4689, 9936, 9937, 10405, 10407, 5103, 10409, + 10412, 10410, 19374, 27810, 19373, 10411, 10408, 10404, 5104, + 10413, 10406, 19375, 19827, 19828, 10989, 5588, 10998, 5585, 19826, + 10991, 5589, 19830, 5583, 19825, 10986, 10999, 10987, 10984, 5587, + 28291, 5584, 28289, 10990, 10993, 5586, 10994, 5590, 10995, 10985, + 10992, 10996, 10988, 10983, 10981, 19829, 10997, 10982, 37791, + 11633, 20394, 20391, 20388, 11629, 11635, 6028, 11628, 11630, + 6026, 11627, 6033, 11631, 6032, 11632, 6034, 6029, 6035, 6030, + 20392, 6031, 20385, 6027, 20389, 11634, 20914, 29398, 6463, 12304, + 20911, 12307, 12295, 12300, 12294, 6465, 20920, 12298, 29389, + 20912, 20390, 12296, 6464, 20919, 12303, 12302, 12299, 12301, + 12297, 6871, 12306, 6461, 12305, 20916, 21391, 12945, 21393, 6878, + 12940, 21401, 6877, 12930, 29966, 12932, 6870, 12937, 12936, 12939, + 6875, 12934, 12933, 21395, 21399, 6874, 6869, 12935, 6872, 12941, + 12943, 12938, 12931, 6873, 21392, 21398, 7257, 6868, 29959, 21397, + 12944, 29971, 13506, 7250, 21867, 13508, 30560, 7251, 21876, 21868, + 7253, 13511, 30545, 13503, 6876, 13509, 30538, 30566, 30539, 30559, + 13505, 21871, 6462, 7256, 30550, 30543, 7252, 30555, 7254, 7255, + 30541, 7583, 13510, 13504, 7258, 21874, 13507, 14111, 14106, 31126, + 40398, 14116, 7581, 14108, 7585, 14114, 14105, 14102, 14117, 7860, + 7586, 14113, 14103, 7584, 14107, 7588, 14104, 14109, 7587, 14112, + 14115, 22296, 22297, 14593, 14594, 14578, 14585, 14583, 31646, + 22636, 7858, 14590, 14110, 22634, 14581, 22637, 14591, 7857, 14580, + 14579, 14589, 14586, 14588, 31635, 14576, 14592, 7855, 22639, + 14587, 14596, 14584, 7859, 7856, 14582, 14577, 14595, 7582, 22640, + 31638, 22638, 14992, 22889, 22887, 14990, 14996, 8079, 14994, + 14993, 8081, 14999, 8080, 22890, 15000, 14997, 8077, 14998, 14991, + 8078, 8076, 15342, 14995, 22885, 15001, 15339, 23108, 23107, 32475, + 8238, 8236, 15341, 32473, 15343, 15340, 8237, 8234, 8235, 8239, + 8370, 23287, 15658, 42482, 15657, 15655, 15654, 15656, 23286, + 8369, 8371, 8456, 23449, 33072, 15874, 15873, 23288, 23448, 16051, + 23555, 16053, 16055, 16054, 16052, 23554, 23624, 8536, 8535, 23623, + 8584, 8583, 8585, 16195, 16194, 16366, 16299, 16367, 8652, 23723, + 8653, 16415, 33710, 23807, 8690, 3710, 18558, 9533, 18557, 18943, + 9939, 9940, 9938, 18945, 18944, 4691, 9941, 9942, 9943, 19380, + 10414, 10420, 19377, 19379, 10418, 5105, 10416, 19381, 10417, + 10419, 19376, 10415, 5591, 19832, 11000, 5593, 11002, 5592, 11001, + 19833, 19834, 19863, 19835, 28295, 11637, 6036, 20398, 11639, + 11636, 11003, 20400, 6037, 20399, 20397, 11638, 20923, 12310, + 20927, 6466, 12308, 6467, 12309, 6468, 29975, 21403, 21402, 6879, + 12949, 12946, 12948, 6880, 6881, 12947, 21886, 21888, 21884, 13512, + 21887, 21890, 13513, 21889, 7259, 13515, 13514, 21885, 190, 31149, + 14121, 14122, 14118, 22300, 14119, 7589, 7590, 14120, 7866, 22644, + 22643, 7862, 7867, 7863, 7865, 7861, 22302, 7864, 22894, 32111, + 32112, 22893, 8082, 14597, 56736, 15345, 32487, 15344, 15659, + 8372, 8373, 16057, 15875, 23760, 16056, 23625, 16368, 16437, 3711, + 18237, 3970, 18560, 9534, 4334, 18559, 4694, 9946, 4692, 9944, + 4697, 4693, 4698, 4696, 9945, 4695, 5109, 5108, 10431, 5117, 10424, + 10430, 5113, 10423, 10429, 10427, 5112, 5114, 10426, 5107, 10425, + 5118, 5115, 5119, 5116, 10422, 10421, 10428, 5110, 5106, 5111, + 27828, 19386, 19390, 11018, 11011, 28863, 6042, 11010, 19842, + 5597, 5604, 5601, 5607, 5606, 5602, 19839, 11004, 11007, 19840, + 11006, 5598, 11008, 11017, 5599, 11005, 11014, 11015, 5600, 11012, + 5605, 5595, 5603, 11009, 5594, 11013, 19847, 19837, 11016, 19844, + 20417, 11656, 11647, 6039, 11654, 11651, 11643, 11652, 6041, 11644, + 20406, 11640, 20403, 20411, 6474, 11649, 20412, 6038, 11655, 20405, + 6045, 6047, 11642, 20409, 28864, 6046, 11645, 6040, 11653, 11646, + 11650, 20407, 11648, 6043, 11641, 6048, 5596, 6044, 6049, 20401, + 20418, 20416, 20938, 6470, 12317, 12319, 12321, 12325, 20408, + 12315, 12313, 6472, 29408, 12320, 12324, 12316, 12312, 20937, + 12311, 20940, 20931, 20933, 12322, 12314, 12318, 6473, 20929, + 6471, 12326, 6469, 12323, 20935, 12966, 20939, 20941, 20934, 6884, + 12958, 7272, 12968, 6887, 12972, 6893, 12953, 21421, 29982, 12969, + 12950, 21414, 12971, 12954, 21415, 6900, 6897, 12970, 12964, 6883, + 6891, 6890, 21417, 6889, 6895, 21410, 12951, 6896, 12965, 6892, + 6882, 12967, 6885, 6886, 6894, 12956, 12955, 12952, 29983, 12960, + 12957, 12961, 6899, 21409, 12973, 6888, 12962, 12963, 21418, 12959, + 21420, 21412, 6898, 21903, 13520, 7264, 7273, 7269, 13517, 21899, + 7266, 7270, 13529, 7260, 13521, 21895, 7268, 21905, 21916, 13524, + 13519, 7267, 7271, 13518, 21915, 7265, 21894, 13528, 7262, 13527, + 13526, 7274, 13280, 7261, 21912, 13525, 13516, 21892, 7275, 13523, + 7263, 21909, 21910, 21906, 21913, 21908, 21901, 21900, 13522, + 30586, 7593, 7598, 7591, 14135, 14126, 14138, 14130, 14136, 7599, + 7592, 14123, 14129, 14139, 14132, 14137, 14125, 31157, 22304, + 14133, 7594, 14131, 7597, 7596, 14127, 14128, 14124, 14134, 7595, + 14141, 14140, 22309, 22308, 14608, 14604, 7874, 22648, 14598, + 7868, 7884, 14610, 7876, 7872, 14601, 7879, 7882, 14612, 7871, + 14603, 7880, 14614, 14611, 14599, 7875, 7869, 7883, 14606, 7878, + 14600, 7873, 14613, 7877, 7870, 14607, 7881, 14605, 14609, 22649, + 32116, 22898, 15003, 15009, 8088, 15012, 8083, 8084, 15004, 15011, + 15006, 8089, 8086, 22900, 15002, 22897, 8085, 15008, 15010, 8087, + 15007, 15005, 32115, 22899, 15355, 8243, 8244, 8240, 23111, 8241, + 23113, 15351, 15349, 23114, 15353, 8245, 15354, 15347, 15346, + 15350, 15348, 8242, 15352, 15660, 8376, 8375, 15661, 23293, 15663, + 15662, 8377, 23456, 23453, 15880, 15877, 15878, 23454, 15876, + 15879, 8458, 15881, 23455, 8457, 16058, 23557, 8586, 8588, 16196, + 8587, 16300, 16370, 16372, 16369, 16371, 8672, 33739, 23802, 3712, + 26938, 4699, 10295, 5120, 19850, 5608, 11657, 11658, 21424, 14142, + 7885, 14615, 22652, 22901, 8090, 15357, 15356, 8378, 15882, 23558, + 16059, 8621, 9002, 26602, 4335, 3971, 9947, 18563, 10437, 10432, + 10436, 10434, 5121, 10435, 10433, 19391, 11019, 28868, 11659, + 11660, 12329, 12330, 6476, 6477, 12328, 12331, 12327, 6475, 21425, + 6901, 21426, 6478, 12974, 7276, 13530, 7277, 21917, 7600, 14145, + 14143, 14144, 14618, 14617, 14616, 56088, 32125, 15358, 32508, + 8246, 15359, 16060, 8622, 16301, 3713, 4337, 4336, 9949, 4700, + 18954, 27839, 9948, 10439, 19392, 5122, 11020, 10438, 19394, 27838, + 19393, 5610, 11023, 11021, 11022, 5609, 11662, 11663, 11661, 20945, + 6481, 12333, 12332, 12334, 6480, 6479, 29991, 13531, 13533, 21918, + 7278, 13532, 14146, 7601, 15014, 22902, 15013, 8247, 15360, 8249, + 8248, 15664, 15883, 8459, 3714, 9950, 4701, 10442, 5124, 10441, + 10440, 19397, 5123, 19398, 11029, 28322, 11031, 11024, 11025, + 5611, 11026, 5612, 11030, 11027, 11028, 5613, 20420, 6051, 6052, + 20421, 11664, 12335, 12336, 20949, 12978, 6904, 6902, 6903, 12975, + 12976, 50157, 12977, 13538, 21919, 13539, 7279, 13536, 13535, + 13537, 13534, 7604, 14147, 7602, 7603, 14620, 7886, 14619, 14871, + 22653, 15015, 15016, 8091, 22906, 8092, 7887, 15361, 15362, 15665, + 8379, 3715, 3716, 5126, 4338, 5125, 9951, 19855, 27452, 19399, + 6053, 3717, 4703, 9952, 9953, 4702, 4704, 3718, 27136, 9954, 5128, + 10443, 5130, 5127, 5129, 19856, 11034, 5614, 19858, 11033, 11032, + 28881, 12337, 21433, 12979, 29997, 7280, 7605, 14149, 14148, 22654, + 14621, 32134, 22907, 23296, 15884, 33289, 33288, 3719, 9200, 9535, + 4705, 9955, 46624, 10445, 27849, 19404, 19403, 5131, 10444, 5132, + 19402, 11036, 19862, 19861, 5616, 11035, 11037, 19860, 5615, 20425, + 11666, 11667, 11665, 6054, 29419, 6482, 20950, 6483, 30004, 6906, + 21434, 12981, 12980, 6905, 21437, 20424, 21436, 13540, 21921, + 21923, 13541, 21924, 21922, 21925, 14150, 31173, 22312, 7891, + 7890, 7888, 7889, 7892, 22655, 15017, 8094, 8093, 15363, 15666, + 23297, 23298, 23299, 8538, 8537, 3720, 46627, 10244, 6485, 6055, + 6484, 6907, 50165, 3721, 8907, 3722, 3723, 17974, 17975, 9536, + 9203, 18239, 9204, 3973, 18241, 9201, 3972, 18240, 3975, 9202, + 3977, 3976, 9205, 3974, 26869, 18238, 4343, 4341, 9538, 18571, + 4340, 18576, 18573, 18564, 4345, 4347, 4344, 18574, 9541, 9537, + 4348, 18567, 4342, 3978, 18569, 4346, 9540, 18572, 27139, 9539, + 27144, 4339, 9961, 4709, 4710, 9963, 18963, 9957, 9960, 9969, + 9967, 18957, 4711, 9973, 4714, 9970, 9962, 9959, 18958, 18955, + 11669, 9968, 4706, 9971, 9956, 9965, 4708, 4713, 9966, 4717, 4715, + 18962, 9958, 4712, 18961, 9964, 4716, 4707, 9972, 5137, 19407, + 5146, 5135, 5133, 10447, 5141, 5138, 10449, 19405, 19413, 5140, + 10448, 10446, 10451, 5145, 5143, 11668, 19406, 10452, 10450, 5134, + 19409, 19408, 5136, 5139, 19410, 5142, 18960, 5144, 20433, 11047, + 5618, 19874, 11038, 11040, 19872, 11041, 28338, 11049, 11045, + 11043, 28884, 11046, 11050, 5619, 5623, 11039, 28332, 11048, 28341, + 5621, 19866, 5620, 11044, 11042, 19867, 5617, 5622, 19870, 19873, + 6061, 11677, 20427, 28887, 11675, 6063, 28896, 20432, 20434, 20430, + 11670, 12351, 20426, 6062, 11674, 20429, 20431, 11671, 6058, 6064, + 11676, 6060, 11673, 6908, 6059, 11672, 6065, 6057, 6056, 47433, + 12343, 12341, 20958, 12347, 20961, 12339, 12352, 12344, 20952, + 12338, 6489, 6495, 12349, 29430, 12342, 20953, 6492, 20954, 20964, + 6490, 12350, 6487, 6486, 12345, 6491, 6066, 20959, 12348, 12340, + 6488, 6493, 6494, 20963, 6913, 6909, 21438, 6914, 12984, 21441, + 30010, 12983, 12985, 6911, 12982, 6912, 12988, 12987, 12986, 30023, + 6910, 31184, 21928, 21930, 21926, 13545, 21929, 13548, 7286, 13547, + 7285, 7281, 7282, 7283, 13544, 13543, 7284, 21927, 13546, 13542, + 14152, 14162, 7608, 7607, 22318, 14156, 14158, 22316, 14153, 22313, + 14157, 14151, 14160, 7606, 14159, 14155, 14161, 22656, 14154, + 7895, 14622, 14628, 7899, 7901, 7898, 7897, 31684, 7896, 7894, + 14623, 14626, 7893, 14627, 22657, 7900, 14625, 56773, 14624, 8095, + 22910, 8096, 15020, 15018, 15019, 23116, 15365, 23117, 15364, + 8250, 15668, 8380, 15667, 15885, 16061, 8539, 16373, 16374, 8589, + 3724, 27147, 4349, 11678, 6915, 7902, 14629, 3725, 26872, 5148, + 5147, 11679, 20436, 28901, 30615, 14163, 3726, 4718, 28902, 20437, + 11680, 11681, 11682, 6916, 7609, 3727, 27148, 4350, 9974, 5149, + 10453, 5624, 20438, 11683, 6496, 6917, 7610, 7903, 8097, 15366, + 3728, 4351, 18578, 27149, 5150, 11051, 6067, 21442, 6918, 12989, + 13549, 22319, 22913, 23118, 3729, 6068, 12353, 6919, 3730, 9542, + 9975, 4719, 18965, 10455, 27870, 19418, 5153, 19419, 5151, 5152, + 5154, 19416, 10454, 11056, 11053, 11055, 5625, 5627, 5626, 11052, + 5628, 11054, 11684, 11685, 11686, 12356, 20967, 12357, 29435, + 12355, 12358, 29434, 6497, 12354, 21444, 6920, 21445, 13554, 13550, + 13553, 13555, 13552, 13551, 14164, 14165, 14166, 7611, 7612, 14631, + 14630, 14632, 15022, 15021, 15368, 23119, 15369, 15367, 23120, + 8381, 32817, 15669, 15670, 23458, 16062, 16197, 16302, 3731, 3979, + 7904, 3732, 11057, 11687, 23121, 8629, 9003, 26558, 17977, 9004, + 9006, 3733, 9007, 9005, 26710, 9213, 9214, 9208, 18243, 26880, + 26874, 9212, 3981, 18244, 3982, 9209, 9207, 9206, 9210, 3980, + 9211, 9976, 18246, 26878, 9547, 4354, 9546, 9548, 18581, 4353, + 9553, 4357, 9543, 9557, 9563, 4364, 9560, 4361, 18592, 9550, 9556, + 9558, 18587, 9545, 4360, 4355, 9551, 4362, 4365, 4359, 18593, + 4352, 9555, 9549, 9562, 4367, 4363, 4358, 9554, 5155, 9552, 4356, + 4366, 27161, 9544, 27165, 9559, 9561, 18579, 18589, 27162, 18979, + 4736, 4730, 4738, 4735, 9983, 9986, 4731, 18967, 9977, 27473, + 4724, 4734, 18968, 4737, 4739, 9998, 9989, 18981, 4723, 9997, + 4727, 4725, 4720, 9981, 18975, 9996, 9985, 9988, 10001, 18977, + 4740, 9995, 4732, 9990, 10000, 9987, 9991, 9994, 18966, 18971, + 9979, 9999, 9993, 18972, 18983, 9978, 45993, 9982, 4733, 4728, + 4721, 4726, 4722, 4741, 9980, 10472, 4729, 27476, 18982, 9992, + 9621, 18980, 10475, 5169, 19429, 10459, 27884, 10470, 10466, 19878, + 10485, 19420, 10477, 19426, 10467, 19892, 10476, 10461, 10465, + 10488, 5172, 10480, 10471, 5156, 10486, 10457, 27881, 10479, 27890, + 5171, 5166, 10456, 5164, 5163, 5168, 10478, 5160, 5167, 9984, + 11688, 10473, 27886, 18580, 10463, 5170, 10464, 10468, 5173, 10458, + 10482, 20452, 10481, 10489, 5162, 5159, 10487, 10483, 10474, 10469, + 5165, 5161, 10460, 5157, 10484, 5158, 27883, 10462, 19421, 19430, + 18818, 28364, 19879, 19882, 11063, 11065, 11070, 11090, 5642, + 5632, 19885, 11062, 5643, 5644, 11073, 11080, 11086, 19881, 11067, + 28370, 11074, 19880, 19894, 5645, 11088, 11083, 5640, 5638, 11079, + 11075, 11061, 5629, 11066, 11058, 19886, 5637, 5639, 11071, 11068, + 5634, 11084, 5631, 11069, 11729, 11077, 19895, 11076, 5630, 19888, + 5641, 19883, 5633, 11059, 11064, 11081, 11087, 5646, 11060, 11072, + 11078, 5636, 28372, 19889, 11089, 11082, 11085, 19896, 5635, 28929, + 11704, 11692, 6076, 11721, 11730, 11733, 6074, 11700, 11725, 11701, + 11715, 6087, 11711, 6084, 20459, 11712, 11689, 37866, 11726, 20444, + 20454, 6093, 11723, 11713, 11735, 11708, 12390, 20442, 11738, + 6091, 11706, 11718, 6094, 6073, 11710, 11736, 11703, 11696, 11707, + 20460, 11695, 11693, 6069, 11727, 11702, 11731, 20440, 11732, + 6077, 6082, 6078, 6086, 11722, 6079, 11714, 11698, 6071, 11690, + 11724, 11734, 11697, 6085, 11739, 11709, 20447, 11705, 20457, + 6070, 6090, 20455, 11720, 6092, 20445, 11716, 6081, 6075, 6083, + 6072, 6089, 11717, 11699, 11719, 11694, 11728, 20453, 28928, 20458, + 20451, 20443, 11737, 20456, 11691, 12389, 20974, 12411, 6451, + 12394, 20978, 12392, 12371, 6501, 12387, 12407, 12383, 6509, 12406, + 12381, 6088, 12397, 12382, 12404, 6508, 6500, 20987, 12360, 12368, + 20982, 12393, 12385, 12410, 12388, 6514, 12405, 20973, 6505, 20991, + 12391, 12399, 12372, 12398, 20968, 12415, 12367, 12400, 20980, + 12413, 20992, 12361, 6080, 20993, 12375, 12374, 6507, 20979, 12378, + 12380, 12395, 12412, 6510, 20985, 6511, 20977, 12366, 6503, 12370, + 12408, 6512, 29457, 6504, 6506, 6513, 12414, 12401, 12396, 20989, + 20976, 12377, 12376, 6502, 12362, 6499, 12386, 12363, 12384, 20975, + 29454, 12373, 12409, 20971, 20986, 29443, 6498, 20988, 20969, + 12369, 29459, 12365, 12403, 12364, 6933, 13029, 21452, 21467, + 13012, 21450, 21455, 12990, 13020, 6925, 13005, 13015, 6928, 13008, + 6926, 12993, 13023, 12992, 13011, 21459, 12991, 21456, 30061, + 13009, 13018, 13016, 13004, 12999, 12997, 21465, 12998, 13017, + 13028, 13006, 6927, 21458, 13001, 21457, 13021, 21464, 6930, 13000, + 12994, 13010, 6934, 21449, 30041, 6922, 6931, 13002, 12996, 21453, + 6924, 12402, 6923, 13013, 20983, 6921, 6936, 6929, 13014, 13003, + 12995, 13022, 13007, 6935, 13026, 6932, 13025, 21462, 13019, 13024, + 21461, 21466, 13027, 21460, 13595, 13596, 13583, 13582, 13578, + 7298, 21948, 7290, 13598, 13597, 12359, 13575, 13579, 13573, 21937, + 13592, 13577, 21935, 13599, 13570, 13568, 13580, 13590, 13585, + 7300, 13559, 21933, 13589, 21945, 21939, 21953, 7301, 12379, 13571, + 13562, 13565, 13603, 13572, 13563, 13561, 13558, 30639, 7294, + 13581, 7293, 7297, 13576, 13584, 7287, 13600, 13604, 7289, 21944, + 13567, 13587, 13591, 13564, 13601, 7296, 30623, 7295, 13556, 7299, + 13594, 13566, 13586, 13560, 13574, 13569, 7291, 7292, 13588, 13605, + 13602, 13593, 30637, 21946, 21947, 21951, 30633, 13557, 7288, + 14183, 22335, 14174, 14177, 22327, 7618, 14179, 14168, 14175, + 14181, 7615, 7619, 7613, 22334, 22325, 14170, 14186, 30648, 31226, + 14180, 31211, 14171, 14195, 14189, 14167, 14651, 14173, 7614, + 22333, 14184, 22329, 14194, 7622, 22331, 14191, 14172, 14178, + 14182, 14176, 14196, 14193, 14190, 7616, 7617, 7621, 14169, 14197, + 7620, 14187, 22324, 22330, 14185, 14188, 14664, 14645, 14650, + 14663, 14649, 14641, 14646, 31707, 7907, 22664, 14634, 14658, + 14660, 14633, 7906, 14662, 14654, 7913, 14661, 14647, 7915, 14639, + 14192, 14655, 14652, 14635, 14666, 7909, 22661, 22662, 7910, 14637, + 14653, 22666, 14665, 14656, 14643, 7912, 7908, 14657, 14644, 14667, + 14638, 14648, 14659, 14640, 14642, 31709, 7916, 14636, 7914, 8099, + 7905, 22665, 22669, 7911, 8103, 15038, 22917, 15028, 15023, 15029, + 15039, 15043, 15042, 8105, 8104, 22919, 32159, 15030, 15044, 15033, + 15025, 22920, 15027, 15026, 15032, 15037, 15024, 15031, 15036, + 8102, 32155, 15034, 22916, 8100, 15035, 8098, 8101, 15385, 15040, + 8254, 23123, 15377, 15381, 15373, 15376, 23122, 15384, 8252, 15389, + 15382, 32519, 15374, 15390, 15383, 8255, 8256, 15387, 23125, 15375, + 8251, 8253, 15370, 15378, 15372, 23308, 15388, 15386, 15371, 15379, + 32520, 23128, 15677, 8257, 15380, 8383, 8385, 8382, 23303, 15682, + 15674, 15672, 15676, 15673, 23305, 23309, 15678, 15680, 8386, + 8388, 23313, 15679, 8389, 8387, 15681, 23311, 32828, 23314, 23304, + 8384, 23312, 23464, 23463, 8460, 15886, 15892, 8462, 15675, 15891, + 23465, 15898, 15889, 15896, 15895, 15671, 15890, 15041, 15899, + 15888, 15893, 23461, 15897, 15887, 23459, 16066, 8461, 15894, + 23460, 16202, 16067, 16065, 16063, 16064, 16068, 8590, 16200, + 16198, 16203, 16201, 23628, 16204, 8591, 16199, 23608, 23725, + 16303, 16375, 16376, 16377, 23726, 23779, 16470, 16462, 9008, + 4368, 4742, 27895, 10491, 10490, 5174, 5647, 11092, 19900, 19897, + 11091, 19898, 6095, 6516, 20462, 6515, 6517, 39149, 13030, 13606, + 14198, 14200, 14199, 54678, 7917, 14668, 15045, 16438, 3734, 18248, + 9566, 9567, 9565, 9564, 4369, 10005, 10003, 18990, 18985, 10002, + 18987, 4743, 4745, 4744, 10004, 18991, 19436, 10503, 10500, 10498, + 27900, 19439, 5175, 10501, 5180, 10495, 10510, 19442, 10512, 10496, + 19441, 5177, 10513, 10508, 10494, 10499, 10509, 10505, 10502, + 19438, 5182, 10511, 10497, 19437, 19443, 10506, 10492, 5181, 5178, + 10504, 19440, 10507, 10493, 5179, 5176, 28383, 19903, 5657, 11099, + 5656, 19901, 11102, 11105, 5653, 5651, 11094, 11103, 11101, 11098, + 11106, 11107, 11109, 11110, 11093, 5650, 11096, 11095, 11108, + 5652, 11097, 5654, 5649, 11100, 5658, 28393, 5655, 11104, 6102, + 11754, 28938, 11743, 6099, 20463, 12421, 11752, 11740, 6097, 11745, + 6100, 11749, 11747, 6103, 6096, 28943, 20464, 11741, 11744, 6101, + 28936, 11742, 37878, 11753, 11751, 11746, 11748, 11750, 6098, + 20469, 12422, 12428, 12418, 12424, 6518, 12420, 6524, 20997, 20998, + 6523, 21002, 6522, 12427, 6525, 6526, 12417, 12430, 6527, 6521, + 6520, 12426, 6528, 12416, 12419, 12429, 12425, 29478, 29471, 13062, + 13051, 6519, 38506, 20999, 21001, 6943, 13039, 13060, 13040, 6938, + 21478, 13037, 29474, 13046, 13038, 6940, 13032, 13059, 6941, 13056, + 13057, 13033, 6946, 13048, 21473, 13042, 13049, 13036, 30079, + 13061, 13053, 13047, 13031, 6942, 13054, 21468, 6945, 13058, 21475, + 13052, 6939, 13050, 21472, 13044, 6937, 13035, 13043, 13055, 13041, + 21477, 13045, 21474, 7311, 12423, 13624, 13633, 13623, 13619, + 13616, 7312, 13614, 6944, 13607, 7310, 13613, 7309, 13618, 13615, + 13631, 13626, 13620, 13625, 7305, 13617, 13636, 13608, 13609, + 13632, 7306, 13637, 7308, 13638, 13622, 13034, 13628, 13621, 13630, + 13627, 39814, 21962, 30651, 13612, 7303, 13635, 7304, 13610, 7307, + 14211, 13629, 13634, 30660, 21958, 14208, 7302, 7623, 14218, 14214, + 31235, 14212, 14207, 14222, 22336, 22338, 31243, 7627, 22340, + 14203, 14215, 14216, 14206, 14205, 14219, 31240, 14209, 14204, + 14210, 22343, 14221, 14202, 14220, 14217, 7625, 7624, 31232, 22339, + 7626, 14213, 14201, 14670, 7923, 14674, 14671, 14678, 14684, 14673, + 22679, 14693, 7920, 14687, 14676, 14688, 14683, 14690, 14675, + 7925, 7924, 14677, 14691, 14669, 14689, 7918, 22678, 14681, 14680, + 14685, 14672, 7922, 22680, 7926, 14679, 14686, 7927, 14682, 22675, + 22673, 7919, 7921, 15058, 15056, 23131, 22927, 15062, 15060, 15063, + 22929, 15049, 15057, 15067, 14692, 15053, 8109, 13611, 15048, + 15061, 15055, 15052, 15047, 15046, 15066, 22924, 15051, 15050, + 8107, 15059, 22925, 8106, 22926, 41681, 8108, 15054, 15065, 15394, + 15395, 23135, 8261, 15392, 8258, 15400, 23130, 8262, 15402, 15391, + 15064, 15404, 15393, 42146, 8259, 15399, 23132, 15401, 15396, + 15403, 15398, 15397, 8260, 22928, 23134, 15684, 15685, 23316, + 15687, 8390, 8391, 15688, 15686, 23315, 15683, 23466, 15902, 15905, + 15901, 32529, 8466, 15903, 8465, 8464, 8463, 15904, 16073, 16071, + 23562, 16070, 15900, 16072, 15906, 16069, 23630, 16207, 16173, + 16205, 8592, 16206, 16208, 16306, 8623, 16305, 16304, 8624, 33560, + 8654, 16416, 16440, 16439, 16441, 3735, 10006, 18993, 10514, 10515, + 19907, 20471, 20470, 11755, 48456, 15907, 16307, 3736, 4746, 10007, + 19444, 28394, 11111, 5659, 11757, 11756, 6104, 21006, 6529, 13639, + 7313, 21964, 7314, 22344, 22345, 31250, 7628, 8625, 3737, 18994, + 10008, 4371, 10010, 10009, 4747, 10516, 19447, 10523, 5183, 10521, + 10519, 19450, 10526, 10517, 10518, 5184, 19445, 5188, 19446, 19448, + 10527, 5187, 10525, 10522, 10520, 5185, 5186, 10524, 19449, 5661, + 11112, 19915, 5666, 11128, 5665, 11130, 19911, 19917, 11118, 5663, + 11129, 19909, 11113, 5664, 11125, 11121, 11123, 11117, 11124, + 19908, 28402, 5660, 11120, 19916, 11119, 11115, 19910, 11126, + 19912, 19914, 11122, 11114, 19913, 11116, 5662, 11127, 6107, 11768, + 28948, 20477, 20479, 11764, 11766, 11761, 11760, 11758, 20474, + 11765, 11767, 11763, 20476, 11762, 6105, 6106, 11770, 6537, 12432, + 12438, 12433, 12434, 21007, 12439, 38521, 6539, 29486, 6531, 6538, + 12431, 11759, 6534, 6532, 12437, 12436, 6533, 6535, 12435, 6530, + 21008, 6536, 21965, 13064, 6953, 21488, 21481, 13075, 13074, 21486, + 13069, 6955, 13073, 13065, 13066, 6947, 6949, 21483, 13071, 13063, + 6951, 6950, 13067, 13072, 13070, 6952, 13068, 21480, 21485, 11769, + 6948, 21487, 13640, 13647, 7316, 30681, 13651, 7320, 13643, 13641, + 30673, 13650, 21966, 7315, 13649, 7317, 7318, 13642, 7319, 13648, + 13644, 13645, 13646, 6954, 21967, 14223, 14235, 31258, 7633, 14230, + 14232, 22346, 7631, 14224, 14228, 31255, 14231, 7629, 7632, 14234, + 14226, 14227, 14233, 14225, 14229, 7630, 14695, 14694, 7929, 14700, + 7931, 22685, 31743, 7928, 14696, 7932, 14697, 22684, 22682, 14698, + 14701, 22687, 7930, 15072, 22930, 15075, 22931, 15069, 15071, + 22933, 22932, 15070, 15073, 15074, 14699, 15068, 8265, 15408, + 15411, 15413, 15406, 15407, 15410, 15412, 8266, 8264, 8263, 15409, + 15405, 15689, 8392, 23320, 15690, 23319, 15909, 8467, 15911, 8468, + 15908, 15910, 8541, 43169, 16074, 8540, 16211, 16210, 33562, 16209, + 23728, 16378, 16379, 16381, 16380, 23780, 9009, 3738, 4748, 11131, + 6108, 12440, 8110, 23138, 15414, 23631, 23729, 3983, 18996, 27909, + 27908, 5668, 28407, 19919, 19918, 5667, 19920, 11771, 6109, 11773, + 11772, 48473, 20481, 12441, 6540, 13076, 13079, 13078, 30100, + 13077, 13652, 13654, 13653, 21970, 7635, 22347, 31264, 21969, + 7634, 22691, 7933, 14702, 14704, 14703, 22935, 22934, 8111, 22936, + 32538, 23140, 15416, 15415, 15691, 8393, 23321, 23470, 8469, 16076, + 16075, 8655, 3984, 10011, 4749, 11134, 11132, 28412, 28411, 11133, + 11775, 11776, 12448, 11774, 12442, 12446, 12445, 12447, 6541, + 12444, 12443, 12449, 21013, 13082, 13080, 21491, 13081, 13657, + 13655, 21971, 13656, 14236, 14705, 14706, 8112, 23141, 15417, + 15692, 8394, 32546, 15912, 16077, 8542, 33312, 16212, 16382, 3985, + 4751, 4752, 10012, 18997, 18999, 10013, 4750, 27915, 5194, 19454, + 5192, 19453, 5191, 5198, 5190, 5199, 10528, 5196, 27916, 5193, + 5197, 5195, 5189, 19455, 5676, 19927, 5670, 11138, 5675, 19930, + 19936, 5677, 5671, 47549, 5672, 19922, 11136, 19924, 19932, 5669, + 19929, 11137, 5674, 28416, 37282, 11135, 5673, 19923, 6120, 20489, + 6122, 28966, 20490, 11779, 6121, 6110, 6114, 20495, 6560, 12454, + 11781, 6115, 20491, 20482, 11784, 11785, 6119, 28967, 11787, 20492, + 11789, 20494, 11790, 11778, 11777, 11791, 6118, 11788, 11786, + 28963, 6116, 6112, 6123, 11782, 11783, 11780, 20485, 6117, 28968, + 20493, 6113, 6111, 12453, 6555, 6550, 21025, 21018, 6545, 21028, + 6561, 6546, 21014, 6542, 6557, 6554, 6556, 21017, 6547, 6552, + 6543, 6544, 12461, 12458, 12450, 12455, 21020, 6558, 12462, 6559, + 6549, 21021, 21026, 12452, 21015, 12460, 12456, 12459, 12457, + 6553, 12451, 6548, 21022, 13085, 6957, 6960, 21494, 13087, 21499, + 6968, 13086, 6962, 21498, 7325, 13088, 30116, 6967, 13084, 6969, + 21493, 21497, 21506, 6958, 21503, 6551, 6961, 21495, 6959, 6963, + 6965, 6956, 6970, 6966, 21500, 6964, 13083, 21501, 21985, 7332, + 21972, 7328, 21983, 21981, 21979, 7335, 21977, 13660, 7336, 13672, + 13665, 7321, 13673, 13667, 7331, 13668, 21984, 7330, 13671, 7324, + 13669, 13659, 7323, 14247, 7329, 21986, 7326, 21974, 7334, 21975, + 13658, 21987, 13662, 7322, 13661, 13663, 13664, 7333, 13666, 13670, + 13674, 7337, 7641, 14242, 14248, 14245, 14237, 14249, 14238, 22351, + 14244, 22352, 7636, 7642, 14250, 21980, 22348, 7638, 22355, 7648, + 7643, 14252, 14246, 7639, 14239, 7649, 14240, 14241, 7650, 7647, + 7327, 22350, 7637, 14253, 7651, 22349, 7644, 14251, 7640, 7645, + 7646, 7941, 14711, 14720, 14717, 14719, 22694, 7938, 14712, 22695, + 14718, 7934, 14714, 7942, 14710, 14715, 14722, 14243, 14716, 14709, + 7935, 14708, 7936, 14723, 7937, 14721, 7940, 14707, 22693, 7939, + 14713, 15078, 15092, 15087, 15089, 15077, 8113, 22945, 15076, + 8116, 8115, 22941, 15091, 15083, 15080, 15086, 22939, 15079, 22943, + 15081, 15090, 15088, 22938, 8114, 15095, 15093, 15084, 15094, + 15085, 23143, 15421, 8267, 15428, 23144, 32549, 15915, 8274, 15082, + 15419, 8270, 15420, 15425, 23145, 23330, 8272, 8273, 15418, 15427, + 15429, 15422, 15424, 15426, 15423, 15430, 8269, 8275, 8271, 8268, + 15695, 32850, 8399, 15693, 23327, 23323, 15697, 23329, 15698, + 8397, 15699, 15696, 23322, 15694, 8400, 8396, 15700, 23325, 8398, + 8395, 23294, 33114, 8470, 23471, 33120, 8471, 15914, 15913, 15916, + 15917, 23472, 8472, 16078, 16083, 8543, 23564, 16080, 23565, 16079, + 16082, 16081, 23633, 16216, 33461, 8593, 16215, 16213, 23632, + 16214, 23634, 23684, 8627, 8626, 16308, 16309, 8628, 23730, 16383, + 16384, 8667, 23762, 8673, 23781, 16442, 16471, 3986, 36791, 11139, + 19937, 11140, 12463, 13089, 13675, 7944, 22698, 7943, 15096, 15431, + 23567, 16217, 3987, 10529, 5200, 5678, 12465, 12464, 7338, 13676, + 7339, 14724, 8117, 23331, 23782, 8682, 3988, 9568, 10530, 19940, + 28432, 5679, 19939, 11141, 11142, 20501, 11792, 20500, 6124, 6562, + 21029, 12467, 12466, 12468, 21508, 13090, 13091, 6971, 7652, 7340, + 7653, 14728, 14725, 14727, 14726, 7945, 22946, 15097, 15433, 15432, + 9215, 5202, 5201, 10531, 19941, 11143, 20503, 20502, 11794, 11793, + 6125, 20504, 12470, 12471, 12469, 29509, 21030, 6564, 6563, 30131, + 6973, 6972, 21991, 13677, 14256, 14254, 14255, 7654, 14730, 14729, + 22700, 15100, 15099, 15098, 15434, 23732, 16443, 3989, 4753, 19001, + 4754, 5203, 5204, 10533, 10532, 11144, 19943, 5685, 5683, 5680, + 5684, 5682, 5681, 19945, 19944, 6126, 11797, 20506, 6569, 6128, + 6133, 11799, 6135, 6134, 6137, 11798, 11795, 6131, 6127, 6129, + 11796, 6136, 6132, 6130, 6571, 6570, 6568, 6572, 29515, 6566, + 6567, 21034, 6565, 38552, 12472, 21032, 13093, 21511, 6975, 6976, + 6974, 21513, 13092, 21512, 13094, 13680, 13682, 21995, 7349, 13683, + 7342, 13679, 7341, 7351, 7347, 7348, 7344, 13678, 7343, 13684, + 13681, 21994, 7350, 21997, 7345, 7346, 14258, 22362, 14260, 14259, + 22360, 14261, 7655, 14257, 22702, 22703, 7949, 14731, 7946, 7950, + 7948, 7947, 15101, 32220, 15104, 56261, 15103, 22949, 15102, 8118, + 15435, 15436, 8276, 15437, 8277, 23147, 8402, 32852, 8401, 15918, + 23474, 23475, 8473, 15919, 16084, 8544, 8545, 16218, 23635, 8630, + 23733, 3990, 19946, 5687, 5686, 12473, 12474, 6977, 14262, 7352, + 14263, 14732, 3991, 17979, 10014, 4756, 4755, 10534, 5205, 10535, + 11147, 19952, 11146, 19950, 11145, 19948, 19951, 11801, 6140, + 20516, 20511, 11800, 6139, 20514, 20507, 20510, 11802, 6138, 20515, + 12476, 12479, 12477, 12478, 12482, 12475, 12483, 12480, 12481, + 6979, 13095, 21516, 21514, 6978, 21515, 13688, 13686, 22001, 30728, + 7353, 13685, 13687, 22000, 7354, 21998, 14264, 22364, 14265, 7951, + 22952, 15439, 15441, 15438, 15440, 15701, 15920, 16417, 3992, + 4757, 10536, 10538, 10537, 11150, 5689, 19957, 11148, 19953, 5688, + 11151, 19956, 11152, 11149, 47587, 11814, 6148, 11806, 11812, + 20522, 20517, 6143, 6146, 11805, 6141, 11809, 12489, 6145, 20518, + 11804, 20521, 11810, 11807, 11813, 11803, 11811, 6144, 6147, 11808, + 6142, 6574, 12485, 6573, 12492, 12491, 6580, 6581, 12493, 6575, + 12490, 6579, 12495, 12486, 21036, 12488, 6576, 12484, 12487, 12494, + 6577, 12496, 6578, 6980, 13100, 13106, 13098, 13107, 21522, 13097, + 13102, 13108, 13105, 13104, 13103, 21521, 13096, 13101, 21520, + 13099, 7359, 7356, 13697, 13702, 13704, 13701, 13694, 13696, 13706, + 13703, 13698, 13707, 13695, 13705, 7357, 7363, 7361, 13689, 7362, + 7358, 13690, 13692, 13691, 13699, 13700, 22007, 7360, 22006, 7355, + 13693, 14275, 7657, 22371, 14266, 7658, 7661, 14271, 39895, 14268, + 7660, 31310, 22368, 14272, 14273, 14267, 14276, 14269, 14274, + 7659, 22369, 7656, 14270, 22705, 14738, 7954, 7952, 7955, 7953, + 14737, 14734, 14733, 22706, 14736, 31784, 14735, 15118, 8124, + 15109, 15108, 22953, 8119, 15114, 15113, 15105, 15116, 15110, + 8123, 15107, 15115, 15106, 8120, 8122, 15111, 8121, 15112, 23149, + 15117, 15445, 23148, 8282, 15442, 32573, 15446, 23150, 32570, + 8279, 15444, 8284, 23151, 8281, 23152, 15443, 32575, 8283, 15447, + 8278, 8404, 8406, 23334, 15704, 8405, 15702, 8280, 15703, 8403, + 8474, 8476, 15922, 8475, 15921, 16089, 8546, 16088, 8547, 16086, + 16085, 16090, 16091, 16219, 23636, 16087, 16313, 16310, 16311, + 16312, 8656, 23735, 16387, 16386, 16385, 16418, 23763, 16463, + 16444, 8674, 3993, 5206, 19958, 19959, 20523, 21044, 6582, 21524, + 21523, 22011, 22013, 22010, 22012, 7364, 14277, 22956, 8125, 22957, + 15448, 23154, 32577, 23335, 33136, 16445, 3994, 4372, 4759, 4758, + 36806, 5209, 19458, 10539, 5207, 10540, 5208, 19960, 11157, 11153, + 19966, 28454, 5690, 11156, 11155, 11154, 5691, 11158, 11159, 20528, + 11821, 11819, 11823, 11824, 11830, 20530, 11826, 11828, 38587, + 11820, 11815, 29004, 11827, 20527, 20529, 11829, 11822, 11825, + 11816, 6150, 11818, 11817, 6149, 6151, 20532, 6585, 12498, 12500, + 12499, 12504, 6583, 21047, 12501, 12497, 12502, 12503, 6584, 6586, + 12505, 13112, 13111, 30153, 13109, 13110, 6982, 6984, 6981, 6983, + 13714, 13715, 13710, 22017, 13711, 7366, 7371, 7365, 7372, 7367, + 13712, 30750, 22014, 13713, 13709, 7373, 7369, 22016, 30748, 7368, + 7370, 22015, 13708, 22375, 14279, 7663, 22373, 22372, 14281, 7665, + 14284, 14280, 14278, 14283, 7664, 14282, 54819, 7662, 22376, 22710, + 7957, 7960, 14740, 22711, 7958, 14739, 7956, 7959, 15119, 15120, + 15121, 8126, 22958, 15122, 8127, 8286, 15451, 15452, 15450, 15449, + 15453, 8285, 15708, 15706, 15707, 15709, 15705, 15710, 15924, + 23476, 15925, 15923, 8477, 16092, 8548, 16093, 16221, 16220, 23783, + 3995, 6152, 20534, 21048, 6587, 21049, 21526, 21527, 6985, 22018, + 22378, 7667, 22377, 7666, 22959, 8287, 8374, 8478, 3996, 5210, + 6588, 22020, 15454, 18250, 26559, 26711, 17980, 18251, 9217, 26884, + 18254, 3997, 26886, 4000, 3999, 3998, 18252, 9216, 18599, 9570, + 18597, 9572, 4373, 18601, 27171, 4375, 9569, 9571, 4374, 9574, + 9573, 9575, 18600, 18598, 10018, 10016, 4762, 10015, 4767, 4764, + 4761, 19004, 4768, 19005, 4763, 4766, 46029, 4765, 10017, 19006, + 4760, 19003, 5216, 10542, 10548, 5213, 5220, 19462, 5215, 10545, + 10547, 5218, 10541, 10544, 5214, 5211, 10543, 5217, 10546, 5219, + 5212, 27932, 19464, 19463, 11161, 11164, 5693, 19970, 5703, 5699, + 11162, 19969, 19973, 5707, 5700, 5705, 5695, 28459, 5692, 5694, + 5706, 11163, 5698, 5701, 5697, 5702, 11165, 5704, 5696, 11160, + 19971, 20538, 20539, 20536, 20535, 20540, 11831, 6153, 11833, + 20544, 6155, 6157, 28457, 11832, 6154, 6158, 20545, 6156, 20543, + 20546, 6594, 12510, 6602, 12507, 21054, 6603, 6592, 21050, 12508, + 21053, 21051, 6597, 21052, 12509, 6590, 6589, 21055, 6600, 6599, + 6598, 6596, 6601, 12506, 6591, 6593, 6595, 6987, 6990, 21529, + 6994, 6988, 6993, 6991, 21532, 6986, 21531, 6992, 6989, 30755, + 13719, 7376, 7374, 22023, 13720, 30756, 7377, 7375, 13718, 13717, + 22022, 7671, 13716, 7669, 7668, 14285, 7378, 7670, 14286, 7673, + 14287, 7672, 7962, 14742, 7961, 7966, 7964, 7965, 8129, 7963, + 14741, 14288, 8128, 8130, 22961, 8288, 8289, 32586, 15711, 33325, + 8595, 8594, 4002, 17827, 17826, 9014, 5221, 17981, 9011, 9012, + 9010, 17982, 9013, 9221, 9218, 9223, 9219, 4003, 4006, 18256, + 9220, 4005, 9222, 18260, 18255, 4004, 19976, 18604, 27176, 9578, + 9580, 4378, 9576, 9579, 9577, 4376, 4379, 18602, 4377, 18605, + 19008, 10020, 10024, 10021, 19011, 4771, 19007, 4772, 19017, 10023, + 19010, 10025, 10027, 19015, 4769, 10026, 29540, 19014, 4770, 11172, + 10022, 10549, 10558, 10556, 10551, 10552, 10557, 10559, 5223, + 19466, 10554, 10550, 5222, 5224, 10553, 10560, 10555, 5708, 11175, + 11167, 11173, 11174, 5709, 19974, 11166, 11168, 10019, 11170, + 11171, 11169, 6160, 30764, 19977, 11840, 14289, 11841, 11838, + 5710, 6162, 11837, 11843, 11842, 6159, 11846, 11836, 11845, 11834, + 11844, 11839, 6161, 20548, 12517, 21058, 12512, 12518, 12513, + 12511, 12514, 6604, 21059, 12516, 21060, 12515, 6605, 6996, 6995, + 13119, 13122, 13114, 13118, 6997, 13117, 13115, 13121, 13116, + 13113, 13120, 21535, 13726, 7381, 15123, 13723, 13724, 13722, + 11835, 7380, 13727, 13721, 7379, 7382, 13725, 14290, 7674, 14291, + 14292, 22382, 14743, 7967, 15124, 15125, 22963, 22962, 15126, + 15456, 15455, 15713, 15712, 15927, 15928, 15926, 16094, 8549, + 4007, 4774, 4773, 5227, 5226, 10562, 10563, 10561, 19467, 5225, + 11179, 19980, 11180, 11176, 5711, 11177, 19979, 11178, 11849, + 11851, 11847, 11850, 6163, 11848, 6164, 21063, 12026, 6608, 6607, + 21062, 6606, 29541, 12519, 12520, 29542, 13124, 13126, 7001, 6998, + 21537, 7000, 6999, 13125, 13123, 21536, 21538, 13734, 13731, 13732, + 7386, 13733, 13728, 13729, 7383, 22026, 7384, 13730, 7385, 22027, + 14296, 22384, 14297, 14294, 14295, 7675, 14293, 31335, 22383, + 22386, 31802, 14747, 14744, 14746, 7970, 14750, 7969, 14748, 14751, + 14749, 14745, 7968, 15128, 32245, 15129, 15127, 22964, 15131, + 8131, 8132, 15458, 8291, 15130, 15457, 8290, 15716, 15717, 8407, + 15715, 32874, 15714, 15929, 8479, 23477, 16222, 16315, 16314, + 23687, 8631, 8657, 16316, 16419, 23764, 8675, 4008, 4380, 6609, + 8408, 4009, 4775, 5712, 6165, 8133, 4381, 10029, 10028, 10564, + 19473, 5230, 5228, 5232, 10566, 19470, 5231, 5229, 19472, 19471, + 19474, 10565, 5715, 11186, 19983, 5714, 5716, 11191, 5718, 11188, + 11189, 11181, 5717, 11192, 28478, 19982, 11183, 19981, 11184, + 11182, 5713, 19984, 11190, 11185, 11187, 11863, 20552, 11862, + 11860, 11852, 11867, 11855, 11865, 11872, 11864, 6173, 20561, + 6169, 11853, 20555, 11859, 6171, 20563, 11858, 6172, 6174, 11861, + 20564, 6166, 6167, 11873, 11871, 20557, 11870, 11856, 20560, 11868, + 29021, 6170, 48582, 20553, 20558, 6168, 11869, 11854, 11857, 11866, + 13161, 12530, 21069, 12523, 12542, 12551, 12526, 6620, 21066, + 12539, 6610, 6612, 6624, 12524, 21078, 21070, 6613, 6615, 6625, + 6614, 21080, 29548, 29553, 21079, 6623, 12532, 29555, 12521, 6621, + 12531, 6617, 12549, 6622, 12547, 12535, 12545, 6619, 12522, 12548, + 12543, 21065, 12550, 6611, 29547, 21068, 6626, 6616, 21072, 21064, + 12528, 21075, 12536, 12540, 21074, 12544, 6618, 12527, 12525, + 12537, 29549, 29550, 21073, 21076, 12534, 12533, 21077, 12538, + 12541, 12546, 30164, 13129, 7002, 13139, 13131, 7008, 7012, 13148, + 13156, 13141, 7004, 21545, 13145, 12529, 21546, 7005, 13152, 13157, + 13149, 21540, 13151, 13160, 13153, 13135, 13144, 21071, 21549, + 7013, 21544, 7009, 13133, 13146, 7007, 13140, 7006, 13154, 13137, + 13130, 7010, 13159, 21550, 30166, 13132, 13150, 13147, 13142, + 13128, 13127, 13136, 13155, 7011, 13158, 13134, 13138, 7003, 21543, + 21548, 21542, 7398, 7393, 13768, 13764, 13740, 7389, 22029, 22043, + 30774, 7388, 7394, 30776, 22030, 22028, 13738, 7392, 13750, 13736, + 13737, 7387, 13767, 7396, 13753, 13758, 13752, 14315, 13748, 13756, + 13754, 13741, 13735, 13762, 7395, 13763, 22035, 13757, 22036, + 13746, 13744, 13739, 22038, 22041, 22031, 13747, 13760, 13743, + 13759, 13765, 22044, 30775, 7391, 22032, 13755, 13761, 13751, + 13745, 7390, 22045, 30773, 22039, 13143, 13749, 7397, 13742, 22040, + 21541, 14320, 7678, 14319, 14317, 14335, 7682, 22392, 14332, 14324, + 14334, 14310, 14322, 22400, 7684, 22401, 14302, 22395, 14300, + 14333, 22389, 14331, 14330, 14314, 14313, 14303, 7686, 31336, + 14309, 14318, 14329, 7689, 14336, 22393, 7978, 7691, 7685, 14307, + 22394, 14316, 14299, 14301, 7676, 7688, 7681, 14308, 14323, 13766, + 7687, 14298, 7973, 14325, 14328, 7683, 22398, 14312, 7690, 7680, + 22399, 22396, 22397, 7679, 14321, 14327, 7677, 31338, 14305, 14326, + 14306, 54868, 31342, 22388, 14311, 14757, 22722, 14762, 7975, + 7977, 14768, 7971, 14782, 14774, 14763, 14764, 14773, 22723, 7984, + 14772, 14756, 14771, 14759, 14783, 7983, 7981, 14760, 22714, 14779, + 22724, 14765, 14778, 22721, 14780, 14755, 7976, 22712, 14781, + 22725, 22715, 14769, 22728, 7980, 14766, 22718, 31812, 7982, 14775, + 22719, 22720, 22716, 7974, 14761, 14776, 22713, 14770, 14304, + 14777, 14758, 22717, 7979, 22727, 15148, 31810, 7972, 14753, 31809, + 15145, 15138, 8135, 22970, 15133, 15149, 15140, 14767, 22967, + 15151, 15134, 22969, 8134, 15144, 8136, 8144, 8142, 15146, 8143, + 15136, 22976, 15137, 15142, 15147, 22965, 14752, 8137, 15156, + 15153, 15480, 15143, 15139, 15154, 15469, 15141, 32258, 8140, + 22971, 8139, 14754, 8141, 15150, 15152, 8138, 15155, 15132, 32250, + 15135, 22973, 22972, 15478, 23171, 15462, 8295, 15476, 23159, + 23160, 15460, 8296, 32594, 15471, 23158, 15467, 8301, 15477, 15461, + 15464, 8293, 15479, 23163, 15472, 15475, 8299, 8304, 8302, 15468, + 15463, 23168, 8297, 8298, 15459, 8294, 23170, 8292, 8300, 15474, + 8303, 23165, 15470, 15481, 8305, 23156, 23157, 23169, 15466, 23162, + 15473, 23344, 23479, 15730, 15745, 15732, 15739, 15465, 15737, + 15720, 15743, 8411, 15724, 15742, 15731, 32876, 23346, 8410, 23339, + 23342, 15747, 15733, 23341, 15738, 15741, 15718, 15744, 15729, + 15734, 15722, 15726, 15746, 15736, 15719, 15723, 15725, 15735, + 23340, 8409, 15728, 23347, 23348, 23350, 32880, 23345, 23337, + 15721, 23349, 15727, 15933, 15937, 8486, 15939, 23482, 8480, 32884, + 15935, 15941, 8485, 8481, 33147, 8482, 15932, 15938, 8484, 15936, + 8483, 15931, 15740, 15934, 33153, 15930, 15940, 23572, 23577, + 8550, 16101, 16104, 16100, 16102, 16103, 16097, 16098, 16095, + 23573, 23575, 16099, 16096, 8551, 8552, 23574, 16224, 23643, 16226, + 33472, 43394, 23646, 23645, 23647, 16225, 16227, 23640, 8597, + 23644, 16223, 8596, 8598, 23648, 16318, 16319, 8632, 16317, 23689, + 16389, 16388, 16390, 8659, 16391, 8658, 16392, 16420, 16423, 16422, + 8668, 16421, 33717, 23766, 23784, 8678, 8676, 8677, 8683, 16465, + 16466, 16464, 16472, 23803, 4382, 26894, 27943, 11193, 11874, + 13769, 15482, 42917, 4383, 19019, 4776, 5233, 27944, 19475, 11194, + 19987, 11195, 5719, 6177, 11876, 11875, 6181, 6176, 11877, 6178, + 6180, 6179, 6175, 20567, 6627, 21083, 21081, 12555, 12553, 29566, + 12554, 12552, 7014, 21554, 7017, 7019, 7018, 30175, 21555, 7015, + 7016, 13771, 13770, 7399, 13772, 22046, 13773, 7400, 22048, 22049, + 30779, 14344, 14342, 14789, 22405, 14340, 14341, 7692, 14337, + 14345, 14339, 14343, 14785, 22407, 22403, 14787, 22730, 14788, + 7989, 14784, 7988, 14786, 7985, 7986, 7987, 14338, 8147, 15159, + 15157, 15158, 8145, 8148, 8146, 22978, 22977, 56995, 15483, 15484, + 8306, 23174, 15748, 15750, 15749, 8412, 8487, 15944, 15943, 15942, + 4384, 17706, 8908, 9017, 3739, 9015, 9018, 9016, 26897, 18262, + 18261, 9225, 18266, 4013, 18263, 4014, 9227, 4011, 9226, 9224, + 4012, 4010, 18264, 18265, 18606, 27184, 9581, 9584, 4387, 9583, + 9582, 18609, 4386, 4385, 18608, 4389, 9585, 4388, 10034, 4778, + 4779, 4780, 10035, 10031, 4777, 10032, 27508, 10033, 10030, 27506, + 19479, 27948, 5240, 19477, 19989, 5237, 10567, 5238, 5241, 10568, + 19476, 5236, 5234, 5235, 5239, 5720, 11198, 5728, 11197, 19992, + 11200, 5724, 11199, 6189, 5722, 5725, 5721, 5726, 5727, 5723, + 19996, 20572, 11196, 6185, 11879, 20573, 11883, 20574, 20576, + 11882, 6190, 6186, 6187, 11878, 11880, 11881, 6182, 6184, 20571, + 6188, 6183, 21087, 12558, 12556, 12557, 6629, 6630, 21089, 12559, + 6628, 7020, 30177, 7022, 7021, 21562, 13162, 21563, 21561, 13163, + 13775, 22053, 13774, 22054, 31351, 7693, 7694, 14346, 7695, 22411, + 14792, 22733, 14790, 22732, 14791, 7990, 22734, 15160, 8307, 23352, + 18610, 22412, 7991, 4390, 27950, 5242, 10569, 19482, 11201, 5729, + 6191, 11884, 11886, 6193, 6192, 6194, 6195, 11885, 6633, 6634, + 6632, 7023, 6631, 12560, 29570, 21564, 21566, 7024, 13776, 14347, + 7696, 7992, 15161, 15165, 8151, 15162, 8152, 8150, 15166, 8153, + 15164, 15485, 8149, 8308, 23485, 16320, 23692, 23796, 4391, 5731, + 5730, 20585, 20583, 20582, 6196, 11888, 11887, 6197, 21093, 12564, + 6638, 6635, 12563, 6637, 12561, 6636, 21094, 12562, 13164, 7025, + 13779, 39976, 7401, 13777, 7402, 7403, 13778, 7404, 22059, 14348, + 22419, 7700, 7697, 7702, 14350, 7698, 14349, 7701, 22416, 22415, + 7699, 22420, 14795, 14797, 22737, 22738, 7993, 14796, 7994, 14794, + 14793, 32265, 15168, 15167, 8154, 15169, 15490, 8310, 15489, 15486, + 8309, 15487, 15488, 15751, 15752, 8413, 23358, 8490, 23355, 23357, + 15945, 23487, 23486, 8488, 8489, 15946, 23580, 8553, 8554, 16105, + 23581, 23650, 8633, 16322, 8635, 23693, 16321, 16323, 8634, 16393, + 33719, 16446, 23818, 18611, 4392, 21096, 6639, 30194, 13165, 21569, + 13780, 7703, 7704, 22982, 4393, 20586, 7405, 8311, 4781, 18612, + 21571, 7705, 23488, 8599, 4782, 11202, 29038, 11889, 20589, 11891, + 20587, 11890, 12568, 12565, 6640, 49541, 6641, 12566, 12567, 21098, + 13167, 13172, 7026, 13166, 13168, 13175, 13170, 13174, 13171, + 13169, 13173, 7027, 22061, 13783, 22062, 13781, 7407, 22063, 7406, + 13782, 7408, 22422, 14353, 31364, 31372, 14352, 7706, 14351, 14798, + 22743, 14800, 14802, 14801, 22744, 7995, 14799, 15176, 8155, 15174, + 15177, 8156, 32276, 15172, 22983, 15175, 15173, 15170, 8157, 15171, + 32615, 23186, 23184, 15491, 23185, 23187, 15493, 15492, 23359, + 15753, 23360, 15754, 33168, 23490, 23489, 15947, 23582, 8556, + 33337, 8555, 16228, 16229, 8636, 16324, 23695, 8669, 23808, 4783, + 6198, 13177, 13176, 13785, 13784, 30792, 22424, 7996, 14804, 14803, + 15180, 15178, 15181, 15179, 22984, 32908, 8312, 15494, 15495, + 15496, 32906, 15948, 23491, 16106, 23696, 16325, 4784, 21102, + 22064, 14354, 14805, 23188, 4785, 29582, 21103, 7028, 30211, 14355, + 8158, 15182, 8313, 23362, 15755, 15756, 8491, 16230, 4786, 5734, + 5735, 11203, 6199, 6200, 11892, 6201, 29587, 6645, 21105, 6647, + 12570, 12571, 12569, 6642, 6643, 6646, 6644, 21577, 21578, 13178, + 7029, 7030, 21575, 21579, 13792, 7411, 13787, 13786, 22068, 13791, + 7409, 22066, 30795, 7713, 31381, 13788, 13793, 13790, 13789, 22065, + 7410, 7711, 22431, 14357, 7707, 22428, 14358, 22429, 22285, 14356, + 22427, 7710, 7708, 7712, 22432, 7709, 22430, 22434, 32288, 22994, + 22753, 14806, 31851, 14811, 14807, 14810, 7997, 22755, 14602, + 14809, 14808, 22992, 8161, 8159, 8162, 8160, 15183, 15184, 15185, + 8163, 22989, 22991, 23192, 15500, 8315, 15498, 32633, 8316, 15497, + 15499, 8314, 15760, 15757, 32911, 15758, 15759, 15949, 8493, 23493, + 8492, 23492, 16108, 16107, 8557, 23654, 23655, 23653, 8600, 8637, + 8660, 16394, 16447, 16448, 4787, 11893, 29596, 12572, 13179, 13180, + 7031, 30228, 7032, 13794, 7412, 22436, 7998, 22757, 15186, 22995, + 8164, 15503, 8317, 15502, 15504, 15501, 15952, 15761, 15762, 23365, + 8414, 15951, 23496, 23494, 15950, 23495, 16109, 16449, 23786, + 4788, 23497, 23787, 4789, 19998, 5243, 10570, 11204, 19999, 6202, + 6205, 6203, 11894, 21114, 6207, 6204, 20596, 21115, 6206, 21107, + 6649, 21112, 12573, 21110, 21586, 12574, 13796, 29606, 6648, 6650, + 6651, 21111, 13182, 21587, 13181, 7033, 39335, 7034, 21584, 13183, + 13795, 7036, 7413, 30804, 7035, 7714, 13797, 7415, 7414, 13798, + 13801, 13799, 13800, 7416, 22070, 7719, 7717, 22440, 22441, 7716, + 14360, 22439, 7718, 22437, 22438, 14359, 14812, 31395, 14361, + 7715, 14362, 14815, 14813, 14814, 14819, 8168, 14818, 14821, 14820, + 14817, 14816, 31396, 7999, 23001, 31874, 23000, 23005, 15189, + 23004, 15188, 8167, 8165, 8166, 23002, 15187, 15507, 23196, 8318, + 32641, 15506, 15505, 8319, 32925, 15767, 15766, 23367, 15764, + 23499, 15763, 8416, 8415, 15768, 16110, 8558, 15954, 8494, 15953, + 15765, 23587, 16111, 8601, 23697, 8661, 16395, 33749, 16450, 4790, + 11205, 14822, 4791, 21118, 39337, 13185, 13184, 14363, 40707, + 22443, 14824, 22763, 14823, 23006, 8169, 15508, 15509, 8417, 23500, + 23657, 16451, 5244, 6209, 6208, 12575, 12577, 6653, 12576, 6652, + 6654, 12578, 21592, 21591, 21595, 13187, 13189, 13188, 21590, + 13191, 21589, 21601, 21593, 7037, 13190, 13186, 21599, 30237, + 13192, 22078, 13808, 22072, 13811, 13813, 13803, 13807, 13804, + 7418, 7421, 7423, 13805, 13806, 7422, 13809, 13812, 13810, 7424, + 22073, 7420, 13802, 7417, 22077, 7419, 22079, 22451, 7721, 14369, + 14367, 14366, 22452, 14372, 22446, 14371, 14370, 22447, 14365, + 7720, 14364, 22445, 14368, 7722, 22767, 14827, 22770, 14831, 14828, + 14830, 14829, 14826, 14832, 14835, 14833, 14834, 8001, 22766, + 8000, 14825, 14836, 15194, 15197, 15199, 15198, 23009, 15192, + 15196, 15191, 23010, 15193, 8170, 15190, 23012, 15195, 15522, + 15511, 8320, 23202, 23200, 8321, 15510, 15515, 15521, 15513, 15520, + 23199, 15517, 23201, 15516, 15519, 15514, 15512, 23198, 15518, + 15775, 15773, 8418, 15772, 15778, 15776, 23369, 8419, 15771, 15769, + 32937, 15770, 8421, 15774, 8420, 15777, 15955, 15961, 23503, 23501, + 15956, 8498, 15962, 8497, 15960, 15959, 8496, 15958, 8495, 15957, + 58046, 16117, 16119, 16118, 33349, 16115, 8560, 16112, 16116, + 16121, 23588, 16120, 16113, 16114, 8559, 16231, 8604, 23659, 16232, + 8602, 8603, 23658, 33586, 16326, 8638, 16424, 23769, 8670, 23770, + 16452, 8671, 16453, 16454, 16468, 16467, 8686, 16476, 5245, 20600, + 29610, 12580, 29608, 12579, 29609, 7038, 7039, 13193, 30821, 13814, + 14375, 22082, 22081, 7425, 7723, 14373, 31412, 14376, 7724, 22773, + 14837, 14374, 15200, 8171, 15523, 32658, 23376, 15781, 15779, + 23375, 23373, 15780, 15963, 23504, 8499, 16122, 8607, 8561, 8605, + 8606, 16327, 8662, 23771, 5246, 28494, 21603, 30826, 15201, 23590, + 23660, 10571, 20603, 6655, 21120, 13194, 21604, 21608, 7040, 13195, + 21606, 21605, 21607, 13816, 13815, 7726, 7426, 7427, 30832, 13819, + 13818, 13817, 22084, 22456, 14377, 14380, 22455, 14379, 14378, + 7725, 14841, 14839, 14838, 31888, 22774, 14840, 22775, 8172, 15203, + 15204, 8173, 23014, 15202, 23204, 15525, 15524, 15527, 8322, 15526, + 32664, 15782, 15784, 15783, 23506, 15964, 15967, 15965, 15966, + 16123, 8562, 33359, 33356, 16233, 16234, 16235, 23699, 8639, 8663, + 16455, 5247, 21610, 7428, 7727, 15205, 23377, 16124, 23701, 33674, + 16425, 10572, 23789, 8687, 5248, 14381, 22777, 15206, 15528, 23378, + 33203, 15968, 16125, 5249, 21121, 13196, 13197, 21613, 7041, 7042, + 13821, 7430, 7429, 13820, 14842, 22778, 15207, 15209, 15208, 8176, + 8175, 8174, 23379, 8501, 15969, 23507, 8500, 16127, 16126, 23702, + 8640, 16328, 5736, 12581, 29618, 21122, 13200, 13198, 13199, 30248, + 22089, 13830, 30847, 13825, 13822, 13829, 22087, 30852, 22086, + 13831, 30854, 30843, 7432, 13828, 13824, 22088, 30841, 13823, + 13827, 13826, 7431, 14392, 14387, 14385, 14394, 14386, 31434, + 14382, 31430, 14388, 22459, 22461, 14383, 14851, 14384, 14395, + 22468, 31432, 22463, 22466, 40743, 22470, 22464, 14391, 7728, + 14390, 14389, 22460, 14393, 22783, 14843, 14846, 31906, 22784, + 14845, 22779, 14853, 14848, 14852, 22781, 14850, 14849, 14847, + 31898, 14844, 31896, 8004, 8003, 31901, 8005, 8002, 14854, 31902, + 31900, 15215, 15218, 32341, 15216, 15220, 41918, 23019, 32337, + 15221, 32345, 15213, 8181, 15214, 23018, 15212, 15219, 23207, + 15211, 15210, 8180, 8178, 8177, 23021, 23020, 22782, 23016, 15217, + 15537, 15543, 8325, 15538, 42318, 15541, 15545, 8326, 15540, 32677, + 15532, 23208, 15531, 15544, 15535, 23210, 15533, 15542, 15534, + 8324, 8323, 23212, 15529, 15530, 15539, 32687, 23213, 32689, 15536, + 32670, 23390, 15787, 15790, 23392, 32671, 23382, 23384, 8179, + 23385, 23395, 23396, 32957, 23389, 32956, 23383, 15788, 15794, + 15792, 15786, 15797, 23381, 15785, 23397, 8423, 15793, 32951, + 23394, 32954, 15789, 8422, 15796, 23393, 32960, 15795, 23391, + 15972, 15971, 43006, 23511, 43000, 15978, 43003, 15974, 15977, + 8503, 33208, 33211, 15975, 15976, 33206, 15970, 15973, 8502, 23509, + 8564, 16138, 16133, 16137, 23598, 16140, 16136, 23593, 16132, + 23596, 8566, 16135, 16139, 8565, 16130, 15791, 16134, 33372, 43252, + 16131, 23595, 16128, 16129, 8563, 16239, 16241, 16244, 16240, + 16245, 23662, 16238, 23663, 16236, 23665, 8608, 16242, 8610, 8609, + 16237, 16243, 23705, 16333, 8641, 16334, 23706, 16332, 16329, + 33599, 23707, 16331, 16330, 16396, 23744, 16398, 16397, 23746, + 16428, 43760, 16427, 16426, 16429, 23772, 8679, 8680, 16473, 16477, + 23814, 5737, 11895, 12584, 21123, 6656, 12582, 21125, 19021, 12583, + 21127, 21126, 13201, 13202, 7045, 7043, 13203, 7044, 13836, 22096, + 13839, 13833, 13840, 13832, 13834, 22099, 13835, 13838, 22093, + 22100, 7435, 13843, 13842, 7433, 13837, 13841, 7434, 22478, 30865, + 22094, 22091, 22475, 14405, 31445, 7733, 22477, 14400, 7729, 22487, + 14397, 14403, 14406, 22484, 7734, 31911, 14402, 14399, 14407, + 14398, 22488, 14404, 7730, 22474, 14396, 7731, 22486, 7732, 14401, + 22483, 14872, 14859, 14860, 14863, 14861, 31918, 14855, 31919, + 22792, 14858, 14868, 14862, 22787, 31912, 8006, 31910, 14870, + 14867, 8007, 14869, 14856, 14865, 14866, 22789, 14864, 15225, + 15227, 15230, 23024, 23026, 15224, 23028, 8182, 15232, 15223, + 15233, 23029, 15229, 15231, 15235, 15228, 15236, 15226, 15222, + 8183, 23031, 15234, 8184, 8328, 32355, 23025, 23216, 14857, 15571, + 15562, 8330, 15558, 8331, 23224, 23219, 15567, 15561, 15551, 8329, + 15564, 15559, 15560, 23222, 15546, 15553, 15568, 23217, 15565, + 42330, 15557, 23223, 15569, 15552, 15547, 15566, 23221, 15549, + 15563, 15554, 15570, 15550, 8327, 15548, 15555, 15556, 15804, + 23220, 15802, 32972, 15807, 23400, 15819, 15810, 15803, 15799, + 15812, 15805, 15808, 15801, 15815, 15798, 15806, 15811, 15813, + 15816, 15800, 23401, 15820, 15821, 15814, 15818, 15809, 15994, + 15997, 23520, 8504, 23516, 15996, 16001, 15999, 8505, 15990, 15980, + 15979, 8507, 15992, 15993, 15989, 15981, 23517, 15986, 15817, + 33216, 15982, 8506, 15988, 23521, 15987, 15983, 15995, 33217, + 15984, 16145, 15998, 16000, 15991, 15985, 16146, 16148, 16142, + 8567, 33374, 16155, 16153, 8568, 16152, 16151, 16144, 16141, 16147, + 16156, 16143, 16149, 43276, 16254, 16259, 16249, 16252, 8611, + 16256, 33501, 16263, 16150, 33505, 16250, 16260, 16264, 16255, + 16248, 16258, 33506, 16257, 16262, 16261, 16154, 16253, 16247, + 16251, 8642, 8643, 16246, 23669, 16345, 16336, 16344, 16341, 16342, + 16335, 16338, 16346, 16340, 16339, 16337, 23708, 16343, 33611, + 16399, 33677, 16400, 23748, 16402, 16401, 16404, 16403, 16431, + 16430, 16456, 23790, 16457, 23797, 16469, 8684, 8688, 23805, 16478, + 8689, 5738, 30871, 40760, 8424, 16002, 23522, 8644, 8645, 5739, + 12585, 21128, 6657, 13844, 22101, 22490, 14409, 14410, 14408, + 14874, 14873, 8008, 15238, 14875, 15237, 32361, 23033, 15573, + 8332, 8334, 15572, 23226, 32702, 8333, 23406, 15822, 15824, 15823, + 16003, 8508, 23525, 8612, 16347, 16405, 23798, 23812, 16482, 5740, + 18086, 13204, 30875, 7436, 22104, 22103, 22491, 14412, 14411, + 22795, 14876, 23035, 23034, 32711, 8335, 8425, 16157, 16474, 5741, + 7046, 21621, 7437, 15574, 23407, 16265, 6210, 20001, 22493, 22492, + 31926, 14877, 23037, 32365, 8664, 6211, 7438, 8009, 16266, 6212, + 20002, 13845, 7736, 14413, 14414, 22494, 7735, 31459, 14878, 8013, + 8011, 8012, 8010, 15239, 8185, 32715, 23227, 15826, 15825, 15828, + 15827, 8426, 16004, 33235, 16006, 16005, 8509, 16158, 23602, 16267, + 16268, 8613, 16406, 16432, 8681, 33780, 11896, 14415, 14879, 15575, + 12586, 18317, 14880, 15241, 15240, 23038, 23230, 23231, 23527, + 16269, 8646, 23750, 16407, 16433, 6658, 13846, 13847, 30885, 14416, + 6659, 21129, 8186, 15242, 23233, 16008, 8510, 16009, 16007, 16270, + 23751, 16348, 33691, 6660, 14883, 14882, 14881, 15243, 23040, + 23039, 15247, 15246, 15245, 15244, 8187, 15576, 15830, 8427, 15829, + 16010, 16161, 16160, 8569, 16159, 16273, 16272, 16271, 23670, + 33781, 7047, 31462, 14417, 8014, 31933, 15577, 15578, 16162, 16274, + 33523, 23714, 16349, 16408, 16458, 16484, 7048, 8015, 15248, 15579, + 16011, 16275, 17939, 7440, 22495, 14884, 15249, 15580, 15581, + 15582, 15835, 23409, 15831, 8511, 15834, 15833, 8428, 15832, 8430, + 8429, 16013, 16012, 8512, 8513, 33245, 23529, 8571, 16163, 8570, + 33528, 16278, 16279, 16277, 16276, 8648, 33625, 16350, 16351, + 16352, 8647, 16409, 16412, 16411, 16410, 23800, 33782, 16483, + 7737, 22800, 32724, 8195, 15836, 16014, 23604, 8572, 16164, 33798, + 23815, 16485, 7738, 23444, 33764, 14885, 23530, 16165, 23752, + 16434, 23774, 10, 21, 23, 31, 32, 35, 36, 39, 40, 43, 44, 47, + 48, 51, 52, 55, 56, 59, 60, 100, 101, 104, 105, 102, 103, 13, + 14, 15, 17, 18, 19, 20, 61, 62, 63, 64, 65, 66, 106, 107, 108, + 124, 125, 126, 128, 127, 159, 169, 170, 171, 9, 75, 160, 165, + 76, 29, 30, 77, 109, 1, 110, 4, 156, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 7, 6, 115, 117, 116, 8, 166, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 157, 98, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 33, 155, 34, 163, 164, 161, 35348, 44194, 44192, 44193, 44213, + 44214, 35362, 17707, 44284, 35388, 44399, 44397, 44398, 44532, + 44618, 35546, 44626, 44622, 44954, 44957, 44955, 45471, 36835, + 37038, 47764, 53016, 30923, 44191, 44181, 44336, 26561, 44400, + 44619, 44958, 35720, 35997, 45443, 46064, 46065, 47656, 47688, + 38727, 44197, 35356, 44286, 44401, 48645, 26508, 35349, 44183, + 44198, 44215, 35389, 44289, 44319, 44288, 44216, 44290, 44287, + 26607, 26606, 35441, 35442, 44402, 44961, 44522, 44609, 44620, + 44621, 45248, 44959, 46598, 45320, 44960, 45444, 36354, 46069, + 46066, 46503, 46068, 46808, 47657, 47689, 47690, 38029, 35346, + 35345, 44185, 44184, 35344, 35354, 44217, 35363, 44292, 44291, + 44283, 35390, 44405, 44403, 44404, 44962, 45319, 26981, 45446, + 45447, 45445, 46070, 46811, 36836, 46810, 48646, 38686, 49604, + 49603, 55072, 56500, 57177, 35347, 35350, 26515, 35351, 35355, + 44218, 44219, 44220, 44406, 35547, 44623, 44963, 36837, 47691, + 54077, 44186, 44187, 44188, 44221, 44624, 44407, 44408, 44627, + 26902, 35721, 26901, 45449, 35998, 45681, 46072, 46071, 46812, + 44409, 35548, 35722, 44964, 45451, 45450, 46074, 36447, 27510, + 46075, 46076, 47692, 46814, 46813, 27953, 36838, 47694, 47693, + 47695, 28496, 48234, 48647, 39372, 53017, 53574, 53019, 53018, + 53053, 54080, 40094, 54079, 54078, 56496, 56501, 44199, 44200, + 44223, 44222, 17750, 44294, 44293, 44295, 26563, 26613, 26612, + 26610, 44414, 26617, 44415, 35444, 44412, 44411, 26616, 44410, + 35445, 44416, 35443, 35549, 44629, 26721, 44630, 44639, 44635, + 44631, 26719, 44632, 44634, 44633, 44628, 35550, 44638, 44966, + 44968, 26909, 35727, 44969, 35728, 18281, 35729, 26906, 26904, + 44973, 44967, 44975, 44970, 44977, 35725, 44965, 44976, 44971, + 44972, 44974, 35723, 35726, 35999, 45469, 45458, 36365, 27187, + 45468, 45456, 45455, 36004, 27192, 45462, 36001, 36000, 36003, + 45467, 45454, 45453, 45470, 45461, 45452, 45457, 45460, 45463, + 45465, 45464, 36005, 27514, 36363, 27518, 46081, 36358, 46080, + 36367, 27517, 27519, 36362, 46077, 36356, 46082, 36361, 46060, + 46085, 46086, 46078, 46079, 36355, 46084, 36357, 36360, 36368, + 36364, 36366, 27511, 46822, 46824, 46823, 27958, 27957, 46827, + 46819, 36848, 46830, 36840, 46825, 46818, 36849, 36839, 27955, + 46821, 46828, 46834, 46829, 46820, 27960, 46831, 47680, 46835, + 46974, 46836, 46826, 36843, 47442, 36846, 36850, 46815, 46817, + 36842, 36847, 36841, 46816, 46833, 36845, 47698, 47704, 37371, + 37366, 47701, 37363, 37367, 37384, 37368, 47697, 37370, 37365, + 47711, 28502, 37369, 47707, 47705, 47700, 47703, 47708, 47713, + 37364, 37372, 47696, 47702, 28508, 47706, 47709, 37362, 47699, + 37130, 48655, 29633, 38033, 38031, 48648, 36844, 38037, 38035, + 48653, 38034, 48660, 48658, 29059, 48657, 48663, 48650, 29060, + 38039, 48649, 38030, 48652, 48659, 48662, 49207, 48654, 48651, + 47712, 38032, 38036, 38038, 29056, 48661, 49618, 38040, 53029, + 29629, 38687, 49605, 49610, 38041, 49612, 29634, 49621, 29626, + 49622, 49609, 49608, 49623, 53498, 38689, 49624, 49968, 49614, + 49616, 49606, 29625, 49607, 49611, 49615, 49617, 29631, 38201, + 30267, 30263, 49613, 53030, 53032, 53024, 53021, 53020, 39378, + 30265, 53026, 53027, 39374, 53025, 39380, 39379, 53022, 53023, + 39373, 53028, 30268, 39376, 53031, 39375, 39422, 40095, 40101, + 54081, 30887, 30894, 40099, 30891, 30893, 40096, 40097, 40102, + 40098, 55077, 39377, 40780, 40781, 31466, 31465, 55075, 55074, + 55076, 31467, 55073, 55827, 31940, 31938, 31939, 55829, 55828, + 55826, 41376, 31941, 41374, 41375, 41377, 41965, 41969, 32725, + 41968, 41970, 56666, 41967, 41966, 42203, 57706, 57179, 42374, + 57178, 57223, 33008, 33007, 42747, 58137, 42375, 33006, 58136, + 43068, 33401, 58504, 43305, 33701, 44224, 26567, 26619, 44418, + 44419, 44640, 44642, 44643, 35552, 44641, 44980, 44979, 44978, + 44982, 44981, 45472, 45473, 36369, 46087, 36851, 36852, 47714, + 37373, 48664, 38690, 53035, 53033, 39382, 39381, 53034, 40103, + 54082, 40782, 55830, 41378, 56502, 41971, 41972, 42376, 43478, + 44201, 35365, 35364, 44296, 44421, 44420, 35553, 44644, 35555, + 36006, 36007, 27521, 46088, 46837, 47715, 48665, 38042, 29062, + 49625, 40783, 44202, 44225, 35366, 44212, 44236, 35391, 44394, + 26622, 44422, 44647, 44649, 35556, 44645, 44983, 45476, 45474, + 36008, 45475, 45448, 45680, 46091, 46090, 46092, 46089, 46838, + 47718, 38043, 47716, 47717, 38044, 48666, 29635, 49626, 41379, + 56503, 56504, 26520, 44226, 44228, 44298, 26568, 44297, 35393, + 44299, 35392, 44425, 44423, 44594, 44652, 44650, 44651, 35557, + 44927, 35731, 44984, 44985, 45477, 46093, 46094, 36370, 36371, + 46840, 47720, 20014, 47719, 29064, 38045, 49628, 49627, 53036, + 40104, 54083, 31942, 58138, 35367, 44300, 44426, 26624, 35446, + 35732, 45478, 46841, 36854, 47721, 47722, 48667, 49629, 39660, + 54084, 55831, 56505, 57182, 42748, 43306, 44427, 26625, 35558, + 44653, 26723, 26916, 26917, 44987, 44988, 35734, 36010, 27198, + 27199, 36013, 36009, 36011, 45480, 45479, 36373, 27522, 36372, + 36012, 46096, 36374, 46097, 36855, 46842, 46843, 27963, 47723, + 37377, 37375, 37376, 37374, 28511, 38051, 38046, 38048, 38049, + 38047, 38050, 48668, 49630, 39386, 38691, 53038, 39385, 39384, + 39383, 53037, 54086, 31469, 54087, 40784, 41381, 41380, 41382, + 55832, 41973, 41974, 57707, 43069, 26516, 44229, 44239, 35394, + 44302, 26570, 44429, 44428, 44430, 44431, 44656, 44654, 44655, + 26921, 44989, 26919, 44990, 44991, 44992, 45483, 45481, 45482, + 46098, 46254, 46845, 46846, 46844, 47724, 47727, 47725, 54088, + 26521, 35368, 44230, 44231, 44304, 35395, 44303, 44436, 44432, + 44433, 44434, 35447, 44657, 44995, 44994, 45484, 45485, 46055, + 46099, 46847, 46848, 37378, 49631, 53095, 55080, 40787, 41975, + 57275, 44204, 26539, 44232, 35369, 35370, 44233, 26540, 44234, + 35396, 35397, 26573, 44309, 35398, 44308, 44305, 44310, 26627, + 44441, 35451, 35449, 35448, 26628, 26626, 44439, 44438, 35452, + 44442, 44440, 35450, 26630, 26631, 44437, 26728, 44660, 26730, + 35560, 26729, 35569, 35568, 35566, 35563, 44658, 35562, 35565, + 35564, 44659, 44661, 35561, 35567, 45004, 35738, 35740, 26924, + 26926, 18295, 45001, 26928, 44999, 45000, 45007, 45486, 45005, + 35735, 35741, 45006, 35737, 45002, 35739, 45003, 44997, 44996, + 35736, 44986, 27204, 36014, 27202, 45499, 45492, 45497, 27205, + 45496, 27201, 27203, 45489, 45495, 45498, 45491, 45494, 45493, + 45490, 36015, 45488, 46100, 27527, 27524, 36382, 36380, 27526, + 27530, 46105, 46109, 36379, 46110, 27523, 36383, 46108, 27528, + 46107, 46106, 46103, 46102, 27529, 36381, 46104, 46111, 46101, + 36384, 36376, 36378, 36377, 27965, 36858, 27966, 36857, 46849, + 27971, 28522, 27970, 46852, 46850, 37379, 27964, 36385, 46851, + 46853, 46854, 28516, 37380, 47734, 47730, 28519, 28520, 37381, + 37385, 28523, 28517, 28514, 28513, 47732, 47729, 47733, 37382, + 37383, 47731, 28521, 48259, 47735, 37386, 29070, 48676, 38058, + 48674, 29066, 38059, 48675, 38052, 29068, 29067, 38053, 29071, + 38054, 48672, 48671, 48669, 48677, 48670, 38057, 38056, 38692, + 29636, 49635, 38698, 49633, 49632, 29069, 29641, 38699, 38693, + 38696, 29638, 29645, 49642, 49640, 49639, 38695, 39387, 49637, + 38694, 49641, 38697, 49636, 49634, 49638, 39388, 39392, 30271, + 39389, 39391, 53043, 53044, 53041, 53045, 53042, 39390, 53039, + 53167, 53040, 30895, 54090, 40788, 54091, 54095, 54094, 54093, + 40106, 40108, 40107, 40105, 54089, 54092, 53046, 40562, 40791, + 31470, 40790, 40789, 55081, 31473, 55833, 41383, 41384, 55082, + 41385, 56508, 56507, 56506, 57183, 57184, 42749, 57708, 43307, + 33532, 59138, 59137, 44205, 35371, 44235, 26574, 35400, 35399, + 35454, 35455, 35456, 44663, 26732, 35570, 44662, 26736, 35748, + 35744, 45008, 35747, 45009, 36017, 27207, 45501, 36018, 36016, + 45503, 46112, 46116, 27531, 36390, 36386, 36388, 36389, 36387, + 46113, 46114, 36860, 46857, 46855, 46858, 46859, 46860, 46856, + 37390, 37387, 37389, 37392, 37388, 47736, 47737, 47738, 38061, + 38060, 29072, 48679, 48678, 38062, 29647, 38703, 38701, 38702, + 38706, 29646, 38705, 49645, 49643, 49644, 39396, 39393, 30273, + 39394, 39395, 54096, 40793, 40792, 40794, 55083, 55085, 55084, + 41387, 55835, 55836, 41977, 41976, 57185, 42750, 58505, 43308, + 33632, 59528, 35372, 44312, 44313, 35458, 35457, 35459, 44664, + 35571, 35572, 26933, 45012, 45011, 45505, 27209, 45506, 45507, + 45504, 27533, 46119, 46118, 46121, 46122, 46117, 46120, 36392, + 27978, 46861, 36391, 36861, 36862, 46862, 28527, 48680, 27976, + 38064, 49646, 29648, 38707, 38708, 30900, 54097, 54098, 55086, + 55087, 40795, 57186, 44189, 26541, 44315, 44665, 44668, 35573, + 44666, 44667, 27210, 45510, 45512, 45508, 45509, 45511, 46863, + 46123, 46063, 47739, 29074, 55837, 42505, 44190, 35460, 44445, + 26636, 44444, 44669, 26737, 44670, 45014, 35749, 35750, 27212, + 45515, 36020, 45514, 36019, 45513, 45518, 45516, 36393, 46125, + 46124, 36394, 46864, 28528, 48682, 47740, 46126, 38065, 29649, + 49648, 49647, 39397, 39398, 39399, 40111, 55088, 32378, 55838, + 57187, 59010, 59348, 35461, 44446, 35575, 44672, 45517, 36021, + 46127, 57188, 58139, 44237, 35401, 35402, 44316, 44447, 26637, + 26638, 44450, 44449, 35463, 35462, 44451, 44674, 35576, 44675, + 44452, 44676, 35751, 45015, 45018, 45019, 45017, 45016, 46128, + 46129, 27984, 27982, 27983, 48685, 48684, 48686, 48688, 39400, + 53047, 55089, 56509, 57709, 59011, 59139, 44317, 44454, 44453, + 44455, 26739, 35578, 35577, 44677, 26936, 26935, 45023, 45022, + 45024, 45021, 45025, 45020, 45027, 27215, 27214, 36024, 45520, + 46131, 27536, 36395, 46130, 46133, 46807, 46132, 46866, 46865, + 46134, 46867, 47742, 47743, 47744, 37442, 48689, 38710, 49649, + 53048, 59262, 35373, 26542, 44238, 26639, 45029, 44457, 44456, + 26741, 45522, 36025, 45521, 27216, 46135, 45523, 47745, 36396, + 38066, 48690, 38711, 55839, 35374, 35403, 44458, 44320, 44318, + 44321, 35404, 26640, 35464, 44459, 44460, 35468, 35469, 35466, + 35467, 44679, 35579, 44678, 35580, 44617, 45032, 45031, 45034, + 45033, 35752, 26939, 45030, 36026, 27217, 45533, 45528, 45531, + 45532, 45527, 45525, 45529, 45530, 27218, 45526, 46142, 46143, + 27538, 36397, 27539, 46138, 46136, 46139, 46141, 46140, 46137, + 36398, 46875, 46870, 27988, 46874, 46871, 46872, 36863, 46873, + 27987, 28531, 47749, 47747, 28532, 47748, 47746, 47750, 47751, + 38067, 38068, 48695, 48694, 48691, 48692, 29076, 29650, 49651, + 49654, 49650, 49655, 38712, 49653, 49656, 49658, 49657, 49652, + 53050, 30275, 39401, 53051, 53049, 53431, 40112, 54100, 54099, + 55504, 57252, 57710, 43479, 58797, 59426, 59520, 35357, 44207, + 44208, 44240, 44323, 44322, 26643, 44464, 44462, 26642, 44463, + 44681, 35559, 45037, 45036, 45038, 45039, 45534, 45535, 27219, + 46145, 46144, 46194, 46073, 37393, 47753, 47755, 48381, 47754, + 38070, 48696, 38069, 49659, 50183, 53052, 40113, 57037, 44243, + 35375, 44241, 35377, 44245, 44242, 44326, 26579, 35405, 44327, + 35406, 44324, 44325, 44466, 26644, 44465, 35471, 44467, 35470, + 44468, 44685, 44683, 35581, 26743, 45042, 45040, 45043, 45041, + 45540, 45537, 45539, 45538, 45536, 45859, 36023, 46150, 36399, + 46151, 46148, 46146, 46149, 46788, 46881, 46883, 36865, 36866, + 46880, 46878, 46886, 46879, 36400, 46877, 46884, 46885, 46809, + 46882, 28533, 37394, 47758, 47756, 47757, 29080, 29079, 48698, + 48699, 48697, 29078, 47759, 48750, 48700, 50008, 49661, 49660, + 38713, 48970, 39404, 39405, 39403, 54102, 22114, 40151, 54101, + 55092, 55091, 31944, 56511, 56510, 33010, 58140, 43309, 58798, + 58799, 35378, 44247, 26546, 26545, 44246, 35408, 44330, 44329, + 44335, 44331, 44334, 44328, 44307, 44333, 35476, 44474, 35474, + 44475, 26646, 35475, 26649, 44473, 26648, 26647, 35473, 44469, + 44471, 35472, 44470, 44472, 26749, 44696, 44687, 44694, 44693, + 35585, 26753, 26756, 35590, 35583, 44689, 26750, 26745, 26751, + 35587, 44690, 35588, 26748, 35584, 44688, 35591, 44692, 44691, + 44697, 44686, 35582, 35586, 35589, 26943, 26945, 45047, 35763, + 35755, 26942, 45045, 35764, 35756, 35758, 26948, 35767, 45044, + 35769, 36040, 45052, 35759, 35762, 35761, 35768, 35760, 35765, + 45054, 35766, 35757, 45046, 35754, 45049, 45048, 45051, 36401, + 36039, 36051, 36046, 36029, 36050, 45547, 45541, 36032, 27224, + 27223, 36048, 36038, 36044, 36043, 36047, 36041, 36042, 36030, + 36034, 36045, 26949, 45552, 45553, 36052, 45542, 36027, 45550, + 45549, 36049, 45543, 45551, 45545, 36033, 36035, 36036, 36037, + 27226, 45548, 45546, 27221, 36028, 36031, 45544, 46162, 27545, + 27552, 27553, 27548, 46155, 36423, 36410, 36408, 36421, 36406, + 36415, 36431, 36418, 27551, 36422, 36429, 36427, 27543, 46156, + 46157, 36426, 27544, 36409, 46160, 46161, 36432, 46159, 36428, + 36433, 36416, 36434, 36413, 36430, 46497, 46154, 36411, 36414, + 36417, 46158, 36425, 36420, 36402, 36403, 36404, 36419, 36424, + 36407, 36405, 36435, 36885, 27990, 46898, 46895, 28005, 46890, + 28002, 36896, 36888, 36891, 27995, 28006, 36883, 46897, 36869, + 36889, 36884, 36893, 36867, 36892, 36881, 36874, 46892, 46896, + 46904, 46901, 46905, 36873, 36875, 46887, 36871, 46893, 46902, + 36870, 46894, 36872, 46888, 36880, 36887, 46906, 36897, 46891, + 36879, 36868, 36886, 36877, 36882, 36876, 36895, 46900, 19521, + 36898, 36894, 46899, 46889, 36878, 36890, 28534, 28546, 47769, + 37415, 47774, 47781, 37404, 47772, 37409, 28535, 37419, 37396, + 37398, 28539, 37405, 28536, 37420, 37411, 28547, 28540, 37414, + 37418, 28551, 37427, 28542, 37423, 37425, 47765, 47779, 38071, + 47762, 47766, 47775, 37413, 47771, 47782, 47777, 28549, 37417, + 37400, 37401, 37402, 37408, 37416, 37412, 47778, 37422, 37426, + 47780, 37424, 37421, 37410, 47773, 48716, 38072, 29086, 38076, + 29091, 37399, 48724, 29085, 29081, 49665, 38082, 48710, 48712, + 38079, 38093, 48717, 48707, 38083, 38073, 38090, 38100, 48722, + 48714, 38089, 38092, 29090, 38095, 29082, 38088, 38081, 29092, + 38084, 29094, 38086, 38087, 48718, 48723, 48701, 48721, 48720, + 38096, 48715, 38077, 38085, 38080, 48703, 48727, 48705, 48702, + 48704, 38099, 48708, 48706, 48711, 48719, 48725, 38097, 38091, + 38074, 38078, 38075, 49669, 49663, 49674, 29654, 49678, 49668, + 49680, 49679, 29655, 49675, 38716, 38720, 38718, 38725, 49666, + 49670, 29653, 29661, 38724, 29657, 38719, 49664, 38714, 38715, + 38722, 49681, 49662, 49672, 49673, 38721, 49676, 49671, 38717, + 38723, 49677, 38728, 49667, 39406, 38726, 53064, 39412, 53068, + 53065, 39410, 53071, 53057, 39417, 39423, 39414, 53062, 39415, + 53070, 53063, 39407, 53058, 39416, 53069, 53072, 39418, 30282, + 53074, 39411, 53055, 39409, 40802, 53073, 30278, 53067, 38730, + 53066, 53056, 53054, 53081, 53075, 53077, 39419, 53080, 54114, + 39408, 30285, 39424, 39421, 53078, 53496, 53076, 53060, 53059, + 39413, 39420, 54123, 30909, 40127, 54109, 40125, 54121, 30913, + 40117, 40131, 54113, 30903, 30914, 30901, 40124, 30911, 40122, + 40115, 54124, 54108, 54117, 40121, 54112, 40119, 40114, 40128, + 40123, 40126, 54106, 40118, 40116, 54120, 54105, 54104, 30904, + 30915, 40130, 54119, 54111, 54110, 54115, 54122, 40120, 40129, + 31485, 40801, 40796, 55096, 55093, 55103, 55104, 40798, 40806, + 31476, 31481, 40803, 31482, 55094, 40804, 31484, 55100, 55098, + 55097, 40799, 31480, 55101, 55108, 55107, 55099, 55105, 55102, + 55095, 40805, 40797, 31949, 55844, 55850, 31948, 41389, 55846, + 31946, 31951, 41397, 31952, 41979, 41388, 41395, 41394, 31953, + 55845, 31950, 31954, 31947, 55849, 41392, 55842, 55848, 55843, + 55841, 55847, 41393, 55840, 41390, 56513, 32381, 40800, 56520, + 56518, 56516, 41981, 41982, 32383, 41978, 56521, 56519, 56512, + 56514, 56517, 32382, 41983, 56515, 56665, 56522, 42383, 42384, + 42378, 42380, 42379, 57190, 57192, 57194, 57191, 57189, 57193, + 57195, 42381, 57712, 42756, 42754, 33014, 42753, 57711, 42752, + 57715, 42755, 57714, 33012, 42751, 57713, 58148, 58149, 43070, + 58144, 58145, 58146, 58143, 58141, 58142, 33249, 58147, 58508, + 58509, 58507, 58506, 43480, 43481, 33533, 58800, 58802, 58801, + 58803, 43310, 43618, 33634, 59012, 59143, 59142, 59145, 59141, + 59144, 44248, 44249, 26585, 44479, 44477, 35478, 44478, 44476, + 35477, 44701, 45555, 45055, 44705, 44703, 44704, 44706, 44709, + 44707, 44698, 44702, 44699, 44700, 44708, 35772, 45060, 45057, + 45058, 45059, 45327, 45056, 35771, 36053, 36055, 45559, 45558, + 36054, 45554, 45557, 45556, 36437, 46166, 46163, 46165, 36436, + 46164, 36438, 36901, 46910, 36902, 46909, 46908, 46907, 36899, + 46911, 37430, 47783, 47784, 37428, 36900, 47785, 37429, 38101, + 48728, 38102, 48730, 48731, 38103, 48729, 49683, 49687, 38731, + 49684, 49689, 49685, 49686, 53084, 53085, 53083, 30916, 55111, + 55109, 55110, 32384, 57196, 57717, 57716, 26547, 35379, 44337, + 44338, 44482, 44481, 44723, 26759, 44719, 44715, 44711, 44722, + 44710, 44718, 44720, 44713, 44716, 44721, 44717, 44714, 44712, + 35593, 35592, 35594, 35595, 35596, 26957, 45072, 45064, 45069, + 45063, 26954, 45067, 26959, 45065, 35773, 45074, 44682, 45066, + 26958, 45073, 45068, 45070, 45071, 45062, 45061, 35774, 36060, + 45561, 36056, 45563, 45560, 36057, 27228, 45570, 45562, 45569, + 45571, 45982, 45566, 45567, 45565, 36062, 36059, 36063, 36061, + 36058, 36439, 27559, 46173, 27557, 27561, 46171, 46181, 46175, + 46182, 46183, 46170, 46167, 46179, 46168, 46185, 46169, 46184, + 46176, 46177, 46178, 36441, 46180, 46172, 36440, 36443, 28010, + 46912, 28009, 36908, 46925, 46918, 36906, 46915, 36442, 46924, + 46921, 36905, 28013, 28014, 46919, 46920, 36907, 46922, 46926, + 28011, 46913, 46914, 36903, 36904, 20068, 48737, 28563, 47790, + 28555, 47788, 28561, 28557, 47794, 47799, 28566, 47787, 47789, + 47796, 37431, 46923, 47798, 29103, 37436, 28564, 48580, 37435, + 47800, 47793, 47792, 28565, 47795, 37434, 37437, 47791, 37432, + 37433, 37438, 38107, 48745, 48734, 48744, 38114, 29097, 49697, + 48741, 38113, 48740, 38105, 38112, 38104, 48743, 48739, 38110, + 38111, 29098, 38108, 48732, 48735, 48742, 48736, 48738, 38115, + 38109, 38106, 38736, 38735, 38734, 49691, 29669, 49699, 49701, + 49696, 38737, 49695, 38733, 49702, 49692, 49706, 49698, 49682, + 29667, 49700, 49693, 38732, 38738, 53097, 30287, 30288, 53094, + 30289, 39428, 39429, 53090, 53103, 30290, 53102, 53099, 39430, + 39432, 53086, 53100, 53091, 53092, 53093, 39466, 53098, 53096, + 53088, 39431, 39427, 39425, 53087, 39426, 54128, 54130, 54125, + 30918, 30921, 30920, 54126, 54129, 40133, 54131, 40134, 40132, + 54880, 54132, 54127, 30917, 55118, 31488, 55112, 40809, 55114, + 55119, 55117, 55120, 40807, 54133, 55817, 55115, 55116, 31489, + 40810, 55855, 41398, 55113, 41400, 55854, 55852, 55853, 40811, + 41399, 41401, 56527, 56524, 41984, 56532, 56526, 56528, 56531, + 56896, 56525, 55856, 32730, 57197, 42386, 57723, 33015, 57719, + 57718, 57722, 57720, 42759, 57721, 42757, 42758, 58150, 43071, + 58152, 43072, 58510, 58151, 58804, 43482, 43866, 59465, 59535, + 59548, 44339, 45572, 44724, 45075, 36445, 46187, 45573, 46186, + 36444, 46927, 47801, 48748, 48747, 49705, 50567, 49703, 49704, + 53105, 53104, 54134, 55857, 56242, 55858, 56533, 56534, 56708, + 58153, 35358, 44340, 44484, 44483, 44725, 46188, 46928, 46929, + 48749, 44486, 44485, 35599, 35598, 26962, 45076, 36909, 46930, + 46933, 36446, 46932, 46931, 38116, 48751, 49707, 49708, 39433, + 54135, 54136, 55121, 56535, 55861, 55859, 55860, 56536, 57198, + 44341, 44342, 44487, 44727, 44726, 45077, 36064, 36449, 27562, + 36448, 46191, 46190, 46192, 36450, 28015, 36912, 46934, 36910, + 36911, 36913, 47803, 37441, 37445, 37443, 37444, 38117, 48752, + 38119, 38118, 48754, 29674, 49710, 49711, 49709, 38739, 38741, + 53106, 39434, 55862, 40812, 40813, 56537, 44250, 44251, 44343, + 35429, 44489, 26653, 44492, 44493, 44491, 44490, 26762, 26763, + 26765, 44729, 44728, 26969, 35777, 26967, 45078, 45079, 27232, + 45085, 45081, 45082, 45083, 45084, 45086, 26972, 45080, 44956, + 27233, 27231, 36066, 36067, 36065, 36453, 46193, 46196, 36451, + 36454, 46195, 27564, 36452, 36915, 27563, 46938, 46941, 19551, + 46935, 46940, 46937, 46942, 46936, 28018, 36914, 29107, 47807, + 47810, 47812, 47809, 47804, 47811, 37446, 47808, 28571, 28569, + 37447, 47806, 48755, 48756, 29106, 38120, 38121, 38122, 49713, + 29676, 38742, 29675, 49712, 38743, 30291, 53111, 53107, 53110, + 54141, 53109, 39436, 53108, 29677, 39435, 54142, 40135, 54137, + 54138, 31490, 54139, 55123, 55122, 40814, 31503, 31956, 42387, + 57724, 43311, 58805, 35409, 44494, 26657, 44495, 26656, 35480, + 44496, 35479, 44733, 26767, 26770, 44731, 44732, 44734, 44730, + 35601, 35602, 35600, 26975, 45090, 45089, 35783, 26973, 35781, + 26976, 35778, 35779, 26977, 45088, 45087, 35785, 35782, 35786, + 35784, 27237, 36069, 45581, 45583, 45584, 27234, 27240, 36071, + 27235, 36068, 45575, 45586, 45579, 36076, 45589, 45578, 45582, + 27241, 45580, 45585, 45574, 45588, 36074, 27239, 36075, 36072, + 45576, 45587, 36070, 36073, 45577, 19132, 36457, 46200, 36459, + 36462, 36456, 46206, 36455, 46207, 46201, 46202, 46205, 46199, + 36458, 46204, 46203, 36464, 36461, 36460, 36463, 36465, 46949, + 46955, 46943, 46944, 36921, 46945, 46946, 46952, 36920, 36924, + 46950, 28022, 46951, 36922, 46956, 46954, 28021, 46948, 46947, + 36917, 36918, 36919, 36916, 28572, 47817, 28573, 37469, 47814, + 28576, 37451, 37468, 47819, 47821, 37458, 47820, 47815, 37459, + 37452, 37466, 37463, 37450, 37454, 37465, 47818, 37467, 47813, + 37448, 38123, 37462, 37455, 37461, 37460, 37453, 37456, 37464, + 47822, 38132, 38127, 38130, 38124, 29114, 38126, 48758, 29111, + 29109, 48762, 48760, 49723, 38129, 38128, 48761, 48757, 48759, + 48763, 38125, 38131, 38133, 48765, 29689, 38745, 29683, 49722, + 29690, 49714, 38747, 53118, 29692, 49716, 29688, 38750, 29687, + 49715, 49719, 29691, 29678, 49717, 38746, 38749, 38748, 53115, + 38744, 49718, 39444, 39442, 30292, 39439, 53124, 39440, 30298, + 30294, 53121, 30297, 53114, 49720, 53113, 55132, 39437, 39445, + 49721, 53116, 53123, 53122, 53117, 53112, 39443, 39438, 30296, + 53119, 39441, 53120, 40145, 40140, 54148, 54143, 40146, 40143, + 54144, 30925, 54151, 40139, 54154, 40136, 54153, 54155, 40137, + 54149, 54150, 54146, 54145, 54147, 40144, 40138, 40142, 54152, + 55126, 55135, 55130, 30924, 55128, 31492, 55134, 55125, 40817, + 40815, 55127, 55129, 55131, 40816, 31494, 55133, 55136, 55124, + 41402, 31957, 55866, 41403, 41404, 55865, 55867, 55864, 55868, + 55863, 41986, 32386, 56538, 56543, 56541, 56539, 41988, 41987, + 57200, 42388, 42389, 42390, 57725, 42761, 57726, 42760, 58157, + 43073, 58156, 58158, 58154, 58155, 58159, 43312, 58511, 58807, + 58808, 58806, 58809, 43619, 59264, 43778, 26526, 44345, 35410, + 44346, 44498, 44497, 44735, 44736, 35605, 26771, 35604, 27244, + 45593, 45092, 45091, 45093, 45592, 45590, 45595, 45594, 45591, + 46210, 36466, 46209, 36467, 37471, 47824, 37470, 47825, 47823, + 29115, 29117, 48768, 38135, 48766, 48767, 38134, 29118, 49724, + 38751, 30300, 30301, 39446, 54158, 54157, 54160, 54161, 40147, + 54159, 55137, 57201, 42391, 44252, 35411, 44499, 44502, 44503, + 26659, 44500, 44743, 44742, 26773, 44740, 44741, 35788, 35787, + 45095, 35789, 45096, 45097, 45094, 36077, 45597, 45599, 36078, + 27246, 27247, 27248, 45600, 45596, 45598, 45601, 45602, 27583, + 46218, 27578, 27577, 27576, 27580, 46221, 46222, 46216, 46215, + 36470, 36473, 46212, 46219, 46217, 46220, 46211, 46213, 36472, + 36471, 28024, 36926, 46960, 46962, 46961, 46959, 46964, 36927, + 28026, 46965, 36925, 46958, 37473, 28581, 37476, 47831, 47826, + 28578, 37472, 37475, 47829, 28580, 37474, 47830, 47827, 47828, + 37477, 48775, 48771, 29120, 29125, 38136, 48778, 38137, 48773, + 48772, 48777, 29122, 48774, 48770, 48776, 48769, 49725, 49732, + 38755, 38753, 49729, 49737, 29695, 49739, 49736, 49731, 38752, + 53128, 49733, 49730, 49734, 49738, 49726, 49728, 38754, 49735, + 50360, 53125, 39447, 30306, 53132, 30307, 53130, 53127, 53133, + 53131, 39450, 39448, 53126, 39449, 54164, 54166, 40149, 30927, + 40150, 40148, 54165, 54162, 54163, 55140, 55138, 40819, 55139, + 55141, 53129, 40818, 56549, 41405, 55869, 32390, 56544, 56546, + 32389, 56548, 56547, 56545, 32733, 57202, 57727, 33017, 57728, + 57729, 43075, 33251, 58160, 43074, 58161, 33406, 33534, 59013, + 59350, 43620, 33703, 43716, 33732, 59265, 59427, 44253, 45099, + 45098, 36080, 45603, 45606, 45604, 28028, 47446, 46967, 46966, + 28582, 46968, 48781, 48779, 48780, 49741, 29803, 49742, 38756, + 53135, 53134, 54168, 40093, 54167, 55142, 55143, 41406, 56550, + 57203, 57730, 44254, 44505, 35481, 44747, 26777, 44746, 44745, + 35790, 45100, 45607, 45605, 45608, 36081, 27584, 46226, 46970, + 36928, 37478, 46972, 46969, 46971, 47832, 47834, 47833, 38138, + 38757, 49744, 49743, 39451, 53136, 40152, 54169, 41407, 42762, + 26549, 35412, 44348, 44347, 35482, 35607, 26778, 35791, 44748, + 35606, 35609, 35608, 45609, 35792, 45101, 35794, 45610, 35793, + 36082, 45612, 45613, 36083, 45614, 36474, 46229, 46227, 36475, + 46228, 46230, 46975, 36929, 28031, 36931, 47837, 47835, 47836, + 28585, 47838, 48782, 48784, 48783, 39015, 29699, 49745, 38759, + 38758, 49746, 38760, 54172, 53139, 53138, 53137, 54170, 40153, + 54171, 54173, 55144, 33018, 33252, 43621, 44209, 26592, 26591, + 44349, 44506, 26663, 35483, 44507, 44509, 44510, 44508, 44752, + 44750, 44749, 44751, 35610, 26989, 26988, 45102, 45103, 35795, + 45104, 35796, 27252, 45615, 45620, 27255, 27251, 36086, 45619, + 45618, 45617, 45616, 45621, 36085, 46235, 27589, 46232, 27588, + 46976, 46233, 46231, 36477, 36478, 46234, 46236, 36476, 46237, + 46982, 46978, 36935, 36937, 36934, 36936, 36933, 36938, 46985, + 46979, 46977, 46981, 46984, 46983, 47848, 47849, 47847, 28587, + 47845, 47841, 37479, 28588, 37480, 47840, 47839, 47850, 47846, + 47851, 47843, 47844, 28589, 48788, 38142, 38140, 48791, 38141, + 48790, 48794, 48786, 48785, 48792, 48789, 48787, 48793, 38139, + 29701, 29703, 29700, 49749, 49747, 49748, 49750, 38761, 53141, + 39455, 39454, 39453, 54175, 54174, 53140, 54438, 55145, 55870, + 32391, 41989, 42392, 43077, 35359, 44255, 44350, 44513, 44512, + 44511, 35484, 26780, 44753, 26990, 45106, 45105, 36088, 45623, + 45624, 36087, 45625, 46240, 46241, 46239, 46067, 46238, 46986, + 46987, 47853, 37482, 47854, 47852, 48795, 49751, 53142, 54176, + 53143, 53144, 57731, 58810, 35380, 35381, 44353, 44351, 44355, + 44354, 44356, 35413, 44352, 44516, 44514, 44518, 17916, 44515, + 35488, 44519, 44517, 35487, 44757, 35612, 35619, 35620, 44759, + 35617, 35616, 35618, 35613, 35614, 44760, 44755, 44761, 44756, + 44758, 26788, 44763, 44762, 26787, 44754, 35621, 26993, 35804, + 45110, 26996, 45107, 35802, 35803, 45115, 35800, 45112, 45117, + 35798, 45114, 35801, 35799, 45109, 44764, 45113, 45318, 45108, + 35805, 45637, 45631, 36089, 45632, 36090, 27259, 36091, 45627, + 45630, 45639, 45634, 45626, 45628, 45638, 45636, 45633, 45629, + 36092, 27257, 36483, 36480, 27591, 27598, 36481, 46248, 27597, + 36491, 36487, 36482, 46246, 36488, 36484, 36486, 46251, 46247, + 27607, 46242, 27608, 27595, 46252, 46249, 46250, 46244, 36479, + 36490, 27602, 36492, 36493, 36489, 46669, 28037, 47010, 47003, + 47005, 28039, 28041, 36941, 46994, 47001, 46996, 36949, 28035, + 47006, 47011, 47008, 46989, 47009, 28043, 28038, 36939, 36947, + 46988, 28033, 36940, 36945, 47007, 47002, 46992, 45787, 46998, + 46997, 46999, 47000, 47004, 28042, 36950, 36942, 36948, 36944, + 36943, 36946, 36951, 37484, 47864, 37489, 47855, 47865, 37490, + 37487, 37486, 28591, 37491, 37485, 37492, 37493, 37495, 47859, + 46995, 28592, 47860, 37488, 28594, 37483, 37494, 47858, 37496, + 47863, 47857, 47862, 47861, 38149, 48798, 38145, 29135, 38150, + 48799, 49752, 29138, 48806, 38143, 38152, 48796, 38148, 48797, + 48810, 48801, 48809, 38147, 48807, 49757, 38151, 48811, 48803, + 48808, 38144, 48800, 38762, 38770, 38768, 49758, 49753, 29714, + 29709, 29708, 38763, 38767, 38766, 38769, 38773, 49755, 49764, + 38772, 38764, 38765, 49759, 29712, 49763, 29710, 29706, 38771, + 49762, 49760, 49756, 29711, 48802, 30313, 53150, 30317, 53146, + 39458, 53157, 53151, 39463, 39456, 53148, 53158, 39464, 53156, + 53153, 53154, 39465, 39459, 39462, 54179, 53147, 53145, 53152, + 53155, 39460, 53149, 30316, 40156, 30928, 54185, 30929, 40158, + 54177, 40161, 40157, 40154, 54182, 54178, 40820, 40155, 54180, + 54184, 54183, 54186, 54181, 54188, 40160, 31498, 40822, 41412, + 55147, 40826, 55153, 40821, 55149, 55151, 55148, 40824, 55146, + 55152, 31499, 55150, 55154, 55278, 40827, 56551, 41411, 55874, + 31959, 41408, 41409, 55876, 41410, 55873, 55872, 55875, 41413, + 41414, 56553, 32394, 56555, 41992, 32392, 56554, 56556, 56557, + 56558, 56559, 56552, 32735, 57204, 32734, 42393, 57206, 57205, + 40825, 42763, 42765, 42764, 57733, 57732, 43078, 33254, 33255, + 58162, 58164, 58163, 58165, 43079, 58811, 33537, 33536, 58813, + 43483, 58812, 43622, 43717, 43779, 43831, 59266, 43917, 44256, + 26512, 26667, 35489, 44520, 44521, 35490, 44461, 26789, 35622, + 45118, 45642, 45641, 45643, 45640, 46253, 36952, 28044, 47012, + 37497, 49765, 53159, 40162, 55155, 55877, 56560, 41993, 58814, + 59428, 44258, 44260, 44259, 35415, 35414, 35623, 44766, 45644, + 46255, 47013, 53160, 56561, 44357, 35491, 45119, 45646, 45645, + 27610, 47014, 37286, 36954, 47015, 36953, 47867, 53161, 55878, + 26594, 44358, 44359, 35494, 35493, 26669, 35496, 44526, 44525, + 44523, 35492, 44524, 35495, 44776, 44770, 35627, 44767, 35625, + 35624, 35628, 44775, 35629, 44771, 44774, 35626, 44768, 44769, + 44772, 35630, 44773, 35810, 26998, 35808, 35812, 35809, 35811, + 35814, 45122, 35813, 35815, 45121, 35816, 45120, 35806, 35807, + 36095, 45655, 36094, 36097, 36093, 36098, 45652, 36100, 36099, + 45648, 36096, 45647, 45658, 45660, 27265, 45654, 45653, 45649, + 45650, 45659, 45657, 45651, 36495, 46265, 36494, 46261, 36496, + 36955, 46257, 27614, 27615, 46262, 36497, 46260, 46264, 46263, + 27612, 46266, 46267, 46256, 46258, 47020, 36962, 28049, 28046, + 28047, 36960, 36956, 47025, 36957, 36961, 47027, 36958, 36963, + 47021, 47026, 47017, 36959, 47019, 47024, 47016, 47028, 47022, + 47018, 47870, 28605, 47875, 37500, 37501, 28599, 37499, 47871, + 28598, 37506, 37507, 47023, 47877, 47874, 47872, 37504, 47869, + 47876, 37502, 37498, 47878, 37505, 38157, 29141, 38777, 29144, + 38154, 38153, 29143, 38156, 38159, 48815, 48812, 48814, 49768, + 38160, 48813, 38155, 38158, 49769, 49770, 38783, 29723, 38774, + 38780, 49767, 38779, 38782, 38784, 38775, 38781, 38776, 53164, + 53166, 39469, 39468, 39470, 30322, 39471, 39473, 30321, 53163, + 53162, 53165, 39472, 39474, 39467, 54191, 40167, 54193, 54199, + 40166, 30933, 54198, 54197, 40164, 54192, 40165, 54195, 40168, + 54190, 30935, 40828, 40829, 31501, 55158, 55156, 55157, 41417, + 41416, 41415, 56563, 32396, 41994, 32395, 56562, 56564, 41995, + 57207, 42394, 57734, 58167, 42766, 43080, 58166, 58815, 58816, + 43484, 59267, 59304, 26595, 44777, 35631, 26795, 45123, 45662, + 45661, 46268, 36964, 47879, 37508, 48816, 38785, 57208, 44261, + 44262, 44361, 35416, 44360, 26672, 26796, 35632, 44993, 45124, + 35817, 35818, 45663, 45622, 27830, 46269, 28053, 47880, 38161, + 38786, 53168, 49771, 53169, 53170, 31495, 58168, 26673, 35499, + 44529, 35498, 44528, 44527, 44531, 26674, 44530, 44780, 35635, + 35637, 35636, 35633, 35634, 44779, 44783, 45127, 44778, 44781, + 35638, 35825, 35821, 35820, 35824, 35823, 27002, 45125, 45128, + 45126, 27007, 45129, 35822, 35826, 45130, 36103, 36105, 27266, + 45665, 36104, 45666, 45664, 36500, 36503, 36501, 36504, 36498, + 46273, 46274, 27619, 36505, 36502, 46275, 36499, 46272, 46270, + 46271, 36468, 36977, 36968, 36966, 28056, 47034, 36975, 47039, + 47029, 36970, 36969, 36972, 36971, 47030, 47031, 36974, 36965, + 28059, 47035, 36976, 37513, 47032, 47038, 47686, 36967, 47033, + 36973, 47887, 28054, 37516, 37517, 37518, 47888, 47891, 37512, + 47890, 28609, 37515, 37511, 47886, 28610, 37510, 48821, 47883, + 47884, 37509, 47885, 47889, 29150, 38168, 29151, 48818, 48819, + 38165, 38166, 48824, 38162, 48822, 48820, 48825, 38167, 38163, + 48823, 29727, 38787, 29726, 38789, 49773, 38791, 38790, 49772, + 49774, 50118, 53171, 30325, 28606, 30323, 39475, 30324, 54200, + 53175, 39477, 39479, 53172, 53174, 53176, 53173, 39476, 40170, + 39478, 40172, 40169, 30938, 40173, 55161, 40831, 55159, 55160, + 40830, 55162, 40832, 55884, 55881, 41418, 55880, 55882, 55879, + 55883, 56565, 56566, 41419, 41996, 41997, 42397, 42396, 57212, + 57210, 42395, 57209, 57211, 57213, 33021, 57735, 57780, 43081, + 58169, 58170, 43313, 58512, 58817, 59147, 43781, 43780, 45131, + 45132, 45133, 36978, 47892, 38169, 44210, 44264, 44362, 44784, + 26799, 45669, 44788, 44786, 44789, 27008, 45135, 35827, 45136, + 18542, 27104, 46062, 45671, 45672, 45670, 45668, 45667, 46278, + 46277, 27620, 46276, 46279, 47040, 47041, 47042, 47043, 47044, + 47045, 28611, 47893, 47897, 47896, 47894, 47895, 48826, 38170, + 49776, 49777, 49775, 38792, 53177, 54201, 54203, 30940, 40174, + 55164, 55163, 58171, 59268, 59269, 59429, 44211, 44265, 26800, + 44791, 44790, 35639, 45137, 45675, 45674, 45676, 36637, 47046, + 37519, 48827, 49778, 53178, 54204, 35353, 35382, 44267, 44271, + 44266, 44269, 44270, 44368, 44369, 44365, 44363, 44370, 44364, + 44366, 44367, 35417, 35501, 35500, 44533, 44534, 44535, 44536, + 35640, 44792, 35642, 44794, 35641, 44793, 35643, 35828, 45141, + 45138, 45139, 45142, 45140, 45683, 36107, 45682, 27275, 45678, + 36106, 45677, 36507, 36506, 36508, 46282, 46280, 36509, 46281, + 36983, 36981, 36982, 47053, 47047, 27274, 47898, 47049, 47050, + 36980, 47048, 47051, 47054, 47052, 47899, 47902, 37520, 37523, + 37522, 47903, 37521, 47901, 47900, 38171, 29156, 48828, 48829, + 38793, 49779, 38794, 49780, 49782, 49783, 49781, 39480, 39481, + 30331, 53179, 53180, 54206, 40175, 30941, 54207, 54205, 55166, + 55165, 55167, 31961, 41421, 55885, 41420, 56570, 56568, 56572, + 56567, 56569, 41998, 42398, 57214, 32398, 57216, 57215, 42399, + 42767, 42768, 33022, 57736, 43082, 58965, 59016, 59351, 44539, + 44537, 44538, 35644, 45684, 45143, 45325, 45687, 46283, 45685, + 45686, 46285, 46284, 47055, 48504, 37524, 47905, 47904, 38173, + 49785, 49788, 49786, 49784, 49787, 54208, 54189, 30943, 55168, + 55888, 55887, 55886, 56575, 56573, 56574, 58172, 58513, 59148, + 44372, 44371, 44542, 44540, 44795, 35829, 45146, 45145, 46286, + 27625, 27624, 37287, 47060, 47056, 47057, 47059, 47058, 36984, + 47906, 47909, 47907, 47908, 48834, 48831, 48833, 48832, 29731, + 49789, 53184, 53185, 53182, 53183, 39482, 30944, 40176, 54211, + 55169, 55889, 57217, 57737, 43084, 44272, 35418, 26596, 35502, + 26679, 35503, 35645, 44799, 35646, 44798, 44800, 44802, 44797, + 35647, 44796, 44801, 35832, 45148, 35830, 45147, 35831, 36108, + 45150, 27278, 45689, 36111, 36109, 45691, 36113, 36112, 45690, + 46292, 27630, 27628, 27633, 27626, 36514, 36512, 27629, 27631, + 27627, 27632, 36513, 46288, 46294, 46291, 46290, 46295, 46293, + 46289, 28065, 36988, 47071, 47064, 36985, 36990, 36987, 47063, + 36989, 28067, 47070, 47068, 47065, 28068, 47069, 36986, 47067, + 47062, 47066, 47913, 28613, 37527, 37526, 37532, 37531, 37528, + 28614, 47910, 37525, 47912, 37529, 28064, 47911, 37530, 38175, + 38174, 48835, 48837, 48840, 48836, 48838, 48839, 49237, 38176, + 29157, 49795, 49792, 38797, 49791, 29733, 38796, 29736, 29735, + 49790, 38799, 38801, 38795, 49797, 49798, 49799, 38798, 49793, + 49794, 30335, 39483, 40835, 30334, 30333, 39484, 53186, 53188, + 53187, 53189, 54212, 40177, 40179, 54214, 54213, 54215, 40178, + 40834, 55170, 31505, 40833, 41423, 55890, 41422, 55891, 41424, + 56576, 56578, 56579, 57153, 56577, 42400, 32741, 32740, 57218, + 57738, 42769, 58173, 33408, 43623, 35360, 44274, 26680, 35419, + 44373, 44546, 35504, 44807, 35510, 44804, 35505, 44544, 44545, + 35506, 44803, 44805, 44808, 44543, 35509, 35648, 35650, 27014, + 44813, 44811, 45157, 44814, 45151, 44809, 44810, 45155, 44812, + 44815, 18141, 44816, 35651, 45156, 45152, 45153, 26802, 27013, + 35833, 45154, 27016, 45163, 27298, 45698, 27020, 45164, 45692, + 35834, 45695, 45166, 27019, 35836, 27283, 35835, 27294, 45160, + 35837, 27026, 27295, 45693, 45694, 45167, 45158, 45696, 27297, + 45697, 45159, 45161, 45165, 45162, 46306, 46304, 45701, 27300, + 36118, 27293, 27644, 36517, 36117, 45708, 46302, 45702, 27634, + 36515, 45704, 46298, 27636, 45707, 36115, 27635, 45709, 45700, + 45706, 46301, 46300, 27645, 45703, 46297, 46303, 36516, 46296, + 36521, 36527, 36530, 47076, 46314, 47078, 47074, 47079, 46315, + 36524, 47072, 27649, 47082, 36525, 27641, 37002, 36520, 36531, + 46313, 46308, 36993, 46310, 46312, 47075, 46311, 47080, 27642, + 36519, 46307, 36992, 47081, 47083, 36991, 36518, 47073, 46316, + 46317, 36523, 36528, 28633, 47926, 28620, 36998, 47091, 28618, + 47928, 47918, 37558, 47093, 47927, 47095, 28080, 36522, 28088, + 47086, 47923, 28076, 37536, 36996, 36999, 28619, 47088, 37001, + 47085, 47077, 28084, 37533, 47925, 37003, 28074, 47092, 47090, + 47089, 47915, 47921, 37535, 37538, 47929, 36994, 47920, 47931, + 47916, 47914, 47084, 37537, 47917, 36995, 47087, 47943, 47922, + 47094, 29170, 37547, 37550, 37555, 28622, 28630, 28624, 48846, + 47942, 37553, 47941, 28626, 37559, 37561, 37540, 48850, 37563, + 38182, 28634, 37556, 47940, 37543, 47936, 38183, 37541, 37557, + 37004, 48841, 37544, 29161, 28631, 37562, 37554, 37548, 38180, + 47932, 37552, 37534, 47939, 48851, 48852, 48843, 47938, 37560, + 48847, 48849, 38178, 29171, 28625, 37546, 47934, 48845, 48848, + 48844, 47935, 37551, 38177, 37549, 38191, 38185, 38184, 48860, + 39485, 38200, 49804, 38188, 38194, 38199, 49809, 48864, 38802, + 38190, 49801, 48854, 38187, 38192, 38189, 48842, 30345, 49811, + 49814, 38198, 48857, 49807, 29750, 49813, 49812, 38196, 38804, + 38193, 49806, 49803, 49802, 38186, 48856, 48862, 49805, 49810, + 38195, 49808, 48863, 49822, 49826, 29740, 29739, 39486, 49817, + 38814, 38813, 38810, 29160, 49816, 53191, 53194, 39488, 38807, + 38806, 38803, 38808, 38809, 38816, 49824, 49818, 49819, 48859, + 49821, 53193, 49820, 53196, 38811, 38815, 54217, 29754, 53192, + 53197, 49800, 38805, 49815, 39487, 38812, 54224, 30337, 29753, + 54218, 30348, 54220, 39494, 54226, 30341, 39493, 53198, 39498, + 30349, 54228, 37542, 39497, 39500, 30946, 30947, 53204, 39499, + 55175, 39495, 40183, 31509, 53199, 53205, 40189, 39490, 39492, + 40182, 39491, 54239, 54230, 54229, 53203, 30953, 54223, 54222, + 54225, 39496, 54219, 54227, 40180, 54473, 53202, 53472, 30347, + 40181, 40184, 40185, 40187, 54234, 54231, 40190, 40191, 40186, + 54237, 54235, 54236, 40192, 30954, 40836, 54238, 55174, 55176, + 55173, 55178, 40838, 54233, 55172, 54221, 40188, 55179, 40837, + 40193, 55171, 40844, 31510, 31506, 31969, 40841, 41427, 41425, + 55894, 55183, 31965, 40840, 40842, 55180, 55182, 40843, 41426, + 55893, 41428, 55892, 53195, 55895, 55181, 31966, 40845, 56582, + 55896, 41431, 57219, 32402, 32401, 56585, 41432, 57222, 31967, + 41433, 56592, 56588, 56581, 41430, 56587, 42000, 56583, 42003, + 56580, 56589, 55897, 56586, 42001, 42002, 56584, 41999, 56597, + 32747, 56594, 42007, 56591, 42403, 56596, 56593, 55898, 42008, + 32742, 42004, 42401, 56598, 56590, 57220, 42010, 57221, 41429, + 42005, 42009, 42402, 57740, 57225, 32744, 57224, 32748, 57739, + 57226, 58514, 33023, 42404, 58174, 58175, 58176, 57742, 57741, + 57743, 58177, 58515, 58517, 58518, 58516, 58520, 43485, 58519, + 58818, 43486, 58819, 43624, 58820, 33733, 43833, 43867, 35511, + 26683, 44547, 44818, 35652, 44817, 44820, 44819, 27027, 45168, + 45175, 45171, 45173, 27028, 45172, 45170, 45174, 45712, 45710, + 45713, 45715, 27303, 45716, 45714, 45711, 46318, 36534, 46320, + 36533, 46319, 37006, 28090, 47098, 47097, 37005, 47947, 47946, + 47944, 47945, 28635, 47948, 37564, 37565, 29175, 48866, 38202, + 38204, 29172, 48865, 38203, 49828, 49829, 38817, 38819, 38818, + 53207, 38820, 49827, 39501, 30350, 30351, 53211, 53210, 53208, + 49830, 53206, 53212, 53209, 53213, 54247, 54242, 54241, 54244, + 54243, 54246, 54245, 54116, 54599, 54240, 55184, 40846, 55899, + 56600, 32404, 56601, 42405, 42770, 57744, 44374, 35420, 44548, + 44549, 26809, 35838, 45176, 45177, 45718, 45717, 45719, 36120, + 45721, 45720, 36119, 46323, 46321, 46322, 36536, 36535, 47099, + 37566, 37568, 37569, 37567, 38205, 38821, 29756, 53214, 40847, + 42771, 44375, 35421, 44376, 44377, 35422, 35513, 26687, 44550, + 35519, 35517, 35516, 35512, 35514, 35518, 26812, 44826, 44829, + 44828, 27032, 35654, 44822, 26813, 26810, 44830, 35655, 26816, + 44825, 45180, 44824, 45188, 45178, 44823, 35653, 45179, 44827, + 45181, 45182, 45184, 35840, 36121, 45187, 45723, 35842, 45725, + 35841, 45724, 45722, 45185, 35843, 45733, 45735, 27315, 27306, + 27307, 45734, 46324, 36126, 36129, 36128, 45728, 36134, 27655, + 27319, 36125, 36124, 36538, 27310, 46325, 36135, 27317, 45731, + 36127, 36131, 45729, 45737, 45726, 36130, 36123, 45736, 45732, + 45727, 36122, 36537, 36539, 27664, 46332, 27659, 36548, 36546, + 27660, 27314, 27656, 36545, 46338, 46327, 46340, 46330, 36544, + 46329, 46334, 27657, 46335, 36547, 36540, 27658, 36542, 36543, + 27661, 46337, 36541, 45738, 46333, 47100, 46336, 46331, 36133, + 46339, 46341, 47101, 46326, 28093, 28094, 28637, 37014, 47110, + 36549, 47116, 37008, 28095, 28107, 28097, 37007, 28104, 37570, + 37009, 47113, 37012, 47114, 47105, 47102, 28109, 47954, 47949, + 47103, 37010, 47952, 28636, 47108, 47951, 47950, 37013, 47106, + 47953, 47112, 47109, 28096, 47107, 37011, 28111, 37580, 47959, + 28648, 47966, 47961, 37582, 47972, 37589, 47956, 29188, 28646, + 37571, 37579, 28638, 37577, 28642, 37578, 28649, 37575, 28652, + 37584, 28645, 47973, 47974, 47965, 37586, 47958, 47977, 47962, + 37585, 28651, 47978, 47957, 37581, 37583, 47975, 37573, 47967, + 47976, 47971, 47983, 47970, 47984, 47979, 47964, 37587, 47968, + 37588, 37576, 47963, 47982, 37574, 48868, 48869, 47969, 47980, + 47960, 37572, 38213, 48876, 29182, 29180, 38216, 29177, 48873, + 29184, 29190, 29178, 29189, 48879, 38212, 38822, 38206, 49831, + 48884, 48870, 48882, 48881, 38208, 38214, 38209, 48874, 48880, + 38211, 48883, 48877, 38207, 48875, 38210, 48872, 48878, 48871, + 38215, 49841, 39504, 38828, 38831, 29769, 29766, 49847, 49848, + 49833, 29758, 49850, 38827, 29770, 39503, 38830, 49840, 29760, + 53218, 29762, 29761, 53217, 53220, 38825, 29772, 49844, 49849, + 49845, 38829, 49842, 38832, 53215, 49846, 49838, 49836, 38823, + 29767, 49834, 49839, 49835, 53222, 53227, 39507, 30366, 53232, + 53226, 53228, 30358, 30355, 39508, 39506, 53240, 30360, 54252, + 30362, 39512, 30367, 30359, 40194, 54265, 53224, 53223, 54250, + 54248, 53239, 54249, 53231, 39511, 54251, 39510, 53230, 53237, + 53238, 53233, 53236, 30354, 53221, 53234, 53235, 31513, 30958, + 54258, 54253, 40195, 40196, 54267, 54263, 54255, 53225, 30955, + 30960, 30957, 40198, 30956, 54266, 30963, 54264, 30965, 30959, + 30964, 54262, 54254, 54269, 55186, 54261, 40200, 40197, 54260, + 55185, 54256, 54268, 54257, 54259, 30961, 40849, 55194, 40850, + 55199, 31516, 55192, 55198, 31515, 55197, 55189, 40851, 31512, + 40848, 55187, 55200, 55193, 55191, 55195, 55201, 55188, 55190, + 55196, 31978, 31983, 41437, 41434, 41435, 41436, 55907, 55906, + 31980, 31982, 42013, 42406, 55908, 55905, 31979, 55902, 55904, + 56602, 55900, 55903, 32405, 32407, 32406, 32408, 42408, 56605, + 56607, 56609, 42014, 56603, 42407, 56611, 32410, 56608, 56606, + 56604, 32409, 42012, 55909, 56610, 42411, 33024, 57228, 32751, + 57227, 32752, 57231, 32753, 57229, 42412, 42409, 42410, 57230, + 57751, 58178, 33026, 57746, 57750, 57749, 33027, 43088, 57748, + 57747, 58179, 58180, 43087, 43090, 42772, 58181, 43085, 43089, + 58183, 58522, 57745, 43086, 58182, 58523, 58823, 43488, 58822, + 33538, 58824, 43487, 58821, 59149, 33734, 59270, 59507, 26688, + 26818, 27035, 45739, 46343, 36719, 27665, 46342, 46189, 47118, + 47117, 47986, 47985, 37590, 48885, 48886, 38834, 49851, 53241, + 53242, 40201, 55204, 55203, 40852, 55205, 57232, 35656, 44832, + 35657, 44833, 35658, 44831, 45191, 27041, 35847, 35845, 27038, + 45195, 45189, 45193, 45192, 45190, 35844, 35846, 27037, 27323, + 45740, 36139, 36138, 45743, 45745, 45744, 36136, 36137, 27321, + 27322, 45742, 46344, 46345, 46347, 36553, 45746, 27672, 46349, + 36551, 46351, 36550, 36555, 46346, 36554, 36552, 46350, 46348, + 27668, 37018, 47125, 28119, 47119, 47120, 47122, 37020, 37021, + 28121, 47123, 47121, 37016, 47126, 28122, 28115, 28118, 28114, + 37019, 37015, 47124, 47995, 37601, 47992, 28665, 28666, 47996, + 47991, 47997, 37591, 37599, 37600, 37598, 37592, 47993, 37596, + 47988, 47987, 47990, 28657, 28658, 28659, 37593, 37594, 37017, + 47989, 48894, 37595, 38218, 38221, 38223, 29194, 29202, 48890, + 48893, 48888, 38222, 48895, 48892, 48887, 29203, 38217, 48896, + 38220, 29201, 29192, 29193, 29195, 38219, 48889, 48891, 37022, + 29197, 49131, 38841, 49860, 38839, 49852, 29775, 38838, 49853, + 38836, 49857, 38844, 38842, 49858, 49856, 49855, 49859, 49854, + 49861, 38840, 29774, 38843, 49862, 39014, 39513, 39518, 30373, + 53249, 53244, 53243, 39517, 53253, 53250, 53248, 39516, 53251, + 39514, 39515, 53246, 53247, 53245, 30968, 54271, 54275, 54277, + 40202, 54280, 54276, 54278, 54270, 54274, 54281, 40204, 54279, + 30967, 40205, 40206, 40207, 54273, 40203, 53252, 40208, 55207, + 55206, 40853, 40857, 40856, 31517, 31518, 40854, 55208, 40855, + 41439, 55911, 41438, 31986, 55912, 55913, 31984, 55910, 42018, + 42017, 42015, 42016, 42413, 32756, 42414, 57233, 32754, 57236, + 57235, 42415, 57237, 57238, 33029, 42774, 42775, 43091, 58524, + 43314, 33411, 58525, 33636, 45196, 46354, 46355, 47127, 47129, + 47128, 38224, 48897, 39519, 53255, 53254, 39520, 39521, 54282, + 58526, 44275, 45747, 27675, 36557, 36556, 46356, 37023, 47131, + 47130, 48000, 47998, 47999, 29204, 49863, 38225, 29777, 30374, + 53256, 55209, 32411, 44276, 45198, 45197, 45748, 28123, 47133, + 47132, 48003, 48007, 48006, 37602, 48009, 48002, 48001, 48005, + 28667, 48251, 48008, 29205, 48901, 48899, 48902, 38226, 49866, + 49865, 49867, 21260, 30376, 49864, 39523, 39524, 54286, 54285, + 54284, 54287, 54283, 30970, 55210, 55211, 55914, 31987, 55915, + 55916, 56612, 57239, 58184, 26823, 44834, 36140, 45751, 45750, + 45749, 27677, 36558, 46358, 46360, 46362, 46359, 28124, 28126, + 47135, 47134, 48012, 37604, 37603, 48011, 48013, 48010, 48903, + 38227, 48904, 38845, 38847, 49869, 38846, 53257, 54288, 40209, + 55212, 40858, 55918, 41440, 31988, 55919, 55917, 56613, 57752, + 33258, 58185, 58825, 59017, 35659, 36141, 36560, 36559, 28668, + 48014, 48905, 48906, 29209, 44379, 44378, 44552, 35520, 44551, + 44553, 44835, 44836, 44842, 35660, 44839, 44837, 44841, 44840, + 44838, 26825, 35853, 45203, 45202, 35854, 45212, 35849, 45208, + 35852, 45209, 45206, 35851, 35850, 45204, 45207, 45200, 45210, + 45211, 45201, 45205, 36144, 45752, 45753, 36143, 27329, 45755, + 45756, 27331, 45757, 45761, 45759, 45758, 36565, 46367, 36566, + 36567, 36562, 36568, 36563, 36561, 46371, 46365, 46369, 36564, + 46366, 46370, 46368, 46374, 46372, 37024, 28129, 28670, 47144, + 28134, 47139, 47136, 47137, 47141, 47138, 47146, 37026, 46373, + 47145, 47147, 47143, 37025, 48020, 48023, 28133, 38228, 37609, + 48018, 37606, 48019, 37608, 37605, 48015, 48016, 28672, 48025, + 37610, 28676, 48017, 48024, 48026, 28675, 28677, 48021, 37611, + 37607, 48914, 38230, 48912, 49870, 48913, 48910, 48915, 48909, + 38028, 48916, 48911, 38231, 38848, 38852, 38850, 38851, 49873, + 38853, 38856, 38857, 29779, 38855, 39525, 49871, 38849, 49874, + 49876, 49877, 49872, 49875, 53268, 53263, 53262, 53265, 39529, + 39532, 53261, 53258, 53259, 53269, 39531, 53267, 53264, 53266, + 53260, 39528, 40210, 40212, 54292, 30978, 54290, 54296, 54294, + 54298, 30977, 54297, 54289, 54293, 39526, 54209, 54272, 40211, + 54291, 55216, 40859, 40860, 55217, 40861, 55214, 55215, 55218, + 55213, 31989, 41441, 41442, 55920, 55923, 42020, 56616, 56615, + 42019, 42021, 56614, 56617, 42416, 42377, 57240, 57753, 58186, + 43076, 43092, 58527, 43489, 58826, 43626, 59352, 45213, 45214, + 36146, 36145, 45763, 45762, 46375, 48029, 48028, 38232, 29783, + 48917, 39534, 39533, 53270, 40862, 55925, 41443, 55924, 55922, + 32412, 57241, 57242, 43834, 59531, 44380, 44554, 35661, 44846, + 44844, 44845, 44843, 45215, 36147, 27332, 27333, 45764, 46376, + 37027, 47150, 47152, 48032, 48031, 47151, 37612, 48918, 38234, + 48919, 49880, 49881, 53271, 30381, 39536, 30380, 40215, 40213, + 40863, 40214, 55220, 55219, 41444, 55926, 42417, 43318, 43490, + 35383, 26553, 26600, 35522, 44557, 35521, 44555, 44556, 26692, + 26691, 44849, 26830, 44847, 44848, 35663, 44850, 35662, 26826, + 27052, 35857, 27047, 35856, 45224, 35861, 35863, 45221, 45220, + 45219, 35858, 35864, 35860, 35859, 45217, 45222, 35865, 45225, + 45226, 45223, 45218, 35866, 45367, 45767, 45766, 27334, 36149, + 45768, 45769, 36148, 36152, 45770, 36571, 36153, 36151, 36154, + 47153, 46388, 46392, 46384, 46386, 46379, 36572, 46381, 46378, + 46390, 27683, 47154, 36150, 36574, 36575, 46377, 46385, 46380, + 46382, 27686, 46387, 27693, 36577, 36573, 46391, 47165, 47166, + 47156, 37028, 37036, 37621, 28142, 28137, 37034, 47164, 48047, + 47160, 47161, 47163, 47162, 28144, 47159, 47157, 47158, 28141, + 37037, 37029, 37032, 37031, 37033, 47167, 47155, 28691, 48053, + 37620, 48920, 28683, 37623, 48035, 37617, 28680, 37615, 37619, + 28686, 48046, 48048, 37625, 48037, 48034, 37622, 48052, 37627, + 37626, 48039, 28685, 48040, 48043, 48050, 37631, 48921, 37628, + 48057, 48036, 48038, 48054, 28688, 28693, 48055, 48056, 48042, + 48044, 48045, 48051, 37633, 48049, 48058, 48041, 37629, 37632, + 37613, 37614, 37616, 48925, 48935, 29226, 48933, 29223, 48934, + 38242, 38237, 38241, 38238, 29213, 48938, 38246, 48944, 38235, + 29229, 38247, 38236, 48932, 38243, 38240, 48943, 29222, 48936, + 48937, 48940, 48927, 29219, 48939, 38239, 48946, 48926, 48928, + 48923, 48924, 48929, 48931, 29228, 48945, 48922, 48942, 37630, + 38245, 48930, 38867, 38869, 29794, 29785, 38866, 38868, 49892, + 38874, 38871, 53272, 48947, 38860, 49882, 38873, 38859, 38877, + 49885, 38863, 38872, 49886, 29789, 38861, 38862, 49888, 38865, + 38870, 21286, 49893, 49890, 49894, 49895, 38875, 38876, 49887, + 49889, 49883, 49896, 49884, 53275, 39550, 39541, 30388, 30400, + 39538, 30393, 53284, 53279, 53287, 39554, 39548, 53283, 30399, + 39542, 30392, 39547, 30396, 30391, 30382, 53286, 39539, 30403, + 39552, 53281, 39546, 39553, 53276, 30394, 39540, 53288, 30389, + 30398, 30402, 53273, 53277, 53278, 39555, 39551, 39549, 53274, + 53280, 39543, 39537, 39545, 30984, 40230, 54310, 30994, 30981, + 40864, 55221, 54301, 54304, 40228, 54309, 54319, 40227, 54316, + 54303, 30991, 31533, 30980, 54300, 30988, 40226, 54308, 54305, + 40218, 40224, 30985, 54315, 54321, 40225, 30986, 54307, 54312, + 30992, 40217, 54302, 41450, 40222, 40223, 40219, 30397, 54320, + 54313, 54306, 54299, 40229, 40216, 40220, 54317, 54318, 30990, + 40221, 54314, 31524, 55225, 55223, 31528, 55227, 55231, 40869, + 40870, 31531, 31527, 40873, 55228, 40871, 55226, 55232, 41451, + 40866, 31534, 31525, 55234, 31523, 40868, 55236, 40865, 55229, + 55233, 40872, 55235, 55222, 55224, 55090, 40874, 40875, 31998, + 41447, 55936, 55932, 31993, 55940, 41457, 41452, 41459, 55938, + 31996, 41449, 41455, 41460, 41453, 55237, 41464, 41448, 31994, + 32003, 31997, 55942, 55937, 41456, 56625, 41462, 55935, 32002, + 41461, 41458, 41445, 55927, 55928, 55930, 55934, 55941, 55939, + 41454, 41463, 41446, 55931, 55933, 42022, 56622, 42025, 42028, + 42026, 56621, 56619, 42030, 56620, 32419, 56627, 56628, 42024, + 42023, 56624, 42032, 56626, 55929, 42031, 56623, 56618, 42029, + 32762, 57243, 42424, 57245, 42427, 42033, 42419, 42418, 42422, + 57244, 42421, 42426, 42420, 42027, 42425, 42423, 57246, 32761, + 57756, 57755, 42780, 42782, 33031, 42778, 57760, 42777, 42779, + 42781, 57757, 33030, 42784, 57761, 42787, 57759, 42786, 42785, + 57758, 42783, 58191, 43097, 43098, 43095, 43093, 33260, 43094, + 43096, 58190, 58189, 58187, 43320, 43322, 43491, 43323, 58531, + 43321, 58532, 43324, 58530, 43492, 58528, 58529, 43325, 43319, + 33539, 58827, 43493, 59018, 58828, 58829, 59019, 43628, 59020, + 43627, 43629, 43718, 59271, 59021, 33704, 59263, 59272, 43835, + 59353, 59354, 59466, 59491, 44559, 26832, 44852, 45227, 44855, + 35664, 44854, 26831, 35873, 35872, 35869, 45228, 27056, 45229, + 35874, 27055, 35870, 35871, 35868, 36158, 45773, 46393, 45775, + 36161, 27344, 36160, 36157, 45772, 36155, 36159, 45774, 36156, + 46396, 46397, 46394, 36584, 36578, 46395, 47168, 36583, 27698, + 36580, 36585, 36582, 36581, 37040, 47169, 47170, 28698, 37638, + 38250, 28695, 37636, 48061, 37039, 37639, 48062, 37635, 37640, + 48063, 37637, 48060, 48059, 48957, 38249, 38248, 38253, 48954, + 38252, 48950, 48949, 48951, 48952, 48953, 48956, 38251, 49407, + 48955, 48948, 38881, 29808, 38883, 49898, 49897, 29809, 38882, + 29806, 49904, 49899, 38879, 49905, 49903, 38880, 49901, 49900, + 49902, 48958, 38878, 39557, 53296, 39559, 39560, 30406, 53292, + 53290, 53297, 53289, 53293, 53294, 39558, 53295, 40231, 54323, + 30997, 54322, 55239, 55241, 40876, 55240, 55238, 41465, 42035, + 42034, 42791, 57248, 42790, 42789, 33261, 42788, 43099, 58194, + 58192, 58193, 43494, 59022, 33637, 33705, 35361, 35423, 44381, + 44561, 35667, 44857, 45230, 35666, 35668, 44856, 45241, 45233, + 45240, 45239, 45235, 45232, 45237, 45231, 45236, 35875, 45238, + 45234, 35876, 27059, 27345, 36162, 36022, 46398, 46401, 36586, + 46399, 46403, 46402, 46400, 46287, 37041, 47173, 47172, 28701, + 28699, 37641, 37642, 48068, 28702, 48067, 48069, 48065, 48070, + 48071, 48066, 38255, 48959, 38254, 49602, 53299, 53302, 53300, + 53303, 53298, 53301, 54327, 54326, 54324, 54325, 55242, 31537, + 41466, 41467, 55943, 43100, 58533, 58534, 35424, 35384, 35523, + 44858, 26694, 44562, 35669, 26834, 44563, 44859, 44864, 44860, + 26833, 44865, 35670, 44862, 44861, 44863, 45244, 35877, 35883, + 35878, 35881, 27060, 27061, 35880, 27064, 45242, 45243, 45245, + 45776, 35882, 36167, 27347, 27348, 45783, 27346, 45777, 36163, + 36164, 36170, 36165, 36166, 45782, 27349, 45779, 45780, 36169, + 45781, 46404, 45778, 36171, 36587, 27702, 46407, 36592, 46410, + 36593, 36589, 36590, 46408, 46411, 36594, 36588, 36591, 36595, + 46405, 46406, 37046, 47177, 37045, 47176, 37042, 37043, 37044, + 47174, 28148, 37047, 48074, 47178, 47175, 48961, 48075, 37650, + 28709, 48076, 28704, 37645, 37644, 37646, 28708, 37649, 37651, + 37647, 37643, 37648, 48077, 48960, 48073, 48963, 48968, 38256, + 38257, 48965, 48967, 29238, 49907, 48969, 48964, 48962, 29817, + 29811, 49910, 49911, 29812, 49908, 49909, 49832, 53306, 30410, + 39561, 53304, 39564, 53305, 53308, 39563, 30998, 53309, 53307, + 39562, 54328, 54329, 40232, 31001, 40234, 40233, 54331, 55245, + 55243, 40878, 55246, 55244, 40879, 41469, 41468, 32004, 55945, + 54330, 40880, 55944, 42036, 42792, 42793, 57762, 58195, 43329, + 43328, 35885, 35884, 45784, 45785, 36596, 28149, 28150, 47181, + 47182, 47179, 47180, 47184, 47183, 37048, 48080, 48079, 48974, + 48975, 48972, 48973, 48977, 48976, 48971, 38258, 38348, 38886, + 29819, 49914, 29820, 49913, 49912, 39565, 49915, 53310, 30411, + 54336, 54334, 54337, 54332, 54335, 40235, 54333, 55247, 55248, + 32005, 55948, 41471, 41470, 55946, 55947, 32423, 56631, 57250, + 56632, 57763, 33414, 43330, 58535, 43101, 58832, 43496, 43495, + 59023, 59273, 35425, 44866, 45246, 45786, 46412, 38259, 30412, + 35672, 44867, 45250, 45249, 35886, 46413, 46415, 46414, 47185, + 47186, 38260, 29239, 38887, 38888, 49916, 53311, 54338, 54339, + 40236, 56633, 42428, 43631, 35385, 26695, 44869, 44868, 26835, + 35890, 35887, 35889, 35888, 45252, 45251, 35848, 45789, 36173, + 36174, 36172, 36175, 36176, 45790, 36178, 45792, 46418, 45791, + 36179, 45788, 36177, 46420, 36598, 46419, 27708, 36600, 27707, + 46417, 36599, 46416, 36597, 47193, 28159, 47188, 37052, 47189, + 47190, 37049, 47192, 37053, 37051, 37050, 47187, 47191, 37652, + 28714, 37653, 28717, 48082, 48084, 37656, 37655, 37657, 48087, + 48081, 48086, 37654, 48083, 48085, 37659, 48987, 48985, 29244, + 48980, 48984, 29243, 48981, 48978, 48982, 48979, 48986, 48983, + 48988, 38261, 48989, 49922, 38891, 38890, 49923, 49924, 49926, + 29826, 49917, 29827, 38892, 29824, 49927, 49928, 49919, 49920, + 49921, 38894, 49929, 49918, 49925, 30415, 53316, 53320, 53318, + 30414, 30413, 39568, 53317, 39566, 39567, 53314, 53315, 53313, + 53312, 53319, 53321, 54340, 40238, 54341, 31005, 40237, 31008, + 54343, 54342, 53322, 55251, 31542, 31541, 55250, 40881, 55249, + 55253, 55252, 41474, 41473, 41475, 55952, 56634, 55950, 41476, + 55949, 55951, 41472, 56637, 42037, 56635, 56636, 57251, 33032, + 42794, 57764, 58196, 43102, 43331, 58536, 59355, 45253, 45793, + 36180, 36181, 45915, 47194, 47195, 48990, 29829, 54344, 55254, + 32008, 44565, 44564, 45256, 45255, 45254, 45794, 45795, 36182, + 36601, 37660, 48991, 53324, 53323, 55953, 57765, 44277, 44566, + 35426, 44567, 26698, 44568, 35673, 44570, 44572, 17957, 44571, + 45258, 35675, 44871, 35674, 35676, 26837, 44875, 44876, 45257, + 44872, 44870, 44874, 44877, 27074, 35892, 45796, 35895, 35896, + 27072, 45268, 27076, 45261, 27075, 45259, 35891, 35893, 45269, + 35894, 45271, 45797, 45267, 45273, 27069, 45264, 45263, 45265, + 45266, 45270, 45260, 36183, 27351, 45799, 36191, 45804, 45807, + 36184, 27355, 27716, 36190, 36189, 45803, 45809, 36185, 45810, + 36188, 46421, 45806, 45805, 27356, 27352, 45808, 45801, 27357, + 45798, 45800, 36192, 27713, 36606, 46451, 46449, 36605, 36604, + 46433, 36607, 46422, 46432, 27712, 27714, 46440, 46427, 46441, + 46445, 46428, 46444, 46435, 46443, 47197, 47196, 28175, 46439, + 46447, 36602, 46438, 46424, 46446, 46429, 46450, 46453, 47225, + 46430, 46437, 46452, 27717, 46442, 46434, 46426, 36603, 28166, + 37067, 28164, 28180, 47207, 47211, 47215, 28179, 47222, 28170, + 47209, 28174, 47208, 47224, 28178, 37054, 47204, 28169, 28176, + 48101, 37066, 47221, 37065, 47218, 28162, 28168, 47199, 26898, + 47214, 47203, 48103, 37059, 37068, 48089, 48090, 47217, 47223, + 37057, 28171, 47219, 37062, 47202, 47205, 37061, 37056, 28181, + 28183, 37058, 47216, 48088, 47206, 47210, 37060, 47213, 47212, + 47226, 47200, 47201, 37055, 37063, 46431, 48099, 48113, 28721, + 37666, 28722, 48094, 48096, 37670, 37673, 37665, 49013, 37675, + 48091, 28720, 37069, 28725, 48109, 48093, 37671, 48114, 48994, + 48104, 48105, 48111, 37663, 48993, 48112, 29245, 37662, 37669, + 37668, 37667, 48107, 37664, 48992, 48115, 37676, 48098, 48106, + 37672, 48108, 28730, 48092, 48097, 48095, 37674, 49006, 38262, + 29266, 48997, 29253, 49000, 49008, 29260, 29268, 29263, 29247, + 49015, 38266, 38263, 29265, 49930, 49007, 29259, 38272, 38270, + 29250, 49931, 29267, 38269, 38271, 49003, 49017, 53325, 49012, + 29840, 49004, 49011, 48996, 48995, 38268, 38265, 29262, 49001, + 49002, 49005, 49010, 38267, 49009, 29254, 49018, 48999, 49016, + 48998, 53326, 29849, 29836, 29837, 29841, 38896, 29843, 38895, + 38905, 38907, 29834, 29848, 49949, 38900, 49946, 49939, 29846, + 29845, 38906, 38903, 38898, 53329, 53328, 38908, 49950, 29844, + 49938, 49947, 38901, 38902, 29830, 49942, 39569, 53327, 49933, + 38899, 49944, 38904, 53181, 29831, 49941, 49948, 49934, 38897, + 49932, 49936, 49937, 49935, 53363, 53347, 53342, 30425, 53355, + 53349, 53341, 30430, 30432, 39578, 53364, 53343, 53345, 53351, + 30421, 53352, 53338, 39574, 53366, 53336, 53333, 30431, 39570, + 39577, 53365, 30420, 53356, 30419, 53354, 39573, 53332, 53368, + 39576, 39572, 53348, 53331, 55438, 53334, 53369, 39575, 53330, + 53359, 53367, 39579, 39581, 39571, 30423, 53360, 53340, 53346, + 39580, 53357, 53350, 53361, 54347, 30428, 53335, 53358, 53337, + 53339, 31017, 40252, 40251, 40239, 40240, 40242, 54350, 40247, + 54370, 54363, 54357, 31014, 54356, 31019, 40250, 54360, 54348, + 54354, 54369, 54358, 54355, 54366, 54353, 54349, 40248, 40241, + 40882, 54359, 54372, 40243, 40884, 40249, 54346, 54351, 54361, + 54364, 40246, 54362, 54368, 54371, 54373, 54345, 54367, 31020, + 40163, 40887, 31547, 31552, 40885, 55267, 55255, 32009, 40886, + 40883, 55257, 55263, 55256, 55266, 55261, 55260, 41477, 55262, + 55268, 40888, 55264, 40254, 22585, 55265, 55259, 40889, 55269, + 55258, 54352, 41484, 41491, 41490, 32020, 41482, 41478, 41487, + 55961, 55967, 32016, 41496, 41489, 55957, 41486, 41495, 32015, + 41488, 55968, 41480, 55962, 41485, 55969, 55955, 32022, 32012, + 55966, 55965, 55959, 41479, 32010, 41481, 41483, 41494, 41497, + 41492, 55960, 32019, 55963, 56650, 41498, 56649, 55958, 55954, + 55964, 55956, 41493, 56656, 56647, 56653, 32427, 32425, 56638, + 42039, 56641, 56639, 56646, 56645, 56640, 42038, 56644, 56648, + 42430, 56652, 56642, 56651, 56657, 56655, 56654, 56643, 42432, + 42435, 42436, 57256, 32768, 32772, 57255, 57254, 42433, 32771, + 57259, 32766, 32767, 32765, 57258, 42796, 42434, 42437, 57260, + 57257, 33033, 42801, 57769, 42800, 42798, 33036, 57767, 42797, + 57772, 57766, 33038, 57778, 42802, 57768, 57773, 57774, 57775, + 57776, 57777, 42795, 58199, 57770, 58200, 43103, 42803, 58198, + 43104, 58202, 33263, 58203, 58204, 58201, 58197, 43334, 43335, + 58540, 58539, 43333, 58538, 43332, 58541, 58537, 58835, 43498, + 58836, 33638, 58833, 43497, 58834, 33639, 59026, 59025, 59024, + 59150, 33707, 43720, 43719, 33708, 33735, 43782, 43783, 59274, + 59356, 43836, 59467, 43925, 44382, 44574, 26699, 26700, 44573, + 44575, 26840, 26841, 35677, 44881, 35678, 35680, 44880, 35897, + 27079, 35898, 45276, 45275, 27081, 35679, 36194, 45821, 36195, + 45813, 36196, 45820, 45815, 27362, 45814, 45812, 45816, 46461, + 36197, 45819, 45818, 36612, 36611, 46457, 46460, 28184, 46458, + 27719, 46455, 36608, 36609, 46456, 46462, 46463, 46459, 36610, + 47230, 28189, 37071, 47234, 28188, 28190, 47233, 47239, 47236, + 47232, 47231, 48116, 47237, 47235, 47238, 47228, 47227, 37070, + 37072, 47240, 28742, 48121, 47229, 37680, 37678, 48127, 48128, + 37677, 48118, 28739, 48123, 48117, 48126, 28736, 37679, 48120, + 48122, 48125, 28740, 48119, 48124, 37681, 38277, 49031, 49029, + 38273, 49027, 49034, 29272, 49028, 29269, 49032, 49035, 29270, + 38275, 49024, 49040, 49036, 49041, 38278, 49033, 49039, 49022, + 49023, 49026, 49043, 29275, 49038, 49042, 49589, 38276, 38274, + 49962, 49961, 38915, 49955, 38917, 29850, 38913, 38912, 38911, + 53377, 53371, 49951, 38916, 49952, 49953, 38910, 49956, 49960, + 29858, 38914, 49957, 49963, 49954, 49958, 49037, 30436, 39585, + 53381, 53374, 53370, 39583, 53373, 53378, 53379, 53382, 53372, + 39582, 39584, 53380, 53375, 53942, 39587, 39586, 49959, 31029, + 54381, 54401, 54379, 54395, 54393, 40258, 31026, 54396, 54398, + 54384, 53376, 31027, 54385, 54399, 54400, 31025, 54387, 54383, + 31028, 54402, 40257, 40259, 54397, 54388, 54392, 54389, 54374, + 54382, 54391, 40255, 54376, 54377, 54390, 54394, 54609, 54380, + 54140, 40260, 40256, 54375, 53383, 54386, 55274, 31554, 55276, + 40261, 55280, 55279, 31556, 54403, 40890, 55270, 40893, 40891, + 55271, 55275, 55273, 40892, 55272, 55976, 32025, 55975, 41499, + 55972, 55980, 55978, 55973, 32026, 41500, 41501, 32024, 55981, + 55971, 55979, 55977, 56119, 55982, 55974, 55970, 55281, 56663, + 42040, 32430, 56664, 32431, 56661, 56660, 56658, 56662, 56659, + 42440, 57261, 57264, 57272, 42439, 42438, 42442, 32432, 57263, + 57269, 32777, 32775, 57273, 57262, 57266, 57268, 57265, 57270, + 57267, 57271, 42441, 57783, 32776, 57785, 42804, 33040, 57786, + 57781, 57782, 57784, 58207, 43105, 33416, 58208, 58209, 58205, + 58206, 58471, 58545, 58547, 58544, 58597, 58546, 58543, 58542, + 43336, 58837, 43499, 59032, 59029, 59031, 59055, 59028, 59030, + 59151, 43784, 59358, 59357, 59359, 59430, 59521, 35386, 44383, + 44882, 44883, 35681, 45279, 45278, 45280, 45823, 36200, 36198, + 45824, 36199, 45826, 45822, 45825, 36614, 36613, 47242, 47241, + 47243, 28743, 48129, 47786, 48376, 49045, 49046, 49964, 38918, + 49967, 49966, 49965, 53387, 39588, 53384, 53386, 53385, 54404, + 54405, 40262, 31558, 55983, 42041, 57274, 57787, 58548, 58838, + 59033, 45281, 45282, 47244, 47245, 49047, 38919, 40263, 45194, + 36201, 27364, 27722, 36923, 48130, 49049, 49048, 40264, 53388, + 53389, 40265, 44278, 44384, 44576, 44884, 27084, 45284, 45283, + 45827, 27366, 45828, 45829, 46465, 27723, 46464, 47246, 47249, + 47248, 28193, 47247, 48135, 48131, 48133, 48134, 48136, 48132, + 48371, 49050, 49051, 49969, 49970, 53390, 53391, 40266, 41502, + 31031, 54406, 53392, 40267, 55282, 55283, 40894, 56667, 42443, + 58210, 58549, 59275, 43837, 59360, 44886, 35682, 44885, 27085, + 45288, 45287, 45286, 45285, 45831, 45830, 36202, 45832, 36203, + 36615, 27724, 27726, 46468, 46466, 37073, 37074, 47250, 47253, + 47251, 48138, 28746, 48141, 48137, 48139, 48140, 37682, 37685, + 37683, 37684, 28747, 38281, 49052, 29278, 38279, 38280, 49053, + 38920, 49972, 49973, 49971, 39591, 53396, 39590, 39589, 39592, + 53395, 53393, 39593, 53394, 40269, 40270, 40271, 54408, 40268, + 54407, 40895, 31559, 41504, 41503, 42444, 57788, 35603, 46470, + 46469, 28748, 48142, 49054, 49974, 35428, 44577, 44888, 44887, + 44889, 35902, 35909, 35901, 35904, 35899, 35906, 45291, 27087, + 35908, 45289, 35907, 35910, 35905, 45290, 35903, 45292, 45293, + 36207, 36205, 36204, 45840, 45837, 36208, 36206, 27369, 45835, + 45834, 45836, 45839, 45833, 45838, 36209, 36621, 36617, 36619, + 36620, 36618, 46471, 36622, 28196, 47258, 47259, 37076, 37686, + 28198, 28197, 37078, 37079, 47256, 47260, 47255, 37075, 28750, + 28753, 37692, 48147, 37688, 37690, 37687, 48145, 48148, 48146, + 48143, 48144, 37689, 37691, 37077, 48149, 38926, 38287, 38285, + 29281, 49981, 49056, 38921, 49055, 49058, 49057, 38286, 49060, + 38284, 29862, 38928, 38923, 38929, 38927, 49976, 49980, 38922, + 38925, 49984, 49979, 49978, 38283, 49983, 38930, 38924, 49977, + 49059, 49982, 38931, 39595, 53397, 30445, 39598, 39599, 39597, + 30441, 39594, 53399, 53398, 54411, 40272, 40277, 54412, 40274, + 40276, 40273, 40275, 54410, 55287, 55285, 40896, 31561, 31562, + 54409, 55286, 55984, 55985, 42043, 57789, 56669, 56670, 56668, + 42042, 57276, 42445, 42446, 42806, 57791, 42805, 42807, 58211, + 43108, 58551, 43107, 58552, 58550, 43500, 59034, 59361, 44385, + 35430, 35431, 35525, 35528, 35524, 26703, 35527, 44578, 35526, + 35687, 35688, 26848, 27094, 44893, 26847, 35683, 44899, 35684, + 44896, 35922, 45295, 26844, 35686, 35685, 44895, 44894, 45296, + 44892, 44897, 44898, 44891, 26845, 45303, 35915, 45304, 35919, + 45302, 45305, 35914, 35917, 45301, 35920, 35912, 35916, 35911, + 45300, 27095, 36211, 44890, 45841, 35918, 45299, 45306, 45297, + 27092, 36210, 36219, 45849, 36214, 46478, 36218, 45842, 46479, + 47263, 36217, 27370, 36216, 45845, 36215, 45847, 27372, 36221, + 45844, 35913, 36212, 36213, 45846, 36220, 46481, 36627, 28200, + 46476, 46480, 27734, 36624, 36629, 36626, 27732, 46472, 46477, + 46475, 36623, 27733, 46474, 46482, 36628, 46473, 37081, 28203, + 47265, 37088, 37693, 37085, 47267, 47270, 37082, 47266, 48154, + 28205, 37086, 48151, 48150, 37083, 48152, 47268, 47269, 47271, + 48153, 37701, 49064, 37699, 38288, 28754, 37695, 48163, 38289, + 37700, 28755, 37698, 37697, 28757, 48158, 29282, 37694, 48155, + 48157, 29288, 49062, 48867, 49063, 48159, 48160, 48164, 48156, + 37696, 29287, 38297, 49069, 38296, 29286, 49074, 38300, 49071, + 49067, 49066, 49073, 38295, 38293, 38292, 49068, 38291, 49075, + 38299, 38290, 29289, 38298, 49072, 38294, 49070, 38301, 49990, + 38941, 49986, 53400, 38938, 29872, 38936, 38934, 49989, 38942, + 38937, 38935, 49993, 29873, 38932, 53401, 49988, 49985, 49987, + 49992, 30454, 38944, 38943, 38940, 38939, 49994, 38933, 53408, + 30449, 30450, 53407, 39601, 53411, 54414, 39606, 53406, 53402, + 39603, 39610, 39600, 39609, 39608, 39602, 40278, 54413, 39604, + 39605, 39611, 53403, 53404, 40279, 53405, 53410, 31038, 39607, + 40286, 31040, 40284, 40280, 40281, 54420, 31036, 54419, 54418, + 40897, 31041, 40282, 40285, 54416, 55289, 31566, 55288, 54417, + 53409, 53412, 40283, 40899, 55290, 40898, 56674, 55292, 55291, + 55990, 41506, 41505, 55987, 55986, 55989, 32031, 55988, 41507, + 32779, 56675, 57277, 56673, 56671, 57278, 42447, 57279, 42809, + 57792, 42808, 33265, 42810, 58212, 58553, 58555, 58554, 43501, + 58839, 59035, 59276, 48165, 49995, 35387, 44579, 44386, 44900, + 35690, 26850, 26849, 44902, 44901, 35689, 35923, 45312, 27099, + 36222, 45310, 45309, 45850, 36226, 36223, 27375, 45852, 45568, + 45851, 45853, 36225, 36224, 46486, 37089, 36630, 27738, 46484, + 27737, 46485, 46487, 46483, 28216, 46488, 47277, 37090, 47278, + 28217, 47274, 47275, 47276, 47279, 37091, 47273, 48170, 37704, + 37703, 37705, 49076, 29291, 38302, 28761, 48168, 48171, 48173, + 49085, 48172, 48167, 48169, 49077, 37702, 49078, 49083, 29292, + 49084, 49082, 49081, 38945, 49079, 38304, 37707, 38946, 49080, + 53415, 49997, 38948, 53413, 29874, 38947, 49998, 50000, 49999, + 49996, 38949, 21343, 53416, 53423, 30455, 39612, 54422, 53417, + 54421, 53419, 53422, 53424, 53425, 53420, 39613, 53418, 39614, + 54427, 53421, 40287, 40290, 40288, 31046, 54429, 54424, 54425, + 54423, 31047, 54426, 54430, 54428, 55293, 40291, 40289, 55298, + 55300, 40902, 40900, 55991, 55296, 32033, 31567, 31569, 55295, + 40901, 55297, 55299, 55294, 55992, 42045, 32034, 41508, 32435, + 55993, 32437, 55994, 55995, 56679, 56678, 42047, 56677, 57280, + 42046, 56676, 32438, 57794, 42448, 33043, 57281, 57793, 33042, + 57995, 33044, 58213, 58556, 33419, 43337, 43632, 59037, 59036, + 43721, 33765, 45313, 36228, 36227, 45854, 45855, 46489, 36632, + 36633, 46490, 46491, 28221, 37092, 37093, 37708, 37709, 48174, + 48175, 29293, 38305, 38306, 53428, 50001, 38950, 38951, 53427, + 54431, 31048, 39615, 53426, 31049, 55301, 41509, 32036, 33045, + 57795, 42811, 43338, 58557, 58840, 59152, 59153, 35691, 35924, + 27100, 45314, 36229, 36230, 45856, 27380, 27383, 36634, 36636, + 46495, 36635, 46494, 46492, 46493, 37096, 47283, 47281, 47285, + 37097, 47284, 37095, 28765, 37710, 49089, 28770, 37713, 37712, + 37098, 48177, 37711, 37094, 48176, 48178, 29301, 38307, 49090, + 29295, 38308, 49086, 49088, 29296, 49091, 49087, 38954, 50005, + 38952, 50003, 29879, 50002, 50004, 38953, 30463, 53433, 39617, + 39618, 39619, 53429, 53430, 53432, 54432, 31573, 54433, 40294, + 40296, 31051, 40295, 40293, 31575, 40903, 31576, 55303, 55302, + 39616, 32039, 41512, 41511, 55997, 41510, 55998, 42048, 57282, + 57796, 57797, 33047, 42812, 33046, 57798, 33267, 58214, 43109, + 43341, 43340, 58558, 43339, 58636, 43785, 59431, 44387, 45315, + 35926, 27101, 45857, 38309, 50006, 54436, 54434, 54435, 31578, + 55999, 42813, 44388, 44580, 45316, 35927, 45317, 36231, 27384, + 45858, 46054, 36638, 47287, 37099, 47286, 47288, 49092, 48179, + 49094, 49093, 50007, 53434, 31579, 56571, 57799, 44581, 35928, + 45321, 46496, 37100, 56680, 43110, 26852, 44904, 27105, 26934, + 27102, 35929, 45324, 45323, 45326, 45322, 27387, 36234, 45861, + 36233, 45860, 36232, 45863, 45867, 45864, 46504, 36235, 45865, + 45862, 36643, 36236, 36639, 27743, 36640, 46500, 46499, 46501, + 46498, 46502, 27745, 36642, 36641, 28229, 47289, 37102, 37101, + 28228, 47293, 47296, 47291, 47294, 47295, 47292, 47290, 47262, + 28774, 28772, 28773, 48182, 48184, 48183, 28776, 48180, 49099, + 29307, 29304, 49097, 49098, 29303, 38311, 49095, 49101, 38310, + 49102, 49103, 49100, 38312, 49096, 50010, 29887, 38957, 50009, + 50012, 50015, 50013, 50011, 50014, 53439, 30467, 53435, 53437, + 53436, 53438, 39620, 53440, 30466, 31056, 31054, 31057, 54437, + 40297, 54076, 55304, 40908, 55306, 40906, 31580, 55305, 40909, + 55639, 40905, 40907, 32040, 56681, 42050, 56684, 57283, 56682, + 56685, 32442, 56683, 57285, 57284, 57802, 57800, 57801, 58215, + 33268, 57803, 58560, 58559, 58841, 59155, 59154, 59277, 59279, + 59278, 59510, 59522, 59539, 44389, 44582, 27747, 36237, 28777, + 49105, 49104, 50016, 40298, 54439, 53441, 58216, 35529, 35693, + 35694, 26853, 44907, 44908, 44906, 44909, 27108, 45328, 27107, + 35931, 45329, 45870, 27396, 45869, 45868, 36239, 36243, 27392, + 27393, 36240, 27390, 36241, 36238, 36242, 45875, 45871, 45873, + 45874, 45872, 46508, 36644, 36648, 46514, 36646, 46515, 46509, + 36651, 36647, 36650, 46512, 46516, 46505, 27758, 36649, 46507, + 27759, 36645, 46513, 46506, 46511, 47298, 47304, 37107, 47302, + 37110, 28232, 37109, 37105, 47300, 28235, 37108, 47303, 47306, + 47301, 47305, 47297, 37106, 37111, 37715, 37724, 48192, 37714, + 48196, 37718, 37719, 37721, 37716, 48194, 48190, 37725, 48193, + 48186, 48197, 37723, 48189, 28788, 48188, 48191, 48195, 28786, + 48187, 28780, 37717, 49111, 29315, 29313, 29324, 38314, 29314, + 29318, 29890, 29322, 49108, 38315, 38317, 38323, 29325, 49106, + 38322, 49112, 38326, 38324, 38316, 37722, 38320, 38319, 49110, + 49109, 29326, 49107, 49113, 38313, 38327, 38318, 38971, 38963, + 29896, 29902, 38958, 38962, 29897, 50022, 50017, 29905, 29901, + 50018, 50027, 38960, 38961, 38966, 29903, 50030, 50028, 38973, + 50021, 29898, 29893, 38964, 38965, 50026, 38959, 38969, 50024, + 50023, 50031, 50019, 29904, 50025, 50029, 38968, 30481, 30477, + 30468, 30480, 39624, 30475, 53452, 30473, 39626, 39628, 39625, + 30472, 53444, 30471, 39622, 39623, 53442, 38970, 39629, 53443, + 53450, 53448, 53445, 53449, 53453, 39627, 39621, 31062, 40300, + 54440, 54441, 40307, 40308, 31063, 31058, 40303, 54446, 40301, + 40302, 40306, 54442, 54448, 40309, 54445, 54444, 40305, 54443, + 54449, 54450, 40299, 53446, 31581, 40914, 40311, 55319, 31068, + 29900, 31583, 55310, 40910, 55311, 40917, 40915, 40918, 55318, + 56003, 40310, 40912, 31582, 40913, 31586, 55312, 55316, 55320, + 55314, 55309, 55315, 55307, 55308, 55317, 40916, 41513, 40919, + 55313, 32047, 40921, 41517, 56001, 41522, 56002, 41518, 41521, + 32045, 40920, 41514, 41519, 41515, 41516, 32049, 56006, 41520, + 56692, 32448, 56688, 32449, 42053, 32450, 56687, 42052, 42051, + 32451, 32446, 56689, 56690, 56686, 56691, 56005, 32785, 32786, + 57286, 57290, 57289, 42449, 42450, 57291, 57288, 57287, 42818, + 42817, 42815, 33048, 57805, 42816, 57804, 43114, 43113, 43112, + 58563, 58561, 33423, 58562, 43342, 43502, 58842, 58843, 59065, + 59038, 59156, 59157, 59158, 43786, 59362, 59432, 26856, 45876, + 46518, 46517, 47307, 48200, 48198, 37726, 48199, 53454, 31070, + 31069, 54451, 44583, 44584, 35695, 35933, 35934, 35932, 35935, + 27398, 36246, 36245, 36244, 45878, 45879, 45877, 45880, 36247, + 46519, 27763, 46520, 47309, 28237, 37113, 47308, 48202, 48203, + 48201, 38329, 38328, 49115, 29327, 49114, 38330, 29906, 50032, + 50033, 30483, 53455, 53456, 40313, 54453, 40312, 54452, 31590, + 31591, 40923, 40925, 56007, 40922, 55321, 41523, 56008, 56009, + 42054, 42055, 42056, 42057, 56693, 57293, 57292, 41524, 58217, + 58218, 58564, 33546, 58844, 59433, 35696, 35697, 45332, 45330, + 45331, 35936, 45882, 36248, 27400, 45611, 45881, 36652, 36653, + 46521, 46525, 37114, 27765, 46522, 46523, 46524, 28240, 37115, + 47311, 47310, 28791, 48204, 37727, 48206, 28790, 48205, 38331, + 38334, 38332, 38333, 38335, 49118, 49116, 29328, 29908, 29910, + 50037, 50036, 38975, 50038, 50034, 50035, 53458, 39631, 39632, + 39633, 53457, 40317, 40319, 40315, 31075, 40318, 40316, 40314, + 54454, 54455, 55322, 54456, 31592, 41525, 56011, 56012, 56013, + 56010, 42059, 42058, 56694, 32788, 42452, 42451, 57294, 57807, + 33053, 58219, 43503, 43504, 59255, 59463, 44910, 27112, 35937, + 27110, 45334, 35938, 36251, 36249, 36250, 45884, 45883, 36654, + 46530, 46532, 27769, 36655, 46529, 46526, 27771, 46531, 46533, + 46527, 46528, 28243, 37117, 28241, 47312, 47313, 47314, 46534, + 48211, 48207, 37728, 28792, 48209, 48210, 48208, 49119, 49121, + 38337, 49123, 49122, 49120, 50040, 50039, 50050, 39634, 53459, + 53460, 31076, 54461, 31078, 54457, 54462, 40321, 40320, 54460, + 54458, 31594, 32056, 31593, 55323, 40928, 56014, 40927, 55324, + 55325, 55078, 40926, 54459, 55326, 32055, 32054, 56015, 56017, + 56016, 56018, 56695, 42060, 56696, 42454, 57296, 42453, 57298, + 57295, 57297, 58221, 43115, 58220, 58222, 58845, 43343, 58846, + 59159, 35530, 44911, 26857, 35699, 26859, 35700, 35698, 27119, + 45335, 35940, 27114, 45339, 45341, 45337, 35941, 35942, 45340, + 45338, 35939, 45342, 45343, 45896, 45892, 45885, 45889, 27415, + 45893, 27413, 45899, 36258, 45890, 36262, 27412, 45886, 45898, + 36253, 36260, 36264, 36254, 36263, 36261, 36256, 36265, 45887, + 36252, 36259, 36255, 36257, 45894, 45897, 45891, 27777, 36663, + 18951, 27773, 36656, 46535, 27775, 36661, 36657, 46537, 27772, + 46538, 36662, 46539, 27780, 46541, 36659, 36664, 46540, 46536, + 36660, 36658, 27781, 28252, 47332, 47319, 47326, 37119, 37118, + 37128, 28251, 47320, 47317, 47315, 37125, 37126, 37120, 47323, + 37123, 47333, 37124, 47316, 47328, 47324, 47329, 47331, 47325, + 47322, 47330, 37129, 47318, 47327, 37122, 37127, 37734, 37737, + 48216, 48224, 28250, 48215, 37736, 48220, 48222, 37731, 48227, + 48214, 28810, 37735, 37733, 37729, 28809, 38338, 48226, 38351, + 28795, 48221, 37738, 48218, 37739, 48229, 37730, 37732, 48219, + 48228, 48213, 48225, 48223, 28799, 28811, 37740, 28793, 49126, + 49129, 49125, 29337, 38345, 49127, 38344, 49130, 38342, 49124, + 29330, 29335, 29344, 29341, 38347, 49133, 38343, 29342, 29331, + 49135, 38346, 38339, 38349, 49137, 49128, 48212, 49134, 48900, + 38340, 38350, 38341, 49136, 38979, 29928, 50043, 29921, 38982, + 50047, 38984, 38985, 50048, 30502, 50053, 50045, 50054, 53467, + 50046, 38986, 38983, 50042, 50049, 50044, 38981, 50041, 38978, + 38977, 38976, 53461, 29917, 50052, 50051, 38988, 29918, 30503, + 30499, 30485, 39639, 39644, 30501, 53466, 39649, 39642, 30488, + 53471, 30487, 31088, 54470, 39641, 40326, 39643, 53468, 39647, + 53473, 30496, 30498, 30493, 39636, 39648, 53462, 53463, 53465, + 30497, 39640, 53469, 39635, 39638, 40322, 39646, 39645, 53464, + 53470, 30495, 40335, 40336, 31081, 40330, 40328, 40332, 40324, + 31086, 40334, 40325, 40331, 40329, 31085, 54463, 54471, 54472, + 54468, 54464, 39650, 31090, 40323, 54466, 54474, 54469, 40337, + 31089, 38987, 40333, 32064, 40929, 40932, 31604, 31605, 54475, + 55333, 55328, 40931, 55329, 40933, 55339, 40930, 56025, 55334, + 55335, 55332, 31606, 55338, 40936, 54465, 40935, 55336, 55331, + 55330, 55337, 55327, 32061, 56026, 56023, 41531, 32065, 41528, + 56020, 56021, 41533, 32057, 41529, 41532, 41534, 41527, 56027, + 56028, 56022, 41530, 56019, 56024, 42064, 42061, 42066, 32459, + 42065, 32456, 42069, 42063, 56699, 32455, 56701, 32457, 32458, + 56697, 42062, 56698, 42068, 42067, 57024, 56702, 56700, 42457, + 42459, 42455, 57301, 42458, 42460, 57300, 32793, 42456, 32794, + 57299, 57811, 42819, 42821, 42820, 42822, 57809, 57812, 57808, + 33270, 43118, 58223, 43116, 43117, 58224, 43120, 33426, 57810, + 43119, 58298, 43121, 43344, 58567, 33425, 58566, 58847, 33641, + 59160, 59162, 59161, 43838, 35943, 27417, 27418, 27783, 36667, + 36666, 46544, 46545, 28255, 37131, 37743, 28812, 37744, 37742, + 37746, 37741, 48230, 37745, 38354, 38353, 38352, 50056, 50057, + 29930, 29931, 38991, 38989, 38990, 29932, 50055, 29934, 39651, + 30505, 53476, 39652, 30504, 53475, 30506, 31092, 31091, 31093, + 40338, 41538, 55340, 40786, 40937, 41537, 41536, 41535, 42072, + 42071, 42070, 42073, 56703, 56704, 33427, 59532, 59542, 44680, + 44912, 44913, 45904, 45902, 45903, 36267, 36669, 36670, 46548, + 46546, 46547, 36668, 37132, 37133, 28259, 47338, 47336, 37134, + 47334, 47340, 47335, 47339, 47337, 28813, 48233, 48231, 38355, + 29345, 49140, 29348, 29347, 49138, 37747, 29349, 49139, 38992, + 38993, 50058, 38994, 38995, 53479, 30507, 53477, 53478, 53480, + 54477, 31094, 54476, 40938, 40939, 55341, 55342, 43122, 43345, + 35531, 44585, 26860, 44914, 35702, 35701, 35944, 27123, 45346, + 27422, 27420, 45908, 36269, 45906, 45907, 45905, 36268, 36270, + 27793, 36678, 46549, 45909, 46550, 36674, 46554, 36671, 36676, + 36675, 27788, 27790, 36681, 36677, 36680, 27786, 36682, 46553, + 27787, 36672, 46552, 37135, 36673, 46551, 37141, 37137, 47346, + 47344, 37146, 37145, 37139, 47345, 37149, 37147, 36683, 37143, + 37136, 37138, 37142, 47343, 47341, 48235, 37140, 47347, 37144, + 37148, 47342, 37749, 37755, 37748, 37752, 28817, 48242, 28818, + 28816, 37753, 37754, 48238, 37751, 37756, 48241, 48237, 48239, + 37758, 37757, 38359, 49148, 29350, 38360, 49141, 49143, 38356, + 49145, 29360, 29362, 49146, 49149, 38357, 38358, 49144, 49147, + 49150, 50066, 39003, 50059, 53485, 39005, 50061, 29941, 38998, + 38997, 50062, 39006, 50064, 50065, 39000, 50060, 38996, 39008, + 50063, 29943, 39002, 39007, 39004, 38999, 30513, 39655, 39656, + 53486, 39653, 29939, 53490, 39658, 53484, 53487, 53481, 53488, + 39654, 39657, 53483, 54481, 40342, 40339, 40343, 54478, 31100, + 31102, 40345, 31101, 54479, 54483, 31098, 54480, 40341, 40340, + 40943, 55343, 40941, 55350, 55345, 40940, 31609, 55344, 40942, + 31612, 55347, 31611, 40346, 40945, 40944, 40946, 55346, 55349, + 56032, 41539, 41541, 56029, 56031, 41540, 32069, 41543, 56030, + 41542, 56033, 32461, 42075, 42074, 56707, 56705, 56706, 42462, + 42463, 57302, 57303, 42461, 42464, 32462, 57304, 57306, 42823, + 42824, 57813, 33059, 43123, 58225, 43124, 58226, 43125, 43347, + 33428, 43346, 43348, 58569, 58568, 58849, 58848, 58850, 59163, + 43722, 43787, 33736, 59364, 59434, 43932, 44280, 44587, 44915, + 45347, 45910, 45912, 45741, 36684, 46555, 27796, 36685, 46556, + 45914, 46559, 46560, 46558, 46561, 46557, 27425, 37151, 46562, + 47348, 37150, 48245, 37759, 48246, 48247, 48249, 37760, 48250, + 48248, 48243, 48244, 49152, 38362, 38361, 38363, 48252, 29367, + 49151, 39012, 50070, 50071, 29945, 50074, 50072, 50068, 50073, + 39010, 50069, 30518, 53491, 50067, 50075, 53493, 40349, 54485, + 40347, 54486, 31106, 40350, 40348, 40351, 53495, 54484, 31618, + 40947, 55354, 31619, 55357, 55355, 54487, 55352, 55356, 55353, + 55351, 32073, 41544, 56035, 56034, 32072, 42076, 56709, 56710, + 42465, 32798, 57307, 57815, 57814, 33274, 58227, 58228, 58570, + 58571, 58572, 43505, 58573, 43506, 43633, 59166, 59164, 59280, + 45916, 47349, 28822, 48253, 49153, 50076, 53497, 54488, 54489, + 56036, 43126, 59039, 26601, 44588, 44916, 44917, 27124, 35947, + 27126, 35946, 45349, 45920, 45923, 36273, 36271, 27433, 36274, + 45925, 45919, 45921, 27430, 45918, 36272, 45926, 45924, 45922, + 45917, 36687, 36686, 46566, 36688, 46567, 36689, 36275, 37157, + 46568, 46563, 46565, 37155, 47354, 37160, 28271, 37158, 47353, + 37152, 28275, 47350, 47355, 28826, 37761, 28827, 28823, 48254, + 48255, 48258, 48260, 28824, 48257, 29376, 37159, 38373, 38366, + 49156, 49154, 49157, 38367, 38364, 38369, 38371, 38375, 38370, + 29373, 49162, 38365, 49158, 49161, 49159, 49155, 49160, 38374, + 38372, 39017, 50080, 38740, 39022, 50079, 50077, 50081, 29951, + 39023, 39018, 50085, 50086, 39020, 39016, 39021, 50087, 39019, + 50078, 50084, 50083, 39664, 39661, 39663, 53504, 53501, 39662, + 30528, 53505, 53502, 53509, 39024, 53500, 40362, 39665, 39666, + 30526, 30529, 53506, 53499, 53507, 53508, 31110, 54502, 40354, + 40357, 54498, 40353, 40356, 40355, 31113, 40352, 40360, 54492, + 54493, 40359, 54491, 40363, 40948, 40364, 54500, 54499, 54501, + 54490, 54494, 54496, 54497, 40361, 40358, 40951, 40954, 40955, + 40952, 40949, 40950, 31625, 55358, 40957, 31621, 40953, 55361, + 55359, 40365, 55360, 40956, 41546, 41553, 41551, 41548, 41549, + 41552, 56039, 41547, 56038, 41550, 41545, 42079, 32464, 42077, + 32465, 32468, 56712, 32467, 42078, 57311, 56714, 56711, 56713, + 42468, 32801, 32799, 42467, 57309, 32077, 42466, 42469, 57308, + 57310, 57312, 42470, 57817, 57816, 42825, 57818, 58230, 43127, + 58231, 43349, 43350, 58232, 43507, 58574, 58575, 58851, 58830, + 33644, 43634, 33645, 43723, 43868, 43869, 44390, 35704, 35705, + 27128, 27129, 27127, 45352, 45351, 45354, 18554, 45350, 27437, + 45928, 45930, 45927, 36276, 27436, 36278, 36277, 45929, 45931, + 45932, 36279, 36690, 27799, 27804, 27801, 36694, 36693, 36692, + 46573, 27802, 27803, 27800, 46571, 46569, 36691, 36695, 46572, + 46570, 37165, 37164, 47357, 47356, 47358, 37162, 28277, 37163, + 37161, 47359, 37775, 28833, 37777, 48267, 48263, 28836, 48271, + 37766, 37772, 37774, 48269, 37764, 48270, 37765, 48264, 37767, + 28835, 37776, 48265, 37773, 48262, 37763, 37770, 48268, 37771, + 37768, 48266, 38377, 49170, 38379, 38378, 38381, 49163, 49165, + 37769, 38380, 38382, 49169, 49172, 38383, 49167, 49166, 49164, + 49171, 49261, 29956, 50094, 39027, 50093, 50089, 50091, 50090, + 39026, 50096, 39028, 50088, 53512, 39668, 39674, 39677, 39025, + 53511, 39678, 39673, 39669, 39679, 39672, 53510, 39667, 39675, + 39671, 39676, 53593, 30532, 40372, 40374, 31116, 40373, 31119, + 40366, 31121, 54505, 40367, 40369, 40368, 40376, 40370, 40377, + 54503, 40371, 40958, 40378, 54506, 40963, 40960, 55366, 31629, + 40962, 55363, 55364, 55362, 40959, 55365, 54507, 40961, 41555, + 41554, 32471, 56717, 56716, 42080, 56715, 57313, 57315, 42081, + 32802, 42471, 57822, 57316, 57314, 42828, 57820, 33064, 33063, + 42826, 57821, 42827, 43351, 58576, 43508, 59041, 58852, 43635, + 59167, 43870, 44919, 44918, 35948, 35949, 27438, 27808, 36698, + 36699, 27805, 36697, 36696, 27807, 46574, 46575, 47363, 28282, + 47362, 47364, 47361, 28283, 37168, 28838, 48274, 37778, 37780, + 37779, 37781, 48273, 29381, 29383, 38385, 29384, 49173, 38384, + 49174, 49175, 38386, 39029, 50097, 39030, 29957, 53516, 30533, + 39680, 53514, 31632, 54509, 40379, 40965, 41050, 55367, 40964, + 41557, 55368, 56040, 41556, 57317, 57823, 56718, 42829, 58233, + 59042, 35950, 45355, 35952, 35951, 36281, 36282, 36280, 45934, + 45933, 36283, 36705, 36700, 27813, 36701, 36703, 36704, 46577, + 36708, 36706, 36702, 46576, 46578, 36707, 36709, 27815, 47365, + 47371, 37171, 28288, 37174, 47368, 37173, 47373, 28284, 37175, + 47366, 36710, 37170, 47370, 47372, 37177, 37178, 47369, 37785, + 37789, 37784, 37787, 28839, 28841, 48279, 37172, 28846, 37788, + 37783, 28852, 28850, 28843, 48282, 28851, 48276, 37792, 48278, + 48281, 37176, 37786, 37790, 38403, 38391, 38398, 29387, 38396, + 38388, 29395, 29396, 38399, 29390, 37782, 49177, 38389, 38404, + 38394, 38401, 38387, 38392, 38395, 49181, 49179, 49184, 49187, + 49180, 49183, 49185, 50098, 38402, 38400, 38397, 38390, 49178, + 48277, 49182, 49186, 49176, 39046, 38405, 29967, 39044, 50108, + 29962, 50099, 50100, 39037, 39036, 39043, 29970, 50109, 39041, + 50107, 39033, 39034, 50106, 50102, 39035, 39042, 39032, 39038, + 50103, 38393, 39048, 50101, 39039, 50105, 39040, 29972, 39045, + 39693, 53526, 53528, 39703, 30564, 39686, 53534, 53527, 39697, + 30536, 30534, 39700, 39682, 39687, 39702, 53519, 39699, 39684, + 31145, 39692, 39701, 30537, 30558, 30552, 30548, 39691, 39690, + 39695, 53531, 39049, 39688, 53533, 53524, 53521, 39698, 53517, + 53536, 30553, 53532, 30547, 53529, 39696, 53522, 53520, 39681, + 53525, 53523, 39705, 53535, 40393, 31146, 31143, 40381, 40387, + 40395, 54529, 40385, 31127, 40386, 31125, 40397, 53518, 54524, + 31131, 40396, 31130, 54528, 31141, 54519, 54525, 31129, 40389, + 54516, 31144, 40388, 40382, 54515, 54527, 31123, 40380, 54523, + 31134, 40394, 54518, 40391, 31132, 54530, 54510, 54526, 39683, + 40392, 40383, 54513, 54522, 54511, 40390, 40384, 54517, 54512, + 54521, 54514, 40987, 40984, 31644, 40974, 40996, 40978, 31643, + 31650, 31654, 55377, 40994, 31647, 40985, 40969, 40986, 40971, + 41000, 40980, 40993, 40976, 41003, 55369, 40975, 40981, 40989, + 31651, 40990, 55374, 41581, 40995, 40979, 55380, 55373, 40968, + 41001, 40992, 40972, 55376, 40997, 40970, 40967, 40991, 31653, + 32081, 41002, 40977, 40998, 40988, 54520, 40973, 55372, 55371, + 55370, 55378, 55375, 55379, 31655, 31648, 41590, 41586, 41004, + 32103, 41584, 41571, 41566, 32092, 41589, 41579, 22888, 41561, + 32099, 32090, 41582, 41572, 41591, 32082, 56050, 41585, 41563, + 41570, 32083, 32084, 41587, 56048, 41568, 41565, 41578, 56044, + 41559, 56045, 32086, 56042, 32104, 41577, 56047, 41576, 56049, + 56053, 56043, 41564, 32098, 41569, 41573, 41583, 41588, 41575, + 41560, 56057, 56056, 41574, 41558, 41562, 56041, 56046, 56055, + 56052, 42091, 42096, 56727, 32486, 56725, 42084, 32481, 32482, + 32478, 42090, 32476, 32477, 56721, 32479, 42083, 32485, 32474, + 56720, 42094, 42089, 42097, 42093, 42092, 42086, 42085, 42088, + 56719, 56723, 42082, 42098, 56722, 56724, 56726, 42485, 42484, + 42479, 32484, 42477, 57321, 42483, 32804, 57329, 32807, 42481, + 42476, 33073, 57319, 42472, 42478, 42474, 57318, 57330, 42480, + 57322, 57323, 42475, 57324, 57833, 57326, 57325, 57327, 57328, + 57320, 42837, 42841, 42842, 33074, 33068, 42839, 42844, 57824, + 42831, 42836, 42833, 32806, 42840, 42832, 42473, 57830, 42843, + 42830, 57826, 42838, 33282, 42845, 57831, 57825, 57829, 57828, + 57834, 57827, 58238, 33279, 33278, 43131, 43129, 42835, 43132, + 58235, 42846, 58234, 43135, 33280, 43128, 58237, 57832, 43137, + 43134, 43130, 43136, 43133, 58239, 58236, 58299, 33431, 43352, + 58578, 43353, 33432, 33433, 33435, 58577, 43355, 58579, 43354, + 58583, 58582, 58580, 58584, 58581, 43509, 58854, 58857, 43511, + 43512, 58856, 43356, 58855, 58853, 43510, 58860, 33550, 58858, + 43636, 59043, 59045, 59048, 33646, 59046, 58859, 59044, 43726, + 43724, 43725, 59047, 59281, 59282, 59283, 43839, 43871, 59365, + 33791, 43895, 43908, 35706, 35953, 45356, 45936, 36285, 45935, + 36286, 46579, 36711, 46583, 36712, 46581, 36713, 46580, 46582, + 28293, 37182, 28297, 37181, 28294, 37185, 37180, 37183, 37184, + 28296, 37187, 37179, 47374, 48288, 47376, 47375, 37793, 28853, + 48286, 48283, 48290, 37795, 28858, 48289, 48284, 48287, 38406, + 29399, 49190, 38408, 38409, 37794, 38407, 49192, 49191, 28857, + 38410, 38412, 38411, 49194, 49188, 49193, 50114, 39051, 50112, + 50115, 39053, 29974, 49189, 50120, 50119, 39052, 50117, 39050, + 39054, 50116, 50110, 50111, 53541, 53537, 30571, 39710, 53538, + 53542, 30568, 39709, 39711, 39715, 39055, 39714, 39712, 53544, + 53539, 39708, 30569, 39713, 30567, 53543, 39707, 39706, 40403, + 40401, 41011, 31148, 40400, 31147, 54534, 54535, 40404, 54531, + 40399, 40402, 40405, 54533, 41005, 41007, 55381, 41008, 41006, + 41009, 41010, 55383, 55385, 55386, 55382, 31659, 41597, 56060, + 32108, 41598, 41594, 56735, 41596, 41012, 56061, 41595, 57333, + 41592, 56058, 42101, 56728, 56729, 32491, 32489, 42100, 42847, + 56731, 56732, 56063, 32492, 32109, 42102, 56062, 42099, 56730, + 56733, 56734, 57332, 42487, 57331, 33076, 33075, 42848, 57838, + 57837, 57836, 43138, 58240, 43139, 33436, 33437, 58585, 43357, + 58586, 58861, 43514, 43513, 43639, 59050, 43638, 43637, 59049, + 59169, 33712, 43727, 59168, 43728, 59285, 59284, 43896, 59523, + 35954, 45357, 35955, 35956, 36289, 45937, 45940, 36287, 36288, + 45942, 45938, 36290, 45943, 46588, 46584, 27818, 46596, 27820, + 46590, 46589, 46592, 36717, 27819, 27827, 46597, 46586, 27826, + 46591, 27825, 46593, 46585, 36716, 46594, 36715, 36714, 46587, + 27829, 46595, 37192, 37190, 28311, 28301, 28303, 47383, 28308, + 37191, 28310, 47384, 37188, 28305, 47386, 47385, 47380, 47378, + 47379, 37189, 47382, 47387, 37804, 37803, 37801, 37805, 48298, + 28860, 48291, 48297, 28859, 28861, 48299, 47381, 48292, 48301, + 48293, 37800, 48295, 48294, 48300, 37797, 37796, 37798, 48296, + 37802, 49204, 49195, 38414, 38413, 29403, 49197, 29404, 49201, + 49198, 29400, 38416, 38415, 49196, 49202, 28862, 29402, 49199, + 38417, 49205, 49206, 29409, 49203, 49200, 29407, 29979, 39057, + 29977, 39059, 50132, 50131, 39063, 29981, 39062, 29978, 50126, + 50136, 50135, 50123, 29984, 39056, 38418, 50134, 39058, 50129, + 50121, 39060, 39064, 50133, 50128, 29987, 50125, 50122, 50124, + 50130, 30573, 30584, 53549, 30583, 30576, 39726, 39724, 31153, + 39723, 39728, 39720, 30587, 39725, 53561, 53547, 53553, 39727, + 39717, 53550, 53555, 39722, 30582, 30574, 53546, 53554, 53545, + 53556, 50127, 53562, 53560, 39716, 39721, 39729, 53551, 53557, + 53548, 53552, 54557, 31151, 54554, 54555, 31155, 54551, 54548, + 40409, 40411, 54536, 54553, 54537, 55387, 54538, 54541, 40410, + 40412, 40408, 41020, 31150, 40406, 40407, 31156, 54545, 54542, + 54543, 54552, 31158, 54540, 40414, 54539, 54556, 54546, 40413, + 54550, 54549, 54544, 54547, 55401, 55400, 41018, 41015, 31664, + 55388, 41016, 55399, 31662, 55391, 41019, 41013, 55395, 55392, + 55393, 55397, 41017, 55398, 55394, 41022, 55396, 55389, 32121, + 32113, 56069, 32120, 32114, 56068, 56075, 32118, 31663, 56064, + 41600, 41603, 41602, 56066, 56072, 41601, 56065, 56070, 56073, + 56067, 56078, 56076, 56071, 56082, 41605, 56077, 41604, 56083, + 56081, 56079, 56074, 32497, 32498, 56744, 32502, 56752, 42103, + 56749, 32500, 56751, 32504, 42106, 32493, 42107, 56746, 56630, + 32494, 56742, 42104, 56748, 56740, 56747, 42105, 56738, 56739, + 56745, 56743, 56952, 56741, 56750, 32503, 57338, 57337, 42490, + 42488, 32810, 57339, 57342, 57336, 57843, 56737, 42491, 57343, + 57345, 57335, 33082, 57341, 57334, 57344, 57340, 42851, 33078, + 57844, 42852, 33081, 33079, 33080, 58247, 57346, 57840, 57839, + 57842, 33077, 57841, 42850, 57845, 43142, 58242, 43143, 43140, + 33284, 43359, 58246, 43141, 58244, 58243, 58245, 33318, 33440, + 58248, 58587, 58588, 33441, 33442, 33553, 43515, 58866, 58864, + 58865, 58867, 43641, 58863, 43640, 59051, 59172, 59171, 59286, + 59288, 59287, 59366, 43872, 59492, 44589, 27441, 36291, 27831, + 46599, 36718, 37194, 47388, 37807, 47390, 47389, 48305, 28866, + 48304, 37806, 49209, 49208, 29411, 29989, 50138, 39065, 50137, + 53563, 53565, 30588, 53564, 40416, 40415, 41024, 55402, 41023, + 56084, 56085, 56753, 32505, 42853, 32812, 33083, 57846, 33443, + 58589, 58869, 58868, 43729, 59511, 44282, 44281, 26863, 44591, + 44592, 44920, 44590, 45358, 45945, 27132, 45944, 45359, 27133, + 44921, 26864, 45946, 27443, 27445, 36292, 35957, 46600, 46601, + 46602, 36722, 46605, 46603, 27835, 27834, 45949, 45947, 45950, + 47396, 36720, 47391, 47392, 47393, 47395, 47397, 45948, 46243, + 36293, 27446, 47394, 48308, 47398, 46606, 48307, 47399, 36721, + 37195, 48306, 37809, 37808, 28869, 48309, 49211, 38422, 49213, + 48311, 38419, 38421, 49212, 49214, 48310, 49215, 49210, 50139, + 50141, 50142, 50143, 50144, 50145, 50146, 50149, 39068, 53570, + 50147, 39067, 49216, 39066, 50148, 50140, 53566, 53567, 53568, + 53569, 39733, 39730, 50151, 53571, 39731, 39732, 50150, 53474, + 54558, 54559, 54563, 54560, 40417, 54562, 31162, 55411, 54561, + 54564, 39734, 40418, 31161, 53572, 53573, 55404, 55405, 55408, + 41025, 54565, 31667, 41606, 55409, 55410, 56086, 56087, 56089, + 56091, 32124, 32123, 41607, 56090, 56754, 55407, 41609, 42108, + 56757, 32507, 56755, 56756, 57347, 57348, 57349, 57350, 42492, + 42494, 57351, 42493, 42495, 57847, 57352, 43517, 33555, 58870, + 43518, 43516, 59052, 59173, 59289, 59367, 59435, 26865, 26707, + 45361, 35958, 45360, 45952, 45951, 27447, 46607, 46608, 47402, + 46612, 46611, 46610, 46609, 47401, 47404, 37197, 28871, 47405, + 28318, 37198, 37196, 47400, 47406, 37812, 37810, 48314, 28872, + 48316, 37811, 48315, 48313, 48317, 47752, 49219, 38423, 49220, + 49217, 38424, 49218, 49221, 38425, 39069, 50152, 50154, 39070, + 50153, 39735, 30591, 53576, 53577, 30592, 54566, 53575, 30589, + 40420, 40419, 31163, 54567, 31671, 31669, 41026, 55413, 55412, + 55415, 31165, 55414, 41608, 32126, 41610, 56096, 56097, 32130, + 56094, 56095, 56093, 32129, 42109, 56761, 43360, 56760, 57353, + 56759, 42496, 57354, 57355, 57356, 57357, 56092, 42854, 57848, + 57849, 43144, 58249, 58591, 58590, 59053, 59290, 59469, 45362, + 45956, 45953, 45957, 36294, 27449, 27448, 27451, 45955, 27450, + 45954, 27842, 46615, 36724, 36726, 36723, 27840, 27845, 27844, + 46614, 36725, 27843, 27841, 46616, 27846, 37199, 47408, 47407, + 47409, 47410, 47411, 47413, 47414, 28324, 47412, 37814, 28875, + 48321, 48322, 48328, 37816, 28879, 48329, 48323, 48320, 48330, + 48331, 37815, 48325, 48327, 48326, 48324, 38429, 38426, 29416, + 49222, 49223, 49224, 38428, 38427, 48319, 39078, 39071, 50156, + 39072, 39076, 39073, 39077, 39074, 39075, 50155, 39079, 39741, + 39742, 53579, 39739, 30593, 39743, 39736, 53578, 39738, 50158, + 39737, 53583, 53584, 53580, 30595, 53581, 30594, 53582, 54568, + 54570, 40424, 54573, 54569, 54571, 31168, 40422, 40425, 40423, + 39740, 40421, 54572, 40426, 31672, 55417, 41027, 55418, 56762, + 41028, 55416, 41611, 32131, 56104, 41029, 32132, 56100, 56102, + 56099, 56103, 56101, 56098, 32509, 42111, 42110, 56763, 57360, + 57361, 57358, 33085, 57850, 57852, 57359, 57851, 58251, 58252, + 58250, 44593, 45363, 44922, 27134, 27135, 46617, 28325, 36295, + 47415, 48332, 53585, 54575, 54574, 45364, 45365, 35432, 27848, + 37200, 37817, 38430, 50159, 53586, 53588, 39080, 54577, 54576, + 55419, 35532, 45366, 45958, 45959, 37201, 47416, 28880, 37820, + 37819, 29418, 49225, 50161, 39085, 39081, 39086, 39083, 39082, + 39084, 30002, 50160, 39746, 39747, 39748, 39744, 39745, 53589, + 40428, 40427, 31169, 31170, 54579, 54580, 54578, 41030, 31675, + 55423, 55420, 55421, 41612, 31677, 56105, 55422, 56766, 41613, + 56107, 56106, 56765, 42112, 56764, 33087, 57853, 33445, 43519, + 43642, 35960, 35959, 45369, 45368, 36298, 36296, 36297, 27851, + 46623, 27850, 46619, 36727, 46625, 46620, 46622, 46621, 46626, + 46618, 36728, 47418, 28328, 28327, 28329, 47420, 37202, 47422, + 47421, 47419, 47417, 37821, 48334, 48335, 37822, 48336, 48333, + 49227, 49231, 38432, 38433, 49226, 49236, 49234, 49232, 38434, + 49233, 49229, 49235, 49228, 49230, 39089, 39090, 39087, 30597, + 50163, 39091, 39088, 39092, 50164, 39749, 53591, 39752, 53594, + 39751, 39750, 30598, 39754, 53590, 53595, 39753, 53592, 40431, + 40434, 40430, 40432, 40433, 54584, 54582, 54581, 54583, 40429, + 41031, 41032, 41033, 55424, 31682, 31683, 41035, 41034, 55426, + 55425, 22908, 56110, 41617, 41614, 32135, 56112, 41036, 56111, + 41615, 41616, 56108, 56109, 56767, 42113, 42114, 56769, 56768, + 57364, 57363, 57362, 42855, 57854, 57855, 43145, 58253, 33446, + 35433, 45370, 36299, 47423, 48337, 47919, 49239, 50167, 50166, + 53596, 54585, 57365, 35536, 35534, 45371, 45372, 44595, 35535, + 35533, 35708, 35707, 44926, 44925, 44924, 44923, 45962, 45961, + 45960, 35965, 35969, 45375, 27858, 45384, 45385, 45373, 35968, + 45377, 35964, 35962, 45382, 35966, 27146, 45379, 45386, 45383, + 27045, 45376, 45378, 35967, 45381, 45374, 46630, 46628, 27852, + 35961, 46629, 45978, 27460, 36303, 45973, 36300, 36307, 45974, + 27461, 47427, 45972, 27458, 45976, 27463, 45970, 36305, 45971, + 36306, 36301, 27863, 36304, 45963, 45966, 45967, 45969, 45965, + 45980, 45977, 45975, 45981, 45979, 47426, 47425, 47428, 47429, + 46639, 47424, 36730, 27853, 28330, 27860, 46641, 36735, 27859, + 46637, 36737, 46633, 36739, 37823, 36738, 46632, 36729, 46634, + 27855, 48342, 36732, 36731, 36569, 46638, 46636, 46635, 46642, + 48341, 48339, 48340, 48338, 45968, 36734, 36740, 36733, 37213, + 47434, 47432, 37204, 28339, 37205, 27857, 37210, 28331, 28346, + 38435, 28345, 47430, 37207, 47438, 28334, 37214, 37215, 47439, + 47437, 28340, 37211, 47440, 47441, 47435, 47436, 49240, 49241, + 49242, 37212, 37208, 37209, 48350, 37827, 48344, 37824, 48358, + 48349, 28885, 37829, 48362, 48343, 50170, 37826, 48363, 49246, + 28897, 37831, 48368, 48361, 48359, 48366, 37825, 39094, 48345, + 48354, 48357, 48351, 48356, 48360, 48348, 48365, 48346, 48347, + 50168, 50172, 50169, 37828, 48353, 37206, 37830, 37833, 37834, + 48364, 37836, 48352, 50173, 50171, 38444, 29422, 38451, 38446, + 38436, 38440, 38452, 49254, 29421, 49243, 28895, 38447, 38439, + 49248, 29425, 49250, 29423, 49256, 49244, 38454, 49245, 49249, + 38448, 49253, 38442, 38441, 38450, 38449, 49251, 38437, 49255, + 29432, 49258, 49257, 53597, 53598, 49252, 38445, 38443, 30021, + 39100, 30029, 30020, 39106, 50175, 39099, 30027, 39107, 39104, + 30026, 39096, 39102, 30011, 30028, 39097, 50182, 50177, 39095, + 50179, 39098, 50178, 39101, 54586, 39105, 30025, 50176, 50181, + 49879, 38438, 39103, 30600, 39758, 53599, 30604, 53606, 39757, + 30606, 55429, 53602, 39759, 53600, 30607, 55427, 39755, 53603, + 53601, 53604, 53605, 55428, 50174, 39756, 54595, 40442, 40437, + 31185, 31174, 40436, 31176, 54590, 54597, 40440, 40441, 31182, + 39760, 40439, 54588, 54596, 40444, 54593, 42115, 31177, 54598, + 53607, 54591, 54592, 54587, 54589, 54594, 56113, 56770, 56114, + 40445, 40435, 40446, 40443, 40438, 56118, 41041, 41040, 55431, + 31691, 31687, 31686, 41039, 41037, 32510, 56772, 41045, 55434, + 55177, 55432, 56771, 56774, 41044, 55430, 41043, 41038, 55433, + 56775, 32138, 41621, 41618, 41620, 41623, 56115, 41625, 56117, + 41622, 56120, 41619, 42497, 41626, 56116, 56194, 32136, 32511, + 56778, 56784, 42116, 42117, 41624, 56779, 56783, 56785, 56777, + 56781, 56780, 56782, 56776, 56786, 57368, 42501, 42500, 32816, + 32814, 42498, 57367, 57366, 33093, 57856, 42856, 58593, 57929, + 58592, 33292, 33290, 58254, 58594, 43362, 58596, 58598, 58599, + 43361, 58595, 33447, 58600, 58601, 58872, 43520, 58873, 43643, + 59368, 43788, 43840, 44929, 26870, 46643, 48369, 48370, 50184, + 56122, 42858, 59436, 43909, 44597, 44931, 26871, 44930, 45387, + 36309, 45983, 36741, 46645, 27864, 46646, 46644, 47445, 47444, + 48372, 48373, 49259, 39108, 30613, 30614, 39761, 53608, 31186, + 40447, 55435, 41047, 41046, 42118, 32514, 42504, 56787, 42502, + 42503, 59174, 44932, 45388, 45389, 46649, 46647, 46648, 37216, + 28347, 48374, 38455, 39109, 39762, 53609, 39763, 54600, 31187, + 40448, 31692, 41627, 41628, 26873, 44598, 44435, 45390, 45391, + 27866, 45984, 46650, 46656, 46652, 46651, 27867, 46654, 46655, + 47448, 37217, 46653, 47447, 47450, 47449, 37837, 48375, 37838, + 39110, 49263, 49262, 49260, 50185, 50191, 50186, 50187, 39764, + 53610, 50188, 50192, 50189, 53611, 53612, 53613, 50190, 39111, + 39765, 39766, 53614, 53615, 54601, 53616, 53617, 54603, 54602, + 41049, 54606, 54605, 54604, 41048, 41051, 55436, 56125, 56124, + 41052, 32140, 56123, 56788, 41630, 41629, 56789, 57370, 42119, + 42506, 42507, 42508, 57369, 56790, 42120, 57371, 57372, 42859, + 58255, 58256, 58602, 43521, 59054, 43644, 43646, 43645, 59437, + 59438, 59552, 43945, 45985, 27869, 27868, 46657, 46658, 46659, + 36742, 36743, 47451, 47452, 47280, 48379, 48378, 48380, 39112, + 30030, 38778, 30031, 49264, 50193, 50195, 50194, 53618, 53620, + 53619, 54607, 40449, 54608, 55437, 41631, 56127, 56126, 42509, + 42860, 58603, 43363, 39767, 39768, 57373, 58604, 58874, 59056, + 43789, 35709, 27152, 27151, 45394, 45393, 45392, 35970, 27464, + 27468, 27467, 45986, 45988, 45987, 46665, 36744, 46664, 46660, + 36745, 27873, 27872, 46661, 46662, 46663, 37219, 28350, 28352, + 47457, 37220, 47453, 47454, 37218, 37839, 48384, 48383, 28351, + 28907, 28905, 28906, 28908, 48385, 38456, 49267, 38457, 49265, + 49266, 49268, 49269, 38459, 50202, 39116, 39114, 30035, 50197, + 50201, 50198, 39113, 39776, 30620, 30619, 39775, 39772, 39773, + 39777, 39769, 53626, 53624, 39778, 53621, 53623, 53625, 53622, + 39774, 39770, 39771, 40453, 40450, 40454, 54611, 40451, 54614, + 54612, 54616, 40452, 54615, 54613, 54610, 55439, 31694, 41059, + 41053, 41056, 41055, 41057, 41058, 32142, 41638, 56129, 41632, + 41637, 41640, 41636, 32143, 32144, 41633, 41634, 41639, 32141, + 56130, 56128, 41635, 56791, 42124, 42123, 42122, 42121, 56792, + 56793, 42510, 57374, 42862, 42861, 57859, 43146, 43147, 33293, + 58257, 57857, 57858, 33448, 58605, 59058, 59057, 59175, 43790, + 33792, 45989, 37818, 57375, 37221, 37222, 47458, 37223, 49270, + 49271, 49272, 50204, 50205, 50203, 53628, 53627, 53629, 40455, + 40456, 54618, 54617, 42512, 42511, 57376, 35434, 44391, 26709, + 44603, 44604, 45395, 44601, 35537, 44600, 44599, 26876, 26877, + 26881, 44933, 26879, 44936, 44934, 44935, 44937, 45398, 27163, + 27158, 27160, 35973, 27164, 27159, 27156, 35971, 45399, 35972, + 27155, 46666, 44787, 45402, 35975, 27157, 45397, 45401, 46668, + 46667, 45396, 27474, 27470, 27471, 27472, 36314, 46000, 45992, + 27475, 45998, 45994, 36312, 45990, 45997, 45995, 45999, 46002, + 46003, 36310, 36313, 36311, 45901, 45996, 45400, 48387, 36751, + 27877, 27878, 27889, 36747, 36749, 36753, 27875, 36746, 36756, + 27882, 36760, 27879, 27892, 36757, 27887, 46685, 46686, 36758, + 46688, 36755, 27893, 46680, 46679, 48386, 47471, 46676, 36752, + 46675, 46672, 46670, 46681, 46683, 36750, 46678, 36759, 36748, + 46674, 46682, 46684, 46689, 46671, 37234, 37237, 37230, 28373, + 37235, 28358, 28371, 28365, 47487, 28375, 28378, 47475, 47466, + 47472, 37226, 47464, 47460, 28357, 37241, 47459, 47470, 47493, + 28361, 47491, 48435, 47489, 46687, 48403, 28356, 37224, 28368, + 47462, 47473, 37239, 47484, 47490, 47483, 47478, 37238, 47488, + 47463, 47476, 37240, 38460, 49273, 49274, 47485, 47486, 47469, + 37225, 37242, 47479, 37232, 37236, 37229, 48432, 47494, 47495, + 47467, 47465, 37848, 47468, 37231, 47474, 47482, 47492, 37228, + 37840, 28910, 37860, 37861, 37853, 37863, 37864, 37854, 28918, + 48405, 48397, 48420, 48395, 48390, 37850, 37858, 37859, 48406, + 48404, 37849, 37865, 37862, 28367, 28912, 28915, 28913, 28923, + 37845, 28909, 48388, 48430, 28924, 48389, 37855, 48407, 48431, + 48408, 48424, 48425, 28932, 48415, 28930, 48412, 37847, 48417, + 48400, 48422, 48399, 48411, 48426, 48418, 37856, 50213, 50208, + 50209, 37842, 48413, 48394, 48423, 39117, 48398, 48421, 48402, + 48414, 48392, 48419, 28931, 37851, 37846, 48401, 48433, 50206, + 37857, 50210, 37852, 48429, 50212, 50211, 48391, 48409, 48312, + 37843, 48393, 48396, 48428, 48434, 50207, 37844, 48410, 29456, + 49275, 49293, 38491, 49281, 49282, 38465, 29450, 49296, 49313, + 29453, 29455, 38482, 49317, 38471, 29444, 29441, 49288, 49322, + 38464, 49304, 49308, 38480, 49297, 29445, 29448, 38467, 49290, + 29449, 29458, 38478, 29466, 38492, 29451, 38483, 49316, 38476, + 29440, 29438, 49324, 29452, 49289, 38485, 38479, 38469, 38475, + 49279, 49306, 49302, 49287, 49326, 38474, 49280, 49323, 49278, + 38493, 49301, 49292, 49283, 38486, 38490, 38472, 38484, 49305, + 49319, 49315, 49295, 49309, 38470, 29446, 49310, 38461, 38477, + 38463, 38487, 49286, 29442, 29464, 49299, 38466, 38462, 49294, + 49311, 53630, 49320, 38473, 49291, 49307, 49277, 49321, 49325, + 49312, 29467, 38481, 38488, 49276, 49285, 49298, 49300, 49314, + 49318, 38489, 29463, 49284, 48427, 38468, 30055, 50259, 39140, + 50214, 50230, 39146, 30052, 50249, 30039, 50232, 30042, 50223, + 39136, 50237, 30038, 50245, 39132, 50227, 50252, 39144, 39141, + 50239, 39129, 30043, 50220, 50248, 50240, 50226, 39139, 39128, + 39119, 30051, 50228, 30047, 50217, 30046, 30060, 30044, 39134, + 53635, 50218, 39121, 39126, 39120, 39143, 39788, 30048, 39138, + 50219, 30057, 50243, 39127, 50250, 50233, 50222, 39135, 39125, + 54620, 39118, 39123, 50234, 50236, 50238, 50241, 50253, 50256, + 50257, 50235, 39137, 50246, 50244, 49327, 39145, 50255, 50258, + 50254, 50221, 50216, 50229, 50224, 49303, 50247, 30059, 30037, + 39124, 39148, 54619, 39122, 50260, 39142, 39147, 40457, 39133, + 53655, 30643, 39779, 30622, 30641, 53674, 39782, 53677, 53666, + 53639, 39786, 53652, 53667, 53668, 53653, 53662, 39787, 53658, + 30634, 39790, 39795, 53643, 53675, 39793, 39792, 40458, 39794, + 39804, 53654, 53665, 53636, 53661, 53648, 39801, 39784, 30640, + 53631, 53638, 53647, 53646, 53650, 39780, 53649, 53672, 53641, + 39791, 53633, 39781, 39803, 53671, 53645, 53640, 53657, 30635, + 39802, 39798, 53663, 40475, 30645, 39796, 53632, 53637, 53642, + 53659, 53660, 53676, 30646, 53669, 39797, 53673, 53664, 53651, + 39783, 53634, 39800, 39789, 50215, 56131, 54662, 31220, 54631, + 31217, 31227, 54664, 40460, 31218, 40480, 54648, 40471, 31194, + 31223, 40468, 40478, 54641, 31198, 40477, 40462, 40482, 54632, + 40484, 31222, 54621, 40464, 40466, 54657, 40472, 40485, 54642, + 54640, 39805, 31193, 40459, 40481, 54650, 54656, 54646, 40487, + 40483, 53678, 53670, 54663, 41073, 31213, 54627, 31216, 54635, + 40470, 31215, 31197, 39785, 54628, 40469, 54637, 40473, 40463, + 54626, 54668, 54659, 31221, 40479, 54623, 31201, 54638, 56132, + 54624, 54666, 31225, 54647, 54634, 54644, 40461, 40467, 40474, + 54625, 54633, 54636, 54643, 54645, 54652, 54654, 54658, 54660, + 54665, 54670, 54671, 54630, 31206, 54639, 54669, 54661, 40488, + 40465, 54629, 54622, 54653, 54667, 40486, 40476, 54651, 55451, + 31703, 31708, 55443, 56144, 55453, 31717, 31718, 40489, 41068, + 41076, 41066, 55470, 55474, 41062, 31719, 31700, 55456, 31714, + 41078, 55457, 55462, 55478, 41077, 41082, 55476, 41079, 41061, + 41071, 55459, 41075, 55448, 55463, 55469, 41074, 31720, 41060, + 41080, 31710, 55475, 41070, 31715, 41064, 41081, 55464, 41069, + 55445, 55450, 56142, 55440, 55441, 55480, 55458, 31716, 55473, + 55447, 55452, 56795, 55446, 55461, 55468, 54655, 55454, 55460, + 55482, 41067, 39806, 31712, 56796, 41063, 41065, 55442, 55466, + 55467, 55471, 55479, 31702, 55455, 55472, 55481, 55449, 41653, + 56160, 32151, 56161, 41643, 32152, 41083, 41656, 56157, 41646, + 41641, 56133, 41642, 41650, 41663, 41666, 56139, 41660, 56155, + 32149, 41084, 41665, 41647, 41657, 56146, 41645, 41655, 56162, + 32163, 41658, 32161, 32153, 32157, 41661, 41659, 56147, 57377, + 56143, 56140, 32162, 56811, 41652, 56136, 56154, 56158, 32160, + 55465, 56135, 56137, 56138, 56148, 56151, 56153, 56159, 56163, + 56164, 32154, 56149, 41648, 56150, 56794, 41662, 41651, 32156, + 56156, 41644, 41649, 41664, 56152, 56134, 42141, 42126, 57400, + 42127, 42137, 42133, 32522, 32518, 42142, 42134, 56799, 56812, + 42138, 42132, 32521, 42125, 42521, 56810, 42135, 56813, 42136, + 56808, 56827, 56824, 56803, 42130, 42140, 56818, 56821, 56805, + 56804, 56809, 56814, 57391, 56820, 56800, 56819, 56817, 57378, + 42131, 42129, 32515, 42139, 56816, 56807, 56806, 56797, 56798, + 56801, 56815, 56823, 56825, 56822, 57401, 57392, 57385, 42519, + 42526, 57404, 42520, 42523, 32830, 57395, 42525, 32826, 42518, + 42863, 57402, 42514, 57388, 57387, 57383, 42517, 42524, 57384, + 32822, 57410, 42515, 57382, 57390, 57405, 57398, 56802, 57408, + 42522, 32819, 57396, 42516, 57409, 57397, 42128, 57880, 58258, + 57380, 42513, 42527, 57389, 57393, 57394, 57399, 57406, 57407, + 57381, 57379, 57403, 57876, 33296, 42871, 57879, 57872, 42867, + 33099, 33097, 57866, 33101, 42865, 57877, 42868, 57878, 33096, + 42528, 42870, 57868, 57860, 42869, 57875, 57864, 57862, 57873, + 33100, 42866, 42872, 42873, 57861, 57869, 57386, 57867, 58271, + 42864, 57863, 57870, 57874, 57865, 43149, 33297, 43150, 43152, + 43153, 58265, 43154, 33302, 33301, 58272, 58270, 58262, 58612, + 43148, 43151, 58264, 33299, 33300, 58263, 33295, 58268, 58260, + 58273, 58259, 58261, 58266, 58269, 58608, 58619, 33454, 43365, + 33453, 43364, 33450, 33452, 33451, 33449, 43368, 58610, 58620, + 43367, 43647, 58614, 43369, 58616, 58617, 58606, 58609, 43366, + 58615, 58613, 58611, 58618, 58607, 43524, 43523, 43522, 58875, + 43525, 58877, 58881, 58878, 58879, 58884, 58876, 58882, 43649, + 58880, 58883, 43650, 59178, 43648, 59176, 59061, 59060, 59059, + 59062, 43730, 43731, 59182, 59180, 59179, 59181, 59177, 59165, + 33741, 59291, 43791, 33714, 33743, 43841, 33766, 59369, 59370, + 43938, 59439, 43873, 59471, 59493, 43944, 43926, 59470, 27478, + 46006, 46005, 37245, 37243, 28380, 28379, 47502, 28381, 47503, + 47501, 47500, 46690, 48437, 37868, 48438, 38498, 38494, 38495, + 49330, 49329, 49328, 39150, 50261, 50265, 30064, 50264, 50266, + 50262, 50263, 39151, 30063, 53682, 53680, 54676, 39807, 53679, + 53681, 53494, 40493, 40494, 40491, 40492, 31228, 40490, 54677, + 54673, 54674, 31231, 31230, 40496, 54675, 40495, 54672, 31721, + 55484, 56166, 41670, 32166, 56165, 32164, 56167, 41669, 56829, + 56828, 32523, 56830, 57412, 42529, 57413, 57063, 42875, 57411, + 42874, 42814, 57883, 57882, 43155, 58565, 33769, 35710, 44940, + 27167, 45406, 27482, 46008, 27479, 27481, 46007, 36315, 46010, + 46009, 46011, 27480, 36769, 46695, 36765, 36772, 46694, 36766, + 36771, 46693, 27899, 27897, 27901, 36767, 46703, 36762, 46698, + 36770, 36761, 46697, 36768, 36773, 46701, 46691, 36764, 46692, + 46699, 46700, 36763, 46702, 37246, 28386, 47506, 37247, 37248, + 37249, 37255, 28389, 28390, 47513, 37251, 28388, 37252, 47507, + 37256, 47510, 28391, 28387, 47508, 47511, 47505, 47512, 47514, + 37253, 47515, 28392, 47504, 37254, 37250, 37870, 48441, 28940, + 48449, 37889, 37875, 37872, 37874, 37877, 37884, 37880, 48450, + 48439, 48444, 37873, 37888, 48443, 48452, 48451, 37879, 48440, + 37876, 37882, 48454, 48445, 48446, 49333, 37886, 37881, 49343, + 37885, 48453, 48448, 37883, 37869, 48442, 28944, 49335, 49334, + 29479, 29481, 49339, 29473, 38501, 38504, 38499, 29470, 29472, + 38505, 38507, 38503, 38500, 29483, 29469, 49337, 49338, 49331, + 49332, 50267, 49336, 49340, 38502, 49341, 56850, 49342, 49344, + 39152, 39157, 39162, 39158, 39163, 30080, 39156, 30078, 50292, + 39166, 30072, 39160, 30069, 50281, 50269, 50280, 30081, 39165, + 50270, 50276, 39155, 50287, 39164, 39159, 50286, 50290, 39167, + 50279, 50288, 50272, 39168, 39169, 50277, 50291, 39161, 50271, + 50284, 50285, 50275, 39153, 50273, 39154, 50278, 50283, 29477, + 50289, 50274, 30656, 53708, 39812, 30657, 30654, 53697, 30663, + 39824, 53696, 53685, 39810, 53684, 53694, 53704, 39816, 30661, + 30653, 53705, 53693, 39815, 53700, 53690, 53703, 40497, 30655, + 30652, 39821, 39819, 39809, 39818, 39817, 53683, 39820, 30075, + 39811, 39823, 39822, 30664, 53711, 53689, 53686, 53709, 53698, + 53710, 53701, 53688, 50282, 53695, 53702, 39813, 30650, 39808, + 53692, 53706, 53699, 53691, 40499, 31244, 40505, 40504, 31233, + 40503, 40500, 54691, 54706, 40506, 31247, 40510, 31248, 31239, + 31241, 40511, 54690, 31234, 54684, 31238, 54705, 40508, 40498, + 40514, 40501, 55485, 40507, 54686, 31245, 40509, 54693, 54709, + 40502, 54681, 40513, 54697, 31246, 39825, 54688, 54682, 40512, + 54699, 31242, 54704, 54711, 54679, 54700, 54680, 54701, 54692, + 54707, 54695, 54685, 54710, 54702, 54687, 54703, 54694, 54683, + 54689, 31734, 41086, 41089, 31730, 55509, 55495, 31741, 31737, + 55499, 55493, 55512, 31739, 55497, 53712, 31725, 41094, 55507, + 55490, 31738, 55506, 41088, 41092, 55510, 31735, 55498, 55492, + 41096, 31728, 55491, 31726, 55489, 55511, 41087, 55487, 55486, + 55500, 31736, 41090, 41091, 55496, 55494, 55502, 55505, 55508, + 55488, 41085, 55501, 55503, 41093, 32176, 32170, 56170, 56182, + 56173, 56189, 41676, 41677, 41097, 32171, 41689, 56174, 32169, + 41678, 32168, 32173, 41672, 41675, 41686, 32167, 41683, 56171, + 41671, 41674, 41684, 56172, 56177, 56176, 41673, 56196, 56192, + 41688, 56195, 41682, 41685, 56190, 41679, 56193, 41680, 56186, + 56183, 56178, 56184, 56169, 56175, 56168, 56179, 56191, 56187, + 56185, 32175, 56188, 41687, 32531, 56849, 56832, 56839, 56851, + 56833, 56848, 56852, 32526, 42145, 42143, 56841, 56846, 56844, + 42147, 56836, 56847, 56843, 56845, 57414, 56840, 56853, 56854, + 56842, 42148, 56835, 56838, 56831, 56834, 32525, 32530, 56837, + 56197, 57424, 57429, 42532, 57415, 32839, 42531, 42536, 57427, + 57419, 42535, 57423, 42537, 42538, 57422, 42533, 57421, 57426, + 57420, 57416, 42534, 57418, 57896, 57417, 57430, 57425, 33102, + 33107, 57884, 57889, 42878, 57894, 57887, 57890, 42877, 57892, + 42876, 42879, 57885, 33106, 57888, 33108, 33104, 57891, 42881, + 57897, 57428, 57893, 33105, 57898, 42880, 42882, 57895, 57886, + 43159, 33303, 43157, 43156, 58282, 58277, 43158, 43162, 43161, + 58275, 43164, 43166, 43163, 58274, 33304, 58285, 58287, 58286, + 58279, 58280, 43165, 43167, 58283, 58288, 43160, 58278, 58276, + 43371, 33455, 33456, 58622, 43372, 33458, 58624, 58621, 43373, + 58627, 43370, 58885, 58625, 33459, 58626, 43375, 58281, 43374, + 43533, 58886, 33557, 43532, 43530, 58887, 43527, 33559, 58888, + 43531, 43529, 33561, 43534, 43528, 43651, 33651, 43655, 43657, + 33558, 59063, 43653, 59067, 59066, 59068, 43654, 43656, 59064, + 43652, 59186, 59184, 59187, 59185, 59188, 59297, 59295, 43792, + 59294, 59298, 59183, 59292, 59300, 59293, 59299, 59296, 59373, + 33771, 59374, 43842, 43843, 59371, 59372, 43874, 59440, 59441, + 43875, 33793, 59473, 59472, 59512, 35976, 45408, 45407, 27483, + 46705, 36774, 46708, 46707, 48455, 48457, 38508, 49347, 49345, + 49348, 49346, 39172, 39170, 39171, 50295, 50293, 53713, 39826, + 53714, 53715, 50294, 40516, 40517, 40515, 54712, 54713, 41100, + 41099, 32177, 32178, 56198, 56200, 32179, 56199, 42149, 42539, + 57431, 57899, 58290, 58289, 58889, 59474, 27168, 45409, 27169, + 46012, 46013, 36316, 36775, 46710, 46709, 36776, 47516, 37890, + 48460, 48459, 48458, 49352, 49350, 29484, 49351, 49349, 30083, + 39827, 50296, 50297, 31742, 55513, 32180, 56201, 56855, 57900, + 58629, 35977, 45410, 45411, 45412, 36318, 46014, 27484, 27486, + 36320, 46016, 36319, 46015, 36317, 36321, 46716, 36781, 27904, + 46718, 46722, 36784, 46723, 46724, 27903, 46712, 36785, 46714, + 36777, 46719, 46715, 46720, 46717, 36780, 46713, 46711, 36779, + 46721, 46725, 46726, 28395, 37899, 28398, 28949, 37261, 28396, + 47525, 37262, 37265, 37259, 37260, 37258, 47526, 47527, 37257, + 47520, 47522, 47521, 47518, 47517, 47524, 47519, 37263, 47523, + 37264, 37898, 48468, 48466, 37895, 48464, 37896, 37900, 28951, + 48465, 48461, 28950, 48463, 37897, 37894, 37892, 38513, 37891, + 48462, 48467, 48469, 37893, 38519, 38511, 38515, 29490, 38520, + 38512, 38516, 29488, 38514, 38518, 49364, 29489, 49359, 49357, + 49365, 38517, 38509, 49353, 49356, 49362, 49355, 49366, 49354, + 49358, 38510, 30095, 30091, 50302, 50308, 30088, 39173, 39176, + 30087, 39175, 37901, 50309, 39177, 50300, 50298, 50299, 50307, + 50306, 39174, 50304, 39178, 50305, 50301, 30098, 50310, 50303, + 30094, 39831, 53725, 30676, 39834, 53728, 30097, 53727, 39830, + 30667, 53726, 54715, 39832, 53731, 53716, 30680, 30670, 30672, + 53724, 30679, 30678, 39828, 53729, 53723, 53717, 39829, 53720, + 39833, 53722, 53721, 53718, 53719, 53730, 40525, 40524, 54718, + 40520, 40523, 54714, 31256, 54716, 31259, 55525, 40522, 40521, + 54717, 31253, 54719, 54722, 31252, 40518, 54723, 40519, 54721, + 54720, 41107, 41108, 55514, 41104, 55520, 55527, 31747, 41101, + 41102, 41106, 41105, 55522, 55518, 55526, 56208, 55519, 53732, + 55521, 55523, 41109, 55515, 55517, 41103, 56202, 32184, 56209, + 56211, 41700, 41696, 56210, 32190, 41693, 41694, 41704, 32192, + 32181, 56207, 41692, 32186, 32191, 41702, 56206, 56204, 41690, + 32182, 41111, 41691, 56205, 56214, 56203, 41698, 41699, 41110, + 41701, 41703, 41697, 56861, 42152, 42153, 32532, 56866, 56867, + 42150, 42151, 56857, 56858, 56860, 56864, 56865, 56859, 56863, + 32534, 56862, 56212, 57432, 42543, 57439, 42546, 42883, 42540, + 32842, 57436, 42541, 57435, 57901, 57433, 42544, 56856, 42545, + 42547, 57437, 57434, 42548, 57905, 57907, 42885, 33109, 57909, + 57908, 42884, 57903, 57904, 33110, 57906, 58296, 57902, 33308, + 58293, 33307, 33306, 43168, 58291, 58292, 58295, 58294, 43535, + 58892, 58891, 58890, 43658, 59071, 59070, 59069, 59190, 43732, + 59191, 59189, 59376, 59302, 59301, 59375, 43897, 59475, 59513, + 43940, 59546, 35711, 45413, 27487, 36786, 27907, 46727, 47528, + 49367, 30099, 50311, 50312, 50313, 53733, 54724, 54725, 55528, + 42154, 57440, 57910, 35978, 45414, 27910, 36787, 37268, 37269, + 47529, 47530, 37271, 37266, 28405, 28409, 37267, 37270, 48472, + 28956, 48475, 48474, 37903, 48471, 28955, 48470, 49371, 38522, + 38524, 38523, 49368, 49372, 38525, 49370, 50314, 39184, 39181, + 39185, 30102, 50315, 39182, 50316, 39183, 30684, 53736, 39837, + 30686, 39836, 53740, 39838, 49369, 53739, 39835, 39839, 53737, + 53735, 53734, 53738, 40529, 40528, 40527, 31262, 54727, 40533, + 55530, 31263, 31269, 31268, 40530, 40534, 54726, 40526, 40532, + 55529, 41705, 41114, 41113, 55533, 55532, 55534, 55531, 41707, + 32196, 32194, 56215, 41706, 56216, 56868, 56869, 42550, 57442, + 57441, 42549, 57911, 33310, 43170, 33309, 43536, 58894, 58893, + 43660, 43659, 59072, 33652, 43793, 43933, 59553, 45415, 45416, + 46017, 36323, 27911, 46729, 27912, 46728, 47540, 28414, 37274, + 37273, 47532, 47536, 28410, 47537, 37272, 47533, 28415, 47539, + 47531, 47535, 47538, 47534, 37904, 28957, 48477, 48480, 37905, + 48476, 48479, 48482, 48478, 28958, 28959, 48481, 38528, 38526, + 38527, 49373, 50319, 39188, 30104, 50321, 39186, 39187, 50318, + 50322, 50317, 50320, 53743, 39846, 53744, 39845, 39841, 39840, + 30691, 30693, 30688, 53746, 30695, 39843, 53745, 53747, 39842, + 53741, 53742, 39844, 54731, 54730, 31270, 40535, 31274, 40538, + 40540, 31271, 54729, 54728, 40536, 40537, 40539, 54732, 41115, + 55536, 55542, 55535, 41119, 41118, 55537, 54733, 41117, 55538, + 55539, 55540, 31753, 55543, 55541, 41116, 56218, 56219, 32197, + 56217, 56220, 32544, 42155, 32541, 32542, 56870, 56871, 56872, + 56873, 32545, 57443, 42886, 57912, 43171, 33311, 58630, 43537, + 59192, 33715, 59377, 59378, 43876, 59442, 35538, 35539, 45417, + 46736, 27918, 27914, 27913, 27919, 36788, 46733, 46734, 46732, + 46735, 46731, 28419, 47543, 47552, 28417, 47548, 37283, 37280, + 47550, 28421, 37275, 28425, 47558, 37276, 47556, 47544, 47557, + 37279, 47553, 47554, 47547, 47559, 47551, 47542, 47541, 47555, + 47545, 37281, 48493, 28969, 28965, 37908, 48488, 48487, 48490, + 48483, 28964, 48497, 28975, 28976, 37909, 48486, 48495, 48489, + 48496, 28974, 37906, 37907, 48491, 48494, 48485, 48498, 48492, + 38530, 29493, 29495, 49387, 38531, 37910, 38534, 29502, 29501, + 49381, 49392, 49378, 49390, 29494, 29496, 38537, 38529, 29504, + 49384, 49377, 49388, 49383, 49380, 29503, 38535, 49389, 38533, + 38532, 49385, 49391, 38536, 49374, 49376, 29500, 49375, 49386, + 49379, 50335, 30110, 39193, 30106, 39191, 39194, 30109, 30119, + 50323, 50333, 30112, 50340, 30115, 50336, 30118, 50327, 39192, + 50338, 50326, 30120, 50337, 50325, 39189, 39190, 50329, 30122, + 50331, 38538, 50332, 50334, 50324, 50339, 50330, 53768, 39865, + 53748, 39851, 39857, 53754, 53757, 53769, 53765, 53753, 39862, + 30698, 39864, 39858, 39852, 39855, 53761, 39859, 30704, 39861, + 30709, 53771, 53760, 53752, 39849, 39853, 53766, 53750, 39860, + 39854, 39848, 39850, 39847, 53759, 53758, 53749, 53755, 39856, + 53764, 53751, 39863, 53770, 53767, 53763, 53756, 54745, 40545, + 31288, 54757, 31279, 31276, 31283, 54748, 54756, 54742, 40542, + 54741, 40541, 54735, 31287, 31278, 54744, 31286, 54736, 31285, + 54746, 54753, 31277, 54755, 54737, 31280, 54734, 54758, 54739, + 54738, 54747, 54749, 40544, 54751, 31284, 54743, 40543, 54759, + 54740, 54750, 31755, 41127, 41126, 55552, 31756, 41129, 31758, + 55548, 31754, 41122, 41128, 41123, 55545, 55558, 31759, 56221, + 41124, 55554, 55546, 41131, 55560, 55551, 55547, 41125, 31761, + 55550, 55553, 55555, 55556, 31760, 41120, 55559, 41121, 55557, + 55544, 55561, 55562, 55549, 32209, 32201, 56234, 32203, 56232, + 41713, 56237, 56222, 32211, 41711, 40546, 32204, 41712, 56235, + 56229, 41709, 32198, 56238, 32200, 41710, 32208, 56236, 56226, + 56230, 56879, 56227, 32207, 56231, 56228, 56239, 56223, 56224, + 56233, 32210, 56225, 42156, 42158, 56884, 32553, 56881, 56883, + 32558, 32548, 42159, 32556, 56889, 32557, 42157, 32554, 56875, + 56878, 56240, 56877, 56890, 57452, 56888, 32551, 42551, 56876, + 32559, 56880, 57454, 56885, 56886, 56882, 56887, 32547, 32847, + 32848, 42553, 42552, 57446, 42554, 57448, 32846, 57444, 42162, + 57451, 57447, 57453, 57455, 57445, 57449, 57457, 57456, 57458, + 57913, 33121, 57923, 57916, 57922, 33111, 57917, 42892, 57915, + 57918, 33115, 42889, 42888, 33122, 58306, 58300, 33113, 42891, + 42890, 57920, 57914, 57919, 42887, 57924, 43172, 43174, 43177, + 43376, 33314, 58304, 33317, 43176, 33316, 43175, 58302, 58311, + 57925, 43173, 58301, 58305, 58310, 33313, 58309, 58307, 58308, + 33462, 33463, 58631, 43379, 43378, 43538, 58633, 58634, 58635, + 58632, 58313, 58898, 58899, 58896, 33564, 58897, 58901, 58895, + 58900, 58902, 33654, 59074, 43661, 59075, 59073, 43794, 59194, + 59193, 43734, 33745, 59303, 59379, 33773, 59349, 59443, 59549, + 35712, 27921, 36789, 36790, 28427, 28428, 28426, 47560, 28977, + 38539, 38540, 49393, 30124, 39867, 30710, 39868, 39866, 40547, + 54761, 54760, 55563, 41132, 56241, 56891, 56894, 42163, 56892, + 42164, 56893, 57459, 56895, 42893, 43795, 59494, 46018, 46738, + 46737, 28978, 37911, 48500, 38541, 29506, 49694, 30127, 50341, + 30128, 53775, 53774, 53772, 39870, 39869, 53773, 40548, 31291, + 54762, 40549, 54103, 41135, 55566, 41133, 55565, 41134, 55564, + 41714, 32214, 56243, 32213, 41136, 56897, 42166, 56898, 56244, + 56245, 42165, 42557, 42556, 42558, 42555, 42894, 43178, 43539, + 43662, 43796, 59444, 44607, 35540, 36325, 36793, 36792, 46740, + 46739, 47563, 47561, 37288, 47564, 47562, 28979, 48501, 28980, + 37913, 37912, 48503, 37914, 48506, 48502, 29508, 38544, 29507, + 49395, 49396, 38546, 38542, 38545, 49394, 48505, 38543, 38547, + 50342, 50343, 30130, 30129, 50346, 39196, 39195, 50348, 50347, + 50344, 50345, 39873, 30713, 53776, 53778, 39872, 39874, 53780, + 53779, 39197, 39871, 53777, 39198, 53781, 40552, 40553, 40551, + 54764, 31293, 54765, 54767, 54766, 40550, 54763, 41138, 41139, + 41140, 41137, 55569, 55567, 55568, 32216, 41715, 41716, 56246, + 56247, 56248, 32562, 42167, 40554, 56899, 32564, 42562, 42559, + 57460, 42561, 42560, 33125, 42895, 57926, 57927, 58314, 58637, + 58315, 58316, 58638, 58639, 43179, 58903, 59076, 58904, 43663, + 43735, 59445, 59536, 36326, 46741, 37291, 37290, 28434, 37289, + 28433, 47568, 47566, 48508, 37915, 37919, 37917, 37921, 37918, + 48511, 48509, 37920, 37916, 48510, 48507, 29513, 29514, 29511, + 49399, 38550, 49398, 38549, 29510, 29512, 49400, 38548, 50354, + 50349, 39202, 39200, 39199, 50352, 39201, 50351, 50353, 50350, + 50355, 39876, 39875, 30716, 39878, 39877, 39879, 30717, 53782, + 53783, 30718, 53784, 54775, 40556, 54769, 54771, 54772, 31295, + 40555, 54773, 40557, 54770, 54768, 54774, 31766, 41144, 55570, + 41143, 31765, 41141, 41145, 41142, 56249, 32218, 56250, 32217, + 41717, 56900, 41718, 42170, 56901, 42169, 56904, 57462, 56903, + 42168, 42564, 42563, 57461, 42897, 42565, 42896, 57928, 58317, + 58641, 58640, 43797, 36327, 27489, 46019, 27923, 46742, 36794, + 36795, 46743, 47573, 47575, 47570, 47571, 47569, 47574, 37292, + 47576, 28438, 47572, 28437, 48514, 28983, 37922, 37924, 48517, + 48515, 48516, 49404, 37923, 48518, 48513, 37926, 29517, 49401, + 49406, 49403, 38555, 38551, 49411, 49402, 38554, 38556, 38557, + 49405, 49413, 49415, 38558, 49412, 49414, 49408, 38553, 50358, + 30132, 39203, 50357, 50359, 50365, 50356, 50362, 39204, 30134, + 50364, 49410, 53786, 53788, 39205, 30722, 53787, 39881, 30723, + 39882, 53792, 53791, 53785, 53790, 54781, 40559, 54778, 54777, + 40560, 54782, 54785, 31299, 54779, 40558, 50361, 54784, 54783, + 54776, 54780, 40561, 55571, 41146, 40808, 41148, 40563, 41147, + 31768, 55577, 55573, 55575, 55576, 55574, 56254, 41724, 56257, + 41720, 56252, 56253, 56260, 41722, 41719, 41723, 56256, 56255, + 56251, 56259, 41721, 56908, 56912, 42172, 41725, 56911, 56258, + 42171, 32566, 56909, 42173, 56914, 56913, 42175, 56905, 56910, + 56907, 56915, 56906, 42174, 32854, 42567, 32853, 42566, 57463, + 57465, 57464, 42898, 33126, 42899, 42900, 57930, 58318, 43182, + 43181, 58321, 58319, 58320, 58642, 33465, 43180, 58643, 58644, + 58905, 58907, 58906, 59195, 45418, 46020, 46021, 37293, 48519, + 28987, 49416, 39207, 53793, 40565, 40564, 54786, 41150, 41151, + 41149, 41726, 56262, 56917, 56916, 42901, 58645, 45419, 45420, + 46022, 27490, 36798, 46747, 46746, 36799, 46745, 27926, 37300, + 47579, 37294, 28442, 37297, 37302, 37301, 28443, 47577, 47578, + 37298, 37295, 37299, 37296, 37930, 37929, 37933, 37928, 48523, + 48520, 38564, 37932, 37927, 48522, 28989, 37934, 49417, 48524, + 48521, 49419, 38561, 29518, 49421, 29520, 38566, 38560, 38568, + 38562, 29519, 49423, 49422, 38565, 49418, 49420, 50366, 50367, + 30139, 39209, 39213, 50371, 39208, 39211, 39214, 50370, 50368, + 39216, 30140, 39212, 50375, 39210, 50372, 50369, 39889, 39883, + 30725, 39886, 39885, 39884, 39887, 53798, 39893, 39890, 53800, + 39888, 53795, 53799, 53797, 50373, 53801, 54789, 39892, 39891, + 53802, 53794, 31304, 31305, 31309, 54791, 40570, 31302, 31303, + 31308, 54792, 31306, 54788, 54787, 40569, 40571, 54793, 54795, + 54794, 40572, 40567, 40568, 41156, 41158, 31773, 41157, 31775, + 31772, 41159, 31771, 41153, 31774, 41155, 41152, 55579, 41160, + 55578, 41730, 41733, 32222, 56266, 56265, 41727, 41731, 41729, + 41728, 41734, 41735, 56270, 56269, 41732, 56267, 56264, 56268, + 56263, 40574, 42177, 42181, 42183, 32569, 32567, 42178, 42182, + 42180, 42176, 56919, 42184, 42179, 56918, 56920, 32855, 32857, + 32861, 32860, 42568, 57466, 57468, 42569, 57467, 33128, 42903, + 42904, 57934, 57932, 57931, 57933, 42902, 43183, 43186, 33320, + 43185, 43184, 43380, 43381, 58322, 58646, 58647, 43540, 43541, + 43542, 33657, 59077, 43798, 43844, 45422, 45421, 46024, 36328, + 46023, 46750, 27928, 46751, 46749, 36801, 36800, 46748, 46752, + 28450, 47582, 28445, 37306, 47586, 37310, 47589, 37304, 37308, + 47591, 47592, 37307, 47590, 47581, 47585, 47580, 47584, 47588, + 37309, 37303, 47583, 37945, 37936, 37937, 37940, 48530, 37935, + 48527, 28997, 37942, 37938, 37946, 37939, 48528, 49438, 37947, + 48526, 48529, 37943, 38572, 38570, 49430, 38571, 38573, 49433, + 49429, 38578, 38576, 49427, 49426, 38569, 49428, 49431, 49435, + 38581, 49425, 49436, 38574, 38583, 38579, 49432, 38580, 38577, + 49434, 39218, 49437, 49424, 50385, 39232, 30143, 39220, 39228, + 39219, 39901, 39224, 50376, 50380, 39231, 39225, 39222, 39229, + 39230, 39226, 38575, 39221, 39233, 50383, 39235, 50378, 39236, + 50377, 50379, 50382, 50384, 50381, 39223, 53805, 30733, 39899, + 39894, 39897, 39902, 53804, 53808, 30735, 53812, 30734, 39898, + 39900, 30741, 39904, 39905, 30146, 53814, 39896, 53810, 53807, + 53811, 53806, 53809, 39903, 39907, 39908, 39234, 54802, 40577, + 39237, 40586, 31311, 54797, 40580, 54801, 54804, 54799, 40576, + 54798, 54806, 39906, 54807, 40584, 40585, 40575, 40578, 54800, + 40582, 40581, 54805, 31312, 40583, 31313, 54803, 41167, 41170, + 41162, 55585, 41163, 41169, 41165, 31780, 55583, 56282, 55588, + 41171, 31785, 55580, 55587, 55589, 41166, 31778, 55586, 54808, + 55584, 31786, 55582, 41164, 41161, 56277, 32227, 56281, 32226, + 41736, 41737, 41748, 41741, 32228, 41747, 41743, 56274, 42191, + 56280, 56271, 41749, 56273, 41739, 56276, 41738, 41744, 32354, + 32233, 41740, 56286, 41742, 56275, 56284, 56283, 56285, 56272, + 41746, 56278, 55581, 41750, 42185, 56938, 42190, 42192, 56941, + 42195, 56928, 41745, 42189, 56925, 42188, 42193, 32576, 56921, + 32230, 56926, 56279, 56931, 42194, 56927, 56939, 56922, 56929, + 42186, 42187, 56934, 56935, 56936, 56932, 42197, 42196, 56933, + 56930, 56940, 56923, 56937, 32574, 32862, 42580, 42574, 57469, + 42578, 42573, 42576, 57473, 57471, 32865, 42570, 32866, 57472, + 42575, 42572, 42571, 57474, 57470, 57475, 57476, 42579, 42581, + 42577, 33133, 57937, 33134, 42906, 57936, 57939, 33132, 33130, + 42907, 57938, 57935, 42905, 43187, 57940, 58323, 43190, 43192, + 43191, 43189, 58324, 43194, 58325, 58326, 43193, 43385, 43383, + 43386, 58650, 58649, 43384, 43382, 33568, 58908, 43544, 43543, + 33567, 43545, 58909, 59078, 58910, 59081, 33659, 59083, 59196, + 59082, 59080, 59079, 43737, 43736, 43738, 59305, 43845, 59380, + 43877, 59476, 44392, 44393, 44608, 36803, 46753, 36802, 37313, + 37312, 37311, 47593, 47596, 47595, 47597, 47594, 47598, 47599, + 28451, 37950, 48534, 37949, 48536, 48533, 37951, 48532, 48535, + 49442, 38584, 49439, 49443, 49444, 49440, 49441, 49445, 39239, + 50386, 50387, 39238, 50388, 50389, 53816, 39909, 30742, 53815, + 40587, 31318, 40588, 54809, 55591, 55593, 55592, 55590, 41172, + 41751, 56287, 56945, 56946, 56943, 56944, 56942, 32867, 57478, + 57479, 57941, 42908, 57942, 57943, 57944, 58327, 43387, 43664, + 46025, 36329, 46027, 46754, 36805, 46756, 46755, 36804, 37314, + 47609, 47608, 47601, 28455, 37319, 37318, 47605, 37316, 47602, + 47607, 47606, 37315, 37317, 47603, 47604, 28456, 48541, 48542, + 37961, 37959, 48540, 48539, 48537, 37320, 37958, 37953, 37956, + 37955, 48538, 37954, 37962, 37957, 37960, 49446, 49451, 38590, + 49449, 49452, 38588, 29526, 38589, 38586, 49450, 38585, 49448, + 29528, 38591, 50396, 50398, 39245, 30151, 50391, 50394, 39242, + 50395, 50390, 50399, 39240, 39243, 50400, 50397, 39244, 39241, + 53824, 50393, 39919, 53822, 53829, 53833, 53821, 39912, 53825, + 53820, 53827, 39911, 39914, 39917, 30749, 50392, 53823, 53828, + 53826, 39916, 39918, 53817, 39910, 53819, 53834, 53818, 53830, + 53831, 53832, 39915, 39913, 54810, 40596, 54816, 40597, 54814, + 40593, 54812, 54821, 40591, 40594, 40590, 54822, 54817, 54823, + 40589, 54820, 54813, 54815, 54811, 31322, 40592, 55595, 55603, + 41176, 55598, 55597, 55596, 55604, 31790, 55601, 31791, 55602, + 41173, 41182, 31793, 41179, 41178, 55605, 41175, 41181, 55594, + 55599, 55600, 41177, 41174, 41180, 32236, 56291, 32242, 41753, + 41755, 56290, 56293, 56292, 56289, 56288, 41752, 41754, 42199, + 56947, 56950, 56948, 56949, 42201, 32581, 32582, 42200, 42198, + 42202, 56951, 56953, 32871, 42586, 42584, 57484, 42585, 42583, + 57482, 42582, 57483, 57481, 57480, 42587, 57485, 33138, 42909, + 33139, 57947, 57946, 57945, 58333, 33323, 58329, 58328, 33324, + 58334, 58330, 58331, 58332, 58655, 58656, 43388, 58652, 58651, + 58653, 58654, 43390, 43389, 43549, 43548, 43547, 58914, 58912, + 58911, 43546, 58913, 43666, 43665, 43739, 43740, 59197, 43799, + 59381, 59198, 59306, 43878, 59477, 44942, 45423, 46757, 47610, + 37322, 37321, 29529, 49453, 39246, 39247, 53835, 53836, 53837, + 39921, 54824, 40598, 54825, 41184, 41183, 41185, 41758, 41757, + 56294, 56954, 32583, 56955, 57486, 58335, 58915, 59446, 59478, + 44943, 45424, 49456, 49455, 49454, 54708, 32584, 57948, 44612, + 44611, 44610, 26883, 44944, 26887, 46758, 44945, 46759, 44946, + 35713, 46760, 47611, 35981, 35982, 35987, 45425, 45430, 35986, + 27170, 35988, 35984, 27173, 45428, 45427, 45432, 35985, 35979, + 45429, 35983, 45426, 45431, 36330, 36337, 36333, 46028, 36332, + 46031, 36336, 36334, 27494, 27496, 36331, 46033, 46032, 27497, + 46034, 46030, 48072, 36338, 36335, 46769, 46773, 36812, 46768, + 36807, 36811, 27934, 36808, 36810, 46767, 46761, 46771, 27935, + 46772, 46762, 38592, 46770, 36809, 46765, 46763, 36813, 37324, + 37323, 46764, 47622, 37329, 28461, 47623, 37328, 46766, 37326, + 47618, 47621, 47617, 47615, 47616, 47613, 47624, 47619, 47614, + 37327, 28458, 47620, 37330, 37325, 47612, 37967, 37963, 37969, + 37968, 29005, 48554, 29009, 29007, 37970, 48553, 53838, 48548, + 48547, 48551, 48550, 29010, 48544, 48546, 48552, 48555, 48556, + 48545, 37966, 48549, 37965, 37964, 29008, 48557, 49475, 49463, + 49472, 49459, 29532, 29531, 49457, 38596, 49460, 49476, 49470, + 49474, 49466, 49464, 49478, 49477, 37971, 29533, 49462, 49473, + 49461, 49465, 49471, 49468, 49467, 49469, 49458, 38595, 38594, + 38593, 50404, 50403, 50406, 50401, 50409, 39249, 50405, 50407, + 50411, 39248, 39251, 50402, 50410, 55606, 50408, 55607, 55608, + 55609, 39250, 53845, 53843, 53849, 53840, 53842, 30752, 39923, + 30753, 39927, 39924, 30757, 53847, 39932, 53841, 53846, 53851, + 53852, 53848, 53850, 56295, 53839, 56296, 53844, 39928, 39926, + 39931, 39925, 39929, 39930, 39922, 54839, 40605, 40604, 40602, + 54834, 40600, 54838, 54831, 54840, 31323, 54835, 54837, 54826, + 54843, 56956, 54829, 54833, 54845, 54830, 54107, 54841, 54828, + 54827, 54836, 54844, 40601, 40606, 40603, 54832, 40599, 41186, + 31797, 55617, 41190, 55614, 41191, 55612, 57488, 54842, 55619, + 55615, 41189, 41192, 55610, 55613, 55616, 55620, 41193, 41194, + 41188, 41187, 55611, 41764, 56303, 32243, 56301, 41761, 56299, + 56306, 56305, 41760, 56304, 56297, 56300, 41763, 41762, 41759, + 56302, 56964, 56965, 56963, 56958, 56959, 56962, 56960, 56961, + 56957, 42206, 42205, 57491, 42590, 57490, 42588, 57489, 42589, + 58657, 33140, 57950, 42912, 57951, 57949, 42910, 42911, 42204, + 57952, 42913, 43195, 33468, 58338, 58337, 58336, 58658, 58660, + 58659, 59199, 58917, 58916, 43550, 59084, 59200, 59479, 44947, + 35435, 35543, 35542, 35544, 35541, 26712, 44613, 44615, 26714, + 26890, 35714, 26889, 26891, 26888, 44950, 26893, 35715, 28468, + 44949, 47628, 47626, 47627, 44948, 26892, 27179, 47625, 27175, + 27178, 27177, 46038, 27180, 35989, 35990, 48559, 45436, 48561, + 45434, 45435, 45433, 48558, 48560, 35991, 36341, 36340, 36339, + 27502, 27500, 36346, 29534, 36342, 49480, 49479, 49481, 46041, + 46035, 46036, 46037, 46040, 46039, 36345, 36343, 36344, 36818, + 36814, 27939, 46776, 36822, 36823, 36815, 36820, 36816, 27938, + 46778, 27940, 46780, 50412, 50414, 50415, 46777, 46779, 46775, + 36819, 36821, 36817, 36824, 50413, 46774, 39933, 30759, 28466, + 37334, 37333, 37338, 37331, 37335, 28464, 47633, 37337, 53857, + 53856, 47635, 53853, 53854, 53858, 53855, 47630, 47632, 47631, + 47629, 47634, 37332, 37336, 36825, 29014, 37978, 37975, 37977, + 29012, 37979, 48571, 37976, 38610, 37974, 37973, 48569, 48562, + 29011, 54847, 48564, 48563, 48565, 48566, 48567, 48568, 48570, + 54846, 37972, 55621, 38598, 38603, 38606, 38601, 38600, 29536, + 50416, 38599, 38605, 38602, 38607, 38609, 29538, 38608, 49484, + 38597, 49483, 49486, 38604, 30158, 39258, 39257, 39254, 39253, + 39264, 39260, 39256, 50421, 50418, 50417, 39262, 39263, 56307, + 56309, 56308, 56310, 50420, 39252, 30161, 50419, 41765, 39255, + 39259, 39265, 30761, 56966, 39937, 53862, 30760, 39938, 30762, + 40615, 39934, 39935, 53861, 53863, 30763, 56969, 56967, 53864, + 53866, 53867, 53865, 53859, 53860, 39939, 54849, 39936, 56968, + 42591, 40612, 40613, 57493, 31325, 54848, 40608, 40611, 54851, + 40609, 40610, 31326, 54850, 57494, 57492, 42592, 55622, 55626, + 41195, 31798, 41196, 57953, 57954, 57955, 55624, 55627, 55623, + 41198, 41197, 57956, 55625, 41767, 56311, 56312, 41768, 42210, + 41771, 56314, 56313, 41769, 41770, 58339, 41766, 56315, 56971, + 56316, 42209, 56970, 42208, 56973, 56972, 32587, 40614, 42207, + 32873, 42593, 57496, 57498, 57495, 57497, 33141, 57957, 57958, + 58340, 57959, 58661, 58918, 58919, 43846, 59307, 27942, 46781, + 37341, 37340, 47645, 47641, 37342, 28473, 47639, 47646, 47636, + 28474, 37343, 47643, 47642, 47637, 47638, 47644, 28476, 47640, + 47647, 48578, 37980, 37981, 29020, 48576, 38613, 29017, 29018, + 48577, 48573, 48572, 29016, 48574, 48575, 48579, 38612, 38615, + 38611, 49489, 49488, 38614, 50425, 39267, 39266, 50424, 50423, + 50422, 53869, 39943, 53873, 39944, 39940, 53877, 39941, 53876, + 53875, 53874, 53870, 53868, 39942, 53871, 53872, 53879, 53878, + 54855, 54854, 40616, 54857, 40619, 54859, 31334, 54864, 31331, + 31332, 54863, 40617, 54856, 54862, 54861, 40618, 54858, 54860, + 54852, 54865, 41204, 41202, 41203, 41206, 31803, 55629, 41205, + 31801, 55631, 41201, 55637, 41207, 55630, 55636, 55632, 55634, + 55635, 41200, 41773, 41774, 41776, 56324, 56320, 32244, 56317, + 41775, 32247, 41777, 55638, 32246, 56323, 41778, 56326, 56327, + 56318, 56322, 56319, 41779, 56321, 56978, 56975, 42219, 42216, + 42212, 42215, 42214, 42220, 42217, 42213, 42218, 56976, 56977, + 56979, 56974, 56325, 42221, 42211, 57499, 42598, 42595, 42596, + 42594, 42597, 57500, 57501, 57502, 57504, 57503, 33144, 33142, + 33143, 42914, 57961, 57960, 58341, 58342, 58345, 43196, 58344, + 58343, 58662, 58664, 43391, 58666, 58665, 43392, 58663, 43552, + 33572, 58920, 58921, 43551, 59201, 43800, 59309, 59308, 59383, + 59382, 59495, 59496, 46043, 37982, 37344, 50426, 50427, 39945, + 53881, 53880, 40620, 54866, 41208, 56328, 43197, 37345, 46782, + 47648, 48581, 37984, 37983, 50428, 53882, 41209, 41780, 42915, + 57962, 46785, 46783, 37346, 47649, 47650, 48586, 48587, 48588, + 48584, 48585, 48591, 48589, 48583, 48592, 48590, 29554, 38617, + 29552, 29551, 49494, 49490, 49496, 49492, 49493, 49495, 49491, + 39268, 39269, 50433, 39270, 50429, 30169, 50431, 50432, 50435, + 50436, 53887, 30771, 39949, 53894, 53888, 53893, 53886, 39948, + 53896, 53897, 53890, 39946, 53884, 53895, 53889, 53892, 53898, + 53883, 39947, 40627, 40630, 40625, 31340, 40621, 40623, 54870, + 54869, 54876, 54874, 54872, 40629, 31337, 54867, 54875, 54873, + 40622, 54871, 40626, 40631, 40624, 41211, 41212, 55642, 31806, + 41215, 41214, 55645, 40628, 41210, 55643, 41213, 41218, 55647, + 55651, 55648, 55652, 55646, 55649, 55641, 55650, 31811, 41217, + 41216, 41784, 32254, 32255, 41785, 32249, 32251, 56329, 41783, + 41781, 42222, 56331, 41786, 32257, 56337, 56336, 41787, 41788, + 56338, 56332, 56333, 56335, 56334, 32598, 56982, 56986, 42223, + 56983, 42225, 56981, 56989, 56985, 56988, 56990, 56991, 56984, + 56987, 32597, 56980, 41789, 32877, 57510, 57511, 42605, 57515, + 42600, 32879, 42603, 42599, 57513, 57505, 57506, 42604, 32883, + 57514, 42601, 57509, 57512, 57507, 57969, 33149, 57974, 57968, + 57963, 33151, 33148, 57967, 57970, 57976, 57965, 57966, 57971, + 57972, 57973, 57964, 43200, 58354, 58353, 58671, 58349, 58347, + 58346, 58348, 43199, 43395, 33471, 43393, 58670, 58668, 58352, + 58667, 58669, 58672, 43553, 58923, 58924, 58925, 58922, 58926, + 33718, 59086, 59087, 59085, 59207, 59202, 59203, 59209, 59205, + 59204, 43741, 59208, 59206, 59210, 43742, 43801, 59312, 59310, + 59311, 59385, 59384, 59386, 59447, 59448, 43898, 45437, 44951, + 36347, 37348, 47654, 37347, 37349, 47653, 47652, 47651, 37985, + 37986, 29023, 48593, 48594, 49500, 49499, 29557, 49497, 49498, + 38619, 38618, 39271, 30171, 50437, 50438, 39272, 39950, 39952, + 40632, 39951, 39953, 39954, 40634, 54879, 40633, 55653, 54878, + 54881, 54877, 55656, 31813, 41219, 31814, 55657, 55655, 55654, + 56340, 41791, 56339, 41790, 42229, 42227, 42226, 42228, 42606, + 57516, 57517, 33155, 57977, 58356, 58357, 58355, 43398, 43397, + 43554, 58927, 59211, 59387, 36348, 36827, 36828, 36826, 46787, + 37351, 37350, 47655, 37994, 37992, 37990, 29025, 37991, 29027, + 20568, 37987, 37988, 37989, 48597, 48598, 37993, 48595, 48596, + 29024, 29559, 49505, 29565, 29560, 29558, 49504, 38623, 38620, + 38622, 38621, 49502, 29564, 29562, 49503, 49501, 39280, 39276, + 39278, 30173, 39274, 30174, 39281, 50441, 39277, 39282, 30172, + 39279, 39283, 50440, 50442, 50443, 39273, 53901, 39962, 39957, + 53906, 39959, 39956, 53907, 30778, 39961, 39958, 53905, 53900, + 53902, 53903, 53904, 39955, 39960, 39963, 31349, 31346, 40636, + 40639, 54883, 40635, 40637, 40638, 54886, 54888, 54890, 54885, + 54889, 54887, 31347, 31822, 31820, 41223, 55658, 41220, 41222, + 41224, 41221, 55660, 31819, 55659, 31815, 55661, 55662, 55663, + 55664, 41798, 41797, 41793, 32260, 56341, 41794, 41800, 41799, + 56343, 41796, 41792, 41795, 56342, 56344, 42230, 56993, 56994, + 32600, 42231, 56992, 32601, 32885, 42612, 42607, 42610, 42609, + 42611, 42613, 32887, 57521, 42232, 57518, 57519, 42608, 57520, + 42921, 42614, 33156, 42920, 42918, 42923, 42919, 43201, 57978, + 58358, 58673, 43555, 58929, 58928, 43667, 33660, 33661, 59088, + 59212, 59213, 43802, 45438, 35439, 35437, 26604, 35440, 26603, + 35438, 35545, 26715, 44616, 35718, 26895, 26896, 35719, 35717, + 35992, 45440, 35993, 35995, 35996, 27181, 35994, 45439, 45441, + 36349, 46045, 46048, 27507, 36352, 46046, 50444, 46050, 46051, + 46052, 46047, 36350, 46053, 46049, 46044, 46790, 36832, 36353, + 46789, 36829, 36831, 46795, 46792, 46796, 36830, 46791, 46794, + 46793, 37352, 47665, 47658, 28481, 28483, 28482, 37353, 47660, + 47661, 47668, 47667, 50445, 47663, 47659, 47666, 47664, 54892, + 47662, 37999, 38004, 38000, 38001, 38003, 48602, 48600, 37995, + 37996, 37998, 48601, 48606, 55667, 48604, 38002, 48605, 48603, + 55665, 37997, 49517, 38630, 38627, 49509, 49516, 49514, 38631, + 38628, 38626, 50446, 49510, 49512, 38632, 38629, 49513, 56346, + 49511, 56345, 38625, 49506, 49518, 49507, 38624, 49508, 49515, + 49519, 55666, 50451, 50449, 50453, 30180, 30179, 39964, 30181, + 30182, 39285, 50450, 50447, 30178, 39286, 39287, 50452, 50454, + 56996, 50448, 39284, 39971, 39969, 39970, 53914, 39973, 39967, + 39966, 53908, 39968, 39972, 39965, 57523, 53912, 53910, 53909, + 53911, 53915, 40640, 40641, 31353, 54893, 40643, 40642, 54895, + 57522, 42233, 54894, 41225, 41226, 55669, 55670, 55668, 43202, + 41801, 56349, 32261, 56347, 56348, 42234, 56998, 57979, 57000, + 43556, 56997, 56999, 58930, 57609, 42924, 57981, 57980, 59214, + 59215, 58359, 58696, 58931, 43803, 43804, 59524, 59509, 49520, + 30780, 53916, 40644, 54896, 31825, 56350, 56351, 42235, 57524, + 46797, 46798, 46799, 47669, 37354, 28484, 47671, 47670, 47673, + 47672, 29031, 48609, 29029, 48607, 49526, 48613, 48611, 48608, + 29032, 29030, 48612, 48610, 49534, 38633, 49521, 49524, 49530, + 49528, 49533, 49525, 49523, 49527, 49532, 49531, 49522, 49529, + 50467, 50465, 39288, 50458, 50459, 50469, 50455, 50470, 50463, + 30183, 50468, 50462, 39289, 50464, 50456, 39290, 30184, 50457, + 50466, 50471, 50460, 53922, 53920, 53929, 53924, 53921, 39975, + 53923, 53931, 53927, 53925, 53926, 53928, 53919, 53917, 39974, + 53930, 53932, 31826, 31354, 40646, 54904, 54899, 54910, 54897, + 54908, 54903, 54900, 54907, 54905, 54901, 40645, 54911, 31355, + 54906, 54914, 54902, 53918, 54915, 54912, 54898, 54913, 54909, + 31828, 55676, 55674, 55684, 55675, 55677, 55688, 55673, 55681, + 55672, 55671, 55678, 41227, 55686, 55680, 55679, 55682, 55687, + 54917, 55683, 55685, 56353, 56359, 56355, 56356, 56352, 41802, + 56360, 56358, 41803, 56354, 56357, 57005, 57002, 57006, 57003, + 42236, 57009, 32602, 42237, 57001, 57007, 57008, 32603, 57004, + 57010, 57530, 57534, 57526, 57537, 57531, 57538, 57535, 57525, + 42615, 57532, 57533, 42616, 57529, 57527, 57539, 57536, 57987, + 33159, 57985, 57982, 57989, 57983, 57988, 57986, 57990, 57528, + 57984, 58360, 58361, 33330, 58364, 58365, 58363, 58362, 58679, + 58680, 58681, 33474, 58678, 58674, 58675, 58676, 58677, 58935, + 58933, 58934, 58932, 59089, 59313, 59388, 59533, 36833, 47675, + 47676, 28486, 47674, 38007, 38005, 38008, 38006, 29034, 48616, + 29033, 48615, 29571, 38638, 38635, 38634, 38637, 38636, 49535, + 38639, 39293, 30189, 39294, 39292, 39291, 30185, 30188, 50476, + 30191, 50475, 50477, 50473, 50472, 53935, 53934, 39986, 39981, + 39982, 39980, 39979, 39984, 39978, 31356, 39977, 53936, 53937, + 53933, 39985, 39983, 41228, 54922, 31360, 40653, 40650, 31359, + 54919, 40652, 40649, 54921, 40648, 54920, 54918, 40647, 54923, + 40651, 31831, 31829, 31830, 41229, 31836, 41231, 31833, 55689, + 41807, 55690, 55692, 41230, 55691, 55693, 41232, 41811, 41814, + 56368, 56372, 41808, 56367, 41805, 56374, 56371, 32264, 41804, + 41806, 56370, 56363, 56366, 41813, 56364, 56373, 56362, 56365, + 41810, 41812, 41809, 42244, 42238, 42242, 42239, 42240, 32605, + 42243, 42241, 42246, 32604, 57011, 57016, 57012, 42245, 57014, + 57018, 57017, 57015, 57013, 57019, 57541, 32889, 57549, 32891, + 42617, 33164, 32893, 57547, 57546, 42618, 32895, 32892, 32894, + 57542, 57544, 57545, 57548, 57550, 57543, 57540, 33161, 33160, + 57991, 42925, 42926, 33162, 33163, 57993, 42927, 42928, 57996, + 57992, 57997, 57994, 43205, 43208, 33332, 58367, 43206, 58368, + 58369, 43203, 43207, 43204, 58366, 43399, 58682, 58683, 43400, + 43557, 33575, 33574, 58936, 58937, 58938, 33663, 43669, 33662, + 43668, 59090, 43670, 43745, 59216, 43744, 59217, 59222, 43743, + 59389, 33775, 59450, 59449, 59451, 43879, 59514, 59547, 59550, + 33805, 28487, 48617, 49536, 30195, 54085, 54924, 40785, 56375, + 42929, 46801, 45442, 46800, 28488, 47677, 28490, 48618, 38009, + 29036, 48620, 48619, 49538, 49537, 30782, 53939, 53938, 54925, + 57551, 57552, 48622, 48623, 48621, 29572, 29574, 38641, 38640, + 49540, 49539, 50479, 39296, 30198, 50478, 39295, 50480, 30783, + 39987, 39989, 39988, 53941, 53940, 40655, 40654, 40659, 40656, + 40657, 40658, 54926, 55694, 41234, 41235, 41237, 41236, 55696, + 41817, 56376, 41815, 41816, 32266, 42248, 42247, 42620, 42619, + 57199, 57553, 42431, 42931, 57999, 42933, 42932, 57998, 58001, + 58000, 58370, 58371, 58684, 43401, 58939, 43746, 59314, 59391, + 59390, 38010, 29039, 48624, 38645, 38644, 49543, 49546, 38643, + 49544, 38642, 49542, 49548, 49547, 29575, 29577, 39298, 30201, + 39297, 50484, 50482, 39299, 39300, 30203, 39303, 39301, 39304, + 39302, 50486, 30204, 50485, 50481, 50483, 53944, 39990, 53948, + 53947, 30786, 53950, 39991, 30787, 53946, 30788, 39994, 30785, + 39993, 39995, 53945, 39992, 53949, 53943, 54931, 40660, 40663, + 31371, 31363, 31370, 40661, 40662, 54930, 54934, 54927, 54928, + 54932, 54933, 55703, 55705, 41238, 41244, 31841, 41240, 55698, + 31842, 54929, 41248, 55702, 31840, 55704, 41242, 41245, 55700, + 41246, 55706, 54935, 41243, 55699, 55707, 55697, 41247, 41241, + 32277, 41827, 41819, 32267, 41821, 41831, 56379, 56377, 32272, + 41822, 32273, 56382, 56385, 41830, 56384, 32270, 41832, 56386, + 56387, 56383, 41239, 56381, 56380, 41823, 41833, 56378, 41820, + 41825, 41824, 41828, 32613, 42254, 42257, 42252, 32612, 42250, + 57021, 42258, 57030, 42251, 32611, 57028, 32609, 57025, 32608, + 57029, 42253, 57027, 57022, 57023, 42256, 42255, 57020, 42249, + 32903, 42627, 32898, 42628, 42623, 57554, 42621, 57556, 32900, + 42625, 32901, 32904, 42626, 57560, 57555, 57557, 57562, 57559, + 42624, 57558, 42629, 32905, 57561, 42940, 58005, 33166, 58007, + 58008, 42937, 42938, 42939, 42934, 42935, 58006, 43209, 58379, + 58372, 33336, 43210, 58378, 58376, 58373, 58377, 43212, 43213, + 58374, 58375, 43214, 43402, 43405, 43403, 58685, 43406, 43404, + 58688, 58686, 58689, 58687, 43559, 43671, 58940, 43558, 43560, + 59093, 59091, 59092, 43747, 59219, 59221, 43672, 59220, 59218, + 43805, 59393, 59392, 43847, 59480, 43918, 59515, 59526, 59525, + 43941, 38011, 29579, 29581, 49549, 38646, 50488, 39306, 39308, + 39305, 39307, 50487, 39309, 30790, 39997, 30789, 30791, 53952, + 53951, 53953, 53954, 53955, 39996, 39998, 40664, 54936, 54937, + 40667, 40668, 40666, 54938, 40665, 31844, 55709, 41249, 55710, + 31847, 31845, 41250, 41251, 55708, 55711, 56391, 56388, 32279, + 56389, 55712, 41834, 56393, 56390, 57031, 57033, 57036, 57032, + 57035, 57034, 57563, 42259, 42260, 57564, 57565, 32907, 42631, + 42630, 42941, 42943, 42945, 33171, 58009, 42942, 42944, 58380, + 33338, 43215, 58381, 58382, 43216, 58690, 58693, 58692, 58691, + 33578, 59094, 43748, 59317, 59315, 59316, 43848, 43880, 43899, + 38647, 49550, 39999, 54939, 31848, 55713, 57039, 57567, 32910, + 42946, 57566, 58010, 58383, 58695, 58694, 59095, 38649, 38648, + 39310, 30210, 39311, 40007, 53956, 40001, 40004, 53957, 40002, + 40003, 40006, 40000, 31376, 40005, 40669, 54940, 55714, 41252, + 41253, 41835, 41836, 41837, 32618, 42261, 42262, 57568, 57569, + 42633, 42632, 42634, 58011, 42947, 41838, 43217, 43218, 33340, + 58697, 33579, 43806, 43928, 46056, 47678, 37355, 38017, 38015, + 38016, 38013, 29044, 38012, 29043, 48625, 29041, 29591, 38659, + 29590, 38650, 38658, 49552, 29588, 39318, 38656, 29585, 29586, + 29589, 49555, 38655, 38651, 49553, 49554, 49551, 38652, 38657, + 39320, 50494, 50495, 39314, 39327, 39315, 30214, 30213, 39317, + 39313, 30220, 39325, 39316, 53966, 39326, 50498, 50496, 50491, + 39319, 39324, 50490, 39323, 50489, 50499, 39312, 50492, 50497, + 40010, 30796, 53960, 53971, 40009, 40008, 30793, 53959, 53965, + 30215, 53969, 40011, 30799, 53968, 53964, 54942, 53967, 53962, + 53963, 53970, 53972, 53958, 53961, 40012, 31377, 40672, 31379, + 40680, 54951, 40679, 40677, 54952, 54950, 40676, 40674, 54954, + 54943, 40681, 40673, 40682, 40675, 40678, 31382, 54941, 40671, + 54953, 31383, 54949, 54955, 54945, 54946, 54947, 54948, 40683, + 40670, 40684, 31856, 31852, 31849, 55716, 41258, 31860, 41259, + 31855, 41257, 41254, 41256, 31850, 41262, 55721, 31853, 55723, + 41255, 55718, 31859, 55722, 55715, 55717, 41260, 41261, 55719, + 55724, 41839, 32283, 41845, 41843, 32621, 41842, 41840, 56396, + 41841, 32281, 41846, 41844, 56397, 56394, 56395, 57049, 42266, + 57043, 57040, 42267, 32631, 57045, 42265, 42635, 42264, 42263, + 57047, 57042, 32627, 57041, 57048, 57044, 57050, 57046, 32913, + 32912, 42640, 42638, 57573, 42639, 32917, 57572, 32918, 42637, + 57570, 57574, 32919, 57575, 57571, 42636, 57477, 42948, 42949, + 58012, 42951, 58021, 58390, 33177, 33175, 58016, 58014, 58019, + 42950, 42952, 42953, 58013, 58017, 58020, 58018, 58389, 43221, + 43220, 58386, 58388, 43219, 58384, 58387, 58385, 58705, 58704, + 58702, 43409, 43410, 33477, 43407, 58700, 33478, 58701, 58703, + 58699, 58698, 33581, 58941, 43408, 33580, 58942, 33665, 43673, + 43749, 59223, 43750, 59224, 59225, 33748, 59318, 59452, 47679, + 48628, 29046, 48626, 38018, 48627, 38660, 38665, 29594, 38662, + 38663, 49557, 49559, 38661, 29595, 49558, 48898, 38664, 49560, + 30229, 39331, 30226, 39330, 39329, 39328, 30224, 50500, 30223, + 50504, 50502, 50501, 30800, 40015, 30803, 53975, 53974, 53973, + 40014, 53976, 40686, 40694, 40687, 54956, 54959, 40685, 40690, + 40693, 54958, 54960, 40691, 40692, 54957, 40689, 40688, 55728, + 31870, 41270, 41271, 31862, 41263, 55727, 31869, 41847, 41267, + 31868, 41265, 41266, 41269, 41264, 41268, 55725, 55729, 55726, + 32292, 56401, 56403, 41852, 56405, 41849, 41853, 32293, 41855, + 32634, 41850, 56404, 41851, 41854, 41848, 56407, 56402, 56400, + 56406, 56398, 42268, 32636, 32637, 32638, 42269, 57052, 57051, + 57053, 57054, 57055, 42643, 42646, 42645, 32920, 42641, 32922, + 42644, 42647, 42642, 32923, 58029, 33180, 33182, 42954, 58022, + 42955, 58025, 58023, 58028, 58030, 58031, 58026, 58027, 58024, + 58391, 58392, 58706, 43562, 33584, 58943, 58944, 43674, 59096, + 43675, 33666, 33721, 43751, 43807, 59319, 43936, 59554, 46802, + 38282, 53977, 57056, 42270, 58032, 33343, 43222, 46057, 46058, + 46061, 46059, 36834, 46803, 46805, 38019, 37359, 37356, 47683, + 47681, 37358, 47682, 47684, 48629, 37357, 48630, 48635, 29047, + 38020, 48633, 48634, 29051, 38021, 49561, 38022, 48631, 48632, + 29048, 49571, 49562, 38667, 38669, 38666, 38672, 29601, 38668, + 50512, 38670, 49565, 49564, 50506, 29598, 49563, 50507, 49567, + 38673, 49570, 40016, 49569, 49568, 50505, 29603, 38671, 50508, + 53978, 50513, 39336, 39332, 50514, 39333, 30231, 50511, 39334, + 53980, 50510, 53981, 30812, 53987, 30811, 40022, 40017, 40696, + 30809, 40019, 40024, 40021, 30813, 40023, 53983, 40018, 53982, + 55730, 40020, 53985, 53984, 40695, 53986, 40704, 31871, 40705, + 31392, 54965, 54969, 41272, 40698, 54968, 40701, 54966, 40699, + 54974, 31390, 54970, 54975, 40706, 54967, 54962, 40697, 54964, + 54963, 54971, 41274, 54973, 55732, 54961, 40703, 54972, 40700, + 40702, 55731, 41273, 41285, 55734, 41278, 41280, 41284, 41276, + 55733, 41283, 41286, 31876, 41287, 55735, 55740, 56409, 55737, + 41275, 56410, 55742, 41279, 55736, 55741, 55738, 41281, 55739, + 56414, 41860, 41856, 32295, 32301, 41289, 32302, 41858, 41288, + 41857, 56413, 56412, 57057, 32303, 41859, 57059, 57579, 56411, + 56408, 56416, 57062, 57058, 32294, 56417, 56415, 42273, 57060, + 42271, 32644, 32928, 57578, 42278, 42275, 42277, 42279, 57576, + 32640, 42276, 41290, 42272, 57577, 32642, 57583, 57061, 57582, + 32643, 42274, 57581, 42280, 32929, 57580, 57584, 57590, 58033, + 42956, 57591, 42650, 32930, 42957, 42649, 57589, 57593, 42648, + 57064, 57592, 57586, 57587, 57588, 58034, 57594, 57585, 42965, + 42959, 58035, 33186, 42961, 42958, 58036, 42968, 58037, 42967, + 42960, 42964, 42962, 58038, 42963, 42966, 33345, 43223, 43224, + 58396, 58707, 58395, 43225, 58394, 58393, 43411, 58709, 43412, + 43413, 43563, 58708, 43564, 43565, 33585, 58945, 58947, 58946, + 43676, 59320, 43808, 46806, 47685, 50515, 53988, 50517, 50516, + 40025, 31399, 31400, 55743, 55744, 54976, 54978, 54977, 57066, + 57065, 56418, 57234, 57595, 58948, 33751, 29607, 49572, 38967, + 50518, 50519, 50520, 53989, 54979, 55745, 56421, 41862, 41861, + 41863, 56420, 56419, 42281, 32646, 32647, 57067, 57596, 42969, + 58039, 58710, 43752, 37360, 37361, 38023, 48637, 48636, 38674, + 49574, 49573, 49576, 49575, 39340, 50522, 50523, 39339, 30238, + 50521, 50527, 39338, 53990, 53993, 50524, 50526, 39341, 53997, + 40031, 54001, 53994, 40719, 40033, 40036, 40026, 40029, 40027, + 40034, 53991, 40035, 53995, 40032, 53998, 53996, 40028, 53992, + 53999, 40030, 54000, 54985, 31407, 54984, 40716, 31405, 31402, + 31406, 31403, 54980, 40710, 31404, 40717, 40714, 54993, 40720, + 40708, 40718, 40721, 40712, 54987, 54986, 54995, 54990, 54983, + 54992, 40711, 54991, 40709, 54988, 54989, 54996, 54994, 54981, + 54982, 41291, 55753, 41292, 55747, 31880, 55748, 55746, 41293, + 31877, 55751, 55752, 39342, 55749, 41295, 41294, 56427, 41873, + 41872, 41868, 32309, 41870, 41869, 32306, 41866, 41875, 32318, + 32314, 32315, 32311, 41876, 41864, 32317, 56426, 56425, 56422, + 41871, 32316, 56423, 41865, 56424, 41874, 42282, 42288, 42284, + 32652, 57074, 41877, 57069, 41867, 42286, 42285, 42289, 57068, + 42287, 42291, 32651, 42292, 57075, 57077, 42290, 57076, 57070, + 57071, 57072, 57073, 22769, 57078, 32936, 57601, 57600, 42659, + 42654, 42656, 42653, 32933, 42661, 32934, 32935, 32939, 42662, + 42663, 42652, 57599, 33187, 42655, 42660, 42657, 57602, 57606, + 57607, 57608, 57604, 57603, 57598, 57605, 57628, 57597, 42972, + 42971, 42974, 33188, 42975, 42973, 33193, 58042, 58041, 58043, + 58040, 58044, 58045, 43233, 58402, 42977, 58406, 58397, 43226, + 58400, 42976, 43229, 43232, 43228, 58405, 33351, 43230, 58398, + 58399, 58401, 43227, 43234, 58404, 58718, 58716, 43414, 43567, + 58715, 58712, 43415, 58713, 58717, 58714, 58719, 58711, 43568, + 58954, 58957, 43566, 58956, 58959, 58958, 58952, 58953, 58949, + 58955, 43681, 59098, 43682, 43678, 33668, 43679, 59097, 43677, + 43680, 33669, 59099, 43753, 43754, 33752, 59322, 59321, 33777, + 59395, 59396, 59394, 59453, 43900, 59481, 59497, 59498, 59537, + 38024, 29052, 49578, 49579, 49577, 49580, 30240, 30242, 39344, + 50533, 39343, 30241, 50531, 50528, 50529, 50530, 50532, 30819, + 30818, 40039, 40038, 54005, 55001, 40037, 40040, 30824, 54003, + 54007, 54004, 30825, 54006, 40723, 40722, 31414, 55000, 54002, + 54999, 54998, 55755, 31885, 55759, 31883, 55760, 41296, 55758, + 55754, 55756, 55757, 41886, 56429, 32320, 56428, 41884, 56430, + 41879, 42293, 41882, 41880, 41883, 41885, 55761, 41881, 57084, + 42295, 42294, 57083, 57080, 42297, 42298, 42296, 57086, 57087, + 57082, 57081, 57085, 57079, 32941, 42666, 42665, 42664, 57610, + 57611, 57612, 33196, 42979, 58052, 33195, 42978, 42980, 58048, + 58049, 42981, 58050, 58051, 58047, 33352, 58407, 33355, 58408, + 33354, 58409, 58724, 58725, 43416, 33485, 43418, 33486, 58721, + 43417, 58726, 58720, 58722, 58723, 33588, 43569, 33671, 59100, + 59226, 43755, 59227, 59323, 59397, 43881, 29612, 30243, 38889, + 39345, 50535, 50534, 54009, 55003, 55002, 31887, 41297, 56431, + 57088, 42667, 33198, 58053, 58410, 58727, 58728, 58729, 58960, + 59101, 59102, 59228, 59324, 33753, 59499, 48638, 48639, 49582, + 49581, 30245, 39347, 50541, 50540, 50538, 50542, 50536, 50537, + 39346, 39349, 40043, 54010, 54013, 30831, 54011, 40047, 30833, + 54014, 40046, 30829, 30830, 40041, 30827, 40042, 40045, 40044, + 54015, 54012, 55004, 31418, 55006, 40727, 55005, 31420, 31415, + 31422, 40724, 40726, 31421, 31419, 55008, 40725, 55007, 31891, + 31893, 55767, 41298, 41301, 41299, 55765, 41302, 41303, 41300, + 55762, 31890, 55763, 55764, 55766, 55768, 56433, 41891, 32322, + 41889, 41893, 41892, 56435, 41894, 57089, 56434, 32323, 41887, + 32329, 41888, 41890, 56432, 32662, 57092, 57096, 42299, 42300, + 42302, 32665, 57097, 57095, 57090, 42303, 42301, 57094, 57091, + 32660, 57093, 42673, 57613, 42668, 42672, 42671, 42670, 32947, + 32943, 42675, 42669, 32942, 57614, 57615, 57618, 57619, 42674, + 42984, 42987, 42983, 58054, 33199, 33201, 42982, 33200, 42986, + 58055, 42985, 58059, 58056, 58057, 43240, 43237, 58411, 43241, + 43239, 43236, 43244, 43243, 43242, 43238, 43245, 58058, 33358, + 58412, 58413, 43420, 33487, 33488, 43419, 58731, 58732, 58730, + 33589, 58961, 43570, 33593, 33591, 43684, 59103, 43683, 33673, + 59104, 43756, 59229, 59230, 59325, 33754, 43809, 59400, 59399, + 43849, 33797, 44396, 44395, 38676, 39350, 39351, 50543, 54016, + 55009, 55769, 56436, 32330, 57621, 58060, 42989, 58414, 58963, + 58962, 43572, 43850, 54017, 30834, 31423, 56437, 57622, 58062, + 58061, 58415, 58733, 43851, 29613, 49583, 50545, 50544, 54018, + 55013, 31425, 40728, 55011, 55010, 31424, 55012, 41304, 55770, + 32331, 56439, 56440, 56438, 57098, 42304, 57099, 32948, 57625, + 57624, 57623, 57626, 58063, 33202, 58065, 42991, 58064, 58066, + 58067, 43246, 58417, 58736, 58737, 43421, 33360, 33489, 58735, + 43422, 58734, 58738, 33595, 33594, 58739, 58964, 59106, 59107, + 43757, 59231, 59232, 59233, 33755, 59326, 59402, 59401, 59403, + 59454, 43901, 33794, 43910, 59500, 59543, 59544, 48640, 38026, + 49587, 38679, 49586, 29615, 38677, 49585, 38678, 29614, 49584, + 49588, 39354, 39355, 39356, 39353, 39352, 39357, 50549, 50546, + 50550, 50552, 50547, 50555, 50553, 50554, 50551, 50548, 30838, + 40052, 54020, 54019, 40051, 40054, 40734, 40053, 30837, 54022, + 40048, 40050, 54021, 40049, 40729, 55015, 40738, 40736, 55014, + 31427, 40737, 55016, 40731, 40730, 40732, 40735, 55017, 40733, + 31894, 41306, 41309, 41313, 31895, 55771, 41305, 41307, 41312, + 41310, 55773, 55774, 55776, 41311, 55772, 55775, 41308, 41896, + 56442, 32332, 41902, 56445, 41900, 41898, 56446, 56443, 56441, + 56448, 41895, 56444, 56447, 41899, 42305, 42308, 57100, 42306, + 57101, 57102, 41897, 42307, 57632, 32949, 57631, 42676, 57630, + 57629, 42677, 57627, 42993, 42995, 42997, 33204, 58068, 58069, + 42994, 42992, 58070, 42996, 43249, 32666, 58421, 33363, 43247, + 58419, 33364, 43250, 43251, 43248, 33365, 58418, 43424, 43423, + 43573, 43574, 33596, 58968, 58967, 58969, 58966, 43686, 43685, + 59234, 33756, 59327, 59328, 33778, 43852, 43882, 43902, 43929, + 27952, 29619, 29616, 49590, 29617, 49591, 38680, 50556, 39360, + 30249, 39358, 39361, 30846, 30850, 30848, 30844, 54027, 40060, + 40059, 54024, 54023, 40057, 30855, 40062, 40055, 40056, 54031, + 54025, 30853, 40061, 54030, 54026, 54028, 30845, 40058, 40741, + 40739, 55018, 40742, 31433, 31903, 40747, 40746, 31436, 55024, + 55019, 55022, 55021, 40745, 55025, 40744, 55023, 40740, 55020, + 41319, 31905, 41320, 41317, 41315, 31904, 55784, 41318, 55779, + 55786, 55778, 31908, 55785, 41323, 41321, 55777, 31907, 55781, + 41324, 41316, 55783, 41314, 41322, 41916, 41913, 41909, 41904, + 56450, 32343, 41906, 56449, 41903, 41910, 41914, 41911, 41908, + 41905, 56451, 56452, 55780, 41915, 41912, 57116, 57113, 32679, + 57107, 42312, 32667, 42314, 57104, 57106, 32680, 41917, 32684, + 42317, 32676, 57103, 32675, 32686, 57115, 57108, 57114, 32673, + 57110, 42321, 42313, 57105, 42319, 42315, 57109, 57112, 32668, + 42322, 42309, 42311, 57111, 42682, 57635, 42681, 42323, 42684, + 57633, 32955, 42686, 57636, 57634, 42683, 32953, 42679, 57639, + 32961, 42680, 42678, 32963, 57637, 42687, 57641, 42685, 42999, + 33212, 43004, 43008, 43430, 42998, 43007, 33205, 58078, 43001, + 58079, 43012, 58074, 43009, 43002, 58080, 58082, 58071, 58081, + 43011, 58075, 58076, 58072, 58073, 43010, 58077, 43005, 58425, + 58423, 43257, 33371, 43253, 43254, 58431, 58428, 43255, 58433, + 58430, 43259, 58427, 58432, 58424, 58426, 58422, 58435, 58436, + 43258, 58429, 58434, 43256, 43427, 58743, 43429, 33493, 33494, + 43425, 58742, 32959, 58975, 58740, 58751, 58741, 43426, 58750, + 58747, 43428, 58744, 58745, 58748, 58749, 58746, 58972, 43581, + 43585, 43579, 58970, 33604, 33601, 43578, 43586, 33600, 43584, + 43583, 43576, 58980, 58976, 43577, 58977, 58971, 58973, 58974, + 43582, 58979, 58978, 59114, 43687, 33675, 43688, 59109, 59027, + 59112, 59110, 43690, 59113, 59111, 43689, 59108, 59240, 59235, + 59237, 59238, 59239, 43758, 43759, 59236, 43811, 43810, 59329, + 43812, 59330, 43813, 59331, 59407, 43854, 43853, 43856, 59405, + 59408, 59404, 43855, 59406, 43886, 43885, 43884, 43883, 59455, + 43903, 43904, 59482, 43911, 43920, 59516, 43919, 48641, 48642, + 29620, 49592, 38682, 38683, 49597, 49593, 49594, 38681, 49595, + 49596, 50557, 39365, 50558, 39364, 30251, 30252, 50559, 50560, + 50561, 30253, 39363, 39362, 30868, 54037, 54048, 54034, 54038, + 54044, 40066, 40070, 40072, 40068, 54041, 54047, 40074, 40063, + 30860, 40076, 40073, 40064, 30861, 40077, 54045, 30859, 54040, + 30866, 30857, 40078, 30869, 54035, 54046, 54033, 54042, 54043, + 40065, 40069, 40075, 54036, 54039, 40071, 55032, 40753, 40755, + 40750, 40748, 31439, 40752, 40758, 40751, 55044, 55039, 40756, + 31449, 55041, 40757, 55037, 40754, 55040, 55033, 55026, 55035, + 55034, 55036, 55045, 55043, 55028, 55029, 55042, 31446, 31444, + 48643, 55030, 40749, 55027, 55790, 31909, 41327, 41338, 55793, + 31916, 41336, 55794, 41326, 41330, 55787, 41333, 41340, 41329, + 41331, 31917, 55796, 41325, 41332, 31921, 55788, 31924, 41341, + 55797, 55792, 41337, 41339, 55789, 41328, 31923, 55795, 41334, + 41335, 55791, 31920, 56458, 41342, 56462, 41922, 41928, 41930, + 32349, 41933, 41919, 41924, 41923, 41920, 56460, 56455, 32348, + 56461, 41921, 41934, 32351, 56470, 41925, 56467, 56459, 41931, + 56464, 56465, 56469, 41927, 56456, 41926, 56471, 56453, 56463, + 56454, 41932, 56466, 42324, 57118, 42325, 57123, 42329, 42341, + 42331, 57131, 57125, 42326, 57129, 57132, 57124, 42343, 42328, + 42342, 32692, 42333, 42336, 57121, 57119, 42339, 42335, 57117, + 57127, 57133, 42332, 32694, 57130, 42337, 57122, 42338, 57136, + 42340, 56472, 57126, 57128, 57134, 42334, 57135, 57120, 32690, + 42699, 42691, 57647, 32968, 42705, 57656, 42693, 42709, 32697, + 57643, 42690, 32966, 42692, 32977, 32971, 42694, 42688, 42698, + 42711, 42700, 32976, 32969, 42701, 42703, 42707, 32970, 42689, + 42702, 42697, 42706, 57652, 57648, 57653, 57642, 57644, 42704, + 42696, 42695, 42710, 57645, 57651, 57650, 57646, 57657, 57654, + 57649, 42708, 56457, 43019, 58086, 43027, 58091, 43018, 43021, + 43016, 43026, 43025, 58092, 58090, 58087, 43029, 58098, 58097, + 58095, 43017, 43022, 42712, 43015, 43023, 58093, 58089, 43030, + 43031, 43020, 58094, 58084, 58099, 58083, 58088, 43013, 58085, + 43014, 43273, 43268, 33373, 33382, 43267, 33377, 43274, 43264, + 42713, 43275, 43271, 43270, 33380, 58439, 58449, 58447, 58453, + 33379, 58448, 58451, 43266, 33378, 58446, 43262, 58445, 43263, + 43277, 43028, 58454, 43272, 58452, 58444, 58096, 43269, 58443, + 58441, 58438, 58440, 43265, 58760, 58756, 58766, 43446, 58764, + 43441, 43436, 33498, 58767, 58771, 43432, 43443, 43437, 43435, + 43442, 58761, 43434, 43433, 43451, 43438, 33504, 33497, 58770, + 43444, 58765, 58768, 43440, 58442, 43448, 58450, 58769, 43449, + 58762, 58753, 58755, 58763, 58758, 58757, 43445, 58759, 58754, + 33496, 58772, 58982, 43592, 43594, 43598, 43590, 43450, 43593, + 58983, 43595, 43596, 58984, 58985, 58989, 43597, 58988, 58981, + 58986, 43588, 43591, 43587, 58987, 33610, 43589, 33608, 43696, + 43692, 43695, 59117, 33678, 43693, 43691, 33679, 59115, 43694, + 59119, 59116, 59118, 33681, 43765, 59244, 43763, 33726, 43767, + 43766, 43762, 43764, 33725, 59243, 43761, 59246, 43768, 59248, + 59245, 59241, 59247, 43817, 59333, 59335, 43818, 43815, 43814, + 43820, 43819, 43816, 59336, 33759, 59332, 59334, 43857, 59409, + 59458, 59411, 59413, 59410, 59414, 43858, 59412, 33779, 43887, + 59459, 59460, 43888, 59457, 59461, 59456, 59484, 59483, 43906, + 43905, 43912, 59502, 59501, 43921, 59517, 43922, 59527, 43930, + 43937, 59538, 30254, 30255, 40079, 54051, 54050, 54049, 40759, + 40761, 55047, 55048, 55046, 41935, 55798, 32698, 57137, 42344, + 57138, 57659, 42715, 42716, 57660, 42714, 57662, 57661, 33218, + 58102, 58101, 43032, 58456, 58455, 33507, 58773, 58774, 43452, + 58990, 33612, 43697, 33682, 59249, 43821, 49598, 39367, 54057, + 40080, 54056, 54055, 54053, 40081, 54054, 40082, 54058, 54052, + 55050, 40762, 41344, 41347, 41345, 31925, 41348, 41346, 55800, + 55799, 55803, 55802, 41343, 56477, 41940, 41937, 41936, 56474, + 56476, 56473, 41939, 56475, 41938, 42346, 42345, 42348, 32700, + 57140, 42347, 57139, 42049, 57664, 32701, 32978, 57141, 57663, + 57665, 42717, 33220, 58103, 58104, 33219, 43278, 33383, 43453, + 43455, 43454, 58775, 58776, 58991, 33613, 58992, 43700, 43699, + 43599, 33683, 33727, 59415, 59462, 43935, 59540, 49600, 49599, + 38684, 30258, 50562, 40086, 40085, 30878, 40084, 40083, 54060, + 54064, 54059, 30877, 54061, 40087, 54063, 54062, 55054, 55052, + 55051, 55056, 31454, 55055, 47802, 40763, 55053, 41349, 41350, + 55805, 55806, 55807, 55804, 56479, 41941, 56481, 41942, 41944, + 56482, 41943, 56480, 56478, 32707, 32705, 57146, 57148, 57142, + 42351, 42349, 57147, 42352, 42350, 57145, 32708, 57144, 57143, + 42718, 57672, 57671, 42719, 57669, 32979, 57668, 42721, 42720, + 57670, 57667, 57666, 43033, 58106, 43036, 58107, 43035, 58108, + 58105, 43034, 43282, 43283, 58457, 43280, 43285, 58464, 58459, + 58460, 58465, 58462, 43281, 58458, 58461, 58463, 43458, 33510, + 43457, 43459, 43456, 43600, 43602, 43601, 58994, 58777, 33614, + 58993, 33728, 59250, 59338, 59337, 43859, 59416, 33795, 43913, + 39371, 39369, 39370, 40089, 30879, 40088, 54065, 40766, 55057, + 40764, 40765, 41353, 41351, 41352, 41945, 57149, 42353, 57150, + 32982, 58109, 43037, 58467, 33511, 58521, 58778, 33512, 43914, + 54067, 40767, 40769, 40768, 41355, 41947, 41354, 41948, 41946, + 42354, 32713, 32984, 32983, 42723, 42722, 32986, 57673, 57674, + 57675, 57676, 43040, 43039, 43038, 58110, 58111, 43286, 33384, + 33385, 58470, 58469, 58468, 58779, 43603, 58995, 43604, 59120, + 43701, 59508, 30259, 40090, 30880, 55061, 55059, 40771, 40770, + 40772, 41359, 55809, 41357, 55808, 41356, 31927, 41358, 55810, + 55811, 41950, 41949, 32987, 42724, 42726, 43041, 58113, 58112, + 43287, 33515, 43461, 43460, 33514, 59251, 59121, 33729, 43861, + 59417, 43860, 50563, 38685, 50565, 50564, 54069, 30884, 30883, + 40091, 54070, 54071, 55063, 40775, 40773, 40774, 55062, 55064, + 55065, 31929, 55813, 41360, 55812, 41953, 41951, 56483, 42355, + 41361, 41954, 42357, 42356, 42358, 42360, 42359, 57152, 57151, + 42729, 42730, 57680, 42734, 42732, 42728, 57677, 32993, 32990, + 57681, 42733, 32989, 57679, 57678, 58115, 33232, 33230, 43045, + 33229, 43048, 58114, 43042, 43046, 43044, 33233, 43043, 33234, + 33389, 58116, 58117, 43047, 43288, 33388, 33390, 58477, 58474, + 58473, 33387, 58476, 58475, 43289, 58472, 43466, 58782, 43465, + 43463, 43464, 43462, 43467, 58780, 43607, 43608, 58998, 33617, + 33621, 43606, 58997, 43605, 33620, 33619, 33618, 58781, 58996, + 43703, 43704, 43705, 43702, 33688, 59122, 59123, 33689, 43769, + 59339, 59418, 33761, 59340, 43822, 33760, 43862, 43863, 59419, + 33787, 43889, 59485, 43939, 59551, 56484, 32995, 43049, 33236, + 43468, 50566, 54073, 54072, 41363, 55066, 31930, 55814, 55815, + 56487, 41957, 56488, 56486, 56485, 32368, 57155, 57156, 55816, + 57154, 57683, 57684, 57682, 43050, 58118, 33391, 58479, 58484, + 58485, 58481, 58483, 58480, 58478, 58482, 43469, 58783, 43609, + 43706, 43770, 33690, 59252, 43823, 59253, 59420, 48644, 55067, + 55068, 40776, 56540, 59421, 40777, 41364, 55818, 41958, 56489, + 41959, 57158, 42363, 57157, 42361, 42362, 32716, 32996, 57685, + 33394, 33237, 58119, 58120, 43290, 58487, 58488, 43292, 33393, + 58486, 43291, 58784, 58999, 43610, 59000, 43707, 59254, 43824, + 43890, 54074, 40778, 55819, 40779, 41367, 41369, 41370, 41368, + 41366, 55821, 41365, 55820, 41371, 31931, 56491, 57163, 41962, + 41963, 41961, 41960, 56490, 57161, 42364, 42366, 42365, 57164, + 57165, 57160, 57687, 57689, 57688, 42736, 42737, 57162, 57690, + 42735, 57686, 43052, 43051, 58121, 43294, 58489, 43295, 43296, + 43293, 33395, 58785, 43470, 33520, 58789, 33518, 33521, 58788, + 58787, 58786, 43614, 33624, 43612, 43611, 59001, 59125, 59124, + 33692, 43708, 43825, 43892, 43891, 59486, 59503, 30886, 55069, + 55070, 55823, 55822, 41964, 56493, 56494, 56492, 42367, 42368, + 57691, 42738, 42739, 57693, 33240, 43053, 58122, 58123, 43054, + 43055, 58490, 43471, 58790, 43613, 59002, 43709, 43710, 59257, + 43771, 59256, 59341, 33796, 43915, 31463, 31934, 56495, 32719, + 57166, 42542, 32997, 33396, 43712, 43711, 59126, 59422, 41373, + 55824, 56498, 32374, 56497, 57167, 42369, 32721, 57168, 57171, + 57169, 57170, 57172, 57173, 42370, 57696, 42742, 42741, 33001, + 57694, 33003, 57698, 33002, 57699, 57695, 30261, 57697, 58129, + 43061, 43058, 58126, 58125, 33243, 43059, 33244, 33242, 58127, + 43056, 43062, 58128, 58130, 43060, 58124, 43057, 58491, 33399, + 43299, 43298, 43301, 58499, 58498, 43302, 58493, 43303, 33400, + 58492, 43297, 58494, 58496, 58497, 58495, 43300, 43474, 43473, + 33525, 33529, 33530, 33526, 33527, 43475, 58795, 58793, 33524, + 58791, 58792, 58796, 33531, 33628, 43615, 59008, 33629, 59006, + 43616, 59128, 33626, 59004, 59007, 59005, 59003, 59009, 43617, + 33697, 33693, 59130, 43715, 33699, 33696, 43713, 59132, 33698, + 59129, 59131, 59133, 59134, 59127, 43714, 59259, 43773, 59258, + 43775, 43772, 43774, 59343, 33763, 59342, 43826, 43828, 43827, + 59345, 59346, 59344, 33783, 59425, 43864, 59424, 59423, 59464, + 59488, 59489, 43907, 59487, 59490, 43916, 59505, 59504, 43924, + 59519, 43923, 59518, 59530, 59529, 43934, 59534, 59541, 43943, + 43942, 42371, 57174, 32723, 57701, 57700, 57249, 42743, 58131, + 58501, 58500, 58502, 58503, 43476, 43946, 55071, 55825, 56499, + 58132, 42744, 33004, 42746, 42745, 33005, 57704, 57702, 57703, + 43063, 43065, 58134, 43066, 42373, 43064, 57819, 58133, 57176, + 57175, 43865, 59040, 43829, 43477, 59347, 43931, 43067, 59136, + 59135, 43777, 43776, 59261, 59260, 43830, 33784, 59506, 33799, + 59545, 44953, 44196, 44180, 44625, 44637, 26912, 45466, 46832, + 48656, 29061, 49619, 44417, 18003, 18286, 18287, 46839, 57181, + 44227, 17856, 44424, 17718, 46095, 26538, 44301, 17986, 55079, + 35352, 44203, 44998, 45487, 47728, 20620, 45500, 46115, 28525, + 26522, 44311, 17770, 44314, 17868, 45519, 47741, 45028, 45524, + 46868, 46869, 20027, 17962, 44244, 44684, 36864, 44332, 35407, + 17887, 26755, 44695, 26754, 45053, 19084, 46153, 28003, 46903, + 47761, 47763, 47767, 47768, 47770, 29093, 49690, 48713, 49688, + 53079, 54118, 17763, 44480, 46174, 46917, 46916, 19537, 28567, + 48733, 53101, 56523, 48746, 35597, 44488, 48753, 47805, 44344, + 46197, 46198, 46957, 46953, 47816, 48764, 23048, 56542, 44501, + 28027, 49727, 23051, 59014, 44744, 46224, 44504, 26527, 36084, + 47842, 26528, 18737, 45635, 47856, 47866, 20679, 48804, 49754, + 44765, 49766, 47868, 46259, 47873, 54194, 54196, 59015, 36102, + 47037, 47036, 19614, 48817, 38788, 44263, 44785, 45134, 45673, + 45144, 54210, 43083, 18754, 47061, 36511, 19620, 44806, 35649, + 45705, 45699, 27301, 47937, 47933, 21229, 48861, 48855, 49825, + 49823, 29752, 54216, 54232, 53200, 22529, 31971, 56595, 18148, + 47096, 35515, 45186, 45183, 45730, 46328, 19653, 47115, 47104, + 47981, 47955, 53219, 49843, 38833, 53216, 30368, 55202, 27673, + 47994, 19677, 46363, 48907, 38854, 45760, 47148, 48027, 49878, + 45216, 35855, 28135, 47149, 38233, 26828, 44851, 27049, 18820, + 46383, 19235, 27695, 46389, 37035, 20235, 48941, 38244, 20757, + 49891, 53285, 54311, 32421, 58188, 44558, 48064, 53291, 58831, + 48966, 27704, 48078, 45247, 44569, 45272, 45262, 18849, 45802, + 45811, 27358, 27715, 46448, 46425, 46436, 19730, 48102, 48100, + 29252, 49014, 49020, 49943, 53344, 53353, 54365, 31550, 57253, + 57779, 57771, 45277, 45274, 45817, 28741, 49030, 43894, 22596, + 47252, 47254, 47261, 49975, 45843, 48161, 56672, 44279, 45311, + 48166, 29875, 55996, 47282, 20334, 45866, 27389, 37104, 48181, + 29309, 47299, 57806, 45333, 37116, 45344, 45336, 45900, 45888, + 36665, 46542, 46543, 47321, 48217, 54467, 44586, 45345, 20886, + 49142, 53482, 55348, 45913, 30519, 53492, 46564, 47352, 29954, + 31114, 54495, 50092, 53515, 53513, 54508, 50104, 53530, 56051, + 42486, 54532, 55384, 32110, 56059, 18947, 45941, 21411, 53559, + 53558, 32811, 59170, 48303, 55403, 55406, 56758, 58871, 48318, + 27453, 53587, 50162, 39093, 44928, 27143, 45380, 19411, 37835, + 48355, 30603, 31690, 28348, 48377, 20966, 50200, 18245, 44605, + 44938, 44939, 45403, 45404, 46001, 45405, 46673, 28376, 47480, + 28377, 47461, 47496, 28927, 47499, 47497, 47498, 48436, 50225, + 50242, 30638, 53644, 53656, 54649, 55444, 56145, 57871, 33098, + 46004, 29468, 55483, 23129, 46704, 28942, 48447, 30077, 30662, + 53687, 56181, 56180, 23136, 32836, 31251, 44606, 36783, 49363, + 49361, 55524, 43733, 46730, 28424, 50328, 54754, 58312, 44941, + 49397, 49409, 23685, 46744, 54796, 54790, 21038, 53803, 46026, + 27929, 54818, 31324, 55618, 44614, 28469, 49482, 49485, 55628, + 50434, 50430, 31343, 57508, 50439, 54891, 54882, 48599, 50461, + 54916, 22741, 41233, 55695, 57026, 32909, 57038, 38014, 38654, + 49556, 50493, 31857, 50503, 46804, 49566, 31398, 32305, 50525, + 55750, 54008, 57617, 58437, 31922, 56468, 32358, 32695, 57658, + 43261, 43260, 55801, 47687, 42727, 49601, 27185, 23232, 40092, + 57159, 30260, 58794 +}; + +#define cns11643_forward(index) \ +( cns11643_forward_16[index] | \ + (((cns11643_forward_2[(index)/16] >> (((index)&15)*2)) & 3) << 16) ) + +/* This returns ERROR if the code point doesn't exist. */ +long int cns11643_to_unicode(int p, int r, int c) +{ + assert(p >= 0 && p < 7); + assert(r >= 0 && r < 94); + assert(c >= 0 && c < 94); + return cns11643_forward((p*94+r)*94+c); +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_cns11643(long int unicode, int *p, int *r, int *c) +{ + int index, pp, rr, cc; + long int uu; + int i, j, k; + + i = -1; + j = lenof(cns11643_backward); + while (j - i > 1) { + k = (i + j) / 2; + index = cns11643_backward[k]; + uu = cns11643_forward(index); + if (unicode > uu) + i = k; + else if (unicode < uu) + j = k; + else { + cc = index % 94; + rr = index / 94; + pp = rr / 94; + rr %= 94; + *p = pp; + *r = rr; + *c = cc; + return 1; + } + } + return 0; +} + +#ifdef TESTMODE + +#include <stdio.h> + +int main(void) +{ + int i, p, r, c, pp, rr, cc, index, ret; + long int u, uu; + + u = 0; + for (i = 0; i < lenof(cns11643_backward); i++) { + index = cns11643_backward[i]; + uu = cns11643_forward(index); + if (uu <= u) + printf("%d out of order [U+%04lX,U+%04lX]\n",index,u,uu); + u = uu; + } + + for (p = 0; p < 7; p++) { + for (r = 0; r < 94; r++) { + for (c = 0; c < 94; c++) { + u = cns11643_to_unicode(p, r, c); + if (u != ERROR) { + ret = unicode_to_cns11643(u, &pp, &rr, &cc); + if (!ret) + printf("(%d,%d,%d) -> U-%08lx but didn't convert back\n", + p, r, c, u); + else if (rr != r || cc != c) + printf("(%d,%d,%d) -> U-%08lx -> (%d,%d,%d)\n", + p, r, c, u, pp, rr, cc); + } + } + } + } + + for (u = 0; u < 0x30000L; u++) { + ret = unicode_to_cns11643(u, &p, &r, &c); + if (ret) { + uu = cns11643_to_unicode(p, r, c); + if (uu == ERROR) + printf("U-%08lx -> (%d,%d,%d) but didn't convert back\n", + u, p, r, c); + else if (uu != u) + printf("U-%08lx -> (%d,%d,%d) -> U-%08lx\n", u, p, r, c, uu); + } + } + + return 0; +} + +#endif diff --git a/app/tools/halibut/charset/cp949.c b/app/tools/halibut/charset/cp949.c new file mode 100644 index 0000000..28cd63a --- /dev/null +++ b/app/tools/halibut/charset/cp949.c @@ -0,0 +1,94 @@ +/* + * cp949.c - CP949 / KS_C_5601_1987 multibyte encoding + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +/* + * CP949 has no associated data, so `charset' may be ignored. + */ + +static void read_cp949(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + UNUSEDARG(charset); + + /* + * For reading CP949, state->s0 simply contains the single + * stored lead byte when we are half way through a double-byte + * character, or 0 if we aren't. + */ + + if (state->s0 == 0) { + if (input_chr >= 0x81 && input_chr <= 0xFE) { + /* + * Lead byte. Just store it. + */ + state->s0 = input_chr; + } else { + /* + * Anything else we pass straight through unchanged. + */ + emit(emitctx, input_chr); + } + } else { + /* + * We have a stored lead byte. We expect a valid followup + * byte. + */ + if ((input_chr >= 0x40 && input_chr <= 0xFF)) { + emit(emitctx, cp949_to_unicode(state->s0 - 0x80, + input_chr - 0x40)); + } else { + emit(emitctx, ERROR); + } + state->s0 = 0; + } +} + +/* + * CP949 is a stateless multi-byte encoding (in the sense that just + * after any character has been completed, the state is always the + * same); hence when writing it, there is no need to use the + * charset_state. + */ + +static int write_cp949(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + UNUSEDARG(charset); + UNUSEDARG(state); + + if (input_chr == -1) + return TRUE; /* stateless; no cleanup required */ + + if (input_chr < 0x80) { + emit(emitctx, input_chr); + return TRUE; + } else { + int r, c; + if (unicode_to_cp949(input_chr, &r, &c)) { + emit(emitctx, r + 0x80); + emit(emitctx, c + 0x40); + return TRUE; + } else { + return FALSE; + } + } +} + +const charset_spec charset_CS_CP949 = { + CS_CP949, read_cp949, write_cp949, NULL +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_CP949) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/cstable.c b/app/tools/halibut/charset/cstable.c new file mode 100644 index 0000000..509923a --- /dev/null +++ b/app/tools/halibut/charset/cstable.c @@ -0,0 +1,120 @@ +/* + * cstable.c - libcharset supporting utility which draws up a map + * of the whole Unicode BMP and annotates it with details of which + * other character sets each character appears in. + * + * Note this is not a libcharset _client_; it is part of the + * libcharset _package_, using libcharset internals. + */ + +#include <stdio.h> +#include <string.h> + +#include "charset.h" +#include "internal.h" +#include "sbcsdat.h" + +#define ENUM_CHARSET(x) extern charset_spec const charset_##x; +#include "enum.c" +#undef ENUM_CHARSET +static charset_spec const *const cs_table[] = { +#define ENUM_CHARSET(x) &charset_##x, +#include "enum.c" +#undef ENUM_CHARSET +}; +static const char *const cs_names[] = { +#define ENUM_CHARSET(x) #x, +#include "enum.c" +#undef ENUM_CHARSET +}; + +int main(int argc, char **argv) +{ + long int c; + int internal_names = FALSE; + int verbose = FALSE; + + while (--argc) { + char *p = *++argv; + if (!strcmp(p, "-i")) + internal_names = TRUE; + else if (!strcmp(p, "-v")) + verbose = TRUE; + } + + for (c = 0; c < 0x30000; c++) { + int i, plane, row, col, chr; + char const *sep = ""; + + printf("U+%04x:", c); + + /* + * Look up in SBCSes. + */ + for (i = 0; i < lenof(cs_table); i++) + if (cs_table[i]->read == read_sbcs && + (chr = sbcs_from_unicode(cs_table[i]->data, c)) != ERROR) { + printf("%s %s", sep, + (internal_names ? cs_names[i] : + charset_to_localenc(cs_table[i]->charset))); + if (verbose) + printf("[%d]", chr); + sep = ";"; + } + + /* + * Look up individually in MBCS base charsets. The + * `internal_names' flag does not affect these, because + * MBCS base charsets aren't directly encoded by CS_* + * constants. + */ + if (unicode_to_big5(c, &row, &col)) { + printf("%s Big5", sep); + if (verbose) + printf("[%d,%d]", row, col); + sep = ";"; + } + + if (unicode_to_gb2312(c, &row, &col)) { + printf("%s GB2312", sep); + if (verbose) + printf("[%d,%d]", row, col); + sep = ";"; + } + + if (unicode_to_jisx0208(c, &row, &col)) { + printf("%s JIS X 0208", sep); + if (verbose) + printf("[%d,%d]", row, col); + sep = ";"; + } + + if (unicode_to_ksx1001(c, &row, &col)) { + printf("%s KS X 1001", sep); + if (verbose) + printf("[%d,%d]", row, col); + sep = ";"; + } + + if (unicode_to_cp949(c, &row, &col)) { + printf("%s CP949", sep); + if (verbose) + printf("[%d,%d]", row, col); + sep = ";"; + } + + if (unicode_to_cns11643(c, &plane, &row, &col)) { + printf("%s CNS11643", sep); + if (verbose) + printf("[%d,%d,%d]", plane, row, col); + sep = ";"; + } + + if (!*sep) + printf(" unicode-only"); + + printf("\n"); + } + + return 0; +} diff --git a/app/tools/halibut/charset/enum.c b/app/tools/halibut/charset/enum.c new file mode 100644 index 0000000..5a7f0f0 --- /dev/null +++ b/app/tools/halibut/charset/enum.c @@ -0,0 +1,28 @@ +/* + * enum.c - enumerate all charsets defined by the library. + * + * This file maintains a list of every other source file which + * contains ENUM_CHARSET definitions. It #includes each one with + * ENUM_CHARSETS defined, which causes those source files to do + * nothing at all except call the ENUM_CHARSET macro on each + * charset they define. + * + * This file in turn is included from various other places, with + * the ENUM_CHARSET macro defined to various different things. This + * allows us to have multiple implementations of the master charset + * lookup table (a static one and a dynamic one). + */ + +#define ENUM_CHARSETS +#include "sbcsdat.c" +#include "utf8.c" +#include "utf7.c" +#include "utf16.c" +#include "euc.c" +#include "iso2022.c" +#include "iso2022s.c" +#include "big5enc.c" +#include "shiftjis.c" +#include "hz.c" +#include "cp949.c" +#undef ENUM_CHARSETS diff --git a/app/tools/halibut/charset/euc.c b/app/tools/halibut/charset/euc.c new file mode 100644 index 0000000..b3d43ff --- /dev/null +++ b/app/tools/halibut/charset/euc.c @@ -0,0 +1,272 @@ +/* + * euc.c - routines to handle the various EUC multibyte encodings. + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +struct euc { + int nchars[3]; /* GR, SS2+GR, SS3+GR */ + long int (*to_ucs)(unsigned long state); + unsigned long (*from_ucs)(long int ucs); +}; + +static void read_euc(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + struct euc const *euc = (struct euc *)charset->data; + + /* + * For EUC input, our state variable divides into three parts: + * + * - Topmost nibble (bits 31:28) is nonzero if we're + * accumulating a multibyte character, and it indicates + * which section we're in: 1 for GR chars, 2 for things + * beginning with SS2, 3 for things beginning with SS3. + * + * - Next nibble (bits 27:24) indicates how many bytes of the + * character we've accumulated so far. + * + * - The rest (bits 23:0) are those bytes in full, accumulated + * as a large integer (so that seeing A1 A2 A3, in a + * hypothetical EUC whose GR encoding is three-byte, runs + * our state variable from 0 -> 0x110000A1 -> 0x1200A1A2 -> + * 0x13A1A2A3, at which point it gets translated and output + * and resets to zero). + */ + + if (state->s0 != 0) { + + /* + * At this point, no matter whether we had an SS2 or SS3 + * introducer or not, we _always_ expect a GR character. + * Anything else causes us to emit ERROR for an incomplete + * character, and then reset to state 0 to process the + * character in its own way. + */ + if (input_chr < 0xA1 || input_chr == 0xFF) { + emit(emitctx, ERROR); + state->s0 = 0; + } else + state->s0 = (((state->s0 & 0xFF000000) + 0x01000000) | + ((state->s0 & 0x0000FFFF) << 8) | input_chr); + + } + + if (state->s0 == 0) { + /* + * The input character determines which of the four + * possible charsets we're going to be in. + */ + if (input_chr < 0x80) { /* this is always ASCII */ + emit(emitctx, input_chr); + } else if (input_chr == 0x8E) {/* SS2 means charset 2 */ + state->s0 = 0x20000000; + } else if (input_chr == 0x8F) {/* SS3 means charset 3 */ + state->s0 = 0x30000000; + } else if (input_chr < 0xA1 || input_chr == 0xFF) { /* errors */ + emit(emitctx, ERROR); + } else { /* A1-FE means charset 1 */ + state->s0 = 0x11000000 | input_chr; + } + } + + /* + * Finally, if we have accumulated a complete character, output + * it. + */ + if (state->s0 != 0 && + ((state->s0 & 0x0F000000) >> 24) >= + (unsigned)euc->nchars[(state->s0 >> 28)-1]) { + emit(emitctx, euc->to_ucs(state->s0)); + state->s0 = 0; + } +} + +/* + * All EUCs are stateless multi-byte encodings (in the sense that + * just after any character has been completed, the state is always + * the same); hence when writing them, there is no need to use the + * charset_state. + */ + +static int write_euc(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + struct euc const *euc = (struct euc *)charset->data; + unsigned long c; + int cset, len; + + UNUSEDARG(state); + + if (input_chr == -1) + return TRUE; /* stateless; no cleanup required */ + + /* ASCII is the easy bit, and is always the same. */ + if (input_chr < 0x80) { + emit(emitctx, input_chr); + return TRUE; + } + + c = euc->from_ucs(input_chr); + if (!c) { + return FALSE; + } + + cset = c >> 28; + len = euc->nchars[cset-1]; + c &= 0xFFFFFF; + + if (cset > 1) + emit(emitctx, 0x8C + cset); /* SS2/SS3 */ + + while (len--) + emit(emitctx, (c >> (8*len)) & 0xFF); + return TRUE; +} + +/* + * EUC-CN encodes GB2312 only. + */ +static long int euc_cn_to_ucs(unsigned long state) +{ + switch (state >> 28) { + case 1: return gb2312_to_unicode(((state >> 8) & 0xFF) - 0xA1, + ((state ) & 0xFF) - 0xA1); + default: return ERROR; + } +} +static unsigned long euc_cn_from_ucs(long int ucs) +{ + int r, c; + if (unicode_to_gb2312(ucs, &r, &c)) + return 0x10000000 | ((r+0xA1) << 8) | (c+0xA1); + else + return 0; +} +static const struct euc euc_cn = { + {2,0,0}, euc_cn_to_ucs, euc_cn_from_ucs +}; +const charset_spec charset_CS_EUC_CN = { + CS_EUC_CN, read_euc, write_euc, &euc_cn +}; + +/* + * EUC-KR encodes KS X 1001 only. + */ +static long int euc_kr_to_ucs(unsigned long state) +{ + switch (state >> 28) { + case 1: return ksx1001_to_unicode(((state >> 8) & 0xFF) - 0xA1, + ((state ) & 0xFF) - 0xA1); + default: return ERROR; + } +} +static unsigned long euc_kr_from_ucs(long int ucs) +{ + int r, c; + if (unicode_to_ksx1001(ucs, &r, &c)) + return 0x10000000 | ((r+0xA1) << 8) | (c+0xA1); + else + return 0; +} +static const struct euc euc_kr = { + {2,0,0}, euc_kr_to_ucs, euc_kr_from_ucs +}; +const charset_spec charset_CS_EUC_KR = { + CS_EUC_KR, read_euc, write_euc, &euc_kr +}; + +/* + * EUC-JP encodes several character sets. + */ +static long int euc_jp_to_ucs(unsigned long state) +{ + switch (state >> 28) { + case 1: return jisx0208_to_unicode(((state >> 8) & 0xFF) - 0xA1, + ((state ) & 0xFF) - 0xA1); + case 2: + /* + * This is the top half of JIS X 0201. That means A1-DF map + * to FF61-FF9F, and nothing else is valid. + */ + { + int c = state & 0xFF; + if (c >= 0xA1 && c <= 0xDF) + return c + (0xFF61 - 0xA1); + else + return ERROR; + } + /* (no break needed since all control paths have returned) */ + case 3: return jisx0212_to_unicode(((state >> 8) & 0xFF) - 0xA1, + ((state ) & 0xFF) - 0xA1); + default: return ERROR; /* placate optimisers */ + } +} +static unsigned long euc_jp_from_ucs(long int ucs) +{ + int r, c; + if (ucs >= 0xFF61 && ucs <= 0xFF9F) + return 0x20000000 | (ucs - (0xFF61 - 0xA1)); + else if (unicode_to_jisx0208(ucs, &r, &c)) + return 0x10000000 | ((r+0xA1) << 8) | (c+0xA1); + else if (unicode_to_jisx0212(ucs, &r, &c)) + return 0x30000000 | ((r+0xA1) << 8) | (c+0xA1); + else + return 0; +} +static const struct euc euc_jp = { + {2,1,2}, euc_jp_to_ucs, euc_jp_from_ucs +}; +const charset_spec charset_CS_EUC_JP = { + CS_EUC_JP, read_euc, write_euc, &euc_jp +}; + +/* + * EUC-TW encodes CNS 11643 (all planes). + */ +static long int euc_tw_to_ucs(unsigned long state) +{ + int plane; + switch (state >> 28) { + case 1: return cns11643_to_unicode(0, ((state >> 8) & 0xFF) - 0xA1, + ((state ) & 0xFF) - 0xA1); + case 2: + plane = ((state >> 8) & 0xFF) - 0xA1; + if (plane >= 7) return ERROR; + return cns11643_to_unicode(plane, ((state >> 8) & 0xFF) - 0xA1, + ((state ) & 0xFF) - 0xA1); + default: return ERROR; + } +} +static unsigned long euc_tw_from_ucs(long int ucs) +{ + int p, r, c; + if (unicode_to_cns11643(ucs, &p, &r, &c)) { + if (p == 0) + return 0x10000000 | ((r+0xA1) << 8) | (c+0xA1); + else + return 0x20000000 | + ((p + 0xA1) << 16) | ((r+0xA1) << 8) | (c+0xA1); + } else + return 0; +} +static const struct euc euc_tw = { + {2,3,0}, euc_tw_to_ucs, euc_tw_from_ucs +}; +const charset_spec charset_CS_EUC_TW = { + CS_EUC_TW, read_euc, write_euc, &euc_tw +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_EUC_CN) +ENUM_CHARSET(CS_EUC_KR) +ENUM_CHARSET(CS_EUC_JP) +ENUM_CHARSET(CS_EUC_TW) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/fromucs.c b/app/tools/halibut/charset/fromucs.c new file mode 100644 index 0000000..8090c19 --- /dev/null +++ b/app/tools/halibut/charset/fromucs.c @@ -0,0 +1,82 @@ +/* + * fromucs.c - convert Unicode to other character sets. + */ + +#include "charset.h" +#include "internal.h" + +struct charset_emit_param { + char *output; + int outlen; + int stopped; +}; + +static void charset_emit(void *ctx, long int output) +{ + struct charset_emit_param *param = (struct charset_emit_param *)ctx; + + if (param->outlen > 0) { + *param->output++ = output; + param->outlen--; + } else { + param->stopped = 1; + } +} + +int charset_from_unicode(const wchar_t **input, int *inlen, + char *output, int outlen, + int charset, charset_state *state, int *error) +{ + charset_spec const *spec = charset_find_spec(charset); + charset_state localstate = CHARSET_INIT_STATE; + struct charset_emit_param param; + int locallen; + + if (!input) { + locallen = 1; + inlen = &locallen; + } + + param.output = output; + param.outlen = outlen; + param.stopped = 0; + + if (state) + localstate = *state; /* structure copy */ + if (error) + *error = FALSE; + + while (*inlen > 0) { + int lenbefore = param.output - output; + int ret; + + if (input) + ret = spec->write(spec, **input, &localstate, + charset_emit, ¶m); + else + ret = spec->write(spec, -1, &localstate, charset_emit, ¶m); + if (error && !ret) { + /* + * We have hit a difficult character, which the user + * wants to know about. Leave now. + */ + *error = TRUE; + return lenbefore; + } + if (param.stopped) { + /* + * The emit function has _tried_ to output some + * characters, but ran up against the end of the + * buffer. Leave immediately, and return what happened + * _before_ attempting to process this character. + */ + return lenbefore; + } + if (state) + *state = localstate; /* structure copy */ + if (input) + (*input)++; + (*inlen)--; + } + return param.output - output; +} diff --git a/app/tools/halibut/charset/gb2312.c b/app/tools/halibut/charset/gb2312.c new file mode 100644 index 0000000..463c15b --- /dev/null +++ b/app/tools/halibut/charset/gb2312.c @@ -0,0 +1,2089 @@ +/* + * GB2312 implementation for libcharset. (This is the character set + * itself, not any particular multibyte encoding of it. Multibyte + * encodings of this character set are handled separately.) + */ + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +/* + * These tables are generated from the GB2312 <-> Unicode character + * mapping found at + * + * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/GB/GB2312.TXT + */ + +/* + * Mapping from GB2312 to Unicode. For these purposes GB2312 is + * considered to be a 94x94 square array, with coordinates running + * from (0,0) to (93,93). + * + * Generated by running the following sh+Perl over GB2312.TXT: + +cat GB2312.TXT | \ +perl -ne '$a{hex$1,hex$2}=$3 if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {for $r (0..93) { $o=" {"; for $c (0..93) {' \ + -e '$k=$a{$r+33,$c+33}; $k=" ERROR" unless defined $k;' \ + -e '$o .= ", " if $c > 0; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= $k; } print "$o},\n"; }}' + + */ + +static const unsigned short gb2312_forward[94][94] = { + {0x3000, 0x3001, 0x3002, 0x30FB, 0x02C9, 0x02C7, 0x00A8, 0x3003, 0x3005, + 0x2015, 0xFF5E, 0x2016, 0x2026, 0x2018, 0x2019, 0x201C, 0x201D, 0x3014, + 0x3015, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, + 0x3016, 0x3017, 0x3010, 0x3011, 0x00B1, 0x00D7, 0x00F7, 0x2236, 0x2227, + 0x2228, 0x2211, 0x220F, 0x222A, 0x2229, 0x2208, 0x2237, 0x221A, 0x22A5, + 0x2225, 0x2220, 0x2312, 0x2299, 0x222B, 0x222E, 0x2261, 0x224C, 0x2248, + 0x223D, 0x221D, 0x2260, 0x226E, 0x226F, 0x2264, 0x2265, 0x221E, 0x2235, + 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFF04, 0x00A4, + 0xFFE0, 0xFFE1, 0x2030, 0x00A7, 0x2116, 0x2606, 0x2605, 0x25CB, 0x25CF, + 0x25CE, 0x25C7, 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x203B, 0x2192, + 0x2190, 0x2191, 0x2193, 0x3013}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x2488, 0x2489, + 0x248A, 0x248B, 0x248C, 0x248D, 0x248E, 0x248F, 0x2490, 0x2491, 0x2492, + 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499, 0x249A, 0x249B, + 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, + 0x247D, 0x247E, 0x247F, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, + 0x2486, 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, + 0x2467, 0x2468, 0x2469, ERROR, ERROR, 0x3220, 0x3221, 0x3222, 0x3223, + 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, ERROR, ERROR, 0x2160, + 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, + 0x216A, 0x216B, ERROR, ERROR}, + {0xFF01, 0xFF02, 0xFF03, 0xFFE5, 0xFF05, 0xFF06, 0xFF07, 0xFF08, 0xFF09, + 0xFF0A, 0xFF0B, 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, 0xFF10, 0xFF11, 0xFF12, + 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, + 0xFF1C, 0xFF1D, 0xFF1E, 0xFF1F, 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, + 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, + 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, + 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0xFF3B, 0xFF3C, 0xFF3D, 0xFF3E, 0xFF3F, + 0xFF40, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, + 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, + 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, + 0xFF5B, 0xFF5C, 0xFF5D, 0xFFE3}, + {0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, + 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, + 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, + 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, + 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, + 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, + 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, + 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, + 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, + 0x3092, 0x3093, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, + 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, + 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, + 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, + 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, + 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, + 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, + 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, + 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, + 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, + 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x03B1, 0x03B2, 0x03B3, 0x03B4, + 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, + 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, + 0x03C8, 0x03C9, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, + 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, + 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, + 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x0101, 0x00E1, 0x01CE, 0x00E0, 0x0113, 0x00E9, 0x011B, 0x00E8, 0x012B, + 0x00ED, 0x01D0, 0x00EC, 0x014D, 0x00F3, 0x01D2, 0x00F2, 0x016B, 0x00FA, + 0x01D4, 0x00F9, 0x01D6, 0x01D8, 0x01DA, 0x01DC, 0x00FC, 0x00EA, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310A, 0x310B, 0x310C, 0x310D, + 0x310E, 0x310F, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, + 0x3117, 0x3118, 0x3119, 0x311A, 0x311B, 0x311C, 0x311D, 0x311E, 0x311F, + 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, + 0x3129, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504, 0x2505, + 0x2506, 0x2507, 0x2508, 0x2509, 0x250A, 0x250B, 0x250C, 0x250D, 0x250E, + 0x250F, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514, 0x2515, 0x2516, 0x2517, + 0x2518, 0x2519, 0x251A, 0x251B, 0x251C, 0x251D, 0x251E, 0x251F, 0x2520, + 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, + 0x252A, 0x252B, 0x252C, 0x252D, 0x252E, 0x252F, 0x2530, 0x2531, 0x2532, + 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253A, 0x253B, + 0x253C, 0x253D, 0x253E, 0x253F, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, + 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254A, 0x254B, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x554A, 0x963F, 0x57C3, 0x6328, 0x54CE, 0x5509, 0x54C0, 0x7691, 0x764C, + 0x853C, 0x77EE, 0x827E, 0x788D, 0x7231, 0x9698, 0x978D, 0x6C28, 0x5B89, + 0x4FFA, 0x6309, 0x6697, 0x5CB8, 0x80FA, 0x6848, 0x80AE, 0x6602, 0x76CE, + 0x51F9, 0x6556, 0x71AC, 0x7FF1, 0x8884, 0x50B2, 0x5965, 0x61CA, 0x6FB3, + 0x82AD, 0x634C, 0x6252, 0x53ED, 0x5427, 0x7B06, 0x516B, 0x75A4, 0x5DF4, + 0x62D4, 0x8DCB, 0x9776, 0x628A, 0x8019, 0x575D, 0x9738, 0x7F62, 0x7238, + 0x767D, 0x67CF, 0x767E, 0x6446, 0x4F70, 0x8D25, 0x62DC, 0x7A17, 0x6591, + 0x73ED, 0x642C, 0x6273, 0x822C, 0x9881, 0x677F, 0x7248, 0x626E, 0x62CC, + 0x4F34, 0x74E3, 0x534A, 0x529E, 0x7ECA, 0x90A6, 0x5E2E, 0x6886, 0x699C, + 0x8180, 0x7ED1, 0x68D2, 0x78C5, 0x868C, 0x9551, 0x508D, 0x8C24, 0x82DE, + 0x80DE, 0x5305, 0x8912, 0x5265}, + {0x8584, 0x96F9, 0x4FDD, 0x5821, 0x9971, 0x5B9D, 0x62B1, 0x62A5, 0x66B4, + 0x8C79, 0x9C8D, 0x7206, 0x676F, 0x7891, 0x60B2, 0x5351, 0x5317, 0x8F88, + 0x80CC, 0x8D1D, 0x94A1, 0x500D, 0x72C8, 0x5907, 0x60EB, 0x7119, 0x88AB, + 0x5954, 0x82EF, 0x672C, 0x7B28, 0x5D29, 0x7EF7, 0x752D, 0x6CF5, 0x8E66, + 0x8FF8, 0x903C, 0x9F3B, 0x6BD4, 0x9119, 0x7B14, 0x5F7C, 0x78A7, 0x84D6, + 0x853D, 0x6BD5, 0x6BD9, 0x6BD6, 0x5E01, 0x5E87, 0x75F9, 0x95ED, 0x655D, + 0x5F0A, 0x5FC5, 0x8F9F, 0x58C1, 0x81C2, 0x907F, 0x965B, 0x97AD, 0x8FB9, + 0x7F16, 0x8D2C, 0x6241, 0x4FBF, 0x53D8, 0x535E, 0x8FA8, 0x8FA9, 0x8FAB, + 0x904D, 0x6807, 0x5F6A, 0x8198, 0x8868, 0x9CD6, 0x618B, 0x522B, 0x762A, + 0x5F6C, 0x658C, 0x6FD2, 0x6EE8, 0x5BBE, 0x6448, 0x5175, 0x51B0, 0x67C4, + 0x4E19, 0x79C9, 0x997C, 0x70B3}, + {0x75C5, 0x5E76, 0x73BB, 0x83E0, 0x64AD, 0x62E8, 0x94B5, 0x6CE2, 0x535A, + 0x52C3, 0x640F, 0x94C2, 0x7B94, 0x4F2F, 0x5E1B, 0x8236, 0x8116, 0x818A, + 0x6E24, 0x6CCA, 0x9A73, 0x6355, 0x535C, 0x54FA, 0x8865, 0x57E0, 0x4E0D, + 0x5E03, 0x6B65, 0x7C3F, 0x90E8, 0x6016, 0x64E6, 0x731C, 0x88C1, 0x6750, + 0x624D, 0x8D22, 0x776C, 0x8E29, 0x91C7, 0x5F69, 0x83DC, 0x8521, 0x9910, + 0x53C2, 0x8695, 0x6B8B, 0x60ED, 0x60E8, 0x707F, 0x82CD, 0x8231, 0x4ED3, + 0x6CA7, 0x85CF, 0x64CD, 0x7CD9, 0x69FD, 0x66F9, 0x8349, 0x5395, 0x7B56, + 0x4FA7, 0x518C, 0x6D4B, 0x5C42, 0x8E6D, 0x63D2, 0x53C9, 0x832C, 0x8336, + 0x67E5, 0x78B4, 0x643D, 0x5BDF, 0x5C94, 0x5DEE, 0x8BE7, 0x62C6, 0x67F4, + 0x8C7A, 0x6400, 0x63BA, 0x8749, 0x998B, 0x8C17, 0x7F20, 0x94F2, 0x4EA7, + 0x9610, 0x98A4, 0x660C, 0x7316}, + {0x573A, 0x5C1D, 0x5E38, 0x957F, 0x507F, 0x80A0, 0x5382, 0x655E, 0x7545, + 0x5531, 0x5021, 0x8D85, 0x6284, 0x949E, 0x671D, 0x5632, 0x6F6E, 0x5DE2, + 0x5435, 0x7092, 0x8F66, 0x626F, 0x64A4, 0x63A3, 0x5F7B, 0x6F88, 0x90F4, + 0x81E3, 0x8FB0, 0x5C18, 0x6668, 0x5FF1, 0x6C89, 0x9648, 0x8D81, 0x886C, + 0x6491, 0x79F0, 0x57CE, 0x6A59, 0x6210, 0x5448, 0x4E58, 0x7A0B, 0x60E9, + 0x6F84, 0x8BDA, 0x627F, 0x901E, 0x9A8B, 0x79E4, 0x5403, 0x75F4, 0x6301, + 0x5319, 0x6C60, 0x8FDF, 0x5F1B, 0x9A70, 0x803B, 0x9F7F, 0x4F88, 0x5C3A, + 0x8D64, 0x7FC5, 0x65A5, 0x70BD, 0x5145, 0x51B2, 0x866B, 0x5D07, 0x5BA0, + 0x62BD, 0x916C, 0x7574, 0x8E0C, 0x7A20, 0x6101, 0x7B79, 0x4EC7, 0x7EF8, + 0x7785, 0x4E11, 0x81ED, 0x521D, 0x51FA, 0x6A71, 0x53A8, 0x8E87, 0x9504, + 0x96CF, 0x6EC1, 0x9664, 0x695A}, + {0x7840, 0x50A8, 0x77D7, 0x6410, 0x89E6, 0x5904, 0x63E3, 0x5DDD, 0x7A7F, + 0x693D, 0x4F20, 0x8239, 0x5598, 0x4E32, 0x75AE, 0x7A97, 0x5E62, 0x5E8A, + 0x95EF, 0x521B, 0x5439, 0x708A, 0x6376, 0x9524, 0x5782, 0x6625, 0x693F, + 0x9187, 0x5507, 0x6DF3, 0x7EAF, 0x8822, 0x6233, 0x7EF0, 0x75B5, 0x8328, + 0x78C1, 0x96CC, 0x8F9E, 0x6148, 0x74F7, 0x8BCD, 0x6B64, 0x523A, 0x8D50, + 0x6B21, 0x806A, 0x8471, 0x56F1, 0x5306, 0x4ECE, 0x4E1B, 0x51D1, 0x7C97, + 0x918B, 0x7C07, 0x4FC3, 0x8E7F, 0x7BE1, 0x7A9C, 0x6467, 0x5D14, 0x50AC, + 0x8106, 0x7601, 0x7CB9, 0x6DEC, 0x7FE0, 0x6751, 0x5B58, 0x5BF8, 0x78CB, + 0x64AE, 0x6413, 0x63AA, 0x632B, 0x9519, 0x642D, 0x8FBE, 0x7B54, 0x7629, + 0x6253, 0x5927, 0x5446, 0x6B79, 0x50A3, 0x6234, 0x5E26, 0x6B86, 0x4EE3, + 0x8D37, 0x888B, 0x5F85, 0x902E}, + {0x6020, 0x803D, 0x62C5, 0x4E39, 0x5355, 0x90F8, 0x63B8, 0x80C6, 0x65E6, + 0x6C2E, 0x4F46, 0x60EE, 0x6DE1, 0x8BDE, 0x5F39, 0x86CB, 0x5F53, 0x6321, + 0x515A, 0x8361, 0x6863, 0x5200, 0x6363, 0x8E48, 0x5012, 0x5C9B, 0x7977, + 0x5BFC, 0x5230, 0x7A3B, 0x60BC, 0x9053, 0x76D7, 0x5FB7, 0x5F97, 0x7684, + 0x8E6C, 0x706F, 0x767B, 0x7B49, 0x77AA, 0x51F3, 0x9093, 0x5824, 0x4F4E, + 0x6EF4, 0x8FEA, 0x654C, 0x7B1B, 0x72C4, 0x6DA4, 0x7FDF, 0x5AE1, 0x62B5, + 0x5E95, 0x5730, 0x8482, 0x7B2C, 0x5E1D, 0x5F1F, 0x9012, 0x7F14, 0x98A0, + 0x6382, 0x6EC7, 0x7898, 0x70B9, 0x5178, 0x975B, 0x57AB, 0x7535, 0x4F43, + 0x7538, 0x5E97, 0x60E6, 0x5960, 0x6DC0, 0x6BBF, 0x7889, 0x53FC, 0x96D5, + 0x51CB, 0x5201, 0x6389, 0x540A, 0x9493, 0x8C03, 0x8DCC, 0x7239, 0x789F, + 0x8776, 0x8FED, 0x8C0D, 0x53E0}, + {0x4E01, 0x76EF, 0x53EE, 0x9489, 0x9876, 0x9F0E, 0x952D, 0x5B9A, 0x8BA2, + 0x4E22, 0x4E1C, 0x51AC, 0x8463, 0x61C2, 0x52A8, 0x680B, 0x4F97, 0x606B, + 0x51BB, 0x6D1E, 0x515C, 0x6296, 0x6597, 0x9661, 0x8C46, 0x9017, 0x75D8, + 0x90FD, 0x7763, 0x6BD2, 0x728A, 0x72EC, 0x8BFB, 0x5835, 0x7779, 0x8D4C, + 0x675C, 0x9540, 0x809A, 0x5EA6, 0x6E21, 0x5992, 0x7AEF, 0x77ED, 0x953B, + 0x6BB5, 0x65AD, 0x7F0E, 0x5806, 0x5151, 0x961F, 0x5BF9, 0x58A9, 0x5428, + 0x8E72, 0x6566, 0x987F, 0x56E4, 0x949D, 0x76FE, 0x9041, 0x6387, 0x54C6, + 0x591A, 0x593A, 0x579B, 0x8EB2, 0x6735, 0x8DFA, 0x8235, 0x5241, 0x60F0, + 0x5815, 0x86FE, 0x5CE8, 0x9E45, 0x4FC4, 0x989D, 0x8BB9, 0x5A25, 0x6076, + 0x5384, 0x627C, 0x904F, 0x9102, 0x997F, 0x6069, 0x800C, 0x513F, 0x8033, + 0x5C14, 0x9975, 0x6D31, 0x4E8C}, + {0x8D30, 0x53D1, 0x7F5A, 0x7B4F, 0x4F10, 0x4E4F, 0x9600, 0x6CD5, 0x73D0, + 0x85E9, 0x5E06, 0x756A, 0x7FFB, 0x6A0A, 0x77FE, 0x9492, 0x7E41, 0x51E1, + 0x70E6, 0x53CD, 0x8FD4, 0x8303, 0x8D29, 0x72AF, 0x996D, 0x6CDB, 0x574A, + 0x82B3, 0x65B9, 0x80AA, 0x623F, 0x9632, 0x59A8, 0x4EFF, 0x8BBF, 0x7EBA, + 0x653E, 0x83F2, 0x975E, 0x5561, 0x98DE, 0x80A5, 0x532A, 0x8BFD, 0x5420, + 0x80BA, 0x5E9F, 0x6CB8, 0x8D39, 0x82AC, 0x915A, 0x5429, 0x6C1B, 0x5206, + 0x7EB7, 0x575F, 0x711A, 0x6C7E, 0x7C89, 0x594B, 0x4EFD, 0x5FFF, 0x6124, + 0x7CAA, 0x4E30, 0x5C01, 0x67AB, 0x8702, 0x5CF0, 0x950B, 0x98CE, 0x75AF, + 0x70FD, 0x9022, 0x51AF, 0x7F1D, 0x8BBD, 0x5949, 0x51E4, 0x4F5B, 0x5426, + 0x592B, 0x6577, 0x80A4, 0x5B75, 0x6276, 0x62C2, 0x8F90, 0x5E45, 0x6C1F, + 0x7B26, 0x4F0F, 0x4FD8, 0x670D}, + {0x6D6E, 0x6DAA, 0x798F, 0x88B1, 0x5F17, 0x752B, 0x629A, 0x8F85, 0x4FEF, + 0x91DC, 0x65A7, 0x812F, 0x8151, 0x5E9C, 0x8150, 0x8D74, 0x526F, 0x8986, + 0x8D4B, 0x590D, 0x5085, 0x4ED8, 0x961C, 0x7236, 0x8179, 0x8D1F, 0x5BCC, + 0x8BA3, 0x9644, 0x5987, 0x7F1A, 0x5490, 0x5676, 0x560E, 0x8BE5, 0x6539, + 0x6982, 0x9499, 0x76D6, 0x6E89, 0x5E72, 0x7518, 0x6746, 0x67D1, 0x7AFF, + 0x809D, 0x8D76, 0x611F, 0x79C6, 0x6562, 0x8D63, 0x5188, 0x521A, 0x94A2, + 0x7F38, 0x809B, 0x7EB2, 0x5C97, 0x6E2F, 0x6760, 0x7BD9, 0x768B, 0x9AD8, + 0x818F, 0x7F94, 0x7CD5, 0x641E, 0x9550, 0x7A3F, 0x544A, 0x54E5, 0x6B4C, + 0x6401, 0x6208, 0x9E3D, 0x80F3, 0x7599, 0x5272, 0x9769, 0x845B, 0x683C, + 0x86E4, 0x9601, 0x9694, 0x94EC, 0x4E2A, 0x5404, 0x7ED9, 0x6839, 0x8DDF, + 0x8015, 0x66F4, 0x5E9A, 0x7FB9}, + {0x57C2, 0x803F, 0x6897, 0x5DE5, 0x653B, 0x529F, 0x606D, 0x9F9A, 0x4F9B, + 0x8EAC, 0x516C, 0x5BAB, 0x5F13, 0x5DE9, 0x6C5E, 0x62F1, 0x8D21, 0x5171, + 0x94A9, 0x52FE, 0x6C9F, 0x82DF, 0x72D7, 0x57A2, 0x6784, 0x8D2D, 0x591F, + 0x8F9C, 0x83C7, 0x5495, 0x7B8D, 0x4F30, 0x6CBD, 0x5B64, 0x59D1, 0x9F13, + 0x53E4, 0x86CA, 0x9AA8, 0x8C37, 0x80A1, 0x6545, 0x987E, 0x56FA, 0x96C7, + 0x522E, 0x74DC, 0x5250, 0x5BE1, 0x6302, 0x8902, 0x4E56, 0x62D0, 0x602A, + 0x68FA, 0x5173, 0x5B98, 0x51A0, 0x89C2, 0x7BA1, 0x9986, 0x7F50, 0x60EF, + 0x704C, 0x8D2F, 0x5149, 0x5E7F, 0x901B, 0x7470, 0x89C4, 0x572D, 0x7845, + 0x5F52, 0x9F9F, 0x95FA, 0x8F68, 0x9B3C, 0x8BE1, 0x7678, 0x6842, 0x67DC, + 0x8DEA, 0x8D35, 0x523D, 0x8F8A, 0x6EDA, 0x68CD, 0x9505, 0x90ED, 0x56FD, + 0x679C, 0x88F9, 0x8FC7, 0x54C8}, + {0x9AB8, 0x5B69, 0x6D77, 0x6C26, 0x4EA5, 0x5BB3, 0x9A87, 0x9163, 0x61A8, + 0x90AF, 0x97E9, 0x542B, 0x6DB5, 0x5BD2, 0x51FD, 0x558A, 0x7F55, 0x7FF0, + 0x64BC, 0x634D, 0x65F1, 0x61BE, 0x608D, 0x710A, 0x6C57, 0x6C49, 0x592F, + 0x676D, 0x822A, 0x58D5, 0x568E, 0x8C6A, 0x6BEB, 0x90DD, 0x597D, 0x8017, + 0x53F7, 0x6D69, 0x5475, 0x559D, 0x8377, 0x83CF, 0x6838, 0x79BE, 0x548C, + 0x4F55, 0x5408, 0x76D2, 0x8C89, 0x9602, 0x6CB3, 0x6DB8, 0x8D6B, 0x8910, + 0x9E64, 0x8D3A, 0x563F, 0x9ED1, 0x75D5, 0x5F88, 0x72E0, 0x6068, 0x54FC, + 0x4EA8, 0x6A2A, 0x8861, 0x6052, 0x8F70, 0x54C4, 0x70D8, 0x8679, 0x9E3F, + 0x6D2A, 0x5B8F, 0x5F18, 0x7EA2, 0x5589, 0x4FAF, 0x7334, 0x543C, 0x539A, + 0x5019, 0x540E, 0x547C, 0x4E4E, 0x5FFD, 0x745A, 0x58F6, 0x846B, 0x80E1, + 0x8774, 0x72D0, 0x7CCA, 0x6E56}, + {0x5F27, 0x864E, 0x552C, 0x62A4, 0x4E92, 0x6CAA, 0x6237, 0x82B1, 0x54D7, + 0x534E, 0x733E, 0x6ED1, 0x753B, 0x5212, 0x5316, 0x8BDD, 0x69D0, 0x5F8A, + 0x6000, 0x6DEE, 0x574F, 0x6B22, 0x73AF, 0x6853, 0x8FD8, 0x7F13, 0x6362, + 0x60A3, 0x5524, 0x75EA, 0x8C62, 0x7115, 0x6DA3, 0x5BA6, 0x5E7B, 0x8352, + 0x614C, 0x9EC4, 0x78FA, 0x8757, 0x7C27, 0x7687, 0x51F0, 0x60F6, 0x714C, + 0x6643, 0x5E4C, 0x604D, 0x8C0E, 0x7070, 0x6325, 0x8F89, 0x5FBD, 0x6062, + 0x86D4, 0x56DE, 0x6BC1, 0x6094, 0x6167, 0x5349, 0x60E0, 0x6666, 0x8D3F, + 0x79FD, 0x4F1A, 0x70E9, 0x6C47, 0x8BB3, 0x8BF2, 0x7ED8, 0x8364, 0x660F, + 0x5A5A, 0x9B42, 0x6D51, 0x6DF7, 0x8C41, 0x6D3B, 0x4F19, 0x706B, 0x83B7, + 0x6216, 0x60D1, 0x970D, 0x8D27, 0x7978, 0x51FB, 0x573E, 0x57FA, 0x673A, + 0x7578, 0x7A3D, 0x79EF, 0x7B95}, + {0x808C, 0x9965, 0x8FF9, 0x6FC0, 0x8BA5, 0x9E21, 0x59EC, 0x7EE9, 0x7F09, + 0x5409, 0x6781, 0x68D8, 0x8F91, 0x7C4D, 0x96C6, 0x53CA, 0x6025, 0x75BE, + 0x6C72, 0x5373, 0x5AC9, 0x7EA7, 0x6324, 0x51E0, 0x810A, 0x5DF1, 0x84DF, + 0x6280, 0x5180, 0x5B63, 0x4F0E, 0x796D, 0x5242, 0x60B8, 0x6D4E, 0x5BC4, + 0x5BC2, 0x8BA1, 0x8BB0, 0x65E2, 0x5FCC, 0x9645, 0x5993, 0x7EE7, 0x7EAA, + 0x5609, 0x67B7, 0x5939, 0x4F73, 0x5BB6, 0x52A0, 0x835A, 0x988A, 0x8D3E, + 0x7532, 0x94BE, 0x5047, 0x7A3C, 0x4EF7, 0x67B6, 0x9A7E, 0x5AC1, 0x6B7C, + 0x76D1, 0x575A, 0x5C16, 0x7B3A, 0x95F4, 0x714E, 0x517C, 0x80A9, 0x8270, + 0x5978, 0x7F04, 0x8327, 0x68C0, 0x67EC, 0x78B1, 0x7877, 0x62E3, 0x6361, + 0x7B80, 0x4FED, 0x526A, 0x51CF, 0x8350, 0x69DB, 0x9274, 0x8DF5, 0x8D31, + 0x89C1, 0x952E, 0x7BAD, 0x4EF6}, + {0x5065, 0x8230, 0x5251, 0x996F, 0x6E10, 0x6E85, 0x6DA7, 0x5EFA, 0x50F5, + 0x59DC, 0x5C06, 0x6D46, 0x6C5F, 0x7586, 0x848B, 0x6868, 0x5956, 0x8BB2, + 0x5320, 0x9171, 0x964D, 0x8549, 0x6912, 0x7901, 0x7126, 0x80F6, 0x4EA4, + 0x90CA, 0x6D47, 0x9A84, 0x5A07, 0x56BC, 0x6405, 0x94F0, 0x77EB, 0x4FA5, + 0x811A, 0x72E1, 0x89D2, 0x997A, 0x7F34, 0x7EDE, 0x527F, 0x6559, 0x9175, + 0x8F7F, 0x8F83, 0x53EB, 0x7A96, 0x63ED, 0x63A5, 0x7686, 0x79F8, 0x8857, + 0x9636, 0x622A, 0x52AB, 0x8282, 0x6854, 0x6770, 0x6377, 0x776B, 0x7AED, + 0x6D01, 0x7ED3, 0x89E3, 0x59D0, 0x6212, 0x85C9, 0x82A5, 0x754C, 0x501F, + 0x4ECB, 0x75A5, 0x8BEB, 0x5C4A, 0x5DFE, 0x7B4B, 0x65A4, 0x91D1, 0x4ECA, + 0x6D25, 0x895F, 0x7D27, 0x9526, 0x4EC5, 0x8C28, 0x8FDB, 0x9773, 0x664B, + 0x7981, 0x8FD1, 0x70EC, 0x6D78}, + {0x5C3D, 0x52B2, 0x8346, 0x5162, 0x830E, 0x775B, 0x6676, 0x9CB8, 0x4EAC, + 0x60CA, 0x7CBE, 0x7CB3, 0x7ECF, 0x4E95, 0x8B66, 0x666F, 0x9888, 0x9759, + 0x5883, 0x656C, 0x955C, 0x5F84, 0x75C9, 0x9756, 0x7ADF, 0x7ADE, 0x51C0, + 0x70AF, 0x7A98, 0x63EA, 0x7A76, 0x7EA0, 0x7396, 0x97ED, 0x4E45, 0x7078, + 0x4E5D, 0x9152, 0x53A9, 0x6551, 0x65E7, 0x81FC, 0x8205, 0x548E, 0x5C31, + 0x759A, 0x97A0, 0x62D8, 0x72D9, 0x75BD, 0x5C45, 0x9A79, 0x83CA, 0x5C40, + 0x5480, 0x77E9, 0x4E3E, 0x6CAE, 0x805A, 0x62D2, 0x636E, 0x5DE8, 0x5177, + 0x8DDD, 0x8E1E, 0x952F, 0x4FF1, 0x53E5, 0x60E7, 0x70AC, 0x5267, 0x6350, + 0x9E43, 0x5A1F, 0x5026, 0x7737, 0x5377, 0x7EE2, 0x6485, 0x652B, 0x6289, + 0x6398, 0x5014, 0x7235, 0x89C9, 0x51B3, 0x8BC0, 0x7EDD, 0x5747, 0x83CC, + 0x94A7, 0x519B, 0x541B, 0x5CFB}, + {0x4FCA, 0x7AE3, 0x6D5A, 0x90E1, 0x9A8F, 0x5580, 0x5496, 0x5361, 0x54AF, + 0x5F00, 0x63E9, 0x6977, 0x51EF, 0x6168, 0x520A, 0x582A, 0x52D8, 0x574E, + 0x780D, 0x770B, 0x5EB7, 0x6177, 0x7CE0, 0x625B, 0x6297, 0x4EA2, 0x7095, + 0x8003, 0x62F7, 0x70E4, 0x9760, 0x5777, 0x82DB, 0x67EF, 0x68F5, 0x78D5, + 0x9897, 0x79D1, 0x58F3, 0x54B3, 0x53EF, 0x6E34, 0x514B, 0x523B, 0x5BA2, + 0x8BFE, 0x80AF, 0x5543, 0x57A6, 0x6073, 0x5751, 0x542D, 0x7A7A, 0x6050, + 0x5B54, 0x63A7, 0x62A0, 0x53E3, 0x6263, 0x5BC7, 0x67AF, 0x54ED, 0x7A9F, + 0x82E6, 0x9177, 0x5E93, 0x88E4, 0x5938, 0x57AE, 0x630E, 0x8DE8, 0x80EF, + 0x5757, 0x7B77, 0x4FA9, 0x5FEB, 0x5BBD, 0x6B3E, 0x5321, 0x7B50, 0x72C2, + 0x6846, 0x77FF, 0x7736, 0x65F7, 0x51B5, 0x4E8F, 0x76D4, 0x5CBF, 0x7AA5, + 0x8475, 0x594E, 0x9B41, 0x5080}, + {0x9988, 0x6127, 0x6E83, 0x5764, 0x6606, 0x6346, 0x56F0, 0x62EC, 0x6269, + 0x5ED3, 0x9614, 0x5783, 0x62C9, 0x5587, 0x8721, 0x814A, 0x8FA3, 0x5566, + 0x83B1, 0x6765, 0x8D56, 0x84DD, 0x5A6A, 0x680F, 0x62E6, 0x7BEE, 0x9611, + 0x5170, 0x6F9C, 0x8C30, 0x63FD, 0x89C8, 0x61D2, 0x7F06, 0x70C2, 0x6EE5, + 0x7405, 0x6994, 0x72FC, 0x5ECA, 0x90CE, 0x6717, 0x6D6A, 0x635E, 0x52B3, + 0x7262, 0x8001, 0x4F6C, 0x59E5, 0x916A, 0x70D9, 0x6D9D, 0x52D2, 0x4E50, + 0x96F7, 0x956D, 0x857E, 0x78CA, 0x7D2F, 0x5121, 0x5792, 0x64C2, 0x808B, + 0x7C7B, 0x6CEA, 0x68F1, 0x695E, 0x51B7, 0x5398, 0x68A8, 0x7281, 0x9ECE, + 0x7BF1, 0x72F8, 0x79BB, 0x6F13, 0x7406, 0x674E, 0x91CC, 0x9CA4, 0x793C, + 0x8389, 0x8354, 0x540F, 0x6817, 0x4E3D, 0x5389, 0x52B1, 0x783E, 0x5386, + 0x5229, 0x5088, 0x4F8B, 0x4FD0}, + {0x75E2, 0x7ACB, 0x7C92, 0x6CA5, 0x96B6, 0x529B, 0x7483, 0x54E9, 0x4FE9, + 0x8054, 0x83B2, 0x8FDE, 0x9570, 0x5EC9, 0x601C, 0x6D9F, 0x5E18, 0x655B, + 0x8138, 0x94FE, 0x604B, 0x70BC, 0x7EC3, 0x7CAE, 0x51C9, 0x6881, 0x7CB1, + 0x826F, 0x4E24, 0x8F86, 0x91CF, 0x667E, 0x4EAE, 0x8C05, 0x64A9, 0x804A, + 0x50DA, 0x7597, 0x71CE, 0x5BE5, 0x8FBD, 0x6F66, 0x4E86, 0x6482, 0x9563, + 0x5ED6, 0x6599, 0x5217, 0x88C2, 0x70C8, 0x52A3, 0x730E, 0x7433, 0x6797, + 0x78F7, 0x9716, 0x4E34, 0x90BB, 0x9CDE, 0x6DCB, 0x51DB, 0x8D41, 0x541D, + 0x62CE, 0x73B2, 0x83F1, 0x96F6, 0x9F84, 0x94C3, 0x4F36, 0x7F9A, 0x51CC, + 0x7075, 0x9675, 0x5CAD, 0x9886, 0x53E6, 0x4EE4, 0x6E9C, 0x7409, 0x69B4, + 0x786B, 0x998F, 0x7559, 0x5218, 0x7624, 0x6D41, 0x67F3, 0x516D, 0x9F99, + 0x804B, 0x5499, 0x7B3C, 0x7ABF}, + {0x9686, 0x5784, 0x62E2, 0x9647, 0x697C, 0x5A04, 0x6402, 0x7BD3, 0x6F0F, + 0x964B, 0x82A6, 0x5362, 0x9885, 0x5E90, 0x7089, 0x63B3, 0x5364, 0x864F, + 0x9C81, 0x9E93, 0x788C, 0x9732, 0x8DEF, 0x8D42, 0x9E7F, 0x6F5E, 0x7984, + 0x5F55, 0x9646, 0x622E, 0x9A74, 0x5415, 0x94DD, 0x4FA3, 0x65C5, 0x5C65, + 0x5C61, 0x7F15, 0x8651, 0x6C2F, 0x5F8B, 0x7387, 0x6EE4, 0x7EFF, 0x5CE6, + 0x631B, 0x5B6A, 0x6EE6, 0x5375, 0x4E71, 0x63A0, 0x7565, 0x62A1, 0x8F6E, + 0x4F26, 0x4ED1, 0x6CA6, 0x7EB6, 0x8BBA, 0x841D, 0x87BA, 0x7F57, 0x903B, + 0x9523, 0x7BA9, 0x9AA1, 0x88F8, 0x843D, 0x6D1B, 0x9A86, 0x7EDC, 0x5988, + 0x9EBB, 0x739B, 0x7801, 0x8682, 0x9A6C, 0x9A82, 0x561B, 0x5417, 0x57CB, + 0x4E70, 0x9EA6, 0x5356, 0x8FC8, 0x8109, 0x7792, 0x9992, 0x86EE, 0x6EE1, + 0x8513, 0x66FC, 0x6162, 0x6F2B}, + {0x8C29, 0x8292, 0x832B, 0x76F2, 0x6C13, 0x5FD9, 0x83BD, 0x732B, 0x8305, + 0x951A, 0x6BDB, 0x77DB, 0x94C6, 0x536F, 0x8302, 0x5192, 0x5E3D, 0x8C8C, + 0x8D38, 0x4E48, 0x73AB, 0x679A, 0x6885, 0x9176, 0x9709, 0x7164, 0x6CA1, + 0x7709, 0x5A92, 0x9541, 0x6BCF, 0x7F8E, 0x6627, 0x5BD0, 0x59B9, 0x5A9A, + 0x95E8, 0x95F7, 0x4EEC, 0x840C, 0x8499, 0x6AAC, 0x76DF, 0x9530, 0x731B, + 0x68A6, 0x5B5F, 0x772F, 0x919A, 0x9761, 0x7CDC, 0x8FF7, 0x8C1C, 0x5F25, + 0x7C73, 0x79D8, 0x89C5, 0x6CCC, 0x871C, 0x5BC6, 0x5E42, 0x68C9, 0x7720, + 0x7EF5, 0x5195, 0x514D, 0x52C9, 0x5A29, 0x7F05, 0x9762, 0x82D7, 0x63CF, + 0x7784, 0x85D0, 0x79D2, 0x6E3A, 0x5E99, 0x5999, 0x8511, 0x706D, 0x6C11, + 0x62BF, 0x76BF, 0x654F, 0x60AF, 0x95FD, 0x660E, 0x879F, 0x9E23, 0x94ED, + 0x540D, 0x547D, 0x8C2C, 0x6478}, + {0x6479, 0x8611, 0x6A21, 0x819C, 0x78E8, 0x6469, 0x9B54, 0x62B9, 0x672B, + 0x83AB, 0x58A8, 0x9ED8, 0x6CAB, 0x6F20, 0x5BDE, 0x964C, 0x8C0B, 0x725F, + 0x67D0, 0x62C7, 0x7261, 0x4EA9, 0x59C6, 0x6BCD, 0x5893, 0x66AE, 0x5E55, + 0x52DF, 0x6155, 0x6728, 0x76EE, 0x7766, 0x7267, 0x7A46, 0x62FF, 0x54EA, + 0x5450, 0x94A0, 0x90A3, 0x5A1C, 0x7EB3, 0x6C16, 0x4E43, 0x5976, 0x8010, + 0x5948, 0x5357, 0x7537, 0x96BE, 0x56CA, 0x6320, 0x8111, 0x607C, 0x95F9, + 0x6DD6, 0x5462, 0x9981, 0x5185, 0x5AE9, 0x80FD, 0x59AE, 0x9713, 0x502A, + 0x6CE5, 0x5C3C, 0x62DF, 0x4F60, 0x533F, 0x817B, 0x9006, 0x6EBA, 0x852B, + 0x62C8, 0x5E74, 0x78BE, 0x64B5, 0x637B, 0x5FF5, 0x5A18, 0x917F, 0x9E1F, + 0x5C3F, 0x634F, 0x8042, 0x5B7D, 0x556E, 0x954A, 0x954D, 0x6D85, 0x60A8, + 0x67E0, 0x72DE, 0x51DD, 0x5B81}, + {0x62E7, 0x6CDE, 0x725B, 0x626D, 0x94AE, 0x7EBD, 0x8113, 0x6D53, 0x519C, + 0x5F04, 0x5974, 0x52AA, 0x6012, 0x5973, 0x6696, 0x8650, 0x759F, 0x632A, + 0x61E6, 0x7CEF, 0x8BFA, 0x54E6, 0x6B27, 0x9E25, 0x6BB4, 0x85D5, 0x5455, + 0x5076, 0x6CA4, 0x556A, 0x8DB4, 0x722C, 0x5E15, 0x6015, 0x7436, 0x62CD, + 0x6392, 0x724C, 0x5F98, 0x6E43, 0x6D3E, 0x6500, 0x6F58, 0x76D8, 0x78D0, + 0x76FC, 0x7554, 0x5224, 0x53DB, 0x4E53, 0x5E9E, 0x65C1, 0x802A, 0x80D6, + 0x629B, 0x5486, 0x5228, 0x70AE, 0x888D, 0x8DD1, 0x6CE1, 0x5478, 0x80DA, + 0x57F9, 0x88F4, 0x8D54, 0x966A, 0x914D, 0x4F69, 0x6C9B, 0x55B7, 0x76C6, + 0x7830, 0x62A8, 0x70F9, 0x6F8E, 0x5F6D, 0x84EC, 0x68DA, 0x787C, 0x7BF7, + 0x81A8, 0x670B, 0x9E4F, 0x6367, 0x78B0, 0x576F, 0x7812, 0x9739, 0x6279, + 0x62AB, 0x5288, 0x7435, 0x6BD7}, + {0x5564, 0x813E, 0x75B2, 0x76AE, 0x5339, 0x75DE, 0x50FB, 0x5C41, 0x8B6C, + 0x7BC7, 0x504F, 0x7247, 0x9A97, 0x98D8, 0x6F02, 0x74E2, 0x7968, 0x6487, + 0x77A5, 0x62FC, 0x9891, 0x8D2B, 0x54C1, 0x8058, 0x4E52, 0x576A, 0x82F9, + 0x840D, 0x5E73, 0x51ED, 0x74F6, 0x8BC4, 0x5C4F, 0x5761, 0x6CFC, 0x9887, + 0x5A46, 0x7834, 0x9B44, 0x8FEB, 0x7C95, 0x5256, 0x6251, 0x94FA, 0x4EC6, + 0x8386, 0x8461, 0x83E9, 0x84B2, 0x57D4, 0x6734, 0x5703, 0x666E, 0x6D66, + 0x8C31, 0x66DD, 0x7011, 0x671F, 0x6B3A, 0x6816, 0x621A, 0x59BB, 0x4E03, + 0x51C4, 0x6F06, 0x67D2, 0x6C8F, 0x5176, 0x68CB, 0x5947, 0x6B67, 0x7566, + 0x5D0E, 0x8110, 0x9F50, 0x65D7, 0x7948, 0x7941, 0x9A91, 0x8D77, 0x5C82, + 0x4E5E, 0x4F01, 0x542F, 0x5951, 0x780C, 0x5668, 0x6C14, 0x8FC4, 0x5F03, + 0x6C7D, 0x6CE3, 0x8BAB, 0x6390}, + {0x6070, 0x6D3D, 0x7275, 0x6266, 0x948E, 0x94C5, 0x5343, 0x8FC1, 0x7B7E, + 0x4EDF, 0x8C26, 0x4E7E, 0x9ED4, 0x94B1, 0x94B3, 0x524D, 0x6F5C, 0x9063, + 0x6D45, 0x8C34, 0x5811, 0x5D4C, 0x6B20, 0x6B49, 0x67AA, 0x545B, 0x8154, + 0x7F8C, 0x5899, 0x8537, 0x5F3A, 0x62A2, 0x6A47, 0x9539, 0x6572, 0x6084, + 0x6865, 0x77A7, 0x4E54, 0x4FA8, 0x5DE7, 0x9798, 0x64AC, 0x7FD8, 0x5CED, + 0x4FCF, 0x7A8D, 0x5207, 0x8304, 0x4E14, 0x602F, 0x7A83, 0x94A6, 0x4FB5, + 0x4EB2, 0x79E6, 0x7434, 0x52E4, 0x82B9, 0x64D2, 0x79BD, 0x5BDD, 0x6C81, + 0x9752, 0x8F7B, 0x6C22, 0x503E, 0x537F, 0x6E05, 0x64CE, 0x6674, 0x6C30, + 0x60C5, 0x9877, 0x8BF7, 0x5E86, 0x743C, 0x7A77, 0x79CB, 0x4E18, 0x90B1, + 0x7403, 0x6C42, 0x56DA, 0x914B, 0x6CC5, 0x8D8B, 0x533A, 0x86C6, 0x66F2, + 0x8EAF, 0x5C48, 0x9A71, 0x6E20}, + {0x53D6, 0x5A36, 0x9F8B, 0x8DA3, 0x53BB, 0x5708, 0x98A7, 0x6743, 0x919B, + 0x6CC9, 0x5168, 0x75CA, 0x62F3, 0x72AC, 0x5238, 0x529D, 0x7F3A, 0x7094, + 0x7638, 0x5374, 0x9E4A, 0x69B7, 0x786E, 0x96C0, 0x88D9, 0x7FA4, 0x7136, + 0x71C3, 0x5189, 0x67D3, 0x74E4, 0x58E4, 0x6518, 0x56B7, 0x8BA9, 0x9976, + 0x6270, 0x7ED5, 0x60F9, 0x70ED, 0x58EC, 0x4EC1, 0x4EBA, 0x5FCD, 0x97E7, + 0x4EFB, 0x8BA4, 0x5203, 0x598A, 0x7EAB, 0x6254, 0x4ECD, 0x65E5, 0x620E, + 0x8338, 0x84C9, 0x8363, 0x878D, 0x7194, 0x6EB6, 0x5BB9, 0x7ED2, 0x5197, + 0x63C9, 0x67D4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5B7A, 0x5982, 0x8FB1, + 0x4E73, 0x6C5D, 0x5165, 0x8925, 0x8F6F, 0x962E, 0x854A, 0x745E, 0x9510, + 0x95F0, 0x6DA6, 0x82E5, 0x5F31, 0x6492, 0x6D12, 0x8428, 0x816E, 0x9CC3, + 0x585E, 0x8D5B, 0x4E09, 0x53C1}, + {0x4F1E, 0x6563, 0x6851, 0x55D3, 0x4E27, 0x6414, 0x9A9A, 0x626B, 0x5AC2, + 0x745F, 0x8272, 0x6DA9, 0x68EE, 0x50E7, 0x838E, 0x7802, 0x6740, 0x5239, + 0x6C99, 0x7EB1, 0x50BB, 0x5565, 0x715E, 0x7B5B, 0x6652, 0x73CA, 0x82EB, + 0x6749, 0x5C71, 0x5220, 0x717D, 0x886B, 0x95EA, 0x9655, 0x64C5, 0x8D61, + 0x81B3, 0x5584, 0x6C55, 0x6247, 0x7F2E, 0x5892, 0x4F24, 0x5546, 0x8D4F, + 0x664C, 0x4E0A, 0x5C1A, 0x88F3, 0x68A2, 0x634E, 0x7A0D, 0x70E7, 0x828D, + 0x52FA, 0x97F6, 0x5C11, 0x54E8, 0x90B5, 0x7ECD, 0x5962, 0x8D4A, 0x86C7, + 0x820C, 0x820D, 0x8D66, 0x6444, 0x5C04, 0x6151, 0x6D89, 0x793E, 0x8BBE, + 0x7837, 0x7533, 0x547B, 0x4F38, 0x8EAB, 0x6DF1, 0x5A20, 0x7EC5, 0x795E, + 0x6C88, 0x5BA1, 0x5A76, 0x751A, 0x80BE, 0x614E, 0x6E17, 0x58F0, 0x751F, + 0x7525, 0x7272, 0x5347, 0x7EF3}, + {0x7701, 0x76DB, 0x5269, 0x80DC, 0x5723, 0x5E08, 0x5931, 0x72EE, 0x65BD, + 0x6E7F, 0x8BD7, 0x5C38, 0x8671, 0x5341, 0x77F3, 0x62FE, 0x65F6, 0x4EC0, + 0x98DF, 0x8680, 0x5B9E, 0x8BC6, 0x53F2, 0x77E2, 0x4F7F, 0x5C4E, 0x9A76, + 0x59CB, 0x5F0F, 0x793A, 0x58EB, 0x4E16, 0x67FF, 0x4E8B, 0x62ED, 0x8A93, + 0x901D, 0x52BF, 0x662F, 0x55DC, 0x566C, 0x9002, 0x4ED5, 0x4F8D, 0x91CA, + 0x9970, 0x6C0F, 0x5E02, 0x6043, 0x5BA4, 0x89C6, 0x8BD5, 0x6536, 0x624B, + 0x9996, 0x5B88, 0x5BFF, 0x6388, 0x552E, 0x53D7, 0x7626, 0x517D, 0x852C, + 0x67A2, 0x68B3, 0x6B8A, 0x6292, 0x8F93, 0x53D4, 0x8212, 0x6DD1, 0x758F, + 0x4E66, 0x8D4E, 0x5B70, 0x719F, 0x85AF, 0x6691, 0x66D9, 0x7F72, 0x8700, + 0x9ECD, 0x9F20, 0x5C5E, 0x672F, 0x8FF0, 0x6811, 0x675F, 0x620D, 0x7AD6, + 0x5885, 0x5EB6, 0x6570, 0x6F31}, + {0x6055, 0x5237, 0x800D, 0x6454, 0x8870, 0x7529, 0x5E05, 0x6813, 0x62F4, + 0x971C, 0x53CC, 0x723D, 0x8C01, 0x6C34, 0x7761, 0x7A0E, 0x542E, 0x77AC, + 0x987A, 0x821C, 0x8BF4, 0x7855, 0x6714, 0x70C1, 0x65AF, 0x6495, 0x5636, + 0x601D, 0x79C1, 0x53F8, 0x4E1D, 0x6B7B, 0x8086, 0x5BFA, 0x55E3, 0x56DB, + 0x4F3A, 0x4F3C, 0x9972, 0x5DF3, 0x677E, 0x8038, 0x6002, 0x9882, 0x9001, + 0x5B8B, 0x8BBC, 0x8BF5, 0x641C, 0x8258, 0x64DE, 0x55FD, 0x82CF, 0x9165, + 0x4FD7, 0x7D20, 0x901F, 0x7C9F, 0x50F3, 0x5851, 0x6EAF, 0x5BBF, 0x8BC9, + 0x8083, 0x9178, 0x849C, 0x7B97, 0x867D, 0x968B, 0x968F, 0x7EE5, 0x9AD3, + 0x788E, 0x5C81, 0x7A57, 0x9042, 0x96A7, 0x795F, 0x5B59, 0x635F, 0x7B0B, + 0x84D1, 0x68AD, 0x5506, 0x7F29, 0x7410, 0x7D22, 0x9501, 0x6240, 0x584C, + 0x4ED6, 0x5B83, 0x5979, 0x5854}, + {0x736D, 0x631E, 0x8E4B, 0x8E0F, 0x80CE, 0x82D4, 0x62AC, 0x53F0, 0x6CF0, + 0x915E, 0x592A, 0x6001, 0x6C70, 0x574D, 0x644A, 0x8D2A, 0x762B, 0x6EE9, + 0x575B, 0x6A80, 0x75F0, 0x6F6D, 0x8C2D, 0x8C08, 0x5766, 0x6BEF, 0x8892, + 0x78B3, 0x63A2, 0x53F9, 0x70AD, 0x6C64, 0x5858, 0x642A, 0x5802, 0x68E0, + 0x819B, 0x5510, 0x7CD6, 0x5018, 0x8EBA, 0x6DCC, 0x8D9F, 0x70EB, 0x638F, + 0x6D9B, 0x6ED4, 0x7EE6, 0x8404, 0x6843, 0x9003, 0x6DD8, 0x9676, 0x8BA8, + 0x5957, 0x7279, 0x85E4, 0x817E, 0x75BC, 0x8A8A, 0x68AF, 0x5254, 0x8E22, + 0x9511, 0x63D0, 0x9898, 0x8E44, 0x557C, 0x4F53, 0x66FF, 0x568F, 0x60D5, + 0x6D95, 0x5243, 0x5C49, 0x5929, 0x6DFB, 0x586B, 0x7530, 0x751C, 0x606C, + 0x8214, 0x8146, 0x6311, 0x6761, 0x8FE2, 0x773A, 0x8DF3, 0x8D34, 0x94C1, + 0x5E16, 0x5385, 0x542C, 0x70C3}, + {0x6C40, 0x5EF7, 0x505C, 0x4EAD, 0x5EAD, 0x633A, 0x8247, 0x901A, 0x6850, + 0x916E, 0x77B3, 0x540C, 0x94DC, 0x5F64, 0x7AE5, 0x6876, 0x6345, 0x7B52, + 0x7EDF, 0x75DB, 0x5077, 0x6295, 0x5934, 0x900F, 0x51F8, 0x79C3, 0x7A81, + 0x56FE, 0x5F92, 0x9014, 0x6D82, 0x5C60, 0x571F, 0x5410, 0x5154, 0x6E4D, + 0x56E2, 0x63A8, 0x9893, 0x817F, 0x8715, 0x892A, 0x9000, 0x541E, 0x5C6F, + 0x81C0, 0x62D6, 0x6258, 0x8131, 0x9E35, 0x9640, 0x9A6E, 0x9A7C, 0x692D, + 0x59A5, 0x62D3, 0x553E, 0x6316, 0x54C7, 0x86D9, 0x6D3C, 0x5A03, 0x74E6, + 0x889C, 0x6B6A, 0x5916, 0x8C4C, 0x5F2F, 0x6E7E, 0x73A9, 0x987D, 0x4E38, + 0x70F7, 0x5B8C, 0x7897, 0x633D, 0x665A, 0x7696, 0x60CB, 0x5B9B, 0x5A49, + 0x4E07, 0x8155, 0x6C6A, 0x738B, 0x4EA1, 0x6789, 0x7F51, 0x5F80, 0x65FA, + 0x671B, 0x5FD8, 0x5984, 0x5A01}, + {0x5DCD, 0x5FAE, 0x5371, 0x97E6, 0x8FDD, 0x6845, 0x56F4, 0x552F, 0x60DF, + 0x4E3A, 0x6F4D, 0x7EF4, 0x82C7, 0x840E, 0x59D4, 0x4F1F, 0x4F2A, 0x5C3E, + 0x7EAC, 0x672A, 0x851A, 0x5473, 0x754F, 0x80C3, 0x5582, 0x9B4F, 0x4F4D, + 0x6E2D, 0x8C13, 0x5C09, 0x6170, 0x536B, 0x761F, 0x6E29, 0x868A, 0x6587, + 0x95FB, 0x7EB9, 0x543B, 0x7A33, 0x7D0A, 0x95EE, 0x55E1, 0x7FC1, 0x74EE, + 0x631D, 0x8717, 0x6DA1, 0x7A9D, 0x6211, 0x65A1, 0x5367, 0x63E1, 0x6C83, + 0x5DEB, 0x545C, 0x94A8, 0x4E4C, 0x6C61, 0x8BEC, 0x5C4B, 0x65E0, 0x829C, + 0x68A7, 0x543E, 0x5434, 0x6BCB, 0x6B66, 0x4E94, 0x6342, 0x5348, 0x821E, + 0x4F0D, 0x4FAE, 0x575E, 0x620A, 0x96FE, 0x6664, 0x7269, 0x52FF, 0x52A1, + 0x609F, 0x8BEF, 0x6614, 0x7199, 0x6790, 0x897F, 0x7852, 0x77FD, 0x6670, + 0x563B, 0x5438, 0x9521, 0x727A}, + {0x7A00, 0x606F, 0x5E0C, 0x6089, 0x819D, 0x5915, 0x60DC, 0x7184, 0x70EF, + 0x6EAA, 0x6C50, 0x7280, 0x6A84, 0x88AD, 0x5E2D, 0x4E60, 0x5AB3, 0x559C, + 0x94E3, 0x6D17, 0x7CFB, 0x9699, 0x620F, 0x7EC6, 0x778E, 0x867E, 0x5323, + 0x971E, 0x8F96, 0x6687, 0x5CE1, 0x4FA0, 0x72ED, 0x4E0B, 0x53A6, 0x590F, + 0x5413, 0x6380, 0x9528, 0x5148, 0x4ED9, 0x9C9C, 0x7EA4, 0x54B8, 0x8D24, + 0x8854, 0x8237, 0x95F2, 0x6D8E, 0x5F26, 0x5ACC, 0x663E, 0x9669, 0x73B0, + 0x732E, 0x53BF, 0x817A, 0x9985, 0x7FA1, 0x5BAA, 0x9677, 0x9650, 0x7EBF, + 0x76F8, 0x53A2, 0x9576, 0x9999, 0x7BB1, 0x8944, 0x6E58, 0x4E61, 0x7FD4, + 0x7965, 0x8BE6, 0x60F3, 0x54CD, 0x4EAB, 0x9879, 0x5DF7, 0x6A61, 0x50CF, + 0x5411, 0x8C61, 0x8427, 0x785D, 0x9704, 0x524A, 0x54EE, 0x56A3, 0x9500, + 0x6D88, 0x5BB5, 0x6DC6, 0x6653}, + {0x5C0F, 0x5B5D, 0x6821, 0x8096, 0x5578, 0x7B11, 0x6548, 0x6954, 0x4E9B, + 0x6B47, 0x874E, 0x978B, 0x534F, 0x631F, 0x643A, 0x90AA, 0x659C, 0x80C1, + 0x8C10, 0x5199, 0x68B0, 0x5378, 0x87F9, 0x61C8, 0x6CC4, 0x6CFB, 0x8C22, + 0x5C51, 0x85AA, 0x82AF, 0x950C, 0x6B23, 0x8F9B, 0x65B0, 0x5FFB, 0x5FC3, + 0x4FE1, 0x8845, 0x661F, 0x8165, 0x7329, 0x60FA, 0x5174, 0x5211, 0x578B, + 0x5F62, 0x90A2, 0x884C, 0x9192, 0x5E78, 0x674F, 0x6027, 0x59D3, 0x5144, + 0x51F6, 0x80F8, 0x5308, 0x6C79, 0x96C4, 0x718A, 0x4F11, 0x4FEE, 0x7F9E, + 0x673D, 0x55C5, 0x9508, 0x79C0, 0x8896, 0x7EE3, 0x589F, 0x620C, 0x9700, + 0x865A, 0x5618, 0x987B, 0x5F90, 0x8BB8, 0x84C4, 0x9157, 0x53D9, 0x65ED, + 0x5E8F, 0x755C, 0x6064, 0x7D6E, 0x5A7F, 0x7EEA, 0x7EED, 0x8F69, 0x55A7, + 0x5BA3, 0x60AC, 0x65CB, 0x7384}, + {0x9009, 0x7663, 0x7729, 0x7EDA, 0x9774, 0x859B, 0x5B66, 0x7A74, 0x96EA, + 0x8840, 0x52CB, 0x718F, 0x5FAA, 0x65EC, 0x8BE2, 0x5BFB, 0x9A6F, 0x5DE1, + 0x6B89, 0x6C5B, 0x8BAD, 0x8BAF, 0x900A, 0x8FC5, 0x538B, 0x62BC, 0x9E26, + 0x9E2D, 0x5440, 0x4E2B, 0x82BD, 0x7259, 0x869C, 0x5D16, 0x8859, 0x6DAF, + 0x96C5, 0x54D1, 0x4E9A, 0x8BB6, 0x7109, 0x54BD, 0x9609, 0x70DF, 0x6DF9, + 0x76D0, 0x4E25, 0x7814, 0x8712, 0x5CA9, 0x5EF6, 0x8A00, 0x989C, 0x960E, + 0x708E, 0x6CBF, 0x5944, 0x63A9, 0x773C, 0x884D, 0x6F14, 0x8273, 0x5830, + 0x71D5, 0x538C, 0x781A, 0x96C1, 0x5501, 0x5F66, 0x7130, 0x5BB4, 0x8C1A, + 0x9A8C, 0x6B83, 0x592E, 0x9E2F, 0x79E7, 0x6768, 0x626C, 0x4F6F, 0x75A1, + 0x7F8A, 0x6D0B, 0x9633, 0x6C27, 0x4EF0, 0x75D2, 0x517B, 0x6837, 0x6F3E, + 0x9080, 0x8170, 0x5996, 0x7476}, + {0x6447, 0x5C27, 0x9065, 0x7A91, 0x8C23, 0x59DA, 0x54AC, 0x8200, 0x836F, + 0x8981, 0x8000, 0x6930, 0x564E, 0x8036, 0x7237, 0x91CE, 0x51B6, 0x4E5F, + 0x9875, 0x6396, 0x4E1A, 0x53F6, 0x66F3, 0x814B, 0x591C, 0x6DB2, 0x4E00, + 0x58F9, 0x533B, 0x63D6, 0x94F1, 0x4F9D, 0x4F0A, 0x8863, 0x9890, 0x5937, + 0x9057, 0x79FB, 0x4EEA, 0x80F0, 0x7591, 0x6C82, 0x5B9C, 0x59E8, 0x5F5D, + 0x6905, 0x8681, 0x501A, 0x5DF2, 0x4E59, 0x77E3, 0x4EE5, 0x827A, 0x6291, + 0x6613, 0x9091, 0x5C79, 0x4EBF, 0x5F79, 0x81C6, 0x9038, 0x8084, 0x75AB, + 0x4EA6, 0x88D4, 0x610F, 0x6BC5, 0x5FC6, 0x4E49, 0x76CA, 0x6EA2, 0x8BE3, + 0x8BAE, 0x8C0A, 0x8BD1, 0x5F02, 0x7FFC, 0x7FCC, 0x7ECE, 0x8335, 0x836B, + 0x56E0, 0x6BB7, 0x97F3, 0x9634, 0x59FB, 0x541F, 0x94F6, 0x6DEB, 0x5BC5, + 0x996E, 0x5C39, 0x5F15, 0x9690}, + {0x5370, 0x82F1, 0x6A31, 0x5A74, 0x9E70, 0x5E94, 0x7F28, 0x83B9, 0x8424, + 0x8425, 0x8367, 0x8747, 0x8FCE, 0x8D62, 0x76C8, 0x5F71, 0x9896, 0x786C, + 0x6620, 0x54DF, 0x62E5, 0x4F63, 0x81C3, 0x75C8, 0x5EB8, 0x96CD, 0x8E0A, + 0x86F9, 0x548F, 0x6CF3, 0x6D8C, 0x6C38, 0x607F, 0x52C7, 0x7528, 0x5E7D, + 0x4F18, 0x60A0, 0x5FE7, 0x5C24, 0x7531, 0x90AE, 0x94C0, 0x72B9, 0x6CB9, + 0x6E38, 0x9149, 0x6709, 0x53CB, 0x53F3, 0x4F51, 0x91C9, 0x8BF1, 0x53C8, + 0x5E7C, 0x8FC2, 0x6DE4, 0x4E8E, 0x76C2, 0x6986, 0x865E, 0x611A, 0x8206, + 0x4F59, 0x4FDE, 0x903E, 0x9C7C, 0x6109, 0x6E1D, 0x6E14, 0x9685, 0x4E88, + 0x5A31, 0x96E8, 0x4E0E, 0x5C7F, 0x79B9, 0x5B87, 0x8BED, 0x7FBD, 0x7389, + 0x57DF, 0x828B, 0x90C1, 0x5401, 0x9047, 0x55BB, 0x5CEA, 0x5FA1, 0x6108, + 0x6B32, 0x72F1, 0x80B2, 0x8A89}, + {0x6D74, 0x5BD3, 0x88D5, 0x9884, 0x8C6B, 0x9A6D, 0x9E33, 0x6E0A, 0x51A4, + 0x5143, 0x57A3, 0x8881, 0x539F, 0x63F4, 0x8F95, 0x56ED, 0x5458, 0x5706, + 0x733F, 0x6E90, 0x7F18, 0x8FDC, 0x82D1, 0x613F, 0x6028, 0x9662, 0x66F0, + 0x7EA6, 0x8D8A, 0x8DC3, 0x94A5, 0x5CB3, 0x7CA4, 0x6708, 0x60A6, 0x9605, + 0x8018, 0x4E91, 0x90E7, 0x5300, 0x9668, 0x5141, 0x8FD0, 0x8574, 0x915D, + 0x6655, 0x97F5, 0x5B55, 0x531D, 0x7838, 0x6742, 0x683D, 0x54C9, 0x707E, + 0x5BB0, 0x8F7D, 0x518D, 0x5728, 0x54B1, 0x6512, 0x6682, 0x8D5E, 0x8D43, + 0x810F, 0x846C, 0x906D, 0x7CDF, 0x51FF, 0x85FB, 0x67A3, 0x65E9, 0x6FA1, + 0x86A4, 0x8E81, 0x566A, 0x9020, 0x7682, 0x7076, 0x71E5, 0x8D23, 0x62E9, + 0x5219, 0x6CFD, 0x8D3C, 0x600E, 0x589E, 0x618E, 0x66FE, 0x8D60, 0x624E, + 0x55B3, 0x6E23, 0x672D, 0x8F67}, + {0x94E1, 0x95F8, 0x7728, 0x6805, 0x69A8, 0x548B, 0x4E4D, 0x70B8, 0x8BC8, + 0x6458, 0x658B, 0x5B85, 0x7A84, 0x503A, 0x5BE8, 0x77BB, 0x6BE1, 0x8A79, + 0x7C98, 0x6CBE, 0x76CF, 0x65A9, 0x8F97, 0x5D2D, 0x5C55, 0x8638, 0x6808, + 0x5360, 0x6218, 0x7AD9, 0x6E5B, 0x7EFD, 0x6A1F, 0x7AE0, 0x5F70, 0x6F33, + 0x5F20, 0x638C, 0x6DA8, 0x6756, 0x4E08, 0x5E10, 0x8D26, 0x4ED7, 0x80C0, + 0x7634, 0x969C, 0x62DB, 0x662D, 0x627E, 0x6CBC, 0x8D75, 0x7167, 0x7F69, + 0x5146, 0x8087, 0x53EC, 0x906E, 0x6298, 0x54F2, 0x86F0, 0x8F99, 0x8005, + 0x9517, 0x8517, 0x8FD9, 0x6D59, 0x73CD, 0x659F, 0x771F, 0x7504, 0x7827, + 0x81FB, 0x8D1E, 0x9488, 0x4FA6, 0x6795, 0x75B9, 0x8BCA, 0x9707, 0x632F, + 0x9547, 0x9635, 0x84B8, 0x6323, 0x7741, 0x5F81, 0x72F0, 0x4E89, 0x6014, + 0x6574, 0x62EF, 0x6B63, 0x653F}, + {0x5E27, 0x75C7, 0x90D1, 0x8BC1, 0x829D, 0x679D, 0x652F, 0x5431, 0x8718, + 0x77E5, 0x80A2, 0x8102, 0x6C41, 0x4E4B, 0x7EC7, 0x804C, 0x76F4, 0x690D, + 0x6B96, 0x6267, 0x503C, 0x4F84, 0x5740, 0x6307, 0x6B62, 0x8DBE, 0x53EA, + 0x65E8, 0x7EB8, 0x5FD7, 0x631A, 0x63B7, 0x81F3, 0x81F4, 0x7F6E, 0x5E1C, + 0x5CD9, 0x5236, 0x667A, 0x79E9, 0x7A1A, 0x8D28, 0x7099, 0x75D4, 0x6EDE, + 0x6CBB, 0x7A92, 0x4E2D, 0x76C5, 0x5FE0, 0x949F, 0x8877, 0x7EC8, 0x79CD, + 0x80BF, 0x91CD, 0x4EF2, 0x4F17, 0x821F, 0x5468, 0x5DDE, 0x6D32, 0x8BCC, + 0x7CA5, 0x8F74, 0x8098, 0x5E1A, 0x5492, 0x76B1, 0x5B99, 0x663C, 0x9AA4, + 0x73E0, 0x682A, 0x86DB, 0x6731, 0x732A, 0x8BF8, 0x8BDB, 0x9010, 0x7AF9, + 0x70DB, 0x716E, 0x62C4, 0x77A9, 0x5631, 0x4E3B, 0x8457, 0x67F1, 0x52A9, + 0x86C0, 0x8D2E, 0x94F8, 0x7B51}, + {0x4F4F, 0x6CE8, 0x795D, 0x9A7B, 0x6293, 0x722A, 0x62FD, 0x4E13, 0x7816, + 0x8F6C, 0x64B0, 0x8D5A, 0x7BC6, 0x6869, 0x5E84, 0x88C5, 0x5986, 0x649E, + 0x58EE, 0x72B6, 0x690E, 0x9525, 0x8FFD, 0x8D58, 0x5760, 0x7F00, 0x8C06, + 0x51C6, 0x6349, 0x62D9, 0x5353, 0x684C, 0x7422, 0x8301, 0x914C, 0x5544, + 0x7740, 0x707C, 0x6D4A, 0x5179, 0x54A8, 0x8D44, 0x59FF, 0x6ECB, 0x6DC4, + 0x5B5C, 0x7D2B, 0x4ED4, 0x7C7D, 0x6ED3, 0x5B50, 0x81EA, 0x6E0D, 0x5B57, + 0x9B03, 0x68D5, 0x8E2A, 0x5B97, 0x7EFC, 0x603B, 0x7EB5, 0x90B9, 0x8D70, + 0x594F, 0x63CD, 0x79DF, 0x8DB3, 0x5352, 0x65CF, 0x7956, 0x8BC5, 0x963B, + 0x7EC4, 0x94BB, 0x7E82, 0x5634, 0x9189, 0x6700, 0x7F6A, 0x5C0A, 0x9075, + 0x6628, 0x5DE6, 0x4F50, 0x67DE, 0x505A, 0x4F5C, 0x5750, 0x5EA7, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x4E8D, 0x4E0C, 0x5140, 0x4E10, 0x5EFF, 0x5345, 0x4E15, 0x4E98, 0x4E1E, + 0x9B32, 0x5B6C, 0x5669, 0x4E28, 0x79BA, 0x4E3F, 0x5315, 0x4E47, 0x592D, + 0x723B, 0x536E, 0x6C10, 0x56DF, 0x80E4, 0x9997, 0x6BD3, 0x777E, 0x9F17, + 0x4E36, 0x4E9F, 0x9F10, 0x4E5C, 0x4E69, 0x4E93, 0x8288, 0x5B5B, 0x556C, + 0x560F, 0x4EC4, 0x538D, 0x539D, 0x53A3, 0x53A5, 0x53AE, 0x9765, 0x8D5D, + 0x531A, 0x53F5, 0x5326, 0x532E, 0x533E, 0x8D5C, 0x5366, 0x5363, 0x5202, + 0x5208, 0x520E, 0x522D, 0x5233, 0x523F, 0x5240, 0x524C, 0x525E, 0x5261, + 0x525C, 0x84AF, 0x527D, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7F54, + 0x4EBB, 0x4EC3, 0x4EC9, 0x4EC2, 0x4EE8, 0x4EE1, 0x4EEB, 0x4EDE, 0x4F1B, + 0x4EF3, 0x4F22, 0x4F64, 0x4EF5, 0x4F25, 0x4F27, 0x4F09, 0x4F2B, 0x4F5E, + 0x4F67, 0x6538, 0x4F5A, 0x4F5D}, + {0x4F5F, 0x4F57, 0x4F32, 0x4F3D, 0x4F76, 0x4F74, 0x4F91, 0x4F89, 0x4F83, + 0x4F8F, 0x4F7E, 0x4F7B, 0x4FAA, 0x4F7C, 0x4FAC, 0x4F94, 0x4FE6, 0x4FE8, + 0x4FEA, 0x4FC5, 0x4FDA, 0x4FE3, 0x4FDC, 0x4FD1, 0x4FDF, 0x4FF8, 0x5029, + 0x504C, 0x4FF3, 0x502C, 0x500F, 0x502E, 0x502D, 0x4FFE, 0x501C, 0x500C, + 0x5025, 0x5028, 0x507E, 0x5043, 0x5055, 0x5048, 0x504E, 0x506C, 0x507B, + 0x50A5, 0x50A7, 0x50A9, 0x50BA, 0x50D6, 0x5106, 0x50ED, 0x50EC, 0x50E6, + 0x50EE, 0x5107, 0x510B, 0x4EDD, 0x6C3D, 0x4F58, 0x4F65, 0x4FCE, 0x9FA0, + 0x6C46, 0x7C74, 0x516E, 0x5DFD, 0x9EC9, 0x9998, 0x5181, 0x5914, 0x52F9, + 0x530D, 0x8A07, 0x5310, 0x51EB, 0x5919, 0x5155, 0x4EA0, 0x5156, 0x4EB3, + 0x886E, 0x88A4, 0x4EB5, 0x8114, 0x88D2, 0x7980, 0x5B34, 0x8803, 0x7FB8, + 0x51AB, 0x51B1, 0x51BD, 0x51BC}, + {0x51C7, 0x5196, 0x51A2, 0x51A5, 0x8BA0, 0x8BA6, 0x8BA7, 0x8BAA, 0x8BB4, + 0x8BB5, 0x8BB7, 0x8BC2, 0x8BC3, 0x8BCB, 0x8BCF, 0x8BCE, 0x8BD2, 0x8BD3, + 0x8BD4, 0x8BD6, 0x8BD8, 0x8BD9, 0x8BDC, 0x8BDF, 0x8BE0, 0x8BE4, 0x8BE8, + 0x8BE9, 0x8BEE, 0x8BF0, 0x8BF3, 0x8BF6, 0x8BF9, 0x8BFC, 0x8BFF, 0x8C00, + 0x8C02, 0x8C04, 0x8C07, 0x8C0C, 0x8C0F, 0x8C11, 0x8C12, 0x8C14, 0x8C15, + 0x8C16, 0x8C19, 0x8C1B, 0x8C18, 0x8C1D, 0x8C1F, 0x8C20, 0x8C21, 0x8C25, + 0x8C27, 0x8C2A, 0x8C2B, 0x8C2E, 0x8C2F, 0x8C32, 0x8C33, 0x8C35, 0x8C36, + 0x5369, 0x537A, 0x961D, 0x9622, 0x9621, 0x9631, 0x962A, 0x963D, 0x963C, + 0x9642, 0x9649, 0x9654, 0x965F, 0x9667, 0x966C, 0x9672, 0x9674, 0x9688, + 0x968D, 0x9697, 0x96B0, 0x9097, 0x909B, 0x909D, 0x9099, 0x90AC, 0x90A1, + 0x90B4, 0x90B3, 0x90B6, 0x90BA}, + {0x90B8, 0x90B0, 0x90CF, 0x90C5, 0x90BE, 0x90D0, 0x90C4, 0x90C7, 0x90D3, + 0x90E6, 0x90E2, 0x90DC, 0x90D7, 0x90DB, 0x90EB, 0x90EF, 0x90FE, 0x9104, + 0x9122, 0x911E, 0x9123, 0x9131, 0x912F, 0x9139, 0x9143, 0x9146, 0x520D, + 0x5942, 0x52A2, 0x52AC, 0x52AD, 0x52BE, 0x54FF, 0x52D0, 0x52D6, 0x52F0, + 0x53DF, 0x71EE, 0x77CD, 0x5EF4, 0x51F5, 0x51FC, 0x9B2F, 0x53B6, 0x5F01, + 0x755A, 0x5DEF, 0x574C, 0x57A9, 0x57A1, 0x587E, 0x58BC, 0x58C5, 0x58D1, + 0x5729, 0x572C, 0x572A, 0x5733, 0x5739, 0x572E, 0x572F, 0x575C, 0x573B, + 0x5742, 0x5769, 0x5785, 0x576B, 0x5786, 0x577C, 0x577B, 0x5768, 0x576D, + 0x5776, 0x5773, 0x57AD, 0x57A4, 0x578C, 0x57B2, 0x57CF, 0x57A7, 0x57B4, + 0x5793, 0x57A0, 0x57D5, 0x57D8, 0x57DA, 0x57D9, 0x57D2, 0x57B8, 0x57F4, + 0x57EF, 0x57F8, 0x57E4, 0x57DD}, + {0x580B, 0x580D, 0x57FD, 0x57ED, 0x5800, 0x581E, 0x5819, 0x5844, 0x5820, + 0x5865, 0x586C, 0x5881, 0x5889, 0x589A, 0x5880, 0x99A8, 0x9F19, 0x61FF, + 0x8279, 0x827D, 0x827F, 0x828F, 0x828A, 0x82A8, 0x8284, 0x828E, 0x8291, + 0x8297, 0x8299, 0x82AB, 0x82B8, 0x82BE, 0x82B0, 0x82C8, 0x82CA, 0x82E3, + 0x8298, 0x82B7, 0x82AE, 0x82CB, 0x82CC, 0x82C1, 0x82A9, 0x82B4, 0x82A1, + 0x82AA, 0x829F, 0x82C4, 0x82CE, 0x82A4, 0x82E1, 0x8309, 0x82F7, 0x82E4, + 0x830F, 0x8307, 0x82DC, 0x82F4, 0x82D2, 0x82D8, 0x830C, 0x82FB, 0x82D3, + 0x8311, 0x831A, 0x8306, 0x8314, 0x8315, 0x82E0, 0x82D5, 0x831C, 0x8351, + 0x835B, 0x835C, 0x8308, 0x8392, 0x833C, 0x8334, 0x8331, 0x839B, 0x835E, + 0x832F, 0x834F, 0x8347, 0x8343, 0x835F, 0x8340, 0x8317, 0x8360, 0x832D, + 0x833A, 0x8333, 0x8366, 0x8365}, + {0x8368, 0x831B, 0x8369, 0x836C, 0x836A, 0x836D, 0x836E, 0x83B0, 0x8378, + 0x83B3, 0x83B4, 0x83A0, 0x83AA, 0x8393, 0x839C, 0x8385, 0x837C, 0x83B6, + 0x83A9, 0x837D, 0x83B8, 0x837B, 0x8398, 0x839E, 0x83A8, 0x83BA, 0x83BC, + 0x83C1, 0x8401, 0x83E5, 0x83D8, 0x5807, 0x8418, 0x840B, 0x83DD, 0x83FD, + 0x83D6, 0x841C, 0x8438, 0x8411, 0x8406, 0x83D4, 0x83DF, 0x840F, 0x8403, + 0x83F8, 0x83F9, 0x83EA, 0x83C5, 0x83C0, 0x8426, 0x83F0, 0x83E1, 0x845C, + 0x8451, 0x845A, 0x8459, 0x8473, 0x8487, 0x8488, 0x847A, 0x8489, 0x8478, + 0x843C, 0x8446, 0x8469, 0x8476, 0x848C, 0x848E, 0x8431, 0x846D, 0x84C1, + 0x84CD, 0x84D0, 0x84E6, 0x84BD, 0x84D3, 0x84CA, 0x84BF, 0x84BA, 0x84E0, + 0x84A1, 0x84B9, 0x84B4, 0x8497, 0x84E5, 0x84E3, 0x850C, 0x750D, 0x8538, + 0x84F0, 0x8539, 0x851F, 0x853A}, + {0x8556, 0x853B, 0x84FF, 0x84FC, 0x8559, 0x8548, 0x8568, 0x8564, 0x855E, + 0x857A, 0x77A2, 0x8543, 0x8572, 0x857B, 0x85A4, 0x85A8, 0x8587, 0x858F, + 0x8579, 0x85AE, 0x859C, 0x8585, 0x85B9, 0x85B7, 0x85B0, 0x85D3, 0x85C1, + 0x85DC, 0x85FF, 0x8627, 0x8605, 0x8629, 0x8616, 0x863C, 0x5EFE, 0x5F08, + 0x593C, 0x5941, 0x8037, 0x5955, 0x595A, 0x5958, 0x530F, 0x5C22, 0x5C25, + 0x5C2C, 0x5C34, 0x624C, 0x626A, 0x629F, 0x62BB, 0x62CA, 0x62DA, 0x62D7, + 0x62EE, 0x6322, 0x62F6, 0x6339, 0x634B, 0x6343, 0x63AD, 0x63F6, 0x6371, + 0x637A, 0x638E, 0x63B4, 0x636D, 0x63AC, 0x638A, 0x6369, 0x63AE, 0x63BC, + 0x63F2, 0x63F8, 0x63E0, 0x63FF, 0x63C4, 0x63DE, 0x63CE, 0x6452, 0x63C6, + 0x63BE, 0x6445, 0x6441, 0x640B, 0x641B, 0x6420, 0x640C, 0x6426, 0x6421, + 0x645E, 0x6484, 0x646D, 0x6496}, + {0x647A, 0x64B7, 0x64B8, 0x6499, 0x64BA, 0x64C0, 0x64D0, 0x64D7, 0x64E4, + 0x64E2, 0x6509, 0x6525, 0x652E, 0x5F0B, 0x5FD2, 0x7519, 0x5F11, 0x535F, + 0x53F1, 0x53FD, 0x53E9, 0x53E8, 0x53FB, 0x5412, 0x5416, 0x5406, 0x544B, + 0x5452, 0x5453, 0x5454, 0x5456, 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, + 0x5432, 0x5482, 0x5494, 0x5477, 0x5471, 0x5464, 0x549A, 0x549B, 0x5484, + 0x5476, 0x5466, 0x549D, 0x54D0, 0x54AD, 0x54C2, 0x54B4, 0x54D2, 0x54A7, + 0x54A6, 0x54D3, 0x54D4, 0x5472, 0x54A3, 0x54D5, 0x54BB, 0x54BF, 0x54CC, + 0x54D9, 0x54DA, 0x54DC, 0x54A9, 0x54AA, 0x54A4, 0x54DD, 0x54CF, 0x54DE, + 0x551B, 0x54E7, 0x5520, 0x54FD, 0x5514, 0x54F3, 0x5522, 0x5523, 0x550F, + 0x5511, 0x5527, 0x552A, 0x5567, 0x558F, 0x55B5, 0x5549, 0x556D, 0x5541, + 0x5555, 0x553F, 0x5550, 0x553C}, + {0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555C, 0x558B, + 0x55D2, 0x5583, 0x55B1, 0x55B9, 0x5588, 0x5581, 0x559F, 0x557E, 0x55D6, + 0x5591, 0x557B, 0x55DF, 0x55BD, 0x55BE, 0x5594, 0x5599, 0x55EA, 0x55F7, + 0x55C9, 0x561F, 0x55D1, 0x55EB, 0x55EC, 0x55D4, 0x55E6, 0x55DD, 0x55C4, + 0x55EF, 0x55E5, 0x55F2, 0x55F3, 0x55CC, 0x55CD, 0x55E8, 0x55F5, 0x55E4, + 0x8F94, 0x561E, 0x5608, 0x560C, 0x5601, 0x5624, 0x5623, 0x55FE, 0x5600, + 0x5627, 0x562D, 0x5658, 0x5639, 0x5657, 0x562C, 0x564D, 0x5662, 0x5659, + 0x565C, 0x564C, 0x5654, 0x5686, 0x5664, 0x5671, 0x566B, 0x567B, 0x567C, + 0x5685, 0x5693, 0x56AF, 0x56D4, 0x56D7, 0x56DD, 0x56E1, 0x56F5, 0x56EB, + 0x56F9, 0x56FF, 0x5704, 0x570A, 0x5709, 0x571C, 0x5E0F, 0x5E19, 0x5E14, + 0x5E11, 0x5E31, 0x5E3B, 0x5E3C}, + {0x5E37, 0x5E44, 0x5E54, 0x5E5B, 0x5E5E, 0x5E61, 0x5C8C, 0x5C7A, 0x5C8D, + 0x5C90, 0x5C96, 0x5C88, 0x5C98, 0x5C99, 0x5C91, 0x5C9A, 0x5C9C, 0x5CB5, + 0x5CA2, 0x5CBD, 0x5CAC, 0x5CAB, 0x5CB1, 0x5CA3, 0x5CC1, 0x5CB7, 0x5CC4, + 0x5CD2, 0x5CE4, 0x5CCB, 0x5CE5, 0x5D02, 0x5D03, 0x5D27, 0x5D26, 0x5D2E, + 0x5D24, 0x5D1E, 0x5D06, 0x5D1B, 0x5D58, 0x5D3E, 0x5D34, 0x5D3D, 0x5D6C, + 0x5D5B, 0x5D6F, 0x5D5D, 0x5D6B, 0x5D4B, 0x5D4A, 0x5D69, 0x5D74, 0x5D82, + 0x5D99, 0x5D9D, 0x8C73, 0x5DB7, 0x5DC5, 0x5F73, 0x5F77, 0x5F82, 0x5F87, + 0x5F89, 0x5F8C, 0x5F95, 0x5F99, 0x5F9C, 0x5FA8, 0x5FAD, 0x5FB5, 0x5FBC, + 0x8862, 0x5F61, 0x72AD, 0x72B0, 0x72B4, 0x72B7, 0x72B8, 0x72C3, 0x72C1, + 0x72CE, 0x72CD, 0x72D2, 0x72E8, 0x72EF, 0x72E9, 0x72F2, 0x72F4, 0x72F7, + 0x7301, 0x72F3, 0x7303, 0x72FA}, + {0x72FB, 0x7317, 0x7313, 0x7321, 0x730A, 0x731E, 0x731D, 0x7315, 0x7322, + 0x7339, 0x7325, 0x732C, 0x7338, 0x7331, 0x7350, 0x734D, 0x7357, 0x7360, + 0x736C, 0x736F, 0x737E, 0x821B, 0x5925, 0x98E7, 0x5924, 0x5902, 0x9963, + 0x9967, 0x9968, 0x9969, 0x996A, 0x996B, 0x996C, 0x9974, 0x9977, 0x997D, + 0x9980, 0x9984, 0x9987, 0x998A, 0x998D, 0x9990, 0x9991, 0x9993, 0x9994, + 0x9995, 0x5E80, 0x5E91, 0x5E8B, 0x5E96, 0x5EA5, 0x5EA0, 0x5EB9, 0x5EB5, + 0x5EBE, 0x5EB3, 0x8D53, 0x5ED2, 0x5ED1, 0x5EDB, 0x5EE8, 0x5EEA, 0x81BA, + 0x5FC4, 0x5FC9, 0x5FD6, 0x5FCF, 0x6003, 0x5FEE, 0x6004, 0x5FE1, 0x5FE4, + 0x5FFE, 0x6005, 0x6006, 0x5FEA, 0x5FED, 0x5FF8, 0x6019, 0x6035, 0x6026, + 0x601B, 0x600F, 0x600D, 0x6029, 0x602B, 0x600A, 0x603F, 0x6021, 0x6078, + 0x6079, 0x607B, 0x607A, 0x6042}, + {0x606A, 0x607D, 0x6096, 0x609A, 0x60AD, 0x609D, 0x6083, 0x6092, 0x608C, + 0x609B, 0x60EC, 0x60BB, 0x60B1, 0x60DD, 0x60D8, 0x60C6, 0x60DA, 0x60B4, + 0x6120, 0x6126, 0x6115, 0x6123, 0x60F4, 0x6100, 0x610E, 0x612B, 0x614A, + 0x6175, 0x61AC, 0x6194, 0x61A7, 0x61B7, 0x61D4, 0x61F5, 0x5FDD, 0x96B3, + 0x95E9, 0x95EB, 0x95F1, 0x95F3, 0x95F5, 0x95F6, 0x95FC, 0x95FE, 0x9603, + 0x9604, 0x9606, 0x9608, 0x960A, 0x960B, 0x960C, 0x960D, 0x960F, 0x9612, + 0x9615, 0x9616, 0x9617, 0x9619, 0x961A, 0x4E2C, 0x723F, 0x6215, 0x6C35, + 0x6C54, 0x6C5C, 0x6C4A, 0x6CA3, 0x6C85, 0x6C90, 0x6C94, 0x6C8C, 0x6C68, + 0x6C69, 0x6C74, 0x6C76, 0x6C86, 0x6CA9, 0x6CD0, 0x6CD4, 0x6CAD, 0x6CF7, + 0x6CF8, 0x6CF1, 0x6CD7, 0x6CB2, 0x6CE0, 0x6CD6, 0x6CFA, 0x6CEB, 0x6CEE, + 0x6CB1, 0x6CD3, 0x6CEF, 0x6CFE}, + {0x6D39, 0x6D27, 0x6D0C, 0x6D43, 0x6D48, 0x6D07, 0x6D04, 0x6D19, 0x6D0E, + 0x6D2B, 0x6D4D, 0x6D2E, 0x6D35, 0x6D1A, 0x6D4F, 0x6D52, 0x6D54, 0x6D33, + 0x6D91, 0x6D6F, 0x6D9E, 0x6DA0, 0x6D5E, 0x6D93, 0x6D94, 0x6D5C, 0x6D60, + 0x6D7C, 0x6D63, 0x6E1A, 0x6DC7, 0x6DC5, 0x6DDE, 0x6E0E, 0x6DBF, 0x6DE0, + 0x6E11, 0x6DE6, 0x6DDD, 0x6DD9, 0x6E16, 0x6DAB, 0x6E0C, 0x6DAE, 0x6E2B, + 0x6E6E, 0x6E4E, 0x6E6B, 0x6EB2, 0x6E5F, 0x6E86, 0x6E53, 0x6E54, 0x6E32, + 0x6E25, 0x6E44, 0x6EDF, 0x6EB1, 0x6E98, 0x6EE0, 0x6F2D, 0x6EE2, 0x6EA5, + 0x6EA7, 0x6EBD, 0x6EBB, 0x6EB7, 0x6ED7, 0x6EB4, 0x6ECF, 0x6E8F, 0x6EC2, + 0x6E9F, 0x6F62, 0x6F46, 0x6F47, 0x6F24, 0x6F15, 0x6EF9, 0x6F2F, 0x6F36, + 0x6F4B, 0x6F74, 0x6F2A, 0x6F09, 0x6F29, 0x6F89, 0x6F8D, 0x6F8C, 0x6F78, + 0x6F72, 0x6F7C, 0x6F7A, 0x6FD1}, + {0x6FC9, 0x6FA7, 0x6FB9, 0x6FB6, 0x6FC2, 0x6FE1, 0x6FEE, 0x6FDE, 0x6FE0, + 0x6FEF, 0x701A, 0x7023, 0x701B, 0x7039, 0x7035, 0x704F, 0x705E, 0x5B80, + 0x5B84, 0x5B95, 0x5B93, 0x5BA5, 0x5BB8, 0x752F, 0x9A9E, 0x6434, 0x5BE4, + 0x5BEE, 0x8930, 0x5BF0, 0x8E47, 0x8B07, 0x8FB6, 0x8FD3, 0x8FD5, 0x8FE5, + 0x8FEE, 0x8FE4, 0x8FE9, 0x8FE6, 0x8FF3, 0x8FE8, 0x9005, 0x9004, 0x900B, + 0x9026, 0x9011, 0x900D, 0x9016, 0x9021, 0x9035, 0x9036, 0x902D, 0x902F, + 0x9044, 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905B, 0x66B9, + 0x9074, 0x907D, 0x9082, 0x9088, 0x9083, 0x908B, 0x5F50, 0x5F57, 0x5F56, + 0x5F58, 0x5C3B, 0x54AB, 0x5C50, 0x5C59, 0x5B71, 0x5C63, 0x5C66, 0x7FBC, + 0x5F2A, 0x5F29, 0x5F2D, 0x8274, 0x5F3C, 0x9B3B, 0x5C6E, 0x5981, 0x5983, + 0x598D, 0x59A9, 0x59AA, 0x59A3}, + {0x5997, 0x59CA, 0x59AB, 0x599E, 0x59A4, 0x59D2, 0x59B2, 0x59AF, 0x59D7, + 0x59BE, 0x5A05, 0x5A06, 0x59DD, 0x5A08, 0x59E3, 0x59D8, 0x59F9, 0x5A0C, + 0x5A09, 0x5A32, 0x5A34, 0x5A11, 0x5A23, 0x5A13, 0x5A40, 0x5A67, 0x5A4A, + 0x5A55, 0x5A3C, 0x5A62, 0x5A75, 0x80EC, 0x5AAA, 0x5A9B, 0x5A77, 0x5A7A, + 0x5ABE, 0x5AEB, 0x5AB2, 0x5AD2, 0x5AD4, 0x5AB8, 0x5AE0, 0x5AE3, 0x5AF1, + 0x5AD6, 0x5AE6, 0x5AD8, 0x5ADC, 0x5B09, 0x5B17, 0x5B16, 0x5B32, 0x5B37, + 0x5B40, 0x5C15, 0x5C1C, 0x5B5A, 0x5B65, 0x5B73, 0x5B51, 0x5B53, 0x5B62, + 0x9A75, 0x9A77, 0x9A78, 0x9A7A, 0x9A7F, 0x9A7D, 0x9A80, 0x9A81, 0x9A85, + 0x9A88, 0x9A8A, 0x9A90, 0x9A92, 0x9A93, 0x9A96, 0x9A98, 0x9A9B, 0x9A9C, + 0x9A9D, 0x9A9F, 0x9AA0, 0x9AA2, 0x9AA3, 0x9AA5, 0x9AA7, 0x7E9F, 0x7EA1, + 0x7EA3, 0x7EA5, 0x7EA8, 0x7EA9}, + {0x7EAD, 0x7EB0, 0x7EBE, 0x7EC0, 0x7EC1, 0x7EC2, 0x7EC9, 0x7ECB, 0x7ECC, + 0x7ED0, 0x7ED4, 0x7ED7, 0x7EDB, 0x7EE0, 0x7EE1, 0x7EE8, 0x7EEB, 0x7EEE, + 0x7EEF, 0x7EF1, 0x7EF2, 0x7F0D, 0x7EF6, 0x7EFA, 0x7EFB, 0x7EFE, 0x7F01, + 0x7F02, 0x7F03, 0x7F07, 0x7F08, 0x7F0B, 0x7F0C, 0x7F0F, 0x7F11, 0x7F12, + 0x7F17, 0x7F19, 0x7F1C, 0x7F1B, 0x7F1F, 0x7F21, 0x7F22, 0x7F23, 0x7F24, + 0x7F25, 0x7F26, 0x7F27, 0x7F2A, 0x7F2B, 0x7F2C, 0x7F2D, 0x7F2F, 0x7F30, + 0x7F31, 0x7F32, 0x7F33, 0x7F35, 0x5E7A, 0x757F, 0x5DDB, 0x753E, 0x9095, + 0x738E, 0x7391, 0x73AE, 0x73A2, 0x739F, 0x73CF, 0x73C2, 0x73D1, 0x73B7, + 0x73B3, 0x73C0, 0x73C9, 0x73C8, 0x73E5, 0x73D9, 0x987C, 0x740A, 0x73E9, + 0x73E7, 0x73DE, 0x73BA, 0x73F2, 0x740F, 0x742A, 0x745B, 0x7426, 0x7425, + 0x7428, 0x7430, 0x742E, 0x742C}, + {0x741B, 0x741A, 0x7441, 0x745C, 0x7457, 0x7455, 0x7459, 0x7477, 0x746D, + 0x747E, 0x749C, 0x748E, 0x7480, 0x7481, 0x7487, 0x748B, 0x749E, 0x74A8, + 0x74A9, 0x7490, 0x74A7, 0x74D2, 0x74BA, 0x97EA, 0x97EB, 0x97EC, 0x674C, + 0x6753, 0x675E, 0x6748, 0x6769, 0x67A5, 0x6787, 0x676A, 0x6773, 0x6798, + 0x67A7, 0x6775, 0x67A8, 0x679E, 0x67AD, 0x678B, 0x6777, 0x677C, 0x67F0, + 0x6809, 0x67D8, 0x680A, 0x67E9, 0x67B0, 0x680C, 0x67D9, 0x67B5, 0x67DA, + 0x67B3, 0x67DD, 0x6800, 0x67C3, 0x67B8, 0x67E2, 0x680E, 0x67C1, 0x67FD, + 0x6832, 0x6833, 0x6860, 0x6861, 0x684E, 0x6862, 0x6844, 0x6864, 0x6883, + 0x681D, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683E, 0x684A, 0x6849, + 0x6829, 0x68B5, 0x688F, 0x6874, 0x6877, 0x6893, 0x686B, 0x68C2, 0x696E, + 0x68FC, 0x691F, 0x6920, 0x68F9}, + {0x6924, 0x68F0, 0x690B, 0x6901, 0x6957, 0x68E3, 0x6910, 0x6971, 0x6939, + 0x6960, 0x6942, 0x695D, 0x6984, 0x696B, 0x6980, 0x6998, 0x6978, 0x6934, + 0x69CC, 0x6987, 0x6988, 0x69CE, 0x6989, 0x6966, 0x6963, 0x6979, 0x699B, + 0x69A7, 0x69BB, 0x69AB, 0x69AD, 0x69D4, 0x69B1, 0x69C1, 0x69CA, 0x69DF, + 0x6995, 0x69E0, 0x698D, 0x69FF, 0x6A2F, 0x69ED, 0x6A17, 0x6A18, 0x6A65, + 0x69F2, 0x6A44, 0x6A3E, 0x6AA0, 0x6A50, 0x6A5B, 0x6A35, 0x6A8E, 0x6A79, + 0x6A3D, 0x6A28, 0x6A58, 0x6A7C, 0x6A91, 0x6A90, 0x6AA9, 0x6A97, 0x6AAB, + 0x7337, 0x7352, 0x6B81, 0x6B82, 0x6B87, 0x6B84, 0x6B92, 0x6B93, 0x6B8D, + 0x6B9A, 0x6B9B, 0x6BA1, 0x6BAA, 0x8F6B, 0x8F6D, 0x8F71, 0x8F72, 0x8F73, + 0x8F75, 0x8F76, 0x8F78, 0x8F77, 0x8F79, 0x8F7A, 0x8F7C, 0x8F7E, 0x8F81, + 0x8F82, 0x8F84, 0x8F87, 0x8F8B}, + {0x8F8D, 0x8F8E, 0x8F8F, 0x8F98, 0x8F9A, 0x8ECE, 0x620B, 0x6217, 0x621B, + 0x621F, 0x6222, 0x6221, 0x6225, 0x6224, 0x622C, 0x81E7, 0x74EF, 0x74F4, + 0x74FF, 0x750F, 0x7511, 0x7513, 0x6534, 0x65EE, 0x65EF, 0x65F0, 0x660A, + 0x6619, 0x6772, 0x6603, 0x6615, 0x6600, 0x7085, 0x66F7, 0x661D, 0x6634, + 0x6631, 0x6636, 0x6635, 0x8006, 0x665F, 0x6654, 0x6641, 0x664F, 0x6656, + 0x6661, 0x6657, 0x6677, 0x6684, 0x668C, 0x66A7, 0x669D, 0x66BE, 0x66DB, + 0x66DC, 0x66E6, 0x66E9, 0x8D32, 0x8D33, 0x8D36, 0x8D3B, 0x8D3D, 0x8D40, + 0x8D45, 0x8D46, 0x8D48, 0x8D49, 0x8D47, 0x8D4D, 0x8D55, 0x8D59, 0x89C7, + 0x89CA, 0x89CB, 0x89CC, 0x89CE, 0x89CF, 0x89D0, 0x89D1, 0x726E, 0x729F, + 0x725D, 0x7266, 0x726F, 0x727E, 0x727F, 0x7284, 0x728B, 0x728D, 0x728F, + 0x7292, 0x6308, 0x6332, 0x63B0}, + {0x643F, 0x64D8, 0x8004, 0x6BEA, 0x6BF3, 0x6BFD, 0x6BF5, 0x6BF9, 0x6C05, + 0x6C07, 0x6C06, 0x6C0D, 0x6C15, 0x6C18, 0x6C19, 0x6C1A, 0x6C21, 0x6C29, + 0x6C24, 0x6C2A, 0x6C32, 0x6535, 0x6555, 0x656B, 0x724D, 0x7252, 0x7256, + 0x7230, 0x8662, 0x5216, 0x809F, 0x809C, 0x8093, 0x80BC, 0x670A, 0x80BD, + 0x80B1, 0x80AB, 0x80AD, 0x80B4, 0x80B7, 0x80E7, 0x80E8, 0x80E9, 0x80EA, + 0x80DB, 0x80C2, 0x80C4, 0x80D9, 0x80CD, 0x80D7, 0x6710, 0x80DD, 0x80EB, + 0x80F1, 0x80F4, 0x80ED, 0x810D, 0x810E, 0x80F2, 0x80FC, 0x6715, 0x8112, + 0x8C5A, 0x8136, 0x811E, 0x812C, 0x8118, 0x8132, 0x8148, 0x814C, 0x8153, + 0x8174, 0x8159, 0x815A, 0x8171, 0x8160, 0x8169, 0x817C, 0x817D, 0x816D, + 0x8167, 0x584D, 0x5AB5, 0x8188, 0x8182, 0x8191, 0x6ED5, 0x81A3, 0x81AA, + 0x81CC, 0x6726, 0x81CA, 0x81BB}, + {0x81C1, 0x81A6, 0x6B24, 0x6B37, 0x6B39, 0x6B43, 0x6B46, 0x6B59, 0x98D1, + 0x98D2, 0x98D3, 0x98D5, 0x98D9, 0x98DA, 0x6BB3, 0x5F40, 0x6BC2, 0x89F3, + 0x6590, 0x9F51, 0x6593, 0x65BC, 0x65C6, 0x65C4, 0x65C3, 0x65CC, 0x65CE, + 0x65D2, 0x65D6, 0x7080, 0x709C, 0x7096, 0x709D, 0x70BB, 0x70C0, 0x70B7, + 0x70AB, 0x70B1, 0x70E8, 0x70CA, 0x7110, 0x7113, 0x7116, 0x712F, 0x7131, + 0x7173, 0x715C, 0x7168, 0x7145, 0x7172, 0x714A, 0x7178, 0x717A, 0x7198, + 0x71B3, 0x71B5, 0x71A8, 0x71A0, 0x71E0, 0x71D4, 0x71E7, 0x71F9, 0x721D, + 0x7228, 0x706C, 0x7118, 0x7166, 0x71B9, 0x623E, 0x623D, 0x6243, 0x6248, + 0x6249, 0x793B, 0x7940, 0x7946, 0x7949, 0x795B, 0x795C, 0x7953, 0x795A, + 0x7962, 0x7957, 0x7960, 0x796F, 0x7967, 0x797A, 0x7985, 0x798A, 0x799A, + 0x79A7, 0x79B3, 0x5FD1, 0x5FD0}, + {0x603C, 0x605D, 0x605A, 0x6067, 0x6041, 0x6059, 0x6063, 0x60AB, 0x6106, + 0x610D, 0x615D, 0x61A9, 0x619D, 0x61CB, 0x61D1, 0x6206, 0x8080, 0x807F, + 0x6C93, 0x6CF6, 0x6DFC, 0x77F6, 0x77F8, 0x7800, 0x7809, 0x7817, 0x7818, + 0x7811, 0x65AB, 0x782D, 0x781C, 0x781D, 0x7839, 0x783A, 0x783B, 0x781F, + 0x783C, 0x7825, 0x782C, 0x7823, 0x7829, 0x784E, 0x786D, 0x7856, 0x7857, + 0x7826, 0x7850, 0x7847, 0x784C, 0x786A, 0x789B, 0x7893, 0x789A, 0x7887, + 0x789C, 0x78A1, 0x78A3, 0x78B2, 0x78B9, 0x78A5, 0x78D4, 0x78D9, 0x78C9, + 0x78EC, 0x78F2, 0x7905, 0x78F4, 0x7913, 0x7924, 0x791E, 0x7934, 0x9F9B, + 0x9EF9, 0x9EFB, 0x9EFC, 0x76F1, 0x7704, 0x770D, 0x76F9, 0x7707, 0x7708, + 0x771A, 0x7722, 0x7719, 0x772D, 0x7726, 0x7735, 0x7738, 0x7750, 0x7751, + 0x7747, 0x7743, 0x775A, 0x7768}, + {0x7762, 0x7765, 0x777F, 0x778D, 0x777D, 0x7780, 0x778C, 0x7791, 0x779F, + 0x77A0, 0x77B0, 0x77B5, 0x77BD, 0x753A, 0x7540, 0x754E, 0x754B, 0x7548, + 0x755B, 0x7572, 0x7579, 0x7583, 0x7F58, 0x7F61, 0x7F5F, 0x8A48, 0x7F68, + 0x7F74, 0x7F71, 0x7F79, 0x7F81, 0x7F7E, 0x76CD, 0x76E5, 0x8832, 0x9485, + 0x9486, 0x9487, 0x948B, 0x948A, 0x948C, 0x948D, 0x948F, 0x9490, 0x9494, + 0x9497, 0x9495, 0x949A, 0x949B, 0x949C, 0x94A3, 0x94A4, 0x94AB, 0x94AA, + 0x94AD, 0x94AC, 0x94AF, 0x94B0, 0x94B2, 0x94B4, 0x94B6, 0x94B7, 0x94B8, + 0x94B9, 0x94BA, 0x94BC, 0x94BD, 0x94BF, 0x94C4, 0x94C8, 0x94C9, 0x94CA, + 0x94CB, 0x94CC, 0x94CD, 0x94CE, 0x94D0, 0x94D1, 0x94D2, 0x94D5, 0x94D6, + 0x94D7, 0x94D9, 0x94D8, 0x94DB, 0x94DE, 0x94DF, 0x94E0, 0x94E2, 0x94E4, + 0x94E5, 0x94E7, 0x94E8, 0x94EA}, + {0x94E9, 0x94EB, 0x94EE, 0x94EF, 0x94F3, 0x94F4, 0x94F5, 0x94F7, 0x94F9, + 0x94FC, 0x94FD, 0x94FF, 0x9503, 0x9502, 0x9506, 0x9507, 0x9509, 0x950A, + 0x950D, 0x950E, 0x950F, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9518, + 0x951B, 0x951D, 0x951E, 0x951F, 0x9522, 0x952A, 0x952B, 0x9529, 0x952C, + 0x9531, 0x9532, 0x9534, 0x9536, 0x9537, 0x9538, 0x953C, 0x953E, 0x953F, + 0x9542, 0x9535, 0x9544, 0x9545, 0x9546, 0x9549, 0x954C, 0x954E, 0x954F, + 0x9552, 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955B, 0x955E, + 0x955F, 0x955D, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, + 0x9569, 0x956A, 0x956B, 0x956C, 0x956F, 0x9571, 0x9572, 0x9573, 0x953A, + 0x77E7, 0x77EC, 0x96C9, 0x79D5, 0x79ED, 0x79E3, 0x79EB, 0x7A06, 0x5D47, + 0x7A03, 0x7A02, 0x7A1E, 0x7A14}, + {0x7A39, 0x7A37, 0x7A51, 0x9ECF, 0x99A5, 0x7A70, 0x7688, 0x768E, 0x7693, + 0x7699, 0x76A4, 0x74DE, 0x74E0, 0x752C, 0x9E20, 0x9E22, 0x9E28, 0x9E29, + 0x9E2A, 0x9E2B, 0x9E2C, 0x9E32, 0x9E31, 0x9E36, 0x9E38, 0x9E37, 0x9E39, + 0x9E3A, 0x9E3E, 0x9E41, 0x9E42, 0x9E44, 0x9E46, 0x9E47, 0x9E48, 0x9E49, + 0x9E4B, 0x9E4C, 0x9E4E, 0x9E51, 0x9E55, 0x9E57, 0x9E5A, 0x9E5B, 0x9E5C, + 0x9E5E, 0x9E63, 0x9E66, 0x9E67, 0x9E68, 0x9E69, 0x9E6A, 0x9E6B, 0x9E6C, + 0x9E71, 0x9E6D, 0x9E73, 0x7592, 0x7594, 0x7596, 0x75A0, 0x759D, 0x75AC, + 0x75A3, 0x75B3, 0x75B4, 0x75B8, 0x75C4, 0x75B1, 0x75B0, 0x75C3, 0x75C2, + 0x75D6, 0x75CD, 0x75E3, 0x75E8, 0x75E6, 0x75E4, 0x75EB, 0x75E7, 0x7603, + 0x75F1, 0x75FC, 0x75FF, 0x7610, 0x7600, 0x7605, 0x760C, 0x7617, 0x760A, + 0x7625, 0x7618, 0x7615, 0x7619}, + {0x761B, 0x763C, 0x7622, 0x7620, 0x7640, 0x762D, 0x7630, 0x763F, 0x7635, + 0x7643, 0x763E, 0x7633, 0x764D, 0x765E, 0x7654, 0x765C, 0x7656, 0x766B, + 0x766F, 0x7FCA, 0x7AE6, 0x7A78, 0x7A79, 0x7A80, 0x7A86, 0x7A88, 0x7A95, + 0x7AA6, 0x7AA0, 0x7AAC, 0x7AA8, 0x7AAD, 0x7AB3, 0x8864, 0x8869, 0x8872, + 0x887D, 0x887F, 0x8882, 0x88A2, 0x88C6, 0x88B7, 0x88BC, 0x88C9, 0x88E2, + 0x88CE, 0x88E3, 0x88E5, 0x88F1, 0x891A, 0x88FC, 0x88E8, 0x88FE, 0x88F0, + 0x8921, 0x8919, 0x8913, 0x891B, 0x890A, 0x8934, 0x892B, 0x8936, 0x8941, + 0x8966, 0x897B, 0x758B, 0x80E5, 0x76B2, 0x76B4, 0x77DC, 0x8012, 0x8014, + 0x8016, 0x801C, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029, 0x8028, + 0x8031, 0x800B, 0x8035, 0x8043, 0x8046, 0x804D, 0x8052, 0x8069, 0x8071, + 0x8983, 0x9878, 0x9880, 0x9883}, + {0x9889, 0x988C, 0x988D, 0x988F, 0x9894, 0x989A, 0x989B, 0x989E, 0x989F, + 0x98A1, 0x98A2, 0x98A5, 0x98A6, 0x864D, 0x8654, 0x866C, 0x866E, 0x867F, + 0x867A, 0x867C, 0x867B, 0x86A8, 0x868D, 0x868B, 0x86AC, 0x869D, 0x86A7, + 0x86A3, 0x86AA, 0x8693, 0x86A9, 0x86B6, 0x86C4, 0x86B5, 0x86CE, 0x86B0, + 0x86BA, 0x86B1, 0x86AF, 0x86C9, 0x86CF, 0x86B4, 0x86E9, 0x86F1, 0x86F2, + 0x86ED, 0x86F3, 0x86D0, 0x8713, 0x86DE, 0x86F4, 0x86DF, 0x86D8, 0x86D1, + 0x8703, 0x8707, 0x86F8, 0x8708, 0x870A, 0x870D, 0x8709, 0x8723, 0x873B, + 0x871E, 0x8725, 0x872E, 0x871A, 0x873E, 0x8748, 0x8734, 0x8731, 0x8729, + 0x8737, 0x873F, 0x8782, 0x8722, 0x877D, 0x877E, 0x877B, 0x8760, 0x8770, + 0x874C, 0x876E, 0x878B, 0x8753, 0x8763, 0x877C, 0x8764, 0x8759, 0x8765, + 0x8793, 0x87AF, 0x87A8, 0x87D2}, + {0x87C6, 0x8788, 0x8785, 0x87AD, 0x8797, 0x8783, 0x87AB, 0x87E5, 0x87AC, + 0x87B5, 0x87B3, 0x87CB, 0x87D3, 0x87BD, 0x87D1, 0x87C0, 0x87CA, 0x87DB, + 0x87EA, 0x87E0, 0x87EE, 0x8816, 0x8813, 0x87FE, 0x880A, 0x881B, 0x8821, + 0x8839, 0x883C, 0x7F36, 0x7F42, 0x7F44, 0x7F45, 0x8210, 0x7AFA, 0x7AFD, + 0x7B08, 0x7B03, 0x7B04, 0x7B15, 0x7B0A, 0x7B2B, 0x7B0F, 0x7B47, 0x7B38, + 0x7B2A, 0x7B19, 0x7B2E, 0x7B31, 0x7B20, 0x7B25, 0x7B24, 0x7B33, 0x7B3E, + 0x7B1E, 0x7B58, 0x7B5A, 0x7B45, 0x7B75, 0x7B4C, 0x7B5D, 0x7B60, 0x7B6E, + 0x7B7B, 0x7B62, 0x7B72, 0x7B71, 0x7B90, 0x7BA6, 0x7BA7, 0x7BB8, 0x7BAC, + 0x7B9D, 0x7BA8, 0x7B85, 0x7BAA, 0x7B9C, 0x7BA2, 0x7BAB, 0x7BB4, 0x7BD1, + 0x7BC1, 0x7BCC, 0x7BDD, 0x7BDA, 0x7BE5, 0x7BE6, 0x7BEA, 0x7C0C, 0x7BFE, + 0x7BFC, 0x7C0F, 0x7C16, 0x7C0B}, + {0x7C1F, 0x7C2A, 0x7C26, 0x7C38, 0x7C41, 0x7C40, 0x81FE, 0x8201, 0x8202, + 0x8204, 0x81EC, 0x8844, 0x8221, 0x8222, 0x8223, 0x822D, 0x822F, 0x8228, + 0x822B, 0x8238, 0x823B, 0x8233, 0x8234, 0x823E, 0x8244, 0x8249, 0x824B, + 0x824F, 0x825A, 0x825F, 0x8268, 0x887E, 0x8885, 0x8888, 0x88D8, 0x88DF, + 0x895E, 0x7F9D, 0x7F9F, 0x7FA7, 0x7FAF, 0x7FB0, 0x7FB2, 0x7C7C, 0x6549, + 0x7C91, 0x7C9D, 0x7C9C, 0x7C9E, 0x7CA2, 0x7CB2, 0x7CBC, 0x7CBD, 0x7CC1, + 0x7CC7, 0x7CCC, 0x7CCD, 0x7CC8, 0x7CC5, 0x7CD7, 0x7CE8, 0x826E, 0x66A8, + 0x7FBF, 0x7FCE, 0x7FD5, 0x7FE5, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FEE, 0x7FF3, + 0x7CF8, 0x7D77, 0x7DA6, 0x7DAE, 0x7E47, 0x7E9B, 0x9EB8, 0x9EB4, 0x8D73, + 0x8D84, 0x8D94, 0x8D91, 0x8DB1, 0x8D67, 0x8D6D, 0x8C47, 0x8C49, 0x914A, + 0x9150, 0x914E, 0x914F, 0x9164}, + {0x9162, 0x9161, 0x9170, 0x9169, 0x916F, 0x917D, 0x917E, 0x9172, 0x9174, + 0x9179, 0x918C, 0x9185, 0x9190, 0x918D, 0x9191, 0x91A2, 0x91A3, 0x91AA, + 0x91AD, 0x91AE, 0x91AF, 0x91B5, 0x91B4, 0x91BA, 0x8C55, 0x9E7E, 0x8DB8, + 0x8DEB, 0x8E05, 0x8E59, 0x8E69, 0x8DB5, 0x8DBF, 0x8DBC, 0x8DBA, 0x8DC4, + 0x8DD6, 0x8DD7, 0x8DDA, 0x8DDE, 0x8DCE, 0x8DCF, 0x8DDB, 0x8DC6, 0x8DEC, + 0x8DF7, 0x8DF8, 0x8DE3, 0x8DF9, 0x8DFB, 0x8DE4, 0x8E09, 0x8DFD, 0x8E14, + 0x8E1D, 0x8E1F, 0x8E2C, 0x8E2E, 0x8E23, 0x8E2F, 0x8E3A, 0x8E40, 0x8E39, + 0x8E35, 0x8E3D, 0x8E31, 0x8E49, 0x8E41, 0x8E42, 0x8E51, 0x8E52, 0x8E4A, + 0x8E70, 0x8E76, 0x8E7C, 0x8E6F, 0x8E74, 0x8E85, 0x8E8F, 0x8E94, 0x8E90, + 0x8E9C, 0x8E9E, 0x8C78, 0x8C82, 0x8C8A, 0x8C85, 0x8C98, 0x8C94, 0x659B, + 0x89D6, 0x89DE, 0x89DA, 0x89DC}, + {0x89E5, 0x89EB, 0x89EF, 0x8A3E, 0x8B26, 0x9753, 0x96E9, 0x96F3, 0x96EF, + 0x9706, 0x9701, 0x9708, 0x970F, 0x970E, 0x972A, 0x972D, 0x9730, 0x973E, + 0x9F80, 0x9F83, 0x9F85, 0x9F86, 0x9F87, 0x9F88, 0x9F89, 0x9F8A, 0x9F8C, + 0x9EFE, 0x9F0B, 0x9F0D, 0x96B9, 0x96BC, 0x96BD, 0x96CE, 0x96D2, 0x77BF, + 0x96E0, 0x928E, 0x92AE, 0x92C8, 0x933E, 0x936A, 0x93CA, 0x938F, 0x943E, + 0x946B, 0x9C7F, 0x9C82, 0x9C85, 0x9C86, 0x9C87, 0x9C88, 0x7A23, 0x9C8B, + 0x9C8E, 0x9C90, 0x9C91, 0x9C92, 0x9C94, 0x9C95, 0x9C9A, 0x9C9B, 0x9C9E, + 0x9C9F, 0x9CA0, 0x9CA1, 0x9CA2, 0x9CA3, 0x9CA5, 0x9CA6, 0x9CA7, 0x9CA8, + 0x9CA9, 0x9CAB, 0x9CAD, 0x9CAE, 0x9CB0, 0x9CB1, 0x9CB2, 0x9CB3, 0x9CB4, + 0x9CB5, 0x9CB6, 0x9CB7, 0x9CBA, 0x9CBB, 0x9CBC, 0x9CBD, 0x9CC4, 0x9CC5, + 0x9CC6, 0x9CC7, 0x9CCA, 0x9CCB}, + {0x9CCC, 0x9CCD, 0x9CCE, 0x9CCF, 0x9CD0, 0x9CD3, 0x9CD4, 0x9CD5, 0x9CD7, + 0x9CD8, 0x9CD9, 0x9CDC, 0x9CDD, 0x9CDF, 0x9CE2, 0x977C, 0x9785, 0x9791, + 0x9792, 0x9794, 0x97AF, 0x97AB, 0x97A3, 0x97B2, 0x97B4, 0x9AB1, 0x9AB0, + 0x9AB7, 0x9E58, 0x9AB6, 0x9ABA, 0x9ABC, 0x9AC1, 0x9AC0, 0x9AC5, 0x9AC2, + 0x9ACB, 0x9ACC, 0x9AD1, 0x9B45, 0x9B43, 0x9B47, 0x9B49, 0x9B48, 0x9B4D, + 0x9B51, 0x98E8, 0x990D, 0x992E, 0x9955, 0x9954, 0x9ADF, 0x9AE1, 0x9AE6, + 0x9AEF, 0x9AEB, 0x9AFB, 0x9AED, 0x9AF9, 0x9B08, 0x9B0F, 0x9B13, 0x9B1F, + 0x9B23, 0x9EBD, 0x9EBE, 0x7E3B, 0x9E82, 0x9E87, 0x9E88, 0x9E8B, 0x9E92, + 0x93D6, 0x9E9D, 0x9E9F, 0x9EDB, 0x9EDC, 0x9EDD, 0x9EE0, 0x9EDF, 0x9EE2, + 0x9EE9, 0x9EE7, 0x9EE5, 0x9EEA, 0x9EEF, 0x9F22, 0x9F2C, 0x9F2F, 0x9F39, + 0x9F37, 0x9F3D, 0x9F3E, 0x9F44}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, +}; + +/* + * Mapping from Unicode back to GB2312. + * + * This inverse is done the same way the SBCS ones are done: I + * provide a list of GB2312 positions, sorted into ascending + * order of their Unicode values. Then we can binary-search through + * this list, referring to the above table for each comparison, to + * find the coordinates for a given code point. + * + * Generated by running the following sh+Perl over GB2312.TXT: + +cat GB2312.TXT | \ +perl -ne '$a{$3}=[hex$1,hex$2] if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {$o=" ";for $k (sort keys %a) { ($r,$c) = @{$a{$k}}; ' \ + -e '$o .= $C; $C = ", "; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= sprintf "{%d,%d}", $r-33,$c-33; } print "$o\n"; }' + + */ + +static const struct { unsigned char r, c; } gb2312_backward[] = { + {0,71}, {0,75}, {0,6}, {0,66}, {0,31}, {0,32}, {7,3}, {7,1}, {7,7}, + {7,5}, {7,25}, {7,11}, {7,9}, {7,15}, {7,13}, {0,33}, {7,19}, {7,17}, + {7,24}, {7,0}, {7,4}, {7,6}, {7,8}, {7,12}, {7,16}, {7,2}, {7,10}, + {7,14}, {7,18}, {7,20}, {7,21}, {7,22}, {7,23}, {0,5}, {0,4}, {5,0}, + {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7}, {5,8}, {5,9}, {5,10}, + {5,11}, {5,12}, {5,13}, {5,14}, {5,15}, {5,16}, {5,17}, {5,18}, {5,19}, + {5,20}, {5,21}, {5,22}, {5,23}, {5,32}, {5,33}, {5,34}, {5,35}, {5,36}, + {5,37}, {5,38}, {5,39}, {5,40}, {5,41}, {5,42}, {5,43}, {5,44}, {5,45}, + {5,46}, {5,47}, {5,48}, {5,49}, {5,50}, {5,51}, {5,52}, {5,53}, {5,54}, + {5,55}, {6,6}, {6,0}, {6,1}, {6,2}, {6,3}, {6,4}, {6,5}, {6,7}, {6,8}, + {6,9}, {6,10}, {6,11}, {6,12}, {6,13}, {6,14}, {6,15}, {6,16}, {6,17}, + {6,18}, {6,19}, {6,20}, {6,21}, {6,22}, {6,23}, {6,24}, {6,25}, {6,26}, + {6,27}, {6,28}, {6,29}, {6,30}, {6,31}, {6,32}, {6,48}, {6,49}, {6,50}, + {6,51}, {6,52}, {6,53}, {6,55}, {6,56}, {6,57}, {6,58}, {6,59}, {6,60}, + {6,61}, {6,62}, {6,63}, {6,64}, {6,65}, {6,66}, {6,67}, {6,68}, {6,69}, + {6,70}, {6,71}, {6,72}, {6,73}, {6,74}, {6,75}, {6,76}, {6,77}, {6,78}, + {6,79}, {6,80}, {6,54}, {0,9}, {0,11}, {0,13}, {0,14}, {0,15}, {0,16}, + {0,12}, {0,74}, {0,67}, {0,68}, {0,88}, {0,69}, {0,76}, {1,80}, {1,81}, + {1,82}, {1,83}, {1,84}, {1,85}, {1,86}, {1,87}, {1,88}, {1,89}, {1,90}, + {1,91}, {0,90}, {0,91}, {0,89}, {0,92}, {0,41}, {0,38}, {0,37}, {0,43}, + {0,55}, {0,61}, {0,46}, {0,45}, {0,35}, {0,36}, {0,40}, {0,39}, {0,49}, + {0,50}, {0,63}, {0,62}, {0,34}, {0,42}, {0,54}, {0,53}, {0,52}, {0,56}, + {0,51}, {0,59}, {0,60}, {0,57}, {0,58}, {0,48}, {0,44}, {0,47}, {1,56}, + {1,57}, {1,58}, {1,59}, {1,60}, {1,61}, {1,62}, {1,63}, {1,64}, {1,65}, + {1,36}, {1,37}, {1,38}, {1,39}, {1,40}, {1,41}, {1,42}, {1,43}, {1,44}, + {1,45}, {1,46}, {1,47}, {1,48}, {1,49}, {1,50}, {1,51}, {1,52}, {1,53}, + {1,54}, {1,55}, {1,16}, {1,17}, {1,18}, {1,19}, {1,20}, {1,21}, {1,22}, + {1,23}, {1,24}, {1,25}, {1,26}, {1,27}, {1,28}, {1,29}, {1,30}, {1,31}, + {1,32}, {1,33}, {1,34}, {1,35}, {8,3}, {8,4}, {8,5}, {8,6}, {8,7}, + {8,8}, {8,9}, {8,10}, {8,11}, {8,12}, {8,13}, {8,14}, {8,15}, {8,16}, + {8,17}, {8,18}, {8,19}, {8,20}, {8,21}, {8,22}, {8,23}, {8,24}, {8,25}, + {8,26}, {8,27}, {8,28}, {8,29}, {8,30}, {8,31}, {8,32}, {8,33}, {8,34}, + {8,35}, {8,36}, {8,37}, {8,38}, {8,39}, {8,40}, {8,41}, {8,42}, {8,43}, + {8,44}, {8,45}, {8,46}, {8,47}, {8,48}, {8,49}, {8,50}, {8,51}, {8,52}, + {8,53}, {8,54}, {8,55}, {8,56}, {8,57}, {8,58}, {8,59}, {8,60}, {8,61}, + {8,62}, {8,63}, {8,64}, {8,65}, {8,66}, {8,67}, {8,68}, {8,69}, {8,70}, + {8,71}, {8,72}, {8,73}, {8,74}, {8,75}, {8,76}, {8,77}, {8,78}, {0,85}, + {0,84}, {0,87}, {0,86}, {0,83}, {0,82}, {0,79}, {0,81}, {0,80}, {0,78}, + {0,77}, {0,65}, {0,64}, {0,0}, {0,1}, {0,2}, {0,7}, {0,8}, {0,19}, + {0,20}, {0,21}, {0,22}, {0,23}, {0,24}, {0,25}, {0,26}, {0,29}, {0,30}, + {0,93}, {0,17}, {0,18}, {0,27}, {0,28}, {3,0}, {3,1}, {3,2}, {3,3}, + {3,4}, {3,5}, {3,6}, {3,7}, {3,8}, {3,9}, {3,10}, {3,11}, {3,12}, {3,13}, + {3,14}, {3,15}, {3,16}, {3,17}, {3,18}, {3,19}, {3,20}, {3,21}, {3,22}, + {3,23}, {3,24}, {3,25}, {3,26}, {3,27}, {3,28}, {3,29}, {3,30}, {3,31}, + {3,32}, {3,33}, {3,34}, {3,35}, {3,36}, {3,37}, {3,38}, {3,39}, {3,40}, + {3,41}, {3,42}, {3,43}, {3,44}, {3,45}, {3,46}, {3,47}, {3,48}, {3,49}, + {3,50}, {3,51}, {3,52}, {3,53}, {3,54}, {3,55}, {3,56}, {3,57}, {3,58}, + {3,59}, {3,60}, {3,61}, {3,62}, {3,63}, {3,64}, {3,65}, {3,66}, {3,67}, + {3,68}, {3,69}, {3,70}, {3,71}, {3,72}, {3,73}, {3,74}, {3,75}, {3,76}, + {3,77}, {3,78}, {3,79}, {3,80}, {3,81}, {3,82}, {4,0}, {4,1}, {4,2}, + {4,3}, {4,4}, {4,5}, {4,6}, {4,7}, {4,8}, {4,9}, {4,10}, {4,11}, {4,12}, + {4,13}, {4,14}, {4,15}, {4,16}, {4,17}, {4,18}, {4,19}, {4,20}, {4,21}, + {4,22}, {4,23}, {4,24}, {4,25}, {4,26}, {4,27}, {4,28}, {4,29}, {4,30}, + {4,31}, {4,32}, {4,33}, {4,34}, {4,35}, {4,36}, {4,37}, {4,38}, {4,39}, + {4,40}, {4,41}, {4,42}, {4,43}, {4,44}, {4,45}, {4,46}, {4,47}, {4,48}, + {4,49}, {4,50}, {4,51}, {4,52}, {4,53}, {4,54}, {4,55}, {4,56}, {4,57}, + {4,58}, {4,59}, {4,60}, {4,61}, {4,62}, {4,63}, {4,64}, {4,65}, {4,66}, + {4,67}, {4,68}, {4,69}, {4,70}, {4,71}, {4,72}, {4,73}, {4,74}, {4,75}, + {4,76}, {4,77}, {4,78}, {4,79}, {4,80}, {4,81}, {4,82}, {4,83}, {4,84}, + {4,85}, {0,3}, {7,36}, {7,37}, {7,38}, {7,39}, {7,40}, {7,41}, {7,42}, + {7,43}, {7,44}, {7,45}, {7,46}, {7,47}, {7,48}, {7,49}, {7,50}, {7,51}, + {7,52}, {7,53}, {7,54}, {7,55}, {7,56}, {7,57}, {7,58}, {7,59}, {7,60}, + {7,61}, {7,62}, {7,63}, {7,64}, {7,65}, {7,66}, {7,67}, {7,68}, {7,69}, + {7,70}, {7,71}, {7,72}, {1,68}, {1,69}, {1,70}, {1,71}, {1,72}, {1,73}, + {1,74}, {1,75}, {1,76}, {1,77}, {49,26}, {21,0}, {37,62}, {44,81}, + {52,40}, {39,92}, {40,46}, {46,33}, {55,1}, {17,26}, {50,74}, {55,3}, + {18,82}, {54,7}, {38,49}, {55,6}, {41,31}, {38,79}, {16,90}, {49,20}, + {19,51}, {21,10}, {42,30}, {55,8}, {21,9}, {32,28}, {48,46}, {40,4}, + {55,12}, {23,85}, {48,29}, {66,59}, {53,47}, {22,64}, {19,13}, {32,56}, + {55,27}, {44,71}, {20,3}, {45,9}, {53,86}, {31,85}, {29,56}, {55,14}, + {35,42}, {29,34}, {55,16}, {34,19}, {49,68}, {53,13}, {45,57}, {52,6}, + {25,84}, {22,5}, {31,53}, {37,24}, {36,49}, {38,38}, {24,51}, {18,42}, + {49,49}, {55,30}, {29,36}, {37,81}, {49,17}, {46,15}, {46,70}, {41,72}, + {55,31}, {33,81}, {33,49}, {39,72}, {38,11}, {32,42}, {50,71}, {52,88}, + {41,33}, {21,93}, {55,0}, {50,57}, {30,86}, {51,37}, {26,4}, {55,32}, + {45,68}, {29,13}, {55,7}, {48,38}, {47,8}, {55,28}, {56,78}, {44,85}, + {30,25}, {28,26}, {25,4}, {49,63}, {17,89}, {25,63}, {35,21}, {46,76}, + {29,8}, {44,3}, {32,32}, {38,54}, {56,80}, {56,83}, {39,42}, {55,72}, + {49,57}, {41,17}, {39,41}, {55,75}, {55,73}, {55,37}, {28,85}, {37,44}, + {18,79}, {55,74}, {28,80}, {28,72}, {39,51}, {19,50}, {33,55}, {17,53}, + {54,47}, {41,42}, {42,90}, {52,43}, {23,21}, {46,40}, {56,57}, {55,79}, + {38,9}, {55,77}, {19,89}, {32,77}, {49,51}, {55,76}, {49,38}, {55,78}, + {34,38}, {48,85}, {53,56}, {55,81}, {55,84}, {27,93}, {27,58}, {39,45}, + {22,60}, {22,33}, {37,82}, {55,87}, {49,32}, {45,72}, {27,30}, {22,91}, + {22,4}, {47,60}, {53,57}, {50,36}, {26,78}, {26,64}, {55,80}, {40,0}, + {45,15}, {19,10}, {55,82}, {40,42}, {55,85}, {33,54}, {55,86}, {45,16}, + {55,88}, {17,13}, {24,31}, {56,2}, {15,72}, {32,69}, {40,75}, {42,36}, + {42,37}, {56,3}, {20,71}, {20,10}, {45,26}, {20,44}, {54,0}, {54,83}, + {50,50}, {43,68}, {25,45}, {56,1}, {56,59}, {50,63}, {55,92}, {22,79}, + {54,86}, {55,93}, {55,89}, {56,0}, {35,66}, {50,21}, {55,83}, {56,60}, + {55,90}, {36,68}, {31,47}, {48,79}, {15,58}, {27,48}, {56,5}, {56,4}, + {56,11}, {56,13}, {56,10}, {41,24}, {56,8}, {53,21}, {18,61}, {56,7}, + {31,92}, {41,43}, {56,9}, {56,6}, {56,15}, {21,16}, {24,8}, {49,31}, + {46,31}, {33,33}, {28,35}, {52,75}, {17,63}, {38,39}, {30,74}, {56,12}, + {56,14}, {45,73}, {25,77}, {38,53}, {16,66}, {19,56}, {21,76}, {56,19}, + {30,0}, {56,61}, {38,45}, {31,93}, {56,23}, {42,54}, {22,92}, {56,20}, + {56,22}, {16,2}, {50,64}, {56,24}, {47,36}, {56,21}, {56,16}, {56,17}, + {32,8}, {56,18}, {27,82}, {47,61}, {23,8}, {29,66}, {56,28}, {56,25}, + {15,18}, {56,33}, {56,35}, {16,21}, {56,30}, {20,24}, {29,82}, {43,39}, + {25,81}, {49,47}, {56,34}, {28,71}, {18,10}, {56,36}, {29,74}, {56,37}, + {56,26}, {35,62}, {56,29}, {56,32}, {56,31}, {52,13}, {53,20}, {38,66}, + {56,39}, {27,56}, {56,41}, {56,27}, {56,42}, {37,10}, {56,40}, {54,85}, + {44,2}, {28,0}, {56,43}, {36,27}, {44,20}, {56,44}, {56,38}, {18,4}, + {30,93}, {23,20}, {31,91}, {15,87}, {19,85}, {56,45}, {56,46}, {19,1}, + {56,47}, {19,62}, {15,32}, {56,48}, {40,20}, {46,80}, {56,49}, {32,36}, + {56,53}, {40,13}, {56,52}, {56,51}, {56,54}, {42,58}, {28,8}, {37,6}, + {56,50}, {56,55}, {56,56}, {39,68}, {31,59}, {21,88}, {55,2}, {51,41}, + {51,9}, {47,53}, {18,67}, {52,54}, {46,39}, {24,65}, {30,42}, {34,65}, + {21,49}, {44,34}, {56,77}, {56,79}, {20,18}, {21,20}, {29,3}, {39,74}, + {39,10}, {15,42}, {24,10}, {32,88}, {56,65}, {31,27}, {24,17}, {24,55}, + {47,42}, {16,87}, {37,67}, {29,62}, {20,67}, {54,39}, {48,87}, {27,69}, + {41,61}, {27,28}, {56,69}, {55,70}, {35,57}, {23,51}, {39,28}, {17,64}, + {51,56}, {34,15}, {34,64}, {57,1}, {39,62}, {47,19}, {29,91}, {36,8}, + {24,57}, {57,2}, {51,8}, {57,3}, {56,90}, {21,11}, {22,74}, {16,88}, + {56,91}, {18,68}, {29,85}, {30,85}, {49,16}, {31,67}, {21,18}, {56,93}, + {56,92}, {29,26}, {37,63}, {54,27}, {57,0}, {32,24}, {20,81}, {32,71}, + {27,84}, {19,52}, {32,60}, {35,92}, {27,23}, {22,17}, {22,78}, {56,75}, + {37,29}, {30,12}, {26,42}, {20,41}, {58,40}, {47,54}, {44,24}, {15,27}, + {18,85}, {26,86}, {58,41}, {25,14}, {51,67}, {20,21}, {20,82}, {55,53}, + {39,47}, {22,53}, {38,47}, {55,54}, {30,14}, {58,26}, {55,55}, {47,43}, + {26,13}, {74,29}, {32,47}, {32,84}, {51,81}, {23,52}, {19,19}, {18,84}, + {40,29}, {36,47}, {36,56}, {31,90}, {16,79}, {55,56}, {24,45}, {20,28}, + {55,57}, {53,37}, {42,1}, {39,14}, {40,17}, {19,43}, {30,43}, {24,83}, + {55,58}, {55,59}, {21,70}, {27,32}, {43,73}, {46,86}, {55,60}, {38,15}, + {24,47}, {28,2}, {43,61}, {37,41}, {55,63}, {55,61}, {55,62}, {15,93}, + {29,70}, {41,2}, {27,83}, {23,16}, {23,77}, {55,65}, {28,42}, {55,67}, + {55,66}, {36,91}, {55,68}, {55,69}, {32,5}, {39,15}, {15,75}, {24,5}, + {27,50}, {45,80}, {58,28}, {32,50}, {21,14}, {53,89}, {36,11}, {28,56}, + {58,29}, {58,30}, {31,87}, {29,1}, {31,44}, {58,31}, {41,37}, {17,9}, + {50,33}, {34,66}, {48,10}, {58,33}, {31,52}, {58,34}, {30,16}, {35,27}, + {38,57}, {58,35}, {56,71}, {40,54}, {24,19}, {45,79}, {51,39}, {15,91}, + {19,49}, {47,56}, {56,72}, {61,42}, {56,74}, {55,15}, {26,14}, {16,16}, + {18,54}, {55,45}, {51,48}, {28,18}, {30,78}, {46,26}, {55,47}, {22,42}, + {55,48}, {37,4}, {38,87}, {49,28}, {55,49}, {35,67}, {41,13}, {38,6}, + {55,5}, {40,92}, {45,70}, {26,59}, {15,74}, {26,9}, {47,12}, {16,15}, + {54,67}, {54,30}, {20,4}, {33,83}, {35,46}, {17,8}, {17,22}, {16,68}, + {62,17}, {52,27}, {30,7}, {33,11}, {55,52}, {33,16}, {55,51}, {45,51}, + {57,63}, {45,31}, {55,19}, {34,13}, {50,0}, {45,2}, {27,19}, {39,19}, + {33,48}, {29,76}, {47,21}, {57,64}, {38,67}, {18,6}, {21,81}, {43,91}, + {31,89}, {31,86}, {48,24}, {48,64}, {55,38}, {17,61}, {31,68}, {25,80}, + {55,39}, {51,12}, {46,64}, {55,40}, {55,41}, {46,34}, {18,87}, {29,38}, + {55,42}, {58,43}, {39,4}, {46,55}, {39,93}, {17,45}, {50,53}, {17,69}, + {27,15}, {50,48}, {42,10}, {22,19}, {22,1}, {41,68}, {39,0}, {41,59}, + {16,67}, {47,79}, {36,48}, {58,36}, {20,93}, {30,57}, {24,36}, {29,67}, + {32,76}, {62,21}, {62,20}, {53,26}, {28,47}, {52,56}, {15,39}, {21,2}, + {30,40}, {43,7}, {62,18}, {41,22}, {50,49}, {55,46}, {49,21}, {25,36}, + {42,29}, {43,29}, {62,22}, {20,79}, {62,19}, {50,84}, {18,51}, {23,86}, + {62,25}, {25,46}, {27,9}, {20,84}, {44,11}, {34,90}, {25,82}, {31,83}, + {44,33}, {46,81}, {62,23}, {46,36}, {33,31}, {62,24}, {33,79}, {29,92}, + {32,62}, {44,43}, {49,86}, {22,44}, {62,32}, {62,35}, {22,80}, {15,40}, + {21,53}, {22,51}, {25,11}, {43,92}, {30,51}, {42,16}, {37,83}, {53,7}, + {62,36}, {45,65}, {18,18}, {45,91}, {19,20}, {45,38}, {25,79}, {45,64}, + {48,28}, {62,31}, {19,83}, {18,41}, {23,69}, {62,26}, {35,36}, {62,27}, + {62,28}, {62,29}, {36,26}, {62,30}, {62,33}, {51,16}, {62,34}, {38,25}, + {45,55}, {35,55}, {62,41}, {62,46}, {53,59}, {62,40}, {62,57}, {45,21}, + {25,38}, {62,45}, {62,39}, {36,61}, {40,74}, {25,83}, {34,91}, {29,54}, + {62,37}, {62,44}, {36,55}, {52,5}, {25,44}, {29,43}, {50,28}, {23,31}, + {53,67}, {62,38}, {24,29}, {30,6}, {32,91}, {62,42}, {62,43}, {62,47}, + {62,58}, {62,68}, {62,54}, {62,53}, {54,40}, {62,66}, {62,67}, {68,74}, + {49,6}, {62,49}, {30,8}, {51,58}, {30,39}, {62,51}, {46,43}, {62,60}, + {48,41}, {62,61}, {15,6}, {37,22}, {62,50}, {25,68}, {21,62}, {44,58}, + {24,93}, {51,52}, {62,62}, {46,75}, {15,4}, {62,70}, {62,48}, {48,37}, + {62,52}, {62,55}, {62,56}, {62,59}, {26,8}, {62,63}, {62,64}, {62,65}, + {62,69}, {62,71}, {50,19}, {23,70}, {36,21}, {62,73}, {40,57}, {32,7}, + {35,35}, {30,61}, {46,87}, {52,59}, {62,77}, {17,23}, {25,62}, {62,75}, + {58,32}, {48,67}, {42,83}, {19,28}, {15,5}, {62,80}, {43,37}, {62,81}, + {62,76}, {62,72}, {62,74}, {62,78}, {62,79}, {26,28}, {62,82}, {62,83}, + {26,2}, {41,58}, {45,7}, {63,6}, {18,9}, {63,5}, {63,0}, {62,93}, {44,56}, + {62,91}, {62,89}, {30,47}, {54,35}, {40,43}, {62,87}, {15,0}, {62,92}, + {62,90}, {63,1}, {63,7}, {22,39}, {37,0}, {40,21}, {31,17}, {62,84}, + {36,29}, {55,35}, {62,88}, {35,85}, {63,2}, {63,3}, {63,4}, {47,4}, + {63,19}, {43,67}, {63,16}, {30,5}, {63,14}, {45,24}, {63,10}, {40,37}, + {31,13}, {63,13}, {25,76}, {25,15}, {63,8}, {62,85}, {63,18}, {63,23}, + {19,12}, {63,24}, {46,17}, {25,39}, {63,15}, {47,89}, {63,11}, {51,90}, + {62,86}, {36,70}, {63,12}, {50,86}, {63,21}, {63,22}, {63,35}, {47,64}, + {63,27}, {63,40}, {63,41}, {63,29}, {63,9}, {40,3}, {63,32}, {63,17}, + {41,39}, {63,34}, {63,20}, {45,42}, {42,34}, {63,44}, {63,37}, {63,33}, + {63,42}, {63,25}, {63,30}, {63,31}, {63,36}, {63,38}, {63,39}, {63,43}, + {63,26}, {42,51}, {63,52}, {63,53}, {63,49}, {63,47}, {27,45}, {63,48}, + {23,33}, {55,36}, {47,73}, {33,78}, {63,46}, {63,28}, {63,51}, {63,50}, + {63,54}, {63,59}, {63,55}, {53,85}, {18,15}, {54,75}, {42,26}, {63,57}, + {45,90}, {25,56}, {63,64}, {63,60}, {49,12}, {63,65}, {63,58}, {63,56}, + {63,62}, {63,63}, {63,61}, {63,67}, {37,86}, {55,11}, {51,74}, {63,69}, + {41,40}, {63,68}, {23,32}, {63,70}, {63,71}, {63,72}, {63,66}, {25,30}, + {43,70}, {63,73}, {46,88}, {63,74}, {39,33}, {28,31}, {35,49}, {63,75}, + {63,76}, {38,83}, {42,35}, {63,77}, {26,55}, {55,21}, {49,81}, {63,78}, + {44,36}, {21,57}, {63,80}, {51,15}, {31,6}, {19,48}, {45,6}, {63,79}, + {63,81}, {24,43}, {24,89}, {44,27}, {63,82}, {37,51}, {63,83}, {51,17}, + {39,5}, {63,85}, {63,84}, {63,86}, {44,32}, {41,4}, {51,57}, {58,54}, + {58,56}, {58,55}, {24,70}, {58,59}, {58,60}, {20,55}, {58,57}, {58,58}, + {18,0}, {58,62}, {26,87}, {53,22}, {58,63}, {29,88}, {22,26}, {58,47}, + {43,13}, {30,17}, {26,20}, {54,87}, {30,50}, {30,72}, {27,64}, {43,18}, + {58,61}, {15,50}, {45,74}, {22,55}, {54,24}, {37,33}, {31,3}, {43,24}, + {58,70}, {58,64}, {37,25}, {58,66}, {58,71}, {36,86}, {58,73}, {58,72}, + {30,31}, {58,69}, {58,68}, {19,24}, {31,11}, {33,1}, {58,65}, {58,67}, + {47,44}, {58,76}, {31,60}, {58,81}, {21,65}, {58,82}, {58,49}, {24,23}, + {51,10}, {58,75}, {30,48}, {58,79}, {58,48}, {20,69}, {58,74}, {30,68}, + {58,77}, {58,80}, {58,88}, {24,0}, {15,2}, {33,80}, {18,38}, {58,78}, + {58,87}, {37,49}, {58,83}, {58,84}, {58,86}, {58,85}, {58,93}, {50,81}, + {17,25}, {58,92}, {59,3}, {58,90}, {58,89}, {58,91}, {36,63}, {26,88}, + {59,2}, {59,4}, {43,34}, {21,48}, {60,31}, {59,0}, {59,1}, {38,20}, + {21,72}, {59,6}, {59,5}, {59,8}, {16,3}, {20,43}, {30,15}, {48,62}, + {21,33}, {59,7}, {42,89}, {74,82}, {42,59}, {42,93}, {43,32}, {39,90}, + {59,9}, {43,77}, {59,10}, {58,50}, {59,14}, {59,11}, {29,18}, {41,90}, + {59,12}, {40,41}, {35,24}, {38,28}, {59,13}, {51,85}, {47,69}, {35,10}, + {21,52}, {58,51}, {16,57}, {58,52}, {58,53}, {25,29}, {39,31}, {41,30}, + {39,40}, {54,18}, {40,88}, {30,38}, {25,87}, {49,27}, {65,25}, {19,5}, + {16,23}, {23,19}, {46,35}, {56,70}, {46,5}, {44,65}, {56,76}, {21,63}, + {49,24}, {24,26}, {65,24}, {65,22}, {19,82}, {43,75}, {43,10}, {22,81}, + {55,17}, {48,74}, {25,26}, {41,6}, {44,22}, {49,35}, {30,67}, {27,47}, + {21,64}, {61,36}, {61,37}, {58,27}, {48,56}, {37,69}, {35,45}, {22,77}, + {22,59}, {30,91}, {54,63}, {37,84}, {16,27}, {61,39}, {28,16}, {43,54}, + {61,41}, {61,40}, {20,75}, {40,60}, {15,33}, {36,13}, {36,10}, {35,43}, + {27,72}, {42,92}, {25,34}, {68,88}, {39,70}, {68,89}, {44,92}, {54,16}, + {23,29}, {33,71}, {39,48}, {68,90}, {21,41}, {27,42}, {48,92}, {69,0}, + {34,77}, {69,3}, {68,93}, {69,4}, {44,54}, {22,32}, {68,91}, {68,92}, + {69,2}, {35,60}, {69,7}, {69,6}, {34,34}, {37,61}, {69,9}, {35,22}, + {69,1}, {41,27}, {28,66}, {24,34}, {69,5}, {47,52}, {45,14}, {69,8}, + {69,15}, {49,5}, {28,9}, {69,12}, {69,14}, {31,48}, {49,43}, {27,6}, + {69,16}, {49,85}, {54,42}, {44,93}, {44,61}, {33,5}, {69,10}, {69,11}, + {28,30}, {69,13}, {69,18}, {69,17}, {69,21}, {69,23}, {35,78}, {35,39}, + {29,73}, {40,78}, {69,22}, {21,79}, {34,67}, {50,72}, {69,19}, {69,20}, + {39,1}, {69,28}, {69,24}, {37,36}, {44,80}, {69,26}, {69,27}, {26,72}, + {69,29}, {69,25}, {31,22}, {50,3}, {69,30}, {40,83}, {69,34}, {69,35}, + {47,85}, {34,28}, {34,35}, {69,33}, {69,32}, {69,38}, {46,16}, {74,83}, + {69,41}, {69,36}, {27,61}, {40,8}, {27,20}, {46,50}, {69,39}, {69,40}, + {69,45}, {69,47}, {69,48}, {69,42}, {20,52}, {69,43}, {69,46}, {35,58}, + {69,37}, {69,44}, {69,49}, {69,51}, {69,50}, {69,52}, {56,87}, {69,53}, + {69,54}, {54,50}, {69,60}, {69,61}, {30,54}, {51,47}, {54,53}, {19,69}, + {42,78}, {69,57}, {55,34}, {54,45}, {47,1}, {34,46}, {69,62}, {27,29}, + {24,33}, {69,58}, {48,6}, {25,1}, {33,46}, {55,10}, {41,74}, {68,77}, + {69,59}, {22,84}, {39,69}, {35,84}, {68,17}, {35,93}, {42,91}, {68,18}, + {52,11}, {50,77}, {41,55}, {15,17}, {42,45}, {44,73}, {25,73}, {68,20}, + {68,19}, {54,57}, {24,56}, {53,69}, {21,7}, {44,79}, {49,42}, {16,5}, + {41,20}, {18,71}, {40,82}, {30,44}, {47,90}, {41,49}, {68,21}, {26,33}, + {46,59}, {24,11}, {51,54}, {25,5}, {48,70}, {46,91}, {27,49}, {68,22}, + {39,60}, {30,76}, {16,85}, {42,61}, {27,36}, {27,35}, {49,89}, {34,59}, + {30,59}, {23,26}, {34,33}, {25,13}, {51,1}, {38,61}, {35,14}, {17,75}, + {24,48}, {68,26}, {32,39}, {52,14}, {68,27}, {68,29}, {19,70}, {21,51}, + {42,33}, {48,15}, {20,27}, {41,56}, {22,65}, {40,67}, {28,10}, {45,29}, + {54,79}, {47,0}, {40,56}, {21,90}, {69,55}, {27,65}, {18,29}, {40,47}, + {69,56}, {18,1}, {61,43}, {50,39}, {61,44}, {49,1}, {61,45}, {29,44}, + {61,46}, {41,11}, {49,91}, {18,62}, {68,73}, {35,64}, {29,0}, {45,17}, + {35,81}, {29,53}, {37,7}, {17,66}, {29,50}, {38,91}, {43,74}, {28,75}, + {45,60}, {41,25}, {37,32}, {68,75}, {47,27}, {52,24}, {68,76}, {41,83}, + {44,31}, {33,36}, {68,78}, {33,35}, {68,79}, {68,87}, {44,44}, {40,28}, + {49,56}, {64,7}, {50,75}, {42,73}, {37,80}, {64,11}, {64,6}, {64,8}, + {64,9}, {64,14}, {17,76}, {64,10}, {23,57}, {64,12}, {64,13}, {64,15}, + {20,25}, {64,16}, {64,18}, {64,23}, {48,49}, {64,21}, {64,20}, {32,74}, + {64,22}, {51,31}, {64,17}, {64,25}, {15,21}, {64,19}, {30,88}, {64,24}, + {64,26}, {64,29}, {64,27}, {53,36}, {46,30}, {64,28}, {64,30}, {33,44}, + {21,74}, {50,87}, {38,44}, {22,68}, {29,93}, {64,31}, {64,32}, {64,38}, + {18,70}, {37,72}, {19,61}, {48,33}, {64,39}, {64,37}, {64,36}, {64,34}, + {64,33}, {16,31}, {52,23}, {64,35}, {64,42}, {64,43}, {64,41}, {78,89}, + {64,50}, {64,49}, {38,21}, {64,40}, {64,45}, {64,47}, {64,51}, {64,48}, + {64,44}, {64,46}, {64,52}, {64,53}, {64,54}, {64,55}, {64,57}, {64,58}, + {45,0}, {70,60}, {19,7}, {53,60}, {48,17}, {18,17}, {24,3}, {54,82}, + {38,40}, {29,61}, {24,13}, {45,54}, {17,77}, {58,46}, {27,25}, {49,48}, + {42,39}, {15,44}, {46,78}, {56,66}, {28,76}, {16,49}, {41,47}, {17,27}, + {42,6}, {22,10}, {41,5}, {46,2}, {63,87}, {52,41}, {63,90}, {63,89}, + {36,32}, {43,90}, {32,16}, {63,88}, {53,66}, {17,14}, {53,35}, {20,58}, + {19,87}, {53,0}, {46,14}, {15,78}, {63,91}, {64,0}, {18,2}, {63,92}, + {63,93}, {34,16}, {34,60}, {64,1}, {22,88}, {26,46}, {64,2}, {35,26}, + {64,3}, {64,4}, {64,5}, {19,16}, {23,40}, {37,28}, {35,73}, {17,1}, + {47,49}, {70,58}, {26,34}, {50,54}, {50,35}, {24,66}, {65,46}, {54,14}, + {38,75}, {16,50}, {19,17}, {65,48}, {47,81}, {33,13}, {65,47}, {30,65}, + {50,5}, {20,54}, {65,49}, {20,73}, {34,76}, {23,92}, {23,13}, {36,50}, + {22,46}, {65,51}, {65,50}, {21,39}, {54,88}, {44,4}, {65,55}, {65,53}, + {41,91}, {30,20}, {50,24}, {65,52}, {65,54}, {32,13}, {31,39}, {65,58}, + {65,57}, {31,9}, {32,45}, {65,59}, {65,60}, {65,61}, {58,39}, {48,50}, + {44,1}, {28,7}, {61,34}, {55,4}, {30,9}, {58,44}, {49,75}, {37,89}, + {36,9}, {61,35}, {16,54}, {62,13}, {41,28}, {62,16}, {24,12}, {49,92}, + {23,4}, {25,74}, {18,57}, {20,59}, {52,36}, {34,53}, {46,49}, {26,0}, + {68,82}, {68,81}, {68,83}, {44,67}, {39,84}, {20,14}, {38,30}, {68,85}, + {75,15}, {68,69}, {24,72}, {20,16}, {33,27}, {68,71}, {68,70}, {68,72}, + {49,44}, {64,73}, {47,45}, {44,13}, {48,68}, {17,41}, {16,74}, {16,81}, + {36,76}, {52,34}, {50,15}, {64,59}, {64,60}, {49,58}, {18,24}, {16,42}, + {44,88}, {52,86}, {64,61}, {29,21}, {19,92}, {64,62}, {25,59}, {64,63}, + {26,17}, {33,40}, {64,64}, {47,75}, {44,28}, {64,65}, {20,34}, {36,38}, + {64,66}, {64,67}, {50,88}, {64,68}, {48,12}, {64,69}, {45,1}, {64,70}, + {20,33}, {64,71}, {26,52}, {47,35}, {65,63}, {16,55}, {49,67}, {65,64}, + {27,40}, {39,43}, {65,66}, {75,93}, {75,92}, {62,14}, {65,65}, {53,29}, + {44,91}, {34,5}, {66,34}, {53,49}, {65,70}, {65,71}, {50,38}, {65,75}, + {30,75}, {65,76}, {65,68}, {18,31}, {35,77}, {65,77}, {47,34}, {25,85}, + {65,72}, {22,61}, {26,18}, {43,11}, {42,42}, {65,67}, {65,69}, {65,73}, + {65,74}, {65,86}, {65,83}, {51,84}, {65,82}, {36,12}, {52,89}, {36,33}, + {17,31}, {65,78}, {65,81}, {32,14}, {42,27}, {20,0}, {65,88}, {27,16}, + {65,80}, {47,51}, {51,24}, {65,84}, {24,53}, {65,85}, {38,50}, {65,79}, + {54,59}, {76,0}, {65,87}, {76,4}, {65,93}, {41,48}, {32,20}, {26,47}, + {30,53}, {25,66}, {42,0}, {76,5}, {76,2}, {76,1}, {26,53}, {76,6}, + {47,83}, {76,3}, {25,61}, {21,86}, {66,0}, {21,17}, {43,80}, {24,6}, + {46,1}, {38,0}, {30,49}, {21,80}, {65,89}, {65,90}, {65,92}, {65,91}, + {35,52}, {66,1}, {50,32}, {66,6}, {38,35}, {46,3}, {66,8}, {25,22}, + {66,7}, {26,57}, {66,2}, {66,3}, {66,9}, {66,5}, {45,81}, {50,37}, + {26,27}, {51,34}, {35,89}, {76,7}, {47,91}, {66,4}, {34,84}, {66,12}, + {16,14}, {66,17}, {27,33}, {66,11}, {20,30}, {38,72}, {66,15}, {29,9}, + {44,78}, {26,82}, {43,71}, {66,14}, {66,16}, {46,6}, {66,13}, {45,8}, + {26,60}, {20,74}, {29,68}, {17,49}, {18,44}, {16,24}, {66,10}, {17,48}, + {20,11}, {24,62}, {21,71}, {46,74}, {66,22}, {26,43}, {39,38}, {47,41}, + {66,23}, {18,77}, {76,8}, {50,89}, {50,67}, {76,9}, {66,24}, {49,65}, + {66,20}, {50,61}, {23,47}, {66,18}, {66,21}, {22,62}, {66,19}, {31,1}, + {66,25}, {51,23}, {19,39}, {66,26}, {26,36}, {40,86}, {40,68}, {35,28}, + {76,10}, {33,92}, {26,58}, {30,13}, {45,30}, {66,27}, {30,21}, {16,78}, + {51,86}, {66,29}, {76,12}, {66,30}, {25,8}, {76,11}, {66,28}, {66,31}, + {25,21}, {21,13}, {47,23}, {15,34}, {76,13}, {76,14}, {31,32}, {66,32}, + {36,18}, {66,33}, {59,17}, {76,15}, {23,73}, {45,75}, {73,6}, {47,70}, + {41,88}, {39,53}, {46,22}, {18,40}, {45,49}, {28,67}, {66,61}, {26,81}, + {73,7}, {52,28}, {37,60}, {73,8}, {73,9}, {73,11}, {73,10}, {73,13}, + {73,12}, {28,55}, {73,14}, {33,29}, {19,32}, {19,86}, {26,6}, {75,69}, + {75,68}, {22,30}, {42,88}, {16,65}, {75,70}, {40,39}, {75,71}, {75,72}, + {41,53}, {61,47}, {17,36}, {51,89}, {37,42}, {15,38}, {19,81}, {39,50}, + {44,47}, {30,23}, {30,58}, {38,3}, {53,19}, {31,8}, {61,48}, {40,7}, + {48,78}, {36,3}, {15,70}, {18,21}, {39,36}, {15,65}, {22,85}, {36,89}, + {21,82}, {52,49}, {18,47}, {27,27}, {18,12}, {29,80}, {15,48}, {49,53}, + {41,66}, {54,4}, {44,21}, {21,21}, {30,24}, {52,58}, {23,6}, {36,54}, + {61,49}, {30,56}, {33,52}, {38,31}, {26,3}, {16,7}, {36,73}, {36,90}, + {43,6}, {16,6}, {20,53}, {35,7}, {61,50}, {48,25}, {18,72}, {34,81}, + {22,86}, {53,83}, {20,2}, {17,79}, {35,19}, {35,72}, {31,12}, {61,51}, + {15,71}, {36,35}, {32,63}, {24,52}, {29,59}, {44,55}, {15,45}, {44,46}, + {61,53}, {29,47}, {54,29}, {61,52}, {52,47}, {15,60}, {35,65}, {33,2}, + {27,79}, {50,20}, {31,24}, {36,0}, {17,5}, {51,80}, {31,7}, {41,34}, + {61,54}, {52,91}, {24,15}, {39,12}, {42,8}, {61,56}, {30,28}, {37,19}, + {54,6}, {41,15}, {35,34}, {18,53}, {24,49}, {53,23}, {73,91}, {15,19}, + {30,69}, {43,83}, {44,57}, {53,30}, {33,45}, {45,45}, {43,1}, {47,13}, + {35,50}, {20,17}, {61,55}, {52,84}, {27,22}, {26,50}, {15,3}, {36,17}, + {19,75}, {52,80}, {73,92}, {61,57}, {44,5}, {44,75}, {45,69}, {61,59}, + {44,16}, {31,5}, {54,28}, {61,58}, {15,37}, {25,19}, {40,50}, {35,82}, + {29,71}, {17,21}, {31,43}, {42,79}, {27,80}, {26,26}, {20,22}, {36,84}, + {61,69}, {61,66}, {29,60}, {61,62}, {19,22}, {28,60}, {61,63}, {35,76}, + {46,37}, {20,63}, {21,61}, {41,57}, {20,83}, {61,68}, {52,37}, {61,64}, + {43,44}, {37,93}, {36,36}, {49,19}, {29,81}, {33,50}, {43,28}, {18,23}, + {28,50}, {30,55}, {44,37}, {48,57}, {19,74}, {61,67}, {61,60}, {61,70}, + {73,93}, {33,15}, {61,65}, {53,31}, {20,6}, {17,83}, {61,71}, {61,81}, + {61,76}, {61,80}, {39,63}, {54,64}, {61,78}, {34,71}, {43,64}, {17,68}, + {49,29}, {61,77}, {61,74}, {45,52}, {19,6}, {30,10}, {29,29}, {28,49}, + {61,72}, {51,13}, {61,61}, {61,73}, {31,30}, {61,75}, {17,82}, {23,72}, + {33,6}, {28,32}, {61,84}, {61,87}, {17,10}, {19,3}, {19,73}, {40,5}, + {61,85}, {42,48}, {23,66}, {61,86}, {61,89}, {61,88}, {43,33}, {15,64}, + {19,77}, {68,25}, {47,14}, {17,74}, {74,0}, {61,83}, {40,66}, {61,82}, + {15,57}, {49,0}, {16,86}, {43,14}, {61,79}, {42,3}, {52,9}, {61,90}, + {19,60}, {35,5}, {61,92}, {34,93}, {35,0}, {62,0}, {32,43}, {61,91}, + {29,78}, {37,17}, {18,36}, {39,85}, {42,25}, {61,93}, {62,3}, {54,17}, + {18,22}, {32,34}, {38,42}, {17,4}, {19,72}, {54,10}, {35,75}, {62,1}, + {62,2}, {62,4}, {25,18}, {62,5}, {31,61}, {40,34}, {17,56}, {38,69}, + {62,6}, {38,59}, {62,7}, {74,1}, {42,50}, {62,9}, {62,8}, {17,32}, + {36,41}, {62,10}, {51,59}, {39,32}, {62,11}, {29,79}, {62,12}, {53,6}, + {73,22}, {74,21}, {41,52}, {55,91}, {23,35}, {24,4}, {22,36}, {52,93}, + {24,41}, {47,6}, {83,44}, {20,47}, {34,83}, {29,39}, {74,22}, {15,28}, + {28,43}, {32,17}, {16,53}, {18,7}, {23,49}, {40,1}, {21,55}, {74,23}, + {29,19}, {41,92}, {38,34}, {52,90}, {22,82}, {45,35}, {52,10}, {16,82}, + {75,18}, {15,62}, {75,20}, {21,22}, {32,46}, {84,89}, {47,16}, {52,68}, + {45,50}, {28,78}, {18,65}, {23,10}, {52,21}, {76,28}, {21,46}, {42,24}, + {47,33}, {22,28}, {75,21}, {41,8}, {36,51}, {75,24}, {75,23}, {33,34}, + {75,22}, {47,92}, {75,25}, {75,26}, {54,68}, {75,27}, {75,28}, {37,75}, + {45,61}, {27,39}, {39,52}, {20,8}, {29,40}, {53,27}, {51,70}, {48,13}, + {47,80}, {73,23}, {73,24}, {73,25}, {25,20}, {41,16}, {30,84}, {44,89}, + {73,31}, {15,25}, {73,29}, {31,4}, {73,26}, {17,92}, {34,86}, {26,71}, + {49,54}, {45,83}, {73,30}, {73,27}, {73,34}, {47,38}, {50,18}, {19,25}, + {34,32}, {54,81}, {52,48}, {41,38}, {73,36}, {73,35}, {73,38}, {73,37}, + {53,70}, {46,51}, {73,42}, {26,45}, {28,89}, {40,45}, {73,43}, {40,24}, + {46,93}, {73,41}, {51,45}, {73,44}, {73,46}, {44,76}, {73,40}, {73,45}, + {45,77}, {26,61}, {18,30}, {37,52}, {29,15}, {45,89}, {38,70}, {29,6}, + {73,47}, {53,38}, {32,31}, {51,60}, {73,48}, {46,29}, {73,49}, {41,77}, + {36,14}, {15,20}, {73,51}, {73,50}, {83,62}, {35,25}, {16,8}, {68,62}, + {73,52}, {41,78}, {73,53}, {73,54}, {37,55}, {73,55}, {73,56}, {51,26}, + {38,89}, {49,22}, {23,91}, {73,33}, {17,59}, {33,91}, {51,87}, {43,69}, + {54,77}, {51,33}, {50,47}, {74,34}, {36,82}, {22,93}, {74,51}, {42,22}, + {74,61}, {31,41}, {44,90}, {18,14}, {37,57}, {74,91}, {35,29}, {45,19}, + {35,8}, {16,29}, {51,92}, {41,84}, {53,75}, {37,50}, {21,67}, {26,89}, + {47,63}, {40,16}, {51,50}, {39,7}, {23,42}, {71,29}, {40,27}, {71,26}, + {31,77}, {47,50}, {17,35}, {19,68}, {71,27}, {52,39}, {21,36}, {71,28}, + {41,87}, {23,59}, {43,84}, {31,19}, {48,77}, {71,30}, {71,33}, {25,27}, + {16,12}, {28,59}, {73,28}, {71,34}, {71,37}, {71,42}, {71,43}, {42,40}, + {15,68}, {27,10}, {24,24}, {71,32}, {44,86}, {71,41}, {45,85}, {52,76}, + {32,53}, {71,35}, {34,21}, {24,90}, {53,5}, {71,39}, {41,63}, {51,69}, + {71,31}, {71,36}, {71,38}, {38,24}, {22,66}, {71,40}, {30,60}, {71,49}, + {71,54}, {71,52}, {27,59}, {27,46}, {71,58}, {71,61}, {71,57}, {16,89}, + {15,55}, {35,18}, {23,43}, {37,65}, {39,29}, {39,64}, {71,46}, {71,51}, + {71,53}, {24,80}, {71,55}, {54,84}, {35,90}, {71,59}, {17,72}, {71,48}, + {27,76}, {30,33}, {71,44}, {53,88}, {32,87}, {17,80}, {71,62}, {41,32}, + {71,56}, {52,3}, {16,73}, {52,26}, {71,45}, {71,47}, {21,15}, {71,50}, + {71,60}, {31,23}, {41,86}, {42,7}, {37,59}, {31,84}, {71,72}, {47,2}, + {71,81}, {53,73}, {71,63}, {71,64}, {48,88}, {25,42}, {23,88}, {23,80}, + {51,51}, {71,78}, {71,77}, {71,75}, {24,79}, {43,49}, {71,69}, {45,5}, + {30,81}, {15,23}, {71,80}, {71,79}, {54,31}, {71,67}, {44,8}, {40,2}, + {26,23}, {28,58}, {71,73}, {71,65}, {71,66}, {71,68}, {20,20}, {71,70}, + {38,36}, {71,74}, {71,76}, {28,15}, {54,13}, {71,87}, {71,84}, {44,15}, + {71,85}, {32,25}, {71,71}, {34,22}, {15,79}, {71,83}, {71,86}, {24,2}, + {40,49}, {34,45}, {45,63}, {31,69}, {42,82}, {43,60}, {47,20}, {41,64}, + {71,82}, {27,75}, {71,88}, {34,61}, {37,68}, {24,86}, {15,83}, {54,55}, + {27,11}, {36,78}, {43,35}, {72,5}, {40,12}, {72,1}, {31,65}, {30,34}, + {71,93}, {24,54}, {71,90}, {72,3}, {49,45}, {72,2}, {53,17}, {54,20}, + {72,6}, {28,22}, {71,91}, {71,92}, {72,0}, {44,53}, {49,11}, {72,17}, + {72,8}, {19,9}, {19,26}, {72,10}, {47,7}, {72,4}, {18,93}, {72,11}, + {31,66}, {72,9}, {72,24}, {72,23}, {72,13}, {71,89}, {72,7}, {30,11}, + {72,16}, {72,25}, {33,4}, {72,14}, {23,36}, {72,12}, {50,59}, {72,19}, + {72,20}, {72,22}, {72,38}, {31,37}, {72,36}, {72,15}, {72,26}, {15,80}, + {72,27}, {52,4}, {72,29}, {72,30}, {72,32}, {32,80}, {39,21}, {72,28}, + {72,33}, {72,34}, {72,18}, {72,21}, {26,16}, {72,31}, {27,86}, {72,35}, + {72,37}, {72,41}, {72,45}, {17,58}, {72,39}, {22,13}, {72,42}, {72,43}, + {52,32}, {35,2}, {72,55}, {25,64}, {72,40}, {50,2}, {72,51}, {72,54}, + {72,47}, {72,46}, {38,32}, {72,49}, {72,56}, {18,39}, {72,50}, {46,79}, + {72,44}, {18,86}, {72,53}, {72,57}, {43,19}, {46,12}, {72,52}, {72,59}, + {72,58}, {72,61}, {72,48}, {72,60}, {72,62}, {34,41}, {38,22}, {19,45}, + {26,21}, {47,31}, {75,2}, {36,22}, {50,90}, {75,3}, {75,4}, {37,58}, + {30,77}, {75,5}, {75,6}, {47,9}, {38,23}, {23,71}, {75,7}, {53,24}, + {52,92}, {19,42}, {17,28}, {45,67}, {37,70}, {44,64}, {19,84}, {42,31}, + {27,62}, {72,65}, {72,66}, {48,73}, {72,68}, {19,88}, {72,67}, {48,18}, + {41,65}, {17,47}, {72,71}, {72,69}, {72,70}, {53,18}, {72,72}, {72,73}, + {72,74}, {72,75}, {75,14}, {36,24}, {21,45}, {49,82}, {20,77}, {26,56}, + {75,16}, {49,66}, {45,66}, {35,23}, {34,30}, {21,29}, {55,24}, {16,39}, + {16,46}, {16,48}, {36,93}, {16,47}, {34,10}, {52,16}, {74,3}, {25,32}, + {43,25}, {74,4}, {74,6}, {74,7}, {74,5}, {74,8}, {74,10}, {74,9}, {74,11}, + {41,46}, {55,20}, {34,80}, {34,4}, {37,87}, {74,12}, {35,41}, {74,13}, + {74,14}, {74,15}, {22,52}, {22,89}, {74,16}, {38,65}, {74,18}, {25,3}, + {48,84}, {15,16}, {74,17}, {74,19}, {20,9}, {33,39}, {38,71}, {74,20}, + {42,13}, {66,62}, {50,31}, {56,58}, {44,0}, {53,12}, {38,82}, {56,63}, + {26,66}, {25,25}, {66,65}, {46,10}, {66,63}, {40,38}, {25,24}, {48,19}, + {66,64}, {39,73}, {24,14}, {28,12}, {18,55}, {45,58}, {43,31}, {66,71}, + {66,72}, {44,83}, {43,12}, {27,18}, {66,73}, {66,74}, {47,57}, {37,90}, + {22,57}, {38,62}, {49,41}, {45,53}, {66,67}, {66,75}, {40,81}, {18,32}, + {66,70}, {37,66}, {66,68}, {76,18}, {66,69}, {40,18}, {36,69}, {24,20}, + {34,26}, {66,66}, {36,28}, {32,3}, {33,56}, {17,54}, {66,76}, {26,5}, + {35,12}, {66,79}, {29,57}, {66,90}, {66,84}, {25,50}, {22,47}, {50,44}, + {53,45}, {52,50}, {24,32}, {52,19}, {48,55}, {47,24}, {38,85}, {39,9}, + {17,19}, {34,57}, {66,77}, {66,91}, {66,78}, {22,7}, {66,86}, {66,83}, + {22,25}, {36,1}, {66,85}, {36,60}, {17,7}, {37,91}, {35,63}, {54,1}, + {31,64}, {66,88}, {66,89}, {66,92}, {43,8}, {66,82}, {50,29}, {16,34}, + {76,19}, {66,80}, {66,81}, {66,87}, {47,25}, {37,34}, {51,82}, {66,93}, + {28,63}, {67,6}, {67,5}, {48,82}, {67,2}, {67,8}, {39,86}, {46,19}, + {67,7}, {67,13}, {33,68}, {21,19}, {28,81}, {67,1}, {25,72}, {67,9}, + {67,11}, {21,92}, {53,61}, {67,17}, {67,12}, {67,0}, {26,77}, {44,60}, + {38,1}, {36,40}, {32,86}, {67,3}, {38,18}, {28,11}, {28,28}, {67,4}, + {54,38}, {17,65}, {67,10}, {27,34}, {67,14}, {26,74}, {67,15}, {36,7}, + {67,16}, {52,66}, {30,2}, {67,25}, {67,22}, {67,26}, {67,28}, {37,53}, + {25,37}, {31,42}, {23,0}, {67,19}, {51,0}, {25,2}, {28,93}, {67,27}, + {44,30}, {35,88}, {46,90}, {40,69}, {50,30}, {46,48}, {67,18}, {67,23}, + {67,24}, {43,72}, {43,45}, {31,51}, {67,20}, {32,15}, {67,21}, {45,47}, + {26,32}, {20,50}, {39,82}, {28,6}, {52,38}, {40,11}, {23,1}, {67,41}, + {67,43}, {48,35}, {49,25}, {25,12}, {25,51}, {67,34}, {20,76}, {54,44}, + {67,31}, {46,92}, {67,30}, {32,59}, {43,41}, {41,70}, {35,54}, {43,51}, + {67,39}, {67,38}, {67,32}, {67,35}, {20,12}, {50,56}, {67,37}, {49,88}, + {19,66}, {26,19}, {40,77}, {19,29}, {26,75}, {48,44}, {43,76}, {76,20}, + {38,68}, {51,7}, {67,42}, {54,52}, {67,33}, {28,4}, {67,36}, {50,69}, + {67,40}, {40,87}, {67,29}, {50,68}, {38,93}, {21,40}, {51,91}, {17,18}, + {67,54}, {45,33}, {67,44}, {45,27}, {23,58}, {67,53}, {30,41}, {50,45}, + {34,75}, {36,39}, {67,55}, {44,35}, {67,46}, {67,51}, {67,52}, {25,93}, + {46,69}, {52,30}, {67,49}, {67,47}, {67,45}, {44,68}, {41,9}, {31,2}, + {28,5}, {67,50}, {23,39}, {67,70}, {51,19}, {67,58}, {32,78}, {67,72}, + {49,70}, {67,62}, {67,63}, {46,9}, {42,60}, {67,57}, {67,48}, {67,68}, + {39,59}, {67,66}, {35,70}, {67,65}, {67,64}, {18,91}, {67,71}, {20,64}, + {54,43}, {67,69}, {26,11}, {54,49}, {43,46}, {74,87}, {67,67}, {24,85}, + {53,44}, {67,56}, {67,59}, {33,89}, {67,61}, {33,42}, {31,35}, {33,47}, + {16,84}, {43,17}, {20,45}, {67,78}, {37,14}, {37,64}, {67,84}, {33,8}, + {31,75}, {48,60}, {67,77}, {35,13}, {67,76}, {67,85}, {67,83}, {33,93}, + {67,60}, {67,79}, {41,93}, {52,35}, {67,80}, {48,89}, {67,74}, {67,75}, + {67,81}, {45,10}, {36,42}, {38,16}, {33,25}, {67,73}, {32,41}, {43,21}, + {18,16}, {67,90}, {67,82}, {67,89}, {67,92}, {67,91}, {18,45}, {18,25}, + {67,86}, {67,88}, {67,87}, {36,75}, {31,28}, {51,71}, {68,1}, {15,35}, + {68,3}, {68,2}, {27,3}, {68,4}, {68,0}, {67,93}, {16,83}, {68,7}, {68,8}, + {68,5}, {68,6}, {68,9}, {37,56}, {68,10}, {68,12}, {68,11}, {68,14}, + {68,13}, {24,63}, {68,15}, {68,16}, {26,79}, {75,64}, {34,79}, {20,37}, + {26,49}, {32,72}, {51,77}, {29,35}, {54,37}, {51,53}, {17,50}, {75,29}, + {73,32}, {33,14}, {19,21}, {48,54}, {18,19}, {39,17}, {30,26}, {75,31}, + {53,42}, {75,30}, {75,32}, {75,36}, {29,69}, {43,30}, {36,57}, {29,27}, + {75,37}, {16,93}, {75,35}, {52,7}, {20,66}, {75,33}, {32,21}, {18,66}, + {75,34}, {42,23}, {31,34}, {43,93}, {32,49}, {75,39}, {25,69}, {31,50}, + {53,81}, {48,43}, {30,29}, {22,18}, {40,52}, {75,38}, {26,65}, {43,43}, + {28,92}, {39,39}, {46,8}, {44,72}, {36,74}, {22,72}, {48,40}, {25,23}, + {75,40}, {75,41}, {26,31}, {75,42}, {75,65}, {16,25}, {22,56}, {28,24}, + {75,43}, {48,69}, {75,44}, {39,26}, {75,48}, {75,50}, {26,44}, {27,68}, + {75,46}, {40,22}, {34,25}, {75,66}, {52,52}, {75,47}, {53,82}, {75,49}, + {75,45}, {75,51}, {75,52}, {40,30}, {46,7}, {47,59}, {48,11}, {39,58}, + {75,53}, {45,84}, {41,75}, {75,57}, {75,56}, {15,29}, {75,54}, {75,55}, + {75,67}, {39,27}, {32,38}, {75,59}, {48,63}, {75,58}, {51,78}, {75,60}, + {58,37}, {75,61}, {16,11}, {75,62}, {75,63}, {54,5}, {36,31}, {74,27}, + {15,13}, {29,83}, {23,23}, {49,14}, {15,53}, {20,88}, {55,18}, {42,11}, + {66,60}, {37,11}, {15,69}, {36,37}, {74,24}, {74,25}, {74,26}, {48,31}, + {36,2}, {73,81}, {35,17}, {35,20}, {31,45}, {73,82}, {35,32}, {45,78}, + {73,79}, {73,83}, {40,91}, {38,2}, {43,55}, {45,93}, {73,84}, {73,85}, + {46,11}, {31,70}, {73,86}, {21,30}, {73,87}, {73,88}, {73,89}, {73,90}, + {73,80}, {39,13}, {64,74}, {22,23}, {64,75}, {64,76}, {54,19}, {64,77}, + {64,78}, {50,43}, {64,80}, {30,80}, {64,79}, {20,49}, {16,22}, {64,82}, + {64,81}, {25,91}, {64,83}, {24,22}, {29,48}, {35,91}, {25,60}, {28,37}, + {64,84}, {64,86}, {21,31}, {46,32}, {41,7}, {64,85}, {52,87}, {50,91}, + {64,87}, {64,91}, {64,88}, {64,89}, {31,73}, {64,93}, {65,0}, {31,38}, + {64,90}, {64,92}, {65,4}, {32,51}, {65,2}, {65,7}, {17,93}, {65,1}, + {34,44}, {17,33}, {65,6}, {65,5}, {65,3}, {65,8}, {65,10}, {47,40}, + {53,76}, {34,7}, {65,11}, {46,54}, {65,13}, {25,78}, {72,63}, {65,12}, + {65,9}, {26,10}, {51,18}, {65,15}, {65,14}, {72,64}, {65,16}, {65,17}, + {65,18}, {43,0}, {65,19}, {65,20}, {47,93}, {33,41}, {50,80}, {44,84}, + {70,63}, {70,64}, {29,32}, {33,73}, {70,67}, {70,66}, {44,69}, {34,20}, + {70,65}, {26,22}, {46,53}, {32,64}, {70,72}, {70,71}, {70,83}, {17,2}, + {70,73}, {70,69}, {70,75}, {70,74}, {40,25}, {52,67}, {70,68}, {22,8}, + {70,70}, {70,77}, {70,82}, {53,72}, {70,76}, {70,81}, {70,80}, {15,63}, + {70,84}, {38,81}, {31,36}, {31,76}, {32,79}, {70,79}, {70,85}, {42,85}, + {71,1}, {71,0}, {54,32}, {70,89}, {70,88}, {70,90}, {70,86}, {70,93}, + {70,92}, {70,91}, {32,52}, {38,56}, {36,92}, {36,34}, {38,76}, {71,2}, + {71,5}, {71,4}, {71,6}, {25,86}, {70,87}, {71,3}, {39,79}, {40,9}, + {71,8}, {24,68}, {48,93}, {71,7}, {71,9}, {71,12}, {71,13}, {32,6}, + {71,14}, {71,15}, {71,11}, {71,19}, {71,10}, {71,16}, {71,20}, {71,17}, + {71,18}, {71,22}, {71,21}, {24,46}, {79,11}, {79,12}, {37,15}, {15,73}, + {39,30}, {44,62}, {45,44}, {73,16}, {73,17}, {37,30}, {19,40}, {73,18}, + {52,70}, {60,88}, {73,19}, {73,20}, {73,21}, {23,41}, {62,15}, {40,84}, + {43,79}, {40,89}, {40,90}, {50,34}, {42,5}, {23,5}, {79,13}, {16,33}, + {68,23}, {43,78}, {50,40}, {27,54}, {40,73}, {20,70}, {35,47}, {20,72}, + {77,13}, {26,12}, {70,61}, {77,14}, {18,8}, {77,17}, {77,16}, {28,70}, + {77,15}, {45,22}, {36,46}, {32,83}, {58,45}, {77,18}, {47,82}, {33,51}, + {37,71}, {22,11}, {77,19}, {18,74}, {26,90}, {77,20}, {70,59}, {77,21}, + {28,13}, {80,65}, {41,71}, {49,40}, {79,57}, {79,58}, {79,59}, {32,37}, + {23,76}, {29,45}, {79,61}, {36,16}, {79,60}, {48,80}, {79,63}, {15,43}, + {28,73}, {49,62}, {79,62}, {19,14}, {22,71}, {79,69}, {79,68}, {37,2}, + {79,64}, {79,65}, {19,34}, {79,66}, {52,77}, {43,58}, {29,49}, {27,17}, + {79,71}, {79,70}, {79,67}, {17,0}, {53,1}, {50,23}, {29,22}, {39,11}, + {79,73}, {48,86}, {53,43}, {25,58}, {79,72}, {21,26}, {44,19}, {37,5}, + {32,0}, {79,74}, {79,77}, {79,76}, {79,79}, {79,75}, {26,29}, {79,78}, + {43,20}, {79,81}, {18,52}, {16,51}, {79,82}, {79,83}, {79,85}, {19,64}, + {79,80}, {79,86}, {79,89}, {79,87}, {79,84}, {79,92}, {79,88}, {79,91}, + {79,93}, {80,0}, {45,32}, {80,3}, {80,2}, {32,85}, {79,90}, {41,60}, + {19,80}, {16,80}, {43,16}, {80,5}, {80,6}, {80,11}, {52,45}, {80,8}, + {39,18}, {80,1}, {80,10}, {80,7}, {80,4}, {80,9}, {15,8}, {80,12}, + {80,14}, {80,16}, {80,15}, {80,13}, {48,1}, {80,17}, {80,18}, {24,78}, + {20,38}, {15,54}, {15,56}, {51,76}, {20,35}, {28,51}, {26,41}, {79,6}, + {23,61}, {79,7}, {15,7}, {79,8}, {44,77}, {79,9}, {79,10}, {37,3}, + {53,68}, {80,67}, {80,68}, {34,82}, {50,58}, {53,48}, {36,71}, {50,14}, + {49,69}, {77,32}, {15,26}, {52,20}, {48,45}, {27,63}, {25,47}, {30,87}, + {23,38}, {20,32}, {36,43}, {41,1}, {34,42}, {77,33}, {35,30}, {21,1}, + {76,75}, {34,3}, {53,16}, {46,63}, {76,78}, {36,45}, {21,59}, {41,0}, + {76,76}, {76,79}, {76,80}, {34,27}, {30,19}, {76,77}, {76,83}, {76,81}, + {52,69}, {34,62}, {76,82}, {76,85}, {52,2}, {48,2}, {76,84}, {34,47}, + {76,86}, {30,83}, {29,75}, {76,87}, {43,86}, {48,58}, {54,36}, {52,85}, + {76,91}, {76,90}, {76,88}, {76,89}, {76,92}, {29,5}, {42,14}, {77,0}, + {21,28}, {77,1}, {35,31}, {76,93}, {28,61}, {17,38}, {21,34}, {77,4}, + {55,25}, {77,2}, {77,5}, {34,72}, {18,81}, {77,6}, {77,3}, {46,24}, + {77,7}, {33,86}, {77,8}, {77,9}, {61,10}, {37,18}, {38,37}, {53,84}, + {20,40}, {42,17}, {77,10}, {44,10}, {77,11}, {52,15}, {77,12}, {85,35}, + {58,38}, {19,2}, {34,11}, {80,69}, {41,23}, {49,50}, {53,9}, {78,81}, + {29,55}, {28,34}, {78,82}, {21,43}, {15,10}, {41,14}, {76,21}, {76,22}, + {45,88}, {22,14}, {30,82}, {76,23}, {33,74}, {40,15}, {76,24}, {37,85}, + {30,18}, {76,27}, {36,87}, {48,47}, {54,8}, {76,25}, {76,26}, {48,65}, + {76,30}, {76,31}, {76,35}, {76,39}, {76,37}, {76,45}, {52,71}, {76,40}, + {76,38}, {76,29}, {36,72}, {37,37}, {40,72}, {51,49}, {76,32}, {76,33}, + {76,34}, {76,36}, {31,88}, {19,0}, {24,71}, {76,47}, {76,48}, {76,41}, + {76,46}, {45,87}, {42,21}, {76,43}, {76,44}, {46,84}, {76,49}, {32,81}, + {50,17}, {76,42}, {39,22}, {27,78}, {36,79}, {76,53}, {20,78}, {33,20}, + {15,12}, {42,72}, {16,13}, {76,51}, {44,74}, {20,65}, {76,52}, {76,50}, + {76,54}, {20,89}, {76,55}, {76,56}, {76,59}, {16,43}, {36,85}, {27,77}, + {76,57}, {43,27}, {17,73}, {76,58}, {35,74}, {19,36}, {15,84}, {76,62}, + {31,57}, {19,71}, {36,44}, {76,60}, {30,35}, {76,61}, {35,4}, {76,63}, + {76,64}, {76,66}, {32,54}, {26,38}, {28,23}, {76,65}, {76,67}, {76,69}, + {76,68}, {76,70}, {41,29}, {75,73}, {31,80}, {40,70}, {75,74}, {37,77}, + {75,75}, {37,76}, {75,76}, {75,79}, {54,69}, {75,82}, {75,80}, {75,77}, + {75,78}, {54,2}, {40,80}, {42,77}, {75,83}, {75,81}, {46,72}, {75,85}, + {37,16}, {27,31}, {75,84}, {20,26}, {26,85}, {75,86}, {56,86}, {28,90}, + {33,26}, {75,87}, {75,88}, {23,2}, {75,89}, {75,90}, {75,91}, {50,76}, + {55,13}, {31,74}, {38,60}, {25,43}, {47,66}, {42,28}, {44,25}, {23,48}, + {16,91}, {38,78}, {53,53}, {30,37}, {34,74}, {78,84}, {34,55}, {54,65}, + {78,86}, {18,50}, {38,55}, {48,76}, {53,39}, {78,87}, {78,85}, {26,92}, + {18,37}, {28,52}, {49,37}, {26,63}, {46,0}, {78,91}, {78,90}, {78,88}, + {18,43}, {40,51}, {42,15}, {78,93}, {15,61}, {53,40}, {78,92}, {18,76}, + {85,52}, {45,39}, {79,1}, {79,0}, {20,29}, {27,57}, {26,91}, {23,68}, + {35,33}, {79,2}, {42,74}, {79,5}, {48,7}, {29,30}, {38,77}, {80,21}, + {80,22}, {30,52}, {19,8}, {80,23}, {44,26}, {38,51}, {52,12}, {80,24}, + {80,25}, {38,46}, {49,3}, {53,46}, {80,26}, {28,48}, {19,15}, {29,28}, + {19,59}, {45,48}, {30,62}, {80,28}, {30,89}, {80,27}, {80,30}, {80,29}, + {80,31}, {80,32}, {32,93}, {32,1}, {41,89}, {52,29}, {29,25}, {29,24}, + {52,33}, {30,1}, {44,14}, {80,20}, {28,62}, {21,42}, {53,80}, {82,34}, + {82,35}, {23,44}, {82,37}, {82,38}, {15,41}, {82,36}, {82,40}, {42,80}, + {82,42}, {47,5}, {16,41}, {82,39}, {82,46}, {20,48}, {82,54}, {82,49}, + {82,51}, {82,50}, {22,90}, {16,30}, {82,45}, {82,41}, {20,57}, {82,47}, + {82,48}, {82,52}, {82,44}, {27,66}, {32,92}, {82,53}, {82,57}, {82,43}, + {20,39}, {28,77}, {82,59}, {22,3}, {30,79}, {53,93}, {44,17}, {19,79}, + {17,62}, {82,55}, {82,56}, {40,23}, {82,60}, {82,61}, {82,64}, {82,62}, + {82,66}, {82,65}, {82,58}, {30,73}, {18,78}, {82,63}, {38,8}, {27,81}, + {82,74}, {24,30}, {82,67}, {17,12}, {26,93}, {42,66}, {82,76}, {82,72}, + {24,59}, {82,77}, {82,68}, {82,69}, {82,73}, {33,64}, {82,75}, {82,78}, + {82,71}, {27,92}, {46,67}, {82,79}, {82,70}, {82,81}, {54,12}, {37,9}, + {82,82}, {82,80}, {33,7}, {23,60}, {82,84}, {82,83}, {19,58}, {82,85}, + {82,86}, {82,87}, {31,25}, {31,72}, {36,80}, {82,90}, {82,89}, {19,55}, + {82,93}, {82,88}, {82,91}, {82,92}, {83,0}, {83,2}, {26,40}, {83,1}, + {83,3}, {17,29}, {83,5}, {83,4}, {27,13}, {34,54}, {56,64}, {31,63}, + {83,43}, {54,48}, {22,58}, {83,45}, {32,2}, {37,40}, {19,53}, {52,18}, + {83,47}, {83,46}, {83,48}, {42,57}, {83,49}, {51,32}, {53,63}, {22,63}, + {32,23}, {32,26}, {83,50}, {29,11}, {19,65}, {83,51}, {83,52}, {29,10}, + {83,53}, {83,58}, {83,54}, {83,57}, {25,92}, {83,55}, {83,56}, {23,65}, + {43,38}, {83,59}, {17,57}, {34,50}, {51,66}, {30,22}, {83,60}, {36,19}, + {83,72}, {46,20}, {45,40}, {42,55}, {42,86}, {28,83}, {54,46}, {31,58}, + {47,84}, {83,73}, {83,74}, {83,75}, {86,66}, {22,16}, {83,76}, {54,74}, + {83,77}, {69,88}, {29,31}, {69,89}, {25,75}, {69,90}, {46,42}, {69,91}, + {51,27}, {27,21}, {69,92}, {69,93}, {27,44}, {39,49}, {45,18}, {70,0}, + {19,30}, {70,1}, {40,19}, {23,56}, {35,40}, {54,60}, {33,57}, {22,54}, + {53,28}, {45,37}, {22,35}, {36,5}, {70,2}, {46,62}, {70,3}, {70,4}, + {70,5}, {32,22}, {54,72}, {40,79}, {46,23}, {53,14}, {53,52}, {70,6}, + {15,76}, {70,7}, {70,8}, {40,59}, {49,78}, {29,12}, {70,9}, {15,82}, + {39,61}, {28,64}, {70,10}, {39,37}, {70,11}, {26,69}, {23,87}, {48,3}, + {70,12}, {33,70}, {29,87}, {28,41}, {44,18}, {70,13}, {70,14}, {29,77}, + {47,68}, {42,70}, {43,47}, {27,43}, {70,15}, {27,7}, {47,86}, {70,16}, + {47,87}, {70,17}, {70,18}, {19,33}, {70,19}, {70,20}, {40,93}, {45,11}, + {34,63}, {70,22}, {16,32}, {18,80}, {70,23}, {70,24}, {54,58}, {52,31}, + {70,25}, {33,43}, {54,25}, {70,26}, {70,27}, {70,28}, {27,73}, {34,68}, + {31,33}, {70,29}, {70,30}, {27,8}, {70,31}, {70,32}, {70,21}, {21,47}, + {70,33}, {70,34}, {70,35}, {26,25}, {20,61}, {33,37}, {16,63}, {70,36}, + {51,20}, {70,37}, {23,30}, {70,39}, {70,38}, {22,75}, {70,40}, {17,87}, + {70,41}, {70,42}, {70,43}, {70,44}, {70,45}, {70,46}, {70,47}, {50,6}, + {42,84}, {70,48}, {70,49}, {70,50}, {70,51}, {40,40}, {70,52}, {70,53}, + {70,54}, {70,55}, {70,56}, {28,40}, {70,57}, {82,29}, {23,54}, {39,16}, + {82,30}, {82,31}, {82,32}, {24,61}, {44,87}, {55,71}, {25,16}, {33,61}, + {77,22}, {22,2}, {77,24}, {77,23}, {15,52}, {77,26}, {52,53}, {54,78}, + {53,34}, {77,28}, {41,79}, {77,27}, {77,29}, {77,31}, {77,30}, {48,81}, + {38,27}, {34,31}, {23,64}, {32,70}, {83,37}, {47,62}, {83,38}, {46,58}, + {39,25}, {83,39}, {83,40}, {83,41}, {83,42}, {56,89}, {23,93}, {68,80}, + {50,79}, {83,63}, {45,43}, {18,64}, {80,19}, {49,77}, {83,64}, {46,71}, + {83,65}, {38,43}, {20,51}, {19,67}, {83,67}, {83,66}, {83,68}, {83,69}, + {83,70}, {25,17}, {15,30}, {83,71}, {22,12}, {49,76}, {49,10}, {31,46}, + {30,27}, {74,2}, {52,62}, {73,39}, {80,82}, {21,87}, {42,2}, {35,44}, + {80,70}, {80,71}, {23,90}, {80,72}, {25,35}, {51,36}, {15,49}, {80,73}, + {80,74}, {80,75}, {80,76}, {80,77}, {80,78}, {80,80}, {80,79}, {36,52}, + {80,81}, {21,89}, {80,83}, {49,13}, {61,38}, {42,41}, {18,59}, {20,1}, + {24,1}, {35,83}, {80,84}, {80,85}, {32,35}, {32,90}, {53,15}, {80,86}, + {80,87}, {32,9}, {37,23}, {29,58}, {80,88}, {19,46}, {80,89}, {76,17}, + {76,16}, {42,63}, {49,61}, {42,32}, {52,55}, {39,65}, {31,62}, {27,0}, + {74,32}, {47,3}, {53,65}, {21,38}, {23,55}, {74,31}, {23,45}, {74,30}, + {18,5}, {24,40}, {53,10}, {22,83}, {22,41}, {27,70}, {22,29}, {74,37}, + {74,38}, {15,24}, {30,46}, {74,36}, {50,92}, {74,39}, {74,40}, {22,45}, + {74,33}, {74,35}, {40,85}, {53,54}, {52,44}, {47,17}, {74,46}, {45,23}, + {74,47}, {20,7}, {16,18}, {74,49}, {43,4}, {36,53}, {74,50}, {74,48}, + {36,62}, {74,45}, {41,3}, {74,52}, {15,90}, {25,89}, {55,22}, {80,66}, + {74,41}, {74,42}, {74,43}, {74,44}, {74,53}, {69,31}, {74,56}, {30,71}, + {49,39}, {74,54}, {74,59}, {23,75}, {74,55}, {28,25}, {47,55}, {15,22}, + {74,60}, {35,59}, {53,11}, {19,63}, {33,85}, {27,24}, {74,57}, {74,58}, + {51,63}, {37,73}, {35,51}, {74,62}, {36,6}, {56,84}, {17,16}, {74,67}, + {28,36}, {74,65}, {74,66}, {23,11}, {44,48}, {74,68}, {74,64}, {32,18}, + {37,1}, {43,82}, {74,69}, {31,15}, {49,23}, {74,70}, {23,14}, {23,12}, + {74,71}, {38,26}, {44,82}, {74,73}, {74,74}, {74,76}, {47,39}, {74,81}, + {74,77}, {74,80}, {39,88}, {48,91}, {74,75}, {74,72}, {23,24}, {46,56}, + {35,68}, {74,78}, {74,79}, {43,57}, {44,39}, {15,81}, {74,85}, {74,84}, + {17,17}, {23,63}, {74,86}, {16,75}, {43,36}, {35,3}, {46,4}, {74,88}, + {75,1}, {36,81}, {74,89}, {40,36}, {65,62}, {74,93}, {44,45}, {75,0}, + {16,58}, {50,22}, {49,59}, {74,92}, {74,90}, {18,27}, {73,15}, {54,51}, + {83,10}, {18,83}, {53,32}, {53,33}, {52,72}, {29,41}, {83,6}, {49,7}, + {83,7}, {83,8}, {83,9}, {29,42}, {50,62}, {40,63}, {40,64}, {82,33}, + {41,69}, {43,81}, {65,21}, {42,19}, {45,71}, {53,58}, {83,12}, {83,13}, + {83,14}, {83,17}, {25,28}, {83,18}, {15,66}, {83,15}, {83,16}, {28,1}, + {17,52}, {83,21}, {83,22}, {21,69}, {17,15}, {46,46}, {83,19}, {19,11}, + {83,20}, {83,23}, {83,24}, {44,6}, {83,25}, {83,26}, {83,27}, {42,49}, + {83,28}, {83,29}, {83,30}, {83,61}, {32,27}, {27,71}, {40,10}, {48,61}, + {68,84}, {59,18}, {49,52}, {59,19}, {15,11}, {59,20}, {28,57}, {59,24}, + {55,33}, {59,22}, {50,82}, {40,53}, {59,25}, {59,21}, {59,26}, {34,1}, + {59,27}, {59,36}, {59,28}, {45,62}, {53,4}, {59,46}, {59,44}, {59,49}, + {28,69}, {33,10}, {59,23}, {59,42}, {59,45}, {59,29}, {22,49}, {15,36}, + {59,38}, {47,29}, {59,32}, {26,7}, {22,27}, {59,43}, {59,37}, {59,30}, + {38,58}, {48,30}, {59,31}, {59,41}, {59,47}, {45,12}, {59,33}, {59,34}, + {59,39}, {59,40}, {17,51}, {59,48}, {42,52}, {51,22}, {59,58}, {59,62}, + {43,5}, {59,69}, {34,70}, {59,59}, {30,32}, {59,56}, {15,89}, {24,21}, + {59,68}, {59,50}, {59,35}, {59,53}, {39,83}, {30,63}, {40,26}, {16,28}, + {50,1}, {59,57}, {59,52}, {37,26}, {59,61}, {54,33}, {34,14}, {22,21}, + {38,48}, {34,8}, {59,65}, {59,55}, {59,74}, {59,51}, {59,60}, {29,4}, + {59,54}, {59,63}, {59,66}, {59,67}, {59,87}, {59,64}, {60,1}, {59,70}, + {27,74}, {19,35}, {34,2}, {17,70}, {59,89}, {59,81}, {59,78}, {59,91}, + {59,77}, {49,79}, {17,71}, {39,54}, {39,66}, {59,90}, {59,76}, {59,86}, + {59,84}, {29,2}, {59,83}, {17,60}, {59,82}, {27,85}, {59,71}, {26,35}, + {31,82}, {27,51}, {59,72}, {59,73}, {59,80}, {59,85}, {59,88}, {20,19}, + {39,56}, {26,70}, {59,93}, {59,92}, {50,10}, {60,0}, {60,2}, {60,4}, + {49,80}, {60,3}, {60,5}, {60,6}, {49,8}, {25,40}, {60,8}, {60,21}, + {60,16}, {60,19}, {60,15}, {37,45}, {31,81}, {40,14}, {59,75}, {60,13}, + {60,22}, {59,79}, {60,14}, {60,23}, {60,11}, {60,24}, {60,18}, {60,12}, + {35,9}, {60,7}, {31,18}, {32,10}, {60,9}, {60,10}, {60,17}, {26,80}, + {60,20}, {50,7}, {60,25}, {60,26}, {34,6}, {60,49}, {60,27}, {60,48}, + {24,28}, {29,52}, {29,89}, {25,41}, {60,41}, {60,36}, {60,30}, {17,42}, + {60,34}, {60,42}, {17,3}, {60,52}, {60,29}, {37,47}, {60,47}, {60,51}, + {32,65}, {22,37}, {60,45}, {60,46}, {60,35}, {60,28}, {60,44}, {43,48}, + {60,40}, {60,33}, {34,39}, {37,27}, {45,13}, {60,43}, {60,39}, {60,32}, + {60,37}, {33,59}, {50,8}, {50,9}, {60,50}, {46,83}, {39,87}, {60,69}, + {60,38}, {60,63}, {33,67}, {60,64}, {60,54}, {53,87}, {60,56}, {60,55}, + {23,79}, {60,53}, {37,46}, {21,12}, {60,65}, {25,88}, {51,64}, {60,70}, + {19,47}, {60,57}, {30,90}, {60,66}, {60,62}, {60,60}, {20,56}, {60,58}, + {60,59}, {60,61}, {28,14}, {60,67}, {60,68}, {60,84}, {34,40}, {42,65}, + {60,81}, {55,64}, {37,48}, {60,83}, {52,83}, {60,82}, {60,79}, {60,75}, + {60,78}, {60,71}, {47,77}, {39,55}, {60,77}, {60,72}, {60,73}, {42,81}, + {60,76}, {16,44}, {31,21}, {27,26}, {60,80}, {60,86}, {60,85}, {60,74}, + {36,77}, {60,90}, {61,3}, {61,2}, {60,87}, {34,78}, {33,90}, {52,64}, + {45,20}, {60,92}, {17,43}, {35,71}, {41,62}, {38,29}, {60,89}, {60,91}, + {60,93}, {61,1}, {15,9}, {16,45}, {61,11}, {61,5}, {28,21}, {39,78}, + {61,0}, {61,4}, {61,8}, {61,7}, {61,6}, {61,12}, {51,43}, {61,18}, + {61,9}, {61,13}, {31,56}, {16,0}, {61,21}, {61,16}, {61,17}, {48,5}, + {61,20}, {61,14}, {61,15}, {47,28}, {61,19}, {41,76}, {61,24}, {61,23}, + {61,22}, {61,26}, {28,68}, {17,55}, {34,73}, {61,25}, {36,25}, {61,27}, + {43,56}, {22,9}, {51,68}, {61,28}, {61,30}, {35,1}, {61,32}, {61,29}, + {61,31}, {52,25}, {61,33}, {81,13}, {26,1}, {33,17}, {36,15}, {33,38}, + {81,14}, {47,72}, {50,60}, {74,28}, {18,69}, {81,15}, {81,16}, {41,12}, + {25,70}, {81,18}, {81,20}, {81,19}, {42,67}, {46,25}, {81,17}, {41,19}, + {49,46}, {33,75}, {45,34}, {81,23}, {15,85}, {81,22}, {81,29}, {17,46}, + {48,32}, {81,25}, {81,27}, {51,72}, {81,26}, {81,21}, {81,30}, {81,28}, + {81,24}, {81,38}, {81,35}, {81,37}, {81,41}, {81,33}, {81,31}, {81,36}, + {53,90}, {81,32}, {38,88}, {40,62}, {81,39}, {24,37}, {20,15}, {81,34}, + {81,40}, {81,47}, {81,53}, {26,54}, {81,52}, {44,59}, {53,74}, {81,49}, + {81,51}, {23,81}, {81,42}, {81,45}, {33,88}, {52,60}, {81,43}, {81,44}, + {81,46}, {81,50}, {81,56}, {50,27}, {21,73}, {41,80}, {22,67}, {81,54}, + {81,55}, {81,57}, {81,60}, {81,58}, {81,59}, {48,48}, {81,48}, {44,40}, + {45,46}, {53,8}, {81,66}, {34,58}, {81,63}, {31,14}, {81,75}, {81,61}, + {81,64}, {81,71}, {81,65}, {81,70}, {81,69}, {81,72}, {81,62}, {81,67}, + {81,73}, {50,11}, {81,68}, {17,84}, {81,81}, {47,10}, {81,84}, {26,39}, + {81,88}, {81,79}, {81,85}, {81,87}, {81,89}, {81,82}, {81,80}, {25,90}, + {20,90}, {81,78}, {81,86}, {81,76}, {81,77}, {81,74}, {82,5}, {82,2}, + {82,1}, {81,83}, {39,57}, {81,90}, {82,4}, {34,87}, {81,92}, {82,6}, + {82,8}, {82,3}, {81,91}, {82,10}, {82,9}, {33,60}, {82,13}, {82,15}, + {82,0}, {82,16}, {82,11}, {82,14}, {81,93}, {82,12}, {82,17}, {82,19}, + {82,7}, {82,18}, {82,20}, {47,22}, {82,23}, {56,88}, {82,24}, {82,22}, + {39,67}, {82,21}, {82,25}, {82,26}, {19,31}, {77,34}, {82,27}, {82,28}, + {48,9}, {83,11}, {47,37}, {47,47}, {48,59}, {46,45}, {28,53}, {48,34}, + {25,65}, {64,72}, {49,33}, {80,33}, {17,24}, {16,76}, {80,34}, {40,31}, + {18,35}, {56,81}, {42,4}, {80,35}, {53,51}, {80,36}, {83,31}, {80,37}, + {51,11}, {80,38}, {15,31}, {83,32}, {83,33}, {19,91}, {36,58}, {43,26}, + {47,67}, {44,63}, {80,39}, {56,82}, {16,26}, {46,13}, {23,3}, {80,41}, + {80,42}, {17,34}, {32,48}, {54,15}, {80,40}, {80,43}, {80,45}, {56,85}, + {49,64}, {51,2}, {83,34}, {39,24}, {83,35}, {80,44}, {80,46}, {30,66}, + {80,47}, {80,51}, {80,53}, {80,48}, {40,48}, {36,64}, {33,66}, {24,91}, + {80,50}, {80,52}, {24,50}, {80,58}, {25,53}, {15,92}, {80,56}, {80,55}, + {80,49}, {80,57}, {80,54}, {39,75}, {44,41}, {80,60}, {68,28}, {80,59}, + {80,61}, {80,62}, {46,68}, {83,36}, {28,82}, {80,63}, {80,64}, {45,86}, + {49,9}, {80,90}, {23,17}, {27,90}, {24,58}, {24,69}, {34,56}, {41,50}, + {73,71}, {31,31}, {29,84}, {73,72}, {73,73}, {73,74}, {73,75}, {73,76}, + {73,77}, {73,78}, {28,38}, {84,90}, {84,92}, {84,93}, {84,91}, {28,65}, + {85,0}, {19,4}, {85,1}, {85,2}, {75,17}, {48,51}, {56,73}, {85,3}, + {77,25}, {52,17}, {50,93}, {43,59}, {41,35}, {68,31}, {85,4}, {29,14}, + {37,8}, {57,4}, {27,37}, {21,8}, {23,27}, {39,46}, {27,4}, {57,5}, + {57,6}, {43,53}, {39,34}, {57,7}, {37,92}, {48,20}, {49,72}, {48,21}, + {27,38}, {28,17}, {26,67}, {57,8}, {57,9}, {48,39}, {57,10}, {47,76}, + {21,78}, {33,58}, {42,46}, {22,76}, {40,71}, {22,34}, {29,86}, {53,3}, + {57,11}, {57,12}, {37,31}, {54,70}, {41,21}, {52,8}, {42,62}, {52,78}, + {57,13}, {53,62}, {19,41}, {57,15}, {57,14}, {49,74}, {57,16}, {57,17}, + {57,18}, {41,51}, {57,19}, {41,10}, {57,20}, {57,21}, {18,46}, {53,78}, + {57,22}, {26,15}, {20,13}, {57,23}, {57,24}, {24,77}, {48,14}, {49,71}, + {57,25}, {23,34}, {46,73}, {17,78}, {57,26}, {57,27}, {28,74}, {45,59}, + {50,78}, {57,28}, {45,82}, {57,29}, {50,52}, {26,68}, {57,30}, {42,20}, + {42,47}, {57,31}, {38,74}, {53,77}, {57,32}, {36,20}, {21,32}, {57,33}, + {22,43}, {30,45}, {57,34}, {57,35}, {42,12}, {57,36}, {20,86}, {57,37}, + {32,33}, {54,26}, {57,38}, {43,23}, {49,73}, {35,16}, {57,39}, {20,92}, + {26,48}, {57,40}, {47,18}, {57,41}, {57,42}, {45,28}, {57,43}, {57,44}, + {57,45}, {17,86}, {57,48}, {57,46}, {48,71}, {57,47}, {34,52}, {57,49}, + {57,50}, {57,51}, {57,52}, {47,26}, {49,4}, {15,88}, {57,53}, {38,10}, + {57,54}, {28,86}, {34,0}, {57,55}, {57,56}, {34,92}, {43,22}, {57,57}, + {57,58}, {31,29}, {37,54}, {57,59}, {57,60}, {38,19}, {57,61}, {57,62}, + {24,39}, {26,76}, {21,24}, {83,87}, {83,88}, {44,66}, {84,24}, {74,63}, + {46,82}, {26,30}, {25,31}, {51,4}, {64,56}, {84,83}, {16,9}, {17,81}, + {84,84}, {84,86}, {25,48}, {84,85}, {34,17}, {84,88}, {84,87}, {16,19}, + {52,73}, {23,25}, {24,16}, {17,37}, {51,79}, {46,44}, {15,59}, {52,42}, + {26,84}, {53,41}, {22,22}, {43,15}, {37,21}, {16,64}, {24,25}, {53,91}, + {24,64}, {22,0}, {27,89}, {73,57}, {73,58}, {43,88}, {24,82}, {73,59}, + {19,90}, {34,18}, {22,48}, {25,55}, {73,60}, {51,83}, {73,61}, {27,53}, + {26,62}, {73,62}, {32,61}, {33,23}, {51,62}, {54,41}, {73,63}, {73,64}, + {73,67}, {73,65}, {73,66}, {40,61}, {23,18}, {21,35}, {73,68}, {41,73}, + {40,44}, {19,44}, {65,56}, {36,65}, {73,69}, {31,20}, {54,23}, {73,70}, + {54,11}, {39,91}, {55,50}, {55,44}, {51,61}, {51,88}, {40,35}, {50,13}, + {23,50}, {18,63}, {40,65}, {83,85}, {25,52}, {83,86}, {54,62}, {83,80}, + {23,15}, {52,51}, {23,46}, {37,79}, {18,34}, {83,81}, {18,11}, {51,28}, + {38,86}, {83,83}, {83,82}, {43,42}, {39,3}, {83,84}, {54,66}, {36,30}, + {84,31}, {84,26}, {84,34}, {84,33}, {53,25}, {84,32}, {51,29}, {84,35}, + {84,43}, {15,46}, {20,87}, {84,40}, {84,41}, {36,59}, {84,36}, {84,37}, + {84,38}, {84,42}, {29,63}, {84,39}, {23,89}, {84,47}, {84,50}, {30,70}, + {24,81}, {84,27}, {84,44}, {33,22}, {43,87}, {27,88}, {84,45}, {84,46}, + {84,48}, {21,68}, {84,49}, {84,52}, {84,28}, {84,51}, {50,26}, {18,75}, + {43,3}, {84,53}, {84,54}, {29,64}, {84,55}, {43,62}, {84,58}, {17,39}, + {54,56}, {84,56}, {84,57}, {84,59}, {84,65}, {84,63}, {84,62}, {84,60}, + {84,64}, {84,61}, {84,67}, {84,68}, {43,66}, {68,30}, {20,23}, {84,66}, + {84,71}, {43,2}, {84,69}, {84,70}, {84,29}, {16,35}, {84,30}, {20,36}, + {17,67}, {84,75}, {84,72}, {21,54}, {84,76}, {84,73}, {84,74}, {19,57}, + {51,73}, {84,77}, {18,88}, {84,78}, {84,80}, {84,79}, {84,81}, {84,82}, + {40,76}, {24,9}, {38,90}, {21,66}, {43,40}, {73,5}, {18,20}, {51,93}, + {24,75}, {47,88}, {72,76}, {54,9}, {72,77}, {33,53}, {39,76}, {25,67}, + {72,78}, {72,79}, {72,80}, {53,64}, {72,81}, {72,82}, {72,84}, {72,83}, + {72,85}, {72,86}, {38,64}, {72,87}, {51,55}, {72,88}, {28,45}, {72,89}, + {72,90}, {28,46}, {72,91}, {23,7}, {32,29}, {72,92}, {16,17}, {26,51}, + {24,84}, {72,93}, {73,0}, {73,1}, {73,2}, {22,87}, {27,12}, {41,67}, + {63,45}, {51,14}, {46,28}, {52,22}, {73,3}, {52,61}, {73,4}, {47,32}, + {24,27}, {19,38}, {16,56}, {31,16}, {16,69}, {16,70}, {16,71}, {18,28}, + {39,71}, {68,32}, {16,62}, {32,40}, {19,78}, {38,7}, {50,55}, {37,88}, + {48,23}, {24,92}, {33,84}, {50,12}, {51,42}, {28,91}, {68,33}, {22,20}, + {68,34}, {26,24}, {52,65}, {28,87}, {51,21}, {45,4}, {32,11}, {18,56}, + {43,85}, {68,37}, {68,35}, {68,39}, {68,41}, {68,38}, {20,46}, {37,39}, + {20,91}, {68,36}, {41,85}, {68,40}, {34,51}, {16,36}, {27,2}, {54,22}, + {44,42}, {42,44}, {41,41}, {43,50}, {68,43}, {68,42}, {35,69}, {48,0}, + {48,22}, {68,44}, {68,47}, {44,23}, {53,79}, {68,46}, {20,60}, {44,29}, + {68,48}, {21,25}, {44,7}, {24,67}, {41,36}, {18,48}, {42,56}, {51,75}, + {68,49}, {22,73}, {68,45}, {68,52}, {19,93}, {68,53}, {68,50}, {68,51}, + {49,60}, {33,62}, {16,37}, {50,65}, {21,60}, {42,75}, {68,54}, {50,85}, + {16,72}, {21,83}, {68,57}, {68,55}, {68,56}, {20,31}, {49,36}, {68,59}, + {68,61}, {68,60}, {38,17}, {49,2}, {68,58}, {51,65}, {52,57}, {68,63}, + {54,80}, {68,64}, {16,59}, {48,90}, {68,65}, {68,67}, {68,66}, {68,68}, + {49,55}, {20,42}, {70,62}, {57,84}, {57,87}, {57,85}, {57,86}, {57,89}, + {47,46}, {35,38}, {15,77}, {47,15}, {57,88}, {50,41}, {25,9}, {58,1}, + {38,80}, {57,91}, {57,90}, {40,58}, {57,92}, {58,0}, {54,61}, {57,93}, + {32,57}, {58,4}, {50,83}, {58,6}, {58,3}, {58,7}, {28,27}, {31,40}, + {58,2}, {58,5}, {53,2}, {58,8}, {58,12}, {58,13}, {58,11}, {25,33}, + {30,3}, {58,10}, {58,9}, {51,38}, {17,30}, {58,14}, {24,88}, {58,15}, + {18,26}, {20,5}, {21,27}, {58,16}, {21,84}, {58,17}, {16,40}, {58,19}, + {58,18}, {58,20}, {58,22}, {58,21}, {58,23}, {58,24}, {58,25}, {50,46}, + {83,89}, {38,84}, {54,34}, {36,67}, {83,91}, {83,92}, {83,90}, {29,37}, + {47,78}, {22,50}, {51,44}, {43,9}, {84,1}, {84,0}, {25,7}, {83,93}, + {42,53}, {84,3}, {31,49}, {18,73}, {44,9}, {84,4}, {84,2}, {28,19}, + {84,7}, {84,8}, {28,44}, {34,23}, {30,64}, {42,64}, {84,9}, {84,5}, + {84,6}, {35,79}, {84,11}, {19,27}, {54,76}, {19,54}, {84,10}, {84,13}, + {84,12}, {84,14}, {47,48}, {34,48}, {39,8}, {84,15}, {84,16}, {84,17}, + {84,18}, {84,19}, {84,20}, {84,22}, {84,21}, {84,23}, {17,40}, {50,51}, + {41,44}, {31,78}, {53,55}, {49,15}, {32,30}, {28,79}, {23,9}, {27,87}, + {85,37}, {85,38}, {85,39}, {85,40}, {85,41}, {85,43}, {85,42}, {86,72}, + {85,44}, {85,45}, {77,35}, {77,36}, {77,37}, {52,74}, {21,3}, {77,39}, + {77,38}, {77,40}, {77,41}, {38,4}, {77,42}, {77,43}, {22,15}, {20,85}, + {77,44}, {77,46}, {77,45}, {23,37}, {77,47}, {77,48}, {77,49}, {21,58}, + {18,13}, {53,50}, {35,37}, {16,20}, {23,53}, {77,50}, {77,51}, {51,30}, + {38,52}, {29,90}, {45,56}, {24,18}, {77,53}, {77,52}, {77,55}, {77,54}, + {36,4}, {77,56}, {77,57}, {38,13}, {77,58}, {38,14}, {77,59}, {17,6}, + {77,60}, {77,61}, {77,62}, {77,63}, {77,64}, {54,73}, {77,65}, {77,66}, + {27,55}, {77,67}, {50,42}, {43,89}, {17,11}, {32,68}, {77,68}, {38,5}, + {34,12}, {77,69}, {77,70}, {77,71}, {77,72}, {77,73}, {77,74}, {77,75}, + {77,76}, {77,77}, {77,78}, {77,79}, {77,80}, {77,81}, {77,83}, {77,82}, + {77,84}, {44,12}, {33,32}, {77,85}, {77,86}, {77,87}, {52,0}, {77,88}, + {46,18}, {77,89}, {77,90}, {77,91}, {77,92}, {78,0}, {77,93}, {78,1}, + {23,84}, {34,89}, {78,2}, {78,3}, {28,33}, {49,30}, {17,88}, {78,4}, + {78,5}, {78,6}, {49,87}, {78,7}, {53,92}, {78,8}, {37,43}, {78,9}, + {78,10}, {32,19}, {78,11}, {46,89}, {42,87}, {78,13}, {78,12}, {18,89}, + {24,87}, {78,14}, {78,15}, {47,65}, {78,16}, {78,17}, {22,69}, {47,30}, + {78,18}, {78,19}, {78,20}, {39,80}, {43,63}, {78,21}, {78,22}, {78,23}, + {78,24}, {78,25}, {52,63}, {78,26}, {19,76}, {34,9}, {78,27}, {78,28}, + {78,29}, {78,30}, {45,92}, {78,31}, {33,63}, {19,23}, {54,21}, {28,84}, + {46,38}, {78,34}, {78,32}, {78,33}, {78,35}, {21,6}, {27,91}, {29,65}, + {34,43}, {78,36}, {78,37}, {78,38}, {78,46}, {78,39}, {78,40}, {78,41}, + {38,33}, {78,80}, {21,44}, {78,42}, {78,43}, {78,44}, {21,37}, {34,29}, + {78,45}, {78,47}, {78,48}, {78,49}, {52,81}, {78,50}, {35,86}, {78,51}, + {35,87}, {78,52}, {78,53}, {23,67}, {15,86}, {78,54}, {78,55}, {78,56}, + {78,57}, {78,58}, {78,59}, {78,60}, {78,61}, {29,20}, {78,64}, {78,62}, + {78,63}, {78,65}, {78,66}, {32,44}, {78,67}, {78,68}, {78,69}, {78,70}, + {78,71}, {78,72}, {78,73}, {78,74}, {78,75}, {31,55}, {78,76}, {32,12}, + {78,77}, {78,78}, {78,79}, {46,65}, {18,3}, {34,36}, {66,36}, {40,32}, + {66,37}, {16,52}, {45,41}, {19,18}, {39,81}, {66,38}, {46,47}, {66,39}, + {27,67}, {66,40}, {66,41}, {34,37}, {52,1}, {35,53}, {24,74}, {45,36}, + {66,42}, {34,85}, {66,43}, {22,6}, {23,82}, {25,49}, {66,44}, {66,45}, + {51,35}, {66,46}, {66,47}, {48,42}, {66,48}, {66,49}, {66,50}, {66,51}, + {48,53}, {66,52}, {17,90}, {31,26}, {66,53}, {31,10}, {66,54}, {66,55}, + {66,56}, {66,57}, {66,58}, {23,22}, {57,65}, {21,50}, {57,67}, {57,66}, + {57,69}, {39,77}, {57,68}, {22,31}, {48,83}, {49,84}, {52,82}, {28,54}, + {54,71}, {57,71}, {57,70}, {15,1}, {44,50}, {57,72}, {23,28}, {27,41}, + {33,28}, {33,3}, {18,33}, {57,73}, {33,9}, {35,15}, {28,20}, {46,61}, + {57,74}, {40,33}, {16,60}, {57,75}, {21,23}, {51,25}, {18,92}, {57,76}, + {51,40}, {46,52}, {36,66}, {57,77}, {57,78}, {57,79}, {32,73}, {43,52}, + {46,60}, {50,70}, {33,0}, {57,80}, {42,68}, {57,81}, {42,69}, {49,93}, + {23,83}, {57,82}, {15,14}, {46,21}, {52,46}, {42,76}, {57,83}, {66,35}, + {32,4}, {85,30}, {85,31}, {85,32}, {35,48}, {39,23}, {48,66}, {47,58}, + {48,36}, {27,14}, {24,44}, {78,83}, {19,37}, {50,25}, {85,33}, {18,90}, + {85,34}, {20,80}, {85,36}, {50,73}, {85,6}, {48,8}, {85,8}, {85,7}, + {32,66}, {31,54}, {16,1}, {45,76}, {47,71}, {85,10}, {46,85}, {85,9}, + {52,79}, {85,11}, {34,24}, {26,83}, {85,13}, {85,12}, {35,61}, {32,55}, + {42,9}, {46,27}, {85,14}, {85,15}, {85,16}, {33,21}, {15,51}, {36,88}, + {85,17}, {38,63}, {85,5}, {29,23}, {29,17}, {20,68}, {22,38}, {30,30}, + {34,49}, {34,69}, {55,43}, {23,78}, {28,88}, {48,4}, {15,47}, {86,15}, + {86,16}, {47,11}, {15,15}, {86,17}, {86,18}, {86,19}, {38,41}, {29,46}, + {86,22}, {86,21}, {16,61}, {86,20}, {86,23}, {86,24}, {45,3}, {39,44}, + {25,10}, {71,23}, {71,24}, {71,25}, {29,33}, {49,83}, {51,46}, {40,55}, + {49,18}, {21,4}, {38,73}, {80,91}, {46,77}, {42,18}, {47,74}, {70,78}, + {44,70}, {24,42}, {21,56}, {80,92}, {15,67}, {42,43}, {80,93}, {51,3}, + {33,12}, {32,75}, {37,35}, {29,16}, {81,0}, {27,52}, {81,1}, {81,2}, + {81,3}, {49,34}, {37,20}, {44,38}, {81,4}, {50,16}, {30,36}, {43,65}, + {81,5}, {81,6}, {48,52}, {21,77}, {81,7}, {81,8}, {20,62}, {81,9}, + {81,10}, {17,91}, {81,11}, {81,12}, {39,6}, {22,70}, {75,8}, {75,9}, + {75,10}, {75,11}, {37,13}, {75,12}, {75,13}, {22,40}, {41,18}, {65,23}, + {86,46}, {86,47}, {17,44}, {86,48}, {86,50}, {86,49}, {65,26}, {27,1}, + {65,27}, {65,28}, {65,29}, {65,30}, {65,31}, {65,32}, {22,24}, {49,90}, + {28,3}, {41,45}, {16,4}, {42,38}, {65,33}, {21,91}, {39,35}, {65,34}, + {28,39}, {16,92}, {65,35}, {21,85}, {65,36}, {35,56}, {65,37}, {46,57}, + {24,60}, {65,38}, {31,0}, {65,39}, {17,85}, {65,40}, {32,82}, {65,41}, + {65,42}, {33,87}, {65,43}, {65,44}, {65,45}, {41,54}, {55,23}, {56,68}, + {46,66}, {79,4}, {59,15}, {33,76}, {51,5}, {44,51}, {48,16}, {18,58}, + {38,92}, {17,20}, {33,30}, {69,63}, {41,26}, {69,64}, {69,65}, {29,51}, + {69,66}, {54,3}, {44,52}, {69,68}, {27,60}, {69,67}, {69,69}, {69,70}, + {33,77}, {28,29}, {69,71}, {33,69}, {25,6}, {69,72}, {69,73}, {18,49}, + {48,72}, {30,4}, {69,74}, {37,78}, {69,75}, {69,76}, {69,77}, {37,12}, + {69,78}, {40,6}, {69,79}, {69,80}, {69,81}, {68,24}, {69,82}, {69,83}, + {33,65}, {69,84}, {69,85}, {53,71}, {69,86}, {69,87}, {24,38}, {86,26}, + {86,25}, {86,29}, {86,27}, {25,0}, {86,30}, {86,31}, {86,33}, {86,32}, + {86,35}, {86,34}, {86,36}, {86,37}, {86,38}, {42,71}, {23,62}, {86,51}, + {86,52}, {86,53}, {86,55}, {86,57}, {86,54}, {86,58}, {86,56}, {54,54}, + {86,59}, {86,60}, {86,61}, {86,62}, {86,63}, {58,42}, {55,9}, {68,86}, + {24,76}, {30,92}, {26,73}, {86,40}, {37,38}, {86,39}, {86,41}, {86,43}, + {86,42}, {86,44}, {45,25}, {86,45}, {35,6}, {50,66}, {85,46}, {33,18}, + {85,47}, {85,48}, {85,49}, {85,50}, {85,51}, {85,53}, {16,10}, {85,54}, + {85,55}, {85,56}, {85,57}, {85,58}, {85,59}, {85,60}, {85,61}, {46,41}, + {85,62}, {85,63}, {85,64}, {85,65}, {85,66}, {85,67}, {31,79}, {85,68}, + {85,69}, {85,70}, {85,71}, {85,72}, {85,73}, {85,74}, {85,75}, {85,76}, + {85,77}, {85,78}, {85,79}, {85,80}, {85,81}, {85,82}, {85,83}, {29,7}, + {85,84}, {85,85}, {85,86}, {85,87}, {39,89}, {85,88}, {85,89}, {85,90}, + {85,91}, {85,92}, {85,93}, {86,0}, {86,1}, {86,2}, {86,3}, {86,4}, + {86,5}, {86,6}, {86,7}, {16,77}, {86,8}, {86,9}, {86,10}, {86,11}, + {86,12}, {32,58}, {86,13}, {86,14}, {35,80}, {79,14}, {27,5}, {79,15}, + {34,88}, {36,23}, {48,26}, {79,16}, {79,17}, {79,18}, {79,19}, {79,20}, + {48,27}, {48,75}, {79,22}, {79,21}, {51,6}, {44,49}, {79,23}, {79,25}, + {79,24}, {79,26}, {79,27}, {23,74}, {79,28}, {25,71}, {79,29}, {79,30}, + {29,72}, {79,31}, {21,75}, {79,32}, {79,33}, {79,34}, {79,35}, {39,20}, + {79,36}, {79,37}, {79,38}, {36,83}, {79,39}, {79,40}, {79,41}, {86,28}, + {79,42}, {79,43}, {79,44}, {79,45}, {79,46}, {25,54}, {79,47}, {79,48}, + {79,49}, {79,50}, {79,51}, {79,52}, {79,53}, {79,55}, {50,4}, {79,54}, + {79,56}, {84,25}, {33,24}, {86,67}, {86,68}, {86,69}, {86,70}, {86,71}, + {33,19}, {86,73}, {86,74}, {33,82}, {83,79}, {83,78}, {33,72}, {86,64}, + {86,65}, {26,37}, {56,67}, {41,81}, {31,71}, {79,3}, {25,57}, {38,12}, + {35,11}, {86,75}, {86,76}, {86,77}, {86,79}, {86,78}, {86,80}, {86,83}, + {86,82}, {86,81}, {86,84}, {86,85}, {76,72}, {76,73}, {76,74}, {85,27}, + {85,28}, {85,29}, {21,5}, {55,29}, {24,35}, {55,26}, {59,16}, {41,82}, + {86,86}, {86,87}, {86,88}, {86,90}, {86,89}, {16,38}, {86,91}, {86,92}, + {86,93}, {37,74}, {75,19}, {18,60}, {85,18}, {85,19}, {32,67}, {85,20}, + {85,21}, {85,22}, {85,23}, {85,24}, {85,25}, {39,2}, {85,26}, {32,89}, + {24,7}, {76,71}, {24,73}, {56,62}, {2,0}, {2,1}, {2,2}, {0,70}, {2,4}, + {2,5}, {2,6}, {2,7}, {2,8}, {2,9}, {2,10}, {2,11}, {2,12}, {2,13}, + {2,14}, {2,15}, {2,16}, {2,17}, {2,18}, {2,19}, {2,20}, {2,21}, {2,22}, + {2,23}, {2,24}, {2,25}, {2,26}, {2,27}, {2,28}, {2,29}, {2,30}, {2,31}, + {2,32}, {2,33}, {2,34}, {2,35}, {2,36}, {2,37}, {2,38}, {2,39}, {2,40}, + {2,41}, {2,42}, {2,43}, {2,44}, {2,45}, {2,46}, {2,47}, {2,48}, {2,49}, + {2,50}, {2,51}, {2,52}, {2,53}, {2,54}, {2,55}, {2,56}, {2,57}, {2,58}, + {2,59}, {2,60}, {2,61}, {2,62}, {2,63}, {2,64}, {2,65}, {2,66}, {2,67}, + {2,68}, {2,69}, {2,70}, {2,71}, {2,72}, {2,73}, {2,74}, {2,75}, {2,76}, + {2,77}, {2,78}, {2,79}, {2,80}, {2,81}, {2,82}, {2,83}, {2,84}, {2,85}, + {2,86}, {2,87}, {2,88}, {2,89}, {2,90}, {2,91}, {2,92}, {0,10}, {0,72}, + {0,73}, {2,93}, {2,3} +}; + +/* This returns ERROR if the code point doesn't exist. */ +long int gb2312_to_unicode(int r, int c) +{ + assert(r >= 0 && r < 94); + assert(c >= 0 && c < 94); + return gb2312_forward[r][c]; +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_gb2312(long int unicode, int *r, int *c) +{ + int rr, cc; + long int uu; + int i, j, k; + + i = -1; + j = lenof(gb2312_backward); + while (j - i > 1) { + k = (i + j) / 2; + rr = gb2312_backward[k].r; + cc = gb2312_backward[k].c; + uu = gb2312_forward[rr][cc]; + if (unicode > uu) + i = k; + else if (unicode < uu) + j = k; + else { + *r = rr; + *c = cc; + return 1; + } + } + return 0; +} + +#ifdef TESTMODE + +#include <stdio.h> + +int main(void) +{ + int r, c, rr, cc, ret; + long int u, uu; + + for (r = 0; r < 94; r++) { + for (c = 0; c < 94; c++) { + u = gb2312_to_unicode(r, c); + if (u != ERROR) { + ret = unicode_to_gb2312(u, &rr, &cc); + if (!ret) + printf("(%d,%d) -> U-%08lx but didn't convert back\n", + r, c, u); + else if (rr != r || cc != c) + printf("(%d,%d) -> U-%08lx -> (%d,%d)\n", + r, c, u, rr, cc); + } + } + } + + for (u = 0; u < 0x10000L; u++) { + ret = unicode_to_gb2312(u, &r, &c); + if (ret) { + uu = gb2312_to_unicode(r, c); + if (uu == ERROR) + printf("U-%08lx -> (%d,%d) but didn't convert back\n", + u, r, c); + else if (uu != u) + printf("U-%08lx -> (%d,%d) -> U-%08lx\n", u, r, c, uu); + } + } + + return 0; +} + +#endif diff --git a/app/tools/halibut/charset/hz.c b/app/tools/halibut/charset/hz.c new file mode 100644 index 0000000..1266e7e --- /dev/null +++ b/app/tools/halibut/charset/hz.c @@ -0,0 +1,142 @@ +/* + * hz.c - HZ textual encoding of ASCII and GB2312, as defined in RFC 1843. + */ + +#ifndef ENUM_CHARSETS + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +static void read_hz(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + /* + * When reading, our state variables are: + * + * - s0 is 0 in ASCII mode, 1 in GB2312 mode. + * + * - s1 stores a character we have just seen but not fully + * processed. So in ASCII mode, this can only ever be zero + * (no character) or 0x7E (~); in GB2312 mode it can be + * anything from 0x21-0x7E. + */ + + UNUSEDARG(charset); + + if (state->s0 == 0) { + /* + * ASCII mode. + */ + + if (state->s1) { + assert(state->s1 == '~'); + state->s1 = 0; + /* Process the character after a tilde. */ + switch (input_chr) { + case '~': + emit(emitctx, input_chr); + return; + case '\n': + return; /* ~\n is ignored */ + case '{': + state->s0 = 1; /* switch to GB2312 mode */ + return; + } + } else if (input_chr == '~') { + state->s1 = '~'; + return; + } else { + /* In ASCII mode, any non-tildes go straight */ + emit(emitctx, input_chr); + return; + } + } else { + /* + * GB2312 mode. As I understand it, we expect never to see + * anything in this mode that isn't 0x21-0x7E. So if we do, + * we'll simply throw an error and return to ASCII mode. + */ + if (input_chr < 0x21 || input_chr > 0x7E) { + emit(emitctx, ERROR); + state->s0 = state->s1 = 0; + return; + } + + /* + * So if we don't have a character stored already, store + * this one... + */ + if (!state->s1) { + state->s1 = input_chr; + return; + } + + /* + * ... otherwise, combine the stored char with this one. + * This will give either `~}', the escape sequence to + * return to ASCII mode, or something which we translate + * through GB2312. + */ + if (state->s1 == '~' && input_chr == '}') { + state->s1 = state->s0 = 0; + return; + } + + emit(emitctx, gb2312_to_unicode(state->s1 - 0x21, input_chr - 0x21)); + state->s1 = 0; + } +} + +static int write_hz(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + int desired_state, r, c; + + UNUSEDARG(charset); + + /* + * Analyse the input char. + */ + if (input_chr < 0x80) { + desired_state = 0; + c = input_chr; + } else if (unicode_to_gb2312(input_chr, &r, &c)) { + desired_state = 1; + } else { + return FALSE; + } + + if (state->s0 != (unsigned)desired_state) { + emit(emitctx, '~'); + emit(emitctx, desired_state ? '{' : '}'); + state->s0 = desired_state; + } + + if (input_chr < 0) + return TRUE; /* special case: just reset state */ + + if (state->s0) { + /* + * GB mode. + */ + emit(emitctx, 0x21 + r); + emit(emitctx, 0x21 + c); + } else { + emit(emitctx, c); + } + return TRUE; +} + +const charset_spec charset_CS_HZ = { + CS_HZ, read_hz, write_hz, NULL +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_HZ) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/internal.h b/app/tools/halibut/charset/internal.h new file mode 100644 index 0000000..5d215a5 --- /dev/null +++ b/app/tools/halibut/charset/internal.h @@ -0,0 +1,126 @@ +/* + * internal.h - internal header stuff for the charset library. + */ + +#ifndef charset_internal_h +#define charset_internal_h + +/* This invariably comes in handy */ +#define lenof(x) ( sizeof((x)) / sizeof(*(x)) ) + +/* This is an invalid Unicode value used to indicate an error. */ +#define ERROR 0xFFFFL /* Unicode value representing error */ + +#undef TRUE +#define TRUE 1 +#undef FALSE +#define FALSE 0 + +typedef struct charset_spec charset_spec; +typedef struct sbcs_data sbcs_data; + +struct charset_spec { + int charset; /* numeric identifier */ + + /* + * A function to read the character set and output Unicode + * characters. The `emit' function expects to get Unicode chars + * passed to it; it should be sent ERROR for any encoding error + * on the input. + */ + void (*read)(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx); + /* + * A function to read Unicode characters and output in this + * character set. The `emit' function expects to get byte + * values passed to it. + * + * A non-representable input character should cause a FALSE + * return, _before_ `emit' is called. Successful conversion + * causes a TRUE return. + * + * If `input_chr' is -1, this function must revert the encoding + * state to any default required at the end of a piece of + * encoded text. + */ + int (*write)(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx); + void const *data; +}; + +/* + * This is the format of `data' used by the SBCS read and write + * functions; so it's the format used in all SBCS definitions. + */ +struct sbcs_data { + /* + * This is a simple mapping table converting each SBCS position + * to a Unicode code point. Some positions may contain ERROR, + * indicating that that byte value is not defined in the SBCS + * in question and its occurrence in input is an error. + */ + unsigned long sbcs2ucs[256]; + + /* + * This lookup table is used to convert Unicode back to the + * SBCS. It consists of the valid byte values in the SBCS, + * sorted in order of their Unicode translation. So given a + * Unicode value U, you can do a binary search on this table + * using the above table as a lookup: when testing the Xth + * position in this table, you branch according to whether + * sbcs2ucs[ucs2sbcs[X]] is less than, greater than, or equal + * to U. + * + * Note that since there may be fewer than 256 valid byte + * values in a particular SBCS, we must supply the length of + * this table as well as the contents. + */ + unsigned char ucs2sbcs[256]; + int nvalid; +}; + +/* + * Prototypes for internal library functions. + */ +charset_spec const *charset_find_spec(int charset); +void read_sbcs(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx); +int write_sbcs(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx); +long int sbcs_to_unicode(const struct sbcs_data *sd, long int input_chr); +long int sbcs_from_unicode(const struct sbcs_data *sd, long int input_chr); + +void read_utf8(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx); +int write_utf8(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx); + +long int big5_to_unicode(int r, int c); +int unicode_to_big5(long int unicode, int *r, int *c); +long int cns11643_to_unicode(int p, int r, int c); +int unicode_to_cns11643(long int unicode, int *p, int *r, int *c); +long int cp949_to_unicode(int r, int c); +int unicode_to_cp949(long int unicode, int *r, int *c); +long int ksx1001_to_unicode(int r, int c); +int unicode_to_ksx1001(long int unicode, int *r, int *c); +long int gb2312_to_unicode(int r, int c); +int unicode_to_gb2312(long int unicode, int *r, int *c); +long int jisx0208_to_unicode(int r, int c); +int unicode_to_jisx0208(long int unicode, int *r, int *c); +long int jisx0212_to_unicode(int r, int c); +int unicode_to_jisx0212(long int unicode, int *r, int *c); + +/* + * Placate compiler warning about unused parameters, of which we + * expect to have some in this library. + */ +#define UNUSEDARG(x) ( (x) = (x) ) + +#endif /* charset_internal_h */ diff --git a/app/tools/halibut/charset/iso2022.c b/app/tools/halibut/charset/iso2022.c new file mode 100644 index 0000000..8cf3c25 --- /dev/null +++ b/app/tools/halibut/charset/iso2022.c @@ -0,0 +1,1385 @@ +/* + * iso2022.c - support for ISO/IEC 2022 (alias ECMA-35). + * + * This isn't a complete implementation of ISO/IEC 2022, but it's + * close. It can decode 8-bit and 7-bit versions, with support for + * single-byte and multi-byte character sets, all four containers + * (G0, G1, G2, and G3), using both single-shift and locking-shift + * sequences. + * + * The general principle is that any valid ISO/IEC 2022 sequence + * should either be correctly decoded or should emit an ERROR. The + * only exception to this is that the C0 and C1 sets are fixed as + * those of ISO/IEC 6429. Escape sequences for designating control + * sets are passed through, so a post-processor could fix them up if + * necessary. + * + * DOCS to UTF-8 works. Other DOCS sequences are ignored, which will + * produce surprising results. + */ + +#ifndef ENUM_CHARSETS + +#include <assert.h> +#include <string.h> + +#include "charset.h" +#include "internal.h" +#include "sbcsdat.h" + +#define LS1 (0x0E) +#define LS0 (0x0F) +#define ESC (0x1B) +#define SS2 (0x8E) +#define SS3 (0x8F) + +enum {S4, S6, M4, M6}; + +static long int emacs_big5_1_to_unicode(int, int); +static long int emacs_big5_2_to_unicode(int, int); +static int unicode_to_emacs_big5(long int, int *, int *, int *); +static long int cns11643_1_to_unicode(int, int); +static long int cns11643_2_to_unicode(int, int); +static long int cns11643_3_to_unicode(int, int); +static long int cns11643_4_to_unicode(int, int); +static long int cns11643_5_to_unicode(int, int); +static long int cns11643_6_to_unicode(int, int); +static long int cns11643_7_to_unicode(int, int); +static long int null_dbcs_to_unicode(int, int); +static int unicode_to_null_dbcs(long int, int *, int *); + +typedef int (*to_dbcs_t)(long int, int *, int *); +typedef int (*to_dbcs_planar_t)(long int, int *, int *, int *); + +/* + * These macros cast between to_dbcs_planar_t and to_dbcs_t, in + * such a way as to cause a compile-time error if the input is not + * of the appropriate type. + * + * Defining these portably is quite fiddly. My first effort was as + * follows: + * #define DEPLANARISE(x) ( (x) == (to_dbcs_planar_t)NULL, (to_dbcs_t)(x) ) + * + * so that the comparison on the left of the comma provokes the + * type check error, and the cast on the right is the actual + * desired result. + * + * gcc was entirely happy with this. However, when used in a static + * initialiser, MSVC objected - justifiably - that the first half + * of the comma expression wasn't constant and thus the expression + * as a whole was not a constant expression. We can get round this + * by enclosing the comparison in `sizeof', so that it isn't + * actually evaluated. + * + * But then we run into a second problem, which is that C actually + * disallows the use of the comma operator within a constant + * expression for any purpose at all! Presumably this is on the + * basis that its purpose is to have side effects and constant + * expressions can't; unfortunately, this specific case is one in + * which the desired side effect is a compile-time rather than a + * run-time one. + * + * We are permitted to use ?:, however, and that works quite well + * since the actual result of the sizeof expression _is_ evaluable + * at compile time. So here's my final answer, with the unfortunate + * remaining problem of evaluating its arguments multiple times: + */ +#define TYPECHECK(x,y) ( sizeof((x)) == sizeof((x)) ? (y) : (y) ) +#define DEPLANARISE(x) TYPECHECK((x) == (to_dbcs_planar_t)NULL, (to_dbcs_t)(x)) +#define REPLANARISE(x) TYPECHECK((x) == (to_dbcs_t)NULL, (to_dbcs_planar_t)(x)) + +/* + * Values used in the `enable' field. Each of these identifies a + * class of character sets; we then have a bitmask indicating which + * classes are allowable in a given mode. + * + * These values are currently only checked on output: for input, + * any ISO 2022 we can comprehend at all is considered acceptable. + */ +#define CCS 1 /* CTEXT standard */ +#define COS 2 /* other standard */ +#define CPU 3 /* private use */ +#define CDC 4 /* DOCS for CTEXT */ +#define CDU 5 /* DOCS for UTF-8 */ +#define CNU 31 /* never used */ + +struct iso2022_mode { + int enable_mask; + char ltype, li, lf, rtype, ri, rf; +}; + +const struct iso2022_subcharset { + char type, i, f, enable; + int offset; + const sbcs_data *sbcs_base; + long int (*from_dbcs)(int, int); + + /* + * If to_dbcs_plane < 0, then to_dbcs is used as expected. + * However, if to_dbcs_plane >= 0, then to_dbcs is expected to + * be cast to a to_dbcs_planar_t before use, and the returned + * plane value (the first int *) must equal to_dbcs_plane. + * + * I'd have preferred to do this by means of a union, but you + * can't initialise a selected field of a union at compile + * time. Function pointer casts are guaranteed to work sensibly + * in ISO C (that is, it's undefined what happens if you call a + * function via the wrong type of pointer, but if you cast it + * back to the right type before calling it then it must work), + * so this is safe if ugly. + */ + to_dbcs_t to_dbcs; + int to_dbcs_plane; /* use to_dbcs_planar iff >= 0 */ +} iso2022_subcharsets[] = { + /* + * We list these subcharsets in preference order for output. + * Since the best-defined use of ISO 2022 output is compound + * text, we'll use a preference order which matches that. So we + * begin with the charsets defined in the compound text spec. + */ + { S4, 0, 'B', CCS, 0x00, &sbcsdata_CS_ASCII }, + { S6, 0, 'A', CCS, 0x80, &sbcsdata_CS_ISO8859_1 }, + { S6, 0, 'B', CCS, 0x80, &sbcsdata_CS_ISO8859_2 }, + { S6, 0, 'C', CCS, 0x80, &sbcsdata_CS_ISO8859_3 }, + { S6, 0, 'D', CCS, 0x80, &sbcsdata_CS_ISO8859_4 }, + { S6, 0, 'F', CCS, 0x80, &sbcsdata_CS_ISO8859_7 }, + { S6, 0, 'G', CCS, 0x80, &sbcsdata_CS_ISO8859_6 }, + { S6, 0, 'H', CCS, 0x80, &sbcsdata_CS_ISO8859_8 }, + { S6, 0, 'L', CCS, 0x80, &sbcsdata_CS_ISO8859_5 }, + { S6, 0, 'M', CCS, 0x80, &sbcsdata_CS_ISO8859_9 }, + { S4, 0, 'I', CCS, 0x80, &sbcsdata_CS_JISX0201 }, + { S4, 0, 'J', CCS, 0x00, &sbcsdata_CS_JISX0201 }, + { M4, 0, 'A', CCS, -0x21, 0, &gb2312_to_unicode, &unicode_to_gb2312, -1 }, + { M4, 0, 'B', CCS, -0x21, 0, &jisx0208_to_unicode, &unicode_to_jisx0208, -1 }, + { M4, 0, 'C', CCS, -0x21, 0, &ksx1001_to_unicode, &unicode_to_ksx1001, -1 }, + { M4, 0, 'D', CCS, -0x21, 0, &jisx0212_to_unicode, &unicode_to_jisx0212, -1 }, + + /* + * Next, other reasonably standard things: the rest of the ISO + * 8859 sets, UK-ASCII, and CNS 11643. + */ + { S6, 0, 'T', COS, 0x80, &sbcsdata_CS_ISO8859_11 }, + { S6, 0, 'V', COS, 0x80, &sbcsdata_CS_ISO8859_10 }, + { S6, 0, 'Y', COS, 0x80, &sbcsdata_CS_ISO8859_13 }, + { S6, 0, '_', COS, 0x80, &sbcsdata_CS_ISO8859_14 }, + { S6, 0, 'b', COS, 0x80, &sbcsdata_CS_ISO8859_15 }, + { S6, 0, 'f', COS, 0x80, &sbcsdata_CS_ISO8859_16 }, + { S4, 0, 'A', COS, 0x00, &sbcsdata_CS_BS4730 }, + { M4, 0, 'G', COS, -0x21, 0, &cns11643_1_to_unicode, DEPLANARISE(&unicode_to_cns11643), 0 }, + { M4, 0, 'H', COS, -0x21, 0, &cns11643_2_to_unicode, DEPLANARISE(&unicode_to_cns11643), 1 }, + { M4, 0, 'I', COS, -0x21, 0, &cns11643_3_to_unicode, DEPLANARISE(&unicode_to_cns11643), 2 }, + { M4, 0, 'J', COS, -0x21, 0, &cns11643_4_to_unicode, DEPLANARISE(&unicode_to_cns11643), 3 }, + { M4, 0, 'K', COS, -0x21, 0, &cns11643_5_to_unicode, DEPLANARISE(&unicode_to_cns11643), 4 }, + { M4, 0, 'L', COS, -0x21, 0, &cns11643_6_to_unicode, DEPLANARISE(&unicode_to_cns11643), 5 }, + { M4, 0, 'M', COS, -0x21, 0, &cns11643_7_to_unicode, DEPLANARISE(&unicode_to_cns11643), 6 }, + + /* + * Private-use designations: DEC private sets and Emacs's Big5 + * abomination. + */ + { S4, 0, '0', CPU, 0x00, &sbcsdata_CS_DEC_GRAPHICS }, + { S4, 0, '<', CPU, 0x80, &sbcsdata_CS_DEC_MCS }, + { M4, 0, '0', CPU, -0x21, 0, &emacs_big5_1_to_unicode, DEPLANARISE(&unicode_to_emacs_big5), 1 }, + { M4, 0, '1', CPU, -0x21, 0, &emacs_big5_2_to_unicode, DEPLANARISE(&unicode_to_emacs_big5), 2 }, + + /* + * Ben left this conditioned out without explanation, + * presumably on the grounds that we don't have a translation + * table for it. + */ +#if 0 + { M4, 0, '@', CNU }, /* JIS C 6226-1978 */ +#endif + + /* + * Finally, fallback entries for null character sets. + */ + { S4, 0, '~', CNU }, + { S6, 0, '~', CNU }, /* empty 96-set */ + { M4, 0, '~', CNU, 0, 0, &null_dbcs_to_unicode, &unicode_to_null_dbcs, -1 }, /* empty 94^n-set */ + { M6, 0, '~', CNU, 0, 0, &null_dbcs_to_unicode, &unicode_to_null_dbcs, -1 }, /* empty 96^n-set */ +}; + +static long int null_dbcs_to_unicode(int r, int c) +{ + UNUSEDARG(r); + UNUSEDARG(c); + return ERROR; +} +static int unicode_to_null_dbcs(long int unicode, int *r, int *c) +{ + UNUSEDARG(unicode); + UNUSEDARG(r); + UNUSEDARG(c); + return 0; /* failed to convert anything */ +} + +/* + * Emacs encodes Big5 in COMPOUND_TEXT as two 94x94 character sets. + * We treat Big5 as a 94x191 character set with a bunch of undefined + * columns in the middle, so we have to mess around a bit to make + * things fit. + */ + +static long int emacs_big5_1_to_unicode(int r, int c) +{ + unsigned long s; + s = r * 94 + c; + r = s / 157; + c = s % 157; + if (c >= 64) c += 34; /* Skip over the gap */ + return big5_to_unicode(r, c); +} + +static long int emacs_big5_2_to_unicode(int r, int c) +{ + unsigned long s; + s = r * 94 + c; + r = s / 157 + 40; + c = s % 157; + if (c >= 64) c += 34; /* Skip over the gap */ + return big5_to_unicode(r, c); +} + +static int unicode_to_emacs_big5(long int unicode, int *p, int *r, int *c) +{ + int rr, cc, s; + if (!unicode_to_big5(unicode, &rr, &cc)) + return 0; + if (cc >= 64) { + cc -= 34; + assert(cc >= 64); + } + s = rr * 157 + cc; + if (s >= 40*157) { + *p = 2; + s -= 40*157; + } else { + *p = 1; + } + *r = s / 94; + *c = s % 94; + return 1; +} + +/* Wrappers for cns11643_to_unicode() */ +static long int cns11643_1_to_unicode(int r, int c) +{ + return cns11643_to_unicode(0, r, c); +} +static long int cns11643_2_to_unicode(int r, int c) +{ + return cns11643_to_unicode(1, r, c); +} +static long int cns11643_3_to_unicode(int r, int c) +{ + return cns11643_to_unicode(2, r, c); +} +static long int cns11643_4_to_unicode(int r, int c) +{ + return cns11643_to_unicode(3, r, c); +} +static long int cns11643_5_to_unicode(int r, int c) +{ + return cns11643_to_unicode(4, r, c); +} +static long int cns11643_6_to_unicode(int r, int c) +{ + return cns11643_to_unicode(5, r, c); +} +static long int cns11643_7_to_unicode(int r, int c) +{ + return cns11643_to_unicode(6, r, c); +} + +/* States, or "what we're currently accumulating". */ +enum { + IDLE, /* None of the below */ + SS2CHAR, /* Accumulating a character after SS2 */ + SS3CHAR, /* Accumulating a character after SS3 */ + ESCSEQ, /* Accumulating an escape sequence */ + ESCDROP, /* Discarding an escape sequence */ + ESCPASS, /* Passing through an escape sequence */ + DOCSUTF8, /* DOCSed into UTF-8 */ + DOCSCTEXT /* DOCSed into a COMPOUND_TEXT extended segment */ +}; + +#if 0 +#include <stdio.h> +static void dump_state(charset_state *s) +{ + unsigned s0 = s->s0, s1 = s->s1; + char const * const modes[] = { "IDLE", "SS2CHAR", "SS3CHAR", + "ESCSEQ", "ESCDROP", "ESCPASS", + "DOCSUTF8" }; + + fprintf(stderr, "s0: %s", modes[s0 >> 29]); + fprintf(stderr, " %02x %02x %02x ", (s0 >> 16) & 0xff, (s0 >> 8) & 0xff, + s0 & 0xff); + fprintf(stderr, "s1: LS%d LS%dR", (s1 >> 30) & 3, (s1 >> 28) & 3); + fprintf(stderr, " %d %d %d %d\n", s1 & 0x7f, (s1 >> 7) & 0x7f, + (s1 >> 14) & 0x7f, (s1 >> 21) & 0x7f); +} +#endif + +static void designate(charset_state *state, int container, + int type, int ibyte, int fbyte) +{ + unsigned long i; + + assert(container >= 0 && container <= 3); + assert(type == S4 || type == S6 || type == M4 || type == M6); + + for (i = 0; i < lenof(iso2022_subcharsets); i++) { + if (iso2022_subcharsets[i].type == type && + iso2022_subcharsets[i].i == ibyte && + iso2022_subcharsets[i].f == fbyte) { + state->s1 &= ~(0x7fL << (container * 7)); + state->s1 |= (i << (container * 7)); + return; + } + } + /* + * If we don't find the charset, invoke the empty one, so we + * output ERROR rather than garbage. + */ + designate(state, container, type, 0, '~'); +} + +static void do_utf8(long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + charset_state ustate; + + ustate.s1 = 0; + ustate.s0 = state->s0 & 0x03ffffffL; + read_utf8(NULL, input_chr, &ustate, emit, emitctx); + state->s0 = (state->s0 & ~0x03ffffffL) | (ustate.s0 & 0x03ffffffL); +} + +static void docs_utf8(long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + int retstate; + + /* + * Bits [25:0] of s0 are reserved for read_utf8(). + * Bits [27:26] are a tiny state machine to recognise ESC % @. + */ + retstate = (state->s0 & 0x0c000000L) >> 26; + if (retstate == 1 && input_chr == '%') + retstate = 2; + else if (retstate == 2 && input_chr == '@') { + /* If we've got a partial UTF-8 sequence, complain. */ + if (state->s0 & 0x03ffffffL) + emit(emitctx, ERROR); + state->s0 = 0; + return; + } else { + if (retstate >= 1) do_utf8(ESC, state, emit, emitctx); + if (retstate >= 2) do_utf8('%', state, emit, emitctx); + retstate = 0; + if (input_chr == ESC) + retstate = 1; + else { + do_utf8(input_chr, state, emit, emitctx); + } + } + state->s0 = (state->s0 & ~0x0c000000L) | (retstate << 26); +} + +struct ctext_encoding { + char const *name; + char octets_per_char, enable; + charset_spec const *subcs; +}; + +/* + * In theory, this list is in <ftp://ftp.x.org/pub/DOCS/registry>, + * but XLib appears to have its own ideas, and encodes these three + * (as of X11R6.8.2) + */ + +extern charset_spec const charset_CS_ISO8859_14; +extern charset_spec const charset_CS_ISO8859_15; +extern charset_spec const charset_CS_BIG5; + +static struct ctext_encoding const ctext_encodings[] = { + { "big5-0\2", 0 /* variable */, CDC, &charset_CS_BIG5 }, + { "iso8859-14\2", 1, CDC, &charset_CS_ISO8859_14 }, + { "iso8859-15\2", 1, CDC, &charset_CS_ISO8859_15 } +}; + +static void docs_ctext(long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + /* + * s0[27:26] = first entry in ctext_encodings that matches + * s0[25:22] = number of characters successfully matched, 0xf if all + * s0[21:8] count the number of octets left in the segment + * s0[7:0] are for sub-charset use + */ + int n = (state->s0 >> 22) & 0xf, i = (state->s0 >> 26) & 3, oi = i, j; + int length = (state->s0 >> 8) & 0x3fff; + + /* + * Note that we do not bother checking the octets-per-character + * byte against the selected charset when reading. It's + * extremely unlikely that this code will ever have to deal + * with two charset identifiers with the same name and + * different octets-per-character values! If it ever happens, + * we'll have to edit this file anyway so we can modify the + * code then... + */ + + if (!length) { + /* Haven't read length yet */ + if ((state->s0 & 0xff) == 0) + /* ... or even the first byte */ + state->s0 |= input_chr; + else { + length = (state->s0 & 0x7f) * 0x80 + (input_chr & 0x7f); + if (length == 0) + state->s0 = 0; + else + state->s0 = (state->s0 & 0xf0000000) | (length << 8); + } + return; + } + + j = i; + if (n == 0xe) { + /* Skipping unknown encoding. Look out for STX. */ + if (input_chr == 2) + state->s0 = (state->s0 & 0xf0000000) | (i << 26) | (0xf << 22); + } else if (n != 0xf) { + while ((unsigned)j < lenof(ctext_encodings) && + !memcmp(ctext_encodings[j].name, + ctext_encodings[oi].name, n)) { + if (ctext_encodings[j].name[n] < input_chr) + i = ++j; + else + break; + } + if ((unsigned)i >= lenof(ctext_encodings) || + memcmp(ctext_encodings[i].name, + ctext_encodings[oi].name, n) || + ctext_encodings[i].name[n] != input_chr) { + /* Doom! We haven't heard of this encoding */ + i = lenof(ctext_encodings); + n = 0xe; + } else { + /* + * Otherwise, we have found an additional character in our + * encoding name. See if we have reached the _end_ of our + * name. + */ + n++; + if (!ctext_encodings[i].name[n]) + n = 0xf; + } + /* + * Failing _that_, we simply update our encoding-name- + * tracking state. + */ + assert(i < 4 && n < 16); + state->s0 = (state->s0 & 0xf0000000) | (i << 26) | (n << 22); + } else { + if ((unsigned)i >= lenof(ctext_encodings)) + emit(emitctx, ERROR); + else { + charset_state substate; + charset_spec const *subcs = ctext_encodings[i].subcs; + substate.s1 = 0; + substate.s0 = state->s0 & 0xff; + subcs->read(subcs, input_chr, &substate, emit, emitctx); + state->s0 = (state->s0 & ~0xff) | (substate.s0 & 0xff); + } + } + if (!--length) + state->s0 = 0; + else + state->s0 = (state->s0 &~0x003fff00) | (length << 8); +} + +static void read_iso2022(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + struct iso2022_mode const *mode = (struct iso2022_mode *)charset->data; + + /* dump_state(state); */ + /* + * We have to make fairly efficient use of the 64 bits of state + * available to us. Long-term state goes in s1, and consists of + * the identities of the character sets designated as G0/G1/G2/G3 + * and the locking-shift states for GL and GR. Short-term state + * goes in s0: The bottom half of s0 accumulates characters for an + * escape sequence or a multi-byte character, while the top three + * bits indicate what they're being accumulated for. After DOCS, + * the bottom 29 bits of state are available for the DOCS function + * to use -- the UTF-8 one uses the bottom 26 for UTF-8 decoding + * and the top two to recognised ESC % @. + * + * s0[31:29] = state enum + * s0[24:0] = accumulated bytes + * s1[31:30] = GL locking-shift state + * s1[29:28] = GR locking-shift state + * s1[27:21] = G3 charset + * s1[20:14] = G2 charset + * s1[13:7] = G1 charset + * s1[6:0] = G0 charset + */ + +#define LEFT 30 +#define RIGHT 28 +#define LOCKING_SHIFT(n,side) \ + (state->s1 = (state->s1 & ~(3UL<<(side))) | ((n ## UL)<<(side))) +#define MODE ((state->s0 & 0xe0000000UL) >> 29) +#define ENTER_MODE(m) (state->s0 = (state->s0 & ~0xe0000000UL) | ((unsigned long)(m)<<29)) +#define SINGLE_SHIFT(n) ENTER_MODE(SS2CHAR - 2 + (n)) +#define ASSERT_IDLE do { \ + if (state->s0 != 0) emit(emitctx, ERROR); \ + state->s0 = 0; \ +} while (0) + + if (state->s1 == 0) { + /* + * Since there's no LS0R, this means we must just have started. + * Set up a sane initial state (LS0, LS1R, ASCII in G0/G1/G2/G3). + */ + LOCKING_SHIFT(0, LEFT); + LOCKING_SHIFT(1, RIGHT); + designate(state, 0, mode->ltype, mode->li, mode->lf); + designate(state, 1, mode->rtype, mode->ri, mode->rf); + designate(state, 2, S4, 0, 'B'); + designate(state, 3, S4, 0, 'B'); + } + + if (MODE == DOCSUTF8) { + docs_utf8(input_chr, state, emit, emitctx); + return; + } + if (MODE == DOCSCTEXT) { + docs_ctext(input_chr, state, emit, emitctx); + return; + } + + if ((input_chr & 0x60) == 0x00) { + /* C0 or C1 control */ + ASSERT_IDLE; + switch (input_chr) { + case ESC: + ENTER_MODE(ESCSEQ); + break; + case LS0: + LOCKING_SHIFT(0, LEFT); + break; + case LS1: + LOCKING_SHIFT(1, LEFT); + break; + case SS2: + SINGLE_SHIFT(2); + break; + case SS3: + SINGLE_SHIFT(3); + break; + default: + emit(emitctx, input_chr); + break; + } + } else if ((input_chr & 0x80) || MODE < ESCSEQ) { + int is_gl = 0; + struct iso2022_subcharset const *subcs; + unsigned container; + long input_7bit; + /* + * Actual data. + * Force idle state if we're in mid escape sequence, or in a + * multi-byte character with a different top bit. + */ + if (MODE >= ESCSEQ || + ((state->s0 & 0x00ff0000L) != 0 && + (((state->s0 >> 16) ^ input_chr) & 0x80))) + ASSERT_IDLE; + if (MODE == SS2CHAR || MODE == SS3CHAR) /* Single-shift */ + container = MODE - SS2CHAR + 2; + else if (input_chr >= 0x80) /* GR */ + container = (state->s1 >> 28) & 3; + else { /* GL */ + container = state->s1 >> 30; + is_gl = 1; + } + input_7bit = input_chr & ~0x80; + subcs = &iso2022_subcharsets[(state->s1 >> (container * 7)) & 0x7f]; + if ((subcs->type == S4 || subcs->type == M4) && + (input_7bit == 0x20 || input_7bit == 0x7f)) { + /* characters not in 94-char set */ + if (is_gl) emit(emitctx, input_7bit); + else emit(emitctx, ERROR); + } else if (subcs->type == M4 || subcs->type == M6) { + if ((state->s0 & 0x00ff0000L) == 0) { + state->s0 |= input_chr << 16; + return; + } else { + emit(emitctx, + subcs->from_dbcs(((state->s0 >> 16) & 0x7f) + + subcs->offset, + input_7bit + subcs->offset)); + } + } else { + if ((state->s0 & 0x00ff0000L) != 0) + emit(emitctx, ERROR); + emit(emitctx, subcs->sbcs_base ? + sbcs_to_unicode(subcs->sbcs_base, input_7bit + subcs->offset): + ERROR); + } + state->s0 = 0; + } else { + unsigned i1, i2; + if (MODE == ESCPASS) { + emit(emitctx, input_chr); + if ((input_chr & 0xf0) != 0x20) + ENTER_MODE(IDLE); + return; + } + + /* + * Intermediate bytes shall be any of the 16 positions of + * column 02 of the code table; they are denoted by the symbol + * I. + */ + if ((input_chr & 0xf0) == 0x20) { + if (((state->s0 >> 16) & 0xff) == 0) + state->s0 |= input_chr << 16; + else if (((state->s0 >> 8) & 0xff) == 0) + state->s0 |= input_chr << 8; + else { + /* Long escape sequence. Switch to ESCPASS or ESCDROP. */ + i1 = (state->s0 >> 16) & 0xff; + i2 = (state->s0 >> 8) & 0xff; + switch (i1) { + case '(': case ')': case '*': case '+': + case '-': case '.': case '/': + case '$': + ENTER_MODE(ESCDROP); + break; + default: + emit(emitctx, ESC); + emit(emitctx, i1); + emit(emitctx, i2); + emit(emitctx, input_chr); + state->s0 = 0; + ENTER_MODE(ESCPASS); + break; + } + } + return; + } + + /* + * Final bytes shall be any of the 79 positions of columns 03 + * to 07 of the code table excluding position 07/15; they are + * denoted by the symbol F. + */ + i1 = (state->s0 >> 16) & 0xff; + i2 = (state->s0 >> 8) & 0xff; + if (MODE == ESCDROP) + input_chr = 0; /* Make sure it won't match. */ + state->s0 = 0; + switch (i1) { + case 0: /* No intermediate bytes */ + switch (input_chr) { + case 'N': /* SS2 */ + SINGLE_SHIFT(2); + break; + case 'O': /* SS3 */ + SINGLE_SHIFT(3); + break; + case 'n': /* LS2 */ + LOCKING_SHIFT(2, LEFT); + break; + case 'o': /* LS3 */ + LOCKING_SHIFT(3, LEFT); + break; + case '|': /* LS3R */ + LOCKING_SHIFT(3, RIGHT); + break; + case '}': /* LS2R */ + LOCKING_SHIFT(2, RIGHT); + break; + case '~': /* LS1R */ + LOCKING_SHIFT(1, RIGHT); + break; + default: + /* Unsupported escape sequence. Spit it back out. */ + emit(emitctx, ESC); + emit(emitctx, input_chr); + } + break; + case ' ': /* ACS */ + /* + * Various coding structure facilities specify that designating + * a code element also invokes it. As far as I can see, invoking + * it now will have the same practical effect, since those + * facilities also ban the use of locking shifts. + */ + switch (input_chr) { + case 'A': /* G0 element used and invoked into GL */ + LOCKING_SHIFT(0, LEFT); + break; + case 'C': /* G0 in GL, G1 in GR */ + case 'D': /* Ditto, at least for 8-bit codes */ + case 'L': /* ISO 4873 (ECMA-43) level 1 */ + case 'M': /* ISO 4873 (ECMA-43) level 2 */ + LOCKING_SHIFT(0, LEFT); + LOCKING_SHIFT(1, RIGHT); + break; + } + break; + case '&': /* IRR */ + /* + * IRR (Identify Revised Registration) is ignored here, + * since any revised registration must be + * upward-compatible with the old one, so either we'll + * support the new one or we'll emit ERROR when we run + * into a new character. In either case, there's nothing + * to be done here. + */ + break; + case '(': /* GZD4 */ case ')': /* G1D4 */ + case '*': /* G2D4 */ case '+': /* G3D4 */ + designate(state, i1 - '(', S4, i2, input_chr); + break; + case '-': /* G1D6 */ case '.': /* G2D6 */ case '/': /* G3D6 */ + designate(state, i1 - ',', S6, i2, input_chr); + break; + case '$': /* G?DM? */ + switch (i2) { + case 0: /* Obsolete version of GZDM4 */ + i2 = '('; + case '(': /* GZDM4 */ case ')': /* G1DM4 */ + case '*': /* G2DM4 */ case '+': /* G3DM4 */ + designate(state, i2 - '(', M4, 0, input_chr); + break; + case '-': /* G1DM6 */ + case '.': /* G2DM6 */ case '/': /* G3DM6 */ + designate(state, i2 - ',', M6, 0, input_chr); + break; + default: + emit(emitctx, ERROR); + break; + } + case '%': /* DOCS */ + /* XXX What's a reasonable way to handle an unrecognised DOCS? */ + switch (i2) { + case 0: + switch (input_chr) { + case 'G': + ENTER_MODE(DOCSUTF8); + break; + } + break; + case '/': + switch (input_chr) { + case '1': case '2': + ENTER_MODE(DOCSCTEXT); + break; + } + break; + } + break; + default: + /* Unsupported nF escape sequence. Re-emit it. */ + emit(emitctx, ESC); + emit(emitctx, i1); + if (i2) emit(emitctx, i2); + emit(emitctx, input_chr); + break; + } + } +} + +static void oselect(charset_state *state, int i, int right, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + int shift = (right ? 31-7 : 31-7-7); + struct iso2022_subcharset const *subcs = &iso2022_subcharsets[i]; + + if (((state->s1 >> shift) & 0x7F) != (unsigned)i) { + state->s1 &= ~(0x7FL << shift); + state->s1 |= (i << shift); + + if (emit) { + emit(emitctx, ESC); + if (subcs->type == M4 || subcs->type == M6) + emit(emitctx, '$'); + if (subcs->type == S6 || subcs->type == M6) { + assert(right); + emit(emitctx, '-'); + } else if (right) { + emit(emitctx, ')'); + } else { + emit(emitctx, '('); + } + if (subcs->i) + emit(emitctx, subcs->i); + emit(emitctx, subcs->f); + } + } +} + +static void docs_char(charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx, int cset, char *data, int datalen) +{ + int curr_cset, currlen, i; + + /* + * cset is the index into ctext_encodings[]. It can also be -1 + * to mean DOCS UTF-8, or -2 to mean no DOCS (ordinary 2022). + * In the latter case, `chr' is ignored. + */ + + /* + * First, terminate a DOCS segment if necessary. We always have + * to terminate a DOCS segment if one is active and we're about + * to switch to a different one; we might also have to + * terminate a length-encoded DOCS segment if we've run out of + * storage space to accumulate characters in it. + */ + curr_cset = ((state->s1 >> 14) & 7) - 2; + currlen = ((state->s1 >> 11) & 7); + if ((curr_cset != -2 && curr_cset != cset) || + (curr_cset >= 0 && currlen + datalen > 5)) { + if (curr_cset == -1) { + /* + * Terminating DOCS UTF-8 is easy. + */ + emit(emitctx, ESC); + emit(emitctx, '%'); + emit(emitctx, '@'); + } else { + int len; + + /* + * To terminate a length-encoded DOCS segment we must + * actually output the whole thing. + */ + emit(emitctx, ESC); + emit(emitctx, '%'); + emit(emitctx, '/'); + emit(emitctx, '0' + ctext_encodings[curr_cset].octets_per_char); + len = currlen + datalen + + strlen(ctext_encodings[curr_cset].name); + assert(len < (1 << 14)); + emit(emitctx, 0x80 | ((len >> 7) & 0x7F)); + emit(emitctx, 0x80 | ((len ) & 0x7F)); + /* The name stored in ctext_encodings[] includes the trailing \2 */ + for (i = 0; ctext_encodings[curr_cset].name[i]; i++) + emit(emitctx, ctext_encodings[curr_cset].name[i]); + for (i = 0; i < currlen; i++) + emit(emitctx, + (i == 0 ? state->s1 : state->s0 >> (8*(4-i))) & 0xFF); + for (i = 0; i < datalen; i++) + emit(emitctx, data[i]); + + /* + * We've now dealt with the input data, so clear it so + * we don't try to do so again below. + */ + datalen = 0; + } + curr_cset = -2; + } + + /* + * Now, start a DOCS segment if necessary. + */ + if (curr_cset != cset) { + assert(cset != -2); + if (cset == -1) { + /* + * Start DOCS UTF-8. + */ + emit(emitctx, ESC); + emit(emitctx, '%'); + emit(emitctx, 'G'); + } else { + /* + * Starting a length-encoded DOCS segment is simply a + * matter of setting our stored length counter to zero. + */ + currlen = 0; + state->s1 &= ~(7 << 11); + state->s1 &= ~0xFF; + state->s0 = 0; + } + } + state->s1 &= ~(7 << 14); + assert((cset+2) >= 0 && (cset+2) < 8); + state->s1 |= ((cset+2) << 14); + + /* + * Now we're in the right DOCS state. Actually deal with the + * input data, if we haven't already done so above. + */ + if (datalen > 0) { + assert(cset != 2); + if (cset == -1) { + /* + * In DOCS UTF-8, we output data as soon as we get it. + */ + for (i = 0; i < datalen; i++) + emit(emitctx, data[i]); + } else { + /* + * In length-encoded DOCS, we just store our data and + * bide our time. It'll all be output when we fill up + * or switch to another character set. + */ + assert(currlen + datalen <= 5); /* overflow handled already */ + for (i = 0; i < datalen; i++) { + if (currlen + i == 0) + state->s1 |= data[i] & 0xFF; + else + state->s0 |= (data[i] & 0xFF) << (8*(4-(currlen+i))); + } + currlen += datalen; + assert(currlen >= 0 && currlen < 8); + state->s1 &= ~(7 << 11); + state->s1 |= (currlen << 11); + } + } +} + +static void write_to_pointer(void *ctx, long int output) +{ + char **ptr = (char **)ctx; + *(*ptr)++ = output; +} + +/* + * Writing full ISO-2022 is not useful in very many circumstances. + * One of the few situations in which it _is_ useful is generating + * X11 COMPOUND_TEXT; therefore, this writing function will obey + * the compound text restrictions and hence output the subset of + * ISO-2022 that's usable in that context. + * + * The subset in question is roughly that we use GL/GR for G0/G1 + * always, and that the _only_ escape sequences we output (other + * than the occasional DOCS) are those which designate different + * subcharsets into G0 and G1. There are additional constraints + * about which things go in which container; see below. + * + * FIXME: this wants some decent tests to be written, and also the + * exact output policy for compound text wants thinking about more + * carefully. + */ +static int write_iso2022(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + int i; + struct iso2022_subcharset const *subcs; + struct iso2022_mode const *mode = (struct iso2022_mode *)charset->data; + to_dbcs_planar_t last_planar_dbcs = NULL; + int last_p, last_r, last_c; + long int c1, c2; + + /* + * For output, I allocate the state variables as follows: + * + * s1[31] == 1 if output state has been initialised + * s1[30:24] == G1 charset (always in GR) + * s1[23:17] == G0 charset (always in GL) + * s1[16:14] == DOCS index plus 2 (because -1 and -2 are special) + * s1[13:11] == number of DOCS accumulated characters (up to five) + * s1[7:0] + s0[31:0] == DOCS collected characters + */ + + if (!state->s1) { + state->s0 = 0x00000000UL; + state->s1 = 0x80000000UL; + /* + * Start with US-ASCII in GL and also in GR. + */ + for (i = 0; (unsigned)i < lenof(iso2022_subcharsets); i++) { + subcs = &iso2022_subcharsets[i]; + if (subcs->type == mode->ltype && + subcs->i == mode->li && + subcs->f == mode->lf) + oselect(state, i, FALSE, NULL, NULL); + if (subcs->type == mode->rtype && + subcs->i == mode->ri && + subcs->f == mode->rf) + oselect(state, i, TRUE, NULL, NULL); + } + } + + if (input_chr == -1) { + /* + * Special case: reset encoding state. + */ + docs_char(state, emit, emitctx, -2, NULL, 0); /* leave DOCS */ + + for (i = 0; (unsigned)i < lenof(iso2022_subcharsets); i++) { + subcs = &iso2022_subcharsets[i]; + if (subcs->type == mode->ltype && + subcs->i == mode->li && + subcs->f == mode->lf) + oselect(state, i, FALSE, emit, emitctx); + if (subcs->type == mode->rtype && + subcs->i == mode->ri && + subcs->f == mode->rf) + oselect(state, i, TRUE, emit, emitctx); + } + return TRUE; + } + + /* + * Special-case characters: Space, Delete, and anything in C0 + * or C1 are output unchanged. + */ + if (input_chr <= 0x20 || (input_chr >= 0x7F && input_chr < 0xA0)) { + emit(emitctx, input_chr); + return TRUE; + } + + /* + * Analyse the input character and work out which subcharset it + * belongs to. + */ + for (i = 0; (unsigned)i < lenof(iso2022_subcharsets); i++) { + subcs = &iso2022_subcharsets[i]; + if (!(mode->enable_mask & (1 << subcs->enable))) + continue; /* this charset is disabled */ + if (subcs->sbcs_base) { + c1 = sbcs_from_unicode(subcs->sbcs_base, input_chr); + c1 -= subcs->offset; + if (c1 >= 0x20 && c1 <= 0x7f) { + c2 = 0; + break; + } + } else if (subcs->to_dbcs) { + if (subcs->to_dbcs_plane >= 0) { + /* + * Since multiplanar DBCSes almost by definition + * involve several entries in iso2022_subcharsets + * with the same to_dbcs function and different + * plane values, we remember the last such function + * we called and what its result was, so that we + * don't (for example) have to call + * unicode_to_cns11643 seven times. + */ + if (last_planar_dbcs != REPLANARISE(subcs->to_dbcs)) { + last_planar_dbcs = REPLANARISE(subcs->to_dbcs); + if (!last_planar_dbcs(input_chr, + &last_p, &last_r, &last_c)) + last_p = -1; + } + } else { + last_p = subcs->to_dbcs_plane; + if (!subcs->to_dbcs(input_chr, &last_r, &last_c)) + last_p = 0; /* cannot match since to_dbcs_plane<0 */ + } + + if (last_p == subcs->to_dbcs_plane) { + c1 = last_r - subcs->offset; + c2 = last_c - subcs->offset; + assert(c1 >= 0x20 && c1 <= 0x7f); + assert(c2 >= 0x20 && c2 <= 0x7f); + break; + } + } + } + + if ((unsigned)i < lenof(iso2022_subcharsets)) { + int right; + + /* + * Our character is represented by c1 (and possibly also + * c2) in subcharset `subcs'. So now we must decide whether + * to designate that character set into G0/GL or G1/GR. + * + * Any S6 or M6 subcharset has to go in GR because it won't + * fit in GL. In addition, the compound text rules state + * that any single-byte subcharset defined as the + * right-hand half of some SBCS must go in GR. + * + * M4 subcharsets can go in either half according to the + * rules. I choose to put them in GR always because it's a + * simple policy with reasonable behaviour (facilitates + * switching between them and ASCII). + */ + right = (subcs->type == S6 || subcs->type == M6 || subcs->type == M4 || + (subcs->sbcs_base && subcs->offset == 0x80)); + + /* + * If we're in a DOCS mode, leave it. + */ + docs_char(state, emit, emitctx, -2, NULL, 0); + + /* + * If this subcharset is not already selected in that + * container, select it. + */ + oselect(state, i, right, emit, emitctx); + + /* + * Now emit the actual characters. + */ + if (right) { + assert(c1 >= 0x20 && c1 <= 0x7f); + emit(emitctx, c1 | 0x80); + if (c2) { + assert(c2 >= 0x20 && c2 <= 0x7f); + emit(emitctx, c2 | 0x80); + } + } else { + assert(c1 > 0x20 && c1 < 0x7f); + emit(emitctx, c1); + if (c2) { + assert(c2 > 0x20 && c2 < 0x7f); + emit(emitctx, c2); + } + } + + return TRUE; + } + + /* + * Fall back to DOCS. + */ + { + char data[10]; + char *p = data; + int i, cs; + + cs = -2; /* means failure */ + + for (i = 0; (unsigned)i <= lenof(ctext_encodings); i++) { + charset_state substate; + charset_spec const *subcs = ctext_encodings[i].subcs; + + /* + * We assume that all character sets dealt with by DOCS + * are stateless for output purposes. + */ + substate.s1 = substate.s0 = 0; + p = data; + + if ((unsigned)i < lenof(ctext_encodings)) { + if ((mode->enable_mask & (1 << ctext_encodings[i].enable)) && + subcs->write(subcs, input_chr, &substate, + write_to_pointer, &p)) { + cs = i; + break; + } + } else { + if ((mode->enable_mask & (1 << CDU)) && + write_utf8(NULL, input_chr, NULL, write_to_pointer, &p)) { + cs = -1; + break; + } + } + } + + if (cs != -2) { + docs_char(state, emit, emitctx, cs, data, p - data); + return TRUE; + } + } + + return FALSE; +} + +/* + * Full ISO 2022 output with all options on. Not entirely sure what + * if anything this is useful for, but here it is anyway. All + * output character sets and DOCS variants are permitted; all + * containers start out with ASCII in them. + */ +static const struct iso2022_mode iso2022_all = { + (1<<CCS) | (1<<COS) | (1<<CPU) | (1<<CDC) | (1<<CDU), + S4, 0, 'B', S4, 0, 'B', +}; + +const charset_spec charset_CS_ISO2022 = { + CS_ISO2022, read_iso2022, write_iso2022, &iso2022_all +}; + +/* + * X11 compound text. A subset of output charsets is permitted, and + * G1/GR starts off in ISO8859-1. + */ +static const struct iso2022_mode iso2022_ctext = { + (1<<CCS) | (1<<CDC), + S4, 0, 'B', S6, 0, 'A', +}; + +const charset_spec charset_CS_CTEXT = { + CS_CTEXT, read_iso2022, write_iso2022, &iso2022_ctext +}; + +#ifdef TESTMODE + +#include <stdio.h> +#include <stdarg.h> +#include <string.h> + +int total_errs = 0; + +void iso2022_emit(void *ctx, long output) +{ + wchar_t **p = (wchar_t **)ctx; + *(*p)++ = output; +} + +void iso2022_read_test(int line, char *input, int inlen, ...) +{ + va_list ap; + wchar_t *p, str[512]; + int i; + charset_state state; + unsigned long l; + + state.s0 = state.s1 = 0; + p = str; + + for (i = 0; i < inlen; i++) + read_iso2022(NULL, input[i] & 0xFF, &state, iso2022_emit, &p); + + va_start(ap, inlen); + l = 0; + for (i = 0; i < p - str; i++) { + l = va_arg(ap, long int); + if (l == -1) { + printf("%d: correct string shorter than output\n", line); + total_errs++; + break; + } + if (l != str[i]) { + printf("%d: char %d came out as %08x, should be %08lx\n", + line, i, str[i], l); + total_errs++; + } + } + if (l != -1) { + l = va_arg(ap, long int); + if (l != -1) { + printf("%d: correct string longer than output\n", line); + total_errs++; + } + } + va_end(ap); +} + +/* Macro to concoct the first three parameters of iso2022_read_test. */ +#define TESTSTR(x) __LINE__, x, lenof(x) + +int main(void) +{ + printf("read tests beginning\n"); + /* Simple test (Emacs sample text for Japanese, in ISO-2022-JP) */ + iso2022_read_test(TESTSTR("Japanese (\x1b$BF|K\\8l\x1b(B)\t" + "\x1b$B$3$s$K$A$O\x1b(B, " + "\x1b$B%3%s%K%A%O\x1b(B\n"), + 'J','a','p','a','n','e','s','e',' ','(', + 0x65E5, 0x672C, 0x8A9E, ')', '\t', + 0x3053, 0x3093, 0x306b, 0x3061, 0x306f, ',', ' ', + 0x30b3, 0x30f3, 0x30cb, 0x30c1, 0x30cf, '\n', 0, -1); + /* Same thing in EUC-JP (with designations, and half-width katakana) */ + iso2022_read_test(TESTSTR("\x1b$)B\x1b*I\x1b$+D" + "Japanese (\xc6\xfc\xcb\xdc\xb8\xec)\t" + "\xa4\xb3\xa4\xf3\xa4\xcb\xa4\xc1\xa4\xcf, " + "\x8e\xba\x8e\xdd\x8e\xc6\x8e\xc1\x8e\xca\n"), + 'J','a','p','a','n','e','s','e',' ','(', + 0x65E5, 0x672C, 0x8A9E, ')', '\t', + 0x3053, 0x3093, 0x306b, 0x3061, 0x306f, ',', ' ', + 0xff7a, 0xff9d, 0xff86, 0xff81, 0xff8a, '\n', 0, -1); + /* Multibyte single-shift */ + iso2022_read_test(TESTSTR("\x1b$)B\x1b*I\x1b$+D\x8f\"/!"), + 0x02D8, '!', 0, -1); + /* Non-existent SBCS */ + iso2022_read_test(TESTSTR("\x1b(!Zfnord\n"), + ERROR, ERROR, ERROR, ERROR, ERROR, '\n', 0, -1); + /* Pass-through of ordinary escape sequences, including a long one */ + iso2022_read_test(TESTSTR("\x1b""b\x1b#5\x1b#!!!5"), + 0x1B, 'b', 0x1B, '#', '5', + 0x1B, '#', '!', '!', '!', '5', 0, -1); + /* Non-existent DBCS (also 5-byte escape sequence) */ + iso2022_read_test(TESTSTR("\x1b$(!Bfnord!"), + ERROR, ERROR, ERROR, 0, -1); + /* Incomplete DB characters */ + iso2022_read_test(TESTSTR("\x1b$B(,(\x1b(BHi\x1b$B(,(\n"), + 0x2501, ERROR, 'H', 'i', 0x2501, ERROR, '\n', 0, -1); + iso2022_read_test(TESTSTR("\x1b$)B\x1b*I\x1b$+D\xa4""B"), + ERROR, 'B', 0, -1); + iso2022_read_test(TESTSTR("\x1b$)B\x1b*I\x1b$+D\x0e\x1b|$\xa2\xaf"), + ERROR, 0x02D8, 0, -1); + /* Incomplete escape sequence */ + iso2022_read_test(TESTSTR("\x1b\n"), ERROR, '\n', 0, -1); + iso2022_read_test(TESTSTR("\x1b-A\x1b~\x1b\xa1"), ERROR, 0xa1, 0, -1); + /* Incomplete single-shift */ + iso2022_read_test(TESTSTR("\x8e\n"), ERROR, '\n', 0, -1); + iso2022_read_test(TESTSTR("\x1b$*B\x8e(\n"), ERROR, '\n', 0, -1); + /* Corner cases (02/00 and 07/15) */ + iso2022_read_test(TESTSTR("\x1b(B\x20\x7f"), 0x20, 0x7f, 0, -1); + iso2022_read_test(TESTSTR("\x1b(I\x20\x7f"), 0x20, 0x7f, 0, -1); + iso2022_read_test(TESTSTR("\x1b$B\x20\x7f"), 0x20, 0x7f, 0, -1); + iso2022_read_test(TESTSTR("\x1b-A\x0e\x20\x7f"), 0xa0, 0xff, 0, -1); + iso2022_read_test(TESTSTR("\x1b$-~\x0e\x20\x7f"), ERROR, 0, -1); + iso2022_read_test(TESTSTR("\x1b)B\xa0\xff"), ERROR, ERROR, 0, -1); + iso2022_read_test(TESTSTR("\x1b)I\xa0\xff"), ERROR, ERROR, 0, -1); + iso2022_read_test(TESTSTR("\x1b$)B\xa0\xff"), ERROR, ERROR, 0, -1); + iso2022_read_test(TESTSTR("\x1b-A\x1b~\xa0\xff"), 0xa0, 0xff, 0, -1); + iso2022_read_test(TESTSTR("\x1b$-~\x1b~\xa0\xff"), ERROR, 0, -1); + /* Designate control sets */ + iso2022_read_test(TESTSTR("\x1b!@"), 0x1b, '!', '@', 0, -1); + /* Designate other coding system (UTF-8) */ + iso2022_read_test(TESTSTR("\x1b%G" + "\xCE\xBA\xE1\xBD\xB9\xCF\x83\xCE\xBC\xCE\xB5"), + 0x03BA, 0x1F79, 0x03C3, 0x03BC, 0x03B5, 0, -1); + iso2022_read_test(TESTSTR("\x1b-A\x1b%G\xCE\xBA\x1b%@\xa0"), + 0x03BA, 0xA0, 0, -1); + iso2022_read_test(TESTSTR("\x1b%G\xCE\x1b%@"), ERROR, 0, -1); + iso2022_read_test(TESTSTR("\x1b%G\xCE\xBA\x1b%\x1b%@"), + 0x03BA, 0x1B, '%', 0, -1); + /* DOCS (COMPOUND_TEXT extended segment) */ + iso2022_read_test(TESTSTR("\x1b%/1\x80\x80"), 0, -1); + iso2022_read_test(TESTSTR("\x1b%/1\x80\x8fiso-8859-15\2xyz\x1b(B"), + ERROR, ERROR, ERROR, 0, -1); + iso2022_read_test(TESTSTR("\x1b%/1\x80\x8eiso8859-15\2xyz\x1b(B"), + 'x', 'y', 'z', 0, -1); + iso2022_read_test(TESTSTR("\x1b-A\x1b%/2\x80\x89" + "big5-0\2\xa1\x40\xa1\x40"), + 0x3000, 0xa1, 0x40, 0, -1); + /* Emacs Big5-in-ISO-2022 mapping */ + iso2022_read_test(TESTSTR("\x1b$(0&x86\x1b(B \x1b$(0DeBv"), + 0x5143, 0x6c23, ' ', ' ', 0x958b, 0x767c, 0, -1); + /* Test from RFC 1922 (ISO-2022-CN) */ + iso2022_read_test(TESTSTR("\x1b$)A\x0e=;;;\x1b$)GG(_P\x0f"), + 0x4EA4, 0x6362, 0x4EA4, 0x63db, 0, -1); + + printf("read tests completed\n"); + printf("total: %d errors\n", total_errs); + return (total_errs != 0); +} + +#endif /* TESTMODE */ + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_ISO2022) + +#endif diff --git a/app/tools/halibut/charset/iso2022s.c b/app/tools/halibut/charset/iso2022s.c new file mode 100644 index 0000000..a1eceb8 --- /dev/null +++ b/app/tools/halibut/charset/iso2022s.c @@ -0,0 +1,544 @@ +/* + * iso2022s.c - support for ISO-2022 subset encodings. + */ + +#ifndef ENUM_CHARSETS + +#include <stdio.h> +#include <string.h> +#include <assert.h> + +#include "charset.h" +#include "internal.h" +#include "sbcsdat.h" + +#define SO (0x0E) +#define SI (0x0F) +#define ESC (0x1B) + +/* Functional description of a single ISO 2022 escape sequence. */ +struct iso2022_escape { + char const *sequence; + unsigned long andbits, xorbits; + /* + * For output, these variables help us figure out which escape + * sequences we need to get where we want to be. + * + * `container' should be in the range 0-3, but can also be ORed + * with the bit flag RO to indicate that this is not a + * preferred container to use for this charset during output. + */ + int container, subcharset; +}; +#define RO 0x80 + +struct iso2022 { + /* + * List of escape sequences supported in this subset. Must be + * in ASCII order, so that we can narrow down the list as + * necessary. + */ + const struct iso2022_escape *escapes;/* must be sorted in ASCII order! */ + int nescapes; + + /* + * We assign indices from 0 upwards to the sub-charsets of a + * given ISO 2022 subset. nbytes[i] tells us how many bytes per + * character are required by sub-charset i. (It's a string + * mainly because that makes it easier to declare in C syntax + * than an int array.) + */ + char const *nbytes; + + /* + * The characters in this string are indices-plus-one (so that + * NUL can still terminate) of escape sequences in `escapes'. + * These escapes are output in the given sequence to reset the + * encoding state, unless it turns out that a given escape + * would not change the state at all. + */ + char const *reset; + + /* + * Initial value of s1, in case the default container contents + * needs to be something other than charset 0 in all cases. + * (Note that this must have the top bit set!) + */ + unsigned long s1; + + /* + * For output, some ISO 2022 subsets _mandate_ an initial shift + * sequence. If so, here it is so we can output it. (For the + * sake of basic sanity we won't bother to _require_ it on + * input, although it should of course be listed under + * `escapes' above so that we ignore it when present.) + */ + char const *initial_sequence; + + /* + * Is this an 8-bit ISO 2022 subset? + */ + int eightbit; + + /* + * Function calls to do the actual translation. + */ + long int (*to_ucs)(int subcharset, unsigned long bytes); + int (*from_ucs)(long int ucs, int *subcharset, unsigned long *bytes); +}; + +static void read_iso2022s(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + struct iso2022 const *iso = (struct iso2022 *)charset->data; + + /* + * For reading ISO-2022 subsets, we divide up our state + * variables as follows: + * + * - The top byte of s0 (bits 31:24) indicates, if nonzero, + * that we are part-way through a recognised ISO-2022 escape + * sequence. Five of those bits (31:27) give the index of + * the first member of the escapes list matching what we + * have so far; the remaining three (26:24) give the number + * of characters we have seen so far. + * + * - The top bit of s1 (bit 31) is non-zero at all times, to + * indicate that we have performed any necessary + * initialisation. When we start, we detect a zero s1 and + * respond to it by initialising the default container + * contents. + * + * - The next three bits of s1 (bits 30:28) indicate which + * _container_ is currently selected. This isn't quite as + * simple as it sounds, since we have to preserve memory of + * which of the SI/SO containers we came from when we're + * temporarily in SS2/SS3. Hence, what happens is: + * + bit 28 indicates SI/SO. + * + if we're in an SS2/SS3 container, that's indicated by + * the two bits above that being nonzero and holding + * either 2 or 3. + * + Hence: 0 is SI, 1 is SO, 4 is SS2-from-SI, 5 is + * SS2-from-SO, 6 is SS3-from-SI, 7 is SS3-from-SO. + * + For added fun: in an _8-bit_ ISO 2022 subset, we have + * the further special value 2, which means that we're + * theoretically in SI but the current character being + * accumulated is composed of 8-bit characters and will + * therefore be interpreted as if in SO. + * + * - The next nibble of s1 (27:24) indicates how many bytes + * have been accumulated in the current character. + * + * - The remaining three bytes of s1 are divided into four + * six-bit sections, and each section gives the current + * sub-charset selected in one of the possible containers. + * (Those containers are SI, SO, SS2 and SS3, respectively + * and in order from the bottom of s0 to the top.) + * + * - The bottom 24 bits of s0 give the accumulated character + * data so far. + * + * (Note that this means s1 contains all the parts of the state + * which might need to be operated on by escape sequences. + * Cunning, eh?) + */ + + if (!(state->s1 & 0x80000000)) { + state->s1 = iso->s1; + } + + /* + * So. Firstly, we process escape sequences, if we're in the + * middle of one or if we see a possible introducer (SI, SO, + * ESC). + */ + if ((state->s0 >> 24) || + (input_chr == SO || input_chr == SI || input_chr == ESC)) { + int n = (state->s0 >> 24) & 7, i = (state->s0 >> 27), oi = i, j; + + /* + * If this is the start of an escape sequence, we might be + * in mid-character. If so, clear the character state and + * emit an error token for the incomplete character. + */ + if (state->s1 & 0x0F000000) { + state->s1 &= ~0x0F000000; + state->s0 &= 0xFF000000; + /* + * If we were in the SS2 or SS3 container, we + * automatically exit it. + */ + if (state->s1 & 0x60000000) + state->s1 &= 0x9FFFFFFF; + emit(emitctx, ERROR); + } + + j = i; + while (j < iso->nescapes && + !memcmp(iso->escapes[j].sequence, + iso->escapes[oi].sequence, n)) { + if (iso->escapes[j].sequence[n] < input_chr) + i = ++j; + else + break; + } + if (i >= iso->nescapes || + memcmp(iso->escapes[i].sequence, + iso->escapes[oi].sequence, n) || + iso->escapes[i].sequence[n] != input_chr) { + /* + * This character does not appear in any valid escape + * sequence. Therefore, we must emit all the characters + * we had previously swallowed, plus this one, and + * return to non-escape-sequence state. + */ + for (j = 0; j < n; j++) + emit(emitctx, iso->escapes[oi].sequence[j]); + emit(emitctx, input_chr); + state->s0 = 0; + return; + } + + /* + * Otherwise, we have found an additional character in our + * escape sequence. See if we have reached the _end_ of our + * sequence (and therefore must process the sequence). + */ + n++; + if (!iso->escapes[i].sequence[n]) { + state->s0 = 0; + state->s1 &= iso->escapes[i].andbits; + state->s1 ^= iso->escapes[i].xorbits; + return; + } + + /* + * Failing _that_, we simply update our escape-sequence- + * tracking state. + */ + assert(i < 32 && n < 8); + state->s0 = (i << 27) | (n << 24); + return; + } + + /* + * If this isn't an escape sequence, it must be part of a + * character. One possibility is that it's a control character + * (00-20 or 7F-9F; also in non-8-bit ISO 2022 subsets I'm + * going to treat all top-half characters as controls), in + * which case we output it verbatim. + */ + if (input_chr < 0x21 || + (input_chr > 0x7E && (!iso->eightbit || input_chr < 0xA0))) { + /* + * We might be in mid-multibyte-character. If so, clear the + * character state and emit an error token for the + * incomplete character. + */ + if (state->s1 & 0x0F000000) { + state->s1 &= ~0x0F000000; + state->s0 &= 0xFF000000; + emit(emitctx, ERROR); + /* + * If we were in the SS2 or SS3 container, we + * automatically exit it. + */ + if (state->s1 & 0x60000000) + state->s1 &= 0x9FFFFFFF; + } + + emit(emitctx, input_chr); + return; + } + + /* + * Otherwise, accumulate character data. + */ + { + unsigned long chr; + int chrlen, cont, subcharset, bytes; + + /* + * Verify that we've seen the right kind of character for + * what we're currently doing. This only matters in 8-bit + * subsets. + */ + if (iso->eightbit) { + cont = (state->s1 >> 28) & 7; + /* + * If cont==0, we're entitled to see either GL or GR + * characters. If cont==2, we expect only GR; otherwise + * we expect only GL. + * + * If we see a GR character while cont==0, we set + * cont=2 immediately. + */ + if ((cont == 2 && !(input_chr & 0x80)) || + (cont != 0 && cont != 2 && (input_chr & 0x80))) { + /* + * Clear the previous character; it was prematurely + * terminated by this error. + */ + state->s1 &= ~0x0F000000; + state->s0 &= 0xFF000000; + emit(emitctx, ERROR); + /* + * If we were in the SS2 or SS3 container, we + * automatically exit it. + */ + if (state->s1 & 0x60000000) + state->s1 &= 0x9FFFFFFF; + } + + if (cont == 0 && (input_chr & 0x80)) { + state->s1 |= 0x20000000; + } + } + + /* The current character and its length. */ + chr = ((state->s0 & 0x00FFFFFF) << 8) | (input_chr & 0x7F); + chrlen = ((state->s1 >> 24) & 0xF) + 1; + /* The current sub-charset. */ + cont = (state->s1 >> 28) & 7; + if (cont > 1) cont >>= 1; + subcharset = (state->s1 >> (6*cont)) & 0x3F; + /* The number of bytes-per-character in that sub-charset. */ + bytes = iso->nbytes[subcharset]; + + /* + * If this character is now complete, we convert and emit + * it. Otherwise, we simply update the state and return. + */ + if (chrlen >= bytes) { + emit(emitctx, iso->to_ucs(subcharset, chr)); + chr = chrlen = 0; + /* + * If we were in the SS2 or SS3 container, we + * automatically exit it. + */ + if (state->s1 & 0x60000000) + state->s1 &= 0x9FFFFFFF; + } + state->s0 = (state->s0 & 0xFF000000) | chr; + state->s1 = (state->s1 & 0xF0FFFFFF) | (chrlen << 24); + } +} + +static int write_iso2022s(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + struct iso2022 const *iso = (struct iso2022 *)charset->data; + int subcharset, len, i, j, cont, topbit = 0; + unsigned long bytes; + + /* + * For output, our s1 state variable contains most of the same + * stuff as it did for input - initial-state indicator bit, + * current container, and current subcharset selected in each + * container. + */ + + /* + * Analyse the character and find out what subcharset it needs + * to go in. + */ + if (input_chr >= 0 && !iso->from_ucs(input_chr, &subcharset, &bytes)) + return FALSE; + + if (!(state->s1 & 0x80000000)) { + state->s1 = iso->s1; + if (iso->initial_sequence) + for (i = 0; iso->initial_sequence[i]; i++) + emit(emitctx, iso->initial_sequence[i]); + } + + if (input_chr == -1) { + unsigned long oldstate; + int k; + + /* + * Special case: reset encoding state. + */ + for (i = 0; iso->reset[i]; i++) { + j = iso->reset[i] - 1; + oldstate = state->s1; + state->s1 &= iso->escapes[j].andbits; + state->s1 ^= iso->escapes[j].xorbits; + if (state->s1 != oldstate) { + /* We must actually emit this sequence. */ + for (k = 0; iso->escapes[j].sequence[k]; k++) + emit(emitctx, iso->escapes[j].sequence[k]); + } + } + + return TRUE; + } + + /* + * Now begins the fun. We now know what subcharset we want. So + * we must find out which container we should select it into, + * select it into it if necessary, select that _container_ if + * necessary, and then output the given bytes. + */ + for (i = 0; i < iso->nescapes; i++) + if (iso->escapes[i].subcharset == subcharset && + !(iso->escapes[i].container & RO)) + break; + assert(i < iso->nescapes); + + /* + * We've found the escape sequence which would select this + * subcharset into a container. However, that subcharset might + * already _be_ selected in that container! Check before we go + * to the effort of emitting the sequence. + */ + cont = iso->escapes[i].container &~ RO; + if (((state->s1 >> (6*cont)) & 0x3F) != (unsigned)subcharset) { + for (j = 0; iso->escapes[i].sequence[j]; j++) + emit(emitctx, iso->escapes[i].sequence[j]); + state->s1 &= iso->escapes[i].andbits; + state->s1 ^= iso->escapes[i].xorbits; + } + + /* + * Now we know what container our subcharset is in, so we want + * to select that container. + */ + if (cont > 1) { + /* SS2 or SS3; just output the sequence and be done. */ + emit(emitctx, ESC); + emit(emitctx, 'L' + cont); /* comes out to 'N' or 'O' */ + } else { + /* + * Emit SI or SO, but only if the current container isn't already + * the right one. + * + * Also, in an 8-bit subset, we need not do this; we'll + * just use 8-bit characters to output SO-container + * characters. + */ + if (iso->eightbit && cont == 1 && ((state->s1 >> 28) & 7) == 0) { + topbit = 0x80; + } else if (((state->s1 >> 28) & 7) != (unsigned)cont) { + emit(emitctx, cont ? SO : SI); + state->s1 = (state->s1 & 0x8FFFFFFF) | (cont << 28); + } + } + + /* + * We're done. Subcharset is selected in container, container + * is selected. All we need now is to write out the bytes. + */ + len = iso->nbytes[subcharset]; + while (len--) + emit(emitctx, ((bytes >> (8*len)) & 0xFF) | topbit); + + return TRUE; +} + +/* + * ISO-2022-JP, defined in RFC 1468. + */ +static long int iso2022jp_to_ucs(int subcharset, unsigned long bytes) +{ + switch (subcharset) { + case 1: /* JIS X 0201 bottom half */ + if (bytes == 0x5C) + return 0xA5; + else if (bytes == 0x7E) + return 0x203E; + /* else fall through to ASCII */ + case 0: return bytes; /* one-byte ASCII */ + /* (no break needed since all control paths have returned) */ + case 2: return jisx0208_to_unicode(((bytes >> 8) & 0xFF) - 0x21, + ((bytes ) & 0xFF) - 0x21); + default: return ERROR; + } +} +static int iso2022jp_from_ucs(long int ucs, int *subcharset, + unsigned long *bytes) +{ + int r, c; + if (ucs < 0x80) { + *subcharset = 0; + *bytes = ucs; + return 1; + } else if (ucs == 0xA5 || ucs == 0x203E) { + *subcharset = 1; + *bytes = (ucs == 0xA5 ? 0x5C : 0x7E); + return 1; + } else if (unicode_to_jisx0208(ucs, &r, &c)) { + *subcharset = 2; + *bytes = ((r+0x21) << 8) | (c+0x21); + return 1; + } else { + return 0; + } +} +static const struct iso2022_escape iso2022jp_escapes[] = { + {"\033$@", 0xFFFFFFC0, 0x00000002, -1, -1}, /* we ignore this one */ + {"\033$B", 0xFFFFFFC0, 0x00000002, 0, 2}, + {"\033(B", 0xFFFFFFC0, 0x00000000, 0, 0}, + {"\033(J", 0xFFFFFFC0, 0x00000001, 0, 1}, +}; +static const struct iso2022 iso2022jp = { + iso2022jp_escapes, lenof(iso2022jp_escapes), + "\1\1\2", "\3", 0x80000000, NULL, FALSE, + iso2022jp_to_ucs, iso2022jp_from_ucs +}; +const charset_spec charset_CS_ISO2022_JP = { + CS_ISO2022_JP, read_iso2022s, write_iso2022s, &iso2022jp +}; + +/* + * ISO-2022-KR, defined in RFC 1557. + */ +static long int iso2022kr_to_ucs(int subcharset, unsigned long bytes) +{ + switch (subcharset) { + case 0: return bytes; /* one-byte ASCII */ + case 1: return ksx1001_to_unicode(((bytes >> 8) & 0xFF) - 0x21, + ((bytes ) & 0xFF) - 0x21); + default: return ERROR; + } +} +static int iso2022kr_from_ucs(long int ucs, int *subcharset, + unsigned long *bytes) +{ + int r, c; + if (ucs < 0x80) { + *subcharset = 0; + *bytes = ucs; + return 1; + } else if (unicode_to_ksx1001(ucs, &r, &c)) { + *subcharset = 1; + *bytes = ((r+0x21) << 8) | (c+0x21); + return 1; + } else { + return 0; + } +} +static const struct iso2022_escape iso2022kr_escapes[] = { + {"\016", 0x8FFFFFFF, 0x10000000, -1, -1}, + {"\017", 0x8FFFFFFF, 0x00000000, 0, 0}, + {"\033$)C", 0xFFFFF03F, 0x00000040, 1, 1}, /* bits[11:6] <- 1 */ +}; +static const struct iso2022 iso2022kr = { + iso2022kr_escapes, lenof(iso2022kr_escapes), + "\1\2", "\2", 0x80000040, "\033$)C", FALSE, + iso2022kr_to_ucs, iso2022kr_from_ucs +}; +const charset_spec charset_CS_ISO2022_KR = { + CS_ISO2022_KR, read_iso2022s, write_iso2022s, &iso2022kr +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_ISO2022_JP) +ENUM_CHARSET(CS_ISO2022_KR) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/istate.c b/app/tools/halibut/charset/istate.c new file mode 100644 index 0000000..9c6f8c0 --- /dev/null +++ b/app/tools/halibut/charset/istate.c @@ -0,0 +1,3 @@ +#include "charset.h" + +const charset_state charset_init_state = CHARSET_INIT_STATE; diff --git a/app/tools/halibut/charset/jisx0208.c b/app/tools/halibut/charset/jisx0208.c new file mode 100644 index 0000000..c9f161d --- /dev/null +++ b/app/tools/halibut/charset/jisx0208.c @@ -0,0 +1,2021 @@ +/* + * JIS X 0208 implementation for libcharset. (This is the character + * set itself, not any particular multibyte encoding of it. + * Multibyte encodings of this character set are handled + * separately.) + */ + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +/* + * These tables are generated from the JIS X 0208 <-> Unicode + * character mapping found at + * + * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0208.TXT + */ + +/* + * Mapping from JIS X 0208 to Unicode. For these purposes JIS X + * 0208 is considered to be a 94x94 square array, with coordinates + * running from (0,0) to (93,93). + * + * Generated by running the following sh+Perl over JIS0208.TXT: + +cat JIS0208.TXT | \ +perl -ne '$a{hex$1,hex$2}=$3 if /^[^#]\S+\s+0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {for $r (0..93) { $o=" {"; for $c (0..93) {' \ + -e '$k=$a{$r+33,$c+33}; $k=" ERROR" unless defined $k;' \ + -e '$o .= ", " if $c > 0; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= $k; } print "$o},\n"; }}' + + */ + +static const unsigned short jisx0208_forward[94][94] = { + {0x3000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, 0xFF1F, + 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E, 0xFFE3, 0xFF3F, + 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, 0x3005, 0x3006, 0x3007, + 0x30FC, 0x2015, 0x2010, 0xFF0F, 0x005C, 0x301C, 0x2016, 0xFF5C, 0x2026, + 0x2025, 0x2018, 0x2019, 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, + 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, + 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0x2212, 0x00B1, 0x00D7, + 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234, + 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04, 0x00A2, + 0x00A3, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0x00A7, 0x2606, 0x2605, + 0x25CB, 0x25CF, 0x25CE, 0x25C7}, + {0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, + 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x2208, 0x220B, + 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x2227, 0x2228, 0x00AC, 0x21D2, + 0x21D4, 0x2200, 0x2203, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x2220, 0x22A5, 0x2312, 0x2202, + 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, + 0x222B, 0x222C, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, 0x00B6, ERROR, + ERROR, ERROR, ERROR, 0x25EF}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xFF10, 0xFF11, 0xFF12, + 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0xFF21, 0xFF22, 0xFF23, 0xFF24, + 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, + 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, + 0xFF37, 0xFF38, 0xFF39, 0xFF3A, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, + 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, + 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, + ERROR, ERROR, ERROR, ERROR}, + {0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, + 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, + 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, + 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, + 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, + 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, + 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, + 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, + 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, + 0x3092, 0x3093, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, + 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, + 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, + 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, + 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, + 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, + 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, + 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, + 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, + 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, + 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, + 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x03B1, 0x03B2, 0x03B3, 0x03B4, + 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, + 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, + 0x03C8, 0x03C9, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, + 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, + 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, + 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, + 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, + 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, + 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, 0x2523, + 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, 0x2537, 0x253F, + 0x251D, 0x2530, 0x2525, 0x2538, 0x2542, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, + 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, 0x82A6, + 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, 0x867B, 0x98F4, + 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, 0x5B89, 0x5EB5, 0x6309, + 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, + 0x5049, 0x56F2, 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, + 0x6613, 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, + 0x840E, 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, + 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, + 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, 0x5F15, + 0x98F2, 0x6DEB, 0x80E4, 0x852D}, + {0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, 0x7FBD, + 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, 0x81FC, 0x6E26, + 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, 0x53A9, 0x6D66, 0x74DC, + 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, 0x834F, 0x990C, 0x53E1, 0x55B6, + 0x5B30, 0x5F71, 0x6620, 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, + 0x76C8, 0x7A4E, 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, + 0x76CA, 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, + 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF, + 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276, 0x82D1, + 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A, 0x7525, 0x51F9, + 0x592E, 0x5965, 0x5F80, 0x5FDC}, + {0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, + 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, 0x81C6, + 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, 0x7A4F, 0x97F3, + 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, + 0x5609, 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, + 0x6B4C, 0x6CB3, 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, + 0x82DB, 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, + 0x8FE6, 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, + 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, + 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, 0x6062, + 0x61D0, 0x6212, 0x62D0, 0x6539}, + {0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, 0x82A5, + 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, 0x54B3, 0x5BB3, + 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, 0x8857, 0x8A72, 0x93A7, + 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, 0x67FF, 0x86CE, 0x920E, 0x5283, + 0x5687, 0x5404, 0x5ED3, 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, + 0x78BA, 0x7A6B, 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, + 0x9769, 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, + 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B, + 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6, 0x691B, + 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC, 0x938C, 0x565B, + 0x9D28, 0x6822, 0x8305, 0x8431}, + {0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, + 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, 0x5BDB, + 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, 0x6562, 0x67D1, + 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, 0x6F22, 0x6F97, 0x6F45, 0x74B0, + 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, + 0x809D, 0x8266, 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, + 0x9591, 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, + 0x5DCC, 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, + 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, + 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, 0x65D7, + 0x65E2, 0x671F, 0x68CB, 0x68C4}, + {0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, 0x7A00, + 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, 0x8F1D, 0x98E2, + 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, 0x5B9C, 0x622F, 0x6280, + 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, + 0x63AC, 0x83CA, 0x97A0, 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, + 0x7827, 0x6775, 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, + 0x4E45, 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, + 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08, + 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, + 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8, 0x6F01, 0x79A6, + 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC}, + {0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, + 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, 0x6050, + 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, 0x77EF, 0x80F8, + 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, + 0x51DD, 0x5C2D, 0x6681, 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, + 0x7C81, 0x50C5, 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, + 0x7434, 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, + 0x8B39, 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, + 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, + 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, 0x4E32, + 0x6ADB, 0x91E7, 0x5C51, 0x5C48}, + {0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, 0x7C82, + 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, 0x8A13, 0x7FA4, + 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, 0x50BE, 0x5211, 0x5144, + 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, 0x5F62, 0x5F84, 0x6075, 0x6176, + 0x6167, 0x61A9, 0x63B2, 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, + 0x7A3D, 0x7CFB, 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, + 0x8A08, 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, + 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A, + 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039, 0x5026, + 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, 0x5ACC, 0x5EFA, + 0x61B2, 0x61F8, 0x62F3, 0x6372}, + {0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, + 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, 0x9855, + 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, + 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, 0x8AFA, 0x9650, 0x4E4E, 0x500B, + 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, + 0x6545, 0x67AF, 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, + 0x864E, 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, + 0x4F0D, 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, + 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, + 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, 0x52B9, + 0x52FE, 0x539A, 0x53E3, 0x5411}, + {0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, 0x5DE5, + 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, 0x6052, 0x614C, + 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, 0x66F4, 0x676D, 0x6821, + 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687, + 0x786C, 0x7A3F, 0x7CE0, 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, + 0x80AF, 0x80B1, 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, + 0x8CA2, 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, + 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5, + 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A, 0x56FD, + 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170, 0x7511, 0x5FFD, + 0x60DA, 0x9AA8, 0x72DB, 0x8FBC}, + {0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, 0x61C7, + 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, 0x826E, 0x9B42, + 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, + 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, 0x5750, 0x5EA7, 0x632B, 0x50B5, + 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, + 0x63A1, 0x683D, 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, + 0x796D, 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, + 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, + 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, 0x643E, + 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, 0x685C, 0x9BAD, + 0x7B39, 0x5319, 0x518A, 0x5237}, + {0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, 0x7690, + 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, 0x5098, 0x53C2, + 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, 0x73CA, 0x7523, 0x7B97, + 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, 0x9910, 0x65AC, 0x66AB, 0x6B8B, + 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, + 0x58EB, 0x59CB, 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, + 0x601D, 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, + 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, + 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, 0x8CC7, + 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, 0x5150, 0x5B57, + 0x5BFA, 0x6148, 0x6301, 0x6642}, + {0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, + 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, 0x9D2B, + 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, 0x5931, 0x5AC9, + 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, + 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, + 0x6368, 0x8D66, 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, + 0x906E, 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, + 0x914C, 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, + 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, + 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, 0x7DAC, + 0x9700, 0x56DA, 0x53CE, 0x5468}, + {0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, 0x79CB, + 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, 0x8972, 0x8B90, + 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, 0x919C, 0x4EC0, 0x4F4F, + 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, + 0x91CD, 0x9283, 0x53D4, 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, + 0x587E, 0x719F, 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, + 0x7AE3, 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, + 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6, + 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72, 0x66F8, + 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F, 0x5F90, 0x6055, + 0x92E4, 0x9664, 0x50B7, 0x511F}, + {0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, 0x5968, + 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, 0x5E8A, + 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377, 0x6607, 0x660C, + 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, 0x6A35, 0x6CBC, 0x6D88, 0x6E09, + 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, + 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, + 0x885D, 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, + 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, + 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, 0x64FE, + 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, 0x8B72, 0x91B8, + 0x9320, 0x5631, 0x57F4, 0x98FE}, + {0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, 0x98DF, + 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, 0x5A20, 0x5BDD, + 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, 0x68EE, 0x699B, 0x6D78, + 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, 0x79E6, 0x7D33, 0x81E3, 0x82AF, + 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, + 0x4EC1, 0x5203, 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, + 0x8FC5, 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, + 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, + 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, 0x9AC4, + 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E, 0x6749, 0x6919, + 0x83C5, 0x9817, 0x96C0, 0x88FE}, + {0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, + 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, 0x6674, + 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, 0x7CBE, 0x8056, + 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, 0x8ACB, 0x901D, 0x9192, 0x9752, + 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, + 0x6614, 0x6790, 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, + 0x8DE1, 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, + 0x7A83, 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, + 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, + 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, 0x717D, + 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA}, + {0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, 0x8DF5, + 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, 0x5584, 0x6F38, + 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, 0x564C, 0x5851, 0x5CA8, + 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, + 0x79DF, 0x7C97, 0x7D20, 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, + 0x50E7, 0x5275, 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, + 0x5B8B, 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, + 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89, + 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349, 0x8358, + 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D, 0x9397, 0x971C, + 0x9A12, 0x50CF, 0x5897, 0x618E}, + {0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F, + 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, 0x65CF, + 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, 0x5C0A, 0x640D, + 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815, + 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, + 0x4F53, 0x5806, 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, + 0x6234, 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, + 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, + 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258, + 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, 0x8AFE, + 0x8338, 0x51E7, 0x86F8, 0x53EA}, + {0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, 0x8FBF, + 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, 0x5358, 0x5606, + 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, + 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, 0x86CB, 0x8A95, 0x935B, 0x56E3, + 0x58C7, 0x5F3E, 0x65AD, 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, + 0x77E5, 0x5730, 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, + 0x81F4, 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, + 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99, + 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B, 0x914E, + 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457, 0x8CAF, 0x4E01, + 0x5146, 0x51CB, 0x558B, 0x5BF5}, + {0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, + 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, 0x8178, + 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, 0x9802, 0x9CE5, + 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, 0x73CD, 0x8CC3, 0x93AE, 0x9673, + 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, + 0x6802, 0x63B4, 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, + 0x9354, 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, + 0x91E3, 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, + 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, + 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, 0x8247, + 0x8A02, 0x8AE6, 0x8E44, 0x9013}, + {0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, 0x6EF4, + 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, 0x64A4, 0x8F4D, + 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, + 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, + 0x96FB, 0x514E, 0x5410, 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, + 0x675C, 0x6E21, 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, + 0x783A, 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, + 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B, + 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7, 0x6DD8, + 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977, 0x7B49, 0x7B54, + 0x7B52, 0x7CD6, 0x7D71, 0x5230}, + {0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, + 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, 0x5802, + 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, 0x8404, 0x9053, + 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, + 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, + 0x6934, 0x5C4A, 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, + 0x60C7, 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, + 0x5948, 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, + 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, + 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, 0x8679, + 0x5EFF, 0x65E5, 0x4E73, 0x5165}, + {0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, 0x79B0, + 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, 0x637B, 0x649A, + 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, 0x56A2, 0x60A9, 0x6FC3, + 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, 0x8997, 0x86A4, 0x5DF4, 0x628A, + 0x64AD, 0x8987, 0x6777, 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, + 0x82AD, 0x99AC, 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, + 0x724C, 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, + 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F, + 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF, 0x6CCA, + 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD, 0x6F20, 0x7206, + 0x7E1B, 0x83AB, 0x99C1, 0x9EA6}, + {0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, + 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, 0x4F10, + 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, 0x86E4, 0x96BC, + 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, 0x5E06, 0x642C, 0x6591, 0x677F, + 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, + 0x8CA9, 0x7BC4, 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, + 0x76E4, 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, + 0x5F7C, 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, + 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, + 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, 0x6787, + 0x6BD8, 0x7435, 0x7709, 0x7F8E}, + {0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, 0x83F1, + 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, 0x59EB, 0x5A9B, + 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, 0x6C37, 0x6F02, 0x74E2, + 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, 0x63CF, 0x75C5, 0x79D2, 0x82D7, + 0x9328, 0x92F2, 0x849C, 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, + 0x7015, 0x8CA7, 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, + 0x592B, 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, + 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C, + 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66, 0x821E, + 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A, 0x8557, 0x4F0F, + 0x526F, 0x5FA9, 0x5E45, 0x670D}, + {0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, + 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, 0x626E, 0x711A, + 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, 0x805E, 0x4E19, 0x4F75, + 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, + 0x965B, 0x7C73, 0x9801, 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, + 0x8511, 0x7B86, 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, + 0x904D, 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, + 0x5703, 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, + 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, + 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, 0x62B1, + 0x6367, 0x653E, 0x65B9, 0x670B}, + {0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, 0x84EC, + 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, 0x9CF3, 0x9D6C, + 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, + 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, 0x5192, 0x7D21, 0x80AA, 0x81A8, + 0x8B00, 0x8C8C, 0x8CBF, 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, + 0x535C, 0x58A8, 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, + 0x6CA1, 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, + 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE, + 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, 0x685D, + 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, 0x4FAD, 0x7E6D, + 0x9EBF, 0x4E07, 0x6162, 0x6E80}, + {0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, + 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, 0x7720, + 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, 0x690B, 0x5A7F, + 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, 0x76DF, 0x8FF7, 0x9298, 0x9CF4, + 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, + 0x6478, 0x6A21, 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, + 0x8017, 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, + 0x5C24, 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, + 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, + 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, 0x9453, + 0x6109, 0x6108, 0x6CB9, 0x7652}, + {0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, 0x5E7D, + 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, 0x7336, 0x7337, + 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, 0x90F5, 0x96C4, 0x878D, + 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, + 0x5996, 0x5BB9, 0x5EB8, 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, + 0x6D0B, 0x6EB6, 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, + 0x8981, 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, + 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765, + 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71, 0x5375, + 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229, 0x540F, 0x5C65, + 0x674E, 0x68A8, 0x7406, 0x7483}, + {0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, 0x7ACB, + 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B, + 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, 0x65C5, 0x865C, 0x4E86, + 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, 0x6599, 0x6881, 0x6DBC, 0x731F, + 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, + 0x9818, 0x529B, 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, + 0x81E8, 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, + 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, + 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, 0x66A6, + 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, 0x6190, 0x6F23, + 0x7149, 0x7C3E, 0x7DF4, 0x806F}, + {0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, 0x8DEF, + 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, 0x6994, 0x6D6A, + 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, 0x874B, 0x90CE, 0x516D, + 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, 0x502D, 0x548C, 0x8A71, 0x6B6A, + 0x8CC4, 0x8107, 0x60D1, 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, + 0x85C1, 0x8568, 0x6900, 0x6E7E, 0x7897, 0x8155, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, + 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, 0x4E8E, + 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, + 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, + 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, + 0x4F98, 0x4F7B, 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, + 0x4FD4, 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, + 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, + 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, 0x5047, + 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, 0x5078, 0x5080, + 0x509A, 0x5085, 0x50B4, 0x50B2}, + {0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, 0x50E3, + 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, + 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, 0x513F, 0x5140, 0x5152, + 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, 0x516A, 0x516E, 0x5180, 0x5182, + 0x56D8, 0x518C, 0x5189, 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, + 0x51A6, 0x51A2, 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, + 0x51B5, 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, + 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A, + 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E, 0x5254, + 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D, 0x5294, 0x5292, + 0x5271, 0x5288, 0x5291, 0x8FA8}, + {0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, + 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, 0x5306, + 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, 0x5323, 0x532F, + 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, 0x4E17, 0x5349, 0x534D, + 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, + 0x53A0, 0x53A6, 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, + 0x53DF, 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, + 0x5440, 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, + 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, + 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, 0x54A5, + 0x54AC, 0x54C4, 0x54C8, 0x54A8}, + {0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, 0x550F, + 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, 0x5540, 0x5563, + 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555D, + 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, 0x557B, 0x557E, 0x5598, 0x559E, + 0x55AE, 0x557C, 0x5583, 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, + 0x55C4, 0x55DC, 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, + 0x561B, 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, + 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0, + 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC, 0x56C1, + 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7, 0x56EE, 0x56F9, + 0x5700, 0x56FF, 0x5704, 0x5709}, + {0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, 0x5726, + 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, 0x57C0, 0x5788, + 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4, 0x57AA, 0x57B0, + 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, 0x580A, 0x57D6, 0x57E3, 0x580B, + 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, + 0x583D, 0x5879, 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, + 0x58B8, 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, + 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, + 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, 0x5932, + 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, 0x5958, 0x5962, + 0x5960, 0x5967, 0x596C, 0x5969}, + {0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, 0x59E8, + 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, 0x5A1C, 0x5A09, + 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, + 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, + 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, + 0x5B36, 0x5B3E, 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, + 0x5B65, 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, + 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4, + 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3, 0x5C05, + 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28, 0x5C38, 0x5C39, + 0x5C41, 0x5C46, 0x5C4E, 0x5C53}, + {0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, + 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, 0x5CC5, + 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, + 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, 0x5D11, 0x5D14, 0x5D22, + 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, + 0x5D76, 0x5D87, 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, + 0x5D90, 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, + 0x5DEB, 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, + 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, + 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, 0x5EC1, + 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF}, + {0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, 0x5EE9, + 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, 0x5F03, 0x5F09, + 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, 0x5F2D, 0x5F38, 0x5F41, + 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61, + 0x5F6D, 0x5F73, 0x5F77, 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, + 0x5F87, 0x5F9E, 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, + 0x5FFB, 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, + 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026, + 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A, 0x6046, + 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B, 0x6059, 0x6081, + 0x608D, 0x60E7, 0x6083, 0x609A}, + {0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8, + 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, 0x614D, + 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, 0x6103, 0x6121, + 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, 0x613E, 0x6128, 0x6127, 0x614A, + 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, + 0x6158, 0x6159, 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, + 0x615D, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, + 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, + 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6, + 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, 0x6209, + 0x620D, 0x620C, 0x6214, 0x621B}, + {0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, 0x624E, + 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, 0x6289, 0x627E, + 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, 0x62D7, 0x62D1, 0x62BB, + 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, 0x62DC, 0x62CC, 0x62CA, 0x62C2, + 0x62C7, 0x629B, 0x62C9, 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, + 0x62EF, 0x62F5, 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, + 0x6380, 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, + 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6, + 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D, 0x6417, + 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A, 0x6495, 0x6493, + 0x64A5, 0x64A9, 0x6488, 0x64BC}, + {0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, + 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, 0x64F4, + 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, 0x6524, 0x6523, + 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754B, 0x6548, 0x6556, + 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, + 0x8B8A, 0x659B, 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, + 0x65CC, 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, + 0x6603, 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, + 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, + 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, 0x66C1, + 0x66B9, 0x66C9, 0x66BE, 0x66BC}, + {0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, 0x66F0, + 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, 0x9738, 0x672E, + 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, 0x675E, 0x6760, 0x6759, + 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, 0x677C, 0x676A, 0x678C, 0x678B, + 0x67A6, 0x67A1, 0x6785, 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, + 0x67B8, 0x67E4, 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, + 0x67E7, 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, + 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD, + 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5, 0x68A0, + 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908, 0x68D8, 0x6922, + 0x6926, 0x68E1, 0x690C, 0x68CD}, + {0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, + 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, 0x68C6, + 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, 0x696E, 0x6939, + 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, + 0x69B2, 0x69AE, 0x69D0, 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, + 0x69CA, 0x69DD, 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, + 0x6995, 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, + 0x69F2, 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, + 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, + 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, 0x6A8D, + 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3}, + {0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, 0x6ADE, + 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, 0x8616, 0x6AFA, + 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, 0x76DC, 0x6B39, 0x98EE, + 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, + 0x6B78, 0x6B79, 0x6B7F, 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, + 0x6B9E, 0x6BA4, 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, + 0x6BBC, 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, + 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55, + 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E, 0x6C68, + 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD, 0x6CD7, 0x6CC5, + 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE}, + {0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, + 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, 0x6D93, + 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, + 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, + 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, + 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, + 0x6E6B, 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, + 0x6EFF, 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, + 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, + 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, 0x6EF2, + 0x6F31, 0x6EEF, 0x6F32, 0x6ECC}, + {0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, 0x6F6F, + 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, 0x6F91, 0x6FC2, + 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, + 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, 0x6FEE, 0x6FDB, 0x7009, 0x700B, + 0x6FFA, 0x7011, 0x7001, 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, + 0x7018, 0x701F, 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, + 0x70AF, 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, + 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, + 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195, 0x71A8, + 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4, 0x71CE, 0x71E0, + 0x71EC, 0x71E7, 0x71F5, 0x71FC}, + {0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, + 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, 0x7258, 0x7274, + 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72A2, 0x72A7, 0x72B9, + 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, + 0x72F9, 0x72F7, 0x500F, 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, + 0x732F, 0x7329, 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, + 0x7368, 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, + 0x73BB, 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, + 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, + 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, 0x749E, 0x74A7, + 0x74CA, 0x74CF, 0x74D4, 0x73F1}, + {0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, 0x74F8, + 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, 0x7515, 0x7513, + 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, 0x754A, 0x7549, 0x755B, + 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, 0x756B, 0x756D, 0x7578, 0x7576, + 0x7586, 0x7587, 0x7574, 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, + 0x75A5, 0x75A3, 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, + 0x75B1, 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, + 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609, + 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763B, + 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669, + 0x766A, 0x7667, 0x766C, 0x7670}, + {0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, + 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, 0x76BA, + 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, 0x76E7, 0x76EA, + 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, 0x7729, 0x7724, 0x771E, 0x7725, + 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, + 0x7765, 0x777F, 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, + 0x77B0, 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, + 0x77D7, 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, + 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, + 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, 0x78BE, + 0x78BC, 0x78C5, 0x78CA, 0x78EC}, + {0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792C, + 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, 0x7953, 0x797A, + 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, 0x79AE, 0x79B3, 0x79B9, + 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D, + 0x7A18, 0x7A19, 0x7A20, 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, + 0x7A43, 0x7A57, 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, + 0x7A7D, 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, + 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, + 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, 0x7AED, + 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18, 0x7B19, 0x7B1E, + 0x7B35, 0x7B28, 0x7B36, 0x7B50}, + {0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, 0x7B74, + 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, 0x7B8D, + 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, + 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, + 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, + 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, + 0x7C43, 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, + 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, + 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, + 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, 0x7CF2, + 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06}, + {0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, 0x7D3F, + 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, 0x7D6E, 0x7D4F, + 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, + 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, + 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, + 0x7DE1, 0x7E05, 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, + 0x7E0B, 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, + 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79, + 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE, 0x7E7F, + 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94, 0x7E96, 0x7E8E, + 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A}, + {0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, + 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, 0x7F83, + 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, + 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, + 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, + 0x8004, 0x800B, 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, + 0x803B, 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, + 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, + 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, + 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, 0x811B, + 0x8129, 0x8123, 0x812F, 0x814B}, + {0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, 0x8165, + 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, 0x81A0, 0x8195, + 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, 0x81B5, 0x81BE, 0x81B8, + 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8, + 0x81C8, 0x81DA, 0x81DF, 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, + 0x8202, 0x8205, 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, + 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, + 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E, + 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3, 0x82DF, + 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB, 0x82F9, 0x82DE, + 0x8306, 0x82DC, 0x8309, 0x82D9}, + {0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, + 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F, 0x83A2, + 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, 0x8373, 0x8375, + 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, 0x83EB, 0x83CE, 0x83FD, 0x8403, + 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, + 0x8420, 0x83BD, 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, + 0x8484, 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, + 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, + 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, 0x8521, + 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514, 0x84FC, + 0x8540, 0x8563, 0x8558, 0x8548}, + {0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, 0x858A, + 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, 0x8577, 0x857E, + 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, 0x85D5, 0x85DD, 0x85E5, + 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, 0x85FE, 0x85FA, 0x8606, 0x8622, + 0x861A, 0x8630, 0x863F, 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, + 0x8693, 0x86A3, 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, + 0x86C6, 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, + 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB, + 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737, 0x873B, + 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C, 0x874E, 0x8774, + 0x8757, 0x8768, 0x876E, 0x8759}, + {0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, + 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, 0x87C6, + 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, 0x87F6, 0x87F7, + 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, + 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, + 0x886B, 0x8881, 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, + 0x8897, 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, + 0x88B1, 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, + 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, + 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, 0x8938, + 0x894C, 0x891D, 0x8960, 0x895E}, + {0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, 0x8983, + 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, 0x89AC, 0x89AF, + 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, 0x89DC, 0x89DD, 0x89E7, + 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, + 0x8A36, 0x8A41, 0x8A5B, 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, + 0x8A62, 0x8A85, 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, + 0x8A9A, 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, + 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, + 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33, 0x97AB, + 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F, 0x8B4E, 0x8B49, + 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B}, + {0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, + 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, 0x8C4C, + 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, 0x8C82, 0x8C89, + 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, + 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, + 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, + 0x8D0F, 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, + 0x8D6D, 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, + 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, + 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, 0x8E42, + 0x8E35, 0x8E30, 0x8E34, 0x8E4A}, + {0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, 0x8E2A, + 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, 0x8E85, 0x8E84, + 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, + 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, + 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, + 0x8F13, 0x8F1C, 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, + 0x8F45, 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, + 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7, + 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005, 0x8FF9, + 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016, 0x900B, 0x9027, + 0x9036, 0x9035, 0x9039, 0x8FF8}, + {0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, + 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, 0x9081, + 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, 0x90B5, 0x90E2, + 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, 0x9119, 0x9132, 0x9130, 0x914A, + 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, + 0x9182, 0x91A2, 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, + 0x91C1, 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, + 0x91F5, 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, + 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, + 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, 0x92E9, + 0x930F, 0x92FA, 0x9344, 0x932E}, + {0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, 0x9360, + 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, 0x93B9, 0x93D6, + 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, 0x93D0, 0x93C8, 0x93E4, + 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436, 0x942B, 0x9435, + 0x9421, 0x943A, 0x9441, 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, + 0x946A, 0x9229, 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, + 0x9481, 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, + 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA, + 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC, 0x95E1, + 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642, 0x964C, 0x964F, + 0x964B, 0x9677, 0x965C, 0x965E}, + {0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, + 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, 0x96B9, + 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, 0x970D, 0x96D5, 0x96F9, + 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, + 0x9724, 0x972A, 0x9730, 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, + 0x9742, 0x9749, 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, + 0x9771, 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, + 0x9790, 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, + 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, + 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, 0x984F, + 0x984B, 0x986B, 0x986F, 0x9870}, + {0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, 0x98C3, + 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918, 0x9921, + 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, 0x993D, 0x993E, 0x9942, + 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, 0x9952, 0x994C, 0x9955, 0x9997, + 0x9998, 0x99A5, 0x99AD, 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, + 0x99D1, 0x99ED, 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, + 0x9A05, 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, + 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64, + 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF, 0x9AD1, + 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6, 0x9AEF, 0x9AEB, + 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7}, + {0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, + 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, 0x9B4F, + 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, 0x9B91, 0x9B96, + 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, + 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, + 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, + 0x9C08, 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, + 0x9C30, 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, + 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, + 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, 0x9D41, + 0x9D3F, 0x9D3E, 0x9D46, 0x9D48}, + {0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, 0x9D87, + 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, 0x9DC4, 0x9DC1, + 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, + 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, + 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, + 0x9EA5, 0x9EA9, 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, + 0x9ED0, 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, + 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08, + 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, 0x9F63, + 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, 0x9F77, 0x9F72, + 0x9F76, 0x9F95, 0x9F9C, 0x9FA0}, + {0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, +}; + +/* + * Mapping from Unicode back to JIS X 0208. + * + * This inverse is done the same way the SBCS ones are done: I + * provide a list of JIS X 0208 positions, sorted into ascending + * order of their Unicode values. Then we can binary-search through + * this list, referring to the above table for each comparison, to + * find the coordinates for a given code point. + * + * Generated by running the following sh+Perl over JIS0208.TXT: + +cat JIS0208.TXT | \ +perl -ne '$a{$3}=[hex$1,hex$2] if /^[^#]\S+\s+0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {$o=" ";for $k (sort keys %a) { ($r,$c) = @{$a{$k}}; ' \ + -e '$o .= $C; $C = ", "; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= sprintf "{%d,%d}", $r-33,$c-33; } print "$o\n"; }' + + */ + +static const struct { unsigned char r, c; } jisx0208_backward[] = { + {0,31}, {0,80}, {0,81}, {0,87}, {0,14}, {1,43}, {0,74}, {0,61}, {0,12}, + {1,88}, {0,62}, {0,63}, {5,0}, {5,1}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, + {5,7}, {5,8}, {5,9}, {5,10}, {5,11}, {5,12}, {5,13}, {5,14}, {5,15}, + {5,16}, {5,17}, {5,18}, {5,19}, {5,20}, {5,21}, {5,22}, {5,23}, {5,32}, + {5,33}, {5,34}, {5,35}, {5,36}, {5,37}, {5,38}, {5,39}, {5,40}, {5,41}, + {5,42}, {5,43}, {5,44}, {5,45}, {5,46}, {5,47}, {5,48}, {5,49}, {5,50}, + {5,51}, {5,52}, {5,53}, {5,54}, {5,55}, {6,6}, {6,0}, {6,1}, {6,2}, + {6,3}, {6,4}, {6,5}, {6,7}, {6,8}, {6,9}, {6,10}, {6,11}, {6,12}, {6,13}, + {6,14}, {6,15}, {6,16}, {6,17}, {6,18}, {6,19}, {6,20}, {6,21}, {6,22}, + {6,23}, {6,24}, {6,25}, {6,26}, {6,27}, {6,28}, {6,29}, {6,30}, {6,31}, + {6,32}, {6,48}, {6,49}, {6,50}, {6,51}, {6,52}, {6,53}, {6,55}, {6,56}, + {6,57}, {6,58}, {6,59}, {6,60}, {6,61}, {6,62}, {6,63}, {6,64}, {6,65}, + {6,66}, {6,67}, {6,68}, {6,69}, {6,70}, {6,71}, {6,72}, {6,73}, {6,74}, + {6,75}, {6,76}, {6,77}, {6,78}, {6,79}, {6,80}, {6,54}, {0,29}, {0,28}, + {0,33}, {0,37}, {0,38}, {0,39}, {0,40}, {1,86}, {1,87}, {0,36}, {0,35}, + {1,82}, {0,75}, {0,76}, {1,7}, {0,77}, {1,81}, {1,10}, {1,11}, {1,9}, + {1,12}, {1,44}, {1,45}, {1,46}, {1,62}, {1,47}, {1,63}, {1,25}, {1,26}, + {0,60}, {1,68}, {1,70}, {0,70}, {1,59}, {1,41}, {1,42}, {1,32}, {1,31}, + {1,72}, {1,73}, {0,71}, {1,71}, {1,69}, {1,65}, {0,65}, {1,64}, {0,68}, + {0,69}, {1,66}, {1,67}, {1,29}, {1,30}, {1,27}, {1,28}, {1,60}, {1,61}, + {7,0}, {7,11}, {7,1}, {7,12}, {7,2}, {7,13}, {7,3}, {7,14}, {7,5}, + {7,16}, {7,4}, {7,15}, {7,6}, {7,27}, {7,22}, {7,17}, {7,8}, {7,29}, + {7,24}, {7,19}, {7,7}, {7,23}, {7,28}, {7,18}, {7,9}, {7,25}, {7,30}, + {7,20}, {7,10}, {7,26}, {7,31}, {7,21}, {1,2}, {1,1}, {1,4}, {1,3}, + {1,6}, {1,5}, {1,0}, {0,93}, {0,90}, {0,92}, {0,91}, {1,93}, {0,89}, + {0,88}, {0,73}, {0,72}, {1,85}, {1,84}, {1,83}, {0,0}, {0,1}, {0,2}, + {0,22}, {0,24}, {0,25}, {0,26}, {0,49}, {0,50}, {0,51}, {0,52}, {0,53}, + {0,54}, {0,55}, {0,56}, {0,57}, {0,58}, {1,8}, {1,13}, {0,43}, {0,44}, + {0,32}, {3,0}, {3,1}, {3,2}, {3,3}, {3,4}, {3,5}, {3,6}, {3,7}, {3,8}, + {3,9}, {3,10}, {3,11}, {3,12}, {3,13}, {3,14}, {3,15}, {3,16}, {3,17}, + {3,18}, {3,19}, {3,20}, {3,21}, {3,22}, {3,23}, {3,24}, {3,25}, {3,26}, + {3,27}, {3,28}, {3,29}, {3,30}, {3,31}, {3,32}, {3,33}, {3,34}, {3,35}, + {3,36}, {3,37}, {3,38}, {3,39}, {3,40}, {3,41}, {3,42}, {3,43}, {3,44}, + {3,45}, {3,46}, {3,47}, {3,48}, {3,49}, {3,50}, {3,51}, {3,52}, {3,53}, + {3,54}, {3,55}, {3,56}, {3,57}, {3,58}, {3,59}, {3,60}, {3,61}, {3,62}, + {3,63}, {3,64}, {3,65}, {3,66}, {3,67}, {3,68}, {3,69}, {3,70}, {3,71}, + {3,72}, {3,73}, {3,74}, {3,75}, {3,76}, {3,77}, {3,78}, {3,79}, {3,80}, + {3,81}, {3,82}, {0,10}, {0,11}, {0,20}, {0,21}, {4,0}, {4,1}, {4,2}, + {4,3}, {4,4}, {4,5}, {4,6}, {4,7}, {4,8}, {4,9}, {4,10}, {4,11}, {4,12}, + {4,13}, {4,14}, {4,15}, {4,16}, {4,17}, {4,18}, {4,19}, {4,20}, {4,21}, + {4,22}, {4,23}, {4,24}, {4,25}, {4,26}, {4,27}, {4,28}, {4,29}, {4,30}, + {4,31}, {4,32}, {4,33}, {4,34}, {4,35}, {4,36}, {4,37}, {4,38}, {4,39}, + {4,40}, {4,41}, {4,42}, {4,43}, {4,44}, {4,45}, {4,46}, {4,47}, {4,48}, + {4,49}, {4,50}, {4,51}, {4,52}, {4,53}, {4,54}, {4,55}, {4,56}, {4,57}, + {4,58}, {4,59}, {4,60}, {4,61}, {4,62}, {4,63}, {4,64}, {4,65}, {4,66}, + {4,67}, {4,68}, {4,69}, {4,70}, {4,71}, {4,72}, {4,73}, {4,74}, {4,75}, + {4,76}, {4,77}, {4,78}, {4,79}, {4,80}, {4,81}, {4,82}, {4,83}, {4,84}, + {4,85}, {0,5}, {0,27}, {0,18}, {0,19}, {15,75}, {34,89}, {27,22}, {42,91}, + {29,69}, {26,15}, {29,68}, {17,27}, {40,51}, {44,30}, {47,1}, {16,14}, + {18,77}, {47,2}, {31,3}, {49,33}, {20,53}, {41,25}, {29,70}, {45,29}, + {41,33}, {47,3}, {34,69}, {47,4}, {21,89}, {47,5}, {19,60}, {34,15}, + {27,70}, {47,6}, {47,7}, {47,8}, {38,20}, {20,54}, {38,22}, {37,66}, + {23,34}, {42,18}, {72,40}, {47,9}, {29,71}, {47,10}, {17,20}, {21,68}, + {23,79}, {43,72}, {53,5}, {44,79}, {37,92}, {19,4}, {20,20}, {47,11}, + {47,12}, {45,26}, {44,28}, {32,71}, {47,14}, {26,85}, {37,82}, {47,17}, + {16,29}, {23,62}, {23,61}, {15,69}, {46,42}, {46,41}, {25,18}, {15,0}, + {47,18}, {47,19}, {47,20}, {42,19}, {47,21}, {23,81}, {15,70}, {42,81}, + {20,91}, {20,92}, {20,93}, {35,65}, {45,27}, {47,22}, {47,23}, {47,24}, + {30,44}, {28,25}, {30,45}, {47,29}, {47,27}, {47,28}, {20,55}, {25,2}, + {17,79}, {47,26}, {47,25}, {41,8}, {26,37}, {26,36}, {33,29}, {47,30}, + {40,52}, {31,70}, {0,23}, {47,31}, {47,33}, {33,68}, {45,64}, {15,41}, + {47,32}, {17,29}, {21,35}, {34,70}, {22,78}, {47,34}, {38,3}, {19,74}, + {47,35}, {15,42}, {23,63}, {19,75}, {40,89}, {39,17}, {20,56}, {17,80}, + {47,70}, {36,32}, {38,75}, {47,37}, {39,27}, {45,65}, {30,12}, {26,38}, + {26,86}, {17,31}, {35,48}, {34,1}, {47,41}, {15,43}, {35,66}, {28,26}, + {25,19}, {44,3}, {33,45}, {17,30}, {47,40}, {44,29}, {47,36}, {47,38}, + {25,77}, {47,39}, {52,3}, {47,47}, {47,50}, {47,48}, {17,33}, {41,26}, + {47,42}, {47,46}, {23,82}, {26,39}, {19,5}, {47,51}, {47,43}, {45,66}, + {26,87}, {47,44}, {47,49}, {47,52}, {47,45}, {21,0}, {15,44}, {21,1}, + {17,32}, {52,4}, {42,88}, {40,77}, {23,83}, {30,14}, {45,22}, {41,55}, + {22,23}, {33,4}, {17,67}, {28,50}, {47,56}, {47,61}, {47,59}, {47,54}, + {33,14}, {47,57}, {47,60}, {47,58}, {41,60}, {47,55}, {30,13}, {42,82}, + {47,62}, {47,63}, {28,3}, {47,76}, {38,47}, {40,21}, {47,71}, {41,79}, + {17,21}, {47,75}, {47,69}, {47,78}, {32,49}, {23,35}, {38,59}, {63,38}, + {47,77}, {36,60}, {47,66}, {23,85}, {23,84}, {47,64}, {27,57}, {47,72}, + {41,78}, {34,44}, {47,68}, {22,80}, {47,65}, {47,73}, {47,67}, {45,48}, + {47,74}, {46,32}, {21,69}, {22,79}, {47,79}, {47,80}, {47,84}, {15,45}, + {41,47}, {47,83}, {47,82}, {47,86}, {47,85}, {35,67}, {22,81}, {47,87}, + {27,36}, {33,5}, {35,68}, {21,85}, {47,88}, {20,21}, {47,89}, {47,91}, + {42,20}, {22,69}, {26,16}, {39,86}, {47,90}, {25,36}, {44,34}, {47,93}, + {48,2}, {47,92}, {25,35}, {28,92}, {22,24}, {48,3}, {21,46}, {48,0}, + {48,1}, {37,14}, {32,91}, {21,2}, {42,44}, {48,4}, {45,28}, {48,5}, + {48,8}, {48,6}, {32,45}, {48,7}, {48,9}, {48,11}, {48,10}, {41,39}, + {20,22}, {48,13}, {48,14}, {17,14}, {48,12}, {27,83}, {48,17}, {48,16}, + {48,15}, {47,53}, {48,18}, {28,93}, {48,19}, {44,4}, {43,56}, {48,21}, + {48,20}, {48,23}, {48,22}, {48,24}, {48,25}, {15,83}, {23,20}, {22,26}, + {28,27}, {34,90}, {21,3}, {31,71}, {23,86}, {24,77}, {48,27}, {43,39}, + {36,37}, {26,88}, {48,26}, {48,28}, {36,61}, {18,84}, {48,29}, {37,93}, + {32,19}, {48,31}, {48,32}, {39,11}, {23,87}, {46,26}, {48,33}, {21,5}, + {41,27}, {33,21}, {21,80}, {36,20}, {22,82}, {48,34}, {48,35}, {37,65}, + {16,62}, {48,38}, {25,92}, {48,37}, {25,37}, {48,39}, {69,77}, {48,40}, + {42,32}, {48,41}, {48,42}, {48,43}, {29,72}, {27,43}, {19,6}, {48,46}, + {48,44}, {43,28}, {48,45}, {40,57}, {48,47}, {48,48}, {48,49}, {36,62}, + {48,53}, {48,51}, {48,52}, {48,50}, {25,66}, {48,54}, {43,73}, {45,67}, + {48,55}, {31,7}, {48,56}, {28,57}, {48,57}, {34,91}, {45,30}, {36,63}, + {49,36}, {48,58}, {83,4}, {21,36}, {48,59}, {42,61}, {28,71}, {33,91}, + {48,61}, {37,67}, {48,62}, {48,63}, {18,13}, {48,64}, {21,6}, {37,43}, + {16,89}, {28,47}, {39,0}, {48,65}, {36,64}, {30,46}, {48,66}, {41,11}, + {31,57}, {19,1}, {19,8}, {48,67}, {48,69}, {22,25}, {48,68}, {45,82}, + {28,72}, {39,28}, {41,43}, {48,70}, {44,87}, {48,71}, {48,72}, {36,93}, + {48,73}, {31,8}, {25,93}, {22,83}, {48,74}, {26,40}, {24,78}, {35,69}, + {48,76}, {33,6}, {25,78}, {48,77}, {48,78}, {32,15}, {48,75}, {48,80}, + {42,21}, {24,67}, {48,79}, {22,84}, {25,61}, {38,76}, {48,83}, {48,81}, + {40,90}, {29,73}, {48,90}, {18,67}, {48,84}, {48,82}, {32,46}, {48,86}, + {48,85}, {18,35}, {22,63}, {48,91}, {45,12}, {48,87}, {48,92}, {48,89}, + {48,88}, {45,46}, {23,88}, {17,34}, {45,83}, {28,84}, {36,55}, {24,68}, + {49,1}, {49,2}, {45,68}, {46,10}, {49,4}, {23,89}, {49,3}, {18,14}, + {49,5}, {42,53}, {35,27}, {44,5}, {41,56}, {49,6}, {79,52}, {37,15}, + {49,7}, {19,9}, {43,18}, {29,0}, {49,8}, {41,70}, {49,12}, {31,9}, + {49,9}, {21,47}, {49,10}, {19,10}, {22,13}, {49,13}, {49,14}, {49,15}, + {49,16}, {27,58}, {23,90}, {43,61}, {43,71}, {37,86}, {41,80}, {49,17}, + {49,18}, {49,20}, {49,22}, {49,21}, {49,23}, {17,28}, {42,43}, {25,91}, + {49,24}, {32,56}, {29,1}, {21,8}, {49,25}, {39,58}, {49,26}, {49,27}, + {49,28}, {49,29}, {40,3}, {21,71}, {15,68}, {37,30}, {49,30}, {28,28}, + {31,72}, {49,32}, {49,31}, {29,2}, {23,64}, {49,34}, {39,29}, {49,35}, + {39,59}, {33,19}, {33,77}, {21,7}, {37,77}, {34,16}, {38,77}, {42,45}, + {49,37}, {31,73}, {22,20}, {49,38}, {49,39}, {16,11}, {15,84}, {19,76}, + {33,7}, {20,48}, {44,80}, {49,42}, {17,22}, {49,41}, {21,9}, {49,43}, + {43,80}, {49,44}, {45,49}, {23,91}, {23,21}, {49,45}, {49,47}, {49,46}, + {30,62}, {16,24}, {16,61}, {49,48}, {49,49}, {23,22}, {49,50}, {20,77}, + {26,17}, {49,51}, {42,83}, {25,20}, {20,57}, {44,6}, {32,47}, {39,30}, + {27,92}, {28,38}, {27,71}, {27,84}, {28,85}, {39,31}, {49,54}, {16,34}, + {32,48}, {23,92}, {23,36}, {21,70}, {49,58}, {34,0}, {33,93}, {21,10}, + {29,3}, {49,59}, {49,57}, {17,35}, {33,69}, {27,23}, {26,42}, {16,5}, + {18,79}, {24,69}, {26,41}, {49,60}, {49,61}, {20,40}, {18,37}, {24,70}, + {20,39}, {35,62}, {16,4}, {37,16}, {43,29}, {24,0}, {44,88}, {36,38}, + {23,93}, {22,14}, {49,70}, {21,66}, {42,41}, {39,60}, {49,69}, {19,61}, + {49,64}, {49,65}, {49,67}, {49,68}, {20,58}, {30,64}, {41,12}, {49,66}, + {49,62}, {23,66}, {49,63}, {46,3}, {41,81}, {35,71}, {23,65}, {24,79}, + {49,71}, {37,60}, {49,75}, {27,93}, {27,85}, {49,78}, {49,76}, {43,2}, + {49,73}, {49,82}, {49,77}, {49,80}, {23,37}, {43,30}, {49,81}, {49,83}, + {49,85}, {25,79}, {46,33}, {49,74}, {49,72}, {49,84}, {49,79}, {49,87}, + {50,2}, {49,89}, {49,93}, {50,0}, {49,90}, {50,29}, {25,72}, {18,16}, + {49,88}, {50,4}, {15,85}, {50,3}, {15,4}, {40,41}, {50,1}, {49,91}, + {49,86}, {49,92}, {25,39}, {50,5}, {15,86}, {50,14}, {50,6}, {50,7}, + {29,4}, {42,72}, {50,12}, {50,11}, {36,14}, {50,13}, {50,10}, {16,19}, + {25,21}, {30,15}, {50,8}, {36,65}, {50,9}, {15,1}, {50,19}, {44,2}, + {29,6}, {50,25}, {50,24}, {50,15}, {33,34}, {50,16}, {33,78}, {50,21}, + {29,5}, {50,18}, {43,67}, {22,27}, {50,22}, {50,23}, {50,20}, {50,26}, + {50,17}, {50,32}, {50,37}, {50,33}, {50,28}, {50,38}, {32,16}, {50,40}, + {24,1}, {50,30}, {34,92}, {50,34}, {50,27}, {19,12}, {19,77}, {18,68}, + {50,35}, {50,31}, {22,85}, {50,41}, {50,39}, {32,50}, {20,41}, {21,11}, + {50,36}, {21,83}, {16,35}, {50,45}, {50,43}, {51,6}, {50,48}, {50,42}, + {50,46}, {50,44}, {26,43}, {50,47}, {50,50}, {50,55}, {50,53}, {50,52}, + {34,17}, {17,36}, {50,49}, {50,51}, {29,7}, {16,18}, {50,54}, {17,61}, + {50,65}, {29,91}, {50,61}, {50,59}, {50,60}, {50,62}, {16,28}, {32,24}, + {50,56}, {50,57}, {18,89}, {50,64}, {19,78}, {50,67}, {50,63}, {50,66}, + {41,13}, {37,52}, {39,23}, {50,69}, {50,68}, {18,36}, {50,70}, {50,73}, + {50,72}, {50,71}, {38,24}, {50,74}, {50,75}, {50,77}, {50,76}, {50,79}, + {50,82}, {50,80}, {50,78}, {50,81}, {50,83}, {50,84}, {50,85}, {50,86}, + {50,87}, {48,36}, {27,91}, {26,44}, {17,82}, {15,87}, {34,35}, {50,88}, + {25,3}, {15,46}, {30,61}, {50,89}, {23,38}, {24,80}, {50,91}, {50,90}, + {41,63}, {50,92}, {51,0}, {50,93}, {51,1}, {51,2}, {22,86}, {16,63}, + {51,3}, {51,5}, {51,4}, {51,7}, {36,57}, {51,8}, {15,20}, {25,62}, + {22,28}, {34,46}, {51,9}, {51,10}, {51,12}, {51,13}, {25,67}, {21,48}, + {42,22}, {51,11}, {51,14}, {25,32}, {24,2}, {51,18}, {25,4}, {34,18}, + {51,15}, {35,57}, {51,19}, {30,65}, {51,17}, {51,20}, {22,30}, {51,21}, + {51,22}, {24,3}, {18,31}, {51,24}, {51,25}, {51,26}, {51,23}, {51,16}, + {51,27}, {51,28}, {42,67}, {29,74}, {51,30}, {51,31}, {51,29}, {51,33}, + {38,23}, {15,71}, {40,53}, {51,34}, {29,92}, {27,24}, {38,60}, {19,79}, + {25,74}, {42,56}, {37,17}, {22,87}, {33,46}, {51,32}, {51,35}, {33,35}, + {51,36}, {51,37}, {51,39}, {35,72}, {19,13}, {83,0}, {16,64}, {41,82}, + {29,75}, {36,39}, {25,69}, {51,45}, {41,28}, {45,60}, {17,83}, {51,41}, + {32,25}, {51,44}, {36,66}, {36,40}, {36,67}, {39,24}, {35,44}, {25,40}, + {51,40}, {16,85}, {36,21}, {51,42}, {51,38}, {30,47}, {51,46}, {28,45}, + {21,12}, {51,47}, {41,71}, {32,92}, {35,37}, {51,49}, {42,46}, {51,50}, + {51,55}, {41,14}, {51,54}, {51,48}, {51,51}, {51,53}, {25,5}, {41,40}, + {51,56}, {34,36}, {17,84}, {29,76}, {51,58}, {51,57}, {24,71}, {51,59}, + {51,61}, {51,60}, {51,63}, {51,52}, {51,65}, {51,64}, {51,62}, {26,45}, + {30,48}, {32,51}, {51,66}, {31,27}, {15,76}, {38,67}, {35,58}, {51,68}, + {51,67}, {51,69}, {51,70}, {51,71}, {51,72}, {41,48}, {51,73}, {17,37}, + {51,74}, {44,27}, {18,15}, {49,40}, {28,39}, {33,30}, {51,75}, {43,74}, + {43,19}, {51,77}, {33,70}, {36,22}, {33,31}, {40,54}, {51,78}, {51,79}, + {16,90}, {27,25}, {51,80}, {15,47}, {51,81}, {51,82}, {16,65}, {19,80}, + {37,63}, {41,83}, {51,86}, {32,52}, {51,85}, {22,31}, {42,58}, {51,84}, + {36,68}, {51,88}, {51,87}, {51,90}, {51,89}, {16,91}, {51,91}, {29,8}, + {51,93}, {34,4}, {51,92}, {41,18}, {28,86}, {36,58}, {52,0}, {24,4}, + {52,1}, {38,0}, {39,61}, {43,48}, {38,4}, {52,10}, {20,23}, {44,36}, + {43,14}, {53,11}, {52,2}, {52,5}, {33,36}, {42,23}, {36,41}, {52,6}, + {42,68}, {25,41}, {29,9}, {52,7}, {26,47}, {26,46}, {15,24}, {23,39}, + {31,10}, {15,48}, {52,11}, {52,12}, {52,9}, {16,23}, {19,14}, {52,8}, + {43,36}, {40,16}, {15,7}, {15,88}, {26,48}, {15,49}, {15,2}, {52,17}, + {52,15}, {43,27}, {52,18}, {52,16}, {52,14}, {30,16}, {52,13}, {41,57}, + {23,67}, {52,22}, {52,23}, {29,10}, {52,19}, {46,11}, {38,43}, {52,21}, + {25,6}, {52,24}, {40,55}, {52,25}, {52,20}, {43,26}, {38,61}, {52,26}, + {40,17}, {52,27}, {52,31}, {52,28}, {17,38}, {52,30}, {27,26}, {52,29}, + {22,88}, {52,43}, {52,36}, {52,33}, {34,67}, {52,32}, {52,34}, {52,35}, + {52,37}, {52,38}, {19,81}, {52,40}, {52,39}, {52,41}, {29,77}, {52,44}, + {35,59}, {16,36}, {52,42}, {52,45}, {52,46}, {52,49}, {52,47}, {52,48}, + {26,49}, {52,50}, {24,5}, {52,51}, {26,89}, {33,23}, {52,52}, {52,53}, + {26,57}, {24,6}, {43,49}, {20,7}, {23,40}, {52,54}, {18,55}, {52,55}, + {33,24}, {52,56}, {53,2}, {52,57}, {52,58}, {52,59}, {52,61}, {52,62}, + {52,63}, {33,79}, {16,6}, {27,72}, {15,33}, {32,54}, {19,15}, {27,20}, + {24,7}, {36,69}, {28,0}, {19,16}, {34,71}, {35,73}, {15,23}, {20,24}, + {41,84}, {27,33}, {20,49}, {31,74}, {27,27}, {44,7}, {52,64}, {20,59}, + {25,42}, {18,17}, {16,66}, {29,11}, {17,39}, {52,65}, {44,37}, {28,40}, + {27,67}, {52,66}, {19,82}, {37,49}, {43,8}, {52,67}, {52,68}, {40,56}, + {52,70}, {19,7}, {21,86}, {52,69}, {19,17}, {30,17}, {52,74}, {26,0}, + {17,40}, {52,73}, {52,71}, {52,75}, {52,72}, {38,10}, {59,44}, {30,18}, + {52,76}, {45,31}, {52,77}, {52,79}, {34,93}, {52,78}, {31,2}, {26,90}, + {33,47}, {27,86}, {40,84}, {31,75}, {27,44}, {52,80}, {29,12}, {52,81}, + {52,82}, {15,50}, {33,25}, {30,49}, {52,83}, {37,18}, {29,13}, {29,14}, + {52,84}, {31,76}, {29,15}, {52,85}, {52,86}, {43,63}, {52,87}, {21,37}, + {28,1}, {52,88}, {52,89}, {27,59}, {30,11}, {37,83}, {30,51}, {39,87}, + {38,1}, {21,40}, {52,90}, {20,78}, {52,91}, {21,93}, {37,46}, {17,15}, + {26,50}, {52,92}, {53,1}, {53,0}, {21,92}, {52,93}, {36,23}, {33,15}, + {36,42}, {27,39}, {32,55}, {44,89}, {53,3}, {53,4}, {37,53}, {26,18}, + {53,6}, {53,7}, {53,8}, {19,83}, {53,9}, {53,10}, {17,11}, {32,26}, + {19,67}, {53,12}, {43,7}, {33,49}, {18,56}, {53,14}, {53,16}, {19,62}, + {53,13}, {53,15}, {53,18}, {53,17}, {53,19}, {53,20}, {37,28}, {21,13}, + {17,68}, {53,21}, {53,26}, {53,24}, {41,86}, {41,85}, {36,70}, {53,23}, + {28,51}, {53,22}, {30,81}, {53,27}, {25,73}, {53,33}, {53,34}, {53,28}, + {18,18}, {53,29}, {53,38}, {53,37}, {53,36}, {53,32}, {53,31}, {53,35}, + {41,87}, {53,42}, {53,39}, {53,41}, {44,81}, {53,40}, {53,30}, {30,82}, + {53,43}, {25,22}, {53,44}, {53,45}, {53,48}, {53,47}, {53,46}, {36,71}, + {53,25}, {53,54}, {53,50}, {53,49}, {53,51}, {53,52}, {53,55}, {45,69}, + {53,56}, {53,53}, {53,57}, {19,63}, {53,58}, {53,60}, {53,59}, {53,61}, + {53,62}, {31,77}, {28,2}, {28,67}, {32,66}, {24,8}, {25,23}, {24,9}, + {20,79}, {53,63}, {25,24}, {23,41}, {53,64}, {43,5}, {38,34}, {53,65}, + {24,10}, {19,11}, {34,6}, {21,49}, {26,51}, {40,58}, {39,32}, {53,66}, + {19,84}, {53,69}, {35,0}, {53,68}, {53,67}, {53,70}, {35,74}, {30,66}, + {26,52}, {31,41}, {33,50}, {20,1}, {35,1}, {53,71}, {53,72}, {29,78}, + {42,24}, {53,75}, {53,74}, {53,73}, {40,92}, {53,82}, {42,57}, {53,76}, + {53,78}, {42,74}, {53,77}, {53,79}, {39,7}, {53,80}, {41,29}, {53,81}, + {19,18}, {41,30}, {38,14}, {53,83}, {53,84}, {24,11}, {19,19}, {53,85}, + {23,23}, {44,35}, {44,8}, {19,85}, {53,87}, {35,2}, {24,12}, {29,16}, + {39,62}, {29,17}, {28,87}, {35,75}, {41,88}, {36,24}, {24,13}, {40,59}, + {53,88}, {36,56}, {25,33}, {23,42}, {35,76}, {15,34}, {28,77}, {24,14}, + {44,38}, {53,89}, {53,90}, {38,48}, {53,91}, {45,86}, {46,12}, {53,93}, + {53,92}, {18,38}, {54,0}, {54,3}, {54,4}, {54,2}, {40,31}, {29,18}, + {54,6}, {54,5}, {54,1}, {54,7}, {54,8}, {54,9}, {54,12}, {54,10}, {54,11}, + {54,13}, {16,67}, {35,77}, {54,14}, {22,89}, {17,85}, {38,21}, {54,15}, + {37,90}, {41,58}, {54,16}, {46,13}, {54,17}, {41,31}, {54,20}, {47,0}, + {47,16}, {27,15}, {37,84}, {54,21}, {20,60}, {35,3}, {15,89}, {54,22}, + {41,5}, {24,15}, {34,47}, {35,78}, {43,78}, {23,24}, {23,43}, {54,23}, + {54,24}, {54,30}, {27,68}, {35,4}, {21,14}, {54,25}, {40,10}, {34,37}, + {54,26}, {54,27}, {21,15}, {54,28}, {54,29}, {54,31}, {36,85}, {54,32}, + {54,33}, {54,34}, {54,19}, {54,18}, {54,35}, {22,32}, {40,6}, {25,43}, + {40,22}, {35,5}, {40,42}, {54,36}, {29,19}, {16,37}, {54,37}, {54,38}, + {43,81}, {39,63}, {54,41}, {16,92}, {31,11}, {54,40}, {54,39}, {22,33}, + {33,51}, {54,45}, {54,43}, {54,42}, {45,6}, {23,68}, {28,88}, {54,44}, + {36,43}, {28,29}, {37,31}, {54,48}, {54,47}, {54,46}, {54,49}, {23,69}, + {54,50}, {40,91}, {28,58}, {54,51}, {39,88}, {37,32}, {35,6}, {36,15}, + {54,52}, {20,10}, {30,19}, {40,11}, {19,86}, {38,5}, {54,53}, {26,53}, + {42,25}, {42,26}, {16,93}, {54,58}, {34,72}, {54,55}, {17,86}, {55,12}, + {54,57}, {38,15}, {54,56}, {54,54}, {24,89}, {54,60}, {54,66}, {54,72}, + {54,64}, {36,59}, {54,69}, {40,60}, {54,63}, {54,68}, {45,70}, {26,54}, + {33,52}, {54,61}, {20,61}, {54,71}, {31,12}, {16,68}, {54,65}, {17,87}, + {54,70}, {21,16}, {54,67}, {54,73}, {54,75}, {54,85}, {54,83}, {54,80}, + {54,79}, {45,87}, {54,81}, {21,17}, {24,16}, {28,89}, {54,88}, {54,74}, + {54,78}, {54,62}, {17,89}, {54,82}, {54,84}, {34,48}, {25,7}, {17,23}, + {54,76}, {54,87}, {54,86}, {21,18}, {33,8}, {18,69}, {22,34}, {54,77}, + {54,89}, {54,92}, {55,0}, {27,28}, {55,6}, {35,79}, {54,90}, {55,4}, + {17,88}, {55,2}, {55,3}, {54,93}, {55,1}, {23,70}, {44,9}, {19,20}, + {16,56}, {55,5}, {38,25}, {15,12}, {39,64}, {54,59}, {55,11}, {55,15}, + {43,68}, {55,8}, {36,72}, {55,13}, {29,79}, {55,14}, {37,54}, {46,38}, + {55,10}, {55,16}, {24,90}, {31,42}, {15,51}, {55,9}, {55,7}, {32,57}, + {54,91}, {26,19}, {33,37}, {55,28}, {32,58}, {55,23}, {55,20}, {55,21}, + {27,69}, {55,24}, {55,27}, {55,22}, {28,4}, {55,25}, {55,19}, {43,91}, + {43,90}, {55,29}, {55,30}, {15,52}, {55,18}, {21,81}, {15,5}, {19,21}, + {55,26}, {55,34}, {55,33}, {55,38}, {55,39}, {55,37}, {55,40}, {55,32}, + {55,36}, {55,41}, {55,42}, {55,31}, {26,91}, {55,35}, {33,53}, {24,17}, + {55,17}, {30,20}, {55,55}, {41,72}, {55,45}, {55,46}, {55,47}, {55,54}, + {55,53}, {42,92}, {19,22}, {55,51}, {22,36}, {18,19}, {55,48}, {45,23}, + {55,50}, {15,53}, {55,52}, {55,43}, {55,49}, {55,56}, {22,35}, {55,44}, + {44,60}, {44,10}, {55,59}, {55,63}, {32,93}, {45,88}, {55,64}, {55,61}, + {55,58}, {55,57}, {55,62}, {41,15}, {37,19}, {22,37}, {55,65}, {55,60}, + {55,66}, {22,90}, {17,16}, {55,74}, {19,23}, {55,72}, {55,73}, {25,8}, + {55,71}, {55,69}, {55,68}, {55,75}, {55,67}, {55,77}, {17,90}, {55,79}, + {55,78}, {35,7}, {55,82}, {55,80}, {55,70}, {22,91}, {55,81}, {55,85}, + {55,84}, {55,86}, {55,83}, {55,87}, {55,88}, {55,89}, {41,73}, {55,91}, + {55,90}, {28,30}, {31,13}, {17,69}, {17,91}, {55,92}, {15,30}, {31,43}, + {55,93}, {75,34}, {56,0}, {22,64}, {56,1}, {31,78}, {56,2}, {56,3}, + {20,25}, {56,4}, {56,5}, {56,6}, {33,54}, {23,44}, {43,64}, {42,27}, + {28,73}, {56,7}, {31,79}, {77,28}, {39,65}, {27,73}, {25,44}, {56,8}, + {33,38}, {41,6}, {33,80}, {56,11}, {56,9}, {56,12}, {56,10}, {56,13}, + {41,16}, {15,22}, {40,61}, {39,66}, {56,14}, {56,17}, {29,20}, {20,26}, + {56,15}, {56,22}, {29,21}, {56,16}, {38,35}, {44,61}, {56,18}, {56,19}, + {56,23}, {36,73}, {56,20}, {24,18}, {31,61}, {56,37}, {39,19}, {33,81}, + {39,67}, {57,12}, {41,89}, {35,80}, {42,84}, {56,26}, {17,0}, {34,73}, + {56,35}, {34,19}, {56,29}, {56,36}, {56,31}, {56,38}, {56,34}, {56,33}, + {38,78}, {56,27}, {17,92}, {56,25}, {20,80}, {33,82}, {56,21}, {56,24}, + {24,19}, {31,58}, {29,22}, {56,32}, {38,49}, {20,81}, {18,39}, {18,70}, + {30,0}, {56,40}, {56,45}, {56,41}, {22,92}, {56,46}, {26,1}, {24,72}, + {28,5}, {56,28}, {26,92}, {56,43}, {26,55}, {56,44}, {15,35}, {56,39}, + {35,8}, {20,82}, {21,19}, {56,42}, {15,6}, {25,34}, {30,21}, {35,81}, + {39,51}, {56,48}, {32,61}, {33,9}, {26,10}, {56,49}, {56,51}, {56,47}, + {41,64}, {35,28}, {32,59}, {41,90}, {27,45}, {56,63}, {56,62}, {30,87}, + {22,93}, {56,56}, {29,24}, {37,71}, {38,16}, {56,54}, {32,60}, {27,87}, + {56,59}, {29,23}, {56,53}, {56,58}, {38,50}, {56,52}, {22,0}, {18,60}, + {56,60}, {45,10}, {25,45}, {34,20}, {56,57}, {31,59}, {24,20}, {30,67}, + {16,69}, {32,27}, {56,55}, {20,36}, {22,38}, {35,46}, {56,61}, {32,62}, + {56,64}, {56,66}, {33,22}, {56,72}, {56,67}, {56,69}, {40,32}, {35,82}, + {56,70}, {44,11}, {44,39}, {19,24}, {15,13}, {56,68}, {56,65}, {19,87}, + {16,70}, {56,71}, {44,40}, {56,75}, {33,26}, {56,82}, {56,76}, {56,73}, + {56,80}, {56,50}, {56,77}, {56,81}, {39,33}, {36,74}, {56,74}, {56,78}, + {22,39}, {25,80}, {31,60}, {56,86}, {36,5}, {56,83}, {42,63}, {56,84}, + {56,85}, {43,45}, {31,1}, {22,65}, {56,92}, {26,20}, {56,89}, {56,88}, + {38,17}, {37,20}, {36,16}, {56,90}, {56,91}, {40,78}, {38,36}, {26,2}, + {31,80}, {42,47}, {18,40}, {57,4}, {56,93}, {44,41}, {57,6}, {57,2}, + {57,3}, {32,63}, {57,1}, {56,30}, {57,5}, {57,0}, {57,10}, {57,11}, + {36,6}, {57,13}, {26,3}, {57,8}, {20,27}, {57,14}, {57,7}, {57,18}, + {57,17}, {57,16}, {57,19}, {57,21}, {29,80}, {57,20}, {57,24}, {57,22}, + {57,23}, {56,79}, {57,26}, {57,25}, {56,87}, {57,27}, {57,15}, {26,56}, + {57,28}, {57,29}, {57,31}, {57,30}, {57,32}, {17,93}, {24,21}, {41,91}, + {31,14}, {23,45}, {57,34}, {57,37}, {40,49}, {20,62}, {57,36}, {57,35}, + {38,51}, {57,38}, {21,20}, {57,40}, {57,39}, {19,25}, {26,21}, {37,55}, + {22,40}, {30,83}, {57,41}, {31,15}, {36,7}, {40,62}, {57,42}, {57,43}, + {57,44}, {41,23}, {52,60}, {31,37}, {40,43}, {25,55}, {39,68}, {39,34}, + {36,44}, {45,32}, {57,46}, {27,47}, {57,47}, {15,21}, {21,51}, {31,44}, + {40,63}, {57,48}, {26,33}, {34,38}, {26,58}, {30,22}, {57,49}, {41,92}, + {16,86}, {26,59}, {57,52}, {57,50}, {57,53}, {45,24}, {57,51}, {31,90}, + {57,54}, {33,17}, {57,55}, {19,89}, {57,57}, {57,56}, {57,58}, {57,59}, + {19,90}, {37,91}, {34,21}, {20,75}, {26,60}, {32,64}, {28,59}, {15,15}, + {57,60}, {17,1}, {57,64}, {24,22}, {57,63}, {25,10}, {29,25}, {57,62}, + {29,26}, {43,31}, {25,9}, {15,54}, {31,45}, {57,69}, {31,16}, {16,38}, + {28,52}, {42,69}, {25,81}, {29,27}, {31,6}, {57,68}, {57,66}, {57,67}, + {34,74}, {58,5}, {57,73}, {26,93}, {24,23}, {57,71}, {57,72}, {30,23}, + {57,70}, {26,14}, {57,75}, {57,74}, {57,79}, {57,80}, {57,76}, {18,1}, + {57,77}, {57,78}, {39,52}, {40,64}, {22,41}, {57,81}, {31,17}, {29,28}, + {34,49}, {21,38}, {57,82}, {57,86}, {17,42}, {57,83}, {57,85}, {57,84}, + {28,74}, {34,39}, {15,36}, {57,87}, {57,88}, {35,9}, {45,80}, {26,34}, + {41,74}, {42,28}, {58,1}, {57,90}, {57,93}, {57,92}, {57,89}, {58,0}, + {37,61}, {57,91}, {58,2}, {28,75}, {58,3}, {44,42}, {38,87}, {58,4}, + {58,6}, {58,7}, {58,8}, {21,41}, {16,39}, {24,24}, {58,9}, {58,10}, + {28,80}, {32,65}, {49,55}, {32,29}, {32,28}, {33,55}, {25,38}, {47,81}, + {22,77}, {44,12}, {41,93}, {40,93}, {58,11}, {25,82}, {35,30}, {58,12}, + {46,14}, {42,29}, {35,10}, {58,13}, {19,91}, {58,14}, {58,15}, {43,57}, + {43,3}, {42,85}, {42,59}, {26,4}, {58,17}, {27,74}, {42,48}, {58,19}, + {58,22}, {58,21}, {19,88}, {20,63}, {58,18}, {58,20}, {58,23}, {30,88}, + {44,90}, {15,40}, {25,63}, {33,27}, {27,60}, {29,82}, {58,26}, {36,45}, + {58,24}, {33,10}, {58,25}, {29,81}, {43,60}, {58,27}, {58,28}, {44,71}, + {58,33}, {24,25}, {38,52}, {58,30}, {36,75}, {57,61}, {57,65}, {20,46}, + {38,38}, {58,32}, {29,29}, {39,35}, {58,38}, {39,89}, {58,29}, {58,35}, + {58,34}, {31,46}, {42,76}, {45,50}, {42,70}, {17,43}, {26,61}, {46,39}, + {58,37}, {30,84}, {58,36}, {58,31}, {23,46}, {58,43}, {58,41}, {17,44}, + {58,39}, {58,45}, {58,51}, {33,39}, {41,32}, {58,53}, {40,1}, {58,52}, + {38,79}, {42,30}, {19,26}, {31,86}, {28,31}, {35,50}, {44,13}, {58,48}, + {58,47}, {58,49}, {58,46}, {58,54}, {58,44}, {58,42}, {58,50}, {58,40}, + {34,75}, {43,87}, {27,37}, {25,83}, {25,25}, {42,78}, {18,32}, {35,45}, + {37,41}, {16,40}, {31,81}, {31,19}, {22,9}, {58,56}, {24,26}, {18,91}, + {58,58}, {18,83}, {58,64}, {58,61}, {31,82}, {18,42}, {25,11}, {18,41}, + {25,46}, {58,59}, {22,68}, {22,42}, {36,76}, {58,57}, {15,37}, {58,60}, + {58,62}, {21,44}, {22,11}, {19,27}, {20,42}, {58,65}, {25,88}, {42,80}, + {26,22}, {58,66}, {40,15}, {58,78}, {17,18}, {58,67}, {58,84}, {58,68}, + {45,33}, {58,75}, {38,62}, {58,83}, {58,70}, {15,19}, {58,72}, {24,27}, + {58,74}, {58,73}, {58,69}, {58,80}, {29,30}, {51,76}, {23,71}, {44,91}, + {58,71}, {35,83}, {18,2}, {25,12}, {58,63}, {58,79}, {18,64}, {58,77}, + {58,81}, {36,77}, {19,93}, {59,17}, {43,40}, {58,86}, {19,92}, {58,93}, + {42,31}, {59,0}, {59,2}, {59,6}, {58,88}, {34,9}, {36,78}, {59,10}, + {58,91}, {59,7}, {59,1}, {30,24}, {59,11}, {31,18}, {59,9}, {19,28}, + {46,47}, {58,85}, {59,5}, {15,55}, {58,87}, {43,25}, {58,92}, {30,1}, + {35,38}, {58,82}, {59,4}, {30,89}, {59,14}, {18,80}, {23,0}, {59,16}, + {58,89}, {59,15}, {59,8}, {58,90}, {59,12}, {59,13}, {59,30}, {37,45}, + {59,3}, {59,26}, {59,28}, {35,55}, {44,43}, {40,85}, {59,23}, {33,41}, + {59,29}, {32,30}, {59,20}, {59,33}, {59,32}, {37,78}, {59,31}, {37,73}, + {59,35}, {59,22}, {21,39}, {59,25}, {28,60}, {38,63}, {59,27}, {21,42}, + {59,19}, {59,21}, {59,18}, {46,15}, {18,57}, {59,24}, {59,34}, {18,20}, + {25,70}, {16,60}, {59,51}, {46,16}, {59,54}, {30,25}, {59,53}, {59,52}, + {59,49}, {59,37}, {59,66}, {59,36}, {59,55}, {59,47}, {59,42}, {59,39}, + {59,40}, {59,48}, {83,1}, {59,45}, {24,28}, {35,39}, {32,67}, {59,43}, + {59,38}, {59,41}, {44,44}, {42,73}, {59,46}, {59,56}, {59,64}, {59,57}, + {59,70}, {59,68}, {59,63}, {59,62}, {35,47}, {32,68}, {59,60}, {59,58}, + {59,65}, {59,71}, {39,84}, {59,77}, {59,72}, {59,75}, {59,69}, {34,83}, + {40,23}, {59,59}, {59,67}, {29,31}, {43,46}, {59,87}, {59,74}, {23,1}, + {17,2}, {18,62}, {59,50}, {29,32}, {59,79}, {59,86}, {27,88}, {18,81}, + {34,13}, {59,76}, {59,81}, {59,85}, {21,21}, {20,43}, {59,83}, {20,0}, + {37,42}, {59,82}, {59,84}, {59,78}, {59,80}, {18,63}, {34,40}, {59,91}, + {59,89}, {23,72}, {59,88}, {60,0}, {58,55}, {59,90}, {59,92}, {59,93}, + {60,11}, {60,7}, {58,76}, {60,6}, {60,5}, {60,2}, {59,73}, {60,4}, + {60,3}, {60,9}, {46,5}, {60,12}, {21,90}, {60,8}, {60,10}, {39,6}, + {60,13}, {60,17}, {60,14}, {44,82}, {60,15}, {59,61}, {60,18}, {60,19}, + {16,20}, {60,21}, {22,70}, {27,0}, {21,52}, {17,3}, {44,62}, {60,23}, + {60,22}, {60,25}, {20,28}, {21,53}, {19,29}, {60,28}, {60,27}, {60,29}, + {17,45}, {34,22}, {60,30}, {19,30}, {60,32}, {60,31}, {60,33}, {60,34}, + {60,35}, {26,62}, {31,20}, {25,0}, {40,79}, {41,65}, {46,35}, {26,84}, + {25,47}, {45,81}, {60,36}, {60,37}, {26,63}, {60,38}, {60,39}, {60,41}, + {60,40}, {42,55}, {28,61}, {27,75}, {26,35}, {60,42}, {60,44}, {30,2}, + {60,43}, {60,45}, {60,46}, {60,47}, {60,48}, {60,49}, {60,51}, {60,50}, + {60,52}, {17,4}, {34,41}, {60,53}, {26,5}, {18,43}, {60,54}, {36,33}, + {51,43}, {20,2}, {60,55}, {60,56}, {41,75}, {42,71}, {37,38}, {60,57}, + {39,69}, {39,90}, {43,50}, {60,58}, {60,60}, {60,59}, {60,62}, {60,61}, + {60,64}, {26,64}, {43,16}, {60,65}, {60,66}, {20,3}, {60,67}, {60,69}, + {60,68}, {30,68}, {40,24}, {16,41}, {39,36}, {35,84}, {28,32}, {20,64}, + {39,37}, {27,13}, {60,71}, {19,31}, {16,87}, {37,81}, {60,70}, {24,29}, + {34,50}, {60,72}, {60,80}, {60,73}, {33,32}, {20,65}, {60,81}, {22,71}, + {20,4}, {60,79}, {60,77}, {60,74}, {44,63}, {35,31}, {37,56}, {60,75}, + {60,83}, {60,82}, {22,2}, {17,12}, {25,26}, {60,76}, {60,78}, {42,54}, + {33,83}, {42,86}, {60,91}, {60,92}, {17,46}, {41,7}, {43,92}, {61,0}, + {27,2}, {29,33}, {60,87}, {60,93}, {16,71}, {21,22}, {60,84}, {60,89}, + {31,83}, {38,80}, {39,70}, {60,86}, {42,0}, {60,88}, {61,3}, {61,1}, + {60,90}, {42,1}, {38,39}, {20,66}, {36,4}, {34,76}, {61,4}, {61,2}, + {33,56}, {60,85}, {16,42}, {44,45}, {61,15}, {61,14}, {31,85}, {61,11}, + {44,75}, {37,21}, {61,5}, {35,36}, {16,43}, {24,30}, {61,8}, {28,6}, + {61,13}, {61,12}, {61,7}, {61,10}, {18,71}, {61,9}, {38,40}, {45,13}, + {29,83}, {31,84}, {61,21}, {61,19}, {40,44}, {61,16}, {61,18}, {16,25}, + {24,31}, {46,17}, {18,28}, {40,65}, {44,64}, {18,3}, {30,26}, {61,20}, + {61,25}, {29,34}, {44,15}, {61,22}, {61,17}, {61,23}, {45,61}, {36,82}, + {37,33}, {18,21}, {16,52}, {61,29}, {61,32}, {45,34}, {44,67}, {61,39}, + {61,33}, {61,30}, {45,51}, {61,36}, {28,41}, {61,38}, {61,43}, {36,80}, + {61,41}, {61,35}, {34,23}, {61,42}, {61,31}, {61,37}, {61,44}, {15,91}, + {61,34}, {61,45}, {30,27}, {28,62}, {41,4}, {25,13}, {61,26}, {61,40}, + {36,25}, {31,21}, {18,72}, {25,48}, {29,35}, {61,28}, {28,33}, {22,43}, + {61,27}, {61,49}, {28,76}, {23,25}, {61,64}, {61,58}, {20,83}, {36,46}, + {61,53}, {61,62}, {15,14}, {16,17}, {17,24}, {61,55}, {33,11}, {61,46}, + {61,48}, {24,32}, {61,65}, {61,60}, {61,52}, {61,59}, {43,10}, {61,57}, + {61,61}, {23,47}, {29,36}, {34,24}, {61,51}, {44,14}, {61,54}, {61,47}, + {36,81}, {61,50}, {61,56}, {46,48}, {27,29}, {42,93}, {61,66}, {39,13}, + {61,78}, {23,26}, {28,63}, {61,68}, {45,14}, {24,33}, {61,81}, {15,77}, + {61,79}, {61,67}, {61,73}, {61,75}, {44,46}, {61,70}, {36,13}, {61,72}, + {61,80}, {61,74}, {43,38}, {61,69}, {27,1}, {61,93}, {18,73}, {61,71}, + {61,76}, {61,77}, {33,75}, {33,57}, {61,85}, {61,91}, {61,89}, {36,8}, + {62,2}, {61,86}, {61,87}, {61,63}, {20,88}, {40,25}, {27,30}, {24,86}, + {46,18}, {61,83}, {62,1}, {16,72}, {32,69}, {38,88}, {19,32}, {45,89}, + {43,0}, {35,49}, {61,90}, {61,92}, {32,17}, {62,0}, {61,88}, {61,82}, + {19,34}, {22,72}, {62,14}, {62,9}, {31,87}, {18,66}, {28,64}, {62,18}, + {62,11}, {35,11}, {62,8}, {35,56}, {62,43}, {62,5}, {62,4}, {62,13}, + {62,7}, {62,6}, {62,12}, {31,0}, {62,3}, {62,15}, {62,16}, {19,33}, + {62,21}, {62,20}, {62,22}, {62,25}, {36,34}, {62,19}, {62,23}, {22,66}, + {33,88}, {62,17}, {38,26}, {62,24}, {62,29}, {62,27}, {62,30}, {62,33}, + {62,26}, {24,73}, {38,7}, {61,24}, {44,83}, {62,28}, {62,32}, {33,84}, + {62,31}, {62,10}, {78,72}, {62,36}, {62,40}, {62,38}, {62,34}, {62,35}, + {62,39}, {62,37}, {40,45}, {62,45}, {62,42}, {62,41}, {62,44}, {37,51}, + {62,46}, {34,84}, {33,76}, {31,4}, {62,47}, {62,49}, {62,48}, {61,84}, + {62,50}, {37,70}, {62,51}, {17,47}, {36,83}, {18,4}, {20,67}, {27,61}, + {25,49}, {46,6}, {30,69}, {16,73}, {62,53}, {62,52}, {62,56}, {34,25}, + {62,59}, {62,54}, {62,58}, {62,57}, {36,31}, {15,56}, {45,84}, {62,61}, + {16,7}, {62,63}, {62,62}, {62,60}, {62,55}, {42,2}, {62,65}, {62,64}, + {16,74}, {62,67}, {41,17}, {62,66}, {43,20}, {29,38}, {32,18}, {29,37}, + {45,90}, {62,73}, {31,88}, {62,69}, {62,74}, {16,75}, {62,72}, {38,64}, + {62,68}, {62,71}, {29,39}, {39,48}, {62,75}, {27,48}, {31,89}, {62,78}, + {62,70}, {22,6}, {62,76}, {44,47}, {62,79}, {83,5}, {28,46}, {62,80}, + {62,81}, {38,13}, {62,83}, {62,84}, {38,18}, {36,84}, {62,86}, {62,88}, + {45,52}, {62,85}, {62,87}, {16,76}, {62,82}, {50,58}, {62,89}, {32,70}, + {26,23}, {62,91}, {62,90}, {30,3}, {49,56}, {62,92}, {63,0}, {62,77}, + {62,93}, {63,1}, {38,89}, {63,2}, {63,3}, {63,4}, {63,5}, {35,61}, + {63,7}, {63,6}, {63,8}, {63,9}, {27,62}, {40,66}, {43,75}, {63,10}, + {63,11}, {32,53}, {27,3}, {63,12}, {63,13}, {63,14}, {41,49}, {39,38}, + {63,15}, {38,54}, {35,12}, {63,16}, {17,70}, {20,76}, {43,37}, {43,21}, + {17,19}, {46,19}, {42,49}, {41,9}, {31,22}, {63,17}, {37,34}, {23,2}, + {63,18}, {25,51}, {63,20}, {63,19}, {63,21}, {63,22}, {63,23}, {20,29}, + {63,24}, {63,25}, {23,3}, {39,39}, {63,27}, {29,84}, {63,26}, {21,23}, + {63,28}, {63,30}, {63,29}, {63,31}, {23,48}, {63,32}, {21,72}, {32,31}, + {24,92}, {63,34}, {63,35}, {63,33}, {27,76}, {37,39}, {21,24}, {63,37}, + {34,11}, {63,36}, {46,20}, {38,65}, {63,40}, {63,42}, {63,39}, {43,51}, + {63,41}, {63,43}, {45,35}, {63,47}, {63,46}, {34,85}, {38,12}, {23,4}, + {63,45}, {63,44}, {44,16}, {44,17}, {63,48}, {16,77}, {24,85}, {26,65}, + {63,49}, {63,50}, {63,52}, {28,34}, {63,54}, {63,53}, {63,55}, {18,44}, + {63,57}, {63,56}, {63,59}, {63,58}, {23,27}, {45,7}, {21,43}, {17,5}, + {21,73}, {19,64}, {45,71}, {63,61}, {63,63}, {63,64}, {17,48}, {63,60}, + {26,24}, {35,32}, {63,62}, {63,67}, {27,77}, {63,65}, {22,29}, {39,40}, + {63,66}, {63,93}, {63,72}, {23,28}, {20,68}, {63,69}, {44,92}, {45,15}, + {33,85}, {63,71}, {63,73}, {45,53}, {21,54}, {39,91}, {38,41}, {63,74}, + {63,76}, {63,79}, {63,75}, {63,78}, {23,73}, {16,44}, {63,80}, {30,79}, + {63,77}, {45,59}, {63,83}, {83,3}, {63,81}, {63,84}, {63,70}, {63,82}, + {25,27}, {63,85}, {63,86}, {44,93}, {63,87}, {63,88}, {63,68}, {63,89}, + {19,35}, {27,4}, {63,90}, {63,91}, {63,92}, {16,26}, {64,0}, {40,26}, + {64,1}, {19,3}, {64,2}, {64,3}, {64,4}, {64,6}, {64,7}, {64,5}, {40,50}, + {64,9}, {64,8}, {64,11}, {64,10}, {64,12}, {64,13}, {64,15}, {64,14}, + {24,88}, {64,17}, {64,16}, {19,36}, {30,50}, {36,27}, {64,18}, {31,23}, + {26,25}, {16,88}, {64,19}, {44,48}, {41,66}, {64,20}, {36,35}, {44,18}, + {24,34}, {30,28}, {34,42}, {49,19}, {35,13}, {17,71}, {64,21}, {64,22}, + {64,27}, {64,25}, {64,24}, {57,33}, {18,5}, {64,23}, {15,57}, {39,9}, + {39,41}, {45,16}, {64,28}, {64,26}, {34,59}, {31,5}, {39,10}, {40,12}, + {64,30}, {45,11}, {22,44}, {64,31}, {64,29}, {39,53}, {64,32}, {64,33}, + {15,58}, {29,85}, {64,38}, {64,35}, {37,76}, {64,34}, {20,5}, {64,41}, + {64,36}, {64,37}, {64,40}, {64,39}, {40,4}, {32,33}, {32,32}, {20,30}, + {64,42}, {64,43}, {64,44}, {64,46}, {64,45}, {16,53}, {64,54}, {39,71}, + {64,48}, {64,50}, {64,52}, {30,29}, {64,53}, {64,51}, {27,31}, {64,47}, + {64,49}, {40,33}, {29,40}, {64,56}, {64,55}, {64,57}, {27,5}, {25,14}, + {36,86}, {64,58}, {35,42}, {64,60}, {45,0}, {64,59}, {32,72}, {64,65}, + {64,67}, {64,68}, {34,51}, {64,66}, {64,63}, {64,61}, {64,62}, {64,64}, + {64,71}, {64,69}, {64,70}, {64,72}, {64,74}, {64,75}, {64,76}, {64,77}, + {64,73}, {64,79}, {64,78}, {64,80}, {45,36}, {64,83}, {64,81}, {64,82}, + {19,65}, {43,93}, {41,41}, {64,85}, {64,84}, {64,86}, {64,87}, {64,91}, + {64,88}, {64,89}, {64,90}, {64,92}, {64,93}, {65,0}, {65,1}, {65,2}, + {39,14}, {36,47}, {65,3}, {38,81}, {40,19}, {65,4}, {65,5}, {36,9}, + {18,6}, {24,35}, {65,6}, {65,7}, {65,8}, {26,8}, {65,10}, {65,9}, {65,11}, + {65,12}, {39,72}, {65,13}, {65,14}, {82,72}, {65,15}, {65,16}, {65,17}, + {26,13}, {65,18}, {38,53}, {42,62}, {16,45}, {16,54}, {65,19}, {65,21}, + {65,20}, {36,79}, {31,24}, {60,24}, {65,22}, {43,32}, {65,23}, {19,37}, + {39,54}, {65,24}, {65,25}, {65,26}, {43,59}, {43,52}, {35,29}, {32,73}, + {65,28}, {28,65}, {29,41}, {65,31}, {65,30}, {65,29}, {39,92}, {19,38}, + {23,8}, {65,37}, {65,34}, {30,30}, {43,17}, {65,33}, {65,35}, {65,36}, + {65,32}, {65,38}, {65,39}, {35,14}, {19,66}, {34,68}, {65,40}, {65,41}, + {65,44}, {30,70}, {37,35}, {65,45}, {42,50}, {65,42}, {65,43}, {65,48}, + {65,47}, {65,46}, {65,50}, {65,49}, {65,51}, {65,53}, {65,52}, {41,44}, + {28,53}, {45,37}, {65,54}, {37,22}, {65,55}, {65,56}, {65,60}, {65,58}, + {65,59}, {65,57}, {65,61}, {65,62}, {65,63}, {65,64}, {43,22}, {65,65}, + {43,79}, {65,66}, {34,45}, {38,73}, {21,74}, {34,26}, {65,67}, {21,25}, + {31,47}, {65,68}, {25,28}, {65,69}, {65,70}, {23,5}, {25,52}, {65,72}, + {36,53}, {25,53}, {20,45}, {42,3}, {38,42}, {36,54}, {24,59}, {65,74}, + {29,42}, {45,17}, {24,36}, {23,6}, {39,2}, {65,76}, {65,78}, {23,74}, + {65,77}, {35,85}, {65,80}, {18,22}, {65,75}, {39,73}, {16,15}, {25,75}, + {46,49}, {65,79}, {65,81}, {41,42}, {31,56}, {65,83}, {65,84}, {65,82}, + {18,45}, {65,90}, {65,89}, {27,6}, {65,91}, {65,86}, {65,92}, {65,87}, + {39,55}, {65,85}, {65,88}, {66,1}, {66,0}, {42,64}, {65,93}, {15,74}, + {66,3}, {66,2}, {29,43}, {66,4}, {32,34}, {66,6}, {66,5}, {66,7}, {65,71}, + {65,73}, {66,9}, {66,8}, {27,7}, {45,72}, {27,49}, {66,10}, {22,22}, + {20,31}, {20,6}, {26,66}, {44,19}, {66,16}, {66,15}, {32,35}, {66,12}, + {66,14}, {28,42}, {30,31}, {66,13}, {66,11}, {38,9}, {29,44}, {40,27}, + {25,54}, {36,87}, {66,17}, {66,18}, {66,40}, {21,55}, {46,28}, {32,20}, + {66,19}, {17,49}, {35,86}, {41,0}, {66,20}, {20,89}, {66,21}, {66,23}, + {66,24}, {38,8}, {66,25}, {66,26}, {66,27}, {21,56}, {17,50}, {37,36}, + {28,7}, {26,67}, {66,28}, {28,8}, {17,41}, {40,34}, {66,29}, {39,74}, + {32,36}, {66,32}, {66,33}, {38,72}, {30,32}, {66,30}, {34,64}, {66,31}, + {29,45}, {15,59}, {20,8}, {66,34}, {35,87}, {66,35}, {31,38}, {43,12}, + {40,2}, {66,36}, {66,37}, {34,52}, {45,38}, {66,39}, {66,38}, {27,78}, + {66,41}, {15,79}, {66,44}, {66,42}, {17,51}, {22,45}, {66,43}, {24,37}, + {24,81}, {41,69}, {66,45}, {42,51}, {66,47}, {31,48}, {16,46}, {17,25}, + {15,11}, {66,46}, {66,48}, {66,49}, {29,86}, {66,50}, {18,46}, {66,52}, + {22,73}, {20,69}, {66,53}, {21,84}, {66,54}, {31,91}, {37,44}, {31,63}, + {25,84}, {66,55}, {34,65}, {32,74}, {66,57}, {66,59}, {66,56}, {66,58}, + {22,1}, {66,60}, {22,5}, {20,70}, {44,49}, {66,62}, {66,63}, {16,13}, + {66,66}, {18,85}, {66,65}, {66,64}, {66,68}, {66,61}, {66,69}, {45,8}, + {66,70}, {66,71}, {51,83}, {66,73}, {66,72}, {66,74}, {66,75}, {45,20}, + {66,76}, {79,78}, {29,46}, {66,77}, {66,78}, {28,54}, {37,23}, {66,79}, + {34,7}, {66,80}, {34,27}, {66,81}, {21,4}, {48,30}, {34,60}, {27,18}, + {19,39}, {66,82}, {67,1}, {66,85}, {20,71}, {66,84}, {67,3}, {66,83}, + {29,47}, {66,87}, {66,88}, {36,10}, {66,89}, {18,61}, {30,57}, {40,67}, + {66,91}, {33,71}, {66,86}, {66,90}, {66,92}, {25,90}, {67,5}, {40,13}, + {39,5}, {36,88}, {21,57}, {67,4}, {67,2}, {39,20}, {66,93}, {34,61}, + {36,90}, {36,89}, {25,85}, {67,23}, {67,7}, {67,9}, {67,12}, {67,13}, + {67,10}, {67,11}, {67,8}, {67,6}, {67,0}, {41,46}, {17,52}, {67,20}, + {67,17}, {67,22}, {67,21}, {38,82}, {43,6}, {26,26}, {67,15}, {67,24}, + {67,19}, {67,18}, {67,14}, {67,16}, {19,40}, {34,28}, {31,92}, {39,1}, + {67,29}, {39,3}, {31,64}, {67,26}, {39,46}, {67,30}, {41,50}, {34,58}, + {67,25}, {67,27}, {67,28}, {67,31}, {27,35}, {37,37}, {67,36}, {67,35}, + {67,32}, {46,21}, {67,41}, {67,45}, {67,42}, {67,38}, {67,39}, {67,44}, + {67,33}, {49,52}, {67,40}, {67,34}, {67,43}, {67,49}, {19,41}, {67,46}, + {67,47}, {67,48}, {67,51}, {67,50}, {39,85}, {67,52}, {45,91}, {41,76}, + {67,57}, {67,54}, {67,53}, {31,49}, {67,56}, {67,58}, {67,55}, {67,62}, + {67,59}, {67,60}, {67,37}, {67,61}, {67,63}, {67,64}, {41,37}, {67,65}, + {43,65}, {21,45}, {22,8}, {67,66}, {41,19}, {30,71}, {43,15}, {67,67}, + {45,18}, {38,83}, {32,37}, {38,19}, {28,44}, {15,31}, {67,72}, {67,70}, + {67,68}, {19,0}, {29,48}, {67,73}, {67,71}, {67,69}, {67,77}, {67,76}, + {67,75}, {67,74}, {67,78}, {67,79}, {31,25}, {67,80}, {67,82}, {67,81}, + {23,49}, {32,23}, {67,84}, {36,91}, {67,83}, {67,85}, {41,20}, {32,75}, + {24,38}, {67,86}, {45,39}, {67,88}, {67,89}, {67,90}, {67,91}, {26,68}, + {67,92}, {22,46}, {20,73}, {20,9}, {68,0}, {43,82}, {24,39}, {67,93}, + {68,3}, {43,69}, {38,27}, {40,18}, {28,66}, {68,2}, {27,50}, {24,40}, + {26,69}, {20,72}, {41,21}, {68,1}, {32,38}, {42,33}, {25,86}, {26,70}, + {35,60}, {68,6}, {45,62}, {25,56}, {68,7}, {30,33}, {68,9}, {29,49}, + {25,15}, {68,8}, {28,9}, {23,29}, {32,39}, {68,4}, {68,10}, {68,5}, + {22,47}, {68,13}, {68,17}, {22,74}, {68,12}, {68,21}, {24,41}, {44,76}, + {15,27}, {68,18}, {20,74}, {68,15}, {68,16}, {36,92}, {68,14}, {68,11}, + {18,7}, {31,67}, {23,7}, {68,23}, {68,20}, {68,22}, {68,19}, {22,48}, + {33,18}, {68,24}, {32,77}, {68,37}, {68,33}, {68,27}, {68,31}, {27,89}, + {15,60}, {68,26}, {68,34}, {68,38}, {24,42}, {43,53}, {35,53}, {68,28}, + {68,36}, {68,25}, {34,29}, {68,30}, {15,28}, {43,41}, {68,29}, {21,58}, + {39,75}, {32,76}, {45,47}, {28,78}, {68,77}, {68,39}, {31,93}, {68,35}, + {68,40}, {68,42}, {35,88}, {68,45}, {68,41}, {41,51}, {19,42}, {43,42}, + {15,61}, {68,44}, {45,92}, {68,43}, {16,78}, {37,75}, {68,46}, {68,53}, + {68,47}, {68,54}, {68,50}, {38,90}, {27,41}, {68,52}, {68,49}, {68,55}, + {68,48}, {28,35}, {42,4}, {28,43}, {68,51}, {68,63}, {68,59}, {68,62}, + {68,60}, {68,64}, {68,58}, {68,32}, {31,50}, {39,42}, {68,61}, {68,56}, + {32,0}, {22,49}, {28,10}, {30,4}, {32,21}, {68,67}, {68,69}, {68,70}, + {68,66}, {68,68}, {68,57}, {68,65}, {68,73}, {68,72}, {42,89}, {22,10}, + {68,71}, {68,75}, {68,74}, {68,78}, {68,80}, {26,27}, {68,76}, {68,81}, + {68,82}, {68,83}, {68,89}, {36,26}, {68,85}, {68,84}, {68,86}, {68,87}, + {68,88}, {68,90}, {68,91}, {19,43}, {68,92}, {68,93}, {69,0}, {69,1}, + {69,2}, {69,3}, {69,4}, {69,5}, {69,7}, {69,6}, {69,8}, {69,9}, {69,10}, + {69,13}, {69,11}, {69,12}, {25,64}, {22,50}, {34,53}, {39,18}, {28,79}, + {38,44}, {39,76}, {69,14}, {55,76}, {69,15}, {69,17}, {44,68}, {69,16}, + {69,19}, {69,18}, {44,50}, {69,20}, {39,93}, {69,21}, {69,24}, {69,23}, + {69,22}, {69,25}, {22,17}, {32,1}, {20,32}, {69,29}, {69,26}, {69,27}, + {69,30}, {69,31}, {69,28}, {16,8}, {17,6}, {69,33}, {69,34}, {69,35}, + {44,65}, {28,11}, {69,37}, {69,36}, {30,72}, {69,38}, {69,39}, {69,40}, + {19,68}, {19,44}, {69,41}, {69,42}, {42,60}, {44,66}, {44,51}, {46,22}, + {24,44}, {69,45}, {27,51}, {69,44}, {69,46}, {27,8}, {33,48}, {69,47}, + {24,43}, {43,54}, {69,48}, {69,49}, {69,50}, {69,51}, {69,52}, {27,9}, + {43,76}, {69,54}, {34,30}, {69,53}, {69,56}, {69,55}, {69,57}, {31,26}, + {69,58}, {69,59}, {41,24}, {69,60}, {32,78}, {69,61}, {69,62}, {45,93}, + {69,65}, {69,64}, {69,63}, {35,15}, {69,66}, {30,5}, {69,67}, {69,68}, + {46,23}, {69,69}, {69,70}, {69,72}, {69,71}, {39,4}, {37,88}, {46,29}, + {39,8}, {69,74}, {29,50}, {40,9}, {69,75}, {69,73}, {19,45}, {23,51}, + {26,71}, {39,77}, {23,9}, {42,34}, {69,78}, {69,76}, {24,45}, {24,46}, + {15,72}, {25,71}, {38,56}, {15,62}, {69,83}, {34,31}, {38,55}, {33,58}, + {69,85}, {69,81}, {69,84}, {69,79}, {69,82}, {42,5}, {23,52}, {15,92}, + {69,80}, {69,87}, {69,88}, {37,24}, {21,26}, {70,5}, {38,28}, {26,72}, + {21,27}, {31,39}, {46,37}, {43,13}, {69,86}, {31,51}, {20,50}, {69,89}, + {69,91}, {69,90}, {69,92}, {34,5}, {38,29}, {35,16}, {70,2}, {70,1}, + {69,93}, {30,52}, {40,68}, {70,4}, {70,3}, {24,47}, {46,50}, {70,20}, + {70,8}, {70,9}, {27,79}, {70,7}, {24,87}, {70,6}, {70,10}, {35,17}, + {41,1}, {32,2}, {33,59}, {70,14}, {70,15}, {70,11}, {70,12}, {70,13}, + {24,48}, {70,21}, {70,17}, {40,69}, {42,75}, {40,7}, {70,16}, {70,19}, + {70,18}, {42,35}, {70,22}, {70,23}, {32,22}, {70,24}, {70,26}, {70,30}, + {70,27}, {70,25}, {38,30}, {70,28}, {70,29}, {17,17}, {70,36}, {70,31}, + {70,32}, {70,33}, {33,0}, {70,35}, {70,34}, {70,37}, {70,38}, {70,39}, + {30,34}, {17,72}, {70,40}, {45,54}, {27,10}, {28,12}, {26,73}, {34,54}, + {70,41}, {70,42}, {16,16}, {70,43}, {70,44}, {70,45}, {70,46}, {70,47}, + {21,28}, {57,9}, {70,48}, {31,68}, {70,49}, {27,42}, {70,50}, {47,15}, + {70,51}, {41,61}, {19,59}, {32,3}, {28,55}, {40,80}, {28,13}, {70,52}, + {24,49}, {70,53}, {39,43}, {70,67}, {70,55}, {33,40}, {38,84}, {23,30}, + {70,54}, {32,4}, {70,56}, {35,89}, {70,58}, {70,57}, {70,60}, {70,59}, + {70,61}, {70,63}, {70,62}, {19,46}, {70,64}, {70,65}, {70,66}, {25,16}, + {45,40}, {70,68}, {30,6}, {16,79}, {70,69}, {70,70}, {70,71}, {15,81}, + {70,72}, {70,73}, {40,70}, {27,38}, {70,75}, {18,8}, {15,17}, {70,74}, + {70,77}, {38,45}, {30,35}, {17,53}, {42,6}, {22,60}, {21,59}, {70,76}, + {17,73}, {19,2}, {16,80}, {70,81}, {45,73}, {33,60}, {40,35}, {70,93}, + {17,54}, {70,91}, {70,89}, {70,80}, {70,78}, {70,79}, {27,66}, {21,75}, + {34,86}, {37,48}, {16,48}, {70,83}, {70,82}, {70,88}, {70,84}, {70,87}, + {43,47}, {70,86}, {17,55}, {18,92}, {70,90}, {70,92}, {22,51}, {71,2}, + {71,11}, {71,12}, {15,10}, {71,19}, {15,80}, {71,10}, {71,9}, {71,4}, + {71,3}, {71,1}, {71,0}, {34,66}, {33,90}, {71,6}, {71,5}, {71,8}, {32,79}, + {22,52}, {16,32}, {71,7}, {24,50}, {32,80}, {71,25}, {71,26}, {17,56}, + {17,13}, {71,23}, {71,13}, {71,21}, {71,28}, {71,22}, {71,20}, {70,85}, + {71,18}, {71,14}, {19,47}, {71,16}, {71,27}, {71,17}, {71,29}, {71,15}, + {38,91}, {44,72}, {71,24}, {71,46}, {71,38}, {30,90}, {20,37}, {21,60}, + {71,33}, {17,58}, {29,51}, {71,36}, {25,57}, {36,48}, {71,41}, {41,77}, + {71,32}, {17,57}, {23,53}, {40,8}, {71,42}, {71,30}, {71,39}, {71,49}, + {71,34}, {71,35}, {37,25}, {71,40}, {71,37}, {42,7}, {71,43}, {15,63}, + {71,31}, {71,45}, {71,44}, {38,74}, {71,51}, {71,62}, {18,93}, {71,65}, + {71,47}, {71,52}, {44,77}, {71,61}, {44,52}, {45,9}, {34,87}, {18,74}, + {40,81}, {71,67}, {37,0}, {15,16}, {71,60}, {71,56}, {32,81}, {71,50}, + {71,58}, {71,63}, {38,11}, {15,9}, {71,55}, {71,64}, {40,87}, {71,59}, + {71,54}, {29,52}, {28,14}, {27,11}, {43,55}, {40,38}, {71,70}, {71,79}, + {71,57}, {18,86}, {29,87}, {71,68}, {71,73}, {32,82}, {71,69}, {71,76}, + {34,62}, {71,77}, {44,53}, {71,66}, {18,23}, {71,72}, {71,75}, {43,11}, + {71,78}, {71,71}, {71,74}, {42,8}, {46,0}, {71,82}, {71,89}, {71,81}, + {27,34}, {71,48}, {41,45}, {43,1}, {71,88}, {71,87}, {71,83}, {71,84}, + {16,21}, {71,86}, {71,80}, {35,52}, {71,85}, {15,93}, {33,1}, {41,34}, + {71,90}, {72,0}, {39,56}, {71,93}, {29,53}, {27,40}, {72,2}, {21,29}, + {72,3}, {40,88}, {71,92}, {71,53}, {71,91}, {46,46}, {37,1}, {40,82}, + {72,10}, {72,16}, {72,17}, {72,4}, {38,85}, {72,14}, {72,6}, {72,8}, + {72,18}, {72,7}, {72,11}, {16,81}, {37,68}, {72,12}, {72,15}, {72,5}, + {32,5}, {72,9}, {26,6}, {30,36}, {22,15}, {43,83}, {43,88}, {28,81}, + {72,22}, {72,20}, {46,45}, {72,19}, {44,84}, {72,21}, {72,23}, {72,24}, + {72,27}, {72,25}, {37,2}, {72,26}, {39,44}, {72,13}, {28,82}, {72,28}, + {72,33}, {32,83}, {72,32}, {72,1}, {72,34}, {32,40}, {72,29}, {72,31}, + {72,30}, {60,16}, {60,1}, {72,36}, {72,35}, {44,85}, {65,27}, {72,37}, + {72,38}, {72,39}, {23,54}, {20,51}, {72,41}, {48,60}, {20,84}, {45,25}, + {21,82}, {72,42}, {72,43}, {34,77}, {72,44}, {37,89}, {15,25}, {17,66}, + {72,49}, {72,50}, {72,45}, {26,28}, {72,46}, {38,33}, {72,47}, {72,48}, + {72,58}, {72,52}, {72,55}, {72,51}, {72,53}, {72,54}, {27,55}, {72,56}, + {34,32}, {22,53}, {18,33}, {72,59}, {18,30}, {72,64}, {72,60}, {72,63}, + {39,25}, {72,61}, {72,62}, {40,39}, {39,57}, {72,65}, {33,92}, {72,75}, + {72,71}, {17,74}, {72,69}, {42,9}, {72,70}, {72,67}, {72,68}, {72,73}, + {72,76}, {72,74}, {72,72}, {72,66}, {34,55}, {72,83}, {43,9}, {72,81}, + {72,82}, {72,77}, {72,79}, {72,80}, {72,78}, {31,69}, {46,24}, {72,87}, + {72,88}, {73,0}, {30,9}, {72,90}, {72,93}, {72,85}, {72,84}, {73,1}, + {17,59}, {72,91}, {73,2}, {72,92}, {72,89}, {35,18}, {72,86}, {38,71}, + {73,6}, {44,26}, {73,5}, {73,4}, {73,13}, {73,7}, {73,15}, {44,69}, + {73,18}, {73,9}, {73,10}, {73,14}, {73,17}, {73,16}, {73,8}, {73,11}, + {73,28}, {73,21}, {73,19}, {73,20}, {73,25}, {73,26}, {18,9}, {20,33}, + {73,24}, {73,3}, {73,23}, {73,27}, {73,22}, {73,29}, {73,31}, {73,30}, + {73,33}, {73,32}, {72,57}, {73,37}, {73,34}, {73,35}, {73,36}, {73,38}, + {22,75}, {73,40}, {73,39}, {28,15}, {24,51}, {61,6}, {73,41}, {28,48}, + {18,24}, {73,42}, {16,49}, {29,54}, {73,43}, {24,52}, {73,44}, {15,64}, + {40,28}, {73,45}, {30,73}, {73,52}, {73,49}, {34,78}, {73,50}, {73,47}, + {21,61}, {73,46}, {73,53}, {22,21}, {33,61}, {73,59}, {73,55}, {33,20}, + {73,54}, {73,57}, {73,48}, {73,58}, {73,60}, {39,78}, {73,56}, {73,61}, + {73,63}, {23,50}, {73,51}, {15,32}, {73,62}, {25,58}, {45,85}, {73,64}, + {73,65}, {32,84}, {45,1}, {73,66}, {44,20}, {73,67}, {73,68}, {41,67}, + {73,69}, {25,31}, {45,2}, {73,74}, {73,75}, {29,55}, {73,73}, {44,70}, + {73,70}, {73,72}, {31,28}, {30,93}, {73,71}, {73,76}, {41,2}, {73,78}, + {73,77}, {18,75}, {42,10}, {73,79}, {73,91}, {73,81}, {73,82}, {73,83}, + {73,84}, {73,88}, {73,89}, {73,87}, {73,85}, {73,80}, {73,86}, {73,90}, + {79,22}, {17,7}, {73,93}, {21,62}, {73,92}, {74,1}, {74,0}, {74,3}, + {74,2}, {74,4}, {28,16}, {74,5}, {74,6}, {74,7}, {31,29}, {44,54}, + {74,8}, {41,3}, {38,37}, {74,9}, {74,10}, {23,10}, {20,11}, {74,11}, + {26,74}, {38,32}, {74,12}, {18,47}, {74,13}, {74,15}, {44,86}, {74,14}, + {30,37}, {74,16}, {74,17}, {74,18}, {19,48}, {74,19}, {74,20}, {74,21}, + {74,22}, {18,48}, {74,23}, {74,24}, {74,25}, {17,81}, {30,7}, {74,26}, + {74,27}, {74,28}, {23,31}, {35,90}, {74,29}, {22,54}, {30,53}, {74,32}, + {37,3}, {74,31}, {22,16}, {74,30}, {33,86}, {20,12}, {74,33}, {74,34}, + {29,56}, {22,76}, {74,35}, {42,11}, {31,62}, {20,85}, {43,84}, {32,41}, + {74,36}, {30,38}, {34,79}, {29,57}, {74,37}, {74,40}, {74,41}, {25,29}, + {33,33}, {74,39}, {29,58}, {40,29}, {74,38}, {26,75}, {16,50}, {74,45}, + {22,55}, {26,77}, {26,76}, {46,44}, {74,44}, {74,43}, {32,6}, {20,44}, + {46,34}, {18,25}, {29,59}, {74,42}, {74,47}, {74,48}, {74,46}, {23,55}, + {44,31}, {26,78}, {38,6}, {74,51}, {31,31}, {34,33}, {44,21}, {74,54}, + {23,75}, {31,30}, {74,50}, {74,55}, {23,76}, {74,52}, {74,53}, {74,49}, + {31,65}, {37,40}, {34,14}, {17,60}, {39,79}, {20,34}, {35,19}, {74,58}, + {74,56}, {34,43}, {31,32}, {19,49}, {74,57}, {30,58}, {45,41}, {46,31}, + {74,59}, {74,70}, {35,20}, {74,69}, {74,66}, {74,74}, {74,67}, {74,63}, + {35,91}, {74,62}, {74,60}, {44,0}, {26,79}, {74,64}, {74,61}, {74,68}, + {28,83}, {23,32}, {33,89}, {42,36}, {16,57}, {15,65}, {37,4}, {74,72}, + {74,71}, {37,69}, {74,76}, {74,65}, {74,75}, {74,77}, {23,11}, {74,73}, + {24,53}, {27,52}, {74,78}, {44,55}, {74,81}, {74,84}, {74,82}, {40,20}, + {74,79}, {21,63}, {74,83}, {74,85}, {74,89}, {74,86}, {74,88}, {74,87}, + {74,90}, {27,16}, {74,92}, {74,91}, {40,71}, {75,0}, {22,56}, {74,93}, + {75,1}, {75,2}, {20,35}, {69,32}, {29,88}, {75,3}, {23,77}, {75,4}, + {75,5}, {26,29}, {57,45}, {75,6}, {75,7}, {28,17}, {75,8}, {75,9}, + {75,10}, {75,11}, {75,12}, {34,10}, {75,13}, {75,15}, {75,14}, {37,5}, + {75,16}, {42,12}, {75,17}, {75,18}, {75,19}, {75,20}, {37,57}, {29,60}, + {75,21}, {24,74}, {47,13}, {75,22}, {75,23}, {40,30}, {75,24}, {75,32}, + {75,25}, {75,27}, {75,26}, {75,28}, {42,37}, {75,29}, {75,30}, {75,31}, + {75,33}, {18,12}, {35,70}, {40,72}, {25,65}, {24,54}, {40,46}, {17,62}, + {39,45}, {75,36}, {19,50}, {31,52}, {75,35}, {75,40}, {34,88}, {43,66}, + {75,38}, {75,39}, {20,13}, {75,41}, {38,66}, {33,62}, {39,80}, {36,28}, + {75,37}, {42,38}, {17,75}, {75,43}, {46,7}, {35,33}, {46,36}, {26,80}, + {75,42}, {33,16}, {75,59}, {32,7}, {37,87}, {40,47}, {75,46}, {26,30}, + {26,81}, {29,61}, {38,68}, {23,12}, {75,45}, {75,44}, {40,73}, {27,32}, + {36,49}, {75,48}, {75,49}, {24,55}, {75,47}, {75,50}, {75,51}, {75,53}, + {33,2}, {75,52}, {19,69}, {75,55}, {75,54}, {75,56}, {75,58}, {75,60}, + {75,61}, {31,53}, {27,46}, {75,62}, {18,49}, {75,63}, {32,85}, {75,64}, + {75,65}, {40,74}, {20,14}, {75,66}, {35,21}, {16,58}, {75,67}, {27,80}, + {30,85}, {33,12}, {75,70}, {75,69}, {75,68}, {75,76}, {75,74}, {75,71}, + {75,73}, {75,72}, {75,75}, {20,86}, {75,79}, {31,54}, {75,80}, {23,56}, + {75,77}, {75,78}, {46,8}, {35,22}, {32,8}, {75,81}, {75,84}, {75,82}, + {75,83}, {44,56}, {37,6}, {75,87}, {75,85}, {75,86}, {75,88}, {76,8}, + {75,91}, {75,92}, {75,90}, {75,89}, {35,92}, {76,0}, {76,4}, {76,1}, + {75,93}, {76,2}, {76,3}, {76,10}, {76,5}, {31,55}, {76,7}, {76,9}, + {76,6}, {76,12}, {28,18}, {76,11}, {76,13}, {76,14}, {76,17}, {76,16}, + {76,15}, {76,19}, {76,18}, {43,85}, {76,21}, {76,20}, {76,22}, {76,23}, + {76,25}, {76,24}, {30,39}, {76,26}, {21,76}, {76,27}, {76,29}, {76,30}, + {76,31}, {76,28}, {76,32}, {27,53}, {76,33}, {20,15}, {22,18}, {23,13}, + {76,34}, {37,79}, {36,29}, {76,35}, {76,38}, {27,19}, {76,37}, {76,36}, + {22,57}, {76,39}, {18,50}, {76,41}, {25,59}, {76,40}, {76,49}, {76,43}, + {76,45}, {41,68}, {76,42}, {76,44}, {76,48}, {76,46}, {20,16}, {76,47}, + {76,50}, {38,57}, {45,55}, {28,19}, {76,51}, {44,1}, {76,53}, {76,52}, + {76,56}, {44,32}, {76,55}, {18,76}, {76,54}, {76,59}, {76,58}, {76,57}, + {36,17}, {76,60}, {76,61}, {76,62}, {24,75}, {22,4}, {76,63}, {76,64}, + {76,65}, {30,40}, {76,66}, {27,12}, {76,67}, {76,68}, {49,0}, {48,93}, + {76,69}, {68,79}, {76,70}, {34,3}, {30,10}, {38,31}, {76,71}, {41,52}, + {35,51}, {24,93}, {34,8}, {16,9}, {42,87}, {30,54}, {22,61}, {21,64}, + {41,53}, {76,72}, {76,74}, {76,73}, {17,63}, {37,85}, {76,75}, {38,86}, + {36,18}, {76,76}, {28,49}, {76,78}, {43,33}, {76,93}, {76,80}, {76,81}, + {35,40}, {33,63}, {32,86}, {37,7}, {76,79}, {20,52}, {76,88}, {76,85}, + {77,4}, {37,8}, {34,63}, {76,82}, {35,93}, {36,50}, {76,83}, {76,87}, + {30,63}, {38,70}, {35,43}, {31,33}, {76,86}, {33,13}, {33,3}, {76,84}, + {15,8}, {46,1}, {76,89}, {33,64}, {28,20}, {30,41}, {76,91}, {76,90}, + {15,78}, {76,92}, {40,14}, {77,6}, {37,58}, {30,74}, {34,56}, {21,87}, + {77,5}, {44,22}, {16,30}, {41,54}, {17,64}, {77,0}, {77,1}, {77,2}, + {77,3}, {37,26}, {34,2}, {15,66}, {77,7}, {77,8}, {83,2}, {33,28}, + {77,9}, {16,82}, {32,43}, {23,14}, {44,57}, {77,10}, {36,11}, {32,87}, + {27,54}, {77,11}, {77,14}, {28,68}, {77,12}, {32,10}, {32,9}, {15,67}, + {45,42}, {77,16}, {39,81}, {77,18}, {77,17}, {77,15}, {66,67}, {19,51}, + {76,77}, {77,20}, {77,19}, {77,21}, {44,23}, {37,64}, {42,13}, {77,22}, + {27,56}, {77,23}, {77,24}, {77,25}, {36,0}, {15,73}, {24,56}, {46,25}, + {77,29}, {22,19}, {77,26}, {77,27}, {40,83}, {18,51}, {44,24}, {21,30}, + {36,51}, {77,30}, {77,31}, {77,32}, {36,1}, {77,34}, {77,33}, {37,50}, + {77,35}, {28,21}, {27,63}, {38,58}, {34,80}, {27,81}, {30,75}, {77,36}, + {77,37}, {30,60}, {77,38}, {77,39}, {77,40}, {44,78}, {28,22}, {77,42}, + {77,41}, {24,57}, {24,82}, {26,31}, {77,45}, {28,69}, {77,44}, {77,43}, + {33,72}, {23,78}, {31,34}, {39,15}, {28,24}, {77,46}, {29,62}, {77,49}, + {77,47}, {77,48}, {77,51}, {77,50}, {29,89}, {77,52}, {77,53}, {77,54}, + {39,47}, {25,50}, {27,64}, {77,55}, {77,56}, {45,3}, {28,36}, {43,77}, + {45,43}, {77,57}, {21,65}, {77,58}, {36,2}, {77,61}, {18,87}, {30,42}, + {77,59}, {77,60}, {35,63}, {42,52}, {21,91}, {77,63}, {77,64}, {77,62}, + {77,66}, {37,62}, {18,34}, {77,70}, {77,67}, {77,69}, {77,65}, {78,46}, + {77,68}, {45,74}, {23,57}, {77,78}, {36,19}, {77,73}, {77,76}, {77,74}, + {77,79}, {77,80}, {77,72}, {77,85}, {16,83}, {77,71}, {39,12}, {77,75}, + {29,63}, {24,58}, {42,39}, {21,67}, {28,37}, {37,27}, {32,12}, {77,83}, + {77,77}, {77,82}, {43,34}, {35,23}, {77,84}, {77,81}, {32,11}, {77,88}, + {77,87}, {77,86}, {42,14}, {28,90}, {77,89}, {41,62}, {16,51}, {40,37}, + {34,81}, {20,87}, {77,91}, {24,60}, {26,11}, {77,90}, {30,76}, {30,77}, + {78,0}, {78,2}, {29,90}, {78,1}, {78,3}, {21,50}, {40,36}, {27,65}, + {46,2}, {77,93}, {25,87}, {46,30}, {78,5}, {78,4}, {78,6}, {77,92}, + {37,72}, {36,52}, {35,54}, {78,11}, {34,34}, {78,7}, {78,8}, {22,12}, + {78,10}, {23,15}, {78,9}, {29,64}, {18,88}, {78,15}, {25,30}, {32,88}, + {35,41}, {18,26}, {78,13}, {78,14}, {35,34}, {78,12}, {78,16}, {78,22}, + {78,25}, {78,24}, {36,12}, {78,17}, {78,18}, {78,21}, {78,23}, {21,31}, + {78,26}, {78,20}, {78,19}, {78,30}, {78,31}, {78,32}, {78,29}, {78,28}, + {29,65}, {37,9}, {78,27}, {78,36}, {78,34}, {78,35}, {78,33}, {33,87}, + {78,37}, {78,38}, {78,40}, {19,52}, {78,39}, {43,89}, {78,51}, {78,41}, + {78,44}, {78,42}, {78,43}, {78,45}, {78,47}, {78,48}, {78,49}, {78,52}, + {78,50}, {78,53}, {78,55}, {78,54}, {35,24}, {43,70}, {78,56}, {32,13}, + {78,57}, {41,35}, {78,58}, {18,10}, {16,27}, {19,54}, {19,53}, {78,59}, + {78,60}, {78,61}, {78,62}, {78,63}, {19,55}, {18,52}, {24,61}, {39,21}, + {78,65}, {78,64}, {78,66}, {16,59}, {78,69}, {78,68}, {78,67}, {78,70}, + {78,73}, {15,38}, {78,71}, {78,75}, {78,74}, {78,77}, {78,76}, {78,78}, + {37,13}, {78,79}, {78,80}, {78,82}, {78,81}, {40,75}, {78,83}, {78,84}, + {25,68}, {78,85}, {78,86}, {42,40}, {32,42}, {15,3}, {33,42}, {78,87}, + {40,76}, {78,90}, {78,88}, {24,62}, {78,89}, {23,33}, {41,36}, {78,92}, + {79,0}, {78,93}, {79,1}, {16,0}, {30,55}, {28,91}, {19,56}, {79,2}, + {38,69}, {79,4}, {16,1}, {79,3}, {35,35}, {45,44}, {37,10}, {78,91}, + {45,5}, {23,16}, {44,58}, {21,88}, {45,19}, {22,7}, {33,65}, {70,0}, + {79,5}, {18,11}, {30,78}, {18,53}, {79,7}, {79,8}, {79,6}, {22,67}, + {25,60}, {29,66}, {16,2}, {45,56}, {79,10}, {77,13}, {79,9}, {79,13}, + {79,11}, {79,12}, {79,14}, {79,15}, {45,75}, {79,16}, {79,17}, {31,40}, + {39,26}, {30,92}, {19,70}, {44,25}, {17,76}, {28,23}, {23,58}, {79,20}, + {79,19}, {26,82}, {79,21}, {79,18}, {26,7}, {79,25}, {73,12}, {49,53}, + {30,86}, {79,23}, {45,4}, {37,80}, {16,10}, {31,66}, {27,21}, {41,22}, + {16,31}, {45,76}, {44,74}, {79,26}, {36,36}, {27,90}, {79,27}, {79,28}, + {30,43}, {79,29}, {45,77}, {79,24}, {79,31}, {79,33}, {79,32}, {79,30}, + {79,34}, {79,35}, {32,89}, {17,65}, {79,36}, {43,23}, {79,37}, {79,38}, + {46,9}, {58,16}, {79,39}, {79,40}, {79,41}, {79,45}, {79,42}, {79,43}, + {79,44}, {79,46}, {31,35}, {43,86}, {31,36}, {79,47}, {39,82}, {79,48}, + {82,50}, {43,43}, {79,49}, {79,50}, {79,51}, {18,54}, {79,53}, {30,56}, + {79,54}, {22,3}, {79,55}, {79,59}, {79,57}, {79,58}, {18,82}, {79,56}, + {79,60}, {79,61}, {15,39}, {79,62}, {79,63}, {29,67}, {79,64}, {20,38}, + {79,67}, {79,66}, {79,65}, {74,80}, {41,59}, {79,68}, {79,69}, {79,70}, + {79,71}, {79,72}, {79,73}, {19,57}, {79,74}, {79,75}, {38,2}, {79,77}, + {17,26}, {79,80}, {79,79}, {16,3}, {21,32}, {41,38}, {35,25}, {25,1}, + {24,63}, {28,70}, {30,59}, {79,82}, {79,81}, {44,33}, {19,71}, {39,49}, + {37,59}, {30,91}, {45,45}, {22,58}, {79,85}, {79,84}, {42,42}, {37,11}, + {16,47}, {79,86}, {79,83}, {40,48}, {44,73}, {79,87}, {79,88}, {79,90}, + {33,73}, {18,58}, {18,59}, {79,89}, {19,72}, {23,17}, {19,73}, {36,30}, + {45,63}, {23,59}, {79,91}, {79,92}, {79,93}, {80,0}, {80,2}, {80,1}, + {40,86}, {80,3}, {80,4}, {80,5}, {80,6}, {80,8}, {80,7}, {80,9}, {39,83}, + {69,43}, {30,8}, {20,17}, {80,10}, {80,11}, {49,11}, {60,26}, {39,50}, + {15,90}, {15,26}, {26,83}, {42,15}, {29,93}, {80,12}, {43,62}, {80,13}, + {44,59}, {16,33}, {26,32}, {80,14}, {17,77}, {80,15}, {80,16}, {80,18}, + {80,19}, {80,21}, {80,17}, {80,20}, {19,58}, {80,22}, {80,23}, {80,24}, + {80,25}, {80,26}, {80,28}, {80,27}, {80,30}, {80,33}, {80,29}, {80,31}, + {80,32}, {80,34}, {21,33}, {27,82}, {80,35}, {80,36}, {24,64}, {80,37}, + {18,29}, {38,46}, {80,38}, {80,39}, {34,57}, {37,74}, {80,40}, {38,92}, + {33,43}, {16,55}, {21,77}, {21,78}, {34,82}, {80,45}, {21,79}, {17,78}, + {80,44}, {80,42}, {80,43}, {80,41}, {80,55}, {80,46}, {80,47}, {80,48}, + {80,49}, {80,51}, {80,50}, {28,56}, {80,52}, {80,54}, {20,18}, {80,53}, + {32,90}, {23,18}, {80,56}, {33,44}, {80,57}, {37,12}, {80,58}, {80,63}, + {80,61}, {80,60}, {80,62}, {80,59}, {80,65}, {80,64}, {80,67}, {21,34}, + {80,66}, {80,68}, {80,69}, {80,71}, {80,70}, {80,72}, {80,74}, {80,73}, + {24,91}, {80,75}, {80,76}, {18,27}, {80,77}, {80,78}, {30,80}, {80,79}, + {80,80}, {80,81}, {80,82}, {24,65}, {80,83}, {80,84}, {80,85}, {80,86}, + {80,87}, {39,16}, {80,89}, {40,5}, {80,90}, {80,88}, {80,92}, {80,91}, + {80,93}, {81,0}, {81,1}, {81,2}, {81,3}, {81,4}, {81,5}, {81,6}, {81,7}, + {81,8}, {81,9}, {81,10}, {81,11}, {81,12}, {81,13}, {60,20}, {81,14}, + {67,87}, {20,19}, {18,0}, {25,17}, {81,16}, {81,15}, {43,4}, {81,18}, + {81,19}, {81,17}, {81,20}, {42,65}, {81,21}, {20,90}, {46,4}, {81,22}, + {81,24}, {15,29}, {81,25}, {41,10}, {81,23}, {81,26}, {81,27}, {81,28}, + {81,29}, {81,30}, {42,77}, {26,12}, {25,89}, {32,14}, {81,31}, {81,34}, + {81,32}, {81,35}, {23,80}, {81,33}, {81,36}, {81,37}, {81,38}, {81,42}, + {26,9}, {33,67}, {81,43}, {81,40}, {81,39}, {81,41}, {22,62}, {81,47}, + {81,46}, {81,45}, {15,18}, {81,57}, {81,53}, {81,54}, {81,50}, {81,56}, + {81,52}, {18,65}, {46,43}, {81,55}, {81,51}, {81,49}, {81,48}, {81,59}, + {81,62}, {81,61}, {81,60}, {40,40}, {81,58}, {15,82}, {81,63}, {81,65}, + {18,78}, {81,44}, {16,22}, {81,67}, {81,66}, {81,64}, {34,12}, {42,79}, + {45,57}, {81,68}, {81,69}, {81,70}, {81,71}, {81,72}, {35,26}, {81,73}, + {39,22}, {81,78}, {81,74}, {81,75}, {42,16}, {43,35}, {37,47}, {81,79}, + {81,80}, {37,29}, {81,77}, {81,76}, {17,9}, {81,88}, {81,87}, {16,84}, + {81,85}, {81,84}, {81,82}, {18,90}, {81,81}, {27,17}, {17,8}, {24,66}, + {81,91}, {81,90}, {81,89}, {81,86}, {81,92}, {81,93}, {82,4}, {82,3}, + {82,5}, {16,12}, {82,0}, {82,1}, {24,83}, {43,24}, {82,2}, {42,17}, + {82,10}, {82,6}, {82,11}, {82,8}, {82,7}, {22,59}, {82,12}, {82,13}, + {82,14}, {82,9}, {81,83}, {82,15}, {35,64}, {82,19}, {82,20}, {82,18}, + {82,17}, {82,23}, {82,16}, {82,21}, {82,22}, {82,25}, {82,24}, {82,27}, + {82,28}, {82,29}, {46,40}, {82,26}, {33,74}, {25,76}, {82,30}, {82,31}, + {82,32}, {82,33}, {82,34}, {23,19}, {82,35}, {82,36}, {27,14}, {82,37}, + {82,38}, {82,39}, {82,40}, {82,43}, {82,41}, {46,27}, {82,42}, {45,78}, + {82,44}, {45,58}, {82,45}, {38,93}, {82,46}, {82,48}, {82,49}, {82,47}, + {24,76}, {43,44}, {42,66}, {53,86}, {60,63}, {42,90}, {17,10}, {82,51}, + {20,47}, {82,52}, {82,53}, {82,54}, {24,84}, {82,55}, {63,51}, {43,58}, + {33,66}, {82,56}, {82,58}, {82,57}, {82,59}, {82,60}, {82,61}, {82,62}, + {82,63}, {82,64}, {82,65}, {82,66}, {82,67}, {82,68}, {82,69}, {82,70}, + {82,71}, {36,3}, {23,60}, {82,73}, {32,44}, {82,74}, {82,75}, {40,0}, + {82,76}, {82,77}, {66,22}, {75,57}, {79,76}, {82,78}, {82,79}, {82,81}, + {82,82}, {82,83}, {45,79}, {82,80}, {82,84}, {82,85}, {82,87}, {82,86}, + {82,89}, {82,90}, {82,88}, {45,21}, {82,91}, {82,92}, {66,51}, {82,93}, + {0,9}, {0,83}, {0,79}, {0,82}, {0,84}, {0,41}, {0,42}, {0,85}, {0,59}, + {0,3}, {0,4}, {0,30}, {2,15}, {2,16}, {2,17}, {2,18}, {2,19}, {2,20}, + {2,21}, {2,22}, {2,23}, {2,24}, {0,6}, {0,7}, {0,66}, {0,64}, {0,67}, + {0,8}, {0,86}, {2,32}, {2,33}, {2,34}, {2,35}, {2,36}, {2,37}, {2,38}, + {2,39}, {2,40}, {2,41}, {2,42}, {2,43}, {2,44}, {2,45}, {2,46}, {2,47}, + {2,48}, {2,49}, {2,50}, {2,51}, {2,52}, {2,53}, {2,54}, {2,55}, {2,56}, + {2,57}, {0,45}, {0,46}, {0,15}, {0,17}, {0,13}, {2,64}, {2,65}, {2,66}, + {2,67}, {2,68}, {2,69}, {2,70}, {2,71}, {2,72}, {2,73}, {2,74}, {2,75}, + {2,76}, {2,77}, {2,78}, {2,79}, {2,80}, {2,81}, {2,82}, {2,83}, {2,84}, + {2,85}, {2,86}, {2,87}, {2,88}, {2,89}, {0,47}, {0,34}, {0,48}, {0,16}, + {0,78} +}; + +/* This returns ERROR if the code point doesn't exist. */ +long int jisx0208_to_unicode(int r, int c) +{ + assert(r >= 0 && r < 94); + assert(c >= 0 && c < 94); + return jisx0208_forward[r][c]; +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_jisx0208(long int unicode, int *r, int *c) +{ + int rr, cc; + long int uu; + int i, j, k; + + i = -1; + j = lenof(jisx0208_backward); + while (j - i > 1) { + k = (i + j) / 2; + rr = jisx0208_backward[k].r; + cc = jisx0208_backward[k].c; + uu = jisx0208_forward[rr][cc]; + if (unicode > uu) + i = k; + else if (unicode < uu) + j = k; + else { + *r = rr; + *c = cc; + return 1; + } + } + return 0; +} + +#ifdef TESTMODE + +#include <stdio.h> + +int main(void) +{ + int r, c, rr, cc, ret; + long int u, uu; + + for (r = 0; r < 94; r++) { + for (c = 0; c < 94; c++) { + u = jisx0208_to_unicode(r, c); + if (u != ERROR) { + ret = unicode_to_jisx0208(u, &rr, &cc); + if (!ret) + printf("(%d,%d) -> U-%08lx but didn't convert back\n", + r, c, u); + else if (rr != r || cc != c) + printf("(%d,%d) -> U-%08lx -> (%d,%d)\n", + r, c, u, rr, cc); + } + } + } + + for (u = 0; u < 0x10000L; u++) { + ret = unicode_to_jisx0208(u, &r, &c); + if (ret) { + uu = jisx0208_to_unicode(r, c); + if (uu == ERROR) + printf("U-%08lx -> (%d,%d) but didn't convert back\n", + u, r, c); + else if (uu != u) + printf("U-%08lx -> (%d,%d) -> U-%08lx\n", u, r, c, uu); + } + } + + return 0; +} + +#endif diff --git a/app/tools/halibut/charset/jisx0212.c b/app/tools/halibut/charset/jisx0212.c new file mode 100644 index 0000000..49be67f --- /dev/null +++ b/app/tools/halibut/charset/jisx0212.c @@ -0,0 +1,1919 @@ +/* + * JIS X 0212 implementation for libcharset. (This is the character + * set itself, not any particular multibyte encoding of it. + * Multibyte encodings of this character set are handled + * separately.) + */ + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +/* + * These tables are generated from the JIS X 0212 <-> Unicode + * character mapping found at + * + * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/JIS0212.TXT + */ + +/* + * Mapping from JIS X 0212 to Unicode. For these purposes JIS X + * 0212 is considered to be a 94x94 square array, with coordinates + * running from (0,0) to (93,93). + * + * Generated by running the following sh+Perl over JIS0212.TXT: + +cat JIS0212.TXT | \ +perl -ne '$a{hex$1,hex$2}=$3 if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {for $r (0..93) { $o=" {"; for $c (0..93) {' \ + -e '$k=$a{$r+33,$c+33}; $k=" ERROR" unless defined $k;' \ + -e '$o .= ", " if $c > 0; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= $k; } print "$o},\n"; }}' + + */ + +static const unsigned short jisx0212_forward[94][94] = { + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x02D8, 0x02C7, 0x00B8, 0x02D9, + 0x02DD, 0x00AF, 0x02DB, 0x02DA, 0x007E, 0x0384, 0x0385, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x00A1, 0x00A6, 0x00BF, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0x00BA, 0x00AA, 0x00A9, 0x00AE, 0x2122, 0x00A4, 0x2116, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, 0x0386, 0x0388, 0x0389, 0x038A, 0x03AA, ERROR, 0x038C, ERROR, + 0x038E, 0x03AB, ERROR, 0x038F, ERROR, ERROR, ERROR, ERROR, 0x03AC, + 0x03AD, 0x03AE, 0x03AF, 0x03CA, 0x0390, 0x03CC, 0x03C2, 0x03CD, 0x03CB, + 0x03B0, 0x03CE, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x0402, 0x0403, 0x0404, + 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040E, + 0x040F, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, + 0x045B, 0x045C, 0x045E, 0x045F}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x00C6, 0x0110, ERROR, 0x0126, ERROR, 0x0132, ERROR, 0x0141, 0x013F, + ERROR, 0x014A, 0x00D8, 0x0152, ERROR, 0x0166, 0x00DE, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, 0x00E6, 0x0111, 0x00F0, 0x0127, + 0x0131, 0x0133, 0x0138, 0x0142, 0x0140, 0x0149, 0x014B, 0x00F8, 0x0153, + 0x00DF, 0x0167, 0x00FE, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x00C1, 0x00C0, 0x00C4, 0x00C2, 0x0102, 0x01CD, 0x0100, 0x0104, 0x00C5, + 0x00C3, 0x0106, 0x0108, 0x010C, 0x00C7, 0x010A, 0x010E, 0x00C9, 0x00C8, + 0x00CB, 0x00CA, 0x011A, 0x0116, 0x0112, 0x0118, ERROR, 0x011C, 0x011E, + 0x0122, 0x0120, 0x0124, 0x00CD, 0x00CC, 0x00CF, 0x00CE, 0x01CF, 0x0130, + 0x012A, 0x012E, 0x0128, 0x0134, 0x0136, 0x0139, 0x013D, 0x013B, 0x0143, + 0x0147, 0x0145, 0x00D1, 0x00D3, 0x00D2, 0x00D6, 0x00D4, 0x01D1, 0x0150, + 0x014C, 0x00D5, 0x0154, 0x0158, 0x0156, 0x015A, 0x015C, 0x0160, 0x015E, + 0x0164, 0x0162, 0x00DA, 0x00D9, 0x00DC, 0x00DB, 0x016C, 0x01D3, 0x0170, + 0x016A, 0x0172, 0x016E, 0x0168, 0x01D7, 0x01DB, 0x01D9, 0x01D5, 0x0174, + 0x00DD, 0x0178, 0x0176, 0x0179, 0x017D, 0x017B, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x00E1, 0x00E0, 0x00E4, 0x00E2, 0x0103, 0x01CE, 0x0101, 0x0105, 0x00E5, + 0x00E3, 0x0107, 0x0109, 0x010D, 0x00E7, 0x010B, 0x010F, 0x00E9, 0x00E8, + 0x00EB, 0x00EA, 0x011B, 0x0117, 0x0113, 0x0119, 0x01F5, 0x011D, 0x011F, + ERROR, 0x0121, 0x0125, 0x00ED, 0x00EC, 0x00EF, 0x00EE, 0x01D0, ERROR, + 0x012B, 0x012F, 0x0129, 0x0135, 0x0137, 0x013A, 0x013E, 0x013C, 0x0144, + 0x0148, 0x0146, 0x00F1, 0x00F3, 0x00F2, 0x00F6, 0x00F4, 0x01D2, 0x0151, + 0x014D, 0x00F5, 0x0155, 0x0159, 0x0157, 0x015B, 0x015D, 0x0161, 0x015F, + 0x0165, 0x0163, 0x00FA, 0x00F9, 0x00FC, 0x00FB, 0x016D, 0x01D4, 0x0171, + 0x016B, 0x0173, 0x016F, 0x0169, 0x01D8, 0x01DC, 0x01DA, 0x01D6, 0x0175, + 0x00FD, 0x00FF, 0x0177, 0x017A, 0x017E, 0x017C, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + {0x4E02, 0x4E04, 0x4E05, 0x4E0C, 0x4E12, 0x4E1F, 0x4E23, 0x4E24, 0x4E28, + 0x4E2B, 0x4E2E, 0x4E2F, 0x4E30, 0x4E35, 0x4E40, 0x4E41, 0x4E44, 0x4E47, + 0x4E51, 0x4E5A, 0x4E5C, 0x4E63, 0x4E68, 0x4E69, 0x4E74, 0x4E75, 0x4E79, + 0x4E7F, 0x4E8D, 0x4E96, 0x4E97, 0x4E9D, 0x4EAF, 0x4EB9, 0x4EC3, 0x4ED0, + 0x4EDA, 0x4EDB, 0x4EE0, 0x4EE1, 0x4EE2, 0x4EE8, 0x4EEF, 0x4EF1, 0x4EF3, + 0x4EF5, 0x4EFD, 0x4EFE, 0x4EFF, 0x4F00, 0x4F02, 0x4F03, 0x4F08, 0x4F0B, + 0x4F0C, 0x4F12, 0x4F15, 0x4F16, 0x4F17, 0x4F19, 0x4F2E, 0x4F31, 0x4F60, + 0x4F33, 0x4F35, 0x4F37, 0x4F39, 0x4F3B, 0x4F3E, 0x4F40, 0x4F42, 0x4F48, + 0x4F49, 0x4F4B, 0x4F4C, 0x4F52, 0x4F54, 0x4F56, 0x4F58, 0x4F5F, 0x4F63, + 0x4F6A, 0x4F6C, 0x4F6E, 0x4F71, 0x4F77, 0x4F78, 0x4F79, 0x4F7A, 0x4F7D, + 0x4F7E, 0x4F81, 0x4F82, 0x4F84}, + {0x4F85, 0x4F89, 0x4F8A, 0x4F8C, 0x4F8E, 0x4F90, 0x4F92, 0x4F93, 0x4F94, + 0x4F97, 0x4F99, 0x4F9A, 0x4F9E, 0x4F9F, 0x4FB2, 0x4FB7, 0x4FB9, 0x4FBB, + 0x4FBC, 0x4FBD, 0x4FBE, 0x4FC0, 0x4FC1, 0x4FC5, 0x4FC6, 0x4FC8, 0x4FC9, + 0x4FCB, 0x4FCC, 0x4FCD, 0x4FCF, 0x4FD2, 0x4FDC, 0x4FE0, 0x4FE2, 0x4FF0, + 0x4FF2, 0x4FFC, 0x4FFD, 0x4FFF, 0x5000, 0x5001, 0x5004, 0x5007, 0x500A, + 0x500C, 0x500E, 0x5010, 0x5013, 0x5017, 0x5018, 0x501B, 0x501C, 0x501D, + 0x501E, 0x5022, 0x5027, 0x502E, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, + 0x5041, 0x5042, 0x5045, 0x5046, 0x504A, 0x504C, 0x504E, 0x5051, 0x5052, + 0x5053, 0x5057, 0x5059, 0x505F, 0x5060, 0x5062, 0x5063, 0x5066, 0x5067, + 0x506A, 0x506D, 0x5070, 0x5071, 0x503B, 0x5081, 0x5083, 0x5084, 0x5086, + 0x508A, 0x508E, 0x508F, 0x5090}, + {0x5092, 0x5093, 0x5094, 0x5096, 0x509B, 0x509C, 0x509E, 0x509F, 0x50A0, + 0x50A1, 0x50A2, 0x50AA, 0x50AF, 0x50B0, 0x50B9, 0x50BA, 0x50BD, 0x50C0, + 0x50C3, 0x50C4, 0x50C7, 0x50CC, 0x50CE, 0x50D0, 0x50D3, 0x50D4, 0x50D8, + 0x50DC, 0x50DD, 0x50DF, 0x50E2, 0x50E4, 0x50E6, 0x50E8, 0x50E9, 0x50EF, + 0x50F1, 0x50F6, 0x50FA, 0x50FE, 0x5103, 0x5106, 0x5107, 0x5108, 0x510B, + 0x510C, 0x510D, 0x510E, 0x50F2, 0x5110, 0x5117, 0x5119, 0x511B, 0x511C, + 0x511D, 0x511E, 0x5123, 0x5127, 0x5128, 0x512C, 0x512D, 0x512F, 0x5131, + 0x5133, 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514A, 0x514F, 0x5153, + 0x5155, 0x5157, 0x5158, 0x515F, 0x5164, 0x5166, 0x517E, 0x5183, 0x5184, + 0x518B, 0x518E, 0x5198, 0x519D, 0x51A1, 0x51A3, 0x51AD, 0x51B8, 0x51BA, + 0x51BC, 0x51BE, 0x51BF, 0x51C2}, + {0x51C8, 0x51CF, 0x51D1, 0x51D2, 0x51D3, 0x51D5, 0x51D8, 0x51DE, 0x51E2, + 0x51E5, 0x51EE, 0x51F2, 0x51F3, 0x51F4, 0x51F7, 0x5201, 0x5202, 0x5205, + 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, 0x5222, 0x5228, 0x5231, 0x5232, + 0x5235, 0x523C, 0x5245, 0x5249, 0x5255, 0x5257, 0x5258, 0x525A, 0x525C, + 0x525F, 0x5260, 0x5261, 0x5266, 0x526E, 0x5277, 0x5278, 0x5279, 0x5280, + 0x5282, 0x5285, 0x528A, 0x528C, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, + 0x529A, 0x529C, 0x52A4, 0x52A5, 0x52A6, 0x52A7, 0x52AF, 0x52B0, 0x52B6, + 0x52B7, 0x52B8, 0x52BA, 0x52BB, 0x52BD, 0x52C0, 0x52C4, 0x52C6, 0x52C8, + 0x52CC, 0x52CF, 0x52D1, 0x52D4, 0x52D6, 0x52DB, 0x52DC, 0x52E1, 0x52E5, + 0x52E8, 0x52E9, 0x52EA, 0x52EC, 0x52F0, 0x52F1, 0x52F4, 0x52F6, 0x52F7, + 0x5300, 0x5303, 0x530A, 0x530B}, + {0x530C, 0x5311, 0x5313, 0x5318, 0x531B, 0x531C, 0x531E, 0x531F, 0x5325, + 0x5327, 0x5328, 0x5329, 0x532B, 0x532C, 0x532D, 0x5330, 0x5332, 0x5335, + 0x533C, 0x533D, 0x533E, 0x5342, 0x534C, 0x534B, 0x5359, 0x535B, 0x5361, + 0x5363, 0x5365, 0x536C, 0x536D, 0x5372, 0x5379, 0x537E, 0x5383, 0x5387, + 0x5388, 0x538E, 0x5393, 0x5394, 0x5399, 0x539D, 0x53A1, 0x53A4, 0x53AA, + 0x53AB, 0x53AF, 0x53B2, 0x53B4, 0x53B5, 0x53B7, 0x53B8, 0x53BA, 0x53BD, + 0x53C0, 0x53C5, 0x53CF, 0x53D2, 0x53D3, 0x53D5, 0x53DA, 0x53DD, 0x53DE, + 0x53E0, 0x53E6, 0x53E7, 0x53F5, 0x5402, 0x5413, 0x541A, 0x5421, 0x5427, + 0x5428, 0x542A, 0x542F, 0x5431, 0x5434, 0x5435, 0x5443, 0x5444, 0x5447, + 0x544D, 0x544F, 0x545E, 0x5462, 0x5464, 0x5466, 0x5467, 0x5469, 0x546B, + 0x546D, 0x546E, 0x5474, 0x547F}, + {0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548D, 0x5491, 0x5495, 0x5496, + 0x549C, 0x549F, 0x54A1, 0x54A6, 0x54A7, 0x54A9, 0x54AA, 0x54AD, 0x54AE, + 0x54B1, 0x54B7, 0x54B9, 0x54BA, 0x54BB, 0x54BF, 0x54C6, 0x54CA, 0x54CD, + 0x54CE, 0x54E0, 0x54EA, 0x54EC, 0x54EF, 0x54F6, 0x54FC, 0x54FE, 0x54FF, + 0x5500, 0x5501, 0x5505, 0x5508, 0x5509, 0x550C, 0x550D, 0x550E, 0x5515, + 0x552A, 0x552B, 0x5532, 0x5535, 0x5536, 0x553B, 0x553C, 0x553D, 0x5541, + 0x5547, 0x5549, 0x554A, 0x554D, 0x5550, 0x5551, 0x5558, 0x555A, 0x555B, + 0x555E, 0x5560, 0x5561, 0x5564, 0x5566, 0x557F, 0x5581, 0x5582, 0x5586, + 0x5588, 0x558E, 0x558F, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597, 0x55A3, + 0x55A4, 0x55AD, 0x55B2, 0x55BF, 0x55C1, 0x55C3, 0x55C6, 0x55C9, 0x55CB, + 0x55CC, 0x55CE, 0x55D1, 0x55D2}, + {0x55D3, 0x55D7, 0x55D8, 0x55DB, 0x55DE, 0x55E2, 0x55E9, 0x55F6, 0x55FF, + 0x5605, 0x5608, 0x560A, 0x560D, 0x560E, 0x560F, 0x5610, 0x5611, 0x5612, + 0x5619, 0x562C, 0x5630, 0x5633, 0x5635, 0x5637, 0x5639, 0x563B, 0x563C, + 0x563D, 0x563F, 0x5640, 0x5641, 0x5643, 0x5644, 0x5646, 0x5649, 0x564B, + 0x564D, 0x564F, 0x5654, 0x565E, 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, + 0x5669, 0x566D, 0x566F, 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, + 0x568B, 0x568C, 0x5695, 0x5699, 0x569A, 0x569D, 0x569E, 0x569F, 0x56A6, + 0x56A7, 0x56A8, 0x56A9, 0x56AB, 0x56AC, 0x56AD, 0x56B1, 0x56B3, 0x56B7, + 0x56BE, 0x56C5, 0x56C9, 0x56CA, 0x56CB, 0x56CF, 0x56D0, 0x56CC, 0x56CD, + 0x56D9, 0x56DC, 0x56DD, 0x56DF, 0x56E1, 0x56E4, 0x56E5, 0x56E6, 0x56E7, + 0x56E8, 0x56F1, 0x56EB, 0x56ED}, + {0x56F6, 0x56F7, 0x5701, 0x5702, 0x5707, 0x570A, 0x570C, 0x5711, 0x5715, + 0x571A, 0x571B, 0x571D, 0x5720, 0x5722, 0x5723, 0x5724, 0x5725, 0x5729, + 0x572A, 0x572C, 0x572E, 0x572F, 0x5733, 0x5734, 0x573D, 0x573E, 0x573F, + 0x5745, 0x5746, 0x574C, 0x574D, 0x5752, 0x5762, 0x5765, 0x5767, 0x5768, + 0x576B, 0x576D, 0x576E, 0x576F, 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, + 0x5777, 0x5779, 0x577A, 0x577B, 0x577C, 0x577E, 0x5781, 0x5783, 0x578C, + 0x5794, 0x5797, 0x5799, 0x579A, 0x579C, 0x579D, 0x579E, 0x579F, 0x57A1, + 0x5795, 0x57A7, 0x57A8, 0x57A9, 0x57AC, 0x57B8, 0x57BD, 0x57C7, 0x57C8, + 0x57CC, 0x57CF, 0x57D5, 0x57DD, 0x57DE, 0x57E4, 0x57E6, 0x57E7, 0x57E9, + 0x57ED, 0x57F0, 0x57F5, 0x57F6, 0x57F8, 0x57FD, 0x57FE, 0x57FF, 0x5803, + 0x5804, 0x5808, 0x5809, 0x57E1}, + {0x580C, 0x580D, 0x581B, 0x581E, 0x581F, 0x5820, 0x5826, 0x5827, 0x582D, + 0x5832, 0x5839, 0x583F, 0x5849, 0x584C, 0x584D, 0x584F, 0x5850, 0x5855, + 0x585F, 0x5861, 0x5864, 0x5867, 0x5868, 0x5878, 0x587C, 0x587F, 0x5880, + 0x5881, 0x5887, 0x5888, 0x5889, 0x588A, 0x588C, 0x588D, 0x588F, 0x5890, + 0x5894, 0x5896, 0x589D, 0x58A0, 0x58A1, 0x58A2, 0x58A6, 0x58A9, 0x58B1, + 0x58B2, 0x58C4, 0x58BC, 0x58C2, 0x58C8, 0x58CD, 0x58CE, 0x58D0, 0x58D2, + 0x58D4, 0x58D6, 0x58DA, 0x58DD, 0x58E1, 0x58E2, 0x58E9, 0x58F3, 0x5905, + 0x5906, 0x590B, 0x590C, 0x5912, 0x5913, 0x5914, 0x8641, 0x591D, 0x5921, + 0x5923, 0x5924, 0x5928, 0x592F, 0x5930, 0x5933, 0x5935, 0x5936, 0x593F, + 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595B, 0x595D, 0x595E, 0x595F, + 0x5961, 0x5963, 0x596B, 0x596D}, + {0x596F, 0x5972, 0x5975, 0x5976, 0x5979, 0x597B, 0x597C, 0x598B, 0x598C, + 0x598E, 0x5992, 0x5995, 0x5997, 0x599F, 0x59A4, 0x59A7, 0x59AD, 0x59AE, + 0x59AF, 0x59B0, 0x59B3, 0x59B7, 0x59BA, 0x59BC, 0x59C1, 0x59C3, 0x59C4, + 0x59C8, 0x59CA, 0x59CD, 0x59D2, 0x59DD, 0x59DE, 0x59DF, 0x59E3, 0x59E4, + 0x59E7, 0x59EE, 0x59EF, 0x59F1, 0x59F2, 0x59F4, 0x59F7, 0x5A00, 0x5A04, + 0x5A0C, 0x5A0D, 0x5A0E, 0x5A12, 0x5A13, 0x5A1E, 0x5A23, 0x5A24, 0x5A27, + 0x5A28, 0x5A2A, 0x5A2D, 0x5A30, 0x5A44, 0x5A45, 0x5A47, 0x5A48, 0x5A4C, + 0x5A50, 0x5A55, 0x5A5E, 0x5A63, 0x5A65, 0x5A67, 0x5A6D, 0x5A77, 0x5A7A, + 0x5A7B, 0x5A7E, 0x5A8B, 0x5A90, 0x5A93, 0x5A96, 0x5A99, 0x5A9C, 0x5A9E, + 0x5A9F, 0x5AA0, 0x5AA2, 0x5AA7, 0x5AAC, 0x5AB1, 0x5AB2, 0x5AB3, 0x5AB5, + 0x5AB8, 0x5ABA, 0x5ABB, 0x5ABF}, + {0x5AC4, 0x5AC6, 0x5AC8, 0x5ACF, 0x5ADA, 0x5ADC, 0x5AE0, 0x5AE5, 0x5AEA, + 0x5AEE, 0x5AF5, 0x5AF6, 0x5AFD, 0x5B00, 0x5B01, 0x5B08, 0x5B17, 0x5B34, + 0x5B19, 0x5B1B, 0x5B1D, 0x5B21, 0x5B25, 0x5B2D, 0x5B38, 0x5B41, 0x5B4B, + 0x5B4C, 0x5B52, 0x5B56, 0x5B5E, 0x5B68, 0x5B6E, 0x5B6F, 0x5B7C, 0x5B7D, + 0x5B7E, 0x5B7F, 0x5B81, 0x5B84, 0x5B86, 0x5B8A, 0x5B8E, 0x5B90, 0x5B91, + 0x5B93, 0x5B94, 0x5B96, 0x5BA8, 0x5BA9, 0x5BAC, 0x5BAD, 0x5BAF, 0x5BB1, + 0x5BB2, 0x5BB7, 0x5BBA, 0x5BBC, 0x5BC0, 0x5BC1, 0x5BCD, 0x5BCF, 0x5BD6, + 0x5BD7, 0x5BD8, 0x5BD9, 0x5BDA, 0x5BE0, 0x5BEF, 0x5BF1, 0x5BF4, 0x5BFD, + 0x5C0C, 0x5C17, 0x5C1E, 0x5C1F, 0x5C23, 0x5C26, 0x5C29, 0x5C2B, 0x5C2C, + 0x5C2E, 0x5C30, 0x5C32, 0x5C35, 0x5C36, 0x5C59, 0x5C5A, 0x5C5C, 0x5C62, + 0x5C63, 0x5C67, 0x5C68, 0x5C69}, + {0x5C6D, 0x5C70, 0x5C74, 0x5C75, 0x5C7A, 0x5C7B, 0x5C7C, 0x5C7D, 0x5C87, + 0x5C88, 0x5C8A, 0x5C8F, 0x5C92, 0x5C9D, 0x5C9F, 0x5CA0, 0x5CA2, 0x5CA3, + 0x5CA6, 0x5CAA, 0x5CB2, 0x5CB4, 0x5CB5, 0x5CBA, 0x5CC9, 0x5CCB, 0x5CD2, + 0x5CDD, 0x5CD7, 0x5CEE, 0x5CF1, 0x5CF2, 0x5CF4, 0x5D01, 0x5D06, 0x5D0D, + 0x5D12, 0x5D2B, 0x5D23, 0x5D24, 0x5D26, 0x5D27, 0x5D31, 0x5D34, 0x5D39, + 0x5D3D, 0x5D3F, 0x5D42, 0x5D43, 0x5D46, 0x5D48, 0x5D55, 0x5D51, 0x5D59, + 0x5D4A, 0x5D5F, 0x5D60, 0x5D61, 0x5D62, 0x5D64, 0x5D6A, 0x5D6D, 0x5D70, + 0x5D79, 0x5D7A, 0x5D7E, 0x5D7F, 0x5D81, 0x5D83, 0x5D88, 0x5D8A, 0x5D92, + 0x5D93, 0x5D94, 0x5D95, 0x5D99, 0x5D9B, 0x5D9F, 0x5DA0, 0x5DA7, 0x5DAB, + 0x5DB0, 0x5DB4, 0x5DB8, 0x5DB9, 0x5DC3, 0x5DC7, 0x5DCB, 0x5DD0, 0x5DCE, + 0x5DD8, 0x5DD9, 0x5DE0, 0x5DE4}, + {0x5DE9, 0x5DF8, 0x5DF9, 0x5E00, 0x5E07, 0x5E0D, 0x5E12, 0x5E14, 0x5E15, + 0x5E18, 0x5E1F, 0x5E20, 0x5E2E, 0x5E28, 0x5E32, 0x5E35, 0x5E3E, 0x5E4B, + 0x5E50, 0x5E49, 0x5E51, 0x5E56, 0x5E58, 0x5E5B, 0x5E5C, 0x5E5E, 0x5E68, + 0x5E6A, 0x5E6B, 0x5E6C, 0x5E6D, 0x5E6E, 0x5E70, 0x5E80, 0x5E8B, 0x5E8E, + 0x5EA2, 0x5EA4, 0x5EA5, 0x5EA8, 0x5EAA, 0x5EAC, 0x5EB1, 0x5EB3, 0x5EBD, + 0x5EBE, 0x5EBF, 0x5EC6, 0x5ECC, 0x5ECB, 0x5ECE, 0x5ED1, 0x5ED2, 0x5ED4, + 0x5ED5, 0x5EDC, 0x5EDE, 0x5EE5, 0x5EEB, 0x5F02, 0x5F06, 0x5F07, 0x5F08, + 0x5F0E, 0x5F19, 0x5F1C, 0x5F1D, 0x5F21, 0x5F22, 0x5F23, 0x5F24, 0x5F28, + 0x5F2B, 0x5F2C, 0x5F2E, 0x5F30, 0x5F34, 0x5F36, 0x5F3B, 0x5F3D, 0x5F3F, + 0x5F40, 0x5F44, 0x5F45, 0x5F47, 0x5F4D, 0x5F50, 0x5F54, 0x5F58, 0x5F5B, + 0x5F60, 0x5F63, 0x5F64, 0x5F67}, + {0x5F6F, 0x5F72, 0x5F74, 0x5F75, 0x5F78, 0x5F7A, 0x5F7D, 0x5F7E, 0x5F89, + 0x5F8D, 0x5F8F, 0x5F96, 0x5F9C, 0x5F9D, 0x5FA2, 0x5FA7, 0x5FAB, 0x5FA4, + 0x5FAC, 0x5FAF, 0x5FB0, 0x5FB1, 0x5FB8, 0x5FC4, 0x5FC7, 0x5FC8, 0x5FC9, + 0x5FCB, 0x5FD0, 0x5FD1, 0x5FD2, 0x5FD3, 0x5FD4, 0x5FDE, 0x5FE1, 0x5FE2, + 0x5FE8, 0x5FE9, 0x5FEA, 0x5FEC, 0x5FED, 0x5FEE, 0x5FEF, 0x5FF2, 0x5FF3, + 0x5FF6, 0x5FFA, 0x5FFC, 0x6007, 0x600A, 0x600D, 0x6013, 0x6014, 0x6017, + 0x6018, 0x601A, 0x601F, 0x6024, 0x602D, 0x6033, 0x6035, 0x6040, 0x6047, + 0x6048, 0x6049, 0x604C, 0x6051, 0x6054, 0x6056, 0x6057, 0x605D, 0x6061, + 0x6067, 0x6071, 0x607E, 0x607F, 0x6082, 0x6086, 0x6088, 0x608A, 0x608E, + 0x6091, 0x6093, 0x6095, 0x6098, 0x609D, 0x609E, 0x60A2, 0x60A4, 0x60A5, + 0x60A8, 0x60B0, 0x60B1, 0x60B7}, + {0x60BB, 0x60BE, 0x60C2, 0x60C4, 0x60C8, 0x60C9, 0x60CA, 0x60CB, 0x60CE, + 0x60CF, 0x60D4, 0x60D5, 0x60D9, 0x60DB, 0x60DD, 0x60DE, 0x60E2, 0x60E5, + 0x60F2, 0x60F5, 0x60F8, 0x60FC, 0x60FD, 0x6102, 0x6107, 0x610A, 0x610C, + 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117, 0x6119, 0x611C, + 0x611E, 0x6122, 0x612A, 0x612B, 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, + 0x6139, 0x6141, 0x6145, 0x6146, 0x6149, 0x615E, 0x6160, 0x616C, 0x6172, + 0x6178, 0x617B, 0x617C, 0x617F, 0x6180, 0x6181, 0x6183, 0x6184, 0x618B, + 0x618D, 0x6192, 0x6193, 0x6197, 0x6198, 0x619C, 0x619D, 0x619F, 0x61A0, + 0x61A5, 0x61A8, 0x61AA, 0x61AD, 0x61B8, 0x61B9, 0x61BC, 0x61C0, 0x61C1, + 0x61C2, 0x61CE, 0x61CF, 0x61D5, 0x61DC, 0x61DD, 0x61DE, 0x61DF, 0x61E1, + 0x61E2, 0x61E7, 0x61E9, 0x61E5}, + {0x61EC, 0x61ED, 0x61EF, 0x6201, 0x6203, 0x6204, 0x6207, 0x6213, 0x6215, + 0x621C, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, 0x622B, 0x6239, 0x623D, + 0x6242, 0x6243, 0x6244, 0x6246, 0x624C, 0x6250, 0x6251, 0x6252, 0x6254, + 0x6256, 0x625A, 0x625C, 0x6264, 0x626D, 0x626F, 0x6273, 0x627A, 0x627D, + 0x628D, 0x628E, 0x628F, 0x6290, 0x62A6, 0x62A8, 0x62B3, 0x62B6, 0x62B7, + 0x62BA, 0x62BE, 0x62BF, 0x62C4, 0x62CE, 0x62D5, 0x62D6, 0x62DA, 0x62EA, + 0x62F2, 0x62F4, 0x62FC, 0x62FD, 0x6303, 0x6304, 0x630A, 0x630B, 0x630D, + 0x6310, 0x6313, 0x6316, 0x6318, 0x6329, 0x632A, 0x632D, 0x6335, 0x6336, + 0x6339, 0x633C, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, 0x634A, 0x634B, + 0x634E, 0x6352, 0x6353, 0x6354, 0x6358, 0x635B, 0x6365, 0x6366, 0x636C, + 0x636D, 0x6371, 0x6374, 0x6375}, + {0x6378, 0x637C, 0x637D, 0x637F, 0x6382, 0x6384, 0x6387, 0x638A, 0x6390, + 0x6394, 0x6395, 0x6399, 0x639A, 0x639E, 0x63A4, 0x63A6, 0x63AD, 0x63AE, + 0x63AF, 0x63BD, 0x63C1, 0x63C5, 0x63C8, 0x63CE, 0x63D1, 0x63D3, 0x63D4, + 0x63D5, 0x63DC, 0x63E0, 0x63E5, 0x63EA, 0x63EC, 0x63F2, 0x63F3, 0x63F5, + 0x63F8, 0x63F9, 0x6409, 0x640A, 0x6410, 0x6412, 0x6414, 0x6418, 0x641E, + 0x6420, 0x6422, 0x6424, 0x6425, 0x6429, 0x642A, 0x642F, 0x6430, 0x6435, + 0x643D, 0x643F, 0x644B, 0x644F, 0x6451, 0x6452, 0x6453, 0x6454, 0x645A, + 0x645B, 0x645C, 0x645D, 0x645F, 0x6460, 0x6461, 0x6463, 0x646D, 0x6473, + 0x6474, 0x647B, 0x647D, 0x6485, 0x6487, 0x648F, 0x6490, 0x6491, 0x6498, + 0x6499, 0x649B, 0x649D, 0x649F, 0x64A1, 0x64A3, 0x64A6, 0x64A8, 0x64AC, + 0x64B3, 0x64BD, 0x64BE, 0x64BF}, + {0x64C4, 0x64C9, 0x64CA, 0x64CB, 0x64CC, 0x64CE, 0x64D0, 0x64D1, 0x64D5, + 0x64D7, 0x64E4, 0x64E5, 0x64E9, 0x64EA, 0x64ED, 0x64F0, 0x64F5, 0x64F7, + 0x64FB, 0x64FF, 0x6501, 0x6504, 0x6508, 0x6509, 0x650A, 0x650F, 0x6513, + 0x6514, 0x6516, 0x6519, 0x651B, 0x651E, 0x651F, 0x6522, 0x6526, 0x6529, + 0x652E, 0x6531, 0x653A, 0x653C, 0x653D, 0x6543, 0x6547, 0x6549, 0x6550, + 0x6552, 0x6554, 0x655F, 0x6560, 0x6567, 0x656B, 0x657A, 0x657D, 0x6581, + 0x6585, 0x658A, 0x6592, 0x6595, 0x6598, 0x659D, 0x65A0, 0x65A3, 0x65A6, + 0x65AE, 0x65B2, 0x65B3, 0x65B4, 0x65BF, 0x65C2, 0x65C8, 0x65C9, 0x65CE, + 0x65D0, 0x65D4, 0x65D6, 0x65D8, 0x65DF, 0x65F0, 0x65F2, 0x65F4, 0x65F5, + 0x65F9, 0x65FE, 0x65FF, 0x6600, 0x6604, 0x6608, 0x6609, 0x660D, 0x6611, + 0x6612, 0x6615, 0x6616, 0x661D}, + {0x661E, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662A, 0x662B, + 0x662C, 0x662E, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637, 0x6640, 0x6645, + 0x6646, 0x664A, 0x664C, 0x6651, 0x664E, 0x6657, 0x6658, 0x6659, 0x665B, + 0x665C, 0x6660, 0x6661, 0x66FB, 0x666A, 0x666B, 0x666C, 0x667E, 0x6673, + 0x6675, 0x667F, 0x6677, 0x6678, 0x6679, 0x667B, 0x6680, 0x667C, 0x668B, + 0x668C, 0x668D, 0x6690, 0x6692, 0x6699, 0x669A, 0x669B, 0x669C, 0x669F, + 0x66A0, 0x66A4, 0x66AD, 0x66B1, 0x66B2, 0x66B5, 0x66BB, 0x66BF, 0x66C0, + 0x66C2, 0x66C3, 0x66C8, 0x66CC, 0x66CE, 0x66CF, 0x66D4, 0x66DB, 0x66DF, + 0x66E8, 0x66EB, 0x66EC, 0x66EE, 0x66FA, 0x6705, 0x6707, 0x670E, 0x6713, + 0x6719, 0x671C, 0x6720, 0x6722, 0x6733, 0x673E, 0x6745, 0x6747, 0x6748, + 0x674C, 0x6754, 0x6755, 0x675D}, + {0x6766, 0x676C, 0x676E, 0x6774, 0x6776, 0x677B, 0x6781, 0x6784, 0x678E, + 0x678F, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, 0x679B, 0x67B0, 0x67B1, + 0x67B2, 0x67B5, 0x67BB, 0x67BC, 0x67BD, 0x67F9, 0x67C0, 0x67C2, 0x67C3, + 0x67C5, 0x67C8, 0x67C9, 0x67D2, 0x67D7, 0x67D9, 0x67DC, 0x67E1, 0x67E6, + 0x67F0, 0x67F2, 0x67F6, 0x67F7, 0x6852, 0x6814, 0x6819, 0x681D, 0x681F, + 0x6828, 0x6827, 0x682C, 0x682D, 0x682F, 0x6830, 0x6831, 0x6833, 0x683B, + 0x683F, 0x6844, 0x6845, 0x684A, 0x684C, 0x6855, 0x6857, 0x6858, 0x685B, + 0x686B, 0x686E, 0x686F, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, 0x687A, + 0x687B, 0x687C, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, 0x6898, 0x689A, + 0x689C, 0x68A1, 0x68A3, 0x68A5, 0x68A9, 0x68AA, 0x68AE, 0x68B2, 0x68BB, + 0x68C5, 0x68C8, 0x68CC, 0x68CF}, + {0x68D0, 0x68D1, 0x68D3, 0x68D6, 0x68D9, 0x68DC, 0x68DD, 0x68E5, 0x68E8, + 0x68EA, 0x68EB, 0x68EC, 0x68ED, 0x68F0, 0x68F1, 0x68F5, 0x68F6, 0x68FB, + 0x68FC, 0x68FD, 0x6906, 0x6909, 0x690A, 0x6910, 0x6911, 0x6913, 0x6916, + 0x6917, 0x6931, 0x6933, 0x6935, 0x6938, 0x693B, 0x6942, 0x6945, 0x6949, + 0x694E, 0x6957, 0x695B, 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, + 0x696C, 0x6970, 0x6971, 0x6972, 0x697A, 0x697B, 0x697F, 0x6980, 0x698D, + 0x6992, 0x6996, 0x6998, 0x69A1, 0x69A5, 0x69A6, 0x69A8, 0x69AB, 0x69AD, + 0x69AF, 0x69B7, 0x69B8, 0x69BA, 0x69BC, 0x69C5, 0x69C8, 0x69D1, 0x69D6, + 0x69D7, 0x69E2, 0x69E5, 0x69EE, 0x69EF, 0x69F1, 0x69F3, 0x69F5, 0x69FE, + 0x6A00, 0x6A01, 0x6A03, 0x6A0F, 0x6A11, 0x6A15, 0x6A1A, 0x6A1D, 0x6A20, + 0x6A24, 0x6A28, 0x6A30, 0x6A32}, + {0x6A34, 0x6A37, 0x6A3B, 0x6A3E, 0x6A3F, 0x6A45, 0x6A46, 0x6A49, 0x6A4A, + 0x6A4E, 0x6A50, 0x6A51, 0x6A52, 0x6A55, 0x6A56, 0x6A5B, 0x6A64, 0x6A67, + 0x6A6A, 0x6A71, 0x6A73, 0x6A7E, 0x6A81, 0x6A83, 0x6A86, 0x6A87, 0x6A89, + 0x6A8B, 0x6A91, 0x6A9B, 0x6A9D, 0x6A9E, 0x6A9F, 0x6AA5, 0x6AAB, 0x6AAF, + 0x6AB0, 0x6AB1, 0x6AB4, 0x6ABD, 0x6ABE, 0x6ABF, 0x6AC6, 0x6AC9, 0x6AC8, + 0x6ACC, 0x6AD0, 0x6AD4, 0x6AD5, 0x6AD6, 0x6ADC, 0x6ADD, 0x6AE4, 0x6AE7, + 0x6AEC, 0x6AF0, 0x6AF1, 0x6AF2, 0x6AFC, 0x6AFD, 0x6B02, 0x6B03, 0x6B06, + 0x6B07, 0x6B09, 0x6B0F, 0x6B10, 0x6B11, 0x6B17, 0x6B1B, 0x6B1E, 0x6B24, + 0x6B28, 0x6B2B, 0x6B2C, 0x6B2F, 0x6B35, 0x6B36, 0x6B3B, 0x6B3F, 0x6B46, + 0x6B4A, 0x6B4D, 0x6B52, 0x6B56, 0x6B58, 0x6B5D, 0x6B60, 0x6B67, 0x6B6B, + 0x6B6E, 0x6B70, 0x6B75, 0x6B7D}, + {0x6B7E, 0x6B82, 0x6B85, 0x6B97, 0x6B9B, 0x6B9F, 0x6BA0, 0x6BA2, 0x6BA3, + 0x6BA8, 0x6BA9, 0x6BAC, 0x6BAD, 0x6BAE, 0x6BB0, 0x6BB8, 0x6BB9, 0x6BBD, + 0x6BBE, 0x6BC3, 0x6BC4, 0x6BC9, 0x6BCC, 0x6BD6, 0x6BDA, 0x6BE1, 0x6BE3, + 0x6BE6, 0x6BE7, 0x6BEE, 0x6BF1, 0x6BF7, 0x6BF9, 0x6BFF, 0x6C02, 0x6C04, + 0x6C05, 0x6C09, 0x6C0D, 0x6C0E, 0x6C10, 0x6C12, 0x6C19, 0x6C1F, 0x6C26, + 0x6C27, 0x6C28, 0x6C2C, 0x6C2E, 0x6C33, 0x6C35, 0x6C36, 0x6C3A, 0x6C3B, + 0x6C3F, 0x6C4A, 0x6C4B, 0x6C4D, 0x6C4F, 0x6C52, 0x6C54, 0x6C59, 0x6C5B, + 0x6C5C, 0x6C6B, 0x6C6D, 0x6C6F, 0x6C74, 0x6C76, 0x6C78, 0x6C79, 0x6C7B, + 0x6C85, 0x6C86, 0x6C87, 0x6C89, 0x6C94, 0x6C95, 0x6C97, 0x6C98, 0x6C9C, + 0x6C9F, 0x6CB0, 0x6CB2, 0x6CB4, 0x6CC2, 0x6CC6, 0x6CCD, 0x6CCF, 0x6CD0, + 0x6CD1, 0x6CD2, 0x6CD4, 0x6CD6}, + {0x6CDA, 0x6CDC, 0x6CE0, 0x6CE7, 0x6CE9, 0x6CEB, 0x6CEC, 0x6CEE, 0x6CF2, + 0x6CF4, 0x6D04, 0x6D07, 0x6D0A, 0x6D0E, 0x6D0F, 0x6D11, 0x6D13, 0x6D1A, + 0x6D26, 0x6D27, 0x6D28, 0x6C67, 0x6D2E, 0x6D2F, 0x6D31, 0x6D39, 0x6D3C, + 0x6D3F, 0x6D57, 0x6D5E, 0x6D5F, 0x6D61, 0x6D65, 0x6D67, 0x6D6F, 0x6D70, + 0x6D7C, 0x6D82, 0x6D87, 0x6D91, 0x6D92, 0x6D94, 0x6D96, 0x6D97, 0x6D98, + 0x6DAA, 0x6DAC, 0x6DB4, 0x6DB7, 0x6DB9, 0x6DBD, 0x6DBF, 0x6DC4, 0x6DC8, + 0x6DCA, 0x6DCE, 0x6DCF, 0x6DD6, 0x6DDB, 0x6DDD, 0x6DDF, 0x6DE0, 0x6DE2, + 0x6DE5, 0x6DE9, 0x6DEF, 0x6DF0, 0x6DF4, 0x6DF6, 0x6DFC, 0x6E00, 0x6E04, + 0x6E1E, 0x6E22, 0x6E27, 0x6E32, 0x6E36, 0x6E39, 0x6E3B, 0x6E3C, 0x6E44, + 0x6E45, 0x6E48, 0x6E49, 0x6E4B, 0x6E4F, 0x6E51, 0x6E52, 0x6E53, 0x6E54, + 0x6E57, 0x6E5C, 0x6E5D, 0x6E5E}, + {0x6E62, 0x6E63, 0x6E68, 0x6E73, 0x6E7B, 0x6E7D, 0x6E8D, 0x6E93, 0x6E99, + 0x6EA0, 0x6EA7, 0x6EAD, 0x6EAE, 0x6EB1, 0x6EB3, 0x6EBB, 0x6EBF, 0x6EC0, + 0x6EC1, 0x6EC3, 0x6EC7, 0x6EC8, 0x6ECA, 0x6ECD, 0x6ECE, 0x6ECF, 0x6EEB, + 0x6EED, 0x6EEE, 0x6EF9, 0x6EFB, 0x6EFD, 0x6F04, 0x6F08, 0x6F0A, 0x6F0C, + 0x6F0D, 0x6F16, 0x6F18, 0x6F1A, 0x6F1B, 0x6F26, 0x6F29, 0x6F2A, 0x6F2F, + 0x6F30, 0x6F33, 0x6F36, 0x6F3B, 0x6F3C, 0x6F2D, 0x6F4F, 0x6F51, 0x6F52, + 0x6F53, 0x6F57, 0x6F59, 0x6F5A, 0x6F5D, 0x6F5E, 0x6F61, 0x6F62, 0x6F68, + 0x6F6C, 0x6F7D, 0x6F7E, 0x6F83, 0x6F87, 0x6F88, 0x6F8B, 0x6F8C, 0x6F8D, + 0x6F90, 0x6F92, 0x6F93, 0x6F94, 0x6F96, 0x6F9A, 0x6F9F, 0x6FA0, 0x6FA5, + 0x6FA6, 0x6FA7, 0x6FA8, 0x6FAE, 0x6FAF, 0x6FB0, 0x6FB5, 0x6FB6, 0x6FBC, + 0x6FC5, 0x6FC7, 0x6FC8, 0x6FCA}, + {0x6FDA, 0x6FDE, 0x6FE8, 0x6FE9, 0x6FF0, 0x6FF5, 0x6FF9, 0x6FFC, 0x6FFD, + 0x7000, 0x7005, 0x7006, 0x7007, 0x700D, 0x7017, 0x7020, 0x7023, 0x702F, + 0x7034, 0x7037, 0x7039, 0x703C, 0x7043, 0x7044, 0x7048, 0x7049, 0x704A, + 0x704B, 0x7054, 0x7055, 0x705D, 0x705E, 0x704E, 0x7064, 0x7065, 0x706C, + 0x706E, 0x7075, 0x7076, 0x707E, 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, + 0x7096, 0x7097, 0x7098, 0x709B, 0x70A4, 0x70AB, 0x70B0, 0x70B1, 0x70B4, + 0x70B7, 0x70CA, 0x70D1, 0x70D3, 0x70D4, 0x70D5, 0x70D6, 0x70D8, 0x70DC, + 0x70E4, 0x70FA, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710B, 0x710C, + 0x710F, 0x711E, 0x7120, 0x712B, 0x712D, 0x712F, 0x7130, 0x7131, 0x7138, + 0x7141, 0x7145, 0x7146, 0x7147, 0x714A, 0x714B, 0x7150, 0x7152, 0x7157, + 0x715A, 0x715C, 0x715E, 0x7160}, + {0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718C, 0x7192, 0x719A, 0x719B, + 0x71A0, 0x71A2, 0x71AF, 0x71B0, 0x71B2, 0x71B3, 0x71BA, 0x71BF, 0x71C0, + 0x71C1, 0x71C4, 0x71CB, 0x71CC, 0x71D3, 0x71D6, 0x71D9, 0x71DA, 0x71DC, + 0x71F8, 0x71FE, 0x7200, 0x7207, 0x7208, 0x7209, 0x7213, 0x7217, 0x721A, + 0x721D, 0x721F, 0x7224, 0x722B, 0x722F, 0x7234, 0x7238, 0x7239, 0x7241, + 0x7242, 0x7243, 0x7245, 0x724E, 0x724F, 0x7250, 0x7253, 0x7255, 0x7256, + 0x725A, 0x725C, 0x725E, 0x7260, 0x7263, 0x7268, 0x726B, 0x726E, 0x726F, + 0x7271, 0x7277, 0x7278, 0x727B, 0x727C, 0x727F, 0x7284, 0x7289, 0x728D, + 0x728E, 0x7293, 0x729B, 0x72A8, 0x72AD, 0x72AE, 0x72B1, 0x72B4, 0x72BE, + 0x72C1, 0x72C7, 0x72C9, 0x72CC, 0x72D5, 0x72D6, 0x72D8, 0x72DF, 0x72E5, + 0x72F3, 0x72F4, 0x72FA, 0x72FB}, + {0x72FE, 0x7302, 0x7304, 0x7305, 0x7307, 0x730B, 0x730D, 0x7312, 0x7313, + 0x7318, 0x7319, 0x731E, 0x7322, 0x7324, 0x7327, 0x7328, 0x732C, 0x7331, + 0x7332, 0x7335, 0x733A, 0x733B, 0x733D, 0x7343, 0x734D, 0x7350, 0x7352, + 0x7356, 0x7358, 0x735D, 0x735E, 0x735F, 0x7360, 0x7366, 0x7367, 0x7369, + 0x736B, 0x736C, 0x736E, 0x736F, 0x7371, 0x7377, 0x7379, 0x737C, 0x7380, + 0x7381, 0x7383, 0x7385, 0x7386, 0x738E, 0x7390, 0x7393, 0x7395, 0x7397, + 0x7398, 0x739C, 0x739E, 0x739F, 0x73A0, 0x73A2, 0x73A5, 0x73A6, 0x73AA, + 0x73AB, 0x73AD, 0x73B5, 0x73B7, 0x73B9, 0x73BC, 0x73BD, 0x73BF, 0x73C5, + 0x73C6, 0x73C9, 0x73CB, 0x73CC, 0x73CF, 0x73D2, 0x73D3, 0x73D6, 0x73D9, + 0x73DD, 0x73E1, 0x73E3, 0x73E6, 0x73E7, 0x73E9, 0x73F4, 0x73F5, 0x73F7, + 0x73F9, 0x73FA, 0x73FB, 0x73FD}, + {0x73FF, 0x7400, 0x7401, 0x7404, 0x7407, 0x740A, 0x7411, 0x741A, 0x741B, + 0x7424, 0x7426, 0x7428, 0x7429, 0x742A, 0x742B, 0x742C, 0x742D, 0x742E, + 0x742F, 0x7430, 0x7431, 0x7439, 0x7440, 0x7443, 0x7444, 0x7446, 0x7447, + 0x744B, 0x744D, 0x7451, 0x7452, 0x7457, 0x745D, 0x7462, 0x7466, 0x7467, + 0x7468, 0x746B, 0x746D, 0x746E, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, + 0x7486, 0x7487, 0x7489, 0x748F, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, + 0x749A, 0x749C, 0x749F, 0x74A0, 0x74A1, 0x74A3, 0x74A6, 0x74A8, 0x74A9, + 0x74AA, 0x74AB, 0x74AE, 0x74AF, 0x74B1, 0x74B2, 0x74B5, 0x74B9, 0x74BB, + 0x74BF, 0x74C8, 0x74C9, 0x74CC, 0x74D0, 0x74D3, 0x74D8, 0x74DA, 0x74DB, + 0x74DE, 0x74DF, 0x74E4, 0x74E8, 0x74EA, 0x74EB, 0x74EF, 0x74F4, 0x74FA, + 0x74FB, 0x74FC, 0x74FF, 0x7506}, + {0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529, 0x752A, + 0x752F, 0x7536, 0x7539, 0x753D, 0x753E, 0x753F, 0x7540, 0x7543, 0x7547, + 0x7548, 0x754E, 0x7550, 0x7552, 0x7557, 0x755E, 0x755F, 0x7561, 0x756F, + 0x7571, 0x7579, 0x757A, 0x757B, 0x757C, 0x757D, 0x757E, 0x7581, 0x7585, + 0x7590, 0x7592, 0x7593, 0x7595, 0x7599, 0x759C, 0x75A2, 0x75A4, 0x75B4, + 0x75BA, 0x75BF, 0x75C0, 0x75C1, 0x75C4, 0x75C6, 0x75CC, 0x75CE, 0x75CF, + 0x75D7, 0x75DC, 0x75DF, 0x75E0, 0x75E1, 0x75E4, 0x75E7, 0x75EC, 0x75EE, + 0x75EF, 0x75F1, 0x75F9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608, + 0x760A, 0x760C, 0x760F, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619, 0x761B, + 0x761C, 0x761D, 0x761E, 0x7623, 0x7625, 0x7626, 0x7629, 0x762D, 0x7632, + 0x7633, 0x7635, 0x7638, 0x7639}, + {0x763A, 0x763C, 0x764A, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645, 0x7649, + 0x764B, 0x7655, 0x7659, 0x765F, 0x7664, 0x7665, 0x766D, 0x766E, 0x766F, + 0x7671, 0x7674, 0x7681, 0x7685, 0x768C, 0x768D, 0x7695, 0x769B, 0x769C, + 0x769D, 0x769F, 0x76A0, 0x76A2, 0x76A3, 0x76A4, 0x76A5, 0x76A6, 0x76A7, + 0x76A8, 0x76AA, 0x76AD, 0x76BD, 0x76C1, 0x76C5, 0x76C9, 0x76CB, 0x76CC, + 0x76CE, 0x76D4, 0x76D9, 0x76E0, 0x76E6, 0x76E8, 0x76EC, 0x76F0, 0x76F1, + 0x76F6, 0x76F9, 0x76FC, 0x7700, 0x7706, 0x770A, 0x770E, 0x7712, 0x7714, + 0x7715, 0x7717, 0x7719, 0x771A, 0x771C, 0x7722, 0x7728, 0x772D, 0x772E, + 0x772F, 0x7734, 0x7735, 0x7736, 0x7739, 0x773D, 0x773E, 0x7742, 0x7745, + 0x7746, 0x774A, 0x774D, 0x774E, 0x774F, 0x7752, 0x7756, 0x7757, 0x775C, + 0x775E, 0x775F, 0x7760, 0x7762}, + {0x7764, 0x7767, 0x776A, 0x776C, 0x7770, 0x7772, 0x7773, 0x7774, 0x777A, + 0x777D, 0x7780, 0x7784, 0x778C, 0x778D, 0x7794, 0x7795, 0x7796, 0x779A, + 0x779F, 0x77A2, 0x77A7, 0x77AA, 0x77AE, 0x77AF, 0x77B1, 0x77B5, 0x77BE, + 0x77C3, 0x77C9, 0x77D1, 0x77D2, 0x77D5, 0x77D9, 0x77DE, 0x77DF, 0x77E0, + 0x77E4, 0x77E6, 0x77EA, 0x77EC, 0x77F0, 0x77F1, 0x77F4, 0x77F8, 0x77FB, + 0x7805, 0x7806, 0x7809, 0x780D, 0x780E, 0x7811, 0x781D, 0x7821, 0x7822, + 0x7823, 0x782D, 0x782E, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, + 0x7848, 0x784C, 0x784E, 0x7852, 0x785C, 0x785E, 0x7860, 0x7861, 0x7863, + 0x7864, 0x7868, 0x786A, 0x786E, 0x787A, 0x787E, 0x788A, 0x788F, 0x7894, + 0x7898, 0x78A1, 0x789D, 0x789E, 0x789F, 0x78A4, 0x78A8, 0x78AC, 0x78AD, + 0x78B0, 0x78B1, 0x78B2, 0x78B3}, + {0x78BB, 0x78BD, 0x78BF, 0x78C7, 0x78C8, 0x78C9, 0x78CC, 0x78CE, 0x78D2, + 0x78D3, 0x78D5, 0x78D6, 0x78E4, 0x78DB, 0x78DF, 0x78E0, 0x78E1, 0x78E6, + 0x78EA, 0x78F2, 0x78F3, 0x7900, 0x78F6, 0x78F7, 0x78FA, 0x78FB, 0x78FF, + 0x7906, 0x790C, 0x7910, 0x791A, 0x791C, 0x791E, 0x791F, 0x7920, 0x7925, + 0x7927, 0x7929, 0x792D, 0x7931, 0x7934, 0x7935, 0x793B, 0x793D, 0x793F, + 0x7944, 0x7945, 0x7946, 0x794A, 0x794B, 0x794F, 0x7951, 0x7954, 0x7958, + 0x795B, 0x795C, 0x7967, 0x7969, 0x796B, 0x7972, 0x7979, 0x797B, 0x797C, + 0x797E, 0x798B, 0x798C, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, 0x7998, + 0x799B, 0x799C, 0x79A1, 0x79A8, 0x79A9, 0x79AB, 0x79AF, 0x79B1, 0x79B4, + 0x79B8, 0x79BB, 0x79C2, 0x79C4, 0x79C7, 0x79C8, 0x79CA, 0x79CF, 0x79D4, + 0x79D6, 0x79DA, 0x79DD, 0x79DE}, + {0x79E0, 0x79E2, 0x79E5, 0x79EA, 0x79EB, 0x79ED, 0x79F1, 0x79F8, 0x79FC, + 0x7A02, 0x7A03, 0x7A07, 0x7A09, 0x7A0A, 0x7A0C, 0x7A11, 0x7A15, 0x7A1B, + 0x7A1E, 0x7A21, 0x7A27, 0x7A2B, 0x7A2D, 0x7A2F, 0x7A30, 0x7A34, 0x7A35, + 0x7A38, 0x7A39, 0x7A3A, 0x7A44, 0x7A45, 0x7A47, 0x7A48, 0x7A4C, 0x7A55, + 0x7A56, 0x7A59, 0x7A5C, 0x7A5D, 0x7A5F, 0x7A60, 0x7A65, 0x7A67, 0x7A6A, + 0x7A6D, 0x7A75, 0x7A78, 0x7A7E, 0x7A80, 0x7A82, 0x7A85, 0x7A86, 0x7A8A, + 0x7A8B, 0x7A90, 0x7A91, 0x7A94, 0x7A9E, 0x7AA0, 0x7AA3, 0x7AAC, 0x7AB3, + 0x7AB5, 0x7AB9, 0x7ABB, 0x7ABC, 0x7AC6, 0x7AC9, 0x7ACC, 0x7ACE, 0x7AD1, + 0x7ADB, 0x7AE8, 0x7AE9, 0x7AEB, 0x7AEC, 0x7AF1, 0x7AF4, 0x7AFB, 0x7AFD, + 0x7AFE, 0x7B07, 0x7B14, 0x7B1F, 0x7B23, 0x7B27, 0x7B29, 0x7B2A, 0x7B2B, + 0x7B2D, 0x7B2E, 0x7B2F, 0x7B30}, + {0x7B31, 0x7B34, 0x7B3D, 0x7B3F, 0x7B40, 0x7B41, 0x7B47, 0x7B4E, 0x7B55, + 0x7B60, 0x7B64, 0x7B66, 0x7B69, 0x7B6A, 0x7B6D, 0x7B6F, 0x7B72, 0x7B73, + 0x7B77, 0x7B84, 0x7B89, 0x7B8E, 0x7B90, 0x7B91, 0x7B96, 0x7B9B, 0x7B9E, + 0x7BA0, 0x7BA5, 0x7BAC, 0x7BAF, 0x7BB0, 0x7BB2, 0x7BB5, 0x7BB6, 0x7BBA, + 0x7BBB, 0x7BBC, 0x7BBD, 0x7BC2, 0x7BC5, 0x7BC8, 0x7BCA, 0x7BD4, 0x7BD6, + 0x7BD7, 0x7BD9, 0x7BDA, 0x7BDB, 0x7BE8, 0x7BEA, 0x7BF2, 0x7BF4, 0x7BF5, + 0x7BF8, 0x7BF9, 0x7BFA, 0x7BFC, 0x7BFE, 0x7C01, 0x7C02, 0x7C03, 0x7C04, + 0x7C06, 0x7C09, 0x7C0B, 0x7C0C, 0x7C0E, 0x7C0F, 0x7C19, 0x7C1B, 0x7C20, + 0x7C25, 0x7C26, 0x7C28, 0x7C2C, 0x7C31, 0x7C33, 0x7C34, 0x7C36, 0x7C39, + 0x7C3A, 0x7C46, 0x7C4A, 0x7C55, 0x7C51, 0x7C52, 0x7C53, 0x7C59, 0x7C5A, + 0x7C5B, 0x7C5C, 0x7C5D, 0x7C5E}, + {0x7C61, 0x7C63, 0x7C67, 0x7C69, 0x7C6D, 0x7C6E, 0x7C70, 0x7C72, 0x7C79, + 0x7C7C, 0x7C7D, 0x7C86, 0x7C87, 0x7C8F, 0x7C94, 0x7C9E, 0x7CA0, 0x7CA6, + 0x7CB0, 0x7CB6, 0x7CB7, 0x7CBA, 0x7CBB, 0x7CBC, 0x7CBF, 0x7CC4, 0x7CC7, + 0x7CC8, 0x7CC9, 0x7CCD, 0x7CCF, 0x7CD3, 0x7CD4, 0x7CD5, 0x7CD7, 0x7CD9, + 0x7CDA, 0x7CDD, 0x7CE6, 0x7CE9, 0x7CEB, 0x7CF5, 0x7D03, 0x7D07, 0x7D08, + 0x7D09, 0x7D0F, 0x7D11, 0x7D12, 0x7D13, 0x7D16, 0x7D1D, 0x7D1E, 0x7D23, + 0x7D26, 0x7D2A, 0x7D2D, 0x7D31, 0x7D3C, 0x7D3D, 0x7D3E, 0x7D40, 0x7D41, + 0x7D47, 0x7D48, 0x7D4D, 0x7D51, 0x7D53, 0x7D57, 0x7D59, 0x7D5A, 0x7D5C, + 0x7D5D, 0x7D65, 0x7D67, 0x7D6A, 0x7D70, 0x7D78, 0x7D7A, 0x7D7B, 0x7D7F, + 0x7D81, 0x7D82, 0x7D83, 0x7D85, 0x7D86, 0x7D88, 0x7D8B, 0x7D8C, 0x7D8D, + 0x7D91, 0x7D96, 0x7D97, 0x7D9D}, + {0x7D9E, 0x7DA6, 0x7DA7, 0x7DAA, 0x7DB3, 0x7DB6, 0x7DB7, 0x7DB9, 0x7DC2, + 0x7DC3, 0x7DC4, 0x7DC5, 0x7DC6, 0x7DCC, 0x7DCD, 0x7DCE, 0x7DD7, 0x7DD9, + 0x7E00, 0x7DE2, 0x7DE5, 0x7DE6, 0x7DEA, 0x7DEB, 0x7DED, 0x7DF1, 0x7DF5, + 0x7DF6, 0x7DF9, 0x7DFA, 0x7E08, 0x7E10, 0x7E11, 0x7E15, 0x7E17, 0x7E1C, + 0x7E1D, 0x7E20, 0x7E27, 0x7E28, 0x7E2C, 0x7E2D, 0x7E2F, 0x7E33, 0x7E36, + 0x7E3F, 0x7E44, 0x7E45, 0x7E47, 0x7E4E, 0x7E50, 0x7E52, 0x7E58, 0x7E5F, + 0x7E61, 0x7E62, 0x7E65, 0x7E6B, 0x7E6E, 0x7E6F, 0x7E73, 0x7E78, 0x7E7E, + 0x7E81, 0x7E86, 0x7E87, 0x7E8A, 0x7E8D, 0x7E91, 0x7E95, 0x7E98, 0x7E9A, + 0x7E9D, 0x7E9E, 0x7F3C, 0x7F3B, 0x7F3D, 0x7F3E, 0x7F3F, 0x7F43, 0x7F44, + 0x7F47, 0x7F4F, 0x7F52, 0x7F53, 0x7F5B, 0x7F5C, 0x7F5D, 0x7F61, 0x7F63, + 0x7F64, 0x7F65, 0x7F66, 0x7F6D}, + {0x7F71, 0x7F7D, 0x7F7E, 0x7F7F, 0x7F80, 0x7F8B, 0x7F8D, 0x7F8F, 0x7F90, + 0x7F91, 0x7F96, 0x7F97, 0x7F9C, 0x7FA1, 0x7FA2, 0x7FA6, 0x7FAA, 0x7FAD, + 0x7FB4, 0x7FBC, 0x7FBF, 0x7FC0, 0x7FC3, 0x7FC8, 0x7FCE, 0x7FCF, 0x7FDB, + 0x7FDF, 0x7FE3, 0x7FE5, 0x7FE8, 0x7FEC, 0x7FEE, 0x7FEF, 0x7FF2, 0x7FFA, + 0x7FFD, 0x7FFE, 0x7FFF, 0x8007, 0x8008, 0x800A, 0x800D, 0x800E, 0x800F, + 0x8011, 0x8013, 0x8014, 0x8016, 0x801D, 0x801E, 0x801F, 0x8020, 0x8024, + 0x8026, 0x802C, 0x802E, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803A, + 0x803C, 0x803E, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806D, 0x8071, + 0x8075, 0x8081, 0x8088, 0x808E, 0x809C, 0x809E, 0x80A6, 0x80A7, 0x80AB, + 0x80B8, 0x80B9, 0x80C8, 0x80CD, 0x80CF, 0x80D2, 0x80D4, 0x80D5, 0x80D7, + 0x80D8, 0x80E0, 0x80ED, 0x80EE}, + {0x80F0, 0x80F2, 0x80F3, 0x80F6, 0x80F9, 0x80FA, 0x80FE, 0x8103, 0x810B, + 0x8116, 0x8117, 0x8118, 0x811C, 0x811E, 0x8120, 0x8124, 0x8127, 0x812C, + 0x8130, 0x8135, 0x813A, 0x813C, 0x8145, 0x8147, 0x814A, 0x814C, 0x8152, + 0x8157, 0x8160, 0x8161, 0x8167, 0x8168, 0x8169, 0x816D, 0x816F, 0x8177, + 0x8181, 0x8190, 0x8184, 0x8185, 0x8186, 0x818B, 0x818E, 0x8196, 0x8198, + 0x819B, 0x819E, 0x81A2, 0x81AE, 0x81B2, 0x81B4, 0x81BB, 0x81CB, 0x81C3, + 0x81C5, 0x81CA, 0x81CE, 0x81CF, 0x81D5, 0x81D7, 0x81DB, 0x81DD, 0x81DE, + 0x81E1, 0x81E4, 0x81EB, 0x81EC, 0x81F0, 0x81F1, 0x81F2, 0x81F5, 0x81F6, + 0x81F8, 0x81F9, 0x81FD, 0x81FF, 0x8200, 0x8203, 0x820F, 0x8213, 0x8214, + 0x8219, 0x821A, 0x821D, 0x8221, 0x8222, 0x8228, 0x8232, 0x8234, 0x823A, + 0x8243, 0x8244, 0x8245, 0x8246}, + {0x824B, 0x824E, 0x824F, 0x8251, 0x8256, 0x825C, 0x8260, 0x8263, 0x8267, + 0x826D, 0x8274, 0x827B, 0x827D, 0x827F, 0x8280, 0x8281, 0x8283, 0x8284, + 0x8287, 0x8289, 0x828A, 0x828E, 0x8291, 0x8294, 0x8296, 0x8298, 0x829A, + 0x829B, 0x82A0, 0x82A1, 0x82A3, 0x82A4, 0x82A7, 0x82A8, 0x82A9, 0x82AA, + 0x82AE, 0x82B0, 0x82B2, 0x82B4, 0x82B7, 0x82BA, 0x82BC, 0x82BE, 0x82BF, + 0x82C6, 0x82D0, 0x82D5, 0x82DA, 0x82E0, 0x82E2, 0x82E4, 0x82E8, 0x82EA, + 0x82ED, 0x82EF, 0x82F6, 0x82F7, 0x82FD, 0x82FE, 0x8300, 0x8301, 0x8307, + 0x8308, 0x830A, 0x830B, 0x8354, 0x831B, 0x831D, 0x831E, 0x831F, 0x8321, + 0x8322, 0x832C, 0x832D, 0x832E, 0x8330, 0x8333, 0x8337, 0x833A, 0x833C, + 0x833D, 0x8342, 0x8343, 0x8344, 0x8347, 0x834D, 0x834E, 0x8351, 0x8355, + 0x8356, 0x8357, 0x8370, 0x8378}, + {0x837D, 0x837F, 0x8380, 0x8382, 0x8384, 0x8386, 0x838D, 0x8392, 0x8394, + 0x8395, 0x8398, 0x8399, 0x839B, 0x839C, 0x839D, 0x83A6, 0x83A7, 0x83A9, + 0x83AC, 0x83BE, 0x83BF, 0x83C0, 0x83C7, 0x83C9, 0x83CF, 0x83D0, 0x83D1, + 0x83D4, 0x83DD, 0x8353, 0x83E8, 0x83EA, 0x83F6, 0x83F8, 0x83F9, 0x83FC, + 0x8401, 0x8406, 0x840A, 0x840F, 0x8411, 0x8415, 0x8419, 0x83AD, 0x842F, + 0x8439, 0x8445, 0x8447, 0x8448, 0x844A, 0x844D, 0x844F, 0x8451, 0x8452, + 0x8456, 0x8458, 0x8459, 0x845A, 0x845C, 0x8460, 0x8464, 0x8465, 0x8467, + 0x846A, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847C, 0x847D, 0x8481, + 0x8485, 0x8492, 0x8493, 0x8495, 0x849E, 0x84A6, 0x84A8, 0x84A9, 0x84AA, + 0x84AF, 0x84B1, 0x84B4, 0x84BA, 0x84BD, 0x84BE, 0x84C0, 0x84C2, 0x84C7, + 0x84C8, 0x84CC, 0x84CF, 0x84D3}, + {0x84DC, 0x84E7, 0x84EA, 0x84EF, 0x84F0, 0x84F1, 0x84F2, 0x84F7, 0x8532, + 0x84FA, 0x84FB, 0x84FD, 0x8502, 0x8503, 0x8507, 0x850C, 0x850E, 0x8510, + 0x851C, 0x851E, 0x8522, 0x8523, 0x8524, 0x8525, 0x8527, 0x852A, 0x852B, + 0x852F, 0x8533, 0x8534, 0x8536, 0x853F, 0x8546, 0x854F, 0x8550, 0x8551, + 0x8552, 0x8553, 0x8556, 0x8559, 0x855C, 0x855D, 0x855E, 0x855F, 0x8560, + 0x8561, 0x8562, 0x8564, 0x856B, 0x856F, 0x8579, 0x857A, 0x857B, 0x857D, + 0x857F, 0x8581, 0x8585, 0x8586, 0x8589, 0x858B, 0x858C, 0x858F, 0x8593, + 0x8598, 0x859D, 0x859F, 0x85A0, 0x85A2, 0x85A5, 0x85A7, 0x85B4, 0x85B6, + 0x85B7, 0x85B8, 0x85BC, 0x85BD, 0x85BE, 0x85BF, 0x85C2, 0x85C7, 0x85CA, + 0x85CB, 0x85CE, 0x85AD, 0x85D8, 0x85DA, 0x85DF, 0x85E0, 0x85E6, 0x85E8, + 0x85ED, 0x85F3, 0x85F6, 0x85FC}, + {0x85FF, 0x8600, 0x8604, 0x8605, 0x860D, 0x860E, 0x8610, 0x8611, 0x8612, + 0x8618, 0x8619, 0x861B, 0x861E, 0x8621, 0x8627, 0x8629, 0x8636, 0x8638, + 0x863A, 0x863C, 0x863D, 0x8640, 0x8642, 0x8646, 0x8652, 0x8653, 0x8656, + 0x8657, 0x8658, 0x8659, 0x865D, 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, + 0x8669, 0x866C, 0x866F, 0x8675, 0x8676, 0x8677, 0x867A, 0x868D, 0x8691, + 0x8696, 0x8698, 0x869A, 0x869C, 0x86A1, 0x86A6, 0x86A7, 0x86A8, 0x86AD, + 0x86B1, 0x86B3, 0x86B4, 0x86B5, 0x86B7, 0x86B8, 0x86B9, 0x86BF, 0x86C0, + 0x86C1, 0x86C3, 0x86C5, 0x86D1, 0x86D2, 0x86D5, 0x86D7, 0x86DA, 0x86DC, + 0x86E0, 0x86E3, 0x86E5, 0x86E7, 0x8688, 0x86FA, 0x86FC, 0x86FD, 0x8704, + 0x8705, 0x8707, 0x870B, 0x870E, 0x870F, 0x8710, 0x8713, 0x8714, 0x8719, + 0x871E, 0x871F, 0x8721, 0x8723}, + {0x8728, 0x872E, 0x872F, 0x8731, 0x8732, 0x8739, 0x873A, 0x873C, 0x873D, + 0x873E, 0x8740, 0x8743, 0x8745, 0x874D, 0x8758, 0x875D, 0x8761, 0x8764, + 0x8765, 0x876F, 0x8771, 0x8772, 0x877B, 0x8783, 0x8784, 0x8785, 0x8786, + 0x8787, 0x8788, 0x8789, 0x878B, 0x878C, 0x8790, 0x8793, 0x8795, 0x8797, + 0x8798, 0x8799, 0x879E, 0x87A0, 0x87A3, 0x87A7, 0x87AC, 0x87AD, 0x87AE, + 0x87B1, 0x87B5, 0x87BE, 0x87BF, 0x87C1, 0x87C8, 0x87C9, 0x87CA, 0x87CE, + 0x87D5, 0x87D6, 0x87D9, 0x87DA, 0x87DC, 0x87DF, 0x87E2, 0x87E3, 0x87E4, + 0x87EA, 0x87EB, 0x87ED, 0x87F1, 0x87F3, 0x87F8, 0x87FA, 0x87FF, 0x8801, + 0x8803, 0x8806, 0x8809, 0x880A, 0x880B, 0x8810, 0x8819, 0x8812, 0x8813, + 0x8814, 0x8818, 0x881A, 0x881B, 0x881C, 0x881E, 0x881F, 0x8828, 0x882D, + 0x882E, 0x8830, 0x8832, 0x8835}, + {0x883A, 0x883C, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, 0x884A, 0x884B, + 0x884E, 0x8851, 0x8855, 0x8856, 0x8858, 0x885A, 0x885C, 0x885F, 0x8860, + 0x8864, 0x8869, 0x8871, 0x8879, 0x887B, 0x8880, 0x8898, 0x889A, 0x889B, + 0x889C, 0x889F, 0x88A0, 0x88A8, 0x88AA, 0x88BA, 0x88BD, 0x88BE, 0x88C0, + 0x88CA, 0x88CB, 0x88CC, 0x88CD, 0x88CE, 0x88D1, 0x88D2, 0x88D3, 0x88DB, + 0x88DE, 0x88E7, 0x88EF, 0x88F0, 0x88F1, 0x88F5, 0x88F7, 0x8901, 0x8906, + 0x890D, 0x890E, 0x890F, 0x8915, 0x8916, 0x8918, 0x8919, 0x891A, 0x891C, + 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, 0x8939, + 0x893A, 0x893E, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, 0x894F, 0x8952, + 0x8957, 0x895A, 0x895B, 0x895C, 0x8961, 0x8962, 0x8963, 0x896B, 0x896E, + 0x8970, 0x8973, 0x8975, 0x897A}, + {0x897B, 0x897C, 0x897D, 0x8989, 0x898D, 0x8990, 0x8994, 0x8995, 0x899B, + 0x899C, 0x899F, 0x89A0, 0x89A5, 0x89B0, 0x89B4, 0x89B5, 0x89B6, 0x89B7, + 0x89BC, 0x89D4, 0x89D5, 0x89D6, 0x89D7, 0x89D8, 0x89E5, 0x89E9, 0x89EB, + 0x89ED, 0x89F1, 0x89F3, 0x89F6, 0x89F9, 0x89FD, 0x89FF, 0x8A04, 0x8A05, + 0x8A07, 0x8A0F, 0x8A11, 0x8A12, 0x8A14, 0x8A15, 0x8A1E, 0x8A20, 0x8A22, + 0x8A24, 0x8A26, 0x8A2B, 0x8A2C, 0x8A2F, 0x8A35, 0x8A37, 0x8A3D, 0x8A3E, + 0x8A40, 0x8A43, 0x8A45, 0x8A47, 0x8A49, 0x8A4D, 0x8A4E, 0x8A53, 0x8A56, + 0x8A57, 0x8A58, 0x8A5C, 0x8A5D, 0x8A61, 0x8A65, 0x8A67, 0x8A75, 0x8A76, + 0x8A77, 0x8A79, 0x8A7A, 0x8A7B, 0x8A7E, 0x8A7F, 0x8A80, 0x8A83, 0x8A86, + 0x8A8B, 0x8A8F, 0x8A90, 0x8A92, 0x8A96, 0x8A97, 0x8A99, 0x8A9F, 0x8AA7, + 0x8AA9, 0x8AAE, 0x8AAF, 0x8AB3}, + {0x8AB6, 0x8AB7, 0x8ABB, 0x8ABE, 0x8AC3, 0x8AC6, 0x8AC8, 0x8AC9, 0x8ACA, + 0x8AD1, 0x8AD3, 0x8AD4, 0x8AD5, 0x8AD7, 0x8ADD, 0x8ADF, 0x8AEC, 0x8AF0, + 0x8AF4, 0x8AF5, 0x8AF6, 0x8AFC, 0x8AFF, 0x8B05, 0x8B06, 0x8B0B, 0x8B11, + 0x8B1C, 0x8B1E, 0x8B1F, 0x8B0A, 0x8B2D, 0x8B30, 0x8B37, 0x8B3C, 0x8B42, + 0x8B43, 0x8B44, 0x8B45, 0x8B46, 0x8B48, 0x8B52, 0x8B53, 0x8B54, 0x8B59, + 0x8B4D, 0x8B5E, 0x8B63, 0x8B6D, 0x8B76, 0x8B78, 0x8B79, 0x8B7C, 0x8B7E, + 0x8B81, 0x8B84, 0x8B85, 0x8B8B, 0x8B8D, 0x8B8F, 0x8B94, 0x8B95, 0x8B9C, + 0x8B9E, 0x8B9F, 0x8C38, 0x8C39, 0x8C3D, 0x8C3E, 0x8C45, 0x8C47, 0x8C49, + 0x8C4B, 0x8C4F, 0x8C51, 0x8C53, 0x8C54, 0x8C57, 0x8C58, 0x8C5B, 0x8C5D, + 0x8C59, 0x8C63, 0x8C64, 0x8C66, 0x8C68, 0x8C69, 0x8C6D, 0x8C73, 0x8C75, + 0x8C76, 0x8C7B, 0x8C7E, 0x8C86}, + {0x8C87, 0x8C8B, 0x8C90, 0x8C92, 0x8C93, 0x8C99, 0x8C9B, 0x8C9C, 0x8CA4, + 0x8CB9, 0x8CBA, 0x8CC5, 0x8CC6, 0x8CC9, 0x8CCB, 0x8CCF, 0x8CD6, 0x8CD5, + 0x8CD9, 0x8CDD, 0x8CE1, 0x8CE8, 0x8CEC, 0x8CEF, 0x8CF0, 0x8CF2, 0x8CF5, + 0x8CF7, 0x8CF8, 0x8CFE, 0x8CFF, 0x8D01, 0x8D03, 0x8D09, 0x8D12, 0x8D17, + 0x8D1B, 0x8D65, 0x8D69, 0x8D6C, 0x8D6E, 0x8D7F, 0x8D82, 0x8D84, 0x8D88, + 0x8D8D, 0x8D90, 0x8D91, 0x8D95, 0x8D9E, 0x8D9F, 0x8DA0, 0x8DA6, 0x8DAB, + 0x8DAC, 0x8DAF, 0x8DB2, 0x8DB5, 0x8DB7, 0x8DB9, 0x8DBB, 0x8DC0, 0x8DC5, + 0x8DC6, 0x8DC7, 0x8DC8, 0x8DCA, 0x8DCE, 0x8DD1, 0x8DD4, 0x8DD5, 0x8DD7, + 0x8DD9, 0x8DE4, 0x8DE5, 0x8DE7, 0x8DEC, 0x8DF0, 0x8DBC, 0x8DF1, 0x8DF2, + 0x8DF4, 0x8DFD, 0x8E01, 0x8E04, 0x8E05, 0x8E06, 0x8E0B, 0x8E11, 0x8E14, + 0x8E16, 0x8E20, 0x8E21, 0x8E22}, + {0x8E23, 0x8E26, 0x8E27, 0x8E31, 0x8E33, 0x8E36, 0x8E37, 0x8E38, 0x8E39, + 0x8E3D, 0x8E40, 0x8E41, 0x8E4B, 0x8E4D, 0x8E4E, 0x8E4F, 0x8E54, 0x8E5B, + 0x8E5C, 0x8E5D, 0x8E5E, 0x8E61, 0x8E62, 0x8E69, 0x8E6C, 0x8E6D, 0x8E6F, + 0x8E70, 0x8E71, 0x8E79, 0x8E7A, 0x8E7B, 0x8E82, 0x8E83, 0x8E89, 0x8E90, + 0x8E92, 0x8E95, 0x8E9A, 0x8E9B, 0x8E9D, 0x8E9E, 0x8EA2, 0x8EA7, 0x8EA9, + 0x8EAD, 0x8EAE, 0x8EB3, 0x8EB5, 0x8EBA, 0x8EBB, 0x8EC0, 0x8EC1, 0x8EC3, + 0x8EC4, 0x8EC7, 0x8ECF, 0x8ED1, 0x8ED4, 0x8EDC, 0x8EE8, 0x8EEE, 0x8EF0, + 0x8EF1, 0x8EF7, 0x8EF9, 0x8EFA, 0x8EED, 0x8F00, 0x8F02, 0x8F07, 0x8F08, + 0x8F0F, 0x8F10, 0x8F16, 0x8F17, 0x8F18, 0x8F1E, 0x8F20, 0x8F21, 0x8F23, + 0x8F25, 0x8F27, 0x8F28, 0x8F2C, 0x8F2D, 0x8F2E, 0x8F34, 0x8F35, 0x8F36, + 0x8F37, 0x8F3A, 0x8F40, 0x8F41}, + {0x8F43, 0x8F47, 0x8F4F, 0x8F51, 0x8F52, 0x8F53, 0x8F54, 0x8F55, 0x8F58, + 0x8F5D, 0x8F5E, 0x8F65, 0x8F9D, 0x8FA0, 0x8FA1, 0x8FA4, 0x8FA5, 0x8FA6, + 0x8FB5, 0x8FB6, 0x8FB8, 0x8FBE, 0x8FC0, 0x8FC1, 0x8FC6, 0x8FCA, 0x8FCB, + 0x8FCD, 0x8FD0, 0x8FD2, 0x8FD3, 0x8FD5, 0x8FE0, 0x8FE3, 0x8FE4, 0x8FE8, + 0x8FEE, 0x8FF1, 0x8FF5, 0x8FF6, 0x8FFB, 0x8FFE, 0x9002, 0x9004, 0x9008, + 0x900C, 0x9018, 0x901B, 0x9028, 0x9029, 0x902F, 0x902A, 0x902C, 0x902D, + 0x9033, 0x9034, 0x9037, 0x903F, 0x9043, 0x9044, 0x904C, 0x905B, 0x905D, + 0x9062, 0x9066, 0x9067, 0x906C, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088, + 0x908B, 0x908C, 0x908E, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099, 0x909B, + 0x90A0, 0x90A1, 0x90A2, 0x90A5, 0x90B0, 0x90B2, 0x90B3, 0x90B4, 0x90B6, + 0x90BD, 0x90CC, 0x90BE, 0x90C3}, + {0x90C4, 0x90C5, 0x90C7, 0x90C8, 0x90D5, 0x90D7, 0x90D8, 0x90D9, 0x90DC, + 0x90DD, 0x90DF, 0x90E5, 0x90D2, 0x90F6, 0x90EB, 0x90EF, 0x90F0, 0x90F4, + 0x90FE, 0x90FF, 0x9100, 0x9104, 0x9105, 0x9106, 0x9108, 0x910D, 0x9110, + 0x9114, 0x9116, 0x9117, 0x9118, 0x911A, 0x911C, 0x911E, 0x9120, 0x9125, + 0x9122, 0x9123, 0x9127, 0x9129, 0x912E, 0x912F, 0x9131, 0x9134, 0x9136, + 0x9137, 0x9139, 0x913A, 0x913C, 0x913D, 0x9143, 0x9147, 0x9148, 0x914F, + 0x9153, 0x9157, 0x9159, 0x915A, 0x915B, 0x9161, 0x9164, 0x9167, 0x916D, + 0x9174, 0x9179, 0x917A, 0x917B, 0x9181, 0x9183, 0x9185, 0x9186, 0x918A, + 0x918E, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919E, 0x91A1, 0x91A6, + 0x91A8, 0x91AC, 0x91AD, 0x91AE, 0x91B0, 0x91B1, 0x91B2, 0x91B3, 0x91B6, + 0x91BB, 0x91BC, 0x91BD, 0x91BF}, + {0x91C2, 0x91C3, 0x91C5, 0x91D3, 0x91D4, 0x91D7, 0x91D9, 0x91DA, 0x91DE, + 0x91E4, 0x91E5, 0x91E9, 0x91EA, 0x91EC, 0x91ED, 0x91EE, 0x91EF, 0x91F0, + 0x91F1, 0x91F7, 0x91F9, 0x91FB, 0x91FD, 0x9200, 0x9201, 0x9204, 0x9205, + 0x9206, 0x9207, 0x9209, 0x920A, 0x920C, 0x9210, 0x9212, 0x9213, 0x9216, + 0x9218, 0x921C, 0x921D, 0x9223, 0x9224, 0x9225, 0x9226, 0x9228, 0x922E, + 0x922F, 0x9230, 0x9233, 0x9235, 0x9236, 0x9238, 0x9239, 0x923A, 0x923C, + 0x923E, 0x9240, 0x9242, 0x9243, 0x9246, 0x9247, 0x924A, 0x924D, 0x924E, + 0x924F, 0x9251, 0x9258, 0x9259, 0x925C, 0x925D, 0x9260, 0x9261, 0x9265, + 0x9267, 0x9268, 0x9269, 0x926E, 0x926F, 0x9270, 0x9275, 0x9276, 0x9277, + 0x9278, 0x9279, 0x927B, 0x927C, 0x927D, 0x927F, 0x9288, 0x9289, 0x928A, + 0x928D, 0x928E, 0x9292, 0x9297}, + {0x9299, 0x929F, 0x92A0, 0x92A4, 0x92A5, 0x92A7, 0x92A8, 0x92AB, 0x92AF, + 0x92B2, 0x92B6, 0x92B8, 0x92BA, 0x92BB, 0x92BC, 0x92BD, 0x92BF, 0x92C0, + 0x92C1, 0x92C2, 0x92C3, 0x92C5, 0x92C6, 0x92C7, 0x92C8, 0x92CB, 0x92CC, + 0x92CD, 0x92CE, 0x92D0, 0x92D3, 0x92D5, 0x92D7, 0x92D8, 0x92D9, 0x92DC, + 0x92DD, 0x92DF, 0x92E0, 0x92E1, 0x92E3, 0x92E5, 0x92E7, 0x92E8, 0x92EC, + 0x92EE, 0x92F0, 0x92F9, 0x92FB, 0x92FF, 0x9300, 0x9302, 0x9308, 0x930D, + 0x9311, 0x9314, 0x9315, 0x931C, 0x931D, 0x931E, 0x931F, 0x9321, 0x9324, + 0x9325, 0x9327, 0x9329, 0x932A, 0x9333, 0x9334, 0x9336, 0x9337, 0x9347, + 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, 0x9358, 0x935A, + 0x935E, 0x9364, 0x9365, 0x9367, 0x9369, 0x936A, 0x936D, 0x936F, 0x9370, + 0x9371, 0x9373, 0x9374, 0x9376}, + {0x937A, 0x937D, 0x937F, 0x9380, 0x9381, 0x9382, 0x9388, 0x938A, 0x938B, + 0x938D, 0x938F, 0x9392, 0x9395, 0x9398, 0x939B, 0x939E, 0x93A1, 0x93A3, + 0x93A4, 0x93A6, 0x93A8, 0x93AB, 0x93B4, 0x93B5, 0x93B6, 0x93BA, 0x93A9, + 0x93C1, 0x93C4, 0x93C5, 0x93C6, 0x93C7, 0x93C9, 0x93CA, 0x93CB, 0x93CC, + 0x93CD, 0x93D3, 0x93D9, 0x93DC, 0x93DE, 0x93DF, 0x93E2, 0x93E6, 0x93E7, + 0x93F9, 0x93F7, 0x93F8, 0x93FA, 0x93FB, 0x93FD, 0x9401, 0x9402, 0x9404, + 0x9408, 0x9409, 0x940D, 0x940E, 0x940F, 0x9415, 0x9416, 0x9417, 0x941F, + 0x942E, 0x942F, 0x9431, 0x9432, 0x9433, 0x9434, 0x943B, 0x943F, 0x943D, + 0x9443, 0x9445, 0x9448, 0x944A, 0x944C, 0x9455, 0x9459, 0x945C, 0x945F, + 0x9461, 0x9463, 0x9468, 0x946B, 0x946D, 0x946E, 0x946F, 0x9471, 0x9472, + 0x9484, 0x9483, 0x9578, 0x9579}, + {0x957E, 0x9584, 0x9588, 0x958C, 0x958D, 0x958E, 0x959D, 0x959E, 0x959F, + 0x95A1, 0x95A6, 0x95A9, 0x95AB, 0x95AC, 0x95B4, 0x95B6, 0x95BA, 0x95BD, + 0x95BF, 0x95C6, 0x95C8, 0x95C9, 0x95CB, 0x95D0, 0x95D1, 0x95D2, 0x95D3, + 0x95D9, 0x95DA, 0x95DD, 0x95DE, 0x95DF, 0x95E0, 0x95E4, 0x95E6, 0x961D, + 0x961E, 0x9622, 0x9624, 0x9625, 0x9626, 0x962C, 0x9631, 0x9633, 0x9637, + 0x9638, 0x9639, 0x963A, 0x963C, 0x963D, 0x9641, 0x9652, 0x9654, 0x9656, + 0x9657, 0x9658, 0x9661, 0x966E, 0x9674, 0x967B, 0x967C, 0x967E, 0x967F, + 0x9681, 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969A, 0x969D, + 0x969F, 0x96A4, 0x96A5, 0x96A6, 0x96A9, 0x96AE, 0x96AF, 0x96B3, 0x96BA, + 0x96CA, 0x96D2, 0x5DB2, 0x96D8, 0x96DA, 0x96DD, 0x96DE, 0x96DF, 0x96E9, + 0x96EF, 0x96F1, 0x96FA, 0x9702}, + {0x9703, 0x9705, 0x9709, 0x971A, 0x971B, 0x971D, 0x9721, 0x9722, 0x9723, + 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974A, 0x974E, 0x974F, 0x9755, + 0x9757, 0x9758, 0x975A, 0x975B, 0x9763, 0x9767, 0x976A, 0x976E, 0x9773, + 0x9776, 0x9777, 0x9778, 0x977B, 0x977D, 0x977F, 0x9780, 0x9789, 0x9795, + 0x9796, 0x9797, 0x9799, 0x979A, 0x979E, 0x979F, 0x97A2, 0x97AC, 0x97AE, + 0x97B1, 0x97B2, 0x97B5, 0x97B6, 0x97B8, 0x97B9, 0x97BA, 0x97BC, 0x97BE, + 0x97BF, 0x97C1, 0x97C4, 0x97C5, 0x97C7, 0x97C9, 0x97CA, 0x97CC, 0x97CD, + 0x97CE, 0x97D0, 0x97D1, 0x97D4, 0x97D7, 0x97D8, 0x97D9, 0x97DD, 0x97DE, + 0x97E0, 0x97DB, 0x97E1, 0x97E4, 0x97EF, 0x97F1, 0x97F4, 0x97F7, 0x97F8, + 0x97FA, 0x9807, 0x980A, 0x9819, 0x980D, 0x980E, 0x9814, 0x9816, 0x981C, + 0x981E, 0x9820, 0x9823, 0x9826}, + {0x982B, 0x982E, 0x982F, 0x9830, 0x9832, 0x9833, 0x9835, 0x9825, 0x983E, + 0x9844, 0x9847, 0x984A, 0x9851, 0x9852, 0x9853, 0x9856, 0x9857, 0x9859, + 0x985A, 0x9862, 0x9863, 0x9865, 0x9866, 0x986A, 0x986C, 0x98AB, 0x98AD, + 0x98AE, 0x98B0, 0x98B4, 0x98B7, 0x98B8, 0x98BA, 0x98BB, 0x98BF, 0x98C2, + 0x98C5, 0x98C8, 0x98CC, 0x98E1, 0x98E3, 0x98E5, 0x98E6, 0x98E7, 0x98EA, + 0x98F3, 0x98F6, 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, + 0x991A, 0x991B, 0x991C, 0x991F, 0x9922, 0x9926, 0x9927, 0x992B, 0x9931, + 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993A, 0x993B, 0x993C, 0x9940, + 0x9941, 0x9946, 0x9947, 0x9948, 0x994D, 0x994E, 0x9954, 0x9958, 0x9959, + 0x995B, 0x995C, 0x995E, 0x995F, 0x9960, 0x999B, 0x999D, 0x999F, 0x99A6, + 0x99B0, 0x99B1, 0x99B2, 0x99B5}, + {0x99B9, 0x99BA, 0x99BD, 0x99BF, 0x99C3, 0x99C9, 0x99D3, 0x99D4, 0x99D9, + 0x99DA, 0x99DC, 0x99DE, 0x99E7, 0x99EA, 0x99EB, 0x99EC, 0x99F0, 0x99F4, + 0x99F5, 0x99F9, 0x99FD, 0x99FE, 0x9A02, 0x9A03, 0x9A04, 0x9A0B, 0x9A0C, + 0x9A10, 0x9A11, 0x9A16, 0x9A1E, 0x9A20, 0x9A22, 0x9A23, 0x9A24, 0x9A27, + 0x9A2D, 0x9A2E, 0x9A33, 0x9A35, 0x9A36, 0x9A38, 0x9A47, 0x9A41, 0x9A44, + 0x9A4A, 0x9A4B, 0x9A4C, 0x9A4E, 0x9A51, 0x9A54, 0x9A56, 0x9A5D, 0x9AAA, + 0x9AAC, 0x9AAE, 0x9AAF, 0x9AB2, 0x9AB4, 0x9AB5, 0x9AB6, 0x9AB9, 0x9ABB, + 0x9ABE, 0x9ABF, 0x9AC1, 0x9AC3, 0x9AC6, 0x9AC8, 0x9ACE, 0x9AD0, 0x9AD2, + 0x9AD5, 0x9AD6, 0x9AD7, 0x9ADB, 0x9ADC, 0x9AE0, 0x9AE4, 0x9AE5, 0x9AE7, + 0x9AE9, 0x9AEC, 0x9AF2, 0x9AF3, 0x9AF5, 0x9AF9, 0x9AFA, 0x9AFD, 0x9AFF, + 0x9B00, 0x9B01, 0x9B02, 0x9B03}, + {0x9B04, 0x9B05, 0x9B08, 0x9B09, 0x9B0B, 0x9B0C, 0x9B0D, 0x9B0E, 0x9B10, + 0x9B12, 0x9B16, 0x9B19, 0x9B1B, 0x9B1C, 0x9B20, 0x9B26, 0x9B2B, 0x9B2D, + 0x9B33, 0x9B34, 0x9B35, 0x9B37, 0x9B39, 0x9B3A, 0x9B3D, 0x9B48, 0x9B4B, + 0x9B4C, 0x9B55, 0x9B56, 0x9B57, 0x9B5B, 0x9B5E, 0x9B61, 0x9B63, 0x9B65, + 0x9B66, 0x9B68, 0x9B6A, 0x9B6B, 0x9B6C, 0x9B6D, 0x9B6E, 0x9B73, 0x9B75, + 0x9B77, 0x9B78, 0x9B79, 0x9B7F, 0x9B80, 0x9B84, 0x9B85, 0x9B86, 0x9B87, + 0x9B89, 0x9B8A, 0x9B8B, 0x9B8D, 0x9B8F, 0x9B90, 0x9B94, 0x9B9A, 0x9B9D, + 0x9B9E, 0x9BA6, 0x9BA7, 0x9BA9, 0x9BAC, 0x9BB0, 0x9BB1, 0x9BB2, 0x9BB7, + 0x9BB8, 0x9BBB, 0x9BBC, 0x9BBE, 0x9BBF, 0x9BC1, 0x9BC7, 0x9BC8, 0x9BCE, + 0x9BD0, 0x9BD7, 0x9BD8, 0x9BDD, 0x9BDF, 0x9BE5, 0x9BE7, 0x9BEA, 0x9BEB, + 0x9BEF, 0x9BF3, 0x9BF7, 0x9BF8}, + {0x9BF9, 0x9BFA, 0x9BFD, 0x9BFF, 0x9C00, 0x9C02, 0x9C0B, 0x9C0F, 0x9C11, + 0x9C16, 0x9C18, 0x9C19, 0x9C1A, 0x9C1C, 0x9C1E, 0x9C22, 0x9C23, 0x9C26, + 0x9C27, 0x9C28, 0x9C29, 0x9C2A, 0x9C31, 0x9C35, 0x9C36, 0x9C37, 0x9C3D, + 0x9C41, 0x9C43, 0x9C44, 0x9C45, 0x9C49, 0x9C4A, 0x9C4E, 0x9C4F, 0x9C50, + 0x9C53, 0x9C54, 0x9C56, 0x9C58, 0x9C5B, 0x9C5D, 0x9C5E, 0x9C5F, 0x9C63, + 0x9C69, 0x9C6A, 0x9C5C, 0x9C6B, 0x9C68, 0x9C6E, 0x9C70, 0x9C72, 0x9C75, + 0x9C77, 0x9C7B, 0x9CE6, 0x9CF2, 0x9CF7, 0x9CF9, 0x9D0B, 0x9D02, 0x9D11, + 0x9D17, 0x9D18, 0x9D1C, 0x9D1D, 0x9D1E, 0x9D2F, 0x9D30, 0x9D32, 0x9D33, + 0x9D34, 0x9D3A, 0x9D3C, 0x9D45, 0x9D3D, 0x9D42, 0x9D43, 0x9D47, 0x9D4A, + 0x9D53, 0x9D54, 0x9D5F, 0x9D63, 0x9D62, 0x9D65, 0x9D69, 0x9D6A, 0x9D6B, + 0x9D70, 0x9D76, 0x9D77, 0x9D7B}, + {0x9D7C, 0x9D7E, 0x9D83, 0x9D84, 0x9D86, 0x9D8A, 0x9D8D, 0x9D8E, 0x9D92, + 0x9D93, 0x9D95, 0x9D96, 0x9D97, 0x9D98, 0x9DA1, 0x9DAA, 0x9DAC, 0x9DAE, + 0x9DB1, 0x9DB5, 0x9DB9, 0x9DBC, 0x9DBF, 0x9DC3, 0x9DC7, 0x9DC9, 0x9DCA, + 0x9DD4, 0x9DD5, 0x9DD6, 0x9DD7, 0x9DDA, 0x9DDE, 0x9DDF, 0x9DE0, 0x9DE5, + 0x9DE7, 0x9DE9, 0x9DEB, 0x9DEE, 0x9DF0, 0x9DF3, 0x9DF4, 0x9DFE, 0x9E0A, + 0x9E02, 0x9E07, 0x9E0E, 0x9E10, 0x9E11, 0x9E12, 0x9E15, 0x9E16, 0x9E19, + 0x9E1C, 0x9E1D, 0x9E7A, 0x9E7B, 0x9E7C, 0x9E80, 0x9E82, 0x9E83, 0x9E84, + 0x9E85, 0x9E87, 0x9E8E, 0x9E8F, 0x9E96, 0x9E98, 0x9E9B, 0x9E9E, 0x9EA4, + 0x9EA8, 0x9EAC, 0x9EAE, 0x9EAF, 0x9EB0, 0x9EB3, 0x9EB4, 0x9EB5, 0x9EC6, + 0x9EC8, 0x9ECB, 0x9ED5, 0x9EDF, 0x9EE4, 0x9EE7, 0x9EEC, 0x9EED, 0x9EEE, + 0x9EF0, 0x9EF1, 0x9EF2, 0x9EF5}, + {0x9EF8, 0x9EFF, 0x9F02, 0x9F03, 0x9F09, 0x9F0F, 0x9F10, 0x9F11, 0x9F12, + 0x9F14, 0x9F16, 0x9F17, 0x9F19, 0x9F1A, 0x9F1B, 0x9F1F, 0x9F22, 0x9F26, + 0x9F2A, 0x9F2B, 0x9F2F, 0x9F31, 0x9F32, 0x9F34, 0x9F37, 0x9F39, 0x9F3A, + 0x9F3C, 0x9F3D, 0x9F3F, 0x9F41, 0x9F43, 0x9F44, 0x9F45, 0x9F46, 0x9F47, + 0x9F53, 0x9F55, 0x9F56, 0x9F57, 0x9F58, 0x9F5A, 0x9F5D, 0x9F5E, 0x9F68, + 0x9F69, 0x9F6D, 0x9F6E, 0x9F6F, 0x9F70, 0x9F71, 0x9F73, 0x9F75, 0x9F7A, + 0x9F7D, 0x9F8F, 0x9F90, 0x9F91, 0x9F92, 0x9F94, 0x9F96, 0x9F97, 0x9F9E, + 0x9FA1, 0x9FA2, 0x9FA3, 0x9FA5, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR}, +}; + +/* + * Mapping from Unicode back to JIS X 0212. + * + * This inverse is done the same way the SBCS ones are done: I + * provide a list of JIS X 0212 positions, sorted into ascending + * order of their Unicode values. Then we can binary-search through + * this list, referring to the above table for each comparison, to + * find the coordinates for a given code point. + * + * Generated by running the following sh+Perl over JIS0212.TXT: + +cat JIS0212.TXT | \ +perl -ne '$a{$3}=[hex$1,hex$2] if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {$o=" ";for $k (sort keys %a) { ($r,$c) = @{$a{$k}}; ' \ + -e '$o .= $C; $C = ", "; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= sprintf "{%d,%d}", $r-33,$c-33; } print "$o\n"; }' + + */ + +static const struct { unsigned char r, c; } jisx0212_backward[] = { + {1,22}, {1,33}, {1,79}, {1,34}, {1,76}, {1,75}, {1,77}, {1,19}, {1,16}, + {1,74}, {1,35}, {9,1}, {9,0}, {9,3}, {9,9}, {9,2}, {9,8}, {8,0}, {9,13}, + {9,17}, {9,16}, {9,19}, {9,18}, {9,31}, {9,30}, {9,33}, {9,32}, {9,47}, + {9,49}, {9,48}, {9,51}, {9,55}, {9,50}, {8,11}, {9,66}, {9,65}, {9,68}, + {9,67}, {9,81}, {8,15}, {8,45}, {10,1}, {10,0}, {10,3}, {10,9}, {10,2}, + {10,8}, {8,32}, {10,13}, {10,17}, {10,16}, {10,19}, {10,18}, {10,31}, + {10,30}, {10,33}, {10,32}, {8,34}, {10,47}, {10,49}, {10,48}, {10,51}, + {10,55}, {10,50}, {8,43}, {10,66}, {10,65}, {10,68}, {10,67}, {10,81}, + {8,47}, {10,82}, {9,6}, {10,6}, {9,4}, {10,4}, {9,7}, {10,7}, {9,10}, + {10,10}, {9,11}, {10,11}, {9,14}, {10,14}, {9,12}, {10,12}, {9,15}, + {10,15}, {8,1}, {8,33}, {9,22}, {10,22}, {9,21}, {10,21}, {9,23}, {10,23}, + {9,20}, {10,20}, {9,25}, {10,25}, {9,26}, {10,26}, {9,28}, {10,28}, + {9,27}, {9,29}, {10,29}, {8,3}, {8,35}, {9,38}, {10,38}, {9,36}, {10,36}, + {9,37}, {10,37}, {9,35}, {8,36}, {8,5}, {8,37}, {9,39}, {10,39}, {9,40}, + {10,40}, {8,38}, {9,41}, {10,41}, {9,43}, {10,43}, {9,42}, {10,42}, + {8,8}, {8,40}, {8,7}, {8,39}, {9,44}, {10,44}, {9,46}, {10,46}, {9,45}, + {10,45}, {8,41}, {8,10}, {8,42}, {9,54}, {10,54}, {9,53}, {10,53}, + {8,12}, {8,44}, {9,56}, {10,56}, {9,58}, {10,58}, {9,57}, {10,57}, + {9,59}, {10,59}, {9,60}, {10,60}, {9,62}, {10,62}, {9,61}, {10,61}, + {9,64}, {10,64}, {9,63}, {10,63}, {8,14}, {8,46}, {9,75}, {10,75}, + {9,72}, {10,72}, {9,69}, {10,69}, {9,74}, {10,74}, {9,71}, {10,71}, + {9,73}, {10,73}, {9,80}, {10,80}, {9,83}, {10,83}, {9,82}, {9,84}, + {10,84}, {9,86}, {10,86}, {9,85}, {10,85}, {9,5}, {10,5}, {9,34}, {10,34}, + {9,52}, {10,52}, {9,70}, {10,70}, {9,79}, {10,79}, {9,76}, {10,76}, + {9,78}, {10,78}, {9,77}, {10,77}, {10,24}, {1,15}, {1,14}, {1,17}, + {1,21}, {1,20}, {1,18}, {1,23}, {1,24}, {5,64}, {5,65}, {5,66}, {5,67}, + {5,70}, {5,72}, {5,75}, {5,85}, {5,68}, {5,73}, {5,80}, {5,81}, {5,82}, + {5,83}, {5,90}, {5,87}, {5,84}, {5,89}, {5,86}, {5,88}, {5,91}, {6,33}, + {6,34}, {6,35}, {6,36}, {6,37}, {6,38}, {6,39}, {6,40}, {6,41}, {6,42}, + {6,43}, {6,44}, {6,45}, {6,81}, {6,82}, {6,83}, {6,84}, {6,85}, {6,86}, + {6,87}, {6,88}, {6,89}, {6,90}, {6,91}, {6,92}, {6,93}, {1,80}, {1,78}, + {15,0}, {15,1}, {15,2}, {15,3}, {15,4}, {15,5}, {15,6}, {15,7}, {15,8}, + {15,9}, {15,10}, {15,11}, {15,12}, {15,13}, {15,14}, {15,15}, {15,16}, + {15,17}, {15,18}, {15,19}, {15,20}, {15,21}, {15,22}, {15,23}, {15,24}, + {15,25}, {15,26}, {15,27}, {15,28}, {15,29}, {15,30}, {15,31}, {15,32}, + {15,33}, {15,34}, {15,35}, {15,36}, {15,37}, {15,38}, {15,39}, {15,40}, + {15,41}, {15,42}, {15,43}, {15,44}, {15,45}, {15,46}, {15,47}, {15,48}, + {15,49}, {15,50}, {15,51}, {15,52}, {15,53}, {15,54}, {15,55}, {15,56}, + {15,57}, {15,58}, {15,59}, {15,60}, {15,61}, {15,63}, {15,64}, {15,65}, + {15,66}, {15,67}, {15,68}, {15,69}, {15,70}, {15,71}, {15,72}, {15,73}, + {15,74}, {15,75}, {15,76}, {15,77}, {15,78}, {15,79}, {15,62}, {15,80}, + {15,81}, {15,82}, {15,83}, {15,84}, {15,85}, {15,86}, {15,87}, {15,88}, + {15,89}, {15,90}, {15,91}, {15,92}, {15,93}, {16,0}, {16,1}, {16,2}, + {16,3}, {16,4}, {16,5}, {16,6}, {16,7}, {16,8}, {16,9}, {16,10}, {16,11}, + {16,12}, {16,13}, {16,14}, {16,15}, {16,16}, {16,17}, {16,18}, {16,19}, + {16,20}, {16,21}, {16,22}, {16,23}, {16,24}, {16,25}, {16,26}, {16,27}, + {16,28}, {16,29}, {16,30}, {16,31}, {16,32}, {16,33}, {16,34}, {16,35}, + {16,36}, {16,37}, {16,38}, {16,39}, {16,40}, {16,41}, {16,42}, {16,43}, + {16,44}, {16,45}, {16,46}, {16,47}, {16,48}, {16,49}, {16,50}, {16,51}, + {16,52}, {16,53}, {16,54}, {16,55}, {16,56}, {16,57}, {16,58}, {16,59}, + {16,60}, {16,61}, {16,85}, {16,62}, {16,63}, {16,64}, {16,65}, {16,66}, + {16,67}, {16,68}, {16,69}, {16,70}, {16,71}, {16,72}, {16,73}, {16,74}, + {16,75}, {16,76}, {16,77}, {16,78}, {16,79}, {16,80}, {16,81}, {16,82}, + {16,83}, {16,84}, {16,86}, {16,87}, {16,88}, {16,89}, {16,90}, {16,91}, + {16,92}, {16,93}, {17,0}, {17,1}, {17,2}, {17,3}, {17,4}, {17,5}, {17,6}, + {17,7}, {17,8}, {17,9}, {17,10}, {17,11}, {17,12}, {17,13}, {17,14}, + {17,15}, {17,16}, {17,17}, {17,18}, {17,19}, {17,20}, {17,21}, {17,22}, + {17,23}, {17,24}, {17,25}, {17,26}, {17,27}, {17,28}, {17,29}, {17,30}, + {17,31}, {17,32}, {17,33}, {17,34}, {17,35}, {17,36}, {17,48}, {17,37}, + {17,38}, {17,39}, {17,40}, {17,41}, {17,42}, {17,43}, {17,44}, {17,45}, + {17,46}, {17,47}, {17,49}, {17,50}, {17,51}, {17,52}, {17,53}, {17,54}, + {17,55}, {17,56}, {17,57}, {17,58}, {17,59}, {17,60}, {17,61}, {17,62}, + {17,63}, {17,64}, {17,65}, {17,66}, {17,67}, {17,68}, {17,69}, {17,70}, + {17,71}, {17,72}, {17,73}, {17,74}, {17,75}, {17,76}, {17,77}, {17,78}, + {17,79}, {17,80}, {17,81}, {17,82}, {17,83}, {17,84}, {17,85}, {17,86}, + {17,87}, {17,88}, {17,89}, {17,90}, {17,91}, {17,92}, {17,93}, {18,0}, + {18,1}, {18,2}, {18,3}, {18,4}, {18,5}, {18,6}, {18,7}, {18,8}, {18,9}, + {18,10}, {18,11}, {18,12}, {18,13}, {18,14}, {18,15}, {18,16}, {18,17}, + {18,18}, {18,19}, {18,20}, {18,21}, {18,22}, {18,23}, {18,24}, {18,25}, + {18,26}, {18,27}, {18,28}, {18,29}, {18,30}, {18,31}, {18,32}, {18,33}, + {18,34}, {18,35}, {18,36}, {18,37}, {18,38}, {18,39}, {18,40}, {18,41}, + {18,42}, {18,43}, {18,44}, {18,45}, {18,46}, {18,47}, {18,48}, {18,49}, + {18,50}, {18,51}, {18,52}, {18,53}, {18,54}, {18,55}, {18,56}, {18,57}, + {18,58}, {18,59}, {18,60}, {18,61}, {18,62}, {18,63}, {18,64}, {18,65}, + {18,66}, {18,67}, {18,68}, {18,69}, {18,70}, {18,71}, {18,72}, {18,73}, + {18,74}, {18,75}, {18,76}, {18,77}, {18,78}, {18,79}, {18,80}, {18,81}, + {18,82}, {18,83}, {18,84}, {18,85}, {18,86}, {18,87}, {18,88}, {18,89}, + {18,90}, {18,91}, {18,92}, {18,93}, {19,0}, {19,1}, {19,2}, {19,3}, + {19,4}, {19,5}, {19,6}, {19,7}, {19,8}, {19,9}, {19,10}, {19,11}, {19,12}, + {19,13}, {19,14}, {19,15}, {19,16}, {19,17}, {19,18}, {19,19}, {19,20}, + {19,21}, {19,23}, {19,22}, {19,24}, {19,25}, {19,26}, {19,27}, {19,28}, + {19,29}, {19,30}, {19,31}, {19,32}, {19,33}, {19,34}, {19,35}, {19,36}, + {19,37}, {19,38}, {19,39}, {19,40}, {19,41}, {19,42}, {19,43}, {19,44}, + {19,45}, {19,46}, {19,47}, {19,48}, {19,49}, {19,50}, {19,51}, {19,52}, + {19,53}, {19,54}, {19,55}, {19,56}, {19,57}, {19,58}, {19,59}, {19,60}, + {19,61}, {19,62}, {19,63}, {19,64}, {19,65}, {19,66}, {19,67}, {19,68}, + {19,69}, {19,70}, {19,71}, {19,72}, {19,73}, {19,74}, {19,75}, {19,76}, + {19,77}, {19,78}, {19,79}, {19,80}, {19,81}, {19,82}, {19,83}, {19,84}, + {19,85}, {19,86}, {19,87}, {19,88}, {19,89}, {19,90}, {19,91}, {19,92}, + {19,93}, {20,0}, {20,1}, {20,2}, {20,3}, {20,4}, {20,5}, {20,6}, {20,7}, + {20,8}, {20,9}, {20,10}, {20,11}, {20,12}, {20,13}, {20,14}, {20,15}, + {20,16}, {20,17}, {20,18}, {20,19}, {20,20}, {20,21}, {20,22}, {20,23}, + {20,24}, {20,25}, {20,26}, {20,27}, {20,28}, {20,29}, {20,30}, {20,31}, + {20,32}, {20,33}, {20,34}, {20,35}, {20,36}, {20,37}, {20,38}, {20,39}, + {20,40}, {20,41}, {20,42}, {20,43}, {20,44}, {20,45}, {20,46}, {20,47}, + {20,48}, {20,49}, {20,50}, {20,51}, {20,52}, {20,53}, {20,54}, {20,55}, + {20,56}, {20,57}, {20,58}, {20,59}, {20,60}, {20,61}, {20,62}, {20,63}, + {20,64}, {20,65}, {20,66}, {20,67}, {20,68}, {20,69}, {20,70}, {20,71}, + {20,72}, {20,73}, {20,74}, {20,75}, {20,76}, {20,77}, {20,78}, {20,79}, + {20,80}, {20,81}, {20,82}, {20,83}, {20,84}, {20,85}, {20,86}, {20,87}, + {20,88}, {20,89}, {20,90}, {20,91}, {20,92}, {20,93}, {21,0}, {21,1}, + {21,2}, {21,3}, {21,4}, {21,5}, {21,6}, {21,7}, {21,8}, {21,9}, {21,10}, + {21,11}, {21,12}, {21,13}, {21,14}, {21,15}, {21,16}, {21,17}, {21,18}, + {21,19}, {21,20}, {21,21}, {21,22}, {21,23}, {21,24}, {21,25}, {21,26}, + {21,27}, {21,28}, {21,29}, {21,30}, {21,31}, {21,32}, {21,33}, {21,34}, + {21,35}, {21,36}, {21,37}, {21,38}, {21,39}, {21,40}, {21,41}, {21,42}, + {21,43}, {21,44}, {21,45}, {21,46}, {21,47}, {21,48}, {21,49}, {21,50}, + {21,51}, {21,52}, {21,53}, {21,54}, {21,55}, {21,56}, {21,57}, {21,58}, + {21,59}, {21,60}, {21,61}, {21,62}, {21,63}, {21,64}, {21,65}, {21,66}, + {21,67}, {21,68}, {21,69}, {21,70}, {21,71}, {21,72}, {21,73}, {21,74}, + {21,75}, {21,76}, {21,79}, {21,80}, {21,77}, {21,78}, {21,81}, {21,82}, + {21,83}, {21,84}, {21,85}, {21,86}, {21,87}, {21,88}, {21,89}, {21,90}, + {21,92}, {21,93}, {21,91}, {22,0}, {22,1}, {22,2}, {22,3}, {22,4}, + {22,5}, {22,6}, {22,7}, {22,8}, {22,9}, {22,10}, {22,11}, {22,12}, + {22,13}, {22,14}, {22,15}, {22,16}, {22,17}, {22,18}, {22,19}, {22,20}, + {22,21}, {22,22}, {22,23}, {22,24}, {22,25}, {22,26}, {22,27}, {22,28}, + {22,29}, {22,30}, {22,31}, {22,32}, {22,33}, {22,34}, {22,35}, {22,36}, + {22,37}, {22,38}, {22,39}, {22,40}, {22,41}, {22,42}, {22,43}, {22,44}, + {22,45}, {22,46}, {22,47}, {22,48}, {22,49}, {22,50}, {22,51}, {22,52}, + {22,53}, {22,54}, {22,63}, {22,55}, {22,56}, {22,57}, {22,58}, {22,59}, + {22,60}, {22,61}, {22,62}, {22,64}, {22,65}, {22,66}, {22,67}, {22,68}, + {22,69}, {22,70}, {22,71}, {22,72}, {22,73}, {22,74}, {22,75}, {22,76}, + {22,93}, {22,77}, {22,78}, {22,79}, {22,80}, {22,81}, {22,82}, {22,83}, + {22,84}, {22,85}, {22,86}, {22,87}, {22,88}, {22,89}, {22,90}, {22,91}, + {22,92}, {23,0}, {23,1}, {23,2}, {23,3}, {23,4}, {23,5}, {23,6}, {23,7}, + {23,8}, {23,9}, {23,10}, {23,11}, {23,12}, {23,13}, {23,14}, {23,15}, + {23,16}, {23,17}, {23,18}, {23,19}, {23,20}, {23,21}, {23,22}, {23,23}, + {23,24}, {23,25}, {23,26}, {23,27}, {23,28}, {23,29}, {23,30}, {23,31}, + {23,32}, {23,33}, {23,34}, {23,35}, {23,36}, {23,37}, {23,38}, {23,39}, + {23,40}, {23,41}, {23,42}, {23,43}, {23,44}, {23,45}, {23,47}, {23,48}, + {23,46}, {23,49}, {23,50}, {23,51}, {23,52}, {23,53}, {23,54}, {23,55}, + {23,56}, {23,57}, {23,58}, {23,59}, {23,60}, {23,61}, {23,62}, {23,63}, + {23,64}, {23,65}, {23,66}, {23,67}, {23,68}, {23,70}, {23,71}, {23,72}, + {23,73}, {23,74}, {23,75}, {23,76}, {23,77}, {23,78}, {23,79}, {23,80}, + {23,81}, {23,82}, {23,83}, {23,84}, {23,85}, {23,86}, {23,87}, {23,88}, + {23,89}, {23,90}, {23,91}, {23,92}, {23,93}, {24,0}, {24,1}, {24,2}, + {24,3}, {24,4}, {24,5}, {24,6}, {24,7}, {24,8}, {24,9}, {24,10}, {24,11}, + {24,12}, {24,13}, {24,14}, {24,15}, {24,16}, {24,17}, {24,18}, {24,19}, + {24,20}, {24,21}, {24,22}, {24,23}, {24,24}, {24,25}, {24,26}, {24,27}, + {24,28}, {24,29}, {24,30}, {24,31}, {24,32}, {24,33}, {24,34}, {24,35}, + {24,36}, {24,37}, {24,38}, {24,39}, {24,40}, {24,41}, {24,42}, {24,43}, + {24,44}, {24,45}, {24,46}, {24,47}, {24,48}, {24,49}, {24,50}, {24,51}, + {24,52}, {24,53}, {24,54}, {24,55}, {24,56}, {24,57}, {24,58}, {24,59}, + {24,60}, {24,61}, {24,62}, {24,63}, {24,64}, {24,65}, {24,66}, {24,67}, + {24,68}, {24,69}, {24,70}, {24,71}, {24,72}, {24,73}, {24,74}, {24,75}, + {24,76}, {24,77}, {24,78}, {24,79}, {24,80}, {24,81}, {24,82}, {24,83}, + {24,84}, {24,85}, {24,86}, {24,87}, {24,88}, {24,89}, {24,90}, {24,91}, + {24,92}, {24,93}, {25,0}, {25,1}, {25,2}, {25,3}, {25,4}, {25,5}, {25,6}, + {25,7}, {25,8}, {25,9}, {25,10}, {25,11}, {25,12}, {25,13}, {25,14}, + {25,15}, {25,16}, {25,18}, {25,19}, {25,20}, {25,21}, {25,22}, {25,23}, + {25,17}, {25,24}, {25,25}, {25,26}, {25,27}, {25,28}, {25,29}, {25,30}, + {25,31}, {25,32}, {25,33}, {25,34}, {25,35}, {25,36}, {25,37}, {25,38}, + {25,39}, {25,40}, {25,41}, {25,42}, {25,43}, {25,44}, {25,45}, {25,46}, + {25,47}, {25,48}, {25,49}, {25,50}, {25,51}, {25,52}, {25,53}, {25,54}, + {25,55}, {25,56}, {25,57}, {25,58}, {25,59}, {25,60}, {25,61}, {25,62}, + {25,63}, {25,64}, {25,65}, {25,66}, {25,67}, {25,68}, {25,69}, {25,70}, + {25,71}, {25,72}, {25,73}, {25,74}, {25,75}, {25,76}, {25,77}, {25,78}, + {25,79}, {25,80}, {25,81}, {25,82}, {25,83}, {25,84}, {25,85}, {25,86}, + {25,87}, {25,88}, {25,89}, {25,90}, {25,91}, {25,92}, {25,93}, {26,0}, + {26,1}, {26,2}, {26,3}, {26,4}, {26,5}, {26,6}, {26,7}, {26,8}, {26,9}, + {26,10}, {26,11}, {26,12}, {26,13}, {26,14}, {26,15}, {26,16}, {26,17}, + {26,18}, {26,19}, {26,20}, {26,21}, {26,22}, {26,23}, {26,24}, {26,25}, + {26,26}, {26,28}, {26,27}, {26,29}, {26,30}, {26,31}, {26,32}, {26,33}, + {26,34}, {26,35}, {26,36}, {26,38}, {26,39}, {26,40}, {26,41}, {26,37}, + {26,42}, {26,43}, {26,44}, {26,45}, {26,46}, {26,47}, {26,48}, {26,49}, + {26,50}, {26,54}, {26,52}, {26,51}, {26,53}, {26,55}, {26,56}, {26,57}, + {26,58}, {26,59}, {26,60}, {26,61}, {26,62}, {26,63}, {26,64}, {26,65}, + {26,66}, {26,67}, {26,68}, {26,69}, {26,70}, {26,71}, {26,72}, {26,73}, + {26,74}, {26,75}, {26,76}, {26,77}, {26,78}, {26,79}, {26,80}, {26,81}, + {69,83}, {26,82}, {26,83}, {26,84}, {26,85}, {26,86}, {26,87}, {26,89}, + {26,88}, {26,90}, {26,91}, {26,92}, {26,93}, {27,0}, {27,1}, {27,2}, + {27,3}, {27,4}, {27,5}, {27,6}, {27,7}, {27,8}, {27,9}, {27,10}, {27,11}, + {27,13}, {27,12}, {27,14}, {27,15}, {27,16}, {27,19}, {27,17}, {27,18}, + {27,20}, {27,21}, {27,22}, {27,23}, {27,24}, {27,25}, {27,26}, {27,27}, + {27,28}, {27,29}, {27,30}, {27,31}, {27,32}, {27,33}, {27,34}, {27,35}, + {27,36}, {27,37}, {27,38}, {27,39}, {27,40}, {27,41}, {27,42}, {27,43}, + {27,44}, {27,45}, {27,46}, {27,47}, {27,49}, {27,48}, {27,50}, {27,51}, + {27,52}, {27,53}, {27,54}, {27,55}, {27,56}, {27,57}, {27,58}, {27,59}, + {27,60}, {27,61}, {27,62}, {27,63}, {27,64}, {27,65}, {27,66}, {27,67}, + {27,68}, {27,69}, {27,70}, {27,71}, {27,72}, {27,73}, {27,74}, {27,75}, + {27,76}, {27,77}, {27,78}, {27,79}, {27,80}, {27,81}, {27,82}, {27,83}, + {27,84}, {27,85}, {27,86}, {27,87}, {27,88}, {27,89}, {27,90}, {27,91}, + {27,92}, {27,93}, {28,0}, {28,1}, {28,2}, {28,3}, {28,4}, {28,5}, {28,6}, + {28,7}, {28,8}, {28,9}, {28,10}, {28,11}, {28,12}, {28,13}, {28,14}, + {28,17}, {28,15}, {28,16}, {28,18}, {28,19}, {28,20}, {28,21}, {28,22}, + {28,23}, {28,24}, {28,25}, {28,26}, {28,27}, {28,28}, {28,29}, {28,30}, + {28,31}, {28,32}, {28,33}, {28,34}, {28,35}, {28,36}, {28,37}, {28,38}, + {28,39}, {28,40}, {28,41}, {28,42}, {28,43}, {28,44}, {28,45}, {28,46}, + {28,47}, {28,48}, {28,49}, {28,50}, {28,51}, {28,52}, {28,53}, {28,54}, + {28,55}, {28,56}, {28,57}, {28,58}, {28,59}, {28,60}, {28,61}, {28,62}, + {28,63}, {28,64}, {28,65}, {28,66}, {28,67}, {28,68}, {28,69}, {28,70}, + {28,71}, {28,72}, {28,73}, {28,74}, {28,75}, {28,76}, {28,77}, {28,78}, + {28,79}, {28,80}, {28,81}, {28,82}, {28,83}, {28,84}, {28,85}, {28,86}, + {28,87}, {28,88}, {28,89}, {28,90}, {28,91}, {28,92}, {28,93}, {29,0}, + {29,1}, {29,2}, {29,3}, {29,4}, {29,5}, {29,6}, {29,7}, {29,8}, {29,9}, + {29,10}, {29,11}, {29,12}, {29,13}, {29,14}, {29,15}, {29,16}, {29,17}, + {29,18}, {29,19}, {29,20}, {29,21}, {29,22}, {29,23}, {29,24}, {29,25}, + {29,26}, {29,27}, {29,28}, {29,29}, {29,30}, {29,31}, {29,32}, {29,33}, + {29,34}, {29,35}, {29,36}, {29,37}, {29,38}, {29,39}, {29,40}, {29,41}, + {29,42}, {29,43}, {29,44}, {29,45}, {29,46}, {29,47}, {29,48}, {29,49}, + {29,50}, {29,51}, {29,52}, {29,53}, {29,54}, {29,55}, {29,56}, {29,57}, + {29,58}, {29,59}, {29,60}, {29,61}, {29,62}, {29,63}, {29,64}, {29,65}, + {29,66}, {29,67}, {29,68}, {29,69}, {29,70}, {29,71}, {29,72}, {29,73}, + {29,74}, {29,75}, {29,76}, {29,77}, {29,78}, {29,79}, {29,80}, {29,81}, + {29,82}, {29,83}, {29,84}, {29,85}, {29,86}, {29,87}, {29,88}, {29,89}, + {29,90}, {29,93}, {29,91}, {29,92}, {30,0}, {30,1}, {30,2}, {30,3}, + {30,4}, {30,5}, {30,6}, {30,7}, {30,8}, {30,9}, {30,10}, {30,11}, {30,12}, + {30,13}, {30,14}, {30,15}, {30,16}, {30,17}, {30,18}, {30,19}, {30,20}, + {30,21}, {30,22}, {30,23}, {30,24}, {30,25}, {30,26}, {30,27}, {30,28}, + {30,29}, {30,30}, {30,31}, {30,32}, {30,33}, {30,34}, {30,35}, {30,36}, + {30,37}, {30,38}, {30,39}, {30,40}, {30,41}, {30,42}, {30,43}, {30,44}, + {30,45}, {30,46}, {30,47}, {30,48}, {30,49}, {30,50}, {30,51}, {30,52}, + {30,53}, {30,54}, {30,55}, {30,56}, {30,57}, {30,58}, {30,59}, {30,60}, + {30,61}, {30,62}, {30,63}, {30,64}, {30,65}, {30,66}, {30,67}, {30,68}, + {30,69}, {30,70}, {30,71}, {30,72}, {30,73}, {30,74}, {30,75}, {30,76}, + {30,77}, {30,78}, {30,79}, {30,80}, {30,81}, {30,82}, {30,83}, {30,84}, + {30,85}, {30,86}, {30,87}, {30,88}, {30,89}, {30,90}, {30,91}, {30,92}, + {30,93}, {31,0}, {31,1}, {31,2}, {31,3}, {31,4}, {31,5}, {31,6}, {31,7}, + {31,8}, {31,9}, {31,10}, {31,11}, {31,12}, {31,13}, {31,14}, {31,15}, + {31,16}, {31,17}, {31,18}, {31,19}, {31,20}, {31,21}, {31,22}, {31,23}, + {31,24}, {31,25}, {31,26}, {31,27}, {31,28}, {31,29}, {31,30}, {31,31}, + {31,32}, {31,33}, {31,34}, {31,35}, {31,36}, {31,37}, {31,38}, {31,39}, + {31,40}, {31,41}, {31,42}, {31,43}, {31,44}, {31,45}, {31,46}, {31,47}, + {31,48}, {31,49}, {31,50}, {31,51}, {31,52}, {31,53}, {31,54}, {31,55}, + {31,56}, {31,57}, {31,58}, {31,59}, {31,60}, {31,61}, {31,62}, {31,63}, + {31,64}, {31,65}, {31,66}, {31,67}, {31,68}, {31,69}, {31,70}, {31,71}, + {31,72}, {31,73}, {31,74}, {31,75}, {31,76}, {31,77}, {31,78}, {31,79}, + {31,80}, {31,81}, {31,82}, {31,83}, {31,84}, {31,85}, {31,86}, {31,87}, + {31,88}, {31,89}, {31,90}, {31,91}, {31,92}, {31,93}, {32,0}, {32,1}, + {32,2}, {32,3}, {32,4}, {32,5}, {32,6}, {32,7}, {32,8}, {32,9}, {32,10}, + {32,11}, {32,12}, {32,13}, {32,14}, {32,15}, {32,16}, {32,17}, {32,18}, + {32,19}, {32,20}, {32,21}, {32,22}, {32,23}, {32,24}, {32,25}, {32,26}, + {32,27}, {32,28}, {32,29}, {32,30}, {32,31}, {32,32}, {32,33}, {32,34}, + {32,35}, {32,36}, {32,37}, {32,38}, {32,39}, {32,40}, {32,41}, {32,42}, + {32,43}, {32,44}, {32,45}, {32,46}, {32,47}, {32,48}, {32,49}, {32,50}, + {32,51}, {32,52}, {32,53}, {32,54}, {32,55}, {32,56}, {32,57}, {32,58}, + {32,59}, {32,60}, {32,61}, {32,62}, {32,63}, {32,64}, {32,65}, {32,66}, + {32,67}, {32,68}, {32,69}, {32,70}, {32,71}, {32,72}, {32,73}, {32,74}, + {32,75}, {32,76}, {32,77}, {32,78}, {32,79}, {32,80}, {32,81}, {32,82}, + {32,83}, {32,84}, {32,85}, {32,86}, {32,87}, {32,88}, {32,89}, {32,90}, + {32,91}, {32,92}, {32,93}, {33,0}, {33,1}, {33,2}, {33,3}, {33,4}, + {33,5}, {33,6}, {33,7}, {33,8}, {33,9}, {33,10}, {33,11}, {33,12}, + {33,13}, {33,15}, {33,14}, {33,16}, {33,17}, {33,18}, {33,19}, {33,20}, + {33,22}, {33,21}, {33,23}, {33,24}, {33,25}, {33,26}, {33,27}, {33,28}, + {33,29}, {33,31}, {33,32}, {33,33}, {33,35}, {33,36}, {33,38}, {33,39}, + {33,40}, {33,41}, {33,43}, {33,34}, {33,37}, {33,42}, {33,44}, {33,45}, + {33,46}, {33,47}, {33,48}, {33,49}, {33,50}, {33,51}, {33,52}, {33,53}, + {33,54}, {33,55}, {33,56}, {33,57}, {33,58}, {33,59}, {33,60}, {33,61}, + {33,62}, {33,63}, {33,64}, {33,65}, {33,66}, {33,67}, {33,68}, {33,69}, + {33,70}, {33,71}, {33,72}, {33,73}, {33,74}, {33,75}, {33,76}, {33,30}, + {33,77}, {33,78}, {33,79}, {33,80}, {33,81}, {33,82}, {33,83}, {33,84}, + {33,85}, {33,86}, {33,87}, {33,88}, {33,89}, {33,90}, {33,91}, {33,92}, + {33,93}, {34,0}, {34,1}, {34,2}, {34,3}, {34,4}, {34,5}, {34,6}, {34,7}, + {34,8}, {34,9}, {34,10}, {34,11}, {34,12}, {34,13}, {34,14}, {34,15}, + {34,16}, {34,17}, {34,18}, {34,19}, {34,20}, {34,21}, {34,22}, {34,24}, + {34,25}, {34,26}, {34,27}, {34,28}, {34,29}, {34,30}, {34,31}, {34,32}, + {34,33}, {34,34}, {34,35}, {34,36}, {34,37}, {34,38}, {34,39}, {34,23}, + {34,41}, {34,42}, {34,43}, {34,44}, {34,46}, {34,45}, {34,47}, {34,48}, + {34,49}, {34,50}, {34,51}, {34,52}, {34,53}, {34,54}, {34,55}, {34,56}, + {34,57}, {34,58}, {34,40}, {34,59}, {34,60}, {34,61}, {34,62}, {34,63}, + {34,64}, {34,65}, {34,66}, {34,67}, {34,68}, {34,69}, {34,70}, {34,71}, + {34,72}, {34,73}, {34,74}, {34,75}, {34,76}, {34,77}, {34,78}, {34,79}, + {34,80}, {34,81}, {34,82}, {34,83}, {34,84}, {34,85}, {34,86}, {34,87}, + {34,88}, {34,89}, {34,90}, {34,91}, {34,92}, {34,93}, {35,0}, {35,1}, + {35,2}, {35,3}, {35,4}, {35,5}, {35,6}, {35,7}, {35,8}, {35,9}, {35,10}, + {35,11}, {35,12}, {35,13}, {35,14}, {35,15}, {35,16}, {35,17}, {35,18}, + {35,19}, {35,20}, {35,21}, {35,22}, {35,23}, {35,24}, {35,25}, {35,26}, + {35,27}, {35,28}, {35,29}, {35,30}, {35,31}, {35,32}, {35,33}, {35,34}, + {35,35}, {35,36}, {35,37}, {35,38}, {35,39}, {35,40}, {35,41}, {35,42}, + {35,43}, {35,44}, {35,45}, {35,46}, {35,47}, {35,48}, {35,49}, {35,50}, + {35,51}, {35,52}, {35,53}, {35,54}, {35,55}, {35,56}, {35,57}, {35,58}, + {35,59}, {35,60}, {35,61}, {35,62}, {35,63}, {35,64}, {35,65}, {35,66}, + {35,67}, {35,68}, {35,69}, {35,70}, {35,71}, {35,72}, {35,73}, {35,74}, + {35,75}, {35,76}, {35,77}, {35,78}, {35,79}, {35,80}, {35,81}, {35,82}, + {35,83}, {35,84}, {35,85}, {35,86}, {35,87}, {35,88}, {35,89}, {35,90}, + {35,91}, {35,92}, {35,93}, {36,0}, {36,1}, {36,2}, {36,3}, {36,4}, + {36,5}, {36,6}, {36,7}, {36,8}, {36,9}, {36,10}, {36,11}, {36,12}, + {36,13}, {36,14}, {36,15}, {36,16}, {36,17}, {36,18}, {36,19}, {36,20}, + {36,21}, {36,22}, {36,23}, {36,24}, {36,25}, {36,26}, {36,27}, {36,28}, + {36,29}, {36,30}, {36,31}, {36,32}, {36,33}, {36,34}, {36,35}, {36,36}, + {36,37}, {36,38}, {36,39}, {36,40}, {36,41}, {36,42}, {36,44}, {36,43}, + {36,45}, {36,46}, {36,47}, {36,48}, {36,49}, {36,50}, {36,51}, {36,52}, + {36,53}, {36,54}, {36,55}, {36,56}, {36,57}, {36,58}, {36,59}, {36,60}, + {36,61}, {36,62}, {36,63}, {36,64}, {36,65}, {36,66}, {36,67}, {36,68}, + {36,69}, {36,70}, {36,71}, {36,72}, {36,73}, {36,74}, {36,75}, {36,76}, + {36,77}, {36,78}, {36,79}, {36,80}, {36,81}, {36,82}, {36,83}, {36,84}, + {36,85}, {36,86}, {36,87}, {36,88}, {36,89}, {36,90}, {36,91}, {36,92}, + {36,93}, {37,0}, {37,1}, {37,2}, {37,3}, {37,4}, {37,5}, {37,6}, {37,7}, + {37,8}, {37,9}, {37,10}, {37,11}, {37,12}, {37,13}, {37,14}, {37,15}, + {37,16}, {37,17}, {37,18}, {37,19}, {37,20}, {37,21}, {37,22}, {37,23}, + {37,24}, {37,25}, {37,26}, {37,27}, {37,28}, {37,29}, {37,30}, {37,31}, + {37,32}, {37,33}, {37,34}, {37,35}, {37,36}, {37,37}, {37,38}, {37,39}, + {37,40}, {37,41}, {37,42}, {37,43}, {37,44}, {37,45}, {37,46}, {37,47}, + {37,48}, {37,49}, {37,50}, {37,51}, {37,52}, {37,53}, {37,54}, {37,55}, + {37,56}, {37,57}, {37,58}, {37,59}, {37,60}, {37,61}, {37,62}, {37,63}, + {38,21}, {37,64}, {37,65}, {37,66}, {37,67}, {37,68}, {37,69}, {37,70}, + {37,71}, {37,72}, {37,73}, {37,74}, {37,75}, {37,76}, {37,77}, {37,78}, + {37,79}, {37,80}, {37,81}, {37,82}, {37,83}, {37,84}, {37,85}, {37,86}, + {37,87}, {37,88}, {37,89}, {37,90}, {37,91}, {37,92}, {37,93}, {38,0}, + {38,1}, {38,2}, {38,3}, {38,4}, {38,5}, {38,6}, {38,7}, {38,8}, {38,9}, + {38,10}, {38,11}, {38,12}, {38,13}, {38,14}, {38,15}, {38,16}, {38,17}, + {38,18}, {38,19}, {38,20}, {38,22}, {38,23}, {38,24}, {38,25}, {38,26}, + {38,27}, {38,28}, {38,29}, {38,30}, {38,31}, {38,32}, {38,33}, {38,34}, + {38,35}, {38,36}, {38,37}, {38,38}, {38,39}, {38,40}, {38,41}, {38,42}, + {38,43}, {38,44}, {38,45}, {38,46}, {38,47}, {38,48}, {38,49}, {38,50}, + {38,51}, {38,52}, {38,53}, {38,54}, {38,55}, {38,56}, {38,57}, {38,58}, + {38,59}, {38,60}, {38,61}, {38,62}, {38,63}, {38,64}, {38,65}, {38,66}, + {38,67}, {38,68}, {38,69}, {38,70}, {38,71}, {38,72}, {38,73}, {38,74}, + {38,75}, {38,76}, {38,77}, {38,78}, {38,79}, {38,80}, {38,81}, {38,82}, + {38,83}, {38,84}, {38,85}, {38,86}, {38,87}, {38,88}, {38,89}, {38,90}, + {38,91}, {38,92}, {38,93}, {39,0}, {39,1}, {39,2}, {39,3}, {39,4}, + {39,5}, {39,6}, {39,7}, {39,8}, {39,9}, {39,10}, {39,11}, {39,12}, + {39,13}, {39,14}, {39,15}, {39,16}, {39,17}, {39,18}, {39,19}, {39,20}, + {39,21}, {39,22}, {39,23}, {39,24}, {39,25}, {39,26}, {39,27}, {39,28}, + {39,29}, {39,30}, {39,31}, {39,32}, {39,33}, {39,34}, {39,35}, {39,36}, + {39,37}, {39,38}, {39,39}, {39,40}, {39,41}, {39,42}, {39,43}, {39,50}, + {39,44}, {39,45}, {39,46}, {39,47}, {39,48}, {39,49}, {39,51}, {39,52}, + {39,53}, {39,54}, {39,55}, {39,56}, {39,57}, {39,58}, {39,59}, {39,60}, + {39,61}, {39,62}, {39,63}, {39,64}, {39,65}, {39,66}, {39,67}, {39,68}, + {39,69}, {39,70}, {39,71}, {39,72}, {39,73}, {39,74}, {39,75}, {39,76}, + {39,77}, {39,78}, {39,79}, {39,80}, {39,81}, {39,82}, {39,83}, {39,84}, + {39,85}, {39,86}, {39,87}, {39,88}, {39,89}, {39,90}, {39,91}, {39,92}, + {39,93}, {40,0}, {40,1}, {40,2}, {40,3}, {40,4}, {40,5}, {40,6}, {40,7}, + {40,8}, {40,9}, {40,10}, {40,11}, {40,12}, {40,13}, {40,14}, {40,15}, + {40,16}, {40,17}, {40,18}, {40,19}, {40,20}, {40,21}, {40,22}, {40,23}, + {40,24}, {40,25}, {40,26}, {40,27}, {40,32}, {40,28}, {40,29}, {40,30}, + {40,31}, {40,33}, {40,34}, {40,35}, {40,36}, {40,37}, {40,38}, {40,39}, + {40,40}, {40,41}, {40,42}, {40,43}, {40,44}, {40,45}, {40,46}, {40,47}, + {40,48}, {40,49}, {40,50}, {40,51}, {40,52}, {40,53}, {40,54}, {40,55}, + {40,56}, {40,57}, {40,58}, {40,59}, {40,60}, {40,61}, {40,62}, {40,63}, + {40,64}, {40,65}, {40,66}, {40,67}, {40,68}, {40,69}, {40,70}, {40,71}, + {40,72}, {40,73}, {40,74}, {40,75}, {40,76}, {40,77}, {40,78}, {40,79}, + {40,80}, {40,81}, {40,82}, {40,83}, {40,84}, {40,85}, {40,86}, {40,87}, + {40,88}, {40,89}, {40,90}, {40,91}, {40,92}, {40,93}, {41,0}, {41,1}, + {41,2}, {41,3}, {41,4}, {41,5}, {41,6}, {41,7}, {41,8}, {41,9}, {41,10}, + {41,11}, {41,12}, {41,13}, {41,14}, {41,15}, {41,16}, {41,17}, {41,18}, + {41,19}, {41,20}, {41,21}, {41,22}, {41,23}, {41,24}, {41,25}, {41,26}, + {41,27}, {41,28}, {41,29}, {41,30}, {41,31}, {41,32}, {41,33}, {41,34}, + {41,35}, {41,36}, {41,37}, {41,38}, {41,39}, {41,40}, {41,41}, {41,42}, + {41,43}, {41,44}, {41,45}, {41,46}, {41,47}, {41,48}, {41,49}, {41,50}, + {41,51}, {41,52}, {41,53}, {41,54}, {41,55}, {41,56}, {41,57}, {41,58}, + {41,59}, {41,60}, {41,61}, {41,62}, {41,63}, {41,64}, {41,65}, {41,66}, + {41,67}, {41,68}, {41,69}, {41,70}, {41,71}, {41,72}, {41,73}, {41,74}, + {41,75}, {41,76}, {41,77}, {41,78}, {41,79}, {41,80}, {41,81}, {41,82}, + {41,83}, {41,84}, {41,85}, {41,86}, {41,87}, {41,88}, {41,89}, {41,90}, + {41,91}, {41,92}, {41,93}, {42,0}, {42,1}, {42,2}, {42,3}, {42,4}, + {42,5}, {42,6}, {42,7}, {42,8}, {42,9}, {42,10}, {42,11}, {42,12}, + {42,13}, {42,14}, {42,15}, {42,16}, {42,17}, {42,18}, {42,19}, {42,20}, + {42,21}, {42,22}, {42,23}, {42,24}, {42,25}, {42,26}, {42,27}, {42,28}, + {42,29}, {42,30}, {42,31}, {42,32}, {42,33}, {42,34}, {42,35}, {42,36}, + {42,37}, {42,38}, {42,39}, {42,40}, {42,41}, {42,42}, {42,43}, {42,44}, + {42,45}, {42,46}, {42,47}, {42,48}, {42,49}, {42,50}, {42,51}, {42,52}, + {42,53}, {42,54}, {42,55}, {42,56}, {42,57}, {42,58}, {42,59}, {42,60}, + {42,61}, {42,62}, {42,63}, {42,64}, {42,65}, {42,66}, {42,67}, {42,68}, + {42,69}, {42,70}, {42,71}, {42,72}, {42,73}, {42,74}, {42,75}, {42,76}, + {42,77}, {42,78}, {42,79}, {42,80}, {42,81}, {42,82}, {42,83}, {42,84}, + {42,85}, {42,86}, {42,87}, {42,88}, {42,89}, {42,90}, {42,91}, {42,92}, + {42,93}, {43,0}, {43,1}, {43,2}, {43,3}, {43,4}, {43,5}, {43,6}, {43,7}, + {43,8}, {43,9}, {43,10}, {43,11}, {43,12}, {43,13}, {43,14}, {43,15}, + {43,16}, {43,17}, {43,18}, {43,19}, {43,20}, {43,21}, {43,22}, {43,23}, + {43,24}, {43,25}, {43,26}, {43,27}, {43,28}, {43,29}, {43,30}, {43,31}, + {43,32}, {43,33}, {43,34}, {43,35}, {43,36}, {43,37}, {43,38}, {43,39}, + {43,40}, {43,41}, {43,42}, {43,43}, {43,44}, {43,45}, {43,46}, {43,47}, + {43,48}, {43,49}, {43,50}, {43,51}, {43,52}, {43,53}, {43,54}, {43,55}, + {43,56}, {43,57}, {43,58}, {43,59}, {43,60}, {43,61}, {43,62}, {43,63}, + {43,64}, {43,65}, {43,66}, {43,67}, {43,68}, {43,69}, {43,70}, {43,71}, + {43,72}, {43,73}, {43,74}, {43,75}, {43,76}, {43,77}, {43,78}, {43,79}, + {43,80}, {43,81}, {43,82}, {43,83}, {43,84}, {43,85}, {43,86}, {43,87}, + {43,88}, {43,89}, {43,90}, {43,91}, {43,92}, {43,93}, {44,0}, {44,1}, + {44,2}, {44,3}, {44,4}, {44,5}, {44,6}, {44,7}, {44,8}, {44,9}, {44,10}, + {44,11}, {44,12}, {44,13}, {44,14}, {44,15}, {44,16}, {44,17}, {44,18}, + {44,19}, {44,20}, {44,21}, {44,22}, {44,23}, {44,24}, {44,25}, {44,26}, + {44,27}, {44,28}, {44,29}, {44,30}, {44,31}, {44,32}, {44,33}, {44,34}, + {44,35}, {44,36}, {44,37}, {44,38}, {44,39}, {44,40}, {44,41}, {44,42}, + {44,43}, {44,44}, {44,45}, {44,46}, {44,47}, {44,48}, {44,49}, {44,50}, + {44,51}, {44,52}, {44,53}, {44,54}, {44,55}, {44,56}, {44,57}, {44,58}, + {44,59}, {44,60}, {44,61}, {44,62}, {44,63}, {44,64}, {44,65}, {44,66}, + {44,67}, {44,68}, {44,69}, {44,70}, {44,71}, {44,72}, {44,73}, {44,74}, + {44,75}, {44,76}, {44,77}, {44,78}, {44,79}, {44,80}, {44,81}, {44,82}, + {44,83}, {44,84}, {44,85}, {44,86}, {44,87}, {44,88}, {44,89}, {44,90}, + {44,91}, {44,92}, {44,93}, {45,0}, {45,1}, {45,3}, {45,4}, {45,5}, + {45,6}, {45,7}, {45,8}, {45,2}, {45,9}, {45,10}, {45,11}, {45,12}, + {45,13}, {45,14}, {45,15}, {45,16}, {45,17}, {45,18}, {45,19}, {45,20}, + {45,21}, {45,22}, {45,23}, {45,24}, {45,25}, {45,26}, {45,27}, {45,28}, + {45,29}, {45,30}, {45,31}, {45,32}, {45,33}, {45,34}, {45,35}, {45,36}, + {45,37}, {45,38}, {45,39}, {45,40}, {45,41}, {45,42}, {45,43}, {45,44}, + {45,45}, {45,46}, {45,47}, {45,48}, {45,49}, {45,50}, {45,51}, {45,52}, + {45,53}, {45,54}, {45,55}, {45,56}, {45,57}, {45,58}, {45,59}, {45,60}, + {45,61}, {45,62}, {45,63}, {45,64}, {45,65}, {45,66}, {45,67}, {45,68}, + {45,69}, {45,70}, {45,71}, {45,72}, {45,73}, {45,74}, {45,75}, {45,76}, + {45,77}, {45,78}, {45,79}, {45,80}, {45,81}, {45,82}, {45,83}, {45,84}, + {45,85}, {45,86}, {45,87}, {45,88}, {45,89}, {45,90}, {45,91}, {45,92}, + {45,93}, {46,0}, {46,1}, {46,2}, {46,3}, {46,4}, {46,5}, {46,6}, {46,7}, + {46,8}, {46,9}, {46,10}, {46,11}, {46,12}, {46,13}, {46,14}, {46,15}, + {46,16}, {46,17}, {46,18}, {46,19}, {46,20}, {46,21}, {46,22}, {46,23}, + {46,24}, {46,25}, {46,26}, {46,27}, {46,28}, {46,29}, {46,30}, {46,31}, + {46,32}, {46,33}, {46,34}, {46,35}, {46,36}, {46,37}, {46,38}, {46,39}, + {46,40}, {46,41}, {46,42}, {46,43}, {46,44}, {46,45}, {46,46}, {46,47}, + {46,48}, {46,49}, {46,50}, {46,51}, {46,52}, {46,53}, {46,54}, {46,55}, + {46,56}, {46,57}, {46,58}, {46,59}, {46,60}, {46,61}, {46,62}, {46,63}, + {46,64}, {46,65}, {46,66}, {46,67}, {46,68}, {46,69}, {46,70}, {46,71}, + {46,72}, {46,73}, {46,74}, {46,75}, {46,76}, {46,77}, {46,78}, {46,79}, + {46,80}, {46,81}, {46,83}, {46,84}, {46,85}, {46,82}, {46,86}, {46,87}, + {46,88}, {46,89}, {46,90}, {46,91}, {46,92}, {46,93}, {47,0}, {47,1}, + {47,2}, {47,3}, {47,4}, {47,5}, {47,6}, {47,7}, {47,8}, {47,9}, {47,10}, + {47,11}, {47,13}, {47,14}, {47,15}, {47,16}, {47,12}, {47,17}, {47,18}, + {47,19}, {47,20}, {47,22}, {47,23}, {47,24}, {47,25}, {47,26}, {47,21}, + {47,27}, {47,28}, {47,29}, {47,30}, {47,31}, {47,32}, {47,33}, {47,34}, + {47,35}, {47,36}, {47,37}, {47,38}, {47,39}, {47,40}, {47,41}, {47,42}, + {47,43}, {47,44}, {47,45}, {47,46}, {47,47}, {47,48}, {47,49}, {47,50}, + {47,51}, {47,52}, {47,53}, {47,54}, {47,55}, {47,56}, {47,57}, {47,58}, + {47,59}, {47,60}, {47,61}, {47,62}, {47,63}, {47,64}, {47,65}, {47,66}, + {47,67}, {47,68}, {47,69}, {47,70}, {47,71}, {47,72}, {47,73}, {47,74}, + {47,75}, {47,76}, {47,77}, {47,78}, {47,79}, {47,80}, {47,81}, {47,82}, + {47,83}, {47,84}, {47,85}, {47,86}, {47,87}, {47,88}, {47,89}, {47,90}, + {47,91}, {47,92}, {47,93}, {48,0}, {48,1}, {48,2}, {48,3}, {48,4}, + {48,5}, {48,6}, {48,7}, {48,8}, {48,9}, {48,10}, {48,11}, {48,12}, + {48,13}, {48,14}, {48,15}, {48,16}, {48,17}, {48,18}, {48,19}, {48,20}, + {48,21}, {48,22}, {48,23}, {48,24}, {48,25}, {48,26}, {48,27}, {48,28}, + {48,29}, {48,30}, {48,31}, {48,32}, {48,33}, {48,34}, {48,35}, {48,36}, + {48,37}, {48,38}, {48,39}, {48,40}, {48,41}, {48,42}, {48,43}, {48,44}, + {48,45}, {48,46}, {48,47}, {48,48}, {48,49}, {48,50}, {48,51}, {48,52}, + {48,53}, {48,54}, {48,55}, {48,56}, {48,57}, {48,58}, {48,59}, {48,60}, + {48,61}, {48,62}, {48,63}, {48,64}, {48,65}, {48,66}, {48,67}, {48,68}, + {48,69}, {48,70}, {48,71}, {48,72}, {48,73}, {48,74}, {48,75}, {48,76}, + {48,77}, {48,78}, {48,79}, {48,80}, {48,81}, {48,82}, {48,83}, {48,84}, + {48,85}, {48,86}, {48,87}, {48,88}, {48,89}, {48,90}, {48,91}, {48,92}, + {48,93}, {49,0}, {49,1}, {49,2}, {49,3}, {49,4}, {49,5}, {49,6}, {49,7}, + {49,8}, {49,9}, {49,10}, {49,11}, {49,12}, {49,13}, {49,14}, {49,15}, + {49,16}, {49,17}, {49,18}, {49,19}, {49,20}, {49,21}, {49,22}, {49,23}, + {49,24}, {49,25}, {49,26}, {49,27}, {49,28}, {49,29}, {49,30}, {49,31}, + {49,32}, {49,33}, {49,34}, {49,35}, {49,36}, {49,37}, {49,38}, {49,39}, + {49,40}, {49,41}, {49,42}, {49,43}, {49,44}, {49,45}, {49,46}, {49,47}, + {49,48}, {49,49}, {49,50}, {49,51}, {49,52}, {49,53}, {49,54}, {49,55}, + {49,56}, {49,57}, {49,58}, {49,59}, {49,60}, {49,61}, {49,62}, {49,63}, + {49,64}, {49,65}, {49,66}, {49,67}, {49,68}, {49,69}, {49,70}, {49,71}, + {49,72}, {49,73}, {49,74}, {49,75}, {49,76}, {49,77}, {49,78}, {49,79}, + {49,80}, {49,81}, {49,82}, {49,83}, {49,85}, {49,86}, {49,87}, {49,84}, + {49,88}, {49,89}, {49,90}, {49,91}, {49,92}, {49,93}, {50,0}, {50,1}, + {50,2}, {50,3}, {50,4}, {50,5}, {50,6}, {50,7}, {50,8}, {50,9}, {50,10}, + {50,11}, {50,12}, {50,13}, {50,14}, {50,15}, {50,16}, {50,17}, {50,18}, + {50,19}, {50,20}, {50,21}, {50,22}, {50,23}, {50,24}, {50,25}, {50,26}, + {50,27}, {50,28}, {50,29}, {50,30}, {50,31}, {50,32}, {50,33}, {50,34}, + {50,35}, {50,36}, {50,37}, {50,38}, {50,39}, {50,40}, {50,41}, {50,42}, + {50,43}, {50,44}, {50,45}, {50,46}, {50,47}, {50,48}, {50,49}, {50,50}, + {50,51}, {50,52}, {50,53}, {50,54}, {50,55}, {50,56}, {50,57}, {50,58}, + {50,59}, {50,60}, {50,61}, {50,62}, {50,63}, {50,64}, {50,65}, {50,66}, + {50,67}, {50,68}, {50,69}, {50,70}, {50,71}, {50,72}, {50,73}, {50,74}, + {50,75}, {50,76}, {50,77}, {50,78}, {50,79}, {50,80}, {50,81}, {50,82}, + {50,83}, {50,84}, {50,85}, {50,86}, {50,87}, {50,88}, {50,89}, {50,90}, + {50,91}, {50,92}, {50,93}, {51,0}, {51,1}, {51,2}, {51,3}, {51,4}, + {51,5}, {51,6}, {51,7}, {51,8}, {51,9}, {51,10}, {51,11}, {51,12}, + {51,13}, {51,14}, {51,15}, {51,16}, {51,17}, {51,19}, {51,20}, {51,21}, + {51,22}, {51,23}, {51,24}, {51,25}, {51,26}, {51,27}, {51,28}, {51,29}, + {51,18}, {51,30}, {51,31}, {51,32}, {51,33}, {51,34}, {51,35}, {51,36}, + {51,37}, {51,38}, {51,39}, {51,40}, {51,41}, {51,42}, {51,43}, {51,44}, + {51,45}, {51,46}, {51,47}, {51,48}, {51,49}, {51,50}, {51,51}, {51,52}, + {51,53}, {51,54}, {51,55}, {51,56}, {51,57}, {51,58}, {51,59}, {51,60}, + {51,61}, {51,62}, {51,63}, {51,64}, {51,65}, {51,66}, {51,67}, {51,68}, + {51,69}, {51,70}, {51,71}, {51,72}, {51,73}, {51,75}, {51,74}, {51,76}, + {51,77}, {51,78}, {51,79}, {51,80}, {51,81}, {51,82}, {51,83}, {51,84}, + {51,85}, {51,86}, {51,87}, {51,88}, {51,89}, {51,90}, {51,91}, {51,92}, + {51,93}, {52,0}, {52,1}, {52,2}, {52,3}, {52,4}, {52,5}, {52,6}, {52,7}, + {52,8}, {52,9}, {52,10}, {52,11}, {52,12}, {52,13}, {52,14}, {52,15}, + {52,16}, {52,17}, {52,18}, {52,19}, {52,20}, {52,21}, {52,22}, {52,23}, + {52,24}, {52,25}, {52,26}, {52,27}, {52,28}, {52,29}, {52,30}, {52,31}, + {52,32}, {52,33}, {52,34}, {52,35}, {52,36}, {52,37}, {52,38}, {52,39}, + {52,40}, {52,41}, {52,42}, {52,43}, {52,44}, {52,45}, {52,46}, {52,47}, + {52,48}, {52,49}, {52,50}, {52,51}, {52,52}, {52,53}, {52,54}, {52,55}, + {52,56}, {52,57}, {52,58}, {52,59}, {52,60}, {52,61}, {52,62}, {52,63}, + {52,64}, {52,65}, {52,66}, {52,67}, {52,68}, {52,69}, {52,70}, {52,71}, + {52,72}, {52,73}, {52,74}, {52,75}, {52,76}, {52,77}, {52,78}, {52,79}, + {52,80}, {52,81}, {52,82}, {52,83}, {52,84}, {52,85}, {52,86}, {52,87}, + {52,88}, {52,89}, {52,90}, {52,91}, {52,92}, {52,93}, {53,0}, {53,1}, + {53,2}, {53,3}, {53,4}, {53,5}, {53,6}, {53,7}, {53,8}, {53,9}, {53,10}, + {53,11}, {53,12}, {53,13}, {53,14}, {53,15}, {53,16}, {53,17}, {53,18}, + {53,19}, {53,20}, {53,21}, {53,22}, {53,23}, {53,24}, {53,25}, {53,26}, + {53,27}, {53,28}, {53,29}, {53,30}, {53,31}, {53,32}, {53,33}, {53,34}, + {53,35}, {53,36}, {53,38}, {53,39}, {53,40}, {53,41}, {53,42}, {53,37}, + {53,43}, {53,44}, {53,45}, {53,46}, {53,47}, {53,48}, {53,49}, {53,50}, + {53,51}, {53,53}, {53,54}, {53,55}, {53,52}, {53,56}, {53,57}, {53,58}, + {53,59}, {53,60}, {53,61}, {53,62}, {53,63}, {53,64}, {53,65}, {53,66}, + {53,67}, {53,68}, {53,69}, {53,70}, {53,71}, {53,72}, {53,73}, {53,74}, + {53,75}, {53,76}, {53,77}, {53,78}, {53,79}, {53,80}, {53,81}, {53,82}, + {53,83}, {53,84}, {53,85}, {53,86}, {53,87}, {53,88}, {53,89}, {53,90}, + {53,91}, {53,92}, {53,93}, {54,0}, {54,1}, {54,2}, {54,3}, {54,4}, + {54,5}, {54,6}, {54,7}, {54,8}, {54,9}, {54,10}, {54,11}, {54,12}, + {54,13}, {54,14}, {54,15}, {54,16}, {54,17}, {54,18}, {54,19}, {54,20}, + {54,21}, {54,22}, {54,23}, {54,24}, {54,25}, {54,26}, {54,27}, {54,28}, + {54,29}, {54,30}, {54,31}, {54,32}, {54,33}, {54,34}, {54,35}, {54,36}, + {54,37}, {54,38}, {54,39}, {54,40}, {54,41}, {54,42}, {54,43}, {54,44}, + {54,45}, {54,46}, {54,47}, {54,48}, {54,49}, {54,50}, {54,51}, {54,52}, + {54,53}, {54,54}, {54,55}, {54,56}, {54,57}, {54,58}, {54,59}, {54,60}, + {54,61}, {54,62}, {54,63}, {54,64}, {54,65}, {54,67}, {54,68}, {54,69}, + {54,70}, {54,71}, {54,72}, {54,73}, {54,74}, {54,75}, {54,76}, {54,77}, + {54,78}, {54,79}, {54,80}, {54,81}, {54,82}, {54,83}, {54,84}, {54,85}, + {54,86}, {54,87}, {54,88}, {55,29}, {54,66}, {54,89}, {54,90}, {54,91}, + {54,92}, {54,93}, {55,0}, {55,1}, {55,2}, {55,3}, {55,4}, {55,5}, {55,6}, + {55,7}, {55,8}, {55,9}, {55,10}, {55,11}, {55,12}, {55,13}, {55,14}, + {55,15}, {55,16}, {55,17}, {55,18}, {55,43}, {55,19}, {55,20}, {55,21}, + {55,22}, {55,23}, {55,24}, {55,25}, {55,26}, {55,27}, {55,28}, {55,30}, + {55,31}, {55,32}, {55,33}, {55,34}, {55,35}, {55,36}, {55,37}, {55,38}, + {55,39}, {55,40}, {55,41}, {55,42}, {55,44}, {55,45}, {55,46}, {55,47}, + {55,48}, {55,49}, {55,50}, {55,51}, {55,52}, {55,53}, {55,54}, {55,55}, + {55,56}, {55,57}, {55,58}, {55,59}, {55,60}, {55,61}, {55,62}, {55,63}, + {55,64}, {55,65}, {55,66}, {55,67}, {55,68}, {55,69}, {55,70}, {55,71}, + {55,72}, {55,73}, {55,74}, {55,75}, {55,76}, {55,77}, {55,78}, {55,79}, + {55,80}, {55,81}, {55,82}, {55,83}, {55,84}, {55,85}, {55,86}, {55,87}, + {55,88}, {55,89}, {55,90}, {55,91}, {55,92}, {55,93}, {56,0}, {56,1}, + {56,2}, {56,3}, {56,4}, {56,5}, {56,6}, {56,7}, {56,9}, {56,10}, {56,11}, + {56,12}, {56,13}, {56,14}, {56,15}, {56,16}, {56,17}, {56,18}, {56,19}, + {56,20}, {56,21}, {56,22}, {56,23}, {56,24}, {56,25}, {56,26}, {56,27}, + {56,8}, {56,28}, {56,29}, {56,30}, {56,31}, {56,32}, {56,33}, {56,34}, + {56,35}, {56,36}, {56,37}, {56,38}, {56,39}, {56,40}, {56,41}, {56,42}, + {56,43}, {56,44}, {56,45}, {56,46}, {56,47}, {56,48}, {56,49}, {56,50}, + {56,51}, {56,52}, {56,53}, {56,54}, {56,55}, {56,56}, {56,57}, {56,58}, + {56,59}, {56,60}, {56,61}, {56,62}, {56,63}, {56,64}, {56,65}, {56,66}, + {56,67}, {56,68}, {56,69}, {56,83}, {56,70}, {56,71}, {56,72}, {56,73}, + {56,74}, {56,75}, {56,76}, {56,77}, {56,78}, {56,79}, {56,80}, {56,81}, + {56,82}, {56,84}, {56,85}, {56,86}, {56,87}, {56,88}, {56,89}, {56,90}, + {56,91}, {56,92}, {56,93}, {57,0}, {57,1}, {57,2}, {57,3}, {57,4}, + {57,5}, {57,6}, {57,7}, {57,8}, {57,9}, {57,10}, {57,11}, {57,12}, + {57,13}, {57,14}, {57,15}, {57,16}, {57,17}, {57,18}, {57,19}, {57,20}, + {57,21}, {23,69}, {57,22}, {57,23}, {57,24}, {57,25}, {57,26}, {57,27}, + {57,28}, {57,29}, {57,30}, {57,31}, {57,32}, {57,33}, {57,34}, {57,35}, + {57,36}, {57,37}, {57,38}, {57,39}, {57,40}, {57,41}, {57,42}, {57,76}, + {57,43}, {57,44}, {57,45}, {57,46}, {57,47}, {57,48}, {57,49}, {57,50}, + {57,51}, {57,52}, {57,53}, {57,54}, {57,55}, {57,56}, {57,57}, {57,58}, + {57,59}, {57,60}, {57,61}, {57,62}, {57,63}, {57,64}, {57,65}, {57,66}, + {57,67}, {57,68}, {57,69}, {57,70}, {57,71}, {57,72}, {57,73}, {57,74}, + {57,75}, {57,77}, {57,78}, {57,79}, {57,80}, {57,81}, {57,82}, {57,83}, + {57,84}, {57,85}, {57,86}, {57,87}, {57,88}, {57,89}, {57,90}, {57,91}, + {57,92}, {57,93}, {58,0}, {58,1}, {58,2}, {58,3}, {58,4}, {58,5}, {58,6}, + {58,7}, {58,8}, {58,9}, {58,10}, {58,11}, {58,12}, {58,13}, {58,14}, + {58,15}, {58,16}, {58,17}, {58,18}, {58,19}, {58,20}, {58,21}, {58,22}, + {58,23}, {58,24}, {58,25}, {58,26}, {58,27}, {58,28}, {58,29}, {58,30}, + {58,31}, {58,32}, {58,33}, {58,34}, {58,35}, {58,36}, {58,37}, {58,38}, + {58,39}, {58,40}, {58,41}, {58,42}, {58,43}, {58,44}, {58,45}, {58,46}, + {58,47}, {58,48}, {58,49}, {58,50}, {58,51}, {58,52}, {58,53}, {58,54}, + {58,55}, {58,56}, {58,57}, {58,58}, {58,59}, {58,60}, {58,61}, {58,62}, + {58,63}, {58,64}, {58,65}, {58,66}, {58,67}, {58,68}, {58,69}, {58,70}, + {58,71}, {58,72}, {58,73}, {58,74}, {58,75}, {58,76}, {58,77}, {58,79}, + {58,80}, {58,81}, {58,82}, {58,78}, {58,83}, {58,84}, {58,85}, {58,86}, + {58,87}, {58,88}, {58,89}, {58,90}, {58,91}, {58,92}, {58,93}, {59,0}, + {59,1}, {59,2}, {59,3}, {59,4}, {59,5}, {59,6}, {59,7}, {59,8}, {59,9}, + {59,10}, {59,11}, {59,12}, {59,13}, {59,14}, {59,15}, {59,16}, {59,17}, + {59,18}, {59,19}, {59,20}, {59,21}, {59,22}, {59,23}, {59,24}, {59,25}, + {59,26}, {59,27}, {59,28}, {59,29}, {59,30}, {59,31}, {59,32}, {59,33}, + {59,34}, {59,35}, {59,36}, {59,37}, {59,38}, {59,39}, {59,40}, {59,41}, + {59,42}, {59,43}, {59,44}, {59,45}, {59,46}, {59,47}, {59,48}, {59,49}, + {59,50}, {59,51}, {59,52}, {59,53}, {59,54}, {59,55}, {59,56}, {59,57}, + {59,58}, {59,59}, {59,60}, {59,61}, {59,62}, {59,63}, {59,64}, {59,65}, + {59,66}, {59,67}, {59,68}, {59,69}, {59,70}, {59,71}, {59,72}, {59,73}, + {59,74}, {59,75}, {59,76}, {59,77}, {59,78}, {59,79}, {59,80}, {59,81}, + {59,82}, {59,83}, {59,84}, {59,85}, {59,86}, {59,87}, {59,88}, {59,89}, + {59,90}, {59,91}, {59,92}, {59,93}, {60,0}, {60,1}, {60,2}, {60,3}, + {60,4}, {60,5}, {60,6}, {60,7}, {60,8}, {60,9}, {60,10}, {60,11}, {60,12}, + {60,13}, {60,14}, {60,15}, {60,16}, {60,17}, {60,18}, {60,19}, {60,20}, + {60,21}, {60,22}, {60,23}, {60,24}, {60,25}, {60,26}, {60,27}, {60,28}, + {60,29}, {60,30}, {60,31}, {60,32}, {60,33}, {60,34}, {60,35}, {60,36}, + {60,37}, {60,38}, {60,39}, {60,40}, {60,41}, {60,42}, {60,43}, {60,44}, + {60,45}, {60,46}, {60,47}, {60,48}, {60,49}, {60,50}, {60,51}, {60,52}, + {60,53}, {60,54}, {60,55}, {60,56}, {60,57}, {60,58}, {60,59}, {60,60}, + {60,61}, {60,62}, {60,63}, {60,64}, {60,65}, {60,66}, {60,67}, {60,68}, + {60,69}, {60,70}, {60,71}, {60,72}, {60,73}, {60,74}, {60,75}, {60,76}, + {60,77}, {60,78}, {60,79}, {60,80}, {60,81}, {60,82}, {60,83}, {60,84}, + {60,85}, {60,86}, {60,87}, {60,88}, {60,89}, {60,90}, {60,91}, {60,92}, + {60,93}, {61,0}, {61,1}, {61,2}, {61,3}, {61,4}, {61,5}, {61,6}, {61,7}, + {61,8}, {61,9}, {61,10}, {61,11}, {61,12}, {61,13}, {61,14}, {61,15}, + {61,16}, {61,17}, {61,18}, {61,19}, {61,20}, {61,21}, {61,22}, {61,23}, + {61,24}, {61,30}, {61,25}, {61,26}, {61,27}, {61,28}, {61,29}, {61,31}, + {61,32}, {61,33}, {61,34}, {61,35}, {61,36}, {61,37}, {61,38}, {61,39}, + {61,40}, {61,45}, {61,41}, {61,42}, {61,43}, {61,44}, {61,46}, {61,47}, + {61,48}, {61,49}, {61,50}, {61,51}, {61,52}, {61,53}, {61,54}, {61,55}, + {61,56}, {61,57}, {61,58}, {61,59}, {61,60}, {61,61}, {61,62}, {61,63}, + {61,64}, {61,65}, {61,66}, {61,67}, {61,68}, {61,69}, {61,70}, {61,71}, + {61,72}, {61,73}, {61,74}, {61,75}, {61,76}, {61,77}, {61,78}, {61,81}, + {61,79}, {61,80}, {61,82}, {61,83}, {61,84}, {61,85}, {61,86}, {61,87}, + {61,88}, {61,89}, {61,90}, {61,91}, {61,92}, {61,93}, {62,0}, {62,1}, + {62,2}, {62,3}, {62,4}, {62,5}, {62,6}, {62,7}, {62,8}, {62,9}, {62,10}, + {62,11}, {62,12}, {62,13}, {62,14}, {62,15}, {62,17}, {62,16}, {62,18}, + {62,19}, {62,20}, {62,21}, {62,22}, {62,23}, {62,24}, {62,25}, {62,26}, + {62,27}, {62,28}, {62,29}, {62,30}, {62,31}, {62,32}, {62,33}, {62,34}, + {62,35}, {62,36}, {62,37}, {62,38}, {62,39}, {62,40}, {62,41}, {62,42}, + {62,43}, {62,44}, {62,45}, {62,46}, {62,47}, {62,48}, {62,49}, {62,50}, + {62,51}, {62,52}, {62,53}, {62,54}, {62,55}, {62,56}, {62,57}, {62,58}, + {62,59}, {62,60}, {62,78}, {62,61}, {62,62}, {62,63}, {62,64}, {62,65}, + {62,66}, {62,67}, {62,68}, {62,69}, {62,70}, {62,71}, {62,72}, {62,73}, + {62,74}, {62,75}, {62,76}, {62,77}, {62,79}, {62,80}, {62,81}, {62,82}, + {62,83}, {62,84}, {62,85}, {62,86}, {62,87}, {62,88}, {62,89}, {62,90}, + {62,91}, {62,92}, {62,93}, {63,0}, {63,1}, {63,2}, {63,3}, {63,4}, + {63,5}, {63,6}, {63,7}, {63,8}, {63,9}, {63,10}, {63,11}, {63,12}, + {63,13}, {63,14}, {63,15}, {63,16}, {63,17}, {63,18}, {63,19}, {63,20}, + {63,21}, {63,22}, {63,23}, {63,24}, {63,25}, {63,26}, {63,27}, {63,28}, + {63,29}, {63,30}, {63,31}, {63,32}, {63,33}, {63,34}, {63,35}, {63,36}, + {63,37}, {63,38}, {63,39}, {63,40}, {63,41}, {63,42}, {63,43}, {63,44}, + {63,45}, {63,46}, {63,47}, {63,48}, {63,49}, {63,50}, {63,51}, {63,52}, + {63,53}, {63,54}, {63,55}, {63,56}, {63,57}, {63,58}, {63,59}, {63,60}, + {63,67}, {63,61}, {63,62}, {63,63}, {63,64}, {63,65}, {63,66}, {63,68}, + {63,69}, {63,70}, {63,71}, {63,72}, {63,73}, {63,74}, {63,75}, {63,76}, + {63,77}, {63,78}, {63,79}, {63,80}, {63,81}, {63,82}, {63,83}, {63,84}, + {63,85}, {63,86}, {63,87}, {63,88}, {63,89}, {63,90}, {63,91}, {63,92}, + {63,93}, {64,0}, {64,1}, {64,2}, {64,3}, {64,4}, {64,5}, {64,6}, {64,7}, + {64,8}, {64,9}, {64,10}, {64,11}, {64,12}, {64,13}, {64,14}, {64,15}, + {64,16}, {64,17}, {64,18}, {64,19}, {64,20}, {64,21}, {64,22}, {64,23}, + {64,24}, {64,25}, {64,26}, {64,27}, {64,28}, {64,29}, {64,30}, {64,31}, + {64,32}, {64,33}, {64,34}, {64,35}, {64,36}, {64,37}, {64,38}, {64,39}, + {64,40}, {64,41}, {64,42}, {64,43}, {64,44}, {64,45}, {64,46}, {64,47}, + {64,48}, {64,49}, {64,51}, {64,52}, {64,53}, {64,50}, {64,54}, {64,55}, + {64,56}, {64,57}, {64,58}, {64,59}, {64,60}, {64,61}, {64,62}, {64,63}, + {64,64}, {64,65}, {64,66}, {64,67}, {64,68}, {64,69}, {64,70}, {64,71}, + {64,72}, {64,73}, {64,74}, {64,75}, {64,76}, {64,77}, {64,78}, {64,79}, + {64,80}, {64,81}, {64,82}, {64,83}, {64,84}, {64,85}, {64,86}, {64,87}, + {64,88}, {64,89}, {64,90}, {64,92}, {64,93}, {65,0}, {65,1}, {65,2}, + {65,3}, {64,91}, {65,12}, {65,4}, {65,5}, {65,6}, {65,7}, {65,8}, {65,9}, + {65,10}, {65,11}, {65,14}, {65,15}, {65,16}, {65,17}, {65,13}, {65,18}, + {65,19}, {65,20}, {65,21}, {65,22}, {65,23}, {65,24}, {65,25}, {65,26}, + {65,27}, {65,28}, {65,29}, {65,30}, {65,31}, {65,32}, {65,33}, {65,34}, + {65,36}, {65,37}, {65,35}, {65,38}, {65,39}, {65,40}, {65,41}, {65,42}, + {65,43}, {65,44}, {65,45}, {65,46}, {65,47}, {65,48}, {65,49}, {65,50}, + {65,51}, {65,52}, {65,53}, {65,54}, {65,55}, {65,56}, {65,57}, {65,58}, + {65,59}, {65,60}, {65,61}, {65,62}, {65,63}, {65,64}, {65,65}, {65,66}, + {65,67}, {65,68}, {65,69}, {65,70}, {65,71}, {65,72}, {65,73}, {65,74}, + {65,75}, {65,76}, {65,77}, {65,78}, {65,79}, {65,80}, {65,81}, {65,82}, + {65,83}, {65,84}, {65,85}, {65,86}, {65,87}, {65,88}, {65,89}, {65,90}, + {65,91}, {65,92}, {65,93}, {66,0}, {66,1}, {66,2}, {66,3}, {66,4}, + {66,5}, {66,6}, {66,7}, {66,8}, {66,9}, {66,10}, {66,11}, {66,12}, + {66,13}, {66,14}, {66,15}, {66,16}, {66,17}, {66,18}, {66,19}, {66,20}, + {66,21}, {66,22}, {66,23}, {66,24}, {66,25}, {66,26}, {66,27}, {66,28}, + {66,29}, {66,30}, {66,31}, {66,32}, {66,33}, {66,34}, {66,35}, {66,36}, + {66,37}, {66,38}, {66,39}, {66,40}, {66,41}, {66,42}, {66,43}, {66,44}, + {66,45}, {66,46}, {66,47}, {66,48}, {66,49}, {66,50}, {66,51}, {66,52}, + {66,53}, {66,54}, {66,55}, {66,56}, {66,57}, {66,58}, {66,59}, {66,60}, + {66,61}, {66,62}, {66,63}, {66,64}, {66,65}, {66,66}, {66,67}, {66,68}, + {66,69}, {66,70}, {66,71}, {66,72}, {66,73}, {66,74}, {66,75}, {66,76}, + {66,77}, {66,78}, {66,79}, {66,80}, {66,81}, {66,82}, {66,83}, {66,84}, + {66,85}, {66,86}, {66,87}, {66,88}, {66,89}, {66,90}, {66,91}, {66,92}, + {66,93}, {67,0}, {67,1}, {67,2}, {67,3}, {67,4}, {67,5}, {67,6}, {67,7}, + {67,8}, {67,9}, {67,10}, {67,11}, {67,12}, {67,13}, {67,14}, {67,15}, + {67,16}, {67,17}, {67,18}, {67,19}, {67,20}, {67,21}, {67,22}, {67,23}, + {67,24}, {67,25}, {67,26}, {67,27}, {67,28}, {67,29}, {67,30}, {67,31}, + {67,32}, {67,33}, {67,34}, {67,35}, {67,36}, {67,37}, {67,38}, {67,39}, + {67,40}, {67,41}, {67,42}, {67,43}, {67,44}, {67,45}, {67,46}, {67,47}, + {67,48}, {67,49}, {67,50}, {67,51}, {67,52}, {67,53}, {67,54}, {67,55}, + {67,56}, {67,57}, {67,58}, {67,59}, {67,60}, {67,61}, {67,62}, {67,63}, + {67,64}, {67,65}, {67,66}, {67,67}, {67,68}, {67,69}, {67,70}, {67,71}, + {67,72}, {67,73}, {67,74}, {67,75}, {67,76}, {67,77}, {67,78}, {67,79}, + {67,80}, {67,81}, {67,82}, {67,83}, {67,84}, {67,85}, {67,86}, {67,87}, + {67,88}, {67,89}, {67,90}, {67,91}, {67,92}, {67,93}, {68,0}, {68,1}, + {68,2}, {68,3}, {68,4}, {68,5}, {68,6}, {68,7}, {68,8}, {68,9}, {68,10}, + {68,11}, {68,12}, {68,13}, {68,14}, {68,15}, {68,16}, {68,17}, {68,18}, + {68,19}, {68,20}, {68,26}, {68,21}, {68,22}, {68,23}, {68,24}, {68,25}, + {68,27}, {68,28}, {68,29}, {68,30}, {68,31}, {68,32}, {68,33}, {68,34}, + {68,35}, {68,36}, {68,37}, {68,38}, {68,39}, {68,40}, {68,41}, {68,42}, + {68,43}, {68,44}, {68,46}, {68,47}, {68,45}, {68,48}, {68,49}, {68,50}, + {68,51}, {68,52}, {68,53}, {68,54}, {68,55}, {68,56}, {68,57}, {68,58}, + {68,59}, {68,60}, {68,61}, {68,62}, {68,63}, {68,64}, {68,65}, {68,66}, + {68,67}, {68,68}, {68,69}, {68,71}, {68,70}, {68,72}, {68,73}, {68,74}, + {68,75}, {68,76}, {68,77}, {68,78}, {68,79}, {68,80}, {68,81}, {68,82}, + {68,83}, {68,84}, {68,85}, {68,86}, {68,87}, {68,88}, {68,89}, {68,91}, + {68,90}, {68,92}, {68,93}, {69,0}, {69,1}, {69,2}, {69,3}, {69,4}, + {69,5}, {69,6}, {69,7}, {69,8}, {69,9}, {69,10}, {69,11}, {69,12}, + {69,13}, {69,14}, {69,15}, {69,16}, {69,17}, {69,18}, {69,19}, {69,20}, + {69,21}, {69,22}, {69,23}, {69,24}, {69,25}, {69,26}, {69,27}, {69,28}, + {69,29}, {69,30}, {69,31}, {69,32}, {69,33}, {69,34}, {69,35}, {69,36}, + {69,37}, {69,38}, {69,39}, {69,40}, {69,41}, {69,42}, {69,43}, {69,44}, + {69,45}, {69,46}, {69,47}, {69,48}, {69,49}, {69,50}, {69,51}, {69,52}, + {69,53}, {69,54}, {69,55}, {69,56}, {69,57}, {69,58}, {69,59}, {69,60}, + {69,61}, {69,62}, {69,63}, {69,64}, {69,65}, {69,66}, {69,67}, {69,68}, + {69,69}, {69,70}, {69,71}, {69,72}, {69,73}, {69,74}, {69,75}, {69,76}, + {69,77}, {69,78}, {69,79}, {69,80}, {69,81}, {69,82}, {69,84}, {69,85}, + {69,86}, {69,87}, {69,88}, {69,89}, {69,90}, {69,91}, {69,92}, {69,93}, + {70,0}, {70,1}, {70,2}, {70,3}, {70,4}, {70,5}, {70,6}, {70,7}, {70,8}, + {70,9}, {70,10}, {70,11}, {70,12}, {70,13}, {70,14}, {70,15}, {70,16}, + {70,17}, {70,18}, {70,19}, {70,20}, {70,21}, {70,22}, {70,23}, {70,24}, + {70,25}, {70,26}, {70,27}, {70,28}, {70,29}, {70,30}, {70,31}, {70,32}, + {70,33}, {70,34}, {70,35}, {70,36}, {70,37}, {70,38}, {70,39}, {70,40}, + {70,41}, {70,42}, {70,43}, {70,44}, {70,45}, {70,46}, {70,47}, {70,48}, + {70,49}, {70,50}, {70,51}, {70,52}, {70,53}, {70,54}, {70,55}, {70,56}, + {70,57}, {70,58}, {70,59}, {70,60}, {70,61}, {70,62}, {70,63}, {70,64}, + {70,65}, {70,66}, {70,67}, {70,68}, {70,69}, {70,73}, {70,70}, {70,71}, + {70,72}, {70,74}, {70,75}, {70,76}, {70,77}, {70,78}, {70,79}, {70,80}, + {70,81}, {70,82}, {70,83}, {70,85}, {70,86}, {70,87}, {70,88}, {70,84}, + {70,89}, {70,90}, {70,91}, {70,92}, {71,7}, {70,93}, {71,0}, {71,1}, + {71,2}, {71,3}, {71,4}, {71,5}, {71,6}, {71,8}, {71,9}, {71,10}, {71,11}, + {71,12}, {71,13}, {71,14}, {71,15}, {71,16}, {71,17}, {71,18}, {71,19}, + {71,20}, {71,21}, {71,22}, {71,23}, {71,24}, {71,25}, {71,26}, {71,27}, + {71,28}, {71,29}, {71,30}, {71,31}, {71,32}, {71,33}, {71,34}, {71,35}, + {71,36}, {71,37}, {71,38}, {71,39}, {71,40}, {71,41}, {71,42}, {71,43}, + {71,44}, {71,45}, {71,46}, {71,47}, {71,48}, {71,49}, {71,50}, {71,51}, + {71,52}, {71,53}, {71,54}, {71,55}, {71,56}, {71,57}, {71,58}, {71,59}, + {71,60}, {71,61}, {71,62}, {71,63}, {71,64}, {71,65}, {71,66}, {71,67}, + {71,68}, {71,69}, {71,70}, {71,71}, {71,72}, {71,73}, {71,74}, {71,75}, + {71,76}, {71,77}, {71,78}, {71,79}, {71,80}, {71,81}, {71,82}, {71,83}, + {71,84}, {71,85}, {71,86}, {71,87}, {71,88}, {71,89}, {71,90}, {71,91}, + {71,92}, {71,93}, {72,0}, {72,1}, {72,2}, {72,3}, {72,4}, {72,5}, {72,6}, + {72,7}, {72,8}, {72,9}, {72,10}, {72,11}, {72,12}, {72,13}, {72,14}, + {72,15}, {72,16}, {72,17}, {72,18}, {72,19}, {72,20}, {72,21}, {72,22}, + {72,23}, {72,24}, {72,25}, {72,26}, {72,27}, {72,28}, {72,29}, {72,30}, + {72,31}, {72,32}, {72,33}, {72,34}, {72,35}, {72,36}, {72,37}, {72,38}, + {72,39}, {72,40}, {72,41}, {72,43}, {72,44}, {72,42}, {72,45}, {72,46}, + {72,47}, {72,48}, {72,49}, {72,50}, {72,51}, {72,52}, {72,53}, {72,54}, + {72,55}, {72,56}, {72,57}, {72,58}, {72,59}, {72,60}, {72,61}, {72,62}, + {72,63}, {72,64}, {72,65}, {72,66}, {72,67}, {72,68}, {72,69}, {72,70}, + {72,71}, {72,72}, {72,73}, {72,74}, {72,75}, {72,76}, {72,77}, {72,78}, + {72,79}, {72,80}, {72,81}, {72,82}, {72,83}, {72,84}, {72,85}, {72,86}, + {72,87}, {72,88}, {72,89}, {72,90}, {72,91}, {72,92}, {72,93}, {73,0}, + {73,1}, {73,2}, {73,3}, {73,4}, {73,5}, {73,6}, {73,7}, {73,8}, {73,9}, + {73,10}, {73,11}, {73,12}, {73,13}, {73,14}, {73,15}, {73,16}, {73,17}, + {73,18}, {73,19}, {73,20}, {73,21}, {73,22}, {73,23}, {73,24}, {73,25}, + {73,26}, {73,27}, {73,28}, {73,29}, {73,30}, {73,31}, {73,32}, {73,33}, + {73,34}, {73,35}, {73,36}, {73,37}, {73,38}, {73,39}, {73,40}, {73,41}, + {73,42}, {73,43}, {73,44}, {73,45}, {73,46}, {73,47}, {73,48}, {73,49}, + {73,50}, {73,51}, {73,52}, {73,53}, {73,54}, {73,55}, {73,56}, {73,57}, + {73,58}, {73,59}, {73,60}, {73,61}, {73,62}, {73,63}, {73,64}, {73,65}, + {73,66}, {73,67}, {73,68}, {73,69}, {73,70}, {73,71}, {73,72}, {73,73}, + {73,74}, {73,75}, {73,76}, {73,77}, {73,78}, {73,79}, {73,80}, {73,81}, + {73,82}, {73,83}, {73,84}, {73,85}, {73,86}, {73,87}, {73,88}, {73,89}, + {73,90}, {73,91}, {73,92}, {73,93}, {74,0}, {74,1}, {74,2}, {74,3}, + {74,4}, {74,5}, {74,6}, {74,7}, {74,8}, {74,9}, {74,10}, {74,11}, {74,12}, + {74,13}, {74,14}, {74,15}, {74,16}, {74,17}, {74,18}, {74,19}, {74,20}, + {74,21}, {74,22}, {74,23}, {74,24}, {74,25}, {74,26}, {74,27}, {74,28}, + {74,29}, {74,30}, {74,31}, {74,32}, {74,33}, {74,34}, {74,35}, {74,36}, + {74,37}, {74,38}, {74,39}, {74,40}, {74,47}, {74,41}, {74,42}, {74,43}, + {74,44}, {74,49}, {74,45}, {74,46}, {74,48}, {74,50}, {74,51}, {74,52}, + {74,53}, {74,54}, {74,55}, {74,56}, {74,57}, {74,58}, {74,59}, {74,61}, + {74,60}, {74,62}, {74,63}, {74,64}, {74,65}, {74,66}, {74,67}, {74,68}, + {74,69}, {74,70}, {74,71}, {74,72}, {74,73}, {74,74}, {74,76}, {74,77}, + {74,78}, {74,75}, {74,79}, {74,80}, {74,81}, {74,82}, {74,83}, {74,85}, + {74,84}, {74,86}, {74,87}, {74,88}, {74,89}, {74,90}, {74,91}, {74,92}, + {74,93}, {75,0}, {75,1}, {75,2}, {75,3}, {75,4}, {75,5}, {75,6}, {75,7}, + {75,8}, {75,9}, {75,10}, {75,11}, {75,12}, {75,13}, {75,14}, {75,15}, + {75,16}, {75,17}, {75,18}, {75,19}, {75,20}, {75,21}, {75,22}, {75,23}, + {75,24}, {75,25}, {75,26}, {75,27}, {75,28}, {75,29}, {75,30}, {75,31}, + {75,32}, {75,33}, {75,34}, {75,35}, {75,36}, {75,37}, {75,38}, {75,39}, + {75,40}, {75,41}, {75,42}, {75,43}, {75,45}, {75,46}, {75,44}, {75,47}, + {75,48}, {75,49}, {75,50}, {75,51}, {75,52}, {75,53}, {75,54}, {75,55}, + {75,56}, {75,57}, {75,58}, {75,59}, {75,60}, {75,61}, {75,62}, {75,63}, + {75,64}, {75,65}, {75,66}, {75,67}, {75,68}, {75,69}, {75,70}, {75,71}, + {75,72}, {75,73}, {75,74}, {75,75}, {75,76}, {75,77}, {75,78}, {75,79}, + {75,80}, {75,81}, {75,82}, {75,83}, {75,84}, {75,85}, {75,86}, {75,87}, + {75,88}, {75,89}, {75,90}, {75,91}, {75,92}, {75,93}, {76,0}, {76,1}, + {76,2}, {76,3}, {76,4}, {76,5}, {76,6}, {76,7}, {76,8}, {76,9}, {76,10}, + {76,11}, {76,12}, {76,13}, {76,14}, {76,15}, {76,16}, {76,17}, {76,18}, + {76,19}, {76,20}, {76,21}, {76,22}, {76,23}, {76,24}, {76,25}, {76,26}, + {76,27}, {76,28}, {76,29}, {76,30}, {76,31}, {76,32}, {76,33}, {76,34}, + {76,35}, {76,36}, {76,37}, {76,38}, {76,39}, {76,40}, {76,41}, {76,42}, + {76,43}, {76,44}, {76,45}, {76,46}, {76,47}, {76,48}, {76,49}, {76,50}, + {76,51}, {76,52}, {76,53}, {76,54}, {76,55}, {76,56}, {76,57}, {76,58}, + {76,59}, {76,60}, {76,61}, {76,62}, {76,63}, {76,64}, {76,65}, {76,66} +}; + +/* This returns ERROR if the code point doesn't exist. */ +long int jisx0212_to_unicode(int r, int c) +{ + assert(r >= 0 && r < 94); + assert(c >= 0 && c < 94); + return jisx0212_forward[r][c]; +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_jisx0212(long int unicode, int *r, int *c) +{ + int rr, cc; + long int uu; + int i, j, k; + + i = -1; + j = lenof(jisx0212_backward); + while (j - i > 1) { + k = (i + j) / 2; + rr = jisx0212_backward[k].r; + cc = jisx0212_backward[k].c; + uu = jisx0212_forward[rr][cc]; + if (unicode > uu) + i = k; + else if (unicode < uu) + j = k; + else { + *r = rr; + *c = cc; + return 1; + } + } + return 0; +} + +#ifdef TESTMODE + +#include <stdio.h> + +int main(void) +{ + int r, c, rr, cc, ret; + long int u, uu; + + for (r = 0; r < 94; r++) { + for (c = 0; c < 94; c++) { + u = jisx0212_to_unicode(r, c); + if (u != ERROR) { + ret = unicode_to_jisx0212(u, &rr, &cc); + if (!ret) + printf("(%d,%d) -> U-%08lx but didn't convert back\n", + r, c, u); + else if (rr != r || cc != c) + printf("(%d,%d) -> U-%08lx -> (%d,%d)\n", + r, c, u, rr, cc); + } + } + } + + for (u = 0; u < 0x10000L; u++) { + ret = unicode_to_jisx0212(u, &r, &c); + if (ret) { + uu = jisx0212_to_unicode(r, c); + if (uu == ERROR) + printf("U-%08lx -> (%d,%d) but didn't convert back\n", + u, r, c); + else if (uu != u) + printf("U-%08lx -> (%d,%d) -> U-%08lx\n", u, r, c, uu); + } + } + + return 0; +} + +#endif diff --git a/app/tools/halibut/charset/ksx1001.c b/app/tools/halibut/charset/ksx1001.c new file mode 100644 index 0000000..3360c26 --- /dev/null +++ b/app/tools/halibut/charset/ksx1001.c @@ -0,0 +1,5261 @@ +/* + * KS X 1001 and MS CP949 implementation for libcharset. + */ + +#include <assert.h> + +#include "charset.h" +#include "internal.h" + +/* + * There is a KS X 1001 <-> Unicode character mapping available at + * http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/KSC/KSX1001.TXT + * + * but in fact the square (A1A1-FEFE) subset of the Microsoft CP949 + * mapping is superior, since it's slightly more up to date + * (contains the Euro sign, for example). So this file actually + * implements a mapping between the double-byte portion of CP949 + * and Unicode, and also provides ksx1001 conversion functions to + * access that square subset. + * + * The file I'm actually working from is at + * http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT + */ + +/* + * Mapping from KS X 1001 to Unicode. For these purposes KS X 1001 + * is considered to be a 128x192 square array, with coordinates + * running from (0,0) to (127,191). + * + * Generated by running the following sh+Perl over CP949.TXT: + +cat CP949.TXT | \ +perl -ne '$a{hex$1,hex$2}=$3 if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {for $r (0..127) { $o=" {"; for $c (0..191) {' \ + -e '$k=$a{$r+128,$c+64}; $k=" ERROR" unless defined $k;' \ + -e '$o .= ", " if $c > 0; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= $k; } print "$o},\n"; }}' + + */ + +static const unsigned short cp949_forward[128][192] = { + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xAC02, 0xAC03, 0xAC05, 0xAC06, 0xAC0B, 0xAC0C, 0xAC0D, 0xAC0E, + 0xAC0F, 0xAC18, 0xAC1E, 0xAC1F, 0xAC21, 0xAC22, 0xAC23, 0xAC25, 0xAC26, + 0xAC27, 0xAC28, 0xAC29, 0xAC2A, 0xAC2B, 0xAC2E, 0xAC32, 0xAC33, 0xAC34, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xAC35, 0xAC36, 0xAC37, + 0xAC3A, 0xAC3B, 0xAC3D, 0xAC3E, 0xAC3F, 0xAC41, 0xAC42, 0xAC43, 0xAC44, + 0xAC45, 0xAC46, 0xAC47, 0xAC48, 0xAC49, 0xAC4A, 0xAC4C, 0xAC4E, 0xAC4F, + 0xAC50, 0xAC51, 0xAC52, 0xAC53, 0xAC55, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xAC56, 0xAC57, 0xAC59, 0xAC5A, 0xAC5B, 0xAC5D, 0xAC5E, + 0xAC5F, 0xAC60, 0xAC61, 0xAC62, 0xAC63, 0xAC64, 0xAC65, 0xAC66, 0xAC67, + 0xAC68, 0xAC69, 0xAC6A, 0xAC6B, 0xAC6C, 0xAC6D, 0xAC6E, 0xAC6F, 0xAC72, + 0xAC73, 0xAC75, 0xAC76, 0xAC79, 0xAC7B, 0xAC7C, 0xAC7D, 0xAC7E, 0xAC7F, + 0xAC82, 0xAC87, 0xAC88, 0xAC8D, 0xAC8E, 0xAC8F, 0xAC91, 0xAC92, 0xAC93, + 0xAC95, 0xAC96, 0xAC97, 0xAC98, 0xAC99, 0xAC9A, 0xAC9B, 0xAC9E, 0xACA2, + 0xACA3, 0xACA4, 0xACA5, 0xACA6, 0xACA7, 0xACAB, 0xACAD, 0xACAE, 0xACB1, + 0xACB2, 0xACB3, 0xACB4, 0xACB5, 0xACB6, 0xACB7, 0xACBA, 0xACBE, 0xACBF, + 0xACC0, 0xACC2, 0xACC3, 0xACC5, 0xACC6, 0xACC7, 0xACC9, 0xACCA, 0xACCB, + 0xACCD, 0xACCE, 0xACCF, 0xACD0, 0xACD1, 0xACD2, 0xACD3, 0xACD4, 0xACD6, + 0xACD8, 0xACD9, 0xACDA, 0xACDB, 0xACDC, 0xACDD, 0xACDE, 0xACDF, 0xACE2, + 0xACE3, 0xACE5, 0xACE6, 0xACE9, 0xACEB, 0xACED, 0xACEE, 0xACF2, 0xACF4, + 0xACF7, 0xACF8, 0xACF9, 0xACFA, 0xACFB, 0xACFE, 0xACFF, 0xAD01, 0xAD02, + 0xAD03, 0xAD05, 0xAD07, 0xAD08, 0xAD09, 0xAD0A, 0xAD0B, 0xAD0E, 0xAD10, + 0xAD12, 0xAD13, ERROR}, + { ERROR, 0xAD14, 0xAD15, 0xAD16, 0xAD17, 0xAD19, 0xAD1A, 0xAD1B, 0xAD1D, + 0xAD1E, 0xAD1F, 0xAD21, 0xAD22, 0xAD23, 0xAD24, 0xAD25, 0xAD26, 0xAD27, + 0xAD28, 0xAD2A, 0xAD2B, 0xAD2E, 0xAD2F, 0xAD30, 0xAD31, 0xAD32, 0xAD33, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xAD36, 0xAD37, 0xAD39, + 0xAD3A, 0xAD3B, 0xAD3D, 0xAD3E, 0xAD3F, 0xAD40, 0xAD41, 0xAD42, 0xAD43, + 0xAD46, 0xAD48, 0xAD4A, 0xAD4B, 0xAD4C, 0xAD4D, 0xAD4E, 0xAD4F, 0xAD51, + 0xAD52, 0xAD53, 0xAD55, 0xAD56, 0xAD57, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xAD59, 0xAD5A, 0xAD5B, 0xAD5C, 0xAD5D, 0xAD5E, 0xAD5F, + 0xAD60, 0xAD62, 0xAD64, 0xAD65, 0xAD66, 0xAD67, 0xAD68, 0xAD69, 0xAD6A, + 0xAD6B, 0xAD6E, 0xAD6F, 0xAD71, 0xAD72, 0xAD77, 0xAD78, 0xAD79, 0xAD7A, + 0xAD7E, 0xAD80, 0xAD83, 0xAD84, 0xAD85, 0xAD86, 0xAD87, 0xAD8A, 0xAD8B, + 0xAD8D, 0xAD8E, 0xAD8F, 0xAD91, 0xAD92, 0xAD93, 0xAD94, 0xAD95, 0xAD96, + 0xAD97, 0xAD98, 0xAD99, 0xAD9A, 0xAD9B, 0xAD9E, 0xAD9F, 0xADA0, 0xADA1, + 0xADA2, 0xADA3, 0xADA5, 0xADA6, 0xADA7, 0xADA8, 0xADA9, 0xADAA, 0xADAB, + 0xADAC, 0xADAD, 0xADAE, 0xADAF, 0xADB0, 0xADB1, 0xADB2, 0xADB3, 0xADB4, + 0xADB5, 0xADB6, 0xADB8, 0xADB9, 0xADBA, 0xADBB, 0xADBC, 0xADBD, 0xADBE, + 0xADBF, 0xADC2, 0xADC3, 0xADC5, 0xADC6, 0xADC7, 0xADC9, 0xADCA, 0xADCB, + 0xADCC, 0xADCD, 0xADCE, 0xADCF, 0xADD2, 0xADD4, 0xADD5, 0xADD6, 0xADD7, + 0xADD8, 0xADD9, 0xADDA, 0xADDB, 0xADDD, 0xADDE, 0xADDF, 0xADE1, 0xADE2, + 0xADE3, 0xADE5, 0xADE6, 0xADE7, 0xADE8, 0xADE9, 0xADEA, 0xADEB, 0xADEC, + 0xADED, 0xADEE, 0xADEF, 0xADF0, 0xADF1, 0xADF2, 0xADF3, 0xADF4, 0xADF5, + 0xADF6, 0xADF7, ERROR}, + { ERROR, 0xADFA, 0xADFB, 0xADFD, 0xADFE, 0xAE02, 0xAE03, 0xAE04, 0xAE05, + 0xAE06, 0xAE07, 0xAE0A, 0xAE0C, 0xAE0E, 0xAE0F, 0xAE10, 0xAE11, 0xAE12, + 0xAE13, 0xAE15, 0xAE16, 0xAE17, 0xAE18, 0xAE19, 0xAE1A, 0xAE1B, 0xAE1C, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xAE1D, 0xAE1E, 0xAE1F, + 0xAE20, 0xAE21, 0xAE22, 0xAE23, 0xAE24, 0xAE25, 0xAE26, 0xAE27, 0xAE28, + 0xAE29, 0xAE2A, 0xAE2B, 0xAE2C, 0xAE2D, 0xAE2E, 0xAE2F, 0xAE32, 0xAE33, + 0xAE35, 0xAE36, 0xAE39, 0xAE3B, 0xAE3C, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xAE3D, 0xAE3E, 0xAE3F, 0xAE42, 0xAE44, 0xAE47, 0xAE48, + 0xAE49, 0xAE4B, 0xAE4F, 0xAE51, 0xAE52, 0xAE53, 0xAE55, 0xAE57, 0xAE58, + 0xAE59, 0xAE5A, 0xAE5B, 0xAE5E, 0xAE62, 0xAE63, 0xAE64, 0xAE66, 0xAE67, + 0xAE6A, 0xAE6B, 0xAE6D, 0xAE6E, 0xAE6F, 0xAE71, 0xAE72, 0xAE73, 0xAE74, + 0xAE75, 0xAE76, 0xAE77, 0xAE7A, 0xAE7E, 0xAE7F, 0xAE80, 0xAE81, 0xAE82, + 0xAE83, 0xAE86, 0xAE87, 0xAE88, 0xAE89, 0xAE8A, 0xAE8B, 0xAE8D, 0xAE8E, + 0xAE8F, 0xAE90, 0xAE91, 0xAE92, 0xAE93, 0xAE94, 0xAE95, 0xAE96, 0xAE97, + 0xAE98, 0xAE99, 0xAE9A, 0xAE9B, 0xAE9C, 0xAE9D, 0xAE9E, 0xAE9F, 0xAEA0, + 0xAEA1, 0xAEA2, 0xAEA3, 0xAEA4, 0xAEA5, 0xAEA6, 0xAEA7, 0xAEA8, 0xAEA9, + 0xAEAA, 0xAEAB, 0xAEAC, 0xAEAD, 0xAEAE, 0xAEAF, 0xAEB0, 0xAEB1, 0xAEB2, + 0xAEB3, 0xAEB4, 0xAEB5, 0xAEB6, 0xAEB7, 0xAEB8, 0xAEB9, 0xAEBA, 0xAEBB, + 0xAEBF, 0xAEC1, 0xAEC2, 0xAEC3, 0xAEC5, 0xAEC6, 0xAEC7, 0xAEC8, 0xAEC9, + 0xAECA, 0xAECB, 0xAECE, 0xAED2, 0xAED3, 0xAED4, 0xAED5, 0xAED6, 0xAED7, + 0xAEDA, 0xAEDB, 0xAEDD, 0xAEDE, 0xAEDF, 0xAEE0, 0xAEE1, 0xAEE2, 0xAEE3, + 0xAEE4, 0xAEE5, ERROR}, + { ERROR, 0xAEE6, 0xAEE7, 0xAEE9, 0xAEEA, 0xAEEC, 0xAEEE, 0xAEEF, 0xAEF0, + 0xAEF1, 0xAEF2, 0xAEF3, 0xAEF5, 0xAEF6, 0xAEF7, 0xAEF9, 0xAEFA, 0xAEFB, + 0xAEFD, 0xAEFE, 0xAEFF, 0xAF00, 0xAF01, 0xAF02, 0xAF03, 0xAF04, 0xAF05, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xAF06, 0xAF09, 0xAF0A, + 0xAF0B, 0xAF0C, 0xAF0E, 0xAF0F, 0xAF11, 0xAF12, 0xAF13, 0xAF14, 0xAF15, + 0xAF16, 0xAF17, 0xAF18, 0xAF19, 0xAF1A, 0xAF1B, 0xAF1C, 0xAF1D, 0xAF1E, + 0xAF1F, 0xAF20, 0xAF21, 0xAF22, 0xAF23, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xAF24, 0xAF25, 0xAF26, 0xAF27, 0xAF28, 0xAF29, 0xAF2A, + 0xAF2B, 0xAF2E, 0xAF2F, 0xAF31, 0xAF33, 0xAF35, 0xAF36, 0xAF37, 0xAF38, + 0xAF39, 0xAF3A, 0xAF3B, 0xAF3E, 0xAF40, 0xAF44, 0xAF45, 0xAF46, 0xAF47, + 0xAF4A, 0xAF4B, 0xAF4C, 0xAF4D, 0xAF4E, 0xAF4F, 0xAF51, 0xAF52, 0xAF53, + 0xAF54, 0xAF55, 0xAF56, 0xAF57, 0xAF58, 0xAF59, 0xAF5A, 0xAF5B, 0xAF5E, + 0xAF5F, 0xAF60, 0xAF61, 0xAF62, 0xAF63, 0xAF66, 0xAF67, 0xAF68, 0xAF69, + 0xAF6A, 0xAF6B, 0xAF6C, 0xAF6D, 0xAF6E, 0xAF6F, 0xAF70, 0xAF71, 0xAF72, + 0xAF73, 0xAF74, 0xAF75, 0xAF76, 0xAF77, 0xAF78, 0xAF7A, 0xAF7B, 0xAF7C, + 0xAF7D, 0xAF7E, 0xAF7F, 0xAF81, 0xAF82, 0xAF83, 0xAF85, 0xAF86, 0xAF87, + 0xAF89, 0xAF8A, 0xAF8B, 0xAF8C, 0xAF8D, 0xAF8E, 0xAF8F, 0xAF92, 0xAF93, + 0xAF94, 0xAF96, 0xAF97, 0xAF98, 0xAF99, 0xAF9A, 0xAF9B, 0xAF9D, 0xAF9E, + 0xAF9F, 0xAFA0, 0xAFA1, 0xAFA2, 0xAFA3, 0xAFA4, 0xAFA5, 0xAFA6, 0xAFA7, + 0xAFA8, 0xAFA9, 0xAFAA, 0xAFAB, 0xAFAC, 0xAFAD, 0xAFAE, 0xAFAF, 0xAFB0, + 0xAFB1, 0xAFB2, 0xAFB3, 0xAFB4, 0xAFB5, 0xAFB6, 0xAFB7, 0xAFBA, 0xAFBB, + 0xAFBD, 0xAFBE, ERROR}, + { ERROR, 0xAFBF, 0xAFC1, 0xAFC2, 0xAFC3, 0xAFC4, 0xAFC5, 0xAFC6, 0xAFCA, + 0xAFCC, 0xAFCF, 0xAFD0, 0xAFD1, 0xAFD2, 0xAFD3, 0xAFD5, 0xAFD6, 0xAFD7, + 0xAFD8, 0xAFD9, 0xAFDA, 0xAFDB, 0xAFDD, 0xAFDE, 0xAFDF, 0xAFE0, 0xAFE1, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xAFE2, 0xAFE3, 0xAFE4, + 0xAFE5, 0xAFE6, 0xAFE7, 0xAFEA, 0xAFEB, 0xAFEC, 0xAFED, 0xAFEE, 0xAFEF, + 0xAFF2, 0xAFF3, 0xAFF5, 0xAFF6, 0xAFF7, 0xAFF9, 0xAFFA, 0xAFFB, 0xAFFC, + 0xAFFD, 0xAFFE, 0xAFFF, 0xB002, 0xB003, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB005, 0xB006, 0xB007, 0xB008, 0xB009, 0xB00A, 0xB00B, + 0xB00D, 0xB00E, 0xB00F, 0xB011, 0xB012, 0xB013, 0xB015, 0xB016, 0xB017, + 0xB018, 0xB019, 0xB01A, 0xB01B, 0xB01E, 0xB01F, 0xB020, 0xB021, 0xB022, + 0xB023, 0xB024, 0xB025, 0xB026, 0xB027, 0xB029, 0xB02A, 0xB02B, 0xB02C, + 0xB02D, 0xB02E, 0xB02F, 0xB030, 0xB031, 0xB032, 0xB033, 0xB034, 0xB035, + 0xB036, 0xB037, 0xB038, 0xB039, 0xB03A, 0xB03B, 0xB03C, 0xB03D, 0xB03E, + 0xB03F, 0xB040, 0xB041, 0xB042, 0xB043, 0xB046, 0xB047, 0xB049, 0xB04B, + 0xB04D, 0xB04F, 0xB050, 0xB051, 0xB052, 0xB056, 0xB058, 0xB05A, 0xB05B, + 0xB05C, 0xB05E, 0xB05F, 0xB060, 0xB061, 0xB062, 0xB063, 0xB064, 0xB065, + 0xB066, 0xB067, 0xB068, 0xB069, 0xB06A, 0xB06B, 0xB06C, 0xB06D, 0xB06E, + 0xB06F, 0xB070, 0xB071, 0xB072, 0xB073, 0xB074, 0xB075, 0xB076, 0xB077, + 0xB078, 0xB079, 0xB07A, 0xB07B, 0xB07E, 0xB07F, 0xB081, 0xB082, 0xB083, + 0xB085, 0xB086, 0xB087, 0xB088, 0xB089, 0xB08A, 0xB08B, 0xB08E, 0xB090, + 0xB092, 0xB093, 0xB094, 0xB095, 0xB096, 0xB097, 0xB09B, 0xB09D, 0xB09E, + 0xB0A3, 0xB0A4, ERROR}, + { ERROR, 0xB0A5, 0xB0A6, 0xB0A7, 0xB0AA, 0xB0B0, 0xB0B2, 0xB0B6, 0xB0B7, + 0xB0B9, 0xB0BA, 0xB0BB, 0xB0BD, 0xB0BE, 0xB0BF, 0xB0C0, 0xB0C1, 0xB0C2, + 0xB0C3, 0xB0C6, 0xB0CA, 0xB0CB, 0xB0CC, 0xB0CD, 0xB0CE, 0xB0CF, 0xB0D2, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB0D3, 0xB0D5, 0xB0D6, + 0xB0D7, 0xB0D9, 0xB0DA, 0xB0DB, 0xB0DC, 0xB0DD, 0xB0DE, 0xB0DF, 0xB0E1, + 0xB0E2, 0xB0E3, 0xB0E4, 0xB0E6, 0xB0E7, 0xB0E8, 0xB0E9, 0xB0EA, 0xB0EB, + 0xB0EC, 0xB0ED, 0xB0EE, 0xB0EF, 0xB0F0, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB0F1, 0xB0F2, 0xB0F3, 0xB0F4, 0xB0F5, 0xB0F6, 0xB0F7, + 0xB0F8, 0xB0F9, 0xB0FA, 0xB0FB, 0xB0FC, 0xB0FD, 0xB0FE, 0xB0FF, 0xB100, + 0xB101, 0xB102, 0xB103, 0xB104, 0xB105, 0xB106, 0xB107, 0xB10A, 0xB10D, + 0xB10E, 0xB10F, 0xB111, 0xB114, 0xB115, 0xB116, 0xB117, 0xB11A, 0xB11E, + 0xB11F, 0xB120, 0xB121, 0xB122, 0xB126, 0xB127, 0xB129, 0xB12A, 0xB12B, + 0xB12D, 0xB12E, 0xB12F, 0xB130, 0xB131, 0xB132, 0xB133, 0xB136, 0xB13A, + 0xB13B, 0xB13C, 0xB13D, 0xB13E, 0xB13F, 0xB142, 0xB143, 0xB145, 0xB146, + 0xB147, 0xB149, 0xB14A, 0xB14B, 0xB14C, 0xB14D, 0xB14E, 0xB14F, 0xB152, + 0xB153, 0xB156, 0xB157, 0xB159, 0xB15A, 0xB15B, 0xB15D, 0xB15E, 0xB15F, + 0xB161, 0xB162, 0xB163, 0xB164, 0xB165, 0xB166, 0xB167, 0xB168, 0xB169, + 0xB16A, 0xB16B, 0xB16C, 0xB16D, 0xB16E, 0xB16F, 0xB170, 0xB171, 0xB172, + 0xB173, 0xB174, 0xB175, 0xB176, 0xB177, 0xB17A, 0xB17B, 0xB17D, 0xB17E, + 0xB17F, 0xB181, 0xB183, 0xB184, 0xB185, 0xB186, 0xB187, 0xB18A, 0xB18C, + 0xB18E, 0xB18F, 0xB190, 0xB191, 0xB195, 0xB196, 0xB197, 0xB199, 0xB19A, + 0xB19B, 0xB19D, ERROR}, + { ERROR, 0xB19E, 0xB19F, 0xB1A0, 0xB1A1, 0xB1A2, 0xB1A3, 0xB1A4, 0xB1A5, + 0xB1A6, 0xB1A7, 0xB1A9, 0xB1AA, 0xB1AB, 0xB1AC, 0xB1AD, 0xB1AE, 0xB1AF, + 0xB1B0, 0xB1B1, 0xB1B2, 0xB1B3, 0xB1B4, 0xB1B5, 0xB1B6, 0xB1B7, 0xB1B8, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB1B9, 0xB1BA, 0xB1BB, + 0xB1BC, 0xB1BD, 0xB1BE, 0xB1BF, 0xB1C0, 0xB1C1, 0xB1C2, 0xB1C3, 0xB1C4, + 0xB1C5, 0xB1C6, 0xB1C7, 0xB1C8, 0xB1C9, 0xB1CA, 0xB1CB, 0xB1CD, 0xB1CE, + 0xB1CF, 0xB1D1, 0xB1D2, 0xB1D3, 0xB1D5, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB1D6, 0xB1D7, 0xB1D8, 0xB1D9, 0xB1DA, 0xB1DB, 0xB1DE, + 0xB1E0, 0xB1E1, 0xB1E2, 0xB1E3, 0xB1E4, 0xB1E5, 0xB1E6, 0xB1E7, 0xB1EA, + 0xB1EB, 0xB1ED, 0xB1EE, 0xB1EF, 0xB1F1, 0xB1F2, 0xB1F3, 0xB1F4, 0xB1F5, + 0xB1F6, 0xB1F7, 0xB1F8, 0xB1FA, 0xB1FC, 0xB1FE, 0xB1FF, 0xB200, 0xB201, + 0xB202, 0xB203, 0xB206, 0xB207, 0xB209, 0xB20A, 0xB20D, 0xB20E, 0xB20F, + 0xB210, 0xB211, 0xB212, 0xB213, 0xB216, 0xB218, 0xB21A, 0xB21B, 0xB21C, + 0xB21D, 0xB21E, 0xB21F, 0xB221, 0xB222, 0xB223, 0xB224, 0xB225, 0xB226, + 0xB227, 0xB228, 0xB229, 0xB22A, 0xB22B, 0xB22C, 0xB22D, 0xB22E, 0xB22F, + 0xB230, 0xB231, 0xB232, 0xB233, 0xB235, 0xB236, 0xB237, 0xB238, 0xB239, + 0xB23A, 0xB23B, 0xB23D, 0xB23E, 0xB23F, 0xB240, 0xB241, 0xB242, 0xB243, + 0xB244, 0xB245, 0xB246, 0xB247, 0xB248, 0xB249, 0xB24A, 0xB24B, 0xB24C, + 0xB24D, 0xB24E, 0xB24F, 0xB250, 0xB251, 0xB252, 0xB253, 0xB254, 0xB255, + 0xB256, 0xB257, 0xB259, 0xB25A, 0xB25B, 0xB25D, 0xB25E, 0xB25F, 0xB261, + 0xB262, 0xB263, 0xB264, 0xB265, 0xB266, 0xB267, 0xB26A, 0xB26B, 0xB26C, + 0xB26D, 0xB26E, ERROR}, + { ERROR, 0xB26F, 0xB270, 0xB271, 0xB272, 0xB273, 0xB276, 0xB277, 0xB278, + 0xB279, 0xB27A, 0xB27B, 0xB27D, 0xB27E, 0xB27F, 0xB280, 0xB281, 0xB282, + 0xB283, 0xB286, 0xB287, 0xB288, 0xB28A, 0xB28B, 0xB28C, 0xB28D, 0xB28E, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB28F, 0xB292, 0xB293, + 0xB295, 0xB296, 0xB297, 0xB29B, 0xB29C, 0xB29D, 0xB29E, 0xB29F, 0xB2A2, + 0xB2A4, 0xB2A7, 0xB2A8, 0xB2A9, 0xB2AB, 0xB2AD, 0xB2AE, 0xB2AF, 0xB2B1, + 0xB2B2, 0xB2B3, 0xB2B5, 0xB2B6, 0xB2B7, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB2B8, 0xB2B9, 0xB2BA, 0xB2BB, 0xB2BC, 0xB2BD, 0xB2BE, + 0xB2BF, 0xB2C0, 0xB2C1, 0xB2C2, 0xB2C3, 0xB2C4, 0xB2C5, 0xB2C6, 0xB2C7, + 0xB2CA, 0xB2CB, 0xB2CD, 0xB2CE, 0xB2CF, 0xB2D1, 0xB2D3, 0xB2D4, 0xB2D5, + 0xB2D6, 0xB2D7, 0xB2DA, 0xB2DC, 0xB2DE, 0xB2DF, 0xB2E0, 0xB2E1, 0xB2E3, + 0xB2E7, 0xB2E9, 0xB2EA, 0xB2F0, 0xB2F1, 0xB2F2, 0xB2F6, 0xB2FC, 0xB2FD, + 0xB2FE, 0xB302, 0xB303, 0xB305, 0xB306, 0xB307, 0xB309, 0xB30A, 0xB30B, + 0xB30C, 0xB30D, 0xB30E, 0xB30F, 0xB312, 0xB316, 0xB317, 0xB318, 0xB319, + 0xB31A, 0xB31B, 0xB31D, 0xB31E, 0xB31F, 0xB320, 0xB321, 0xB322, 0xB323, + 0xB324, 0xB325, 0xB326, 0xB327, 0xB328, 0xB329, 0xB32A, 0xB32B, 0xB32C, + 0xB32D, 0xB32E, 0xB32F, 0xB330, 0xB331, 0xB332, 0xB333, 0xB334, 0xB335, + 0xB336, 0xB337, 0xB338, 0xB339, 0xB33A, 0xB33B, 0xB33C, 0xB33D, 0xB33E, + 0xB33F, 0xB340, 0xB341, 0xB342, 0xB343, 0xB344, 0xB345, 0xB346, 0xB347, + 0xB348, 0xB349, 0xB34A, 0xB34B, 0xB34C, 0xB34D, 0xB34E, 0xB34F, 0xB350, + 0xB351, 0xB352, 0xB353, 0xB357, 0xB359, 0xB35A, 0xB35D, 0xB360, 0xB361, + 0xB362, 0xB363, ERROR}, + { ERROR, 0xB366, 0xB368, 0xB36A, 0xB36C, 0xB36D, 0xB36F, 0xB372, 0xB373, + 0xB375, 0xB376, 0xB377, 0xB379, 0xB37A, 0xB37B, 0xB37C, 0xB37D, 0xB37E, + 0xB37F, 0xB382, 0xB386, 0xB387, 0xB388, 0xB389, 0xB38A, 0xB38B, 0xB38D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB38E, 0xB38F, 0xB391, + 0xB392, 0xB393, 0xB395, 0xB396, 0xB397, 0xB398, 0xB399, 0xB39A, 0xB39B, + 0xB39C, 0xB39D, 0xB39E, 0xB39F, 0xB3A2, 0xB3A3, 0xB3A4, 0xB3A5, 0xB3A6, + 0xB3A7, 0xB3A9, 0xB3AA, 0xB3AB, 0xB3AD, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB3AE, 0xB3AF, 0xB3B0, 0xB3B1, 0xB3B2, 0xB3B3, 0xB3B4, + 0xB3B5, 0xB3B6, 0xB3B7, 0xB3B8, 0xB3B9, 0xB3BA, 0xB3BB, 0xB3BC, 0xB3BD, + 0xB3BE, 0xB3BF, 0xB3C0, 0xB3C1, 0xB3C2, 0xB3C3, 0xB3C6, 0xB3C7, 0xB3C9, + 0xB3CA, 0xB3CD, 0xB3CF, 0xB3D1, 0xB3D2, 0xB3D3, 0xB3D6, 0xB3D8, 0xB3DA, + 0xB3DC, 0xB3DE, 0xB3DF, 0xB3E1, 0xB3E2, 0xB3E3, 0xB3E5, 0xB3E6, 0xB3E7, + 0xB3E9, 0xB3EA, 0xB3EB, 0xB3EC, 0xB3ED, 0xB3EE, 0xB3EF, 0xB3F0, 0xB3F1, + 0xB3F2, 0xB3F3, 0xB3F4, 0xB3F5, 0xB3F6, 0xB3F7, 0xB3F8, 0xB3F9, 0xB3FA, + 0xB3FB, 0xB3FD, 0xB3FE, 0xB3FF, 0xB400, 0xB401, 0xB402, 0xB403, 0xB404, + 0xB405, 0xB406, 0xB407, 0xB408, 0xB409, 0xB40A, 0xB40B, 0xB40C, 0xB40D, + 0xB40E, 0xB40F, 0xB411, 0xB412, 0xB413, 0xB414, 0xB415, 0xB416, 0xB417, + 0xB419, 0xB41A, 0xB41B, 0xB41D, 0xB41E, 0xB41F, 0xB421, 0xB422, 0xB423, + 0xB424, 0xB425, 0xB426, 0xB427, 0xB42A, 0xB42C, 0xB42D, 0xB42E, 0xB42F, + 0xB430, 0xB431, 0xB432, 0xB433, 0xB435, 0xB436, 0xB437, 0xB438, 0xB439, + 0xB43A, 0xB43B, 0xB43C, 0xB43D, 0xB43E, 0xB43F, 0xB440, 0xB441, 0xB442, + 0xB443, 0xB444, ERROR}, + { ERROR, 0xB445, 0xB446, 0xB447, 0xB448, 0xB449, 0xB44A, 0xB44B, 0xB44C, + 0xB44D, 0xB44E, 0xB44F, 0xB452, 0xB453, 0xB455, 0xB456, 0xB457, 0xB459, + 0xB45A, 0xB45B, 0xB45C, 0xB45D, 0xB45E, 0xB45F, 0xB462, 0xB464, 0xB466, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB467, 0xB468, 0xB469, + 0xB46A, 0xB46B, 0xB46D, 0xB46E, 0xB46F, 0xB470, 0xB471, 0xB472, 0xB473, + 0xB474, 0xB475, 0xB476, 0xB477, 0xB478, 0xB479, 0xB47A, 0xB47B, 0xB47C, + 0xB47D, 0xB47E, 0xB47F, 0xB481, 0xB482, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB483, 0xB484, 0xB485, 0xB486, 0xB487, 0xB489, 0xB48A, + 0xB48B, 0xB48C, 0xB48D, 0xB48E, 0xB48F, 0xB490, 0xB491, 0xB492, 0xB493, + 0xB494, 0xB495, 0xB496, 0xB497, 0xB498, 0xB499, 0xB49A, 0xB49B, 0xB49C, + 0xB49E, 0xB49F, 0xB4A0, 0xB4A1, 0xB4A2, 0xB4A3, 0xB4A5, 0xB4A6, 0xB4A7, + 0xB4A9, 0xB4AA, 0xB4AB, 0xB4AD, 0xB4AE, 0xB4AF, 0xB4B0, 0xB4B1, 0xB4B2, + 0xB4B3, 0xB4B4, 0xB4B6, 0xB4B8, 0xB4BA, 0xB4BB, 0xB4BC, 0xB4BD, 0xB4BE, + 0xB4BF, 0xB4C1, 0xB4C2, 0xB4C3, 0xB4C5, 0xB4C6, 0xB4C7, 0xB4C9, 0xB4CA, + 0xB4CB, 0xB4CC, 0xB4CD, 0xB4CE, 0xB4CF, 0xB4D1, 0xB4D2, 0xB4D3, 0xB4D4, + 0xB4D6, 0xB4D7, 0xB4D8, 0xB4D9, 0xB4DA, 0xB4DB, 0xB4DE, 0xB4DF, 0xB4E1, + 0xB4E2, 0xB4E5, 0xB4E7, 0xB4E8, 0xB4E9, 0xB4EA, 0xB4EB, 0xB4EE, 0xB4F0, + 0xB4F2, 0xB4F3, 0xB4F4, 0xB4F5, 0xB4F6, 0xB4F7, 0xB4F9, 0xB4FA, 0xB4FB, + 0xB4FC, 0xB4FD, 0xB4FE, 0xB4FF, 0xB500, 0xB501, 0xB502, 0xB503, 0xB504, + 0xB505, 0xB506, 0xB507, 0xB508, 0xB509, 0xB50A, 0xB50B, 0xB50C, 0xB50D, + 0xB50E, 0xB50F, 0xB510, 0xB511, 0xB512, 0xB513, 0xB516, 0xB517, 0xB519, + 0xB51A, 0xB51D, ERROR}, + { ERROR, 0xB51E, 0xB51F, 0xB520, 0xB521, 0xB522, 0xB523, 0xB526, 0xB52B, + 0xB52C, 0xB52D, 0xB52E, 0xB52F, 0xB532, 0xB533, 0xB535, 0xB536, 0xB537, + 0xB539, 0xB53A, 0xB53B, 0xB53C, 0xB53D, 0xB53E, 0xB53F, 0xB542, 0xB546, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB547, 0xB548, 0xB549, + 0xB54A, 0xB54E, 0xB54F, 0xB551, 0xB552, 0xB553, 0xB555, 0xB556, 0xB557, + 0xB558, 0xB559, 0xB55A, 0xB55B, 0xB55E, 0xB562, 0xB563, 0xB564, 0xB565, + 0xB566, 0xB567, 0xB568, 0xB569, 0xB56A, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB56B, 0xB56C, 0xB56D, 0xB56E, 0xB56F, 0xB570, 0xB571, + 0xB572, 0xB573, 0xB574, 0xB575, 0xB576, 0xB577, 0xB578, 0xB579, 0xB57A, + 0xB57B, 0xB57C, 0xB57D, 0xB57E, 0xB57F, 0xB580, 0xB581, 0xB582, 0xB583, + 0xB584, 0xB585, 0xB586, 0xB587, 0xB588, 0xB589, 0xB58A, 0xB58B, 0xB58C, + 0xB58D, 0xB58E, 0xB58F, 0xB590, 0xB591, 0xB592, 0xB593, 0xB594, 0xB595, + 0xB596, 0xB597, 0xB598, 0xB599, 0xB59A, 0xB59B, 0xB59C, 0xB59D, 0xB59E, + 0xB59F, 0xB5A2, 0xB5A3, 0xB5A5, 0xB5A6, 0xB5A7, 0xB5A9, 0xB5AC, 0xB5AD, + 0xB5AE, 0xB5AF, 0xB5B2, 0xB5B6, 0xB5B7, 0xB5B8, 0xB5B9, 0xB5BA, 0xB5BE, + 0xB5BF, 0xB5C1, 0xB5C2, 0xB5C3, 0xB5C5, 0xB5C6, 0xB5C7, 0xB5C8, 0xB5C9, + 0xB5CA, 0xB5CB, 0xB5CE, 0xB5D2, 0xB5D3, 0xB5D4, 0xB5D5, 0xB5D6, 0xB5D7, + 0xB5D9, 0xB5DA, 0xB5DB, 0xB5DC, 0xB5DD, 0xB5DE, 0xB5DF, 0xB5E0, 0xB5E1, + 0xB5E2, 0xB5E3, 0xB5E4, 0xB5E5, 0xB5E6, 0xB5E7, 0xB5E8, 0xB5E9, 0xB5EA, + 0xB5EB, 0xB5ED, 0xB5EE, 0xB5EF, 0xB5F0, 0xB5F1, 0xB5F2, 0xB5F3, 0xB5F4, + 0xB5F5, 0xB5F6, 0xB5F7, 0xB5F8, 0xB5F9, 0xB5FA, 0xB5FB, 0xB5FC, 0xB5FD, + 0xB5FE, 0xB5FF, ERROR}, + { ERROR, 0xB600, 0xB601, 0xB602, 0xB603, 0xB604, 0xB605, 0xB606, 0xB607, + 0xB608, 0xB609, 0xB60A, 0xB60B, 0xB60C, 0xB60D, 0xB60E, 0xB60F, 0xB612, + 0xB613, 0xB615, 0xB616, 0xB617, 0xB619, 0xB61A, 0xB61B, 0xB61C, 0xB61D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB61E, 0xB61F, 0xB620, + 0xB621, 0xB622, 0xB623, 0xB624, 0xB626, 0xB627, 0xB628, 0xB629, 0xB62A, + 0xB62B, 0xB62D, 0xB62E, 0xB62F, 0xB630, 0xB631, 0xB632, 0xB633, 0xB635, + 0xB636, 0xB637, 0xB638, 0xB639, 0xB63A, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB63B, 0xB63C, 0xB63D, 0xB63E, 0xB63F, 0xB640, 0xB641, + 0xB642, 0xB643, 0xB644, 0xB645, 0xB646, 0xB647, 0xB649, 0xB64A, 0xB64B, + 0xB64C, 0xB64D, 0xB64E, 0xB64F, 0xB650, 0xB651, 0xB652, 0xB653, 0xB654, + 0xB655, 0xB656, 0xB657, 0xB658, 0xB659, 0xB65A, 0xB65B, 0xB65C, 0xB65D, + 0xB65E, 0xB65F, 0xB660, 0xB661, 0xB662, 0xB663, 0xB665, 0xB666, 0xB667, + 0xB669, 0xB66A, 0xB66B, 0xB66C, 0xB66D, 0xB66E, 0xB66F, 0xB670, 0xB671, + 0xB672, 0xB673, 0xB674, 0xB675, 0xB676, 0xB677, 0xB678, 0xB679, 0xB67A, + 0xB67B, 0xB67C, 0xB67D, 0xB67E, 0xB67F, 0xB680, 0xB681, 0xB682, 0xB683, + 0xB684, 0xB685, 0xB686, 0xB687, 0xB688, 0xB689, 0xB68A, 0xB68B, 0xB68C, + 0xB68D, 0xB68E, 0xB68F, 0xB690, 0xB691, 0xB692, 0xB693, 0xB694, 0xB695, + 0xB696, 0xB697, 0xB698, 0xB699, 0xB69A, 0xB69B, 0xB69E, 0xB69F, 0xB6A1, + 0xB6A2, 0xB6A3, 0xB6A5, 0xB6A6, 0xB6A7, 0xB6A8, 0xB6A9, 0xB6AA, 0xB6AD, + 0xB6AE, 0xB6AF, 0xB6B0, 0xB6B2, 0xB6B3, 0xB6B4, 0xB6B5, 0xB6B6, 0xB6B7, + 0xB6B8, 0xB6B9, 0xB6BA, 0xB6BB, 0xB6BC, 0xB6BD, 0xB6BE, 0xB6BF, 0xB6C0, + 0xB6C1, 0xB6C2, ERROR}, + { ERROR, 0xB6C3, 0xB6C4, 0xB6C5, 0xB6C6, 0xB6C7, 0xB6C8, 0xB6C9, 0xB6CA, + 0xB6CB, 0xB6CC, 0xB6CD, 0xB6CE, 0xB6CF, 0xB6D0, 0xB6D1, 0xB6D2, 0xB6D3, + 0xB6D5, 0xB6D6, 0xB6D7, 0xB6D8, 0xB6D9, 0xB6DA, 0xB6DB, 0xB6DC, 0xB6DD, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB6DE, 0xB6DF, 0xB6E0, + 0xB6E1, 0xB6E2, 0xB6E3, 0xB6E4, 0xB6E5, 0xB6E6, 0xB6E7, 0xB6E8, 0xB6E9, + 0xB6EA, 0xB6EB, 0xB6EC, 0xB6ED, 0xB6EE, 0xB6EF, 0xB6F1, 0xB6F2, 0xB6F3, + 0xB6F5, 0xB6F6, 0xB6F7, 0xB6F9, 0xB6FA, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB6FB, 0xB6FC, 0xB6FD, 0xB6FE, 0xB6FF, 0xB702, 0xB703, + 0xB704, 0xB706, 0xB707, 0xB708, 0xB709, 0xB70A, 0xB70B, 0xB70C, 0xB70D, + 0xB70E, 0xB70F, 0xB710, 0xB711, 0xB712, 0xB713, 0xB714, 0xB715, 0xB716, + 0xB717, 0xB718, 0xB719, 0xB71A, 0xB71B, 0xB71C, 0xB71D, 0xB71E, 0xB71F, + 0xB720, 0xB721, 0xB722, 0xB723, 0xB724, 0xB725, 0xB726, 0xB727, 0xB72A, + 0xB72B, 0xB72D, 0xB72E, 0xB731, 0xB732, 0xB733, 0xB734, 0xB735, 0xB736, + 0xB737, 0xB73A, 0xB73C, 0xB73D, 0xB73E, 0xB73F, 0xB740, 0xB741, 0xB742, + 0xB743, 0xB745, 0xB746, 0xB747, 0xB749, 0xB74A, 0xB74B, 0xB74D, 0xB74E, + 0xB74F, 0xB750, 0xB751, 0xB752, 0xB753, 0xB756, 0xB757, 0xB758, 0xB759, + 0xB75A, 0xB75B, 0xB75C, 0xB75D, 0xB75E, 0xB75F, 0xB761, 0xB762, 0xB763, + 0xB765, 0xB766, 0xB767, 0xB769, 0xB76A, 0xB76B, 0xB76C, 0xB76D, 0xB76E, + 0xB76F, 0xB772, 0xB774, 0xB776, 0xB777, 0xB778, 0xB779, 0xB77A, 0xB77B, + 0xB77E, 0xB77F, 0xB781, 0xB782, 0xB783, 0xB785, 0xB786, 0xB787, 0xB788, + 0xB789, 0xB78A, 0xB78B, 0xB78E, 0xB793, 0xB794, 0xB795, 0xB79A, 0xB79B, + 0xB79D, 0xB79E, ERROR}, + { ERROR, 0xB79F, 0xB7A1, 0xB7A2, 0xB7A3, 0xB7A4, 0xB7A5, 0xB7A6, 0xB7A7, + 0xB7AA, 0xB7AE, 0xB7AF, 0xB7B0, 0xB7B1, 0xB7B2, 0xB7B3, 0xB7B6, 0xB7B7, + 0xB7B9, 0xB7BA, 0xB7BB, 0xB7BC, 0xB7BD, 0xB7BE, 0xB7BF, 0xB7C0, 0xB7C1, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB7C2, 0xB7C3, 0xB7C4, + 0xB7C5, 0xB7C6, 0xB7C8, 0xB7CA, 0xB7CB, 0xB7CC, 0xB7CD, 0xB7CE, 0xB7CF, + 0xB7D0, 0xB7D1, 0xB7D2, 0xB7D3, 0xB7D4, 0xB7D5, 0xB7D6, 0xB7D7, 0xB7D8, + 0xB7D9, 0xB7DA, 0xB7DB, 0xB7DC, 0xB7DD, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB7DE, 0xB7DF, 0xB7E0, 0xB7E1, 0xB7E2, 0xB7E3, 0xB7E4, + 0xB7E5, 0xB7E6, 0xB7E7, 0xB7E8, 0xB7E9, 0xB7EA, 0xB7EB, 0xB7EE, 0xB7EF, + 0xB7F1, 0xB7F2, 0xB7F3, 0xB7F5, 0xB7F6, 0xB7F7, 0xB7F8, 0xB7F9, 0xB7FA, + 0xB7FB, 0xB7FE, 0xB802, 0xB803, 0xB804, 0xB805, 0xB806, 0xB80A, 0xB80B, + 0xB80D, 0xB80E, 0xB80F, 0xB811, 0xB812, 0xB813, 0xB814, 0xB815, 0xB816, + 0xB817, 0xB81A, 0xB81C, 0xB81E, 0xB81F, 0xB820, 0xB821, 0xB822, 0xB823, + 0xB826, 0xB827, 0xB829, 0xB82A, 0xB82B, 0xB82D, 0xB82E, 0xB82F, 0xB830, + 0xB831, 0xB832, 0xB833, 0xB836, 0xB83A, 0xB83B, 0xB83C, 0xB83D, 0xB83E, + 0xB83F, 0xB841, 0xB842, 0xB843, 0xB845, 0xB846, 0xB847, 0xB848, 0xB849, + 0xB84A, 0xB84B, 0xB84C, 0xB84D, 0xB84E, 0xB84F, 0xB850, 0xB852, 0xB854, + 0xB855, 0xB856, 0xB857, 0xB858, 0xB859, 0xB85A, 0xB85B, 0xB85E, 0xB85F, + 0xB861, 0xB862, 0xB863, 0xB865, 0xB866, 0xB867, 0xB868, 0xB869, 0xB86A, + 0xB86B, 0xB86E, 0xB870, 0xB872, 0xB873, 0xB874, 0xB875, 0xB876, 0xB877, + 0xB879, 0xB87A, 0xB87B, 0xB87D, 0xB87E, 0xB87F, 0xB880, 0xB881, 0xB882, + 0xB883, 0xB884, ERROR}, + { ERROR, 0xB885, 0xB886, 0xB887, 0xB888, 0xB889, 0xB88A, 0xB88B, 0xB88C, + 0xB88E, 0xB88F, 0xB890, 0xB891, 0xB892, 0xB893, 0xB894, 0xB895, 0xB896, + 0xB897, 0xB898, 0xB899, 0xB89A, 0xB89B, 0xB89C, 0xB89D, 0xB89E, 0xB89F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB8A0, 0xB8A1, 0xB8A2, + 0xB8A3, 0xB8A4, 0xB8A5, 0xB8A6, 0xB8A7, 0xB8A9, 0xB8AA, 0xB8AB, 0xB8AC, + 0xB8AD, 0xB8AE, 0xB8AF, 0xB8B1, 0xB8B2, 0xB8B3, 0xB8B5, 0xB8B6, 0xB8B7, + 0xB8B9, 0xB8BA, 0xB8BB, 0xB8BC, 0xB8BD, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB8BE, 0xB8BF, 0xB8C2, 0xB8C4, 0xB8C6, 0xB8C7, 0xB8C8, + 0xB8C9, 0xB8CA, 0xB8CB, 0xB8CD, 0xB8CE, 0xB8CF, 0xB8D1, 0xB8D2, 0xB8D3, + 0xB8D5, 0xB8D6, 0xB8D7, 0xB8D8, 0xB8D9, 0xB8DA, 0xB8DB, 0xB8DC, 0xB8DE, + 0xB8E0, 0xB8E2, 0xB8E3, 0xB8E4, 0xB8E5, 0xB8E6, 0xB8E7, 0xB8EA, 0xB8EB, + 0xB8ED, 0xB8EE, 0xB8EF, 0xB8F1, 0xB8F2, 0xB8F3, 0xB8F4, 0xB8F5, 0xB8F6, + 0xB8F7, 0xB8FA, 0xB8FC, 0xB8FE, 0xB8FF, 0xB900, 0xB901, 0xB902, 0xB903, + 0xB905, 0xB906, 0xB907, 0xB908, 0xB909, 0xB90A, 0xB90B, 0xB90C, 0xB90D, + 0xB90E, 0xB90F, 0xB910, 0xB911, 0xB912, 0xB913, 0xB914, 0xB915, 0xB916, + 0xB917, 0xB919, 0xB91A, 0xB91B, 0xB91C, 0xB91D, 0xB91E, 0xB91F, 0xB921, + 0xB922, 0xB923, 0xB924, 0xB925, 0xB926, 0xB927, 0xB928, 0xB929, 0xB92A, + 0xB92B, 0xB92C, 0xB92D, 0xB92E, 0xB92F, 0xB930, 0xB931, 0xB932, 0xB933, + 0xB934, 0xB935, 0xB936, 0xB937, 0xB938, 0xB939, 0xB93A, 0xB93B, 0xB93E, + 0xB93F, 0xB941, 0xB942, 0xB943, 0xB945, 0xB946, 0xB947, 0xB948, 0xB949, + 0xB94A, 0xB94B, 0xB94D, 0xB94E, 0xB950, 0xB952, 0xB953, 0xB954, 0xB955, + 0xB956, 0xB957, ERROR}, + { ERROR, 0xB95A, 0xB95B, 0xB95D, 0xB95E, 0xB95F, 0xB961, 0xB962, 0xB963, + 0xB964, 0xB965, 0xB966, 0xB967, 0xB96A, 0xB96C, 0xB96E, 0xB96F, 0xB970, + 0xB971, 0xB972, 0xB973, 0xB976, 0xB977, 0xB979, 0xB97A, 0xB97B, 0xB97D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xB97E, 0xB97F, 0xB980, + 0xB981, 0xB982, 0xB983, 0xB986, 0xB988, 0xB98B, 0xB98C, 0xB98F, 0xB990, + 0xB991, 0xB992, 0xB993, 0xB994, 0xB995, 0xB996, 0xB997, 0xB998, 0xB999, + 0xB99A, 0xB99B, 0xB99C, 0xB99D, 0xB99E, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xB99F, 0xB9A0, 0xB9A1, 0xB9A2, 0xB9A3, 0xB9A4, 0xB9A5, + 0xB9A6, 0xB9A7, 0xB9A8, 0xB9A9, 0xB9AA, 0xB9AB, 0xB9AE, 0xB9AF, 0xB9B1, + 0xB9B2, 0xB9B3, 0xB9B5, 0xB9B6, 0xB9B7, 0xB9B8, 0xB9B9, 0xB9BA, 0xB9BB, + 0xB9BE, 0xB9C0, 0xB9C2, 0xB9C3, 0xB9C4, 0xB9C5, 0xB9C6, 0xB9C7, 0xB9CA, + 0xB9CB, 0xB9CD, 0xB9D3, 0xB9D4, 0xB9D5, 0xB9D6, 0xB9D7, 0xB9DA, 0xB9DC, + 0xB9DF, 0xB9E0, 0xB9E2, 0xB9E6, 0xB9E7, 0xB9E9, 0xB9EA, 0xB9EB, 0xB9ED, + 0xB9EE, 0xB9EF, 0xB9F0, 0xB9F1, 0xB9F2, 0xB9F3, 0xB9F6, 0xB9FB, 0xB9FC, + 0xB9FD, 0xB9FE, 0xB9FF, 0xBA02, 0xBA03, 0xBA04, 0xBA05, 0xBA06, 0xBA07, + 0xBA09, 0xBA0A, 0xBA0B, 0xBA0C, 0xBA0D, 0xBA0E, 0xBA0F, 0xBA10, 0xBA11, + 0xBA12, 0xBA13, 0xBA14, 0xBA16, 0xBA17, 0xBA18, 0xBA19, 0xBA1A, 0xBA1B, + 0xBA1C, 0xBA1D, 0xBA1E, 0xBA1F, 0xBA20, 0xBA21, 0xBA22, 0xBA23, 0xBA24, + 0xBA25, 0xBA26, 0xBA27, 0xBA28, 0xBA29, 0xBA2A, 0xBA2B, 0xBA2C, 0xBA2D, + 0xBA2E, 0xBA2F, 0xBA30, 0xBA31, 0xBA32, 0xBA33, 0xBA34, 0xBA35, 0xBA36, + 0xBA37, 0xBA3A, 0xBA3B, 0xBA3D, 0xBA3E, 0xBA3F, 0xBA41, 0xBA43, 0xBA44, + 0xBA45, 0xBA46, ERROR}, + { ERROR, 0xBA47, 0xBA4A, 0xBA4C, 0xBA4F, 0xBA50, 0xBA51, 0xBA52, 0xBA56, + 0xBA57, 0xBA59, 0xBA5A, 0xBA5B, 0xBA5D, 0xBA5E, 0xBA5F, 0xBA60, 0xBA61, + 0xBA62, 0xBA63, 0xBA66, 0xBA6A, 0xBA6B, 0xBA6C, 0xBA6D, 0xBA6E, 0xBA6F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBA72, 0xBA73, 0xBA75, + 0xBA76, 0xBA77, 0xBA79, 0xBA7A, 0xBA7B, 0xBA7C, 0xBA7D, 0xBA7E, 0xBA7F, + 0xBA80, 0xBA81, 0xBA82, 0xBA86, 0xBA88, 0xBA89, 0xBA8A, 0xBA8B, 0xBA8D, + 0xBA8E, 0xBA8F, 0xBA90, 0xBA91, 0xBA92, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBA93, 0xBA94, 0xBA95, 0xBA96, 0xBA97, 0xBA98, 0xBA99, + 0xBA9A, 0xBA9B, 0xBA9C, 0xBA9D, 0xBA9E, 0xBA9F, 0xBAA0, 0xBAA1, 0xBAA2, + 0xBAA3, 0xBAA4, 0xBAA5, 0xBAA6, 0xBAA7, 0xBAAA, 0xBAAD, 0xBAAE, 0xBAAF, + 0xBAB1, 0xBAB3, 0xBAB4, 0xBAB5, 0xBAB6, 0xBAB7, 0xBABA, 0xBABC, 0xBABE, + 0xBABF, 0xBAC0, 0xBAC1, 0xBAC2, 0xBAC3, 0xBAC5, 0xBAC6, 0xBAC7, 0xBAC9, + 0xBACA, 0xBACB, 0xBACC, 0xBACD, 0xBACE, 0xBACF, 0xBAD0, 0xBAD1, 0xBAD2, + 0xBAD3, 0xBAD4, 0xBAD5, 0xBAD6, 0xBAD7, 0xBADA, 0xBADB, 0xBADC, 0xBADD, + 0xBADE, 0xBADF, 0xBAE0, 0xBAE1, 0xBAE2, 0xBAE3, 0xBAE4, 0xBAE5, 0xBAE6, + 0xBAE7, 0xBAE8, 0xBAE9, 0xBAEA, 0xBAEB, 0xBAEC, 0xBAED, 0xBAEE, 0xBAEF, + 0xBAF0, 0xBAF1, 0xBAF2, 0xBAF3, 0xBAF4, 0xBAF5, 0xBAF6, 0xBAF7, 0xBAF8, + 0xBAF9, 0xBAFA, 0xBAFB, 0xBAFD, 0xBAFE, 0xBAFF, 0xBB01, 0xBB02, 0xBB03, + 0xBB05, 0xBB06, 0xBB07, 0xBB08, 0xBB09, 0xBB0A, 0xBB0B, 0xBB0C, 0xBB0E, + 0xBB10, 0xBB12, 0xBB13, 0xBB14, 0xBB15, 0xBB16, 0xBB17, 0xBB19, 0xBB1A, + 0xBB1B, 0xBB1D, 0xBB1E, 0xBB1F, 0xBB21, 0xBB22, 0xBB23, 0xBB24, 0xBB25, + 0xBB26, 0xBB27, ERROR}, + { ERROR, 0xBB28, 0xBB2A, 0xBB2C, 0xBB2D, 0xBB2E, 0xBB2F, 0xBB30, 0xBB31, + 0xBB32, 0xBB33, 0xBB37, 0xBB39, 0xBB3A, 0xBB3F, 0xBB40, 0xBB41, 0xBB42, + 0xBB43, 0xBB46, 0xBB48, 0xBB4A, 0xBB4B, 0xBB4C, 0xBB4E, 0xBB51, 0xBB52, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBB53, 0xBB55, 0xBB56, + 0xBB57, 0xBB59, 0xBB5A, 0xBB5B, 0xBB5C, 0xBB5D, 0xBB5E, 0xBB5F, 0xBB60, + 0xBB62, 0xBB64, 0xBB65, 0xBB66, 0xBB67, 0xBB68, 0xBB69, 0xBB6A, 0xBB6B, + 0xBB6D, 0xBB6E, 0xBB6F, 0xBB70, 0xBB71, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBB72, 0xBB73, 0xBB74, 0xBB75, 0xBB76, 0xBB77, 0xBB78, + 0xBB79, 0xBB7A, 0xBB7B, 0xBB7C, 0xBB7D, 0xBB7E, 0xBB7F, 0xBB80, 0xBB81, + 0xBB82, 0xBB83, 0xBB84, 0xBB85, 0xBB86, 0xBB87, 0xBB89, 0xBB8A, 0xBB8B, + 0xBB8D, 0xBB8E, 0xBB8F, 0xBB91, 0xBB92, 0xBB93, 0xBB94, 0xBB95, 0xBB96, + 0xBB97, 0xBB98, 0xBB99, 0xBB9A, 0xBB9B, 0xBB9C, 0xBB9D, 0xBB9E, 0xBB9F, + 0xBBA0, 0xBBA1, 0xBBA2, 0xBBA3, 0xBBA5, 0xBBA6, 0xBBA7, 0xBBA9, 0xBBAA, + 0xBBAB, 0xBBAD, 0xBBAE, 0xBBAF, 0xBBB0, 0xBBB1, 0xBBB2, 0xBBB3, 0xBBB5, + 0xBBB6, 0xBBB8, 0xBBB9, 0xBBBA, 0xBBBB, 0xBBBC, 0xBBBD, 0xBBBE, 0xBBBF, + 0xBBC1, 0xBBC2, 0xBBC3, 0xBBC5, 0xBBC6, 0xBBC7, 0xBBC9, 0xBBCA, 0xBBCB, + 0xBBCC, 0xBBCD, 0xBBCE, 0xBBCF, 0xBBD1, 0xBBD2, 0xBBD4, 0xBBD5, 0xBBD6, + 0xBBD7, 0xBBD8, 0xBBD9, 0xBBDA, 0xBBDB, 0xBBDC, 0xBBDD, 0xBBDE, 0xBBDF, + 0xBBE0, 0xBBE1, 0xBBE2, 0xBBE3, 0xBBE4, 0xBBE5, 0xBBE6, 0xBBE7, 0xBBE8, + 0xBBE9, 0xBBEA, 0xBBEB, 0xBBEC, 0xBBED, 0xBBEE, 0xBBEF, 0xBBF0, 0xBBF1, + 0xBBF2, 0xBBF3, 0xBBF4, 0xBBF5, 0xBBF6, 0xBBF7, 0xBBFA, 0xBBFB, 0xBBFD, + 0xBBFE, 0xBC01, ERROR}, + { ERROR, 0xBC03, 0xBC04, 0xBC05, 0xBC06, 0xBC07, 0xBC0A, 0xBC0E, 0xBC10, + 0xBC12, 0xBC13, 0xBC19, 0xBC1A, 0xBC20, 0xBC21, 0xBC22, 0xBC23, 0xBC26, + 0xBC28, 0xBC2A, 0xBC2B, 0xBC2C, 0xBC2E, 0xBC2F, 0xBC32, 0xBC33, 0xBC35, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBC36, 0xBC37, 0xBC39, + 0xBC3A, 0xBC3B, 0xBC3C, 0xBC3D, 0xBC3E, 0xBC3F, 0xBC42, 0xBC46, 0xBC47, + 0xBC48, 0xBC4A, 0xBC4B, 0xBC4E, 0xBC4F, 0xBC51, 0xBC52, 0xBC53, 0xBC54, + 0xBC55, 0xBC56, 0xBC57, 0xBC58, 0xBC59, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBC5A, 0xBC5B, 0xBC5C, 0xBC5E, 0xBC5F, 0xBC60, 0xBC61, + 0xBC62, 0xBC63, 0xBC64, 0xBC65, 0xBC66, 0xBC67, 0xBC68, 0xBC69, 0xBC6A, + 0xBC6B, 0xBC6C, 0xBC6D, 0xBC6E, 0xBC6F, 0xBC70, 0xBC71, 0xBC72, 0xBC73, + 0xBC74, 0xBC75, 0xBC76, 0xBC77, 0xBC78, 0xBC79, 0xBC7A, 0xBC7B, 0xBC7C, + 0xBC7D, 0xBC7E, 0xBC7F, 0xBC80, 0xBC81, 0xBC82, 0xBC83, 0xBC86, 0xBC87, + 0xBC89, 0xBC8A, 0xBC8D, 0xBC8F, 0xBC90, 0xBC91, 0xBC92, 0xBC93, 0xBC96, + 0xBC98, 0xBC9B, 0xBC9C, 0xBC9D, 0xBC9E, 0xBC9F, 0xBCA2, 0xBCA3, 0xBCA5, + 0xBCA6, 0xBCA9, 0xBCAA, 0xBCAB, 0xBCAC, 0xBCAD, 0xBCAE, 0xBCAF, 0xBCB2, + 0xBCB6, 0xBCB7, 0xBCB8, 0xBCB9, 0xBCBA, 0xBCBB, 0xBCBE, 0xBCBF, 0xBCC1, + 0xBCC2, 0xBCC3, 0xBCC5, 0xBCC6, 0xBCC7, 0xBCC8, 0xBCC9, 0xBCCA, 0xBCCB, + 0xBCCC, 0xBCCE, 0xBCD2, 0xBCD3, 0xBCD4, 0xBCD6, 0xBCD7, 0xBCD9, 0xBCDA, + 0xBCDB, 0xBCDD, 0xBCDE, 0xBCDF, 0xBCE0, 0xBCE1, 0xBCE2, 0xBCE3, 0xBCE4, + 0xBCE5, 0xBCE6, 0xBCE7, 0xBCE8, 0xBCE9, 0xBCEA, 0xBCEB, 0xBCEC, 0xBCED, + 0xBCEE, 0xBCEF, 0xBCF0, 0xBCF1, 0xBCF2, 0xBCF3, 0xBCF7, 0xBCF9, 0xBCFA, + 0xBCFB, 0xBCFD, ERROR}, + { ERROR, 0xBCFE, 0xBCFF, 0xBD00, 0xBD01, 0xBD02, 0xBD03, 0xBD06, 0xBD08, + 0xBD0A, 0xBD0B, 0xBD0C, 0xBD0D, 0xBD0E, 0xBD0F, 0xBD11, 0xBD12, 0xBD13, + 0xBD15, 0xBD16, 0xBD17, 0xBD18, 0xBD19, 0xBD1A, 0xBD1B, 0xBD1C, 0xBD1D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBD1E, 0xBD1F, 0xBD20, + 0xBD21, 0xBD22, 0xBD23, 0xBD25, 0xBD26, 0xBD27, 0xBD28, 0xBD29, 0xBD2A, + 0xBD2B, 0xBD2D, 0xBD2E, 0xBD2F, 0xBD30, 0xBD31, 0xBD32, 0xBD33, 0xBD34, + 0xBD35, 0xBD36, 0xBD37, 0xBD38, 0xBD39, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBD3A, 0xBD3B, 0xBD3C, 0xBD3D, 0xBD3E, 0xBD3F, 0xBD41, + 0xBD42, 0xBD43, 0xBD44, 0xBD45, 0xBD46, 0xBD47, 0xBD4A, 0xBD4B, 0xBD4D, + 0xBD4E, 0xBD4F, 0xBD51, 0xBD52, 0xBD53, 0xBD54, 0xBD55, 0xBD56, 0xBD57, + 0xBD5A, 0xBD5B, 0xBD5C, 0xBD5D, 0xBD5E, 0xBD5F, 0xBD60, 0xBD61, 0xBD62, + 0xBD63, 0xBD65, 0xBD66, 0xBD67, 0xBD69, 0xBD6A, 0xBD6B, 0xBD6C, 0xBD6D, + 0xBD6E, 0xBD6F, 0xBD70, 0xBD71, 0xBD72, 0xBD73, 0xBD74, 0xBD75, 0xBD76, + 0xBD77, 0xBD78, 0xBD79, 0xBD7A, 0xBD7B, 0xBD7C, 0xBD7D, 0xBD7E, 0xBD7F, + 0xBD82, 0xBD83, 0xBD85, 0xBD86, 0xBD8B, 0xBD8C, 0xBD8D, 0xBD8E, 0xBD8F, + 0xBD92, 0xBD94, 0xBD96, 0xBD97, 0xBD98, 0xBD9B, 0xBD9D, 0xBD9E, 0xBD9F, + 0xBDA0, 0xBDA1, 0xBDA2, 0xBDA3, 0xBDA5, 0xBDA6, 0xBDA7, 0xBDA8, 0xBDA9, + 0xBDAA, 0xBDAB, 0xBDAC, 0xBDAD, 0xBDAE, 0xBDAF, 0xBDB1, 0xBDB2, 0xBDB3, + 0xBDB4, 0xBDB5, 0xBDB6, 0xBDB7, 0xBDB9, 0xBDBA, 0xBDBB, 0xBDBC, 0xBDBD, + 0xBDBE, 0xBDBF, 0xBDC0, 0xBDC1, 0xBDC2, 0xBDC3, 0xBDC4, 0xBDC5, 0xBDC6, + 0xBDC7, 0xBDC8, 0xBDC9, 0xBDCA, 0xBDCB, 0xBDCC, 0xBDCD, 0xBDCE, 0xBDCF, + 0xBDD0, 0xBDD1, ERROR}, + { ERROR, 0xBDD2, 0xBDD3, 0xBDD6, 0xBDD7, 0xBDD9, 0xBDDA, 0xBDDB, 0xBDDD, + 0xBDDE, 0xBDDF, 0xBDE0, 0xBDE1, 0xBDE2, 0xBDE3, 0xBDE4, 0xBDE5, 0xBDE6, + 0xBDE7, 0xBDE8, 0xBDEA, 0xBDEB, 0xBDEC, 0xBDED, 0xBDEE, 0xBDEF, 0xBDF1, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBDF2, 0xBDF3, 0xBDF5, + 0xBDF6, 0xBDF7, 0xBDF9, 0xBDFA, 0xBDFB, 0xBDFC, 0xBDFD, 0xBDFE, 0xBDFF, + 0xBE01, 0xBE02, 0xBE04, 0xBE06, 0xBE07, 0xBE08, 0xBE09, 0xBE0A, 0xBE0B, + 0xBE0E, 0xBE0F, 0xBE11, 0xBE12, 0xBE13, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBE15, 0xBE16, 0xBE17, 0xBE18, 0xBE19, 0xBE1A, 0xBE1B, + 0xBE1E, 0xBE20, 0xBE21, 0xBE22, 0xBE23, 0xBE24, 0xBE25, 0xBE26, 0xBE27, + 0xBE28, 0xBE29, 0xBE2A, 0xBE2B, 0xBE2C, 0xBE2D, 0xBE2E, 0xBE2F, 0xBE30, + 0xBE31, 0xBE32, 0xBE33, 0xBE34, 0xBE35, 0xBE36, 0xBE37, 0xBE38, 0xBE39, + 0xBE3A, 0xBE3B, 0xBE3C, 0xBE3D, 0xBE3E, 0xBE3F, 0xBE40, 0xBE41, 0xBE42, + 0xBE43, 0xBE46, 0xBE47, 0xBE49, 0xBE4A, 0xBE4B, 0xBE4D, 0xBE4F, 0xBE50, + 0xBE51, 0xBE52, 0xBE53, 0xBE56, 0xBE58, 0xBE5C, 0xBE5D, 0xBE5E, 0xBE5F, + 0xBE62, 0xBE63, 0xBE65, 0xBE66, 0xBE67, 0xBE69, 0xBE6B, 0xBE6C, 0xBE6D, + 0xBE6E, 0xBE6F, 0xBE72, 0xBE76, 0xBE77, 0xBE78, 0xBE79, 0xBE7A, 0xBE7E, + 0xBE7F, 0xBE81, 0xBE82, 0xBE83, 0xBE85, 0xBE86, 0xBE87, 0xBE88, 0xBE89, + 0xBE8A, 0xBE8B, 0xBE8E, 0xBE92, 0xBE93, 0xBE94, 0xBE95, 0xBE96, 0xBE97, + 0xBE9A, 0xBE9B, 0xBE9C, 0xBE9D, 0xBE9E, 0xBE9F, 0xBEA0, 0xBEA1, 0xBEA2, + 0xBEA3, 0xBEA4, 0xBEA5, 0xBEA6, 0xBEA7, 0xBEA9, 0xBEAA, 0xBEAB, 0xBEAC, + 0xBEAD, 0xBEAE, 0xBEAF, 0xBEB0, 0xBEB1, 0xBEB2, 0xBEB3, 0xBEB4, 0xBEB5, + 0xBEB6, 0xBEB7, ERROR}, + { ERROR, 0xBEB8, 0xBEB9, 0xBEBA, 0xBEBB, 0xBEBC, 0xBEBD, 0xBEBE, 0xBEBF, + 0xBEC0, 0xBEC1, 0xBEC2, 0xBEC3, 0xBEC4, 0xBEC5, 0xBEC6, 0xBEC7, 0xBEC8, + 0xBEC9, 0xBECA, 0xBECB, 0xBECC, 0xBECD, 0xBECE, 0xBECF, 0xBED2, 0xBED3, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBED5, 0xBED6, 0xBED9, + 0xBEDA, 0xBEDB, 0xBEDC, 0xBEDD, 0xBEDE, 0xBEDF, 0xBEE1, 0xBEE2, 0xBEE6, + 0xBEE7, 0xBEE8, 0xBEE9, 0xBEEA, 0xBEEB, 0xBEED, 0xBEEE, 0xBEEF, 0xBEF0, + 0xBEF1, 0xBEF2, 0xBEF3, 0xBEF4, 0xBEF5, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBEF6, 0xBEF7, 0xBEF8, 0xBEF9, 0xBEFA, 0xBEFB, 0xBEFC, + 0xBEFD, 0xBEFE, 0xBEFF, 0xBF00, 0xBF02, 0xBF03, 0xBF04, 0xBF05, 0xBF06, + 0xBF07, 0xBF0A, 0xBF0B, 0xBF0C, 0xBF0D, 0xBF0E, 0xBF0F, 0xBF10, 0xBF11, + 0xBF12, 0xBF13, 0xBF14, 0xBF15, 0xBF16, 0xBF17, 0xBF1A, 0xBF1E, 0xBF1F, + 0xBF20, 0xBF21, 0xBF22, 0xBF23, 0xBF24, 0xBF25, 0xBF26, 0xBF27, 0xBF28, + 0xBF29, 0xBF2A, 0xBF2B, 0xBF2C, 0xBF2D, 0xBF2E, 0xBF2F, 0xBF30, 0xBF31, + 0xBF32, 0xBF33, 0xBF34, 0xBF35, 0xBF36, 0xBF37, 0xBF38, 0xBF39, 0xBF3A, + 0xBF3B, 0xBF3C, 0xBF3D, 0xBF3E, 0xBF3F, 0xBF42, 0xBF43, 0xBF45, 0xBF46, + 0xBF47, 0xBF49, 0xBF4A, 0xBF4B, 0xBF4C, 0xBF4D, 0xBF4E, 0xBF4F, 0xBF52, + 0xBF53, 0xBF54, 0xBF56, 0xBF57, 0xBF58, 0xBF59, 0xBF5A, 0xBF5B, 0xBF5C, + 0xBF5D, 0xBF5E, 0xBF5F, 0xBF60, 0xBF61, 0xBF62, 0xBF63, 0xBF64, 0xBF65, + 0xBF66, 0xBF67, 0xBF68, 0xBF69, 0xBF6A, 0xBF6B, 0xBF6C, 0xBF6D, 0xBF6E, + 0xBF6F, 0xBF70, 0xBF71, 0xBF72, 0xBF73, 0xBF74, 0xBF75, 0xBF76, 0xBF77, + 0xBF78, 0xBF79, 0xBF7A, 0xBF7B, 0xBF7C, 0xBF7D, 0xBF7E, 0xBF7F, 0xBF80, + 0xBF81, 0xBF82, ERROR}, + { ERROR, 0xBF83, 0xBF84, 0xBF85, 0xBF86, 0xBF87, 0xBF88, 0xBF89, 0xBF8A, + 0xBF8B, 0xBF8C, 0xBF8D, 0xBF8E, 0xBF8F, 0xBF90, 0xBF91, 0xBF92, 0xBF93, + 0xBF95, 0xBF96, 0xBF97, 0xBF98, 0xBF99, 0xBF9A, 0xBF9B, 0xBF9C, 0xBF9D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xBF9E, 0xBF9F, 0xBFA0, + 0xBFA1, 0xBFA2, 0xBFA3, 0xBFA4, 0xBFA5, 0xBFA6, 0xBFA7, 0xBFA8, 0xBFA9, + 0xBFAA, 0xBFAB, 0xBFAC, 0xBFAD, 0xBFAE, 0xBFAF, 0xBFB1, 0xBFB2, 0xBFB3, + 0xBFB4, 0xBFB5, 0xBFB6, 0xBFB7, 0xBFB8, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xBFB9, 0xBFBA, 0xBFBB, 0xBFBC, 0xBFBD, 0xBFBE, 0xBFBF, + 0xBFC0, 0xBFC1, 0xBFC2, 0xBFC3, 0xBFC4, 0xBFC6, 0xBFC7, 0xBFC8, 0xBFC9, + 0xBFCA, 0xBFCB, 0xBFCE, 0xBFCF, 0xBFD1, 0xBFD2, 0xBFD3, 0xBFD5, 0xBFD6, + 0xBFD7, 0xBFD8, 0xBFD9, 0xBFDA, 0xBFDB, 0xBFDD, 0xBFDE, 0xBFE0, 0xBFE2, + 0xBFE3, 0xBFE4, 0xBFE5, 0xBFE6, 0xBFE7, 0xBFE8, 0xBFE9, 0xBFEA, 0xBFEB, + 0xBFEC, 0xBFED, 0xBFEE, 0xBFEF, 0xBFF0, 0xBFF1, 0xBFF2, 0xBFF3, 0xBFF4, + 0xBFF5, 0xBFF6, 0xBFF7, 0xBFF8, 0xBFF9, 0xBFFA, 0xBFFB, 0xBFFC, 0xBFFD, + 0xBFFE, 0xBFFF, 0xC000, 0xC001, 0xC002, 0xC003, 0xC004, 0xC005, 0xC006, + 0xC007, 0xC008, 0xC009, 0xC00A, 0xC00B, 0xC00C, 0xC00D, 0xC00E, 0xC00F, + 0xC010, 0xC011, 0xC012, 0xC013, 0xC014, 0xC015, 0xC016, 0xC017, 0xC018, + 0xC019, 0xC01A, 0xC01B, 0xC01C, 0xC01D, 0xC01E, 0xC01F, 0xC020, 0xC021, + 0xC022, 0xC023, 0xC024, 0xC025, 0xC026, 0xC027, 0xC028, 0xC029, 0xC02A, + 0xC02B, 0xC02C, 0xC02D, 0xC02E, 0xC02F, 0xC030, 0xC031, 0xC032, 0xC033, + 0xC034, 0xC035, 0xC036, 0xC037, 0xC038, 0xC039, 0xC03A, 0xC03B, 0xC03D, + 0xC03E, 0xC03F, ERROR}, + { ERROR, 0xC040, 0xC041, 0xC042, 0xC043, 0xC044, 0xC045, 0xC046, 0xC047, + 0xC048, 0xC049, 0xC04A, 0xC04B, 0xC04C, 0xC04D, 0xC04E, 0xC04F, 0xC050, + 0xC052, 0xC053, 0xC054, 0xC055, 0xC056, 0xC057, 0xC059, 0xC05A, 0xC05B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC05D, 0xC05E, 0xC05F, + 0xC061, 0xC062, 0xC063, 0xC064, 0xC065, 0xC066, 0xC067, 0xC06A, 0xC06B, + 0xC06C, 0xC06D, 0xC06E, 0xC06F, 0xC070, 0xC071, 0xC072, 0xC073, 0xC074, + 0xC075, 0xC076, 0xC077, 0xC078, 0xC079, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC07A, 0xC07B, 0xC07C, 0xC07D, 0xC07E, 0xC07F, 0xC080, + 0xC081, 0xC082, 0xC083, 0xC084, 0xC085, 0xC086, 0xC087, 0xC088, 0xC089, + 0xC08A, 0xC08B, 0xC08C, 0xC08D, 0xC08E, 0xC08F, 0xC092, 0xC093, 0xC095, + 0xC096, 0xC097, 0xC099, 0xC09A, 0xC09B, 0xC09C, 0xC09D, 0xC09E, 0xC09F, + 0xC0A2, 0xC0A4, 0xC0A6, 0xC0A7, 0xC0A8, 0xC0A9, 0xC0AA, 0xC0AB, 0xC0AE, + 0xC0B1, 0xC0B2, 0xC0B7, 0xC0B8, 0xC0B9, 0xC0BA, 0xC0BB, 0xC0BE, 0xC0C2, + 0xC0C3, 0xC0C4, 0xC0C6, 0xC0C7, 0xC0CA, 0xC0CB, 0xC0CD, 0xC0CE, 0xC0CF, + 0xC0D1, 0xC0D2, 0xC0D3, 0xC0D4, 0xC0D5, 0xC0D6, 0xC0D7, 0xC0DA, 0xC0DE, + 0xC0DF, 0xC0E0, 0xC0E1, 0xC0E2, 0xC0E3, 0xC0E6, 0xC0E7, 0xC0E9, 0xC0EA, + 0xC0EB, 0xC0ED, 0xC0EE, 0xC0EF, 0xC0F0, 0xC0F1, 0xC0F2, 0xC0F3, 0xC0F6, + 0xC0F8, 0xC0FA, 0xC0FB, 0xC0FC, 0xC0FD, 0xC0FE, 0xC0FF, 0xC101, 0xC102, + 0xC103, 0xC105, 0xC106, 0xC107, 0xC109, 0xC10A, 0xC10B, 0xC10C, 0xC10D, + 0xC10E, 0xC10F, 0xC111, 0xC112, 0xC113, 0xC114, 0xC116, 0xC117, 0xC118, + 0xC119, 0xC11A, 0xC11B, 0xC121, 0xC122, 0xC125, 0xC128, 0xC129, 0xC12A, + 0xC12B, 0xC12E, ERROR}, + { ERROR, 0xC132, 0xC133, 0xC134, 0xC135, 0xC137, 0xC13A, 0xC13B, 0xC13D, + 0xC13E, 0xC13F, 0xC141, 0xC142, 0xC143, 0xC144, 0xC145, 0xC146, 0xC147, + 0xC14A, 0xC14E, 0xC14F, 0xC150, 0xC151, 0xC152, 0xC153, 0xC156, 0xC157, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC159, 0xC15A, 0xC15B, + 0xC15D, 0xC15E, 0xC15F, 0xC160, 0xC161, 0xC162, 0xC163, 0xC166, 0xC16A, + 0xC16B, 0xC16C, 0xC16D, 0xC16E, 0xC16F, 0xC171, 0xC172, 0xC173, 0xC175, + 0xC176, 0xC177, 0xC179, 0xC17A, 0xC17B, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC17C, 0xC17D, 0xC17E, 0xC17F, 0xC180, 0xC181, 0xC182, + 0xC183, 0xC184, 0xC186, 0xC187, 0xC188, 0xC189, 0xC18A, 0xC18B, 0xC18F, + 0xC191, 0xC192, 0xC193, 0xC195, 0xC197, 0xC198, 0xC199, 0xC19A, 0xC19B, + 0xC19E, 0xC1A0, 0xC1A2, 0xC1A3, 0xC1A4, 0xC1A6, 0xC1A7, 0xC1AA, 0xC1AB, + 0xC1AD, 0xC1AE, 0xC1AF, 0xC1B1, 0xC1B2, 0xC1B3, 0xC1B4, 0xC1B5, 0xC1B6, + 0xC1B7, 0xC1B8, 0xC1B9, 0xC1BA, 0xC1BB, 0xC1BC, 0xC1BE, 0xC1BF, 0xC1C0, + 0xC1C1, 0xC1C2, 0xC1C3, 0xC1C5, 0xC1C6, 0xC1C7, 0xC1C9, 0xC1CA, 0xC1CB, + 0xC1CD, 0xC1CE, 0xC1CF, 0xC1D0, 0xC1D1, 0xC1D2, 0xC1D3, 0xC1D5, 0xC1D6, + 0xC1D9, 0xC1DA, 0xC1DB, 0xC1DC, 0xC1DD, 0xC1DE, 0xC1DF, 0xC1E1, 0xC1E2, + 0xC1E3, 0xC1E5, 0xC1E6, 0xC1E7, 0xC1E9, 0xC1EA, 0xC1EB, 0xC1EC, 0xC1ED, + 0xC1EE, 0xC1EF, 0xC1F2, 0xC1F4, 0xC1F5, 0xC1F6, 0xC1F7, 0xC1F8, 0xC1F9, + 0xC1FA, 0xC1FB, 0xC1FE, 0xC1FF, 0xC201, 0xC202, 0xC203, 0xC205, 0xC206, + 0xC207, 0xC208, 0xC209, 0xC20A, 0xC20B, 0xC20E, 0xC210, 0xC212, 0xC213, + 0xC214, 0xC215, 0xC216, 0xC217, 0xC21A, 0xC21B, 0xC21D, 0xC21E, 0xC221, + 0xC222, 0xC223, ERROR}, + { ERROR, 0xC224, 0xC225, 0xC226, 0xC227, 0xC22A, 0xC22C, 0xC22E, 0xC230, + 0xC233, 0xC235, 0xC236, 0xC237, 0xC238, 0xC239, 0xC23A, 0xC23B, 0xC23C, + 0xC23D, 0xC23E, 0xC23F, 0xC240, 0xC241, 0xC242, 0xC243, 0xC244, 0xC245, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC246, 0xC247, 0xC249, + 0xC24A, 0xC24B, 0xC24C, 0xC24D, 0xC24E, 0xC24F, 0xC252, 0xC253, 0xC255, + 0xC256, 0xC257, 0xC259, 0xC25A, 0xC25B, 0xC25C, 0xC25D, 0xC25E, 0xC25F, + 0xC261, 0xC262, 0xC263, 0xC264, 0xC266, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC267, 0xC268, 0xC269, 0xC26A, 0xC26B, 0xC26E, 0xC26F, + 0xC271, 0xC272, 0xC273, 0xC275, 0xC276, 0xC277, 0xC278, 0xC279, 0xC27A, + 0xC27B, 0xC27E, 0xC280, 0xC282, 0xC283, 0xC284, 0xC285, 0xC286, 0xC287, + 0xC28A, 0xC28B, 0xC28C, 0xC28D, 0xC28E, 0xC28F, 0xC291, 0xC292, 0xC293, + 0xC294, 0xC295, 0xC296, 0xC297, 0xC299, 0xC29A, 0xC29C, 0xC29E, 0xC29F, + 0xC2A0, 0xC2A1, 0xC2A2, 0xC2A3, 0xC2A6, 0xC2A7, 0xC2A9, 0xC2AA, 0xC2AB, + 0xC2AE, 0xC2AF, 0xC2B0, 0xC2B1, 0xC2B2, 0xC2B3, 0xC2B6, 0xC2B8, 0xC2BA, + 0xC2BB, 0xC2BC, 0xC2BD, 0xC2BE, 0xC2BF, 0xC2C0, 0xC2C1, 0xC2C2, 0xC2C3, + 0xC2C4, 0xC2C5, 0xC2C6, 0xC2C7, 0xC2C8, 0xC2C9, 0xC2CA, 0xC2CB, 0xC2CC, + 0xC2CD, 0xC2CE, 0xC2CF, 0xC2D0, 0xC2D1, 0xC2D2, 0xC2D3, 0xC2D4, 0xC2D5, + 0xC2D6, 0xC2D7, 0xC2D8, 0xC2D9, 0xC2DA, 0xC2DB, 0xC2DE, 0xC2DF, 0xC2E1, + 0xC2E2, 0xC2E5, 0xC2E6, 0xC2E7, 0xC2E8, 0xC2E9, 0xC2EA, 0xC2EE, 0xC2F0, + 0xC2F2, 0xC2F3, 0xC2F4, 0xC2F5, 0xC2F7, 0xC2FA, 0xC2FD, 0xC2FE, 0xC2FF, + 0xC301, 0xC302, 0xC303, 0xC304, 0xC305, 0xC306, 0xC307, 0xC30A, 0xC30B, + 0xC30E, 0xC30F, ERROR}, + { ERROR, 0xC310, 0xC311, 0xC312, 0xC316, 0xC317, 0xC319, 0xC31A, 0xC31B, + 0xC31D, 0xC31E, 0xC31F, 0xC320, 0xC321, 0xC322, 0xC323, 0xC326, 0xC327, + 0xC32A, 0xC32B, 0xC32C, 0xC32D, 0xC32E, 0xC32F, 0xC330, 0xC331, 0xC332, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC333, 0xC334, 0xC335, + 0xC336, 0xC337, 0xC338, 0xC339, 0xC33A, 0xC33B, 0xC33C, 0xC33D, 0xC33E, + 0xC33F, 0xC340, 0xC341, 0xC342, 0xC343, 0xC344, 0xC346, 0xC347, 0xC348, + 0xC349, 0xC34A, 0xC34B, 0xC34C, 0xC34D, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC34E, 0xC34F, 0xC350, 0xC351, 0xC352, 0xC353, 0xC354, + 0xC355, 0xC356, 0xC357, 0xC358, 0xC359, 0xC35A, 0xC35B, 0xC35C, 0xC35D, + 0xC35E, 0xC35F, 0xC360, 0xC361, 0xC362, 0xC363, 0xC364, 0xC365, 0xC366, + 0xC367, 0xC36A, 0xC36B, 0xC36D, 0xC36E, 0xC36F, 0xC371, 0xC373, 0xC374, + 0xC375, 0xC376, 0xC377, 0xC37A, 0xC37B, 0xC37E, 0xC37F, 0xC380, 0xC381, + 0xC382, 0xC383, 0xC385, 0xC386, 0xC387, 0xC389, 0xC38A, 0xC38B, 0xC38D, + 0xC38E, 0xC38F, 0xC390, 0xC391, 0xC392, 0xC393, 0xC394, 0xC395, 0xC396, + 0xC397, 0xC398, 0xC399, 0xC39A, 0xC39B, 0xC39C, 0xC39D, 0xC39E, 0xC39F, + 0xC3A0, 0xC3A1, 0xC3A2, 0xC3A3, 0xC3A4, 0xC3A5, 0xC3A6, 0xC3A7, 0xC3A8, + 0xC3A9, 0xC3AA, 0xC3AB, 0xC3AC, 0xC3AD, 0xC3AE, 0xC3AF, 0xC3B0, 0xC3B1, + 0xC3B2, 0xC3B3, 0xC3B4, 0xC3B5, 0xC3B6, 0xC3B7, 0xC3B8, 0xC3B9, 0xC3BA, + 0xC3BB, 0xC3BC, 0xC3BD, 0xC3BE, 0xC3BF, 0xC3C1, 0xC3C2, 0xC3C3, 0xC3C4, + 0xC3C5, 0xC3C6, 0xC3C7, 0xC3C8, 0xC3C9, 0xC3CA, 0xC3CB, 0xC3CC, 0xC3CD, + 0xC3CE, 0xC3CF, 0xC3D0, 0xC3D1, 0xC3D2, 0xC3D3, 0xC3D4, 0xC3D5, 0xC3D6, + 0xC3D7, 0xC3DA, ERROR}, + { ERROR, 0xC3DB, 0xC3DD, 0xC3DE, 0xC3E1, 0xC3E3, 0xC3E4, 0xC3E5, 0xC3E6, + 0xC3E7, 0xC3EA, 0xC3EB, 0xC3EC, 0xC3EE, 0xC3EF, 0xC3F0, 0xC3F1, 0xC3F2, + 0xC3F3, 0xC3F6, 0xC3F7, 0xC3F9, 0xC3FA, 0xC3FB, 0xC3FC, 0xC3FD, 0xC3FE, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC3FF, 0xC400, 0xC401, + 0xC402, 0xC403, 0xC404, 0xC405, 0xC406, 0xC407, 0xC409, 0xC40A, 0xC40B, + 0xC40C, 0xC40D, 0xC40E, 0xC40F, 0xC411, 0xC412, 0xC413, 0xC414, 0xC415, + 0xC416, 0xC417, 0xC418, 0xC419, 0xC41A, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC41B, 0xC41C, 0xC41D, 0xC41E, 0xC41F, 0xC420, 0xC421, + 0xC422, 0xC423, 0xC425, 0xC426, 0xC427, 0xC428, 0xC429, 0xC42A, 0xC42B, + 0xC42D, 0xC42E, 0xC42F, 0xC431, 0xC432, 0xC433, 0xC435, 0xC436, 0xC437, + 0xC438, 0xC439, 0xC43A, 0xC43B, 0xC43E, 0xC43F, 0xC440, 0xC441, 0xC442, + 0xC443, 0xC444, 0xC445, 0xC446, 0xC447, 0xC449, 0xC44A, 0xC44B, 0xC44C, + 0xC44D, 0xC44E, 0xC44F, 0xC450, 0xC451, 0xC452, 0xC453, 0xC454, 0xC455, + 0xC456, 0xC457, 0xC458, 0xC459, 0xC45A, 0xC45B, 0xC45C, 0xC45D, 0xC45E, + 0xC45F, 0xC460, 0xC461, 0xC462, 0xC463, 0xC466, 0xC467, 0xC469, 0xC46A, + 0xC46B, 0xC46D, 0xC46E, 0xC46F, 0xC470, 0xC471, 0xC472, 0xC473, 0xC476, + 0xC477, 0xC478, 0xC47A, 0xC47B, 0xC47C, 0xC47D, 0xC47E, 0xC47F, 0xC481, + 0xC482, 0xC483, 0xC484, 0xC485, 0xC486, 0xC487, 0xC488, 0xC489, 0xC48A, + 0xC48B, 0xC48C, 0xC48D, 0xC48E, 0xC48F, 0xC490, 0xC491, 0xC492, 0xC493, + 0xC495, 0xC496, 0xC497, 0xC498, 0xC499, 0xC49A, 0xC49B, 0xC49D, 0xC49E, + 0xC49F, 0xC4A0, 0xC4A1, 0xC4A2, 0xC4A3, 0xC4A4, 0xC4A5, 0xC4A6, 0xC4A7, + 0xC4A8, 0xC4A9, ERROR}, + { ERROR, 0xC4AA, 0xC4AB, 0xC4AC, 0xC4AD, 0xC4AE, 0xC4AF, 0xC4B0, 0xC4B1, + 0xC4B2, 0xC4B3, 0xC4B4, 0xC4B5, 0xC4B6, 0xC4B7, 0xC4B9, 0xC4BA, 0xC4BB, + 0xC4BD, 0xC4BE, 0xC4BF, 0xC4C0, 0xC4C1, 0xC4C2, 0xC4C3, 0xC4C4, 0xC4C5, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC4C6, 0xC4C7, 0xC4C8, + 0xC4C9, 0xC4CA, 0xC4CB, 0xC4CC, 0xC4CD, 0xC4CE, 0xC4CF, 0xC4D0, 0xC4D1, + 0xC4D2, 0xC4D3, 0xC4D4, 0xC4D5, 0xC4D6, 0xC4D7, 0xC4D8, 0xC4D9, 0xC4DA, + 0xC4DB, 0xC4DC, 0xC4DD, 0xC4DE, 0xC4DF, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC4E0, 0xC4E1, 0xC4E2, 0xC4E3, 0xC4E4, 0xC4E5, 0xC4E6, + 0xC4E7, 0xC4E8, 0xC4EA, 0xC4EB, 0xC4EC, 0xC4ED, 0xC4EE, 0xC4EF, 0xC4F2, + 0xC4F3, 0xC4F5, 0xC4F6, 0xC4F7, 0xC4F9, 0xC4FB, 0xC4FC, 0xC4FD, 0xC4FE, + 0xC502, 0xC503, 0xC504, 0xC505, 0xC506, 0xC507, 0xC508, 0xC509, 0xC50A, + 0xC50B, 0xC50D, 0xC50E, 0xC50F, 0xC511, 0xC512, 0xC513, 0xC515, 0xC516, + 0xC517, 0xC518, 0xC519, 0xC51A, 0xC51B, 0xC51D, 0xC51E, 0xC51F, 0xC520, + 0xC521, 0xC522, 0xC523, 0xC524, 0xC525, 0xC526, 0xC527, 0xC52A, 0xC52B, + 0xC52D, 0xC52E, 0xC52F, 0xC531, 0xC532, 0xC533, 0xC534, 0xC535, 0xC536, + 0xC537, 0xC53A, 0xC53C, 0xC53E, 0xC53F, 0xC540, 0xC541, 0xC542, 0xC543, + 0xC546, 0xC547, 0xC54B, 0xC54F, 0xC550, 0xC551, 0xC552, 0xC556, 0xC55A, + 0xC55B, 0xC55C, 0xC55F, 0xC562, 0xC563, 0xC565, 0xC566, 0xC567, 0xC569, + 0xC56A, 0xC56B, 0xC56C, 0xC56D, 0xC56E, 0xC56F, 0xC572, 0xC576, 0xC577, + 0xC578, 0xC579, 0xC57A, 0xC57B, 0xC57E, 0xC57F, 0xC581, 0xC582, 0xC583, + 0xC585, 0xC586, 0xC588, 0xC589, 0xC58A, 0xC58B, 0xC58E, 0xC590, 0xC592, + 0xC593, 0xC594, ERROR}, + { ERROR, 0xC596, 0xC599, 0xC59A, 0xC59B, 0xC59D, 0xC59E, 0xC59F, 0xC5A1, + 0xC5A2, 0xC5A3, 0xC5A4, 0xC5A5, 0xC5A6, 0xC5A7, 0xC5A8, 0xC5AA, 0xC5AB, + 0xC5AC, 0xC5AD, 0xC5AE, 0xC5AF, 0xC5B0, 0xC5B1, 0xC5B2, 0xC5B3, 0xC5B6, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC5B7, 0xC5BA, 0xC5BF, + 0xC5C0, 0xC5C1, 0xC5C2, 0xC5C3, 0xC5CB, 0xC5CD, 0xC5CF, 0xC5D2, 0xC5D3, + 0xC5D5, 0xC5D6, 0xC5D7, 0xC5D9, 0xC5DA, 0xC5DB, 0xC5DC, 0xC5DD, 0xC5DE, + 0xC5DF, 0xC5E2, 0xC5E4, 0xC5E6, 0xC5E7, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC5E8, 0xC5E9, 0xC5EA, 0xC5EB, 0xC5EF, 0xC5F1, 0xC5F2, + 0xC5F3, 0xC5F5, 0xC5F8, 0xC5F9, 0xC5FA, 0xC5FB, 0xC602, 0xC603, 0xC604, + 0xC609, 0xC60A, 0xC60B, 0xC60D, 0xC60E, 0xC60F, 0xC611, 0xC612, 0xC613, + 0xC614, 0xC615, 0xC616, 0xC617, 0xC61A, 0xC61D, 0xC61E, 0xC61F, 0xC620, + 0xC621, 0xC622, 0xC623, 0xC626, 0xC627, 0xC629, 0xC62A, 0xC62B, 0xC62F, + 0xC631, 0xC632, 0xC636, 0xC638, 0xC63A, 0xC63C, 0xC63D, 0xC63E, 0xC63F, + 0xC642, 0xC643, 0xC645, 0xC646, 0xC647, 0xC649, 0xC64A, 0xC64B, 0xC64C, + 0xC64D, 0xC64E, 0xC64F, 0xC652, 0xC656, 0xC657, 0xC658, 0xC659, 0xC65A, + 0xC65B, 0xC65E, 0xC65F, 0xC661, 0xC662, 0xC663, 0xC664, 0xC665, 0xC666, + 0xC667, 0xC668, 0xC669, 0xC66A, 0xC66B, 0xC66D, 0xC66E, 0xC670, 0xC672, + 0xC673, 0xC674, 0xC675, 0xC676, 0xC677, 0xC67A, 0xC67B, 0xC67D, 0xC67E, + 0xC67F, 0xC681, 0xC682, 0xC683, 0xC684, 0xC685, 0xC686, 0xC687, 0xC68A, + 0xC68C, 0xC68E, 0xC68F, 0xC690, 0xC691, 0xC692, 0xC693, 0xC696, 0xC697, + 0xC699, 0xC69A, 0xC69B, 0xC69D, 0xC69E, 0xC69F, 0xC6A0, 0xC6A1, 0xC6A2, + 0xC6A3, 0xC6A6, ERROR}, + { ERROR, 0xC6A8, 0xC6AA, 0xC6AB, 0xC6AC, 0xC6AD, 0xC6AE, 0xC6AF, 0xC6B2, + 0xC6B3, 0xC6B5, 0xC6B6, 0xC6B7, 0xC6BB, 0xC6BC, 0xC6BD, 0xC6BE, 0xC6BF, + 0xC6C2, 0xC6C4, 0xC6C6, 0xC6C7, 0xC6C8, 0xC6C9, 0xC6CA, 0xC6CB, 0xC6CE, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC6CF, 0xC6D1, 0xC6D2, + 0xC6D3, 0xC6D5, 0xC6D6, 0xC6D7, 0xC6D8, 0xC6D9, 0xC6DA, 0xC6DB, 0xC6DE, + 0xC6DF, 0xC6E2, 0xC6E3, 0xC6E4, 0xC6E5, 0xC6E6, 0xC6E7, 0xC6EA, 0xC6EB, + 0xC6ED, 0xC6EE, 0xC6EF, 0xC6F1, 0xC6F2, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC6F3, 0xC6F4, 0xC6F5, 0xC6F6, 0xC6F7, 0xC6FA, 0xC6FB, + 0xC6FC, 0xC6FE, 0xC6FF, 0xC700, 0xC701, 0xC702, 0xC703, 0xC706, 0xC707, + 0xC709, 0xC70A, 0xC70B, 0xC70D, 0xC70E, 0xC70F, 0xC710, 0xC711, 0xC712, + 0xC713, 0xC716, 0xC718, 0xC71A, 0xC71B, 0xC71C, 0xC71D, 0xC71E, 0xC71F, + 0xC722, 0xC723, 0xC725, 0xC726, 0xC727, 0xC729, 0xC72A, 0xC72B, 0xC72C, + 0xC72D, 0xC72E, 0xC72F, 0xC732, 0xC734, 0xC736, 0xC738, 0xC739, 0xC73A, + 0xC73B, 0xC73E, 0xC73F, 0xC741, 0xC742, 0xC743, 0xC745, 0xC746, 0xC747, + 0xC748, 0xC749, 0xC74B, 0xC74E, 0xC750, 0xC759, 0xC75A, 0xC75B, 0xC75D, + 0xC75E, 0xC75F, 0xC761, 0xC762, 0xC763, 0xC764, 0xC765, 0xC766, 0xC767, + 0xC769, 0xC76A, 0xC76C, 0xC76D, 0xC76E, 0xC76F, 0xC770, 0xC771, 0xC772, + 0xC773, 0xC776, 0xC777, 0xC779, 0xC77A, 0xC77B, 0xC77F, 0xC780, 0xC781, + 0xC782, 0xC786, 0xC78B, 0xC78C, 0xC78D, 0xC78F, 0xC792, 0xC793, 0xC795, + 0xC799, 0xC79B, 0xC79C, 0xC79D, 0xC79E, 0xC79F, 0xC7A2, 0xC7A7, 0xC7A8, + 0xC7A9, 0xC7AA, 0xC7AB, 0xC7AE, 0xC7AF, 0xC7B1, 0xC7B2, 0xC7B3, 0xC7B5, + 0xC7B6, 0xC7B7, ERROR}, + { ERROR, 0xC7B8, 0xC7B9, 0xC7BA, 0xC7BB, 0xC7BE, 0xC7C2, 0xC7C3, 0xC7C4, + 0xC7C5, 0xC7C6, 0xC7C7, 0xC7CA, 0xC7CB, 0xC7CD, 0xC7CF, 0xC7D1, 0xC7D2, + 0xC7D3, 0xC7D4, 0xC7D5, 0xC7D6, 0xC7D7, 0xC7D9, 0xC7DA, 0xC7DB, 0xC7DC, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC7DE, 0xC7DF, 0xC7E0, + 0xC7E1, 0xC7E2, 0xC7E3, 0xC7E5, 0xC7E6, 0xC7E7, 0xC7E9, 0xC7EA, 0xC7EB, + 0xC7ED, 0xC7EE, 0xC7EF, 0xC7F0, 0xC7F1, 0xC7F2, 0xC7F3, 0xC7F4, 0xC7F5, + 0xC7F6, 0xC7F7, 0xC7F8, 0xC7F9, 0xC7FA, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC7FB, 0xC7FC, 0xC7FD, 0xC7FE, 0xC7FF, 0xC802, 0xC803, + 0xC805, 0xC806, 0xC807, 0xC809, 0xC80B, 0xC80C, 0xC80D, 0xC80E, 0xC80F, + 0xC812, 0xC814, 0xC817, 0xC818, 0xC819, 0xC81A, 0xC81B, 0xC81E, 0xC81F, + 0xC821, 0xC822, 0xC823, 0xC825, 0xC826, 0xC827, 0xC828, 0xC829, 0xC82A, + 0xC82B, 0xC82E, 0xC830, 0xC832, 0xC833, 0xC834, 0xC835, 0xC836, 0xC837, + 0xC839, 0xC83A, 0xC83B, 0xC83D, 0xC83E, 0xC83F, 0xC841, 0xC842, 0xC843, + 0xC844, 0xC845, 0xC846, 0xC847, 0xC84A, 0xC84B, 0xC84E, 0xC84F, 0xC850, + 0xC851, 0xC852, 0xC853, 0xC855, 0xC856, 0xC857, 0xC858, 0xC859, 0xC85A, + 0xC85B, 0xC85C, 0xC85D, 0xC85E, 0xC85F, 0xC860, 0xC861, 0xC862, 0xC863, + 0xC864, 0xC865, 0xC866, 0xC867, 0xC868, 0xC869, 0xC86A, 0xC86B, 0xC86C, + 0xC86D, 0xC86E, 0xC86F, 0xC872, 0xC873, 0xC875, 0xC876, 0xC877, 0xC879, + 0xC87B, 0xC87C, 0xC87D, 0xC87E, 0xC87F, 0xC882, 0xC884, 0xC888, 0xC889, + 0xC88A, 0xC88E, 0xC88F, 0xC890, 0xC891, 0xC892, 0xC893, 0xC895, 0xC896, + 0xC897, 0xC898, 0xC899, 0xC89A, 0xC89B, 0xC89C, 0xC89E, 0xC8A0, 0xC8A2, + 0xC8A3, 0xC8A4, ERROR}, + { ERROR, 0xC8A5, 0xC8A6, 0xC8A7, 0xC8A9, 0xC8AA, 0xC8AB, 0xC8AC, 0xC8AD, + 0xC8AE, 0xC8AF, 0xC8B0, 0xC8B1, 0xC8B2, 0xC8B3, 0xC8B4, 0xC8B5, 0xC8B6, + 0xC8B7, 0xC8B8, 0xC8B9, 0xC8BA, 0xC8BB, 0xC8BE, 0xC8BF, 0xC8C0, 0xC8C1, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC8C2, 0xC8C3, 0xC8C5, + 0xC8C6, 0xC8C7, 0xC8C9, 0xC8CA, 0xC8CB, 0xC8CD, 0xC8CE, 0xC8CF, 0xC8D0, + 0xC8D1, 0xC8D2, 0xC8D3, 0xC8D6, 0xC8D8, 0xC8DA, 0xC8DB, 0xC8DC, 0xC8DD, + 0xC8DE, 0xC8DF, 0xC8E2, 0xC8E3, 0xC8E5, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC8E6, 0xC8E7, 0xC8E8, 0xC8E9, 0xC8EA, 0xC8EB, 0xC8EC, + 0xC8ED, 0xC8EE, 0xC8EF, 0xC8F0, 0xC8F1, 0xC8F2, 0xC8F3, 0xC8F4, 0xC8F6, + 0xC8F7, 0xC8F8, 0xC8F9, 0xC8FA, 0xC8FB, 0xC8FE, 0xC8FF, 0xC901, 0xC902, + 0xC903, 0xC907, 0xC908, 0xC909, 0xC90A, 0xC90B, 0xC90E, 0x3000, 0x3001, + 0x3002, 0x00B7, 0x2025, 0x2026, 0x00A8, 0x3003, 0x00AD, 0x2015, 0x2225, + 0xFF3C, 0x223C, 0x2018, 0x2019, 0x201C, 0x201D, 0x3014, 0x3015, 0x3008, + 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, + 0x00B1, 0x00D7, 0x00F7, 0x2260, 0x2264, 0x2265, 0x221E, 0x2234, 0x00B0, + 0x2032, 0x2033, 0x2103, 0x212B, 0xFFE0, 0xFFE1, 0xFFE5, 0x2642, 0x2640, + 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00A7, 0x203B, + 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7, 0x25C6, 0x25A1, 0x25A0, + 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x2192, 0x2190, 0x2191, 0x2193, 0x2194, + 0x3013, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, + 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, 0x2227, + 0x2228, 0xFFE2, ERROR}, + { ERROR, 0xC910, 0xC912, 0xC913, 0xC914, 0xC915, 0xC916, 0xC917, 0xC919, + 0xC91A, 0xC91B, 0xC91C, 0xC91D, 0xC91E, 0xC91F, 0xC920, 0xC921, 0xC922, + 0xC923, 0xC924, 0xC925, 0xC926, 0xC927, 0xC928, 0xC929, 0xC92A, 0xC92B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC92D, 0xC92E, 0xC92F, + 0xC930, 0xC931, 0xC932, 0xC933, 0xC935, 0xC936, 0xC937, 0xC938, 0xC939, + 0xC93A, 0xC93B, 0xC93C, 0xC93D, 0xC93E, 0xC93F, 0xC940, 0xC941, 0xC942, + 0xC943, 0xC944, 0xC945, 0xC946, 0xC947, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC948, 0xC949, 0xC94A, 0xC94B, 0xC94C, 0xC94D, 0xC94E, + 0xC94F, 0xC952, 0xC953, 0xC955, 0xC956, 0xC957, 0xC959, 0xC95A, 0xC95B, + 0xC95C, 0xC95D, 0xC95E, 0xC95F, 0xC962, 0xC964, 0xC965, 0xC966, 0xC967, + 0xC968, 0xC969, 0xC96A, 0xC96B, 0xC96D, 0xC96E, 0xC96F, 0x21D2, 0x21D4, + 0x2200, 0x2203, 0x00B4, 0xFF5E, 0x02C7, 0x02D8, 0x02DD, 0x02DA, 0x02D9, + 0x00B8, 0x02DB, 0x00A1, 0x00BF, 0x02D0, 0x222E, 0x2211, 0x220F, 0x00A4, + 0x2109, 0x2030, 0x25C1, 0x25C0, 0x25B7, 0x25B6, 0x2664, 0x2660, 0x2661, + 0x2665, 0x2667, 0x2663, 0x2299, 0x25C8, 0x25A3, 0x25D0, 0x25D1, 0x2592, + 0x25A4, 0x25A5, 0x25A8, 0x25A7, 0x25A6, 0x25A9, 0x2668, 0x260F, 0x260E, + 0x261C, 0x261E, 0x00B6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, + 0x2198, 0x266D, 0x2669, 0x266A, 0x266C, 0x327F, 0x321C, 0x2116, 0x33C7, + 0x2122, 0x33C2, 0x33D8, 0x2121, 0x20AC, 0x00AE, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xC971, 0xC972, 0xC973, 0xC975, 0xC976, 0xC977, 0xC978, 0xC979, + 0xC97A, 0xC97B, 0xC97D, 0xC97E, 0xC97F, 0xC980, 0xC981, 0xC982, 0xC983, + 0xC984, 0xC985, 0xC986, 0xC987, 0xC98A, 0xC98B, 0xC98D, 0xC98E, 0xC98F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xC991, 0xC992, 0xC993, + 0xC994, 0xC995, 0xC996, 0xC997, 0xC99A, 0xC99C, 0xC99E, 0xC99F, 0xC9A0, + 0xC9A1, 0xC9A2, 0xC9A3, 0xC9A4, 0xC9A5, 0xC9A6, 0xC9A7, 0xC9A8, 0xC9A9, + 0xC9AA, 0xC9AB, 0xC9AC, 0xC9AD, 0xC9AE, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xC9AF, 0xC9B0, 0xC9B1, 0xC9B2, 0xC9B3, 0xC9B4, 0xC9B5, + 0xC9B6, 0xC9B7, 0xC9B8, 0xC9B9, 0xC9BA, 0xC9BB, 0xC9BC, 0xC9BD, 0xC9BE, + 0xC9BF, 0xC9C2, 0xC9C3, 0xC9C5, 0xC9C6, 0xC9C9, 0xC9CB, 0xC9CC, 0xC9CD, + 0xC9CE, 0xC9CF, 0xC9D2, 0xC9D4, 0xC9D7, 0xC9D8, 0xC9DB, 0xFF01, 0xFF02, + 0xFF03, 0xFF04, 0xFF05, 0xFF06, 0xFF07, 0xFF08, 0xFF09, 0xFF0A, 0xFF0B, + 0xFF0C, 0xFF0D, 0xFF0E, 0xFF0F, 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, + 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0xFF1A, 0xFF1B, 0xFF1C, 0xFF1D, + 0xFF1E, 0xFF1F, 0xFF20, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, + 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, + 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, + 0xFF39, 0xFF3A, 0xFF3B, 0xFFE6, 0xFF3D, 0xFF3E, 0xFF3F, 0xFF40, 0xFF41, + 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, + 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, + 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0xFF5B, 0xFF5C, + 0xFF5D, 0xFFE3, ERROR}, + { ERROR, 0xC9DE, 0xC9DF, 0xC9E1, 0xC9E3, 0xC9E5, 0xC9E6, 0xC9E8, 0xC9E9, + 0xC9EA, 0xC9EB, 0xC9EE, 0xC9F2, 0xC9F3, 0xC9F4, 0xC9F5, 0xC9F6, 0xC9F7, + 0xC9FA, 0xC9FB, 0xC9FD, 0xC9FE, 0xC9FF, 0xCA01, 0xCA02, 0xCA03, 0xCA04, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCA05, 0xCA06, 0xCA07, + 0xCA0A, 0xCA0E, 0xCA0F, 0xCA10, 0xCA11, 0xCA12, 0xCA13, 0xCA15, 0xCA16, + 0xCA17, 0xCA19, 0xCA1A, 0xCA1B, 0xCA1C, 0xCA1D, 0xCA1E, 0xCA1F, 0xCA20, + 0xCA21, 0xCA22, 0xCA23, 0xCA24, 0xCA25, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCA26, 0xCA27, 0xCA28, 0xCA2A, 0xCA2B, 0xCA2C, 0xCA2D, + 0xCA2E, 0xCA2F, 0xCA30, 0xCA31, 0xCA32, 0xCA33, 0xCA34, 0xCA35, 0xCA36, + 0xCA37, 0xCA38, 0xCA39, 0xCA3A, 0xCA3B, 0xCA3C, 0xCA3D, 0xCA3E, 0xCA3F, + 0xCA40, 0xCA41, 0xCA42, 0xCA43, 0xCA44, 0xCA45, 0xCA46, 0x3131, 0x3132, + 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313A, 0x313B, + 0x313C, 0x313D, 0x313E, 0x313F, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, + 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314A, 0x314B, 0x314C, 0x314D, + 0x314E, 0x314F, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, + 0x3157, 0x3158, 0x3159, 0x315A, 0x315B, 0x315C, 0x315D, 0x315E, 0x315F, + 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, + 0x3169, 0x316A, 0x316B, 0x316C, 0x316D, 0x316E, 0x316F, 0x3170, 0x3171, + 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178, 0x3179, 0x317A, + 0x317B, 0x317C, 0x317D, 0x317E, 0x317F, 0x3180, 0x3181, 0x3182, 0x3183, + 0x3184, 0x3185, 0x3186, 0x3187, 0x3188, 0x3189, 0x318A, 0x318B, 0x318C, + 0x318D, 0x318E, ERROR}, + { ERROR, 0xCA47, 0xCA48, 0xCA49, 0xCA4A, 0xCA4B, 0xCA4E, 0xCA4F, 0xCA51, + 0xCA52, 0xCA53, 0xCA55, 0xCA56, 0xCA57, 0xCA58, 0xCA59, 0xCA5A, 0xCA5B, + 0xCA5E, 0xCA62, 0xCA63, 0xCA64, 0xCA65, 0xCA66, 0xCA67, 0xCA69, 0xCA6A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCA6B, 0xCA6C, 0xCA6D, + 0xCA6E, 0xCA6F, 0xCA70, 0xCA71, 0xCA72, 0xCA73, 0xCA74, 0xCA75, 0xCA76, + 0xCA77, 0xCA78, 0xCA79, 0xCA7A, 0xCA7B, 0xCA7C, 0xCA7E, 0xCA7F, 0xCA80, + 0xCA81, 0xCA82, 0xCA83, 0xCA85, 0xCA86, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCA87, 0xCA88, 0xCA89, 0xCA8A, 0xCA8B, 0xCA8C, 0xCA8D, + 0xCA8E, 0xCA8F, 0xCA90, 0xCA91, 0xCA92, 0xCA93, 0xCA94, 0xCA95, 0xCA96, + 0xCA97, 0xCA99, 0xCA9A, 0xCA9B, 0xCA9C, 0xCA9D, 0xCA9E, 0xCA9F, 0xCAA0, + 0xCAA1, 0xCAA2, 0xCAA3, 0xCAA4, 0xCAA5, 0xCAA6, 0xCAA7, 0x2170, 0x2171, + 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, ERROR, + ERROR, ERROR, ERROR, ERROR, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, + 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, + 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, + 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x03B1, + 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, + 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, + 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCAA8, 0xCAA9, 0xCAAA, 0xCAAB, 0xCAAC, 0xCAAD, 0xCAAE, 0xCAAF, + 0xCAB0, 0xCAB1, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, 0xCAB7, 0xCAB8, + 0xCAB9, 0xCABA, 0xCABB, 0xCABE, 0xCABF, 0xCAC1, 0xCAC2, 0xCAC3, 0xCAC5, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCAC6, 0xCAC7, 0xCAC8, + 0xCAC9, 0xCACA, 0xCACB, 0xCACE, 0xCAD0, 0xCAD2, 0xCAD4, 0xCAD5, 0xCAD6, + 0xCAD7, 0xCADA, 0xCADB, 0xCADC, 0xCADD, 0xCADE, 0xCADF, 0xCAE1, 0xCAE2, + 0xCAE3, 0xCAE4, 0xCAE5, 0xCAE6, 0xCAE7, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCAE8, 0xCAE9, 0xCAEA, 0xCAEB, 0xCAED, 0xCAEE, 0xCAEF, + 0xCAF0, 0xCAF1, 0xCAF2, 0xCAF3, 0xCAF5, 0xCAF6, 0xCAF7, 0xCAF8, 0xCAF9, + 0xCAFA, 0xCAFB, 0xCAFC, 0xCAFD, 0xCAFE, 0xCAFF, 0xCB00, 0xCB01, 0xCB02, + 0xCB03, 0xCB04, 0xCB05, 0xCB06, 0xCB07, 0xCB09, 0xCB0A, 0x2500, 0x2502, + 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, 0x2534, 0x253C, + 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, + 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, + 0x2525, 0x2538, 0x2542, 0x2512, 0x2511, 0x251A, 0x2519, 0x2516, 0x2515, + 0x250E, 0x250D, 0x251E, 0x251F, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, + 0x252A, 0x252D, 0x252E, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253A, + 0x253D, 0x253E, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, + 0x2548, 0x2549, 0x254A, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCB0B, 0xCB0C, 0xCB0D, 0xCB0E, 0xCB0F, 0xCB11, 0xCB12, 0xCB13, + 0xCB15, 0xCB16, 0xCB17, 0xCB19, 0xCB1A, 0xCB1B, 0xCB1C, 0xCB1D, 0xCB1E, + 0xCB1F, 0xCB22, 0xCB23, 0xCB24, 0xCB25, 0xCB26, 0xCB27, 0xCB28, 0xCB29, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCB2A, 0xCB2B, 0xCB2C, + 0xCB2D, 0xCB2E, 0xCB2F, 0xCB30, 0xCB31, 0xCB32, 0xCB33, 0xCB34, 0xCB35, + 0xCB36, 0xCB37, 0xCB38, 0xCB39, 0xCB3A, 0xCB3B, 0xCB3C, 0xCB3D, 0xCB3E, + 0xCB3F, 0xCB40, 0xCB42, 0xCB43, 0xCB44, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCB45, 0xCB46, 0xCB47, 0xCB4A, 0xCB4B, 0xCB4D, 0xCB4E, + 0xCB4F, 0xCB51, 0xCB52, 0xCB53, 0xCB54, 0xCB55, 0xCB56, 0xCB57, 0xCB5A, + 0xCB5B, 0xCB5C, 0xCB5E, 0xCB5F, 0xCB60, 0xCB61, 0xCB62, 0xCB63, 0xCB65, + 0xCB66, 0xCB67, 0xCB68, 0xCB69, 0xCB6A, 0xCB6B, 0xCB6C, 0x3395, 0x3396, + 0x3397, 0x2113, 0x3398, 0x33C4, 0x33A3, 0x33A4, 0x33A5, 0x33A6, 0x3399, + 0x339A, 0x339B, 0x339C, 0x339D, 0x339E, 0x339F, 0x33A0, 0x33A1, 0x33A2, + 0x33CA, 0x338D, 0x338E, 0x338F, 0x33CF, 0x3388, 0x3389, 0x33C8, 0x33A7, + 0x33A8, 0x33B0, 0x33B1, 0x33B2, 0x33B3, 0x33B4, 0x33B5, 0x33B6, 0x33B7, + 0x33B8, 0x33B9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33BA, 0x33BB, + 0x33BC, 0x33BD, 0x33BE, 0x33BF, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394, + 0x2126, 0x33C0, 0x33C1, 0x338A, 0x338B, 0x338C, 0x33D6, 0x33C5, 0x33AD, + 0x33AE, 0x33AF, 0x33DB, 0x33A9, 0x33AA, 0x33AB, 0x33AC, 0x33DD, 0x33D0, + 0x33D3, 0x33C3, 0x33C9, 0x33DC, 0x33C6, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCB6D, 0xCB6E, 0xCB6F, 0xCB70, 0xCB71, 0xCB72, 0xCB73, 0xCB74, + 0xCB75, 0xCB76, 0xCB77, 0xCB7A, 0xCB7B, 0xCB7C, 0xCB7D, 0xCB7E, 0xCB7F, + 0xCB80, 0xCB81, 0xCB82, 0xCB83, 0xCB84, 0xCB85, 0xCB86, 0xCB87, 0xCB88, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCB89, 0xCB8A, 0xCB8B, + 0xCB8C, 0xCB8D, 0xCB8E, 0xCB8F, 0xCB90, 0xCB91, 0xCB92, 0xCB93, 0xCB94, + 0xCB95, 0xCB96, 0xCB97, 0xCB98, 0xCB99, 0xCB9A, 0xCB9B, 0xCB9D, 0xCB9E, + 0xCB9F, 0xCBA0, 0xCBA1, 0xCBA2, 0xCBA3, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCBA4, 0xCBA5, 0xCBA6, 0xCBA7, 0xCBA8, 0xCBA9, 0xCBAA, + 0xCBAB, 0xCBAC, 0xCBAD, 0xCBAE, 0xCBAF, 0xCBB0, 0xCBB1, 0xCBB2, 0xCBB3, + 0xCBB4, 0xCBB5, 0xCBB6, 0xCBB7, 0xCBB9, 0xCBBA, 0xCBBB, 0xCBBC, 0xCBBD, + 0xCBBE, 0xCBBF, 0xCBC0, 0xCBC1, 0xCBC2, 0xCBC3, 0xCBC4, 0x00C6, 0x00D0, + 0x00AA, 0x0126, ERROR, 0x0132, ERROR, 0x013F, 0x0141, 0x00D8, 0x0152, + 0x00BA, 0x00DE, 0x0166, 0x014A, ERROR, 0x3260, 0x3261, 0x3262, 0x3263, + 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326A, 0x326B, 0x326C, + 0x326D, 0x326E, 0x326F, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, + 0x3276, 0x3277, 0x3278, 0x3279, 0x327A, 0x327B, 0x24D0, 0x24D1, 0x24D2, + 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24DB, + 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, 0x24E3, 0x24E4, + 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x2460, 0x2461, 0x2462, 0x2463, + 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246A, 0x246B, 0x246C, + 0x246D, 0x246E, 0x00BD, 0x2153, 0x2154, 0x00BC, 0x00BE, 0x215B, 0x215C, + 0x215D, 0x215E, ERROR}, + { ERROR, 0xCBC5, 0xCBC6, 0xCBC7, 0xCBC8, 0xCBC9, 0xCBCA, 0xCBCB, 0xCBCC, + 0xCBCD, 0xCBCE, 0xCBCF, 0xCBD0, 0xCBD1, 0xCBD2, 0xCBD3, 0xCBD5, 0xCBD6, + 0xCBD7, 0xCBD8, 0xCBD9, 0xCBDA, 0xCBDB, 0xCBDC, 0xCBDD, 0xCBDE, 0xCBDF, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCBE0, 0xCBE1, 0xCBE2, + 0xCBE3, 0xCBE5, 0xCBE6, 0xCBE8, 0xCBEA, 0xCBEB, 0xCBEC, 0xCBED, 0xCBEE, + 0xCBEF, 0xCBF0, 0xCBF1, 0xCBF2, 0xCBF3, 0xCBF4, 0xCBF5, 0xCBF6, 0xCBF7, + 0xCBF8, 0xCBF9, 0xCBFA, 0xCBFB, 0xCBFC, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCBFD, 0xCBFE, 0xCBFF, 0xCC00, 0xCC01, 0xCC02, 0xCC03, + 0xCC04, 0xCC05, 0xCC06, 0xCC07, 0xCC08, 0xCC09, 0xCC0A, 0xCC0B, 0xCC0E, + 0xCC0F, 0xCC11, 0xCC12, 0xCC13, 0xCC15, 0xCC16, 0xCC17, 0xCC18, 0xCC19, + 0xCC1A, 0xCC1B, 0xCC1E, 0xCC1F, 0xCC20, 0xCC23, 0xCC24, 0x00E6, 0x0111, + 0x00F0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140, 0x0142, 0x00F8, 0x0153, + 0x00DF, 0x00FE, 0x0167, 0x014B, 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, + 0x3204, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209, 0x320A, 0x320B, 0x320C, + 0x320D, 0x320E, 0x320F, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, + 0x3216, 0x3217, 0x3218, 0x3219, 0x321A, 0x321B, 0x249C, 0x249D, 0x249E, + 0x249F, 0x24A0, 0x24A1, 0x24A2, 0x24A3, 0x24A4, 0x24A5, 0x24A6, 0x24A7, + 0x24A8, 0x24A9, 0x24AA, 0x24AB, 0x24AC, 0x24AD, 0x24AE, 0x24AF, 0x24B0, + 0x24B1, 0x24B2, 0x24B3, 0x24B4, 0x24B5, 0x2474, 0x2475, 0x2476, 0x2477, + 0x2478, 0x2479, 0x247A, 0x247B, 0x247C, 0x247D, 0x247E, 0x247F, 0x2480, + 0x2481, 0x2482, 0x00B9, 0x00B2, 0x00B3, 0x2074, 0x207F, 0x2081, 0x2082, + 0x2083, 0x2084, ERROR}, + { ERROR, 0xCC25, 0xCC26, 0xCC2A, 0xCC2B, 0xCC2D, 0xCC2F, 0xCC31, 0xCC32, + 0xCC33, 0xCC34, 0xCC35, 0xCC36, 0xCC37, 0xCC3A, 0xCC3F, 0xCC40, 0xCC41, + 0xCC42, 0xCC43, 0xCC46, 0xCC47, 0xCC49, 0xCC4A, 0xCC4B, 0xCC4D, 0xCC4E, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCC4F, 0xCC50, 0xCC51, + 0xCC52, 0xCC53, 0xCC56, 0xCC5A, 0xCC5B, 0xCC5C, 0xCC5D, 0xCC5E, 0xCC5F, + 0xCC61, 0xCC62, 0xCC63, 0xCC65, 0xCC67, 0xCC69, 0xCC6A, 0xCC6B, 0xCC6C, + 0xCC6D, 0xCC6E, 0xCC6F, 0xCC71, 0xCC72, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCC73, 0xCC74, 0xCC76, 0xCC77, 0xCC78, 0xCC79, 0xCC7A, + 0xCC7B, 0xCC7C, 0xCC7D, 0xCC7E, 0xCC7F, 0xCC80, 0xCC81, 0xCC82, 0xCC83, + 0xCC84, 0xCC85, 0xCC86, 0xCC87, 0xCC88, 0xCC89, 0xCC8A, 0xCC8B, 0xCC8C, + 0xCC8D, 0xCC8E, 0xCC8F, 0xCC90, 0xCC91, 0xCC92, 0xCC93, 0x3041, 0x3042, + 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, + 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, + 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, + 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, + 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, + 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, + 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, + 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, + 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCC94, 0xCC95, 0xCC96, 0xCC97, 0xCC9A, 0xCC9B, 0xCC9D, 0xCC9E, + 0xCC9F, 0xCCA1, 0xCCA2, 0xCCA3, 0xCCA4, 0xCCA5, 0xCCA6, 0xCCA7, 0xCCAA, + 0xCCAE, 0xCCAF, 0xCCB0, 0xCCB1, 0xCCB2, 0xCCB3, 0xCCB6, 0xCCB7, 0xCCB9, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCCBA, 0xCCBB, 0xCCBD, + 0xCCBE, 0xCCBF, 0xCCC0, 0xCCC1, 0xCCC2, 0xCCC3, 0xCCC6, 0xCCC8, 0xCCCA, + 0xCCCB, 0xCCCC, 0xCCCD, 0xCCCE, 0xCCCF, 0xCCD1, 0xCCD2, 0xCCD3, 0xCCD5, + 0xCCD6, 0xCCD7, 0xCCD8, 0xCCD9, 0xCCDA, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCCDB, 0xCCDC, 0xCCDD, 0xCCDE, 0xCCDF, 0xCCE0, 0xCCE1, + 0xCCE2, 0xCCE3, 0xCCE5, 0xCCE6, 0xCCE7, 0xCCE8, 0xCCE9, 0xCCEA, 0xCCEB, + 0xCCED, 0xCCEE, 0xCCEF, 0xCCF1, 0xCCF2, 0xCCF3, 0xCCF4, 0xCCF5, 0xCCF6, + 0xCCF7, 0xCCF8, 0xCCF9, 0xCCFA, 0xCCFB, 0xCCFC, 0xCCFD, 0x30A1, 0x30A2, + 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30AB, + 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, + 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, + 0x30BE, 0x30BF, 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, + 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, + 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, + 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0, 0x30E1, + 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, 0x30E9, 0x30EA, + 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, + 0x30F4, 0x30F5, 0x30F6, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCCFE, 0xCCFF, 0xCD00, 0xCD02, 0xCD03, 0xCD04, 0xCD05, 0xCD06, + 0xCD07, 0xCD0A, 0xCD0B, 0xCD0D, 0xCD0E, 0xCD0F, 0xCD11, 0xCD12, 0xCD13, + 0xCD14, 0xCD15, 0xCD16, 0xCD17, 0xCD1A, 0xCD1C, 0xCD1E, 0xCD1F, 0xCD20, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCD21, 0xCD22, 0xCD23, + 0xCD25, 0xCD26, 0xCD27, 0xCD29, 0xCD2A, 0xCD2B, 0xCD2D, 0xCD2E, 0xCD2F, + 0xCD30, 0xCD31, 0xCD32, 0xCD33, 0xCD34, 0xCD35, 0xCD36, 0xCD37, 0xCD38, + 0xCD3A, 0xCD3B, 0xCD3C, 0xCD3D, 0xCD3E, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCD3F, 0xCD40, 0xCD41, 0xCD42, 0xCD43, 0xCD44, 0xCD45, + 0xCD46, 0xCD47, 0xCD48, 0xCD49, 0xCD4A, 0xCD4B, 0xCD4C, 0xCD4D, 0xCD4E, + 0xCD4F, 0xCD50, 0xCD51, 0xCD52, 0xCD53, 0xCD54, 0xCD55, 0xCD56, 0xCD57, + 0xCD58, 0xCD59, 0xCD5A, 0xCD5B, 0xCD5D, 0xCD5E, 0xCD5F, 0x0410, 0x0411, + 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, + 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, + 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, + 0x042C, 0x042D, 0x042E, 0x042F, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, + 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, + 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCD61, 0xCD62, 0xCD63, 0xCD65, 0xCD66, 0xCD67, 0xCD68, 0xCD69, + 0xCD6A, 0xCD6B, 0xCD6E, 0xCD70, 0xCD72, 0xCD73, 0xCD74, 0xCD75, 0xCD76, + 0xCD77, 0xCD79, 0xCD7A, 0xCD7B, 0xCD7C, 0xCD7D, 0xCD7E, 0xCD7F, 0xCD80, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCD81, 0xCD82, 0xCD83, + 0xCD84, 0xCD85, 0xCD86, 0xCD87, 0xCD89, 0xCD8A, 0xCD8B, 0xCD8C, 0xCD8D, + 0xCD8E, 0xCD8F, 0xCD90, 0xCD91, 0xCD92, 0xCD93, 0xCD96, 0xCD97, 0xCD99, + 0xCD9A, 0xCD9B, 0xCD9D, 0xCD9E, 0xCD9F, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCDA0, 0xCDA1, 0xCDA2, 0xCDA3, 0xCDA6, 0xCDA8, 0xCDAA, + 0xCDAB, 0xCDAC, 0xCDAD, 0xCDAE, 0xCDAF, 0xCDB1, 0xCDB2, 0xCDB3, 0xCDB4, + 0xCDB5, 0xCDB6, 0xCDB7, 0xCDB8, 0xCDB9, 0xCDBA, 0xCDBB, 0xCDBC, 0xCDBD, + 0xCDBE, 0xCDBF, 0xCDC0, 0xCDC1, 0xCDC2, 0xCDC3, 0xCDC5, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCDC6, 0xCDC7, 0xCDC8, 0xCDC9, 0xCDCA, 0xCDCB, 0xCDCD, 0xCDCE, + 0xCDCF, 0xCDD1, 0xCDD2, 0xCDD3, 0xCDD4, 0xCDD5, 0xCDD6, 0xCDD7, 0xCDD8, + 0xCDD9, 0xCDDA, 0xCDDB, 0xCDDC, 0xCDDD, 0xCDDE, 0xCDDF, 0xCDE0, 0xCDE1, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCDE2, 0xCDE3, 0xCDE4, + 0xCDE5, 0xCDE6, 0xCDE7, 0xCDE9, 0xCDEA, 0xCDEB, 0xCDED, 0xCDEE, 0xCDEF, + 0xCDF1, 0xCDF2, 0xCDF3, 0xCDF4, 0xCDF5, 0xCDF6, 0xCDF7, 0xCDFA, 0xCDFC, + 0xCDFE, 0xCDFF, 0xCE00, 0xCE01, 0xCE02, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCE03, 0xCE05, 0xCE06, 0xCE07, 0xCE09, 0xCE0A, 0xCE0B, + 0xCE0D, 0xCE0E, 0xCE0F, 0xCE10, 0xCE11, 0xCE12, 0xCE13, 0xCE15, 0xCE16, + 0xCE17, 0xCE18, 0xCE1A, 0xCE1B, 0xCE1C, 0xCE1D, 0xCE1E, 0xCE1F, 0xCE22, + 0xCE23, 0xCE25, 0xCE26, 0xCE27, 0xCE29, 0xCE2A, 0xCE2B, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCE2C, 0xCE2D, 0xCE2E, 0xCE2F, 0xCE32, 0xCE34, 0xCE36, 0xCE37, + 0xCE38, 0xCE39, 0xCE3A, 0xCE3B, 0xCE3C, 0xCE3D, 0xCE3E, 0xCE3F, 0xCE40, + 0xCE41, 0xCE42, 0xCE43, 0xCE44, 0xCE45, 0xCE46, 0xCE47, 0xCE48, 0xCE49, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCE4A, 0xCE4B, 0xCE4C, + 0xCE4D, 0xCE4E, 0xCE4F, 0xCE50, 0xCE51, 0xCE52, 0xCE53, 0xCE54, 0xCE55, + 0xCE56, 0xCE57, 0xCE5A, 0xCE5B, 0xCE5D, 0xCE5E, 0xCE62, 0xCE63, 0xCE64, + 0xCE65, 0xCE66, 0xCE67, 0xCE6A, 0xCE6C, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCE6E, 0xCE6F, 0xCE70, 0xCE71, 0xCE72, 0xCE73, 0xCE76, + 0xCE77, 0xCE79, 0xCE7A, 0xCE7B, 0xCE7D, 0xCE7E, 0xCE7F, 0xCE80, 0xCE81, + 0xCE82, 0xCE83, 0xCE86, 0xCE88, 0xCE8A, 0xCE8B, 0xCE8C, 0xCE8D, 0xCE8E, + 0xCE8F, 0xCE92, 0xCE93, 0xCE95, 0xCE96, 0xCE97, 0xCE99, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, 0xCE9A, 0xCE9B, 0xCE9C, 0xCE9D, 0xCE9E, 0xCE9F, 0xCEA2, 0xCEA6, + 0xCEA7, 0xCEA8, 0xCEA9, 0xCEAA, 0xCEAB, 0xCEAE, 0xCEAF, 0xCEB0, 0xCEB1, + 0xCEB2, 0xCEB3, 0xCEB4, 0xCEB5, 0xCEB6, 0xCEB7, 0xCEB8, 0xCEB9, 0xCEBA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCEBB, 0xCEBC, 0xCEBD, + 0xCEBE, 0xCEBF, 0xCEC0, 0xCEC2, 0xCEC3, 0xCEC4, 0xCEC5, 0xCEC6, 0xCEC7, + 0xCEC8, 0xCEC9, 0xCECA, 0xCECB, 0xCECC, 0xCECD, 0xCECE, 0xCECF, 0xCED0, + 0xCED1, 0xCED2, 0xCED3, 0xCED4, 0xCED5, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCED6, 0xCED7, 0xCED8, 0xCED9, 0xCEDA, 0xCEDB, 0xCEDC, + 0xCEDD, 0xCEDE, 0xCEDF, 0xCEE0, 0xCEE1, 0xCEE2, 0xCEE3, 0xCEE6, 0xCEE7, + 0xCEE9, 0xCEEA, 0xCEED, 0xCEEE, 0xCEEF, 0xCEF0, 0xCEF1, 0xCEF2, 0xCEF3, + 0xCEF6, 0xCEFA, 0xCEFB, 0xCEFC, 0xCEFD, 0xCEFE, 0xCEFF, 0xAC00, 0xAC01, + 0xAC04, 0xAC07, 0xAC08, 0xAC09, 0xAC0A, 0xAC10, 0xAC11, 0xAC12, 0xAC13, + 0xAC14, 0xAC15, 0xAC16, 0xAC17, 0xAC19, 0xAC1A, 0xAC1B, 0xAC1C, 0xAC1D, + 0xAC20, 0xAC24, 0xAC2C, 0xAC2D, 0xAC2F, 0xAC30, 0xAC31, 0xAC38, 0xAC39, + 0xAC3C, 0xAC40, 0xAC4B, 0xAC4D, 0xAC54, 0xAC58, 0xAC5C, 0xAC70, 0xAC71, + 0xAC74, 0xAC77, 0xAC78, 0xAC7A, 0xAC80, 0xAC81, 0xAC83, 0xAC84, 0xAC85, + 0xAC86, 0xAC89, 0xAC8A, 0xAC8B, 0xAC8C, 0xAC90, 0xAC94, 0xAC9C, 0xAC9D, + 0xAC9F, 0xACA0, 0xACA1, 0xACA8, 0xACA9, 0xACAA, 0xACAC, 0xACAF, 0xACB0, + 0xACB8, 0xACB9, 0xACBB, 0xACBC, 0xACBD, 0xACC1, 0xACC4, 0xACC8, 0xACCC, + 0xACD5, 0xACD7, 0xACE0, 0xACE1, 0xACE4, 0xACE7, 0xACE8, 0xACEA, 0xACEC, + 0xACEF, 0xACF0, 0xACF1, 0xACF3, 0xACF5, 0xACF6, 0xACFC, 0xACFD, 0xAD00, + 0xAD04, 0xAD06, ERROR}, + { ERROR, 0xCF02, 0xCF03, 0xCF05, 0xCF06, 0xCF07, 0xCF09, 0xCF0A, 0xCF0B, + 0xCF0C, 0xCF0D, 0xCF0E, 0xCF0F, 0xCF12, 0xCF14, 0xCF16, 0xCF17, 0xCF18, + 0xCF19, 0xCF1A, 0xCF1B, 0xCF1D, 0xCF1E, 0xCF1F, 0xCF21, 0xCF22, 0xCF23, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCF25, 0xCF26, 0xCF27, + 0xCF28, 0xCF29, 0xCF2A, 0xCF2B, 0xCF2E, 0xCF32, 0xCF33, 0xCF34, 0xCF35, + 0xCF36, 0xCF37, 0xCF39, 0xCF3A, 0xCF3B, 0xCF3C, 0xCF3D, 0xCF3E, 0xCF3F, + 0xCF40, 0xCF41, 0xCF42, 0xCF43, 0xCF44, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCF45, 0xCF46, 0xCF47, 0xCF48, 0xCF49, 0xCF4A, 0xCF4B, + 0xCF4C, 0xCF4D, 0xCF4E, 0xCF4F, 0xCF50, 0xCF51, 0xCF52, 0xCF53, 0xCF56, + 0xCF57, 0xCF59, 0xCF5A, 0xCF5B, 0xCF5D, 0xCF5E, 0xCF5F, 0xCF60, 0xCF61, + 0xCF62, 0xCF63, 0xCF66, 0xCF68, 0xCF6A, 0xCF6B, 0xCF6C, 0xAD0C, 0xAD0D, + 0xAD0F, 0xAD11, 0xAD18, 0xAD1C, 0xAD20, 0xAD29, 0xAD2C, 0xAD2D, 0xAD34, + 0xAD35, 0xAD38, 0xAD3C, 0xAD44, 0xAD45, 0xAD47, 0xAD49, 0xAD50, 0xAD54, + 0xAD58, 0xAD61, 0xAD63, 0xAD6C, 0xAD6D, 0xAD70, 0xAD73, 0xAD74, 0xAD75, + 0xAD76, 0xAD7B, 0xAD7C, 0xAD7D, 0xAD7F, 0xAD81, 0xAD82, 0xAD88, 0xAD89, + 0xAD8C, 0xAD90, 0xAD9C, 0xAD9D, 0xADA4, 0xADB7, 0xADC0, 0xADC1, 0xADC4, + 0xADC8, 0xADD0, 0xADD1, 0xADD3, 0xADDC, 0xADE0, 0xADE4, 0xADF8, 0xADF9, + 0xADFC, 0xADFF, 0xAE00, 0xAE01, 0xAE08, 0xAE09, 0xAE0B, 0xAE0D, 0xAE14, + 0xAE30, 0xAE31, 0xAE34, 0xAE37, 0xAE38, 0xAE3A, 0xAE40, 0xAE41, 0xAE43, + 0xAE45, 0xAE46, 0xAE4A, 0xAE4C, 0xAE4D, 0xAE4E, 0xAE50, 0xAE54, 0xAE56, + 0xAE5C, 0xAE5D, 0xAE5F, 0xAE60, 0xAE61, 0xAE65, 0xAE68, 0xAE69, 0xAE6C, + 0xAE70, 0xAE78, ERROR}, + { ERROR, 0xCF6D, 0xCF6E, 0xCF6F, 0xCF72, 0xCF73, 0xCF75, 0xCF76, 0xCF77, + 0xCF79, 0xCF7A, 0xCF7B, 0xCF7C, 0xCF7D, 0xCF7E, 0xCF7F, 0xCF81, 0xCF82, + 0xCF83, 0xCF84, 0xCF86, 0xCF87, 0xCF88, 0xCF89, 0xCF8A, 0xCF8B, 0xCF8D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCF8E, 0xCF8F, 0xCF90, + 0xCF91, 0xCF92, 0xCF93, 0xCF94, 0xCF95, 0xCF96, 0xCF97, 0xCF98, 0xCF99, + 0xCF9A, 0xCF9B, 0xCF9C, 0xCF9D, 0xCF9E, 0xCF9F, 0xCFA0, 0xCFA2, 0xCFA3, + 0xCFA4, 0xCFA5, 0xCFA6, 0xCFA7, 0xCFA9, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xCFAA, 0xCFAB, 0xCFAC, 0xCFAD, 0xCFAE, 0xCFAF, 0xCFB1, + 0xCFB2, 0xCFB3, 0xCFB4, 0xCFB5, 0xCFB6, 0xCFB7, 0xCFB8, 0xCFB9, 0xCFBA, + 0xCFBB, 0xCFBC, 0xCFBD, 0xCFBE, 0xCFBF, 0xCFC0, 0xCFC1, 0xCFC2, 0xCFC3, + 0xCFC5, 0xCFC6, 0xCFC7, 0xCFC8, 0xCFC9, 0xCFCA, 0xCFCB, 0xAE79, 0xAE7B, + 0xAE7C, 0xAE7D, 0xAE84, 0xAE85, 0xAE8C, 0xAEBC, 0xAEBD, 0xAEBE, 0xAEC0, + 0xAEC4, 0xAECC, 0xAECD, 0xAECF, 0xAED0, 0xAED1, 0xAED8, 0xAED9, 0xAEDC, + 0xAEE8, 0xAEEB, 0xAEED, 0xAEF4, 0xAEF8, 0xAEFC, 0xAF07, 0xAF08, 0xAF0D, + 0xAF10, 0xAF2C, 0xAF2D, 0xAF30, 0xAF32, 0xAF34, 0xAF3C, 0xAF3D, 0xAF3F, + 0xAF41, 0xAF42, 0xAF43, 0xAF48, 0xAF49, 0xAF50, 0xAF5C, 0xAF5D, 0xAF64, + 0xAF65, 0xAF79, 0xAF80, 0xAF84, 0xAF88, 0xAF90, 0xAF91, 0xAF95, 0xAF9C, + 0xAFB8, 0xAFB9, 0xAFBC, 0xAFC0, 0xAFC7, 0xAFC8, 0xAFC9, 0xAFCB, 0xAFCD, + 0xAFCE, 0xAFD4, 0xAFDC, 0xAFE8, 0xAFE9, 0xAFF0, 0xAFF1, 0xAFF4, 0xAFF8, + 0xB000, 0xB001, 0xB004, 0xB00C, 0xB010, 0xB014, 0xB01C, 0xB01D, 0xB028, + 0xB044, 0xB045, 0xB048, 0xB04A, 0xB04C, 0xB04E, 0xB053, 0xB054, 0xB055, + 0xB057, 0xB059, ERROR}, + { ERROR, 0xCFCC, 0xCFCD, 0xCFCE, 0xCFCF, 0xCFD0, 0xCFD1, 0xCFD2, 0xCFD3, + 0xCFD4, 0xCFD5, 0xCFD6, 0xCFD7, 0xCFD8, 0xCFD9, 0xCFDA, 0xCFDB, 0xCFDC, + 0xCFDD, 0xCFDE, 0xCFDF, 0xCFE2, 0xCFE3, 0xCFE5, 0xCFE6, 0xCFE7, 0xCFE9, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xCFEA, 0xCFEB, 0xCFEC, + 0xCFED, 0xCFEE, 0xCFEF, 0xCFF2, 0xCFF4, 0xCFF6, 0xCFF7, 0xCFF8, 0xCFF9, + 0xCFFA, 0xCFFB, 0xCFFD, 0xCFFE, 0xCFFF, 0xD001, 0xD002, 0xD003, 0xD005, + 0xD006, 0xD007, 0xD008, 0xD009, 0xD00A, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD00B, 0xD00C, 0xD00D, 0xD00E, 0xD00F, 0xD010, 0xD012, + 0xD013, 0xD014, 0xD015, 0xD016, 0xD017, 0xD019, 0xD01A, 0xD01B, 0xD01C, + 0xD01D, 0xD01E, 0xD01F, 0xD020, 0xD021, 0xD022, 0xD023, 0xD024, 0xD025, + 0xD026, 0xD027, 0xD028, 0xD029, 0xD02A, 0xD02B, 0xD02C, 0xB05D, 0xB07C, + 0xB07D, 0xB080, 0xB084, 0xB08C, 0xB08D, 0xB08F, 0xB091, 0xB098, 0xB099, + 0xB09A, 0xB09C, 0xB09F, 0xB0A0, 0xB0A1, 0xB0A2, 0xB0A8, 0xB0A9, 0xB0AB, + 0xB0AC, 0xB0AD, 0xB0AE, 0xB0AF, 0xB0B1, 0xB0B3, 0xB0B4, 0xB0B5, 0xB0B8, + 0xB0BC, 0xB0C4, 0xB0C5, 0xB0C7, 0xB0C8, 0xB0C9, 0xB0D0, 0xB0D1, 0xB0D4, + 0xB0D8, 0xB0E0, 0xB0E5, 0xB108, 0xB109, 0xB10B, 0xB10C, 0xB110, 0xB112, + 0xB113, 0xB118, 0xB119, 0xB11B, 0xB11C, 0xB11D, 0xB123, 0xB124, 0xB125, + 0xB128, 0xB12C, 0xB134, 0xB135, 0xB137, 0xB138, 0xB139, 0xB140, 0xB141, + 0xB144, 0xB148, 0xB150, 0xB151, 0xB154, 0xB155, 0xB158, 0xB15C, 0xB160, + 0xB178, 0xB179, 0xB17C, 0xB180, 0xB182, 0xB188, 0xB189, 0xB18B, 0xB18D, + 0xB192, 0xB193, 0xB194, 0xB198, 0xB19C, 0xB1A8, 0xB1CC, 0xB1D0, 0xB1D4, + 0xB1DC, 0xB1DD, ERROR}, + { ERROR, 0xD02E, 0xD02F, 0xD030, 0xD031, 0xD032, 0xD033, 0xD036, 0xD037, + 0xD039, 0xD03A, 0xD03B, 0xD03D, 0xD03E, 0xD03F, 0xD040, 0xD041, 0xD042, + 0xD043, 0xD046, 0xD048, 0xD04A, 0xD04B, 0xD04C, 0xD04D, 0xD04E, 0xD04F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD051, 0xD052, 0xD053, + 0xD055, 0xD056, 0xD057, 0xD059, 0xD05A, 0xD05B, 0xD05C, 0xD05D, 0xD05E, + 0xD05F, 0xD061, 0xD062, 0xD063, 0xD064, 0xD065, 0xD066, 0xD067, 0xD068, + 0xD069, 0xD06A, 0xD06B, 0xD06E, 0xD06F, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD071, 0xD072, 0xD073, 0xD075, 0xD076, 0xD077, 0xD078, + 0xD079, 0xD07A, 0xD07B, 0xD07E, 0xD07F, 0xD080, 0xD082, 0xD083, 0xD084, + 0xD085, 0xD086, 0xD087, 0xD088, 0xD089, 0xD08A, 0xD08B, 0xD08C, 0xD08D, + 0xD08E, 0xD08F, 0xD090, 0xD091, 0xD092, 0xD093, 0xD094, 0xB1DF, 0xB1E8, + 0xB1E9, 0xB1EC, 0xB1F0, 0xB1F9, 0xB1FB, 0xB1FD, 0xB204, 0xB205, 0xB208, + 0xB20B, 0xB20C, 0xB214, 0xB215, 0xB217, 0xB219, 0xB220, 0xB234, 0xB23C, + 0xB258, 0xB25C, 0xB260, 0xB268, 0xB269, 0xB274, 0xB275, 0xB27C, 0xB284, + 0xB285, 0xB289, 0xB290, 0xB291, 0xB294, 0xB298, 0xB299, 0xB29A, 0xB2A0, + 0xB2A1, 0xB2A3, 0xB2A5, 0xB2A6, 0xB2AA, 0xB2AC, 0xB2B0, 0xB2B4, 0xB2C8, + 0xB2C9, 0xB2CC, 0xB2D0, 0xB2D2, 0xB2D8, 0xB2D9, 0xB2DB, 0xB2DD, 0xB2E2, + 0xB2E4, 0xB2E5, 0xB2E6, 0xB2E8, 0xB2EB, 0xB2EC, 0xB2ED, 0xB2EE, 0xB2EF, + 0xB2F3, 0xB2F4, 0xB2F5, 0xB2F7, 0xB2F8, 0xB2F9, 0xB2FA, 0xB2FB, 0xB2FF, + 0xB300, 0xB301, 0xB304, 0xB308, 0xB310, 0xB311, 0xB313, 0xB314, 0xB315, + 0xB31C, 0xB354, 0xB355, 0xB356, 0xB358, 0xB35B, 0xB35C, 0xB35E, 0xB35F, + 0xB364, 0xB365, ERROR}, + { ERROR, 0xD095, 0xD096, 0xD097, 0xD098, 0xD099, 0xD09A, 0xD09B, 0xD09C, + 0xD09D, 0xD09E, 0xD09F, 0xD0A0, 0xD0A1, 0xD0A2, 0xD0A3, 0xD0A6, 0xD0A7, + 0xD0A9, 0xD0AA, 0xD0AB, 0xD0AD, 0xD0AE, 0xD0AF, 0xD0B0, 0xD0B1, 0xD0B2, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD0B3, 0xD0B6, 0xD0B8, + 0xD0BA, 0xD0BB, 0xD0BC, 0xD0BD, 0xD0BE, 0xD0BF, 0xD0C2, 0xD0C3, 0xD0C5, + 0xD0C6, 0xD0C7, 0xD0CA, 0xD0CB, 0xD0CC, 0xD0CD, 0xD0CE, 0xD0CF, 0xD0D2, + 0xD0D6, 0xD0D7, 0xD0D8, 0xD0D9, 0xD0DA, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD0DB, 0xD0DE, 0xD0DF, 0xD0E1, 0xD0E2, 0xD0E3, 0xD0E5, + 0xD0E6, 0xD0E7, 0xD0E8, 0xD0E9, 0xD0EA, 0xD0EB, 0xD0EE, 0xD0F2, 0xD0F3, + 0xD0F4, 0xD0F5, 0xD0F6, 0xD0F7, 0xD0F9, 0xD0FA, 0xD0FB, 0xD0FC, 0xD0FD, + 0xD0FE, 0xD0FF, 0xD100, 0xD101, 0xD102, 0xD103, 0xD104, 0xB367, 0xB369, + 0xB36B, 0xB36E, 0xB370, 0xB371, 0xB374, 0xB378, 0xB380, 0xB381, 0xB383, + 0xB384, 0xB385, 0xB38C, 0xB390, 0xB394, 0xB3A0, 0xB3A1, 0xB3A8, 0xB3AC, + 0xB3C4, 0xB3C5, 0xB3C8, 0xB3CB, 0xB3CC, 0xB3CE, 0xB3D0, 0xB3D4, 0xB3D5, + 0xB3D7, 0xB3D9, 0xB3DB, 0xB3DD, 0xB3E0, 0xB3E4, 0xB3E8, 0xB3FC, 0xB410, + 0xB418, 0xB41C, 0xB420, 0xB428, 0xB429, 0xB42B, 0xB434, 0xB450, 0xB451, + 0xB454, 0xB458, 0xB460, 0xB461, 0xB463, 0xB465, 0xB46C, 0xB480, 0xB488, + 0xB49D, 0xB4A4, 0xB4A8, 0xB4AC, 0xB4B5, 0xB4B7, 0xB4B9, 0xB4C0, 0xB4C4, + 0xB4C8, 0xB4D0, 0xB4D5, 0xB4DC, 0xB4DD, 0xB4E0, 0xB4E3, 0xB4E4, 0xB4E6, + 0xB4EC, 0xB4ED, 0xB4EF, 0xB4F1, 0xB4F8, 0xB514, 0xB515, 0xB518, 0xB51B, + 0xB51C, 0xB524, 0xB525, 0xB527, 0xB528, 0xB529, 0xB52A, 0xB530, 0xB531, + 0xB534, 0xB538, ERROR}, + { ERROR, 0xD105, 0xD106, 0xD107, 0xD108, 0xD109, 0xD10A, 0xD10B, 0xD10C, + 0xD10E, 0xD10F, 0xD110, 0xD111, 0xD112, 0xD113, 0xD114, 0xD115, 0xD116, + 0xD117, 0xD118, 0xD119, 0xD11A, 0xD11B, 0xD11C, 0xD11D, 0xD11E, 0xD11F, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD120, 0xD121, 0xD122, + 0xD123, 0xD124, 0xD125, 0xD126, 0xD127, 0xD128, 0xD129, 0xD12A, 0xD12B, + 0xD12C, 0xD12D, 0xD12E, 0xD12F, 0xD132, 0xD133, 0xD135, 0xD136, 0xD137, + 0xD139, 0xD13B, 0xD13C, 0xD13D, 0xD13E, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD13F, 0xD142, 0xD146, 0xD147, 0xD148, 0xD149, 0xD14A, + 0xD14B, 0xD14E, 0xD14F, 0xD151, 0xD152, 0xD153, 0xD155, 0xD156, 0xD157, + 0xD158, 0xD159, 0xD15A, 0xD15B, 0xD15E, 0xD160, 0xD162, 0xD163, 0xD164, + 0xD165, 0xD166, 0xD167, 0xD169, 0xD16A, 0xD16B, 0xD16D, 0xB540, 0xB541, + 0xB543, 0xB544, 0xB545, 0xB54B, 0xB54C, 0xB54D, 0xB550, 0xB554, 0xB55C, + 0xB55D, 0xB55F, 0xB560, 0xB561, 0xB5A0, 0xB5A1, 0xB5A4, 0xB5A8, 0xB5AA, + 0xB5AB, 0xB5B0, 0xB5B1, 0xB5B3, 0xB5B4, 0xB5B5, 0xB5BB, 0xB5BC, 0xB5BD, + 0xB5C0, 0xB5C4, 0xB5CC, 0xB5CD, 0xB5CF, 0xB5D0, 0xB5D1, 0xB5D8, 0xB5EC, + 0xB610, 0xB611, 0xB614, 0xB618, 0xB625, 0xB62C, 0xB634, 0xB648, 0xB664, + 0xB668, 0xB69C, 0xB69D, 0xB6A0, 0xB6A4, 0xB6AB, 0xB6AC, 0xB6B1, 0xB6D4, + 0xB6F0, 0xB6F4, 0xB6F8, 0xB700, 0xB701, 0xB705, 0xB728, 0xB729, 0xB72C, + 0xB72F, 0xB730, 0xB738, 0xB739, 0xB73B, 0xB744, 0xB748, 0xB74C, 0xB754, + 0xB755, 0xB760, 0xB764, 0xB768, 0xB770, 0xB771, 0xB773, 0xB775, 0xB77C, + 0xB77D, 0xB780, 0xB784, 0xB78C, 0xB78D, 0xB78F, 0xB790, 0xB791, 0xB792, + 0xB796, 0xB797, ERROR}, + { ERROR, 0xD16E, 0xD16F, 0xD170, 0xD171, 0xD172, 0xD173, 0xD174, 0xD175, + 0xD176, 0xD177, 0xD178, 0xD179, 0xD17A, 0xD17B, 0xD17D, 0xD17E, 0xD17F, + 0xD180, 0xD181, 0xD182, 0xD183, 0xD185, 0xD186, 0xD187, 0xD189, 0xD18A, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD18B, 0xD18C, 0xD18D, + 0xD18E, 0xD18F, 0xD190, 0xD191, 0xD192, 0xD193, 0xD194, 0xD195, 0xD196, + 0xD197, 0xD198, 0xD199, 0xD19A, 0xD19B, 0xD19C, 0xD19D, 0xD19E, 0xD19F, + 0xD1A2, 0xD1A3, 0xD1A5, 0xD1A6, 0xD1A7, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD1A9, 0xD1AA, 0xD1AB, 0xD1AC, 0xD1AD, 0xD1AE, 0xD1AF, + 0xD1B2, 0xD1B4, 0xD1B6, 0xD1B7, 0xD1B8, 0xD1B9, 0xD1BB, 0xD1BD, 0xD1BE, + 0xD1BF, 0xD1C1, 0xD1C2, 0xD1C3, 0xD1C4, 0xD1C5, 0xD1C6, 0xD1C7, 0xD1C8, + 0xD1C9, 0xD1CA, 0xD1CB, 0xD1CC, 0xD1CD, 0xD1CE, 0xD1CF, 0xB798, 0xB799, + 0xB79C, 0xB7A0, 0xB7A8, 0xB7A9, 0xB7AB, 0xB7AC, 0xB7AD, 0xB7B4, 0xB7B5, + 0xB7B8, 0xB7C7, 0xB7C9, 0xB7EC, 0xB7ED, 0xB7F0, 0xB7F4, 0xB7FC, 0xB7FD, + 0xB7FF, 0xB800, 0xB801, 0xB807, 0xB808, 0xB809, 0xB80C, 0xB810, 0xB818, + 0xB819, 0xB81B, 0xB81D, 0xB824, 0xB825, 0xB828, 0xB82C, 0xB834, 0xB835, + 0xB837, 0xB838, 0xB839, 0xB840, 0xB844, 0xB851, 0xB853, 0xB85C, 0xB85D, + 0xB860, 0xB864, 0xB86C, 0xB86D, 0xB86F, 0xB871, 0xB878, 0xB87C, 0xB88D, + 0xB8A8, 0xB8B0, 0xB8B4, 0xB8B8, 0xB8C0, 0xB8C1, 0xB8C3, 0xB8C5, 0xB8CC, + 0xB8D0, 0xB8D4, 0xB8DD, 0xB8DF, 0xB8E1, 0xB8E8, 0xB8E9, 0xB8EC, 0xB8F0, + 0xB8F8, 0xB8F9, 0xB8FB, 0xB8FD, 0xB904, 0xB918, 0xB920, 0xB93C, 0xB93D, + 0xB940, 0xB944, 0xB94C, 0xB94F, 0xB951, 0xB958, 0xB959, 0xB95C, 0xB960, + 0xB968, 0xB969, ERROR}, + { ERROR, 0xD1D0, 0xD1D1, 0xD1D2, 0xD1D3, 0xD1D4, 0xD1D5, 0xD1D6, 0xD1D7, + 0xD1D9, 0xD1DA, 0xD1DB, 0xD1DC, 0xD1DD, 0xD1DE, 0xD1DF, 0xD1E0, 0xD1E1, + 0xD1E2, 0xD1E3, 0xD1E4, 0xD1E5, 0xD1E6, 0xD1E7, 0xD1E8, 0xD1E9, 0xD1EA, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD1EB, 0xD1EC, 0xD1ED, + 0xD1EE, 0xD1EF, 0xD1F0, 0xD1F1, 0xD1F2, 0xD1F3, 0xD1F5, 0xD1F6, 0xD1F7, + 0xD1F9, 0xD1FA, 0xD1FB, 0xD1FC, 0xD1FD, 0xD1FE, 0xD1FF, 0xD200, 0xD201, + 0xD202, 0xD203, 0xD204, 0xD205, 0xD206, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD208, 0xD20A, 0xD20B, 0xD20C, 0xD20D, 0xD20E, 0xD20F, + 0xD211, 0xD212, 0xD213, 0xD214, 0xD215, 0xD216, 0xD217, 0xD218, 0xD219, + 0xD21A, 0xD21B, 0xD21C, 0xD21D, 0xD21E, 0xD21F, 0xD220, 0xD221, 0xD222, + 0xD223, 0xD224, 0xD225, 0xD226, 0xD227, 0xD228, 0xD229, 0xB96B, 0xB96D, + 0xB974, 0xB975, 0xB978, 0xB97C, 0xB984, 0xB985, 0xB987, 0xB989, 0xB98A, + 0xB98D, 0xB98E, 0xB9AC, 0xB9AD, 0xB9B0, 0xB9B4, 0xB9BC, 0xB9BD, 0xB9BF, + 0xB9C1, 0xB9C8, 0xB9C9, 0xB9CC, 0xB9CE, 0xB9CF, 0xB9D0, 0xB9D1, 0xB9D2, + 0xB9D8, 0xB9D9, 0xB9DB, 0xB9DD, 0xB9DE, 0xB9E1, 0xB9E3, 0xB9E4, 0xB9E5, + 0xB9E8, 0xB9EC, 0xB9F4, 0xB9F5, 0xB9F7, 0xB9F8, 0xB9F9, 0xB9FA, 0xBA00, + 0xBA01, 0xBA08, 0xBA15, 0xBA38, 0xBA39, 0xBA3C, 0xBA40, 0xBA42, 0xBA48, + 0xBA49, 0xBA4B, 0xBA4D, 0xBA4E, 0xBA53, 0xBA54, 0xBA55, 0xBA58, 0xBA5C, + 0xBA64, 0xBA65, 0xBA67, 0xBA68, 0xBA69, 0xBA70, 0xBA71, 0xBA74, 0xBA78, + 0xBA83, 0xBA84, 0xBA85, 0xBA87, 0xBA8C, 0xBAA8, 0xBAA9, 0xBAAB, 0xBAAC, + 0xBAB0, 0xBAB2, 0xBAB8, 0xBAB9, 0xBABB, 0xBABD, 0xBAC4, 0xBAC8, 0xBAD8, + 0xBAD9, 0xBAFC, ERROR}, + { ERROR, 0xD22A, 0xD22B, 0xD22E, 0xD22F, 0xD231, 0xD232, 0xD233, 0xD235, + 0xD236, 0xD237, 0xD238, 0xD239, 0xD23A, 0xD23B, 0xD23E, 0xD240, 0xD242, + 0xD243, 0xD244, 0xD245, 0xD246, 0xD247, 0xD249, 0xD24A, 0xD24B, 0xD24C, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD24D, 0xD24E, 0xD24F, + 0xD250, 0xD251, 0xD252, 0xD253, 0xD254, 0xD255, 0xD256, 0xD257, 0xD258, + 0xD259, 0xD25A, 0xD25B, 0xD25D, 0xD25E, 0xD25F, 0xD260, 0xD261, 0xD262, + 0xD263, 0xD265, 0xD266, 0xD267, 0xD268, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD269, 0xD26A, 0xD26B, 0xD26C, 0xD26D, 0xD26E, 0xD26F, + 0xD270, 0xD271, 0xD272, 0xD273, 0xD274, 0xD275, 0xD276, 0xD277, 0xD278, + 0xD279, 0xD27A, 0xD27B, 0xD27C, 0xD27D, 0xD27E, 0xD27F, 0xD282, 0xD283, + 0xD285, 0xD286, 0xD287, 0xD289, 0xD28A, 0xD28B, 0xD28C, 0xBB00, 0xBB04, + 0xBB0D, 0xBB0F, 0xBB11, 0xBB18, 0xBB1C, 0xBB20, 0xBB29, 0xBB2B, 0xBB34, + 0xBB35, 0xBB36, 0xBB38, 0xBB3B, 0xBB3C, 0xBB3D, 0xBB3E, 0xBB44, 0xBB45, + 0xBB47, 0xBB49, 0xBB4D, 0xBB4F, 0xBB50, 0xBB54, 0xBB58, 0xBB61, 0xBB63, + 0xBB6C, 0xBB88, 0xBB8C, 0xBB90, 0xBBA4, 0xBBA8, 0xBBAC, 0xBBB4, 0xBBB7, + 0xBBC0, 0xBBC4, 0xBBC8, 0xBBD0, 0xBBD3, 0xBBF8, 0xBBF9, 0xBBFC, 0xBBFF, + 0xBC00, 0xBC02, 0xBC08, 0xBC09, 0xBC0B, 0xBC0C, 0xBC0D, 0xBC0F, 0xBC11, + 0xBC14, 0xBC15, 0xBC16, 0xBC17, 0xBC18, 0xBC1B, 0xBC1C, 0xBC1D, 0xBC1E, + 0xBC1F, 0xBC24, 0xBC25, 0xBC27, 0xBC29, 0xBC2D, 0xBC30, 0xBC31, 0xBC34, + 0xBC38, 0xBC40, 0xBC41, 0xBC43, 0xBC44, 0xBC45, 0xBC49, 0xBC4C, 0xBC4D, + 0xBC50, 0xBC5D, 0xBC84, 0xBC85, 0xBC88, 0xBC8B, 0xBC8C, 0xBC8E, 0xBC94, + 0xBC95, 0xBC97, ERROR}, + { ERROR, 0xD28D, 0xD28E, 0xD28F, 0xD292, 0xD293, 0xD294, 0xD296, 0xD297, + 0xD298, 0xD299, 0xD29A, 0xD29B, 0xD29D, 0xD29E, 0xD29F, 0xD2A1, 0xD2A2, + 0xD2A3, 0xD2A5, 0xD2A6, 0xD2A7, 0xD2A8, 0xD2A9, 0xD2AA, 0xD2AB, 0xD2AD, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD2AE, 0xD2AF, 0xD2B0, + 0xD2B2, 0xD2B3, 0xD2B4, 0xD2B5, 0xD2B6, 0xD2B7, 0xD2BA, 0xD2BB, 0xD2BD, + 0xD2BE, 0xD2C1, 0xD2C3, 0xD2C4, 0xD2C5, 0xD2C6, 0xD2C7, 0xD2CA, 0xD2CC, + 0xD2CD, 0xD2CE, 0xD2CF, 0xD2D0, 0xD2D1, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD2D2, 0xD2D3, 0xD2D5, 0xD2D6, 0xD2D7, 0xD2D9, 0xD2DA, + 0xD2DB, 0xD2DD, 0xD2DE, 0xD2DF, 0xD2E0, 0xD2E1, 0xD2E2, 0xD2E3, 0xD2E6, + 0xD2E7, 0xD2E8, 0xD2E9, 0xD2EA, 0xD2EB, 0xD2EC, 0xD2ED, 0xD2EE, 0xD2EF, + 0xD2F2, 0xD2F3, 0xD2F5, 0xD2F6, 0xD2F7, 0xD2F9, 0xD2FA, 0xBC99, 0xBC9A, + 0xBCA0, 0xBCA1, 0xBCA4, 0xBCA7, 0xBCA8, 0xBCB0, 0xBCB1, 0xBCB3, 0xBCB4, + 0xBCB5, 0xBCBC, 0xBCBD, 0xBCC0, 0xBCC4, 0xBCCD, 0xBCCF, 0xBCD0, 0xBCD1, + 0xBCD5, 0xBCD8, 0xBCDC, 0xBCF4, 0xBCF5, 0xBCF6, 0xBCF8, 0xBCFC, 0xBD04, + 0xBD05, 0xBD07, 0xBD09, 0xBD10, 0xBD14, 0xBD24, 0xBD2C, 0xBD40, 0xBD48, + 0xBD49, 0xBD4C, 0xBD50, 0xBD58, 0xBD59, 0xBD64, 0xBD68, 0xBD80, 0xBD81, + 0xBD84, 0xBD87, 0xBD88, 0xBD89, 0xBD8A, 0xBD90, 0xBD91, 0xBD93, 0xBD95, + 0xBD99, 0xBD9A, 0xBD9C, 0xBDA4, 0xBDB0, 0xBDB8, 0xBDD4, 0xBDD5, 0xBDD8, + 0xBDDC, 0xBDE9, 0xBDF0, 0xBDF4, 0xBDF8, 0xBE00, 0xBE03, 0xBE05, 0xBE0C, + 0xBE0D, 0xBE10, 0xBE14, 0xBE1C, 0xBE1D, 0xBE1F, 0xBE44, 0xBE45, 0xBE48, + 0xBE4C, 0xBE4E, 0xBE54, 0xBE55, 0xBE57, 0xBE59, 0xBE5A, 0xBE5B, 0xBE60, + 0xBE61, 0xBE64, ERROR}, + { ERROR, 0xD2FB, 0xD2FC, 0xD2FD, 0xD2FE, 0xD2FF, 0xD302, 0xD304, 0xD306, + 0xD307, 0xD308, 0xD309, 0xD30A, 0xD30B, 0xD30F, 0xD311, 0xD312, 0xD313, + 0xD315, 0xD317, 0xD318, 0xD319, 0xD31A, 0xD31B, 0xD31E, 0xD322, 0xD323, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD324, 0xD326, 0xD327, + 0xD32A, 0xD32B, 0xD32D, 0xD32E, 0xD32F, 0xD331, 0xD332, 0xD333, 0xD334, + 0xD335, 0xD336, 0xD337, 0xD33A, 0xD33E, 0xD33F, 0xD340, 0xD341, 0xD342, + 0xD343, 0xD346, 0xD347, 0xD348, 0xD349, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD34A, 0xD34B, 0xD34C, 0xD34D, 0xD34E, 0xD34F, 0xD350, + 0xD351, 0xD352, 0xD353, 0xD354, 0xD355, 0xD356, 0xD357, 0xD358, 0xD359, + 0xD35A, 0xD35B, 0xD35C, 0xD35D, 0xD35E, 0xD35F, 0xD360, 0xD361, 0xD362, + 0xD363, 0xD364, 0xD365, 0xD366, 0xD367, 0xD368, 0xD369, 0xBE68, 0xBE6A, + 0xBE70, 0xBE71, 0xBE73, 0xBE74, 0xBE75, 0xBE7B, 0xBE7C, 0xBE7D, 0xBE80, + 0xBE84, 0xBE8C, 0xBE8D, 0xBE8F, 0xBE90, 0xBE91, 0xBE98, 0xBE99, 0xBEA8, + 0xBED0, 0xBED1, 0xBED4, 0xBED7, 0xBED8, 0xBEE0, 0xBEE3, 0xBEE4, 0xBEE5, + 0xBEEC, 0xBF01, 0xBF08, 0xBF09, 0xBF18, 0xBF19, 0xBF1B, 0xBF1C, 0xBF1D, + 0xBF40, 0xBF41, 0xBF44, 0xBF48, 0xBF50, 0xBF51, 0xBF55, 0xBF94, 0xBFB0, + 0xBFC5, 0xBFCC, 0xBFCD, 0xBFD0, 0xBFD4, 0xBFDC, 0xBFDF, 0xBFE1, 0xC03C, + 0xC051, 0xC058, 0xC05C, 0xC060, 0xC068, 0xC069, 0xC090, 0xC091, 0xC094, + 0xC098, 0xC0A0, 0xC0A1, 0xC0A3, 0xC0A5, 0xC0AC, 0xC0AD, 0xC0AF, 0xC0B0, + 0xC0B3, 0xC0B4, 0xC0B5, 0xC0B6, 0xC0BC, 0xC0BD, 0xC0BF, 0xC0C0, 0xC0C1, + 0xC0C5, 0xC0C8, 0xC0C9, 0xC0CC, 0xC0D0, 0xC0D8, 0xC0D9, 0xC0DB, 0xC0DC, + 0xC0DD, 0xC0E4, ERROR}, + { ERROR, 0xD36A, 0xD36B, 0xD36C, 0xD36D, 0xD36E, 0xD36F, 0xD370, 0xD371, + 0xD372, 0xD373, 0xD374, 0xD375, 0xD376, 0xD377, 0xD378, 0xD379, 0xD37A, + 0xD37B, 0xD37E, 0xD37F, 0xD381, 0xD382, 0xD383, 0xD385, 0xD386, 0xD387, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD388, 0xD389, 0xD38A, + 0xD38B, 0xD38E, 0xD392, 0xD393, 0xD394, 0xD395, 0xD396, 0xD397, 0xD39A, + 0xD39B, 0xD39D, 0xD39E, 0xD39F, 0xD3A1, 0xD3A2, 0xD3A3, 0xD3A4, 0xD3A5, + 0xD3A6, 0xD3A7, 0xD3AA, 0xD3AC, 0xD3AE, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD3AF, 0xD3B0, 0xD3B1, 0xD3B2, 0xD3B3, 0xD3B5, 0xD3B6, + 0xD3B7, 0xD3B9, 0xD3BA, 0xD3BB, 0xD3BD, 0xD3BE, 0xD3BF, 0xD3C0, 0xD3C1, + 0xD3C2, 0xD3C3, 0xD3C6, 0xD3C7, 0xD3CA, 0xD3CB, 0xD3CC, 0xD3CD, 0xD3CE, + 0xD3CF, 0xD3D1, 0xD3D2, 0xD3D3, 0xD3D4, 0xD3D5, 0xD3D6, 0xC0E5, 0xC0E8, + 0xC0EC, 0xC0F4, 0xC0F5, 0xC0F7, 0xC0F9, 0xC100, 0xC104, 0xC108, 0xC110, + 0xC115, 0xC11C, 0xC11D, 0xC11E, 0xC11F, 0xC120, 0xC123, 0xC124, 0xC126, + 0xC127, 0xC12C, 0xC12D, 0xC12F, 0xC130, 0xC131, 0xC136, 0xC138, 0xC139, + 0xC13C, 0xC140, 0xC148, 0xC149, 0xC14B, 0xC14C, 0xC14D, 0xC154, 0xC155, + 0xC158, 0xC15C, 0xC164, 0xC165, 0xC167, 0xC168, 0xC169, 0xC170, 0xC174, + 0xC178, 0xC185, 0xC18C, 0xC18D, 0xC18E, 0xC190, 0xC194, 0xC196, 0xC19C, + 0xC19D, 0xC19F, 0xC1A1, 0xC1A5, 0xC1A8, 0xC1A9, 0xC1AC, 0xC1B0, 0xC1BD, + 0xC1C4, 0xC1C8, 0xC1CC, 0xC1D4, 0xC1D7, 0xC1D8, 0xC1E0, 0xC1E4, 0xC1E8, + 0xC1F0, 0xC1F1, 0xC1F3, 0xC1FC, 0xC1FD, 0xC200, 0xC204, 0xC20C, 0xC20D, + 0xC20F, 0xC211, 0xC218, 0xC219, 0xC21C, 0xC21F, 0xC220, 0xC228, 0xC229, + 0xC22B, 0xC22D, ERROR}, + { ERROR, 0xD3D7, 0xD3D9, 0xD3DA, 0xD3DB, 0xD3DC, 0xD3DD, 0xD3DE, 0xD3DF, + 0xD3E0, 0xD3E2, 0xD3E4, 0xD3E5, 0xD3E6, 0xD3E7, 0xD3E8, 0xD3E9, 0xD3EA, + 0xD3EB, 0xD3EE, 0xD3EF, 0xD3F1, 0xD3F2, 0xD3F3, 0xD3F5, 0xD3F6, 0xD3F7, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD3F8, 0xD3F9, 0xD3FA, + 0xD3FB, 0xD3FE, 0xD400, 0xD402, 0xD403, 0xD404, 0xD405, 0xD406, 0xD407, + 0xD409, 0xD40A, 0xD40B, 0xD40C, 0xD40D, 0xD40E, 0xD40F, 0xD410, 0xD411, + 0xD412, 0xD413, 0xD414, 0xD415, 0xD416, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD417, 0xD418, 0xD419, 0xD41A, 0xD41B, 0xD41C, 0xD41E, + 0xD41F, 0xD420, 0xD421, 0xD422, 0xD423, 0xD424, 0xD425, 0xD426, 0xD427, + 0xD428, 0xD429, 0xD42A, 0xD42B, 0xD42C, 0xD42D, 0xD42E, 0xD42F, 0xD430, + 0xD431, 0xD432, 0xD433, 0xD434, 0xD435, 0xD436, 0xD437, 0xC22F, 0xC231, + 0xC232, 0xC234, 0xC248, 0xC250, 0xC251, 0xC254, 0xC258, 0xC260, 0xC265, + 0xC26C, 0xC26D, 0xC270, 0xC274, 0xC27C, 0xC27D, 0xC27F, 0xC281, 0xC288, + 0xC289, 0xC290, 0xC298, 0xC29B, 0xC29D, 0xC2A4, 0xC2A5, 0xC2A8, 0xC2AC, + 0xC2AD, 0xC2B4, 0xC2B5, 0xC2B7, 0xC2B9, 0xC2DC, 0xC2DD, 0xC2E0, 0xC2E3, + 0xC2E4, 0xC2EB, 0xC2EC, 0xC2ED, 0xC2EF, 0xC2F1, 0xC2F6, 0xC2F8, 0xC2F9, + 0xC2FB, 0xC2FC, 0xC300, 0xC308, 0xC309, 0xC30C, 0xC30D, 0xC313, 0xC314, + 0xC315, 0xC318, 0xC31C, 0xC324, 0xC325, 0xC328, 0xC329, 0xC345, 0xC368, + 0xC369, 0xC36C, 0xC370, 0xC372, 0xC378, 0xC379, 0xC37C, 0xC37D, 0xC384, + 0xC388, 0xC38C, 0xC3C0, 0xC3D8, 0xC3D9, 0xC3DC, 0xC3DF, 0xC3E0, 0xC3E2, + 0xC3E8, 0xC3E9, 0xC3ED, 0xC3F4, 0xC3F5, 0xC3F8, 0xC408, 0xC410, 0xC424, + 0xC42C, 0xC430, ERROR}, + { ERROR, 0xD438, 0xD439, 0xD43A, 0xD43B, 0xD43C, 0xD43D, 0xD43E, 0xD43F, + 0xD441, 0xD442, 0xD443, 0xD445, 0xD446, 0xD447, 0xD448, 0xD449, 0xD44A, + 0xD44B, 0xD44C, 0xD44D, 0xD44E, 0xD44F, 0xD450, 0xD451, 0xD452, 0xD453, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD454, 0xD455, 0xD456, + 0xD457, 0xD458, 0xD459, 0xD45A, 0xD45B, 0xD45D, 0xD45E, 0xD45F, 0xD461, + 0xD462, 0xD463, 0xD465, 0xD466, 0xD467, 0xD468, 0xD469, 0xD46A, 0xD46B, + 0xD46C, 0xD46E, 0xD470, 0xD471, 0xD472, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD473, 0xD474, 0xD475, 0xD476, 0xD477, 0xD47A, 0xD47B, + 0xD47D, 0xD47E, 0xD481, 0xD483, 0xD484, 0xD485, 0xD486, 0xD487, 0xD48A, + 0xD48C, 0xD48E, 0xD48F, 0xD490, 0xD491, 0xD492, 0xD493, 0xD495, 0xD496, + 0xD497, 0xD498, 0xD499, 0xD49A, 0xD49B, 0xD49C, 0xD49D, 0xC434, 0xC43C, + 0xC43D, 0xC448, 0xC464, 0xC465, 0xC468, 0xC46C, 0xC474, 0xC475, 0xC479, + 0xC480, 0xC494, 0xC49C, 0xC4B8, 0xC4BC, 0xC4E9, 0xC4F0, 0xC4F1, 0xC4F4, + 0xC4F8, 0xC4FA, 0xC4FF, 0xC500, 0xC501, 0xC50C, 0xC510, 0xC514, 0xC51C, + 0xC528, 0xC529, 0xC52C, 0xC530, 0xC538, 0xC539, 0xC53B, 0xC53D, 0xC544, + 0xC545, 0xC548, 0xC549, 0xC54A, 0xC54C, 0xC54D, 0xC54E, 0xC553, 0xC554, + 0xC555, 0xC557, 0xC558, 0xC559, 0xC55D, 0xC55E, 0xC560, 0xC561, 0xC564, + 0xC568, 0xC570, 0xC571, 0xC573, 0xC574, 0xC575, 0xC57C, 0xC57D, 0xC580, + 0xC584, 0xC587, 0xC58C, 0xC58D, 0xC58F, 0xC591, 0xC595, 0xC597, 0xC598, + 0xC59C, 0xC5A0, 0xC5A9, 0xC5B4, 0xC5B5, 0xC5B8, 0xC5B9, 0xC5BB, 0xC5BC, + 0xC5BD, 0xC5BE, 0xC5C4, 0xC5C5, 0xC5C6, 0xC5C7, 0xC5C8, 0xC5C9, 0xC5CA, + 0xC5CC, 0xC5CE, ERROR}, + { ERROR, 0xD49E, 0xD49F, 0xD4A0, 0xD4A1, 0xD4A2, 0xD4A3, 0xD4A4, 0xD4A5, + 0xD4A6, 0xD4A7, 0xD4A8, 0xD4AA, 0xD4AB, 0xD4AC, 0xD4AD, 0xD4AE, 0xD4AF, + 0xD4B0, 0xD4B1, 0xD4B2, 0xD4B3, 0xD4B4, 0xD4B5, 0xD4B6, 0xD4B7, 0xD4B8, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD4B9, 0xD4BA, 0xD4BB, + 0xD4BC, 0xD4BD, 0xD4BE, 0xD4BF, 0xD4C0, 0xD4C1, 0xD4C2, 0xD4C3, 0xD4C4, + 0xD4C5, 0xD4C6, 0xD4C7, 0xD4C8, 0xD4C9, 0xD4CA, 0xD4CB, 0xD4CD, 0xD4CE, + 0xD4CF, 0xD4D1, 0xD4D2, 0xD4D3, 0xD4D5, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD4D6, 0xD4D7, 0xD4D8, 0xD4D9, 0xD4DA, 0xD4DB, 0xD4DD, + 0xD4DE, 0xD4E0, 0xD4E1, 0xD4E2, 0xD4E3, 0xD4E4, 0xD4E5, 0xD4E6, 0xD4E7, + 0xD4E9, 0xD4EA, 0xD4EB, 0xD4ED, 0xD4EE, 0xD4EF, 0xD4F1, 0xD4F2, 0xD4F3, + 0xD4F4, 0xD4F5, 0xD4F6, 0xD4F7, 0xD4F9, 0xD4FA, 0xD4FC, 0xC5D0, 0xC5D1, + 0xC5D4, 0xC5D8, 0xC5E0, 0xC5E1, 0xC5E3, 0xC5E5, 0xC5EC, 0xC5ED, 0xC5EE, + 0xC5F0, 0xC5F4, 0xC5F6, 0xC5F7, 0xC5FC, 0xC5FD, 0xC5FE, 0xC5FF, 0xC600, + 0xC601, 0xC605, 0xC606, 0xC607, 0xC608, 0xC60C, 0xC610, 0xC618, 0xC619, + 0xC61B, 0xC61C, 0xC624, 0xC625, 0xC628, 0xC62C, 0xC62D, 0xC62E, 0xC630, + 0xC633, 0xC634, 0xC635, 0xC637, 0xC639, 0xC63B, 0xC640, 0xC641, 0xC644, + 0xC648, 0xC650, 0xC651, 0xC653, 0xC654, 0xC655, 0xC65C, 0xC65D, 0xC660, + 0xC66C, 0xC66F, 0xC671, 0xC678, 0xC679, 0xC67C, 0xC680, 0xC688, 0xC689, + 0xC68B, 0xC68D, 0xC694, 0xC695, 0xC698, 0xC69C, 0xC6A4, 0xC6A5, 0xC6A7, + 0xC6A9, 0xC6B0, 0xC6B1, 0xC6B4, 0xC6B8, 0xC6B9, 0xC6BA, 0xC6C0, 0xC6C1, + 0xC6C3, 0xC6C5, 0xC6CC, 0xC6CD, 0xC6D0, 0xC6D4, 0xC6DC, 0xC6DD, 0xC6E0, + 0xC6E1, 0xC6E8, ERROR}, + { ERROR, 0xD4FE, 0xD4FF, 0xD500, 0xD501, 0xD502, 0xD503, 0xD505, 0xD506, + 0xD507, 0xD509, 0xD50A, 0xD50B, 0xD50D, 0xD50E, 0xD50F, 0xD510, 0xD511, + 0xD512, 0xD513, 0xD516, 0xD518, 0xD519, 0xD51A, 0xD51B, 0xD51C, 0xD51D, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD51E, 0xD51F, 0xD520, + 0xD521, 0xD522, 0xD523, 0xD524, 0xD525, 0xD526, 0xD527, 0xD528, 0xD529, + 0xD52A, 0xD52B, 0xD52C, 0xD52D, 0xD52E, 0xD52F, 0xD530, 0xD531, 0xD532, + 0xD533, 0xD534, 0xD535, 0xD536, 0xD537, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD538, 0xD539, 0xD53A, 0xD53B, 0xD53E, 0xD53F, 0xD541, + 0xD542, 0xD543, 0xD545, 0xD546, 0xD547, 0xD548, 0xD549, 0xD54A, 0xD54B, + 0xD54E, 0xD550, 0xD552, 0xD553, 0xD554, 0xD555, 0xD556, 0xD557, 0xD55A, + 0xD55B, 0xD55D, 0xD55E, 0xD55F, 0xD561, 0xD562, 0xD563, 0xC6E9, 0xC6EC, + 0xC6F0, 0xC6F8, 0xC6F9, 0xC6FD, 0xC704, 0xC705, 0xC708, 0xC70C, 0xC714, + 0xC715, 0xC717, 0xC719, 0xC720, 0xC721, 0xC724, 0xC728, 0xC730, 0xC731, + 0xC733, 0xC735, 0xC737, 0xC73C, 0xC73D, 0xC740, 0xC744, 0xC74A, 0xC74C, + 0xC74D, 0xC74F, 0xC751, 0xC752, 0xC753, 0xC754, 0xC755, 0xC756, 0xC757, + 0xC758, 0xC75C, 0xC760, 0xC768, 0xC76B, 0xC774, 0xC775, 0xC778, 0xC77C, + 0xC77D, 0xC77E, 0xC783, 0xC784, 0xC785, 0xC787, 0xC788, 0xC789, 0xC78A, + 0xC78E, 0xC790, 0xC791, 0xC794, 0xC796, 0xC797, 0xC798, 0xC79A, 0xC7A0, + 0xC7A1, 0xC7A3, 0xC7A4, 0xC7A5, 0xC7A6, 0xC7AC, 0xC7AD, 0xC7B0, 0xC7B4, + 0xC7BC, 0xC7BD, 0xC7BF, 0xC7C0, 0xC7C1, 0xC7C8, 0xC7C9, 0xC7CC, 0xC7CE, + 0xC7D0, 0xC7D8, 0xC7DD, 0xC7E4, 0xC7E8, 0xC7EC, 0xC800, 0xC801, 0xC804, + 0xC808, 0xC80A, ERROR}, + { ERROR, 0xD564, 0xD566, 0xD567, 0xD56A, 0xD56C, 0xD56E, 0xD56F, 0xD570, + 0xD571, 0xD572, 0xD573, 0xD576, 0xD577, 0xD579, 0xD57A, 0xD57B, 0xD57D, + 0xD57E, 0xD57F, 0xD580, 0xD581, 0xD582, 0xD583, 0xD586, 0xD58A, 0xD58B, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD58C, 0xD58D, 0xD58E, + 0xD58F, 0xD591, 0xD592, 0xD593, 0xD594, 0xD595, 0xD596, 0xD597, 0xD598, + 0xD599, 0xD59A, 0xD59B, 0xD59C, 0xD59D, 0xD59E, 0xD59F, 0xD5A0, 0xD5A1, + 0xD5A2, 0xD5A3, 0xD5A4, 0xD5A6, 0xD5A7, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD5A8, 0xD5A9, 0xD5AA, 0xD5AB, 0xD5AC, 0xD5AD, 0xD5AE, + 0xD5AF, 0xD5B0, 0xD5B1, 0xD5B2, 0xD5B3, 0xD5B4, 0xD5B5, 0xD5B6, 0xD5B7, + 0xD5B8, 0xD5B9, 0xD5BA, 0xD5BB, 0xD5BC, 0xD5BD, 0xD5BE, 0xD5BF, 0xD5C0, + 0xD5C1, 0xD5C2, 0xD5C3, 0xD5C4, 0xD5C5, 0xD5C6, 0xD5C7, 0xC810, 0xC811, + 0xC813, 0xC815, 0xC816, 0xC81C, 0xC81D, 0xC820, 0xC824, 0xC82C, 0xC82D, + 0xC82F, 0xC831, 0xC838, 0xC83C, 0xC840, 0xC848, 0xC849, 0xC84C, 0xC84D, + 0xC854, 0xC870, 0xC871, 0xC874, 0xC878, 0xC87A, 0xC880, 0xC881, 0xC883, + 0xC885, 0xC886, 0xC887, 0xC88B, 0xC88C, 0xC88D, 0xC894, 0xC89D, 0xC89F, + 0xC8A1, 0xC8A8, 0xC8BC, 0xC8BD, 0xC8C4, 0xC8C8, 0xC8CC, 0xC8D4, 0xC8D5, + 0xC8D7, 0xC8D9, 0xC8E0, 0xC8E1, 0xC8E4, 0xC8F5, 0xC8FC, 0xC8FD, 0xC900, + 0xC904, 0xC905, 0xC906, 0xC90C, 0xC90D, 0xC90F, 0xC911, 0xC918, 0xC92C, + 0xC934, 0xC950, 0xC951, 0xC954, 0xC958, 0xC960, 0xC961, 0xC963, 0xC96C, + 0xC970, 0xC974, 0xC97C, 0xC988, 0xC989, 0xC98C, 0xC990, 0xC998, 0xC999, + 0xC99B, 0xC99D, 0xC9C0, 0xC9C1, 0xC9C4, 0xC9C7, 0xC9C8, 0xC9CA, 0xC9D0, + 0xC9D1, 0xC9D3, ERROR}, + { ERROR, 0xD5CA, 0xD5CB, 0xD5CD, 0xD5CE, 0xD5CF, 0xD5D1, 0xD5D3, 0xD5D4, + 0xD5D5, 0xD5D6, 0xD5D7, 0xD5DA, 0xD5DC, 0xD5DE, 0xD5DF, 0xD5E0, 0xD5E1, + 0xD5E2, 0xD5E3, 0xD5E6, 0xD5E7, 0xD5E9, 0xD5EA, 0xD5EB, 0xD5ED, 0xD5EE, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD5EF, 0xD5F0, 0xD5F1, + 0xD5F2, 0xD5F3, 0xD5F6, 0xD5F8, 0xD5FA, 0xD5FB, 0xD5FC, 0xD5FD, 0xD5FE, + 0xD5FF, 0xD602, 0xD603, 0xD605, 0xD606, 0xD607, 0xD609, 0xD60A, 0xD60B, + 0xD60C, 0xD60D, 0xD60E, 0xD60F, 0xD612, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD616, 0xD617, 0xD618, 0xD619, 0xD61A, 0xD61B, 0xD61D, + 0xD61E, 0xD61F, 0xD621, 0xD622, 0xD623, 0xD625, 0xD626, 0xD627, 0xD628, + 0xD629, 0xD62A, 0xD62B, 0xD62C, 0xD62E, 0xD62F, 0xD630, 0xD631, 0xD632, + 0xD633, 0xD634, 0xD635, 0xD636, 0xD637, 0xD63A, 0xD63B, 0xC9D5, 0xC9D6, + 0xC9D9, 0xC9DA, 0xC9DC, 0xC9DD, 0xC9E0, 0xC9E2, 0xC9E4, 0xC9E7, 0xC9EC, + 0xC9ED, 0xC9EF, 0xC9F0, 0xC9F1, 0xC9F8, 0xC9F9, 0xC9FC, 0xCA00, 0xCA08, + 0xCA09, 0xCA0B, 0xCA0C, 0xCA0D, 0xCA14, 0xCA18, 0xCA29, 0xCA4C, 0xCA4D, + 0xCA50, 0xCA54, 0xCA5C, 0xCA5D, 0xCA5F, 0xCA60, 0xCA61, 0xCA68, 0xCA7D, + 0xCA84, 0xCA98, 0xCABC, 0xCABD, 0xCAC0, 0xCAC4, 0xCACC, 0xCACD, 0xCACF, + 0xCAD1, 0xCAD3, 0xCAD8, 0xCAD9, 0xCAE0, 0xCAEC, 0xCAF4, 0xCB08, 0xCB10, + 0xCB14, 0xCB18, 0xCB20, 0xCB21, 0xCB41, 0xCB48, 0xCB49, 0xCB4C, 0xCB50, + 0xCB58, 0xCB59, 0xCB5D, 0xCB64, 0xCB78, 0xCB79, 0xCB9C, 0xCBB8, 0xCBD4, + 0xCBE4, 0xCBE7, 0xCBE9, 0xCC0C, 0xCC0D, 0xCC10, 0xCC14, 0xCC1C, 0xCC1D, + 0xCC21, 0xCC22, 0xCC27, 0xCC28, 0xCC29, 0xCC2C, 0xCC2E, 0xCC30, 0xCC38, + 0xCC39, 0xCC3B, ERROR}, + { ERROR, 0xD63D, 0xD63E, 0xD63F, 0xD641, 0xD642, 0xD643, 0xD644, 0xD646, + 0xD647, 0xD64A, 0xD64C, 0xD64E, 0xD64F, 0xD650, 0xD652, 0xD653, 0xD656, + 0xD657, 0xD659, 0xD65A, 0xD65B, 0xD65D, 0xD65E, 0xD65F, 0xD660, 0xD661, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD662, 0xD663, 0xD664, + 0xD665, 0xD666, 0xD668, 0xD66A, 0xD66B, 0xD66C, 0xD66D, 0xD66E, 0xD66F, + 0xD672, 0xD673, 0xD675, 0xD676, 0xD677, 0xD678, 0xD679, 0xD67A, 0xD67B, + 0xD67C, 0xD67D, 0xD67E, 0xD67F, 0xD680, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD681, 0xD682, 0xD684, 0xD686, 0xD687, 0xD688, 0xD689, + 0xD68A, 0xD68B, 0xD68E, 0xD68F, 0xD691, 0xD692, 0xD693, 0xD695, 0xD696, + 0xD697, 0xD698, 0xD699, 0xD69A, 0xD69B, 0xD69C, 0xD69E, 0xD6A0, 0xD6A2, + 0xD6A3, 0xD6A4, 0xD6A5, 0xD6A6, 0xD6A7, 0xD6A9, 0xD6AA, 0xCC3C, 0xCC3D, + 0xCC3E, 0xCC44, 0xCC45, 0xCC48, 0xCC4C, 0xCC54, 0xCC55, 0xCC57, 0xCC58, + 0xCC59, 0xCC60, 0xCC64, 0xCC66, 0xCC68, 0xCC70, 0xCC75, 0xCC98, 0xCC99, + 0xCC9C, 0xCCA0, 0xCCA8, 0xCCA9, 0xCCAB, 0xCCAC, 0xCCAD, 0xCCB4, 0xCCB5, + 0xCCB8, 0xCCBC, 0xCCC4, 0xCCC5, 0xCCC7, 0xCCC9, 0xCCD0, 0xCCD4, 0xCCE4, + 0xCCEC, 0xCCF0, 0xCD01, 0xCD08, 0xCD09, 0xCD0C, 0xCD10, 0xCD18, 0xCD19, + 0xCD1B, 0xCD1D, 0xCD24, 0xCD28, 0xCD2C, 0xCD39, 0xCD5C, 0xCD60, 0xCD64, + 0xCD6C, 0xCD6D, 0xCD6F, 0xCD71, 0xCD78, 0xCD88, 0xCD94, 0xCD95, 0xCD98, + 0xCD9C, 0xCDA4, 0xCDA5, 0xCDA7, 0xCDA9, 0xCDB0, 0xCDC4, 0xCDCC, 0xCDD0, + 0xCDE8, 0xCDEC, 0xCDF0, 0xCDF8, 0xCDF9, 0xCDFB, 0xCDFD, 0xCE04, 0xCE08, + 0xCE0C, 0xCE14, 0xCE19, 0xCE20, 0xCE21, 0xCE24, 0xCE28, 0xCE30, 0xCE31, + 0xCE33, 0xCE35, ERROR}, + { ERROR, 0xD6AB, 0xD6AD, 0xD6AE, 0xD6AF, 0xD6B1, 0xD6B2, 0xD6B3, 0xD6B4, + 0xD6B5, 0xD6B6, 0xD6B7, 0xD6B8, 0xD6BA, 0xD6BC, 0xD6BD, 0xD6BE, 0xD6BF, + 0xD6C0, 0xD6C1, 0xD6C2, 0xD6C3, 0xD6C6, 0xD6C7, 0xD6C9, 0xD6CA, 0xD6CB, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD6CD, 0xD6CE, 0xD6CF, + 0xD6D0, 0xD6D2, 0xD6D3, 0xD6D5, 0xD6D6, 0xD6D8, 0xD6DA, 0xD6DB, 0xD6DC, + 0xD6DD, 0xD6DE, 0xD6DF, 0xD6E1, 0xD6E2, 0xD6E3, 0xD6E5, 0xD6E6, 0xD6E7, + 0xD6E9, 0xD6EA, 0xD6EB, 0xD6EC, 0xD6ED, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD6EE, 0xD6EF, 0xD6F1, 0xD6F2, 0xD6F3, 0xD6F4, 0xD6F6, + 0xD6F7, 0xD6F8, 0xD6F9, 0xD6FA, 0xD6FB, 0xD6FE, 0xD6FF, 0xD701, 0xD702, + 0xD703, 0xD705, 0xD706, 0xD707, 0xD708, 0xD709, 0xD70A, 0xD70B, 0xD70C, + 0xD70D, 0xD70E, 0xD70F, 0xD710, 0xD712, 0xD713, 0xD714, 0xCE58, 0xCE59, + 0xCE5C, 0xCE5F, 0xCE60, 0xCE61, 0xCE68, 0xCE69, 0xCE6B, 0xCE6D, 0xCE74, + 0xCE75, 0xCE78, 0xCE7C, 0xCE84, 0xCE85, 0xCE87, 0xCE89, 0xCE90, 0xCE91, + 0xCE94, 0xCE98, 0xCEA0, 0xCEA1, 0xCEA3, 0xCEA4, 0xCEA5, 0xCEAC, 0xCEAD, + 0xCEC1, 0xCEE4, 0xCEE5, 0xCEE8, 0xCEEB, 0xCEEC, 0xCEF4, 0xCEF5, 0xCEF7, + 0xCEF8, 0xCEF9, 0xCF00, 0xCF01, 0xCF04, 0xCF08, 0xCF10, 0xCF11, 0xCF13, + 0xCF15, 0xCF1C, 0xCF20, 0xCF24, 0xCF2C, 0xCF2D, 0xCF2F, 0xCF30, 0xCF31, + 0xCF38, 0xCF54, 0xCF55, 0xCF58, 0xCF5C, 0xCF64, 0xCF65, 0xCF67, 0xCF69, + 0xCF70, 0xCF71, 0xCF74, 0xCF78, 0xCF80, 0xCF85, 0xCF8C, 0xCFA1, 0xCFA8, + 0xCFB0, 0xCFC4, 0xCFE0, 0xCFE1, 0xCFE4, 0xCFE8, 0xCFF0, 0xCFF1, 0xCFF3, + 0xCFF5, 0xCFFC, 0xD000, 0xD004, 0xD011, 0xD018, 0xD02D, 0xD034, 0xD035, + 0xD038, 0xD03C, ERROR}, + { ERROR, 0xD715, 0xD716, 0xD717, 0xD71A, 0xD71B, 0xD71D, 0xD71E, 0xD71F, + 0xD721, 0xD722, 0xD723, 0xD724, 0xD725, 0xD726, 0xD727, 0xD72A, 0xD72C, + 0xD72E, 0xD72F, 0xD730, 0xD731, 0xD732, 0xD733, 0xD736, 0xD737, 0xD739, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD73A, 0xD73B, 0xD73D, + 0xD73E, 0xD73F, 0xD740, 0xD741, 0xD742, 0xD743, 0xD745, 0xD746, 0xD748, + 0xD74A, 0xD74B, 0xD74C, 0xD74D, 0xD74E, 0xD74F, 0xD752, 0xD753, 0xD755, + 0xD75A, 0xD75B, 0xD75C, 0xD75D, 0xD75E, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, 0xD75F, 0xD762, 0xD764, 0xD766, 0xD767, 0xD768, 0xD76A, + 0xD76B, 0xD76D, 0xD76E, 0xD76F, 0xD771, 0xD772, 0xD773, 0xD775, 0xD776, + 0xD777, 0xD778, 0xD779, 0xD77A, 0xD77B, 0xD77E, 0xD77F, 0xD780, 0xD782, + 0xD783, 0xD784, 0xD785, 0xD786, 0xD787, 0xD78A, 0xD78B, 0xD044, 0xD045, + 0xD047, 0xD049, 0xD050, 0xD054, 0xD058, 0xD060, 0xD06C, 0xD06D, 0xD070, + 0xD074, 0xD07C, 0xD07D, 0xD081, 0xD0A4, 0xD0A5, 0xD0A8, 0xD0AC, 0xD0B4, + 0xD0B5, 0xD0B7, 0xD0B9, 0xD0C0, 0xD0C1, 0xD0C4, 0xD0C8, 0xD0C9, 0xD0D0, + 0xD0D1, 0xD0D3, 0xD0D4, 0xD0D5, 0xD0DC, 0xD0DD, 0xD0E0, 0xD0E4, 0xD0EC, + 0xD0ED, 0xD0EF, 0xD0F0, 0xD0F1, 0xD0F8, 0xD10D, 0xD130, 0xD131, 0xD134, + 0xD138, 0xD13A, 0xD140, 0xD141, 0xD143, 0xD144, 0xD145, 0xD14C, 0xD14D, + 0xD150, 0xD154, 0xD15C, 0xD15D, 0xD15F, 0xD161, 0xD168, 0xD16C, 0xD17C, + 0xD184, 0xD188, 0xD1A0, 0xD1A1, 0xD1A4, 0xD1A8, 0xD1B0, 0xD1B1, 0xD1B3, + 0xD1B5, 0xD1BA, 0xD1BC, 0xD1C0, 0xD1D8, 0xD1F4, 0xD1F8, 0xD207, 0xD209, + 0xD210, 0xD22C, 0xD22D, 0xD230, 0xD234, 0xD23C, 0xD23D, 0xD23F, 0xD241, + 0xD248, 0xD25C, ERROR}, + { ERROR, 0xD78D, 0xD78E, 0xD78F, 0xD791, 0xD792, 0xD793, 0xD794, 0xD795, + 0xD796, 0xD797, 0xD79A, 0xD79C, 0xD79E, 0xD79F, 0xD7A0, 0xD7A1, 0xD7A2, + 0xD7A3, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD264, 0xD280, + 0xD281, 0xD284, 0xD288, 0xD290, 0xD291, 0xD295, 0xD29C, 0xD2A0, 0xD2A4, + 0xD2AC, 0xD2B1, 0xD2B8, 0xD2B9, 0xD2BC, 0xD2BF, 0xD2C0, 0xD2C2, 0xD2C8, + 0xD2C9, 0xD2CB, 0xD2D4, 0xD2D8, 0xD2DC, 0xD2E4, 0xD2E5, 0xD2F0, 0xD2F1, + 0xD2F4, 0xD2F8, 0xD300, 0xD301, 0xD303, 0xD305, 0xD30C, 0xD30D, 0xD30E, + 0xD310, 0xD314, 0xD316, 0xD31C, 0xD31D, 0xD31F, 0xD320, 0xD321, 0xD325, + 0xD328, 0xD329, 0xD32C, 0xD330, 0xD338, 0xD339, 0xD33B, 0xD33C, 0xD33D, + 0xD344, 0xD345, 0xD37C, 0xD37D, 0xD380, 0xD384, 0xD38C, 0xD38D, 0xD38F, + 0xD390, 0xD391, 0xD398, 0xD399, 0xD39C, 0xD3A0, 0xD3A8, 0xD3A9, 0xD3AB, + 0xD3AD, 0xD3B4, 0xD3B8, 0xD3BC, 0xD3C4, 0xD3C5, 0xD3C8, 0xD3C9, 0xD3D0, + 0xD3D8, 0xD3E1, 0xD3E3, 0xD3EC, 0xD3ED, 0xD3F0, 0xD3F4, 0xD3FC, 0xD3FD, + 0xD3FF, 0xD401, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD408, 0xD41D, + 0xD440, 0xD444, 0xD45C, 0xD460, 0xD464, 0xD46D, 0xD46F, 0xD478, 0xD479, + 0xD47C, 0xD47F, 0xD480, 0xD482, 0xD488, 0xD489, 0xD48B, 0xD48D, 0xD494, + 0xD4A9, 0xD4CC, 0xD4D0, 0xD4D4, 0xD4DC, 0xD4DF, 0xD4E8, 0xD4EC, 0xD4F0, + 0xD4F8, 0xD4FB, 0xD4FD, 0xD504, 0xD508, 0xD50C, 0xD514, 0xD515, 0xD517, + 0xD53C, 0xD53D, 0xD540, 0xD544, 0xD54C, 0xD54D, 0xD54F, 0xD551, 0xD558, + 0xD559, 0xD55C, 0xD560, 0xD565, 0xD568, 0xD569, 0xD56B, 0xD56D, 0xD574, + 0xD575, 0xD578, 0xD57C, 0xD584, 0xD585, 0xD587, 0xD588, 0xD589, 0xD590, + 0xD5A5, 0xD5C8, 0xD5C9, 0xD5CC, 0xD5D0, 0xD5D2, 0xD5D8, 0xD5D9, 0xD5DB, + 0xD5DD, 0xD5E4, 0xD5E5, 0xD5E8, 0xD5EC, 0xD5F4, 0xD5F5, 0xD5F7, 0xD5F9, + 0xD600, 0xD601, 0xD604, 0xD608, 0xD610, 0xD611, 0xD613, 0xD614, 0xD615, + 0xD61C, 0xD620, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xD624, 0xD62D, + 0xD638, 0xD639, 0xD63C, 0xD640, 0xD645, 0xD648, 0xD649, 0xD64B, 0xD64D, + 0xD651, 0xD654, 0xD655, 0xD658, 0xD65C, 0xD667, 0xD669, 0xD670, 0xD671, + 0xD674, 0xD683, 0xD685, 0xD68C, 0xD68D, 0xD690, 0xD694, 0xD69D, 0xD69F, + 0xD6A1, 0xD6A8, 0xD6AC, 0xD6B0, 0xD6B9, 0xD6BB, 0xD6C4, 0xD6C5, 0xD6C8, + 0xD6CC, 0xD6D1, 0xD6D4, 0xD6D7, 0xD6D9, 0xD6E0, 0xD6E4, 0xD6E8, 0xD6F0, + 0xD6F5, 0xD6FC, 0xD6FD, 0xD700, 0xD704, 0xD711, 0xD718, 0xD719, 0xD71C, + 0xD720, 0xD728, 0xD729, 0xD72B, 0xD72D, 0xD734, 0xD735, 0xD738, 0xD73C, + 0xD744, 0xD747, 0xD749, 0xD750, 0xD751, 0xD754, 0xD756, 0xD757, 0xD758, + 0xD759, 0xD760, 0xD761, 0xD763, 0xD765, 0xD769, 0xD76C, 0xD770, 0xD774, + 0xD77C, 0xD77D, 0xD781, 0xD788, 0xD789, 0xD78C, 0xD790, 0xD798, 0xD799, + 0xD79B, 0xD79D, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x4F3D, 0x4F73, + 0x5047, 0x50F9, 0x52A0, 0x53EF, 0x5475, 0x54E5, 0x5609, 0x5AC1, 0x5BB6, + 0x6687, 0x67B6, 0x67B7, 0x67EF, 0x6B4C, 0x73C2, 0x75C2, 0x7A3C, 0x82DB, + 0x8304, 0x8857, 0x8888, 0x8A36, 0x8CC8, 0x8DCF, 0x8EFB, 0x8FE6, 0x99D5, + 0x523B, 0x5374, 0x5404, 0x606A, 0x6164, 0x6BBC, 0x73CF, 0x811A, 0x89BA, + 0x89D2, 0x95A3, 0x4F83, 0x520A, 0x58BE, 0x5978, 0x59E6, 0x5E72, 0x5E79, + 0x61C7, 0x63C0, 0x6746, 0x67EC, 0x687F, 0x6F97, 0x764E, 0x770B, 0x78F5, + 0x7A08, 0x7AFF, 0x7C21, 0x809D, 0x826E, 0x8271, 0x8AEB, 0x9593, 0x4E6B, + 0x559D, 0x66F7, 0x6E34, 0x78A3, 0x7AED, 0x845B, 0x8910, 0x874E, 0x97A8, + 0x52D8, 0x574E, 0x582A, 0x5D4C, 0x611F, 0x61BE, 0x6221, 0x6562, 0x67D1, + 0x6A44, 0x6E1B, 0x7518, 0x75B3, 0x76E3, 0x77B0, 0x7D3A, 0x90AF, 0x9451, + 0x9452, 0x9F95, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5323, 0x5CAC, + 0x7532, 0x80DB, 0x9240, 0x9598, 0x525B, 0x5808, 0x59DC, 0x5CA1, 0x5D17, + 0x5EB7, 0x5F3A, 0x5F4A, 0x6177, 0x6C5F, 0x757A, 0x7586, 0x7CE0, 0x7D73, + 0x7DB1, 0x7F8C, 0x8154, 0x8221, 0x8591, 0x8941, 0x8B1B, 0x92FC, 0x964D, + 0x9C47, 0x4ECB, 0x4EF7, 0x500B, 0x51F1, 0x584F, 0x6137, 0x613E, 0x6168, + 0x6539, 0x69EA, 0x6F11, 0x75A5, 0x7686, 0x76D6, 0x7B87, 0x82A5, 0x84CB, + 0xF900, 0x93A7, 0x958B, 0x5580, 0x5BA2, 0x5751, 0xF901, 0x7CB3, 0x7FB9, + 0x91B5, 0x5028, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x636E, 0x64DA, 0x64E7, + 0x6E20, 0x70AC, 0x795B, 0x8DDD, 0x8E1E, 0xF902, 0x907D, 0x9245, 0x92F8, + 0x4E7E, 0x4EF6, 0x5065, 0x5DFE, 0x5EFA, 0x6106, 0x6957, 0x8171, 0x8654, + 0x8E47, 0x9375, 0x9A2B, 0x4E5E, 0x5091, 0x6770, 0x6840, 0x5109, 0x528D, + 0x5292, 0x6AA2, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x77BC, 0x9210, + 0x9ED4, 0x52AB, 0x602F, 0x8FF2, 0x5048, 0x61A9, 0x63ED, 0x64CA, 0x683C, + 0x6A84, 0x6FC0, 0x8188, 0x89A1, 0x9694, 0x5805, 0x727D, 0x72AC, 0x7504, + 0x7D79, 0x7E6D, 0x80A9, 0x898B, 0x8B74, 0x9063, 0x9D51, 0x6289, 0x6C7A, + 0x6F54, 0x7D50, 0x7F3A, 0x8A23, 0x517C, 0x614A, 0x7B9D, 0x8B19, 0x9257, + 0x938C, 0x4EAC, 0x4FD3, 0x501E, 0x50BE, 0x5106, 0x52C1, 0x52CD, 0x537F, + 0x5770, 0x5883, 0x5E9A, 0x5F91, 0x6176, 0x61AC, 0x64CE, 0x656C, 0x666F, + 0x66BB, 0x66F4, 0x6897, 0x6D87, 0x7085, 0x70F1, 0x749F, 0x74A5, 0x74CA, + 0x75D9, 0x786C, 0x78EC, 0x7ADF, 0x7AF6, 0x7D45, 0x7D93, 0x8015, 0x803F, + 0x811B, 0x8396, 0x8B66, 0x8F15, 0x9015, 0x93E1, 0x9803, 0x9838, 0x9A5A, + 0x9BE8, 0x4FC2, 0x5553, 0x583A, 0x5951, 0x5B63, 0x5C46, 0x60B8, 0x6212, + 0x6842, 0x68B0, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x68E8, 0x6EAA, + 0x754C, 0x7678, 0x78CE, 0x7A3D, 0x7CFB, 0x7E6B, 0x7E7C, 0x8A08, 0x8AA1, + 0x8C3F, 0x968E, 0x9DC4, 0x53E4, 0x53E9, 0x544A, 0x5471, 0x56FA, 0x59D1, + 0x5B64, 0x5C3B, 0x5EAB, 0x62F7, 0x6537, 0x6545, 0x6572, 0x66A0, 0x67AF, + 0x69C1, 0x6CBD, 0x75FC, 0x7690, 0x777E, 0x7A3F, 0x7F94, 0x8003, 0x80A1, + 0x818F, 0x82E6, 0x82FD, 0x83F0, 0x85C1, 0x8831, 0x88B4, 0x8AA5, 0xF903, + 0x8F9C, 0x932E, 0x96C7, 0x9867, 0x9AD8, 0x9F13, 0x54ED, 0x659B, 0x66F2, + 0x688F, 0x7A40, 0x8C37, 0x9D60, 0x56F0, 0x5764, 0x5D11, 0x6606, 0x68B1, + 0x68CD, 0x6EFE, 0x7428, 0x889E, 0x9BE4, 0x6C68, 0xF904, 0x9AA8, 0x4F9B, + 0x516C, 0x5171, 0x529F, 0x5B54, 0x5DE5, 0x6050, 0x606D, 0x62F1, 0x63A7, + 0x653B, 0x73D9, 0x7A7A, 0x86A3, 0x8CA2, 0x978F, 0x4E32, 0x5BE1, 0x6208, + 0x679C, 0x74DC, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x79D1, 0x83D3, + 0x8A87, 0x8AB2, 0x8DE8, 0x904E, 0x934B, 0x9846, 0x5ED3, 0x69E8, 0x85FF, + 0x90ED, 0xF905, 0x51A0, 0x5B98, 0x5BEC, 0x6163, 0x68FA, 0x6B3E, 0x704C, + 0x742F, 0x74D8, 0x7BA1, 0x7F50, 0x83C5, 0x89C0, 0x8CAB, 0x95DC, 0x9928, + 0x522E, 0x605D, 0x62EC, 0x9002, 0x4F8A, 0x5149, 0x5321, 0x58D9, 0x5EE3, + 0x66E0, 0x6D38, 0x709A, 0x72C2, 0x73D6, 0x7B50, 0x80F1, 0x945B, 0x5366, + 0x639B, 0x7F6B, 0x4E56, 0x5080, 0x584A, 0x58DE, 0x602A, 0x6127, 0x62D0, + 0x69D0, 0x9B41, 0x5B8F, 0x7D18, 0x80B1, 0x8F5F, 0x4EA4, 0x50D1, 0x54AC, + 0x55AC, 0x5B0C, 0x5DA0, 0x5DE7, 0x652A, 0x654E, 0x6821, 0x6A4B, 0x72E1, + 0x768E, 0x77EF, 0x7D5E, 0x7FF9, 0x81A0, 0x854E, 0x86DF, 0x8F03, 0x8F4E, + 0x90CA, 0x9903, 0x9A55, 0x9BAB, 0x4E18, 0x4E45, 0x4E5D, 0x4EC7, 0x4FF1, + 0x5177, 0x52FE, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5340, 0x53E3, + 0x53E5, 0x548E, 0x5614, 0x5775, 0x57A2, 0x5BC7, 0x5D87, 0x5ED0, 0x61FC, + 0x62D8, 0x6551, 0x67B8, 0x67E9, 0x69CB, 0x6B50, 0x6BC6, 0x6BEC, 0x6C42, + 0x6E9D, 0x7078, 0x72D7, 0x7396, 0x7403, 0x77BF, 0x77E9, 0x7A76, 0x7D7F, + 0x8009, 0x81FC, 0x8205, 0x820A, 0x82DF, 0x8862, 0x8B33, 0x8CFC, 0x8EC0, + 0x9011, 0x90B1, 0x9264, 0x92B6, 0x99D2, 0x9A45, 0x9CE9, 0x9DD7, 0x9F9C, + 0x570B, 0x5C40, 0x83CA, 0x97A0, 0x97AB, 0x9EB4, 0x541B, 0x7A98, 0x7FA4, + 0x88D9, 0x8ECD, 0x90E1, 0x5800, 0x5C48, 0x6398, 0x7A9F, 0x5BAE, 0x5F13, + 0x7A79, 0x7AAE, 0x828E, 0x8EAC, 0x5026, 0x5238, 0x52F8, 0x5377, 0x5708, + 0x62F3, 0x6372, 0x6B0A, 0x6DC3, 0x7737, 0x53A5, 0x7357, 0x8568, 0x8E76, + 0x95D5, 0x673A, 0x6AC3, 0x6F70, 0x8A6D, 0x8ECC, 0x994B, 0xF906, 0x6677, + 0x6B78, 0x8CB4, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9B3C, 0xF907, + 0x53EB, 0x572D, 0x594E, 0x63C6, 0x69FB, 0x73EA, 0x7845, 0x7ABA, 0x7AC5, + 0x7CFE, 0x8475, 0x898F, 0x8D73, 0x9035, 0x95A8, 0x52FB, 0x5747, 0x7547, + 0x7B60, 0x83CC, 0x921E, 0xF908, 0x6A58, 0x514B, 0x524B, 0x5287, 0x621F, + 0x68D8, 0x6975, 0x9699, 0x50C5, 0x52A4, 0x52E4, 0x61C3, 0x65A4, 0x6839, + 0x69FF, 0x747E, 0x7B4B, 0x82B9, 0x83EB, 0x89B2, 0x8B39, 0x8FD1, 0x9949, + 0xF909, 0x4ECA, 0x5997, 0x64D2, 0x6611, 0x6A8E, 0x7434, 0x7981, 0x79BD, + 0x82A9, 0x887E, 0x887F, 0x895F, 0xF90A, 0x9326, 0x4F0B, 0x53CA, 0x6025, + 0x6271, 0x6C72, 0x7D1A, 0x7D66, 0x4E98, 0x5162, 0x77DC, 0x80AF, 0x4F01, + 0x4F0E, 0x5176, 0x5180, 0x55DC, 0x5668, 0x573B, 0x57FA, 0x57FC, 0x5914, + 0x5947, 0x5993, 0x5BC4, 0x5C90, 0x5D0E, 0x5DF1, 0x5E7E, 0x5FCC, 0x6280, + 0x65D7, 0x65E3, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x671E, 0x671F, + 0x675E, 0x68CB, 0x68C4, 0x6A5F, 0x6B3A, 0x6C23, 0x6C7D, 0x6C82, 0x6DC7, + 0x7398, 0x7426, 0x742A, 0x7482, 0x74A3, 0x7578, 0x757F, 0x7881, 0x78EF, + 0x7941, 0x7947, 0x7948, 0x797A, 0x7B95, 0x7D00, 0x7DBA, 0x7F88, 0x8006, + 0x802D, 0x808C, 0x8A18, 0x8B4F, 0x8C48, 0x8D77, 0x9321, 0x9324, 0x98E2, + 0x9951, 0x9A0E, 0x9A0F, 0x9A65, 0x9E92, 0x7DCA, 0x4F76, 0x5409, 0x62EE, + 0x6854, 0x91D1, 0x55AB, 0x513A, 0xF90B, 0xF90C, 0x5A1C, 0x61E6, 0xF90D, + 0x62CF, 0x62FF, 0xF90E, 0xF90F, 0xF910, 0xF911, 0xF912, 0xF913, 0x90A3, + 0xF914, 0xF915, 0xF916, 0xF917, 0xF918, 0x8AFE, 0xF919, 0xF91A, 0xF91B, + 0xF91C, 0x6696, 0xF91D, 0x7156, 0xF91E, 0xF91F, 0x96E3, 0xF920, 0x634F, + 0x637A, 0x5357, 0xF921, 0x678F, 0x6960, 0x6E73, 0xF922, 0x7537, 0xF923, + 0xF924, 0xF925, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7D0D, 0xF926, + 0xF927, 0x8872, 0x56CA, 0x5A18, 0xF928, 0xF929, 0xF92A, 0xF92B, 0xF92C, + 0x4E43, 0xF92D, 0x5167, 0x5948, 0x67F0, 0x8010, 0xF92E, 0x5973, 0x5E74, + 0x649A, 0x79CA, 0x5FF5, 0x606C, 0x62C8, 0x637B, 0x5BE7, 0x5BD7, 0x52AA, + 0xF92F, 0x5974, 0x5F29, 0x6012, 0xF930, 0xF931, 0xF932, 0x7459, 0xF933, + 0xF934, 0xF935, 0xF936, 0xF937, 0xF938, 0x99D1, 0xF939, 0xF93A, 0xF93B, + 0xF93C, 0xF93D, 0xF93E, 0xF93F, 0xF940, 0xF941, 0xF942, 0xF943, 0x6FC3, + 0xF944, 0xF945, 0x81BF, 0x8FB2, 0x60F1, 0xF946, 0xF947, 0x8166, 0xF948, + 0xF949, 0x5C3F, 0xF94A, 0xF94B, 0xF94C, 0xF94D, 0xF94E, 0xF94F, 0xF950, + 0xF951, 0x5AE9, 0x8A25, 0x677B, 0x7D10, 0xF952, 0xF953, 0xF954, 0xF955, + 0xF956, 0xF957, 0x80FD, 0xF958, 0xF959, 0x5C3C, 0x6CE5, 0x533F, 0x6EBA, + 0x591A, 0x8336, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x4E39, 0x4EB6, + 0x4F46, 0x55AE, 0x5718, 0x58C7, 0x5F56, 0x65B7, 0x65E6, 0x6A80, 0x6BB5, + 0x6E4D, 0x77ED, 0x7AEF, 0x7C1E, 0x7DDE, 0x86CB, 0x8892, 0x9132, 0x935B, + 0x64BB, 0x6FBE, 0x737A, 0x75B8, 0x9054, 0x5556, 0x574D, 0x61BA, 0x64D4, + 0x66C7, 0x6DE1, 0x6E5B, 0x6F6D, 0x6FB9, 0x75F0, 0x8043, 0x81BD, 0x8541, + 0x8983, 0x8AC7, 0x8B5A, 0x931F, 0x6C93, 0x7553, 0x7B54, 0x8E0F, 0x905D, + 0x5510, 0x5802, 0x5858, 0x5E62, 0x6207, 0x649E, 0x68E0, 0x7576, 0x7CD6, + 0x87B3, 0x9EE8, 0x4EE3, 0x5788, 0x576E, 0x5927, 0x5C0D, 0x5CB1, 0x5E36, + 0x5F85, 0x6234, 0x64E1, 0x73B3, 0x81FA, 0x888B, 0x8CB8, 0x968A, 0x9EDB, + 0x5B85, 0x5FB7, 0x60B3, 0x5012, 0x5200, 0x5230, 0x5716, 0x5835, 0x5857, + 0x5C0E, 0x5C60, 0x5CF6, 0x5D8B, 0x5EA6, 0x5F92, 0x60BC, 0x6311, 0x6389, + 0x6417, 0x6843, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x68F9, 0x6AC2, + 0x6DD8, 0x6E21, 0x6ED4, 0x6FE4, 0x71FE, 0x76DC, 0x7779, 0x79B1, 0x7A3B, + 0x8404, 0x89A9, 0x8CED, 0x8DF3, 0x8E48, 0x9003, 0x9014, 0x9053, 0x90FD, + 0x934D, 0x9676, 0x97DC, 0x6BD2, 0x7006, 0x7258, 0x72A2, 0x7368, 0x7763, + 0x79BF, 0x7BE4, 0x7E9B, 0x8B80, 0x58A9, 0x60C7, 0x6566, 0x65FD, 0x66BE, + 0x6C8C, 0x711E, 0x71C9, 0x8C5A, 0x9813, 0x4E6D, 0x7A81, 0x4EDD, 0x51AC, + 0x51CD, 0x52D5, 0x540C, 0x61A7, 0x6771, 0x6850, 0x68DF, 0x6D1E, 0x6F7C, + 0x75BC, 0x77B3, 0x7AE5, 0x80F4, 0x8463, 0x9285, 0x515C, 0x6597, 0x675C, + 0x6793, 0x75D8, 0x7AC7, 0x8373, 0xF95A, 0x8C46, 0x9017, 0x982D, 0x5C6F, + 0x81C0, 0x829A, 0x9041, 0x906F, 0x920D, 0x5F97, 0x5D9D, 0x6A59, 0x71C8, + 0x767B, 0x7B49, 0x85E4, 0x8B04, 0x9127, 0x9A30, 0x5587, 0x61F6, 0xF95B, + 0x7669, 0x7F85, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x863F, 0x87BA, + 0x88F8, 0x908F, 0xF95C, 0x6D1B, 0x70D9, 0x73DE, 0x7D61, 0x843D, 0xF95D, + 0x916A, 0x99F1, 0xF95E, 0x4E82, 0x5375, 0x6B04, 0x6B12, 0x703E, 0x721B, + 0x862D, 0x9E1E, 0x524C, 0x8FA3, 0x5D50, 0x64E5, 0x652C, 0x6B16, 0x6FEB, + 0x7C43, 0x7E9C, 0x85CD, 0x8964, 0x89BD, 0x62C9, 0x81D8, 0x881F, 0x5ECA, + 0x6717, 0x6D6A, 0x72FC, 0x7405, 0x746F, 0x8782, 0x90DE, 0x4F86, 0x5D0D, + 0x5FA0, 0x840A, 0x51B7, 0x63A0, 0x7565, 0x4EAE, 0x5006, 0x5169, 0x51C9, + 0x6881, 0x6A11, 0x7CAE, 0x7CB1, 0x7CE7, 0x826F, 0x8AD2, 0x8F1B, 0x91CF, + 0x4FB6, 0x5137, 0x52F5, 0x5442, 0x5EEC, 0x616E, 0x623E, 0x65C5, 0x6ADA, + 0x6FFE, 0x792A, 0x85DC, 0x8823, 0x95AD, 0x9A62, 0x9A6A, 0x9E97, 0x9ECE, + 0x529B, 0x66C6, 0x6B77, 0x701D, 0x792B, 0x8F62, 0x9742, 0x6190, 0x6200, + 0x6523, 0x6F23, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7149, 0x7489, + 0x7DF4, 0x806F, 0x84EE, 0x8F26, 0x9023, 0x934A, 0x51BD, 0x5217, 0x52A3, + 0x6D0C, 0x70C8, 0x88C2, 0x5EC9, 0x6582, 0x6BAE, 0x6FC2, 0x7C3E, 0x7375, + 0x4EE4, 0x4F36, 0x56F9, 0xF95F, 0x5CBA, 0x5DBA, 0x601C, 0x73B2, 0x7B2D, + 0x7F9A, 0x7FCE, 0x8046, 0x901E, 0x9234, 0x96F6, 0x9748, 0x9818, 0x9F61, + 0x4F8B, 0x6FA7, 0x79AE, 0x91B4, 0x96B7, 0x52DE, 0xF960, 0x6488, 0x64C4, + 0x6AD3, 0x6F5E, 0x7018, 0x7210, 0x76E7, 0x8001, 0x8606, 0x865C, 0x8DEF, + 0x8F05, 0x9732, 0x9B6F, 0x9DFA, 0x9E75, 0x788C, 0x797F, 0x7DA0, 0x83C9, + 0x9304, 0x9E7F, 0x9E93, 0x8AD6, 0x58DF, 0x5F04, 0x6727, 0x7027, 0x74CF, + 0x7C60, 0x807E, 0x5121, 0x7028, 0x7262, 0x78CA, 0x8CC2, 0x8CDA, 0x8CF4, + 0x96F7, 0x4E86, 0x50DA, 0x5BEE, 0x5ED6, 0x6599, 0x71CE, 0x7642, 0x77AD, + 0x804A, 0x84FC, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x907C, 0x9B27, + 0x9F8D, 0x58D8, 0x5A41, 0x5C62, 0x6A13, 0x6DDA, 0x6F0F, 0x763B, 0x7D2F, + 0x7E37, 0x851E, 0x8938, 0x93E4, 0x964B, 0x5289, 0x65D2, 0x67F3, 0x69B4, + 0x6D41, 0x6E9C, 0x700F, 0x7409, 0x7460, 0x7559, 0x7624, 0x786B, 0x8B2C, + 0x985E, 0x516D, 0x622E, 0x9678, 0x4F96, 0x502B, 0x5D19, 0x6DEA, 0x7DB8, + 0x8F2A, 0x5F8B, 0x6144, 0x6817, 0xF961, 0x9686, 0x52D2, 0x808B, 0x51DC, + 0x51CC, 0x695E, 0x7A1C, 0x7DBE, 0x83F1, 0x9675, 0x4FDA, 0x5229, 0x5398, + 0x540F, 0x550E, 0x5C65, 0x60A7, 0x674E, 0x68A8, 0x6D6C, 0x7281, 0x72F8, + 0x7406, 0x7483, 0xF962, 0x75E2, 0x7C6C, 0x7F79, 0x7FB8, 0x8389, 0x88CF, + 0x88E1, 0x91CC, 0x91D0, 0x96E2, 0x9BC9, 0x541D, 0x6F7E, 0x71D0, 0x7498, + 0x85FA, 0x8EAA, 0x96A3, 0x9C57, 0x9E9F, 0x6797, 0x6DCB, 0x7433, 0x81E8, + 0x9716, 0x782C, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7ACB, 0x7B20, + 0x7C92, 0x6469, 0x746A, 0x75F2, 0x78BC, 0x78E8, 0x99AC, 0x9B54, 0x9EBB, + 0x5BDE, 0x5E55, 0x6F20, 0x819C, 0x83AB, 0x9088, 0x4E07, 0x534D, 0x5A29, + 0x5DD2, 0x5F4E, 0x6162, 0x633D, 0x6669, 0x66FC, 0x6EFF, 0x6F2B, 0x7063, + 0x779E, 0x842C, 0x8513, 0x883B, 0x8F13, 0x9945, 0x9C3B, 0x551C, 0x62B9, + 0x672B, 0x6CAB, 0x8309, 0x896A, 0x977A, 0x4EA1, 0x5984, 0x5FD8, 0x5FD9, + 0x671B, 0x7DB2, 0x7F54, 0x8292, 0x832B, 0x83BD, 0x8F1E, 0x9099, 0x57CB, + 0x59B9, 0x5A92, 0x5BD0, 0x6627, 0x679A, 0x6885, 0x6BCF, 0x7164, 0x7F75, + 0x8CB7, 0x8CE3, 0x9081, 0x9B45, 0x8108, 0x8C8A, 0x964C, 0x9A40, 0x9EA5, + 0x5B5F, 0x6C13, 0x731B, 0x76F2, 0x76DF, 0x840C, 0x51AA, 0x8993, 0x514D, + 0x5195, 0x52C9, 0x68C9, 0x6C94, 0x7704, 0x7720, 0x7DBF, 0x7DEC, 0x9762, + 0x9EB5, 0x6EC5, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8511, 0x51A5, + 0x540D, 0x547D, 0x660E, 0x669D, 0x6927, 0x6E9F, 0x76BF, 0x7791, 0x8317, + 0x84C2, 0x879F, 0x9169, 0x9298, 0x9CF4, 0x8882, 0x4FAE, 0x5192, 0x52DF, + 0x59C6, 0x5E3D, 0x6155, 0x6478, 0x6479, 0x66AE, 0x67D0, 0x6A21, 0x6BCD, + 0x6BDB, 0x725F, 0x7261, 0x7441, 0x7738, 0x77DB, 0x8017, 0x82BC, 0x8305, + 0x8B00, 0x8B28, 0x8C8C, 0x6728, 0x6C90, 0x7267, 0x76EE, 0x7766, 0x7A46, + 0x9DA9, 0x6B7F, 0x6C92, 0x5922, 0x6726, 0x8499, 0x536F, 0x5893, 0x5999, + 0x5EDF, 0x63CF, 0x6634, 0x6773, 0x6E3A, 0x732B, 0x7AD7, 0x82D7, 0x9328, + 0x52D9, 0x5DEB, 0x61AE, 0x61CB, 0x620A, 0x62C7, 0x64AB, 0x65E0, 0x6959, + 0x6B66, 0x6BCB, 0x7121, 0x73F7, 0x755D, 0x7E46, 0x821E, 0x8302, 0x856A, + 0x8AA3, 0x8CBF, 0x9727, 0x9D61, 0x58A8, 0x9ED8, 0x5011, 0x520E, 0x543B, + 0x554F, 0x6587, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6C76, 0x7D0A, + 0x7D0B, 0x805E, 0x868A, 0x9580, 0x96EF, 0x52FF, 0x6C95, 0x7269, 0x5473, + 0x5A9A, 0x5C3E, 0x5D4B, 0x5F4C, 0x5FAE, 0x672A, 0x68B6, 0x6963, 0x6E3C, + 0x6E44, 0x7709, 0x7C73, 0x7F8E, 0x8587, 0x8B0E, 0x8FF7, 0x9761, 0x9EF4, + 0x5CB7, 0x60B6, 0x610D, 0x61AB, 0x654F, 0x65FB, 0x65FC, 0x6C11, 0x6CEF, + 0x739F, 0x73C9, 0x7DE1, 0x9594, 0x5BC6, 0x871C, 0x8B10, 0x525D, 0x535A, + 0x62CD, 0x640F, 0x64B2, 0x6734, 0x6A38, 0x6CCA, 0x73C0, 0x749E, 0x7B94, + 0x7C95, 0x7E1B, 0x818A, 0x8236, 0x8584, 0x8FEB, 0x96F9, 0x99C1, 0x4F34, + 0x534A, 0x53CD, 0x53DB, 0x62CC, 0x642C, 0x6500, 0x6591, 0x69C3, 0x6CEE, + 0x6F58, 0x73ED, 0x7554, 0x7622, 0x76E4, 0x76FC, 0x78D0, 0x78FB, 0x792C, + 0x7D46, 0x822C, 0x87E0, 0x8FD4, 0x9812, 0x98EF, 0x52C3, 0x62D4, 0x64A5, + 0x6E24, 0x6F51, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x767C, 0x8DCB, + 0x91B1, 0x9262, 0x9AEE, 0x9B43, 0x5023, 0x508D, 0x574A, 0x59A8, 0x5C28, + 0x5E47, 0x5F77, 0x623F, 0x653E, 0x65B9, 0x65C1, 0x6609, 0x678B, 0x699C, + 0x6EC2, 0x78C5, 0x7D21, 0x80AA, 0x8180, 0x822B, 0x82B3, 0x84A1, 0x868C, + 0x8A2A, 0x8B17, 0x90A6, 0x9632, 0x9F90, 0x500D, 0x4FF3, 0xF963, 0x57F9, + 0x5F98, 0x62DC, 0x6392, 0x676F, 0x6E43, 0x7119, 0x76C3, 0x80CC, 0x80DA, + 0x88F4, 0x88F5, 0x8919, 0x8CE0, 0x8F29, 0x914D, 0x966A, 0x4F2F, 0x4F70, + 0x5E1B, 0x67CF, 0x6822, 0x767D, 0x767E, 0x9B44, 0x5E61, 0x6A0A, 0x7169, + 0x71D4, 0x756A, 0xF964, 0x7E41, 0x8543, 0x85E9, 0x98DC, 0x4F10, 0x7B4F, + 0x7F70, 0x95A5, 0x51E1, 0x5E06, 0x68B5, 0x6C3E, 0x6C4E, 0x6CDB, 0x72AF, + 0x7BC4, 0x8303, 0x6CD5, 0x743A, 0x50FB, 0x5288, 0x58C1, 0x64D8, 0x6A97, + 0x74A7, 0x7656, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x78A7, 0x8617, + 0x95E2, 0x9739, 0xF965, 0x535E, 0x5F01, 0x8B8A, 0x8FA8, 0x8FAF, 0x908A, + 0x5225, 0x77A5, 0x9C49, 0x9F08, 0x4E19, 0x5002, 0x5175, 0x5C5B, 0x5E77, + 0x661E, 0x663A, 0x67C4, 0x68C5, 0x70B3, 0x7501, 0x75C5, 0x79C9, 0x7ADD, + 0x8F27, 0x9920, 0x9A08, 0x4FDD, 0x5821, 0x5831, 0x5BF6, 0x666E, 0x6B65, + 0x6D11, 0x6E7A, 0x6F7D, 0x73E4, 0x752B, 0x83E9, 0x88DC, 0x8913, 0x8B5C, + 0x8F14, 0x4F0F, 0x50D5, 0x5310, 0x535C, 0x5B93, 0x5FA9, 0x670D, 0x798F, + 0x8179, 0x832F, 0x8514, 0x8907, 0x8986, 0x8F39, 0x8F3B, 0x99A5, 0x9C12, + 0x672C, 0x4E76, 0x4FF8, 0x5949, 0x5C01, 0x5CEF, 0x5CF0, 0x6367, 0x68D2, + 0x70FD, 0x71A2, 0x742B, 0x7E2B, 0x84EC, 0x8702, 0x9022, 0x92D2, 0x9CF3, + 0x4E0D, 0x4ED8, 0x4FEF, 0x5085, 0x5256, 0x526F, 0x5426, 0x5490, 0x57E0, + 0x592B, 0x5A66, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5B5A, 0x5B75, + 0x5BCC, 0x5E9C, 0xF966, 0x6276, 0x6577, 0x65A7, 0x6D6E, 0x6EA5, 0x7236, + 0x7B26, 0x7C3F, 0x7F36, 0x8150, 0x8151, 0x819A, 0x8240, 0x8299, 0x83A9, + 0x8A03, 0x8CA0, 0x8CE6, 0x8CFB, 0x8D74, 0x8DBA, 0x90E8, 0x91DC, 0x961C, + 0x9644, 0x99D9, 0x9CE7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58B3, 0x5954, + 0x596E, 0x5FFF, 0x61A4, 0x626E, 0x6610, 0x6C7E, 0x711A, 0x76C6, 0x7C89, + 0x7CDE, 0x7D1B, 0x82AC, 0x8CC1, 0x96F0, 0xF967, 0x4F5B, 0x5F17, 0x5F7F, + 0x62C2, 0x5D29, 0x670B, 0x68DA, 0x787C, 0x7E43, 0x9D6C, 0x4E15, 0x5099, + 0x5315, 0x532A, 0x5351, 0x5983, 0x5A62, 0x5E87, 0x60B2, 0x618A, 0x6249, + 0x6279, 0x6590, 0x6787, 0x69A7, 0x6BD4, 0x6BD6, 0x6BD7, 0x6BD8, 0x6CB8, + 0xF968, 0x7435, 0x75FA, 0x7812, 0x7891, 0x79D5, 0x79D8, 0x7C83, 0x7DCB, + 0x7FE1, 0x80A5, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x813E, 0x81C2, + 0x83F2, 0x871A, 0x88E8, 0x8AB9, 0x8B6C, 0x8CBB, 0x9119, 0x975E, 0x98DB, + 0x9F3B, 0x56AC, 0x5B2A, 0x5F6C, 0x658C, 0x6AB3, 0x6BAF, 0x6D5C, 0x6FF1, + 0x7015, 0x725D, 0x73AD, 0x8CA7, 0x8CD3, 0x983B, 0x6191, 0x6C37, 0x8058, + 0x9A01, 0x4E4D, 0x4E8B, 0x4E9B, 0x4ED5, 0x4F3A, 0x4F3C, 0x4F7F, 0x4FDF, + 0x50FF, 0x53F2, 0x53F8, 0x5506, 0x55E3, 0x56DB, 0x58EB, 0x5962, 0x5A11, + 0x5BEB, 0x5BFA, 0x5C04, 0x5DF3, 0x5E2B, 0x5F99, 0x601D, 0x6368, 0x659C, + 0x65AF, 0x67F6, 0x67FB, 0x68AD, 0x6B7B, 0x6C99, 0x6CD7, 0x6E23, 0x7009, + 0x7345, 0x7802, 0x793E, 0x7940, 0x7960, 0x79C1, 0x7BE9, 0x7D17, 0x7D72, + 0x8086, 0x820D, 0x838E, 0x84D1, 0x86C7, 0x88DF, 0x8A50, 0x8A5E, 0x8B1D, + 0x8CDC, 0x8D66, 0x8FAD, 0x90AA, 0x98FC, 0x99DF, 0x9E9D, 0x524A, 0xF969, + 0x6714, 0xF96A, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5098, 0x522A, + 0x5C71, 0x6563, 0x6C55, 0x73CA, 0x7523, 0x759D, 0x7B97, 0x849C, 0x9178, + 0x9730, 0x4E77, 0x6492, 0x6BBA, 0x715E, 0x85A9, 0x4E09, 0xF96B, 0x6749, + 0x68EE, 0x6E17, 0x829F, 0x8518, 0x886B, 0x63F7, 0x6F81, 0x9212, 0x98AF, + 0x4E0A, 0x50B7, 0x50CF, 0x511F, 0x5546, 0x55AA, 0x5617, 0x5B40, 0x5C19, + 0x5CE0, 0x5E38, 0x5E8A, 0x5EA0, 0x5EC2, 0x60F3, 0x6851, 0x6A61, 0x6E58, + 0x723D, 0x7240, 0x72C0, 0x76F8, 0x7965, 0x7BB1, 0x7FD4, 0x88F3, 0x89F4, + 0x8A73, 0x8C61, 0x8CDE, 0x971C, 0x585E, 0x74BD, 0x8CFD, 0x55C7, 0xF96C, + 0x7A61, 0x7D22, 0x8272, 0x7272, 0x751F, 0x7525, 0xF96D, 0x7B19, 0x5885, + 0x58FB, 0x5DBC, 0x5E8F, 0x5EB6, 0x5F90, 0x6055, 0x6292, 0x637F, 0x654D, + 0x6691, 0x66D9, 0x66F8, 0x6816, 0x68F2, 0x7280, 0x745E, 0x7B6E, 0x7D6E, + 0x7DD6, 0x7F72, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x80E5, 0x8212, + 0x85AF, 0x897F, 0x8A93, 0x901D, 0x92E4, 0x9ECD, 0x9F20, 0x5915, 0x596D, + 0x5E2D, 0x60DC, 0x6614, 0x6673, 0x6790, 0x6C50, 0x6DC5, 0x6F5F, 0x77F3, + 0x78A9, 0x84C6, 0x91CB, 0x932B, 0x4ED9, 0x50CA, 0x5148, 0x5584, 0x5B0B, + 0x5BA3, 0x6247, 0x657E, 0x65CB, 0x6E32, 0x717D, 0x7401, 0x7444, 0x7487, + 0x74BF, 0x766C, 0x79AA, 0x7DDA, 0x7E55, 0x7FA8, 0x817A, 0x81B3, 0x8239, + 0x861A, 0x87EC, 0x8A75, 0x8DE3, 0x9078, 0x9291, 0x9425, 0x994D, 0x9BAE, + 0x5368, 0x5C51, 0x6954, 0x6CC4, 0x6D29, 0x6E2B, 0x820C, 0x859B, 0x893B, + 0x8A2D, 0x8AAA, 0x96EA, 0x9F67, 0x5261, 0x66B9, 0x6BB2, 0x7E96, 0x87FE, + 0x8D0D, 0x9583, 0x965D, 0x651D, 0x6D89, 0x71EE, 0xF96E, 0x57CE, 0x59D3, + 0x5BAC, 0x6027, 0x60FA, 0x6210, 0x661F, 0x665F, 0x7329, 0x73F9, 0x76DB, + 0x7701, 0x7B6C, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8056, 0x8072, + 0x8165, 0x8AA0, 0x9192, 0x4E16, 0x52E2, 0x6B72, 0x6D17, 0x7A05, 0x7B39, + 0x7D30, 0xF96F, 0x8CB0, 0x53EC, 0x562F, 0x5851, 0x5BB5, 0x5C0F, 0x5C11, + 0x5DE2, 0x6240, 0x6383, 0x6414, 0x662D, 0x68B3, 0x6CBC, 0x6D88, 0x6EAF, + 0x701F, 0x70A4, 0x71D2, 0x7526, 0x758F, 0x758E, 0x7619, 0x7B11, 0x7BE0, + 0x7C2B, 0x7D20, 0x7D39, 0x852C, 0x856D, 0x8607, 0x8A34, 0x900D, 0x9061, + 0x90B5, 0x92B7, 0x97F6, 0x9A37, 0x4FD7, 0x5C6C, 0x675F, 0x6D91, 0x7C9F, + 0x7E8C, 0x8B16, 0x8D16, 0x901F, 0x5B6B, 0x5DFD, 0x640D, 0x84C0, 0x905C, + 0x98E1, 0x7387, 0x5B8B, 0x609A, 0x677E, 0x6DDE, 0x8A1F, 0x8AA6, 0x9001, + 0x980C, 0x5237, 0xF970, 0x7051, 0x788E, 0x9396, 0x8870, 0x91D7, 0x4FEE, + 0x53D7, 0x55FD, 0x56DA, 0x5782, 0x58FD, 0x5AC2, 0x5B88, 0x5CAB, 0x5CC0, + 0x5E25, 0x6101, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x620D, 0x624B, + 0x6388, 0x641C, 0x6536, 0x6578, 0x6A39, 0x6B8A, 0x6C34, 0x6D19, 0x6F31, + 0x71E7, 0x72E9, 0x7378, 0x7407, 0x74B2, 0x7626, 0x7761, 0x79C0, 0x7A57, + 0x7AEA, 0x7CB9, 0x7D8F, 0x7DAC, 0x7E61, 0x7F9E, 0x8129, 0x8331, 0x8490, + 0x84DA, 0x85EA, 0x8896, 0x8AB0, 0x8B90, 0x8F38, 0x9042, 0x9083, 0x916C, + 0x9296, 0x92B9, 0x968B, 0x96A7, 0x96A8, 0x96D6, 0x9700, 0x9808, 0x9996, + 0x9AD3, 0x9B1A, 0x53D4, 0x587E, 0x5919, 0x5B70, 0x5BBF, 0x6DD1, 0x6F5A, + 0x719F, 0x7421, 0x74B9, 0x8085, 0x83FD, 0x5DE1, 0x5F87, 0x5FAA, 0x6042, + 0x65EC, 0x6812, 0x696F, 0x6A53, 0x6B89, 0x6D35, 0x6DF3, 0x73E3, 0x76FE, + 0x77AC, 0x7B4D, 0x7D14, 0x8123, 0x821C, 0x8340, 0x84F4, 0x8563, 0x8A62, + 0x8AC4, 0x9187, 0x931E, 0x9806, 0x99B4, 0x620C, 0x8853, 0x8FF0, 0x9265, + 0x5D07, 0x5D27, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5D69, 0x745F, + 0x819D, 0x8768, 0x6FD5, 0x62FE, 0x7FD2, 0x8936, 0x8972, 0x4E1E, 0x4E58, + 0x50E7, 0x52DD, 0x5347, 0x627F, 0x6607, 0x7E69, 0x8805, 0x965E, 0x4F8D, + 0x5319, 0x5636, 0x59CB, 0x5AA4, 0x5C38, 0x5C4E, 0x5C4D, 0x5E02, 0x5F11, + 0x6043, 0x65BD, 0x662F, 0x6642, 0x67BE, 0x67F4, 0x731C, 0x77E2, 0x793A, + 0x7FC5, 0x8494, 0x84CD, 0x8996, 0x8A66, 0x8A69, 0x8AE1, 0x8C55, 0x8C7A, + 0x57F4, 0x5BD4, 0x5F0F, 0x606F, 0x62ED, 0x690D, 0x6B96, 0x6E5C, 0x7184, + 0x7BD2, 0x8755, 0x8B58, 0x8EFE, 0x98DF, 0x98FE, 0x4F38, 0x4F81, 0x4FE1, + 0x547B, 0x5A20, 0x5BB8, 0x613C, 0x65B0, 0x6668, 0x71FC, 0x7533, 0x795E, + 0x7D33, 0x814E, 0x81E3, 0x8398, 0x85AA, 0x85CE, 0x8703, 0x8A0A, 0x8EAB, + 0x8F9B, 0xF971, 0x8FC5, 0x5931, 0x5BA4, 0x5BE6, 0x6089, 0x5BE9, 0x5C0B, + 0x5FC3, 0x6C81, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xF972, 0x6DF1, + 0x700B, 0x751A, 0x82AF, 0x8AF6, 0x4EC0, 0x5341, 0xF973, 0x96D9, 0x6C0F, + 0x4E9E, 0x4FC4, 0x5152, 0x555E, 0x5A25, 0x5CE8, 0x6211, 0x7259, 0x82BD, + 0x83AA, 0x86FE, 0x8859, 0x8A1D, 0x963F, 0x96C5, 0x9913, 0x9D09, 0x9D5D, + 0x580A, 0x5CB3, 0x5DBD, 0x5E44, 0x60E1, 0x6115, 0x63E1, 0x6A02, 0x6E25, + 0x9102, 0x9354, 0x984E, 0x9C10, 0x9F77, 0x5B89, 0x5CB8, 0x6309, 0x664F, + 0x6848, 0x773C, 0x96C1, 0x978D, 0x9854, 0x9B9F, 0x65A1, 0x8B01, 0x8ECB, + 0x95BC, 0x5535, 0x5CA9, 0x5DD6, 0x5EB5, 0x6697, 0x764C, 0x83F4, 0x95C7, + 0x58D3, 0x62BC, 0x72CE, 0x9D28, 0x4EF0, 0x592E, 0x600F, 0x663B, 0x6B83, + 0x79E7, 0x9D26, 0x5393, 0x54C0, 0x57C3, 0x5D16, 0x611B, 0x66D6, 0x6DAF, + 0x788D, 0x827E, 0x9698, 0x9744, 0x5384, 0x627C, 0x6396, 0x6DB2, 0x7E0A, + 0x814B, 0x984D, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6AFB, 0x7F4C, + 0x9DAF, 0x9E1A, 0x4E5F, 0x503B, 0x51B6, 0x591C, 0x60F9, 0x63F6, 0x6930, + 0x723A, 0x8036, 0xF974, 0x91CE, 0x5F31, 0xF975, 0xF976, 0x7D04, 0x82E5, + 0x846F, 0x84BB, 0x85E5, 0x8E8D, 0xF977, 0x4F6F, 0xF978, 0xF979, 0x58E4, + 0x5B43, 0x6059, 0x63DA, 0x6518, 0x656D, 0x6698, 0xF97A, 0x694A, 0x6A23, + 0x6D0B, 0x7001, 0x716C, 0x75D2, 0x760D, 0x79B3, 0x7A70, 0xF97B, 0x7F8A, + 0xF97C, 0x8944, 0xF97D, 0x8B93, 0x91C0, 0x967D, 0xF97E, 0x990A, 0x5704, + 0x5FA1, 0x65BC, 0x6F01, 0x7600, 0x79A6, 0x8A9E, 0x99AD, 0x9B5A, 0x9F6C, + 0x5104, 0x61B6, 0x6291, 0x6A8D, 0x81C6, 0x5043, 0x5830, 0x5F66, 0x7109, + 0x8A00, 0x8AFA, 0x5B7C, 0x8616, 0x4FFA, 0x513C, 0x56B4, 0x5944, 0x63A9, + 0x6DF9, 0x5DAA, 0x696D, 0x5186, 0x4E88, 0x4F59, 0xF97F, 0xF980, 0xF981, + 0x5982, 0xF982, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xF983, 0x6B5F, + 0x6C5D, 0xF984, 0x74B5, 0x7916, 0xF985, 0x8207, 0x8245, 0x8339, 0x8F3F, + 0x8F5D, 0xF986, 0x9918, 0xF987, 0xF988, 0xF989, 0x4EA6, 0xF98A, 0x57DF, + 0x5F79, 0x6613, 0xF98B, 0xF98C, 0x75AB, 0x7E79, 0x8B6F, 0xF98D, 0x9006, + 0x9A5B, 0x56A5, 0x5827, 0x59F8, 0x5A1F, 0x5BB4, 0xF98E, 0x5EF6, 0xF98F, + 0xF990, 0x6350, 0x633B, 0xF991, 0x693D, 0x6C87, 0x6CBF, 0x6D8E, 0x6D93, + 0x6DF5, 0x6F14, 0xF992, 0x70DF, 0x7136, 0x7159, 0xF993, 0x71C3, 0x71D5, + 0xF994, 0x784F, 0x786F, 0xF995, 0x7B75, 0x7DE3, 0xF996, 0x7E2F, 0xF997, + 0x884D, 0x8EDF, 0xF998, 0xF999, 0xF99A, 0x925B, 0xF99B, 0x9CF6, 0xF99C, + 0xF99D, 0xF99E, 0x6085, 0x6D85, 0xF99F, 0x71B1, 0xF9A0, 0xF9A1, 0x95B1, + 0x53AD, 0xF9A2, 0xF9A3, 0xF9A4, 0x67D3, 0xF9A5, 0x708E, 0x7130, 0x7430, + 0x8276, 0x82D2, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xF9A6, 0x95BB, + 0x9AE5, 0x9E7D, 0x66C4, 0xF9A7, 0x71C1, 0x8449, 0xF9A8, 0xF9A9, 0x584B, + 0xF9AA, 0xF9AB, 0x5DB8, 0x5F71, 0xF9AC, 0x6620, 0x668E, 0x6979, 0x69AE, + 0x6C38, 0x6CF3, 0x6E36, 0x6F41, 0x6FDA, 0x701B, 0x702F, 0x7150, 0x71DF, + 0x7370, 0xF9AD, 0x745B, 0xF9AE, 0x74D4, 0x76C8, 0x7A4E, 0x7E93, 0xF9AF, + 0xF9B0, 0x82F1, 0x8A60, 0x8FCE, 0xF9B1, 0x9348, 0xF9B2, 0x9719, 0xF9B3, + 0xF9B4, 0x4E42, 0x502A, 0xF9B5, 0x5208, 0x53E1, 0x66F3, 0x6C6D, 0x6FCA, + 0x730A, 0x777F, 0x7A62, 0x82AE, 0x85DD, 0x8602, 0xF9B6, 0x88D4, 0x8A63, + 0x8B7D, 0x8C6B, 0xF9B7, 0x92B3, 0xF9B8, 0x9713, 0x9810, 0x4E94, 0x4F0D, + 0x4FC9, 0x50B2, 0x5348, 0x543E, 0x5433, 0x55DA, 0x5862, 0x58BA, 0x5967, + 0x5A1B, 0x5BE4, 0x609F, 0xF9B9, 0x61CA, 0x6556, 0x65FF, 0x6664, 0x68A7, + 0x6C5A, 0x6FB3, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x70CF, 0x71AC, + 0x7352, 0x7B7D, 0x8708, 0x8AA4, 0x9C32, 0x9F07, 0x5C4B, 0x6C83, 0x7344, + 0x7389, 0x923A, 0x6EAB, 0x7465, 0x761F, 0x7A69, 0x7E15, 0x860A, 0x5140, + 0x58C5, 0x64C1, 0x74EE, 0x7515, 0x7670, 0x7FC1, 0x9095, 0x96CD, 0x9954, + 0x6E26, 0x74E6, 0x7AA9, 0x7AAA, 0x81E5, 0x86D9, 0x8778, 0x8A1B, 0x5A49, + 0x5B8C, 0x5B9B, 0x68A1, 0x6900, 0x6D63, 0x73A9, 0x7413, 0x742C, 0x7897, + 0x7DE9, 0x7FEB, 0x8118, 0x8155, 0x839E, 0x8C4C, 0x962E, 0x9811, 0x66F0, + 0x5F80, 0x65FA, 0x6789, 0x6C6A, 0x738B, 0x502D, 0x5A03, 0x6B6A, 0x77EE, + 0x5916, 0x5D6C, 0x5DCD, 0x7325, 0x754F, 0xF9BA, 0xF9BB, 0x50E5, 0x51F9, + 0x582F, 0x592D, 0x5996, 0x59DA, 0x5BE5, 0xF9BC, 0xF9BD, 0x5DA2, 0x62D7, + 0x6416, 0x6493, 0x64FE, 0xF9BE, 0x66DC, 0xF9BF, 0x6A48, 0xF9C0, 0x71FF, + 0x7464, 0xF9C1, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x7A88, 0x7AAF, + 0x7E47, 0x7E5E, 0x8000, 0x8170, 0xF9C2, 0x87EF, 0x8981, 0x8B20, 0x9059, + 0xF9C3, 0x9080, 0x9952, 0x617E, 0x6B32, 0x6D74, 0x7E1F, 0x8925, 0x8FB1, + 0x4FD1, 0x50AD, 0x5197, 0x52C7, 0x57C7, 0x5889, 0x5BB9, 0x5EB8, 0x6142, + 0x6995, 0x6D8C, 0x6E67, 0x6EB6, 0x7194, 0x7462, 0x7528, 0x752C, 0x8073, + 0x8338, 0x84C9, 0x8E0A, 0x9394, 0x93DE, 0xF9C4, 0x4E8E, 0x4F51, 0x5076, + 0x512A, 0x53C8, 0x53CB, 0x53F3, 0x5B87, 0x5BD3, 0x5C24, 0x611A, 0x6182, + 0x65F4, 0x725B, 0x7397, 0x7440, 0x76C2, 0x7950, 0x7991, 0x79B9, 0x7D06, + 0x7FBD, 0x828B, 0x85D5, 0x865E, 0x8FC2, 0x9047, 0x90F5, 0x91EA, 0x9685, + 0x96E8, 0x96E9, 0x52D6, 0x5F67, 0x65ED, 0x6631, 0x682F, 0x715C, 0x7A36, + 0x90C1, 0x980A, 0x4E91, 0xF9C5, 0x6A52, 0x6B9E, 0x6F90, 0x7189, 0x8018, + 0x82B8, 0x8553, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x904B, 0x9695, + 0x96F2, 0x97FB, 0x851A, 0x9B31, 0x4E90, 0x718A, 0x96C4, 0x5143, 0x539F, + 0x54E1, 0x5713, 0x5712, 0x57A3, 0x5A9B, 0x5AC4, 0x5BC3, 0x6028, 0x613F, + 0x63F4, 0x6C85, 0x6D39, 0x6E72, 0x6E90, 0x7230, 0x733F, 0x7457, 0x82D1, + 0x8881, 0x8F45, 0x9060, 0xF9C6, 0x9662, 0x9858, 0x9D1B, 0x6708, 0x8D8A, + 0x925E, 0x4F4D, 0x5049, 0x50DE, 0x5371, 0x570D, 0x59D4, 0x5A01, 0x5C09, + 0x6170, 0x6690, 0x6E2D, 0x7232, 0x744B, 0x7DEF, 0x80C3, 0x840E, 0x8466, + 0x853F, 0x875F, 0x885B, 0x8918, 0x8B02, 0x9055, 0x97CB, 0x9B4F, 0x4E73, + 0x4F91, 0x5112, 0x516A, 0xF9C7, 0x552F, 0x55A9, 0x5B7A, 0x5BA5, 0x5E7C, + 0x5E7D, 0x5EBE, 0x60A0, 0x60DF, 0x6108, 0x6109, 0x63C4, 0x6538, 0x6709, + 0xF9C8, 0x67D4, 0x67DA, 0xF9C9, 0x6961, 0x6962, 0x6CB9, 0x6D27, 0xF9CA, + 0x6E38, 0xF9CB, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6FE1, 0x7336, + 0x7337, 0xF9CC, 0x745C, 0x7531, 0xF9CD, 0x7652, 0xF9CE, 0xF9CF, 0x7DAD, + 0x81FE, 0x8438, 0x88D5, 0x8A98, 0x8ADB, 0x8AED, 0x8E30, 0x8E42, 0x904A, + 0x903E, 0x907A, 0x9149, 0x91C9, 0x936E, 0xF9D0, 0xF9D1, 0x5809, 0xF9D2, + 0x6BD3, 0x8089, 0x80B2, 0xF9D3, 0xF9D4, 0x5141, 0x596B, 0x5C39, 0xF9D5, + 0xF9D6, 0x6F64, 0x73A7, 0x80E4, 0x8D07, 0xF9D7, 0x9217, 0x958F, 0xF9D8, + 0xF9D9, 0xF9DA, 0xF9DB, 0x807F, 0x620E, 0x701C, 0x7D68, 0x878D, 0xF9DC, + 0x57A0, 0x6069, 0x6147, 0x6BB7, 0x8ABE, 0x9280, 0x96B1, 0x4E59, 0x541F, + 0x6DEB, 0x852D, 0x9670, 0x97F3, 0x98EE, 0x63D6, 0x6CE3, 0x9091, 0x51DD, + 0x61C9, 0x81BA, 0x9DF9, 0x4F9D, 0x501A, 0x5100, 0x5B9C, 0x610F, 0x61FF, + 0x64EC, 0x6905, 0x6BC5, 0x7591, 0x77E3, 0x7FA9, 0x8264, 0x858F, 0x87FB, + 0x8863, 0x8ABC, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8B70, 0x91AB, + 0x4E8C, 0x4EE5, 0x4F0A, 0xF9DD, 0xF9DE, 0x5937, 0x59E8, 0xF9DF, 0x5DF2, + 0x5F1B, 0x5F5B, 0x6021, 0xF9E0, 0xF9E1, 0xF9E2, 0xF9E3, 0x723E, 0x73E5, + 0xF9E4, 0x7570, 0x75CD, 0xF9E5, 0x79FB, 0xF9E6, 0x800C, 0x8033, 0x8084, + 0x82E1, 0x8351, 0xF9E7, 0xF9E8, 0x8CBD, 0x8CB3, 0x9087, 0xF9E9, 0xF9EA, + 0x98F4, 0x990C, 0xF9EB, 0xF9EC, 0x7037, 0x76CA, 0x7FCA, 0x7FCC, 0x7FFC, + 0x8B1A, 0x4EBA, 0x4EC1, 0x5203, 0x5370, 0xF9ED, 0x54BD, 0x56E0, 0x59FB, + 0x5BC5, 0x5F15, 0x5FCD, 0x6E6E, 0xF9EE, 0xF9EF, 0x7D6A, 0x8335, 0xF9F0, + 0x8693, 0x8A8D, 0xF9F1, 0x976D, 0x9777, 0xF9F2, 0xF9F3, 0x4E00, 0x4F5A, + 0x4F7E, 0x58F9, 0x65E5, 0x6EA2, 0x9038, 0x93B0, 0x99B9, 0x4EFB, 0x58EC, + 0x598A, 0x59D9, 0x6041, 0xF9F4, 0xF9F5, 0x7A14, 0xF9F6, 0x834F, 0x8CC3, + 0x5165, 0x5344, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xF9F7, 0xF9F8, + 0xF9F9, 0x4ECD, 0x5269, 0x5B55, 0x82BF, 0x4ED4, 0x523A, 0x54A8, 0x59C9, + 0x59FF, 0x5B50, 0x5B57, 0x5B5C, 0x6063, 0x6148, 0x6ECB, 0x7099, 0x716E, + 0x7386, 0x74F7, 0x75B5, 0x78C1, 0x7D2B, 0x8005, 0x81EA, 0x8328, 0x8517, + 0x85C9, 0x8AEE, 0x8CC7, 0x96CC, 0x4F5C, 0x52FA, 0x56BC, 0x65AB, 0x6628, + 0x707C, 0x70B8, 0x7235, 0x7DBD, 0x828D, 0x914C, 0x96C0, 0x9D72, 0x5B71, + 0x68E7, 0x6B98, 0x6F7A, 0x76DE, 0x5C91, 0x66AB, 0x6F5B, 0x7BB4, 0x7C2A, + 0x8836, 0x96DC, 0x4E08, 0x4ED7, 0x5320, 0x5834, 0x58BB, 0x58EF, 0x596C, + 0x5C07, 0x5E33, 0x5E84, 0x5F35, 0x638C, 0x66B2, 0x6756, 0x6A1F, 0x6AA3, + 0x6B0C, 0x6F3F, 0x7246, 0xF9FA, 0x7350, 0x748B, 0x7AE0, 0x7CA7, 0x8178, + 0x81DF, 0x81E7, 0x838A, 0x846C, 0x8523, 0x8594, 0x85CF, 0x88DD, 0x8D13, + 0x91AC, 0x9577, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x969C, 0x518D, + 0x54C9, 0x5728, 0x5BB0, 0x624D, 0x6750, 0x683D, 0x6893, 0x6E3D, 0x6ED3, + 0x707D, 0x7E21, 0x88C1, 0x8CA1, 0x8F09, 0x9F4B, 0x9F4E, 0x722D, 0x7B8F, + 0x8ACD, 0x931A, 0x4F47, 0x4F4E, 0x5132, 0x5480, 0x59D0, 0x5E95, 0x62B5, + 0x6775, 0x696E, 0x6A17, 0x6CAE, 0x6E1A, 0x72D9, 0x732A, 0x75BD, 0x7BB8, + 0x7D35, 0x82E7, 0x83F9, 0x8457, 0x85F7, 0x8A5B, 0x8CAF, 0x8E87, 0x9019, + 0x90B8, 0x96CE, 0x9F5F, 0x52E3, 0x540A, 0x5AE1, 0x5BC2, 0x6458, 0x6575, + 0x6EF4, 0x72C4, 0xF9FB, 0x7684, 0x7A4D, 0x7B1B, 0x7C4D, 0x7E3E, 0x7FDF, + 0x837B, 0x8B2B, 0x8CCA, 0x8D64, 0x8DE1, 0x8E5F, 0x8FEA, 0x8FF9, 0x9069, + 0x93D1, 0x4F43, 0x4F7A, 0x50B3, 0x5168, 0x5178, 0x524D, 0x526A, 0x5861, + 0x587C, 0x5960, 0x5C08, 0x5C55, 0x5EDB, 0x609B, 0x6230, 0x6813, 0x6BBF, + 0x6C08, 0x6FB1, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x714E, 0x7420, + 0x7530, 0x7538, 0x7551, 0x7672, 0x7B4C, 0x7B8B, 0x7BAD, 0x7BC6, 0x7E8F, + 0x8A6E, 0x8F3E, 0x8F49, 0x923F, 0x9293, 0x9322, 0x942B, 0x96FB, 0x985A, + 0x986B, 0x991E, 0x5207, 0x622A, 0x6298, 0x6D59, 0x7664, 0x7ACA, 0x7BC0, + 0x7D76, 0x5360, 0x5CBE, 0x5E97, 0x6F38, 0x70B9, 0x7C98, 0x9711, 0x9B8E, + 0x9EDE, 0x63A5, 0x647A, 0x8776, 0x4E01, 0x4E95, 0x4EAD, 0x505C, 0x5075, + 0x5448, 0x59C3, 0x5B9A, 0x5E40, 0x5EAD, 0x5EF7, 0x5F81, 0x60C5, 0x633A, + 0x653F, 0x6574, 0x65CC, 0x6676, 0x6678, 0x67FE, 0x6968, 0x6A89, 0x6B63, + 0x6C40, 0x6DC0, 0x6DE8, 0x6E1F, 0x6E5E, 0x701E, 0x70A1, 0x738E, 0x73FD, + 0x753A, 0x775B, 0x7887, 0x798E, 0x7A0B, 0x7A7D, 0x7CBE, 0x7D8E, 0x8247, + 0x8A02, 0x8AEA, 0x8C9E, 0x912D, 0x914A, 0x91D8, 0x9266, 0x92CC, 0x9320, + 0x9706, 0x9756, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x975C, 0x9802, + 0x9F0E, 0x5236, 0x5291, 0x557C, 0x5824, 0x5E1D, 0x5F1F, 0x608C, 0x63D0, + 0x68AF, 0x6FDF, 0x796D, 0x7B2C, 0x81CD, 0x85BA, 0x88FD, 0x8AF8, 0x8E44, + 0x918D, 0x9664, 0x969B, 0x973D, 0x984C, 0x9F4A, 0x4FCE, 0x5146, 0x51CB, + 0x52A9, 0x5632, 0x5F14, 0x5F6B, 0x63AA, 0x64CD, 0x65E9, 0x6641, 0x66FA, + 0x66F9, 0x671D, 0x689D, 0x68D7, 0x69FD, 0x6F15, 0x6F6E, 0x7167, 0x71E5, + 0x722A, 0x74AA, 0x773A, 0x7956, 0x795A, 0x79DF, 0x7A20, 0x7A95, 0x7C97, + 0x7CDF, 0x7D44, 0x7E70, 0x8087, 0x85FB, 0x86A4, 0x8A54, 0x8ABF, 0x8D99, + 0x8E81, 0x9020, 0x906D, 0x91E3, 0x963B, 0x96D5, 0x9CE5, 0x65CF, 0x7C07, + 0x8DB3, 0x93C3, 0x5B58, 0x5C0A, 0x5352, 0x62D9, 0x731D, 0x5027, 0x5B97, + 0x5F9E, 0x60B0, 0x616B, 0x68D5, 0x6DD9, 0x742E, 0x7A2E, 0x7D42, 0x7D9C, + 0x7E31, 0x816B, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8E2A, 0x8E35, + 0x937E, 0x9418, 0x4F50, 0x5750, 0x5DE6, 0x5EA7, 0x632B, 0x7F6A, 0x4E3B, + 0x4F4F, 0x4F8F, 0x505A, 0x59DD, 0x80C4, 0x546A, 0x5468, 0x55FE, 0x594F, + 0x5B99, 0x5DDE, 0x5EDA, 0x665D, 0x6731, 0x67F1, 0x682A, 0x6CE8, 0x6D32, + 0x6E4A, 0x6F8D, 0x70B7, 0x73E0, 0x7587, 0x7C4C, 0x7D02, 0x7D2C, 0x7DA2, + 0x821F, 0x86DB, 0x8A3B, 0x8A85, 0x8D70, 0x8E8A, 0x8F33, 0x9031, 0x914E, + 0x9152, 0x9444, 0x99D0, 0x7AF9, 0x7CA5, 0x4FCA, 0x5101, 0x51C6, 0x57C8, + 0x5BEF, 0x5CFB, 0x6659, 0x6A3D, 0x6D5A, 0x6E96, 0x6FEC, 0x710C, 0x756F, + 0x7AE3, 0x8822, 0x9021, 0x9075, 0x96CB, 0x99FF, 0x8301, 0x4E2D, 0x4EF2, + 0x8846, 0x91CD, 0x537D, 0x6ADB, 0x696B, 0x6C41, 0x847A, 0x589E, 0x618E, + 0x66FE, 0x62EF, 0x70DD, 0x7511, 0x75C7, 0x7E52, 0x84B8, 0x8B49, 0x8D08, + 0x4E4B, 0x53EA, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x54AB, 0x5730, + 0x5740, 0x5FD7, 0x6301, 0x6307, 0x646F, 0x652F, 0x65E8, 0x667A, 0x679D, + 0x67B3, 0x6B62, 0x6C60, 0x6C9A, 0x6F2C, 0x77E5, 0x7825, 0x7949, 0x7957, + 0x7D19, 0x80A2, 0x8102, 0x81F3, 0x829D, 0x82B7, 0x8718, 0x8A8C, 0xF9FC, + 0x8D04, 0x8DBE, 0x9072, 0x76F4, 0x7A19, 0x7A37, 0x7E54, 0x8077, 0x5507, + 0x55D4, 0x5875, 0x632F, 0x6422, 0x6649, 0x664B, 0x686D, 0x699B, 0x6B84, + 0x6D25, 0x6EB1, 0x73CD, 0x7468, 0x74A1, 0x755B, 0x75B9, 0x76E1, 0x771E, + 0x778B, 0x79E6, 0x7E09, 0x7E1D, 0x81FB, 0x852F, 0x8897, 0x8A3A, 0x8CD1, + 0x8EEB, 0x8FB0, 0x9032, 0x93AD, 0x9663, 0x9673, 0x9707, 0x4F84, 0x53F1, + 0x59EA, 0x5AC9, 0x5E19, 0x684E, 0x74C6, 0x75BE, 0x79E9, 0x7A92, 0x81A3, + 0x86ED, 0x8CEA, 0x8DCC, 0x8FED, 0x659F, 0x6715, 0xF9FD, 0x57F7, 0x6F57, + 0x7DDD, 0x8F2F, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x93F6, 0x96C6, + 0x5FB5, 0x61F2, 0x6F84, 0x4E14, 0x4F98, 0x501F, 0x53C9, 0x55DF, 0x5D6F, + 0x5DEE, 0x6B21, 0x6B64, 0x78CB, 0x7B9A, 0xF9FE, 0x8E49, 0x8ECA, 0x906E, + 0x6349, 0x643E, 0x7740, 0x7A84, 0x932F, 0x947F, 0x9F6A, 0x64B0, 0x6FAF, + 0x71E6, 0x74A8, 0x74DA, 0x7AC4, 0x7C12, 0x7E82, 0x7CB2, 0x7E98, 0x8B9A, + 0x8D0A, 0x947D, 0x9910, 0x994C, 0x5239, 0x5BDF, 0x64E6, 0x672D, 0x7D2E, + 0x50ED, 0x53C3, 0x5879, 0x6158, 0x6159, 0x61FA, 0x65AC, 0x7AD9, 0x8B92, + 0x8B96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5A3C, 0x5EE0, 0x5F70, 0x6134, + 0x655E, 0x660C, 0x6636, 0x66A2, 0x69CD, 0x6EC4, 0x6F32, 0x7316, 0x7621, + 0x7A93, 0x8139, 0x8259, 0x83D6, 0x84BC, 0x50B5, 0x57F0, 0x5BC0, 0x5BE8, + 0x5F69, 0x63A1, 0x7826, 0x7DB5, 0x83DC, 0x8521, 0x91C7, 0x91F5, 0x518A, + 0x67F5, 0x7B56, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8CAC, 0x51C4, + 0x59BB, 0x60BD, 0x8655, 0x501C, 0xF9FF, 0x5254, 0x5C3A, 0x617D, 0x621A, + 0x62D3, 0x64F2, 0x65A5, 0x6ECC, 0x7620, 0x810A, 0x8E60, 0x965F, 0x96BB, + 0x4EDF, 0x5343, 0x5598, 0x5929, 0x5DDD, 0x64C5, 0x6CC9, 0x6DFA, 0x7394, + 0x7A7F, 0x821B, 0x85A6, 0x8CE4, 0x8E10, 0x9077, 0x91E7, 0x95E1, 0x9621, + 0x97C6, 0x51F8, 0x54F2, 0x5586, 0x5FB9, 0x64A4, 0x6F88, 0x7DB4, 0x8F1F, + 0x8F4D, 0x9435, 0x50C9, 0x5C16, 0x6CBE, 0x6DFB, 0x751B, 0x77BB, 0x7C3D, + 0x7C64, 0x8A79, 0x8AC2, 0x581E, 0x59BE, 0x5E16, 0x6377, 0x7252, 0x758A, + 0x776B, 0x8ADC, 0x8CBC, 0x8F12, 0x5EF3, 0x6674, 0x6DF8, 0x807D, 0x83C1, + 0x8ACB, 0x9751, 0x9BD6, 0xFA00, 0x5243, 0x66FF, 0x6D95, 0x6EEF, 0x7DE0, + 0x8AE6, 0x902E, 0x905E, 0x9AD4, 0x521D, 0x527F, 0x54E8, 0x6194, 0x6284, + 0x62DB, 0x68A2, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x6912, 0x695A, + 0x6A35, 0x7092, 0x7126, 0x785D, 0x7901, 0x790E, 0x79D2, 0x7A0D, 0x8096, + 0x8278, 0x82D5, 0x8349, 0x8549, 0x8C82, 0x8D85, 0x9162, 0x918B, 0x91AE, + 0x4FC3, 0x56D1, 0x71ED, 0x77D7, 0x8700, 0x89F8, 0x5BF8, 0x5FD6, 0x6751, + 0x90A8, 0x53E2, 0x585A, 0x5BF5, 0x60A4, 0x6181, 0x6460, 0x7E3D, 0x8070, + 0x8525, 0x9283, 0x64AE, 0x50AC, 0x5D14, 0x6700, 0x589C, 0x62BD, 0x63A8, + 0x690E, 0x6978, 0x6A1E, 0x6E6B, 0x76BA, 0x79CB, 0x82BB, 0x8429, 0x8ACF, + 0x8DA8, 0x8FFD, 0x9112, 0x914B, 0x919C, 0x9310, 0x9318, 0x939A, 0x96DB, + 0x9A36, 0x9C0D, 0x4E11, 0x755C, 0x795D, 0x7AFA, 0x7B51, 0x7BC9, 0x7E2E, + 0x84C4, 0x8E59, 0x8E74, 0x8EF8, 0x9010, 0x6625, 0x693F, 0x7443, 0x51FA, + 0x672E, 0x9EDC, 0x5145, 0x5FE0, 0x6C96, 0x87F2, 0x885D, 0x8877, 0x60B4, + 0x81B5, 0x8403, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x8D05, 0x53D6, + 0x5439, 0x5634, 0x5A36, 0x5C31, 0x708A, 0x7FE0, 0x805A, 0x8106, 0x81ED, + 0x8DA3, 0x9189, 0x9A5F, 0x9DF2, 0x5074, 0x4EC4, 0x53A0, 0x60FB, 0x6E2C, + 0x5C64, 0x4F88, 0x5024, 0x55E4, 0x5CD9, 0x5E5F, 0x6065, 0x6894, 0x6CBB, + 0x6DC4, 0x71BE, 0x75D4, 0x75F4, 0x7661, 0x7A1A, 0x7A49, 0x7DC7, 0x7DFB, + 0x7F6E, 0x81F4, 0x86A9, 0x8F1C, 0x96C9, 0x99B3, 0x9F52, 0x5247, 0x52C5, + 0x98ED, 0x89AA, 0x4E03, 0x67D2, 0x6F06, 0x4FB5, 0x5BE2, 0x6795, 0x6C88, + 0x6D78, 0x741B, 0x7827, 0x91DD, 0x937C, 0x87C4, 0x79E4, 0x7A31, 0x5FEB, + 0x4ED6, 0x54A4, 0x553E, 0x58AE, 0x59A5, 0x60F0, 0x6253, 0x62D6, 0x6736, + 0x6955, 0x8235, 0x9640, 0x99B1, 0x99DD, 0x502C, 0x5353, 0x5544, 0x577C, + 0xFA01, 0x6258, 0xFA02, 0x64E2, 0x666B, 0x67DD, 0x6FC1, 0x6FEF, 0x7422, + 0x7438, 0x8A17, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x9438, 0x5451, + 0x5606, 0x5766, 0x5F48, 0x619A, 0x6B4E, 0x7058, 0x70AD, 0x7DBB, 0x8A95, + 0x596A, 0x812B, 0x63A2, 0x7708, 0x803D, 0x8CAA, 0x5854, 0x642D, 0x69BB, + 0x5B95, 0x5E11, 0x6E6F, 0xFA03, 0x8569, 0x514C, 0x53F0, 0x592A, 0x6020, + 0x614B, 0x6B86, 0x6C70, 0x6CF0, 0x7B1E, 0x80CE, 0x82D4, 0x8DC6, 0x90B0, + 0x98B1, 0xFA04, 0x64C7, 0x6FA4, 0x6491, 0x6504, 0x514E, 0x5410, 0x571F, + 0x8A0E, 0x615F, 0x6876, 0xFA05, 0x75DB, 0x7B52, 0x7D71, 0x901A, 0x5806, + 0x69CC, 0x817F, 0x892A, 0x9000, 0x9839, 0x5078, 0x5957, 0x59AC, 0x6295, + 0x900F, 0x9B2A, 0x615D, 0x7279, 0x95D6, 0x5761, 0x5A46, 0x5DF4, 0x628A, + 0x64AD, 0x64FA, 0x6777, 0x6CE2, 0x6D3E, 0x722C, 0x7436, 0x7834, 0x7F77, + 0x82AD, 0x8DDB, 0x9817, 0x5224, 0x5742, 0x677F, 0x7248, 0x74E3, 0x8CA9, + 0x8FA6, 0x9211, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x962A, 0x516B, + 0x53ED, 0x634C, 0x4F69, 0x5504, 0x6096, 0x6557, 0x6C9B, 0x6D7F, 0x724C, + 0x72FD, 0x7A17, 0x8987, 0x8C9D, 0x5F6D, 0x6F8E, 0x70F9, 0x81A8, 0x610E, + 0x4FBF, 0x504F, 0x6241, 0x7247, 0x7BC7, 0x7DE8, 0x7FE9, 0x904D, 0x97AD, + 0x9A19, 0x8CB6, 0x576A, 0x5E73, 0x67B0, 0x840D, 0x8A55, 0x5420, 0x5B16, + 0x5E63, 0x5EE2, 0x5F0A, 0x6583, 0x80BA, 0x853D, 0x9589, 0x965B, 0x4F48, + 0x5305, 0x530D, 0x530F, 0x5486, 0x54FA, 0x5703, 0x5E03, 0x6016, 0x629B, + 0x62B1, 0x6355, 0xFA06, 0x6CE1, 0x6D66, 0x75B1, 0x7832, 0x80DE, 0x812F, + 0x82DE, 0x8461, 0x84B2, 0x888D, 0x8912, 0x900B, 0x92EA, 0x98FD, 0x9B91, + 0x5E45, 0x66B4, 0x66DD, 0x7011, 0x7206, 0xFA07, 0x4FF5, 0x527D, 0x5F6A, + 0x6153, 0x6753, 0x6A19, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8C79, 0x98C7, + 0x98C4, 0x9A43, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x54C1, 0x7A1F, + 0x6953, 0x8AF7, 0x8C4A, 0x98A8, 0x99AE, 0x5F7C, 0x62AB, 0x75B2, 0x76AE, + 0x88AB, 0x907F, 0x9642, 0x5339, 0x5F3C, 0x5FC5, 0x6CCC, 0x73CC, 0x7562, + 0x758B, 0x7B46, 0x82FE, 0x999D, 0x4E4F, 0x903C, 0x4E0B, 0x4F55, 0x53A6, + 0x590F, 0x5EC8, 0x6630, 0x6CB3, 0x7455, 0x8377, 0x8766, 0x8CC0, 0x9050, + 0x971E, 0x9C15, 0x58D1, 0x5B78, 0x8650, 0x8B14, 0x9DB4, 0x5BD2, 0x6068, + 0x608D, 0x65F1, 0x6C57, 0x6F22, 0x6FA3, 0x701A, 0x7F55, 0x7FF0, 0x9591, + 0x9592, 0x9650, 0x97D3, 0x5272, 0x8F44, 0x51FD, 0x542B, 0x54B8, 0x5563, + 0x558A, 0x6ABB, 0x6DB5, 0x7DD8, 0x8266, 0x929C, 0x9677, 0x9E79, 0x5408, + 0x54C8, 0x76D2, 0x86E4, 0x95A4, 0x95D4, 0x965C, 0x4EA2, 0x4F09, 0x59EE, + 0x5AE6, 0x5DF7, 0x6052, 0x6297, 0x676D, 0x6841, 0x6C86, 0x6E2F, 0x7F38, + 0x809B, 0x822A, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0xFA08, 0xFA09, + 0x9805, 0x4EA5, 0x5055, 0x54B3, 0x5793, 0x595A, 0x5B69, 0x5BB3, 0x61C8, + 0x6977, 0x6D77, 0x7023, 0x87F9, 0x89E3, 0x8A72, 0x8AE7, 0x9082, 0x99ED, + 0x9AB8, 0x52BE, 0x6838, 0x5016, 0x5E78, 0x674F, 0x8347, 0x884C, 0x4EAB, + 0x5411, 0x56AE, 0x73E6, 0x9115, 0x97FF, 0x9909, 0x9957, 0x9999, 0x5653, + 0x589F, 0x865B, 0x8A31, 0x61B2, 0x6AF6, 0x737B, 0x8ED2, 0x6B47, 0x96AA, + 0x9A57, 0x5955, 0x7200, 0x8D6B, 0x9769, 0x4FD4, 0x5CF4, 0x5F26, 0x61F8, + 0x665B, 0x6CEB, 0x70AB, 0x7384, 0x73B9, 0x73FE, 0x7729, 0x774D, 0x7D43, + 0x7D62, 0x7E23, 0x8237, 0x8852, 0xFA0A, 0x8CE2, 0x9249, 0x986F, 0x5B51, + 0x7A74, 0x8840, 0x9801, 0x5ACC, 0x4FE0, 0x5354, 0x593E, 0x5CFD, 0x633E, + 0x6D79, 0x72F9, 0x8105, 0x8107, 0x83A2, 0x92CF, 0x9830, 0x4EA8, 0x5144, + 0x5211, 0x578B, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x5F62, 0x6CC2, + 0x6ECE, 0x7005, 0x7050, 0x70AF, 0x7192, 0x73E9, 0x7469, 0x834A, 0x87A2, + 0x8861, 0x9008, 0x90A2, 0x93A3, 0x99A8, 0x516E, 0x5F57, 0x60E0, 0x6167, + 0x66B3, 0x8559, 0x8E4A, 0x91AF, 0x978B, 0x4E4E, 0x4E92, 0x547C, 0x58D5, + 0x58FA, 0x597D, 0x5CB5, 0x5F27, 0x6236, 0x6248, 0x660A, 0x6667, 0x6BEB, + 0x6D69, 0x6DCF, 0x6E56, 0x6EF8, 0x6F94, 0x6FE0, 0x6FE9, 0x705D, 0x72D0, + 0x7425, 0x745A, 0x74E0, 0x7693, 0x795C, 0x7CCA, 0x7E1E, 0x80E1, 0x82A6, + 0x846B, 0x84BF, 0x864E, 0x865F, 0x8774, 0x8B77, 0x8C6A, 0x93AC, 0x9800, + 0x9865, 0x60D1, 0x6216, 0x9177, 0x5A5A, 0x660F, 0x6DF7, 0x6E3E, 0x743F, + 0x9B42, 0x5FFD, 0x60DA, 0x7B0F, 0x54C4, 0x5F18, 0x6C5E, 0x6CD3, 0x6D2A, + 0x70D8, 0x7D05, 0x8679, 0x8A0C, 0x9D3B, 0x5316, 0x548C, 0x5B05, 0x6A3A, + 0x706B, 0x7575, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x798D, 0x79BE, + 0x82B1, 0x83EF, 0x8A71, 0x8B41, 0x8CA8, 0x9774, 0xFA0B, 0x64F4, 0x652B, + 0x78BA, 0x78BB, 0x7A6B, 0x4E38, 0x559A, 0x5950, 0x5BA6, 0x5E7B, 0x60A3, + 0x63DB, 0x6B61, 0x6665, 0x6853, 0x6E19, 0x7165, 0x74B0, 0x7D08, 0x9084, + 0x9A69, 0x9C25, 0x6D3B, 0x6ED1, 0x733E, 0x8C41, 0x95CA, 0x51F0, 0x5E4C, + 0x5FA8, 0x604D, 0x60F6, 0x6130, 0x614C, 0x6643, 0x6644, 0x69A5, 0x6CC1, + 0x6E5F, 0x6EC9, 0x6F62, 0x714C, 0x749C, 0x7687, 0x7BC1, 0x7C27, 0x8352, + 0x8757, 0x9051, 0x968D, 0x9EC3, 0x532F, 0x56DE, 0x5EFB, 0x5F8A, 0x6062, + 0x6094, 0x61F7, 0x6666, 0x6703, 0x6A9C, 0x6DEE, 0x6FAE, 0x7070, 0x736A, + 0x7E6A, 0x81BE, 0x8334, 0x86D4, 0x8AA8, 0x8CC4, 0x5283, 0x7372, 0x5B96, + 0x6A6B, 0x9404, 0x54EE, 0x5686, 0x5B5D, 0x6548, 0x6585, 0x66C9, 0x689F, + 0x6D8D, 0x6DC6, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, 0x723B, 0x80B4, + 0x9175, 0x9A4D, 0x4FAF, 0x5019, 0x539A, 0x540E, 0x543C, 0x5589, 0x55C5, + 0x5E3F, 0x5F8C, 0x673D, 0x7166, 0x73DD, 0x9005, 0x52DB, 0x52F3, 0x5864, + 0x58CE, 0x7104, 0x718F, 0x71FB, 0x85B0, 0x8A13, 0x6688, 0x85A8, 0x55A7, + 0x6684, 0x714A, 0x8431, 0x5349, 0x5599, 0x6BC1, 0x5F59, 0x5FBD, 0x63EE, + 0x6689, 0x7147, 0x8AF1, 0x8F1D, 0x9EBE, 0x4F11, 0x643A, 0x70CB, 0x7566, + 0x8667, 0x6064, 0x8B4E, 0x9DF8, 0x5147, 0x51F6, 0x5308, 0x6D36, 0x80F8, + 0x9ED1, 0x6615, 0x6B23, 0x7098, 0x75D5, 0x5403, 0x5C79, 0x7D07, 0x8A16, + 0x6B20, 0x6B3D, 0x6B46, 0x5438, 0x6070, 0x6D3D, 0x7FD5, 0x8208, 0x50D6, + 0x51DE, 0x559C, 0x566B, 0x56CD, 0x59EC, 0x5B09, 0x5E0C, 0x6199, 0x6198, + 0x6231, 0x665E, 0x66E6, 0x7199, 0x71B9, 0x71BA, 0x72A7, 0x79A7, 0x7A00, + 0x7FB2, 0x8A70, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, + { ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, ERROR, + ERROR, ERROR, ERROR}, +}; + +/* + * Mapping from Unicode back to KS X 1001. + * + * This inverse is done the same way the SBCS ones are done: I + * provide a list of KS X 1001 positions, sorted into ascending + * order of their Unicode values. Then we can binary-search through + * this list, referring to the above table for each comparison, to + * find the coordinates for a given code point. + * + * Generated by running the following sh+Perl over KSX1001.TXT: + +cat CP949.TXT | \ +perl -ne '$a{$3}=[hex$1,hex$2] if /^0x(\S\S)(\S\S)\s+(0x\S+)\s/;' \ + -e 'END {$o=" ";for $k (sort keys %a) { ($r,$c) = @{$a{$k}}; ' \ + -e '$o .= $C; $C = ", "; (print "$o\n"), $o=" " if length $o > 70;' \ + -e '$o .= sprintf "{%d,%d}", $r-128,$c-64; } print "$o\n"; }' + + */ + +static const struct { unsigned char r, c; } cp949_backward[] = { + {34,110}, {34,116}, {33,151}, {33,103}, {40,99}, {33,105}, {34,167}, + {33,134}, {33,126}, {41,183}, {41,184}, {34,101}, {34,146}, {33,100}, + {34,108}, {41,182}, {40,108}, {40,185}, {40,182}, {40,186}, {34,111}, + {40,97}, {40,98}, {33,127}, {40,106}, {40,109}, {41,108}, {41,97}, + {41,99}, {33,128}, {41,106}, {41,109}, {41,98}, {40,100}, {41,100}, + {41,101}, {40,102}, {41,102}, {41,103}, {40,104}, {41,104}, {40,105}, + {41,105}, {41,112}, {40,111}, {41,111}, {40,107}, {41,107}, {40,110}, + {41,110}, {34,103}, {34,112}, {34,104}, {34,107}, {34,106}, {34,109}, + {34,105}, {37,129}, {37,130}, {37,131}, {37,132}, {37,133}, {37,134}, + {37,135}, {37,136}, {37,137}, {37,138}, {37,139}, {37,140}, {37,141}, + {37,142}, {37,143}, {37,144}, {37,145}, {37,146}, {37,147}, {37,148}, + {37,149}, {37,150}, {37,151}, {37,152}, {37,161}, {37,162}, {37,163}, + {37,164}, {37,165}, {37,166}, {37,167}, {37,168}, {37,169}, {37,170}, + {37,171}, {37,172}, {37,173}, {37,174}, {37,175}, {37,176}, {37,177}, + {37,178}, {37,179}, {37,180}, {37,181}, {37,182}, {37,183}, {37,184}, + {44,103}, {44,97}, {44,98}, {44,99}, {44,100}, {44,101}, {44,102}, + {44,104}, {44,105}, {44,106}, {44,107}, {44,108}, {44,109}, {44,110}, + {44,111}, {44,112}, {44,113}, {44,114}, {44,115}, {44,116}, {44,117}, + {44,118}, {44,119}, {44,120}, {44,121}, {44,122}, {44,123}, {44,124}, + {44,125}, {44,126}, {44,127}, {44,128}, {44,129}, {44,145}, {44,146}, + {44,147}, {44,148}, {44,149}, {44,150}, {44,152}, {44,153}, {44,154}, + {44,155}, {44,156}, {44,157}, {44,158}, {44,159}, {44,160}, {44,161}, + {44,162}, {44,163}, {44,164}, {44,165}, {44,166}, {44,167}, {44,168}, + {44,169}, {44,170}, {44,171}, {44,172}, {44,173}, {44,174}, {44,175}, + {44,176}, {44,177}, {44,151}, {33,106}, {33,110}, {33,111}, {33,112}, + {33,113}, {34,147}, {34,148}, {33,101}, {33,102}, {34,118}, {33,135}, + {33,136}, {33,152}, {41,185}, {41,186}, {41,187}, {41,188}, {41,189}, + {41,190}, {34,166}, {33,137}, {34,117}, {39,100}, {34,160}, {34,165}, + {34,162}, {39,153}, {33,138}, {40,183}, {40,184}, {40,187}, {40,188}, + {40,189}, {40,190}, {37,112}, {37,113}, {37,114}, {37,115}, {37,116}, + {37,117}, {37,118}, {37,119}, {37,120}, {37,121}, {37,97}, {37,98}, + {37,99}, {37,100}, {37,101}, {37,102}, {37,103}, {37,104}, {37,105}, + {37,106}, {33,167}, {33,168}, {33,166}, {33,169}, {33,170}, {34,149}, + {34,152}, {34,150}, {34,153}, {34,151}, {34,97}, {34,98}, {34,99}, + {33,147}, {34,100}, {33,148}, {33,180}, {33,181}, {34,115}, {34,114}, + {33,174}, {33,176}, {33,132}, {33,144}, {33,107}, {33,188}, {33,189}, + {33,187}, {33,186}, {33,178}, {33,179}, {34,113}, {33,133}, {33,177}, + {33,109}, {33,175}, {33,150}, {33,129}, {33,149}, {33,130}, {33,131}, + {33,172}, {33,173}, {33,184}, {33,185}, {33,182}, {33,183}, {34,129}, + {33,145}, {33,146}, {40,167}, {40,168}, {40,169}, {40,170}, {40,171}, + {40,172}, {40,173}, {40,174}, {40,175}, {40,176}, {40,177}, {40,178}, + {40,179}, {40,180}, {40,181}, {41,167}, {41,168}, {41,169}, {41,170}, + {41,171}, {41,172}, {41,173}, {41,174}, {41,175}, {41,176}, {41,177}, + {41,178}, {41,179}, {41,180}, {41,181}, {41,141}, {41,142}, {41,143}, + {41,144}, {41,145}, {41,146}, {41,147}, {41,148}, {41,149}, {41,150}, + {41,151}, {41,152}, {41,153}, {41,154}, {41,155}, {41,156}, {41,157}, + {41,158}, {41,159}, {41,160}, {41,161}, {41,162}, {41,163}, {41,164}, + {41,165}, {41,166}, {40,141}, {40,142}, {40,143}, {40,144}, {40,145}, + {40,146}, {40,147}, {40,148}, {40,149}, {40,150}, {40,151}, {40,152}, + {40,153}, {40,154}, {40,155}, {40,156}, {40,157}, {40,158}, {40,159}, + {40,160}, {40,161}, {40,162}, {40,163}, {40,164}, {40,165}, {40,166}, + {38,97}, {38,108}, {38,98}, {38,109}, {38,99}, {38,136}, {38,135}, + {38,110}, {38,100}, {38,130}, {38,129}, {38,111}, {38,102}, {38,134}, + {38,133}, {38,113}, {38,101}, {38,132}, {38,131}, {38,112}, {38,103}, + {38,124}, {38,137}, {38,138}, {38,119}, {38,139}, {38,140}, {38,114}, + {38,105}, {38,126}, {38,141}, {38,142}, {38,121}, {38,143}, {38,144}, + {38,116}, {38,104}, {38,145}, {38,146}, {38,120}, {38,125}, {38,147}, + {38,148}, {38,115}, {38,106}, {38,149}, {38,150}, {38,122}, {38,127}, + {38,151}, {38,152}, {38,117}, {38,107}, {38,153}, {38,154}, {38,123}, + {38,155}, {38,156}, {38,128}, {38,157}, {38,158}, {38,159}, {38,160}, + {38,161}, {38,162}, {38,163}, {38,164}, {38,118}, {34,134}, {33,161}, + {33,160}, {34,131}, {34,135}, {34,136}, {34,139}, {34,138}, {34,137}, + {34,140}, {33,163}, {33,162}, {34,122}, {34,121}, {33,165}, {33,164}, + {34,120}, {34,119}, {33,159}, {33,158}, {34,130}, {33,155}, {33,157}, + {33,156}, {34,132}, {34,133}, {33,154}, {33,153}, {34,143}, {34,142}, + {34,144}, {34,145}, {33,143}, {33,142}, {34,124}, {34,125}, {34,128}, + {34,123}, {34,126}, {34,127}, {34,141}, {34,155}, {34,156}, {34,157}, + {34,154}, {33,97}, {33,98}, {33,99}, {33,104}, {33,116}, {33,117}, + {33,118}, {33,119}, {33,120}, {33,121}, {33,122}, {33,123}, {33,124}, + {33,125}, {33,171}, {33,114}, {33,115}, {42,97}, {42,98}, {42,99}, + {42,100}, {42,101}, {42,102}, {42,103}, {42,104}, {42,105}, {42,106}, + {42,107}, {42,108}, {42,109}, {42,110}, {42,111}, {42,112}, {42,113}, + {42,114}, {42,115}, {42,116}, {42,117}, {42,118}, {42,119}, {42,120}, + {42,121}, {42,122}, {42,123}, {42,124}, {42,125}, {42,126}, {42,127}, + {42,128}, {42,129}, {42,130}, {42,131}, {42,132}, {42,133}, {42,134}, + {42,135}, {42,136}, {42,137}, {42,138}, {42,139}, {42,140}, {42,141}, + {42,142}, {42,143}, {42,144}, {42,145}, {42,146}, {42,147}, {42,148}, + {42,149}, {42,150}, {42,151}, {42,152}, {42,153}, {42,154}, {42,155}, + {42,156}, {42,157}, {42,158}, {42,159}, {42,160}, {42,161}, {42,162}, + {42,163}, {42,164}, {42,165}, {42,166}, {42,167}, {42,168}, {42,169}, + {42,170}, {42,171}, {42,172}, {42,173}, {42,174}, {42,175}, {42,176}, + {42,177}, {42,178}, {42,179}, {43,97}, {43,98}, {43,99}, {43,100}, + {43,101}, {43,102}, {43,103}, {43,104}, {43,105}, {43,106}, {43,107}, + {43,108}, {43,109}, {43,110}, {43,111}, {43,112}, {43,113}, {43,114}, + {43,115}, {43,116}, {43,117}, {43,118}, {43,119}, {43,120}, {43,121}, + {43,122}, {43,123}, {43,124}, {43,125}, {43,126}, {43,127}, {43,128}, + {43,129}, {43,130}, {43,131}, {43,132}, {43,133}, {43,134}, {43,135}, + {43,136}, {43,137}, {43,138}, {43,139}, {43,140}, {43,141}, {43,142}, + {43,143}, {43,144}, {43,145}, {43,146}, {43,147}, {43,148}, {43,149}, + {43,150}, {43,151}, {43,152}, {43,153}, {43,154}, {43,155}, {43,156}, + {43,157}, {43,158}, {43,159}, {43,160}, {43,161}, {43,162}, {43,163}, + {43,164}, {43,165}, {43,166}, {43,167}, {43,168}, {43,169}, {43,170}, + {43,171}, {43,172}, {43,173}, {43,174}, {43,175}, {43,176}, {43,177}, + {43,178}, {43,179}, {43,180}, {43,181}, {43,182}, {36,97}, {36,98}, + {36,99}, {36,100}, {36,101}, {36,102}, {36,103}, {36,104}, {36,105}, + {36,106}, {36,107}, {36,108}, {36,109}, {36,110}, {36,111}, {36,112}, + {36,113}, {36,114}, {36,115}, {36,116}, {36,117}, {36,118}, {36,119}, + {36,120}, {36,121}, {36,122}, {36,123}, {36,124}, {36,125}, {36,126}, + {36,127}, {36,128}, {36,129}, {36,130}, {36,131}, {36,132}, {36,133}, + {36,134}, {36,135}, {36,136}, {36,137}, {36,138}, {36,139}, {36,140}, + {36,141}, {36,142}, {36,143}, {36,144}, {36,145}, {36,146}, {36,147}, + {36,148}, {36,149}, {36,150}, {36,151}, {36,152}, {36,153}, {36,154}, + {36,155}, {36,156}, {36,157}, {36,158}, {36,159}, {36,160}, {36,161}, + {36,162}, {36,163}, {36,164}, {36,165}, {36,166}, {36,167}, {36,168}, + {36,169}, {36,170}, {36,171}, {36,172}, {36,173}, {36,174}, {36,175}, + {36,176}, {36,177}, {36,178}, {36,179}, {36,180}, {36,181}, {36,182}, + {36,183}, {36,184}, {36,185}, {36,186}, {36,187}, {36,188}, {36,189}, + {36,190}, {41,113}, {41,114}, {41,115}, {41,116}, {41,117}, {41,118}, + {41,119}, {41,120}, {41,121}, {41,122}, {41,123}, {41,124}, {41,125}, + {41,126}, {41,127}, {41,128}, {41,129}, {41,130}, {41,131}, {41,132}, + {41,133}, {41,134}, {41,135}, {41,136}, {41,137}, {41,138}, {41,139}, + {41,140}, {34,159}, {40,113}, {40,114}, {40,115}, {40,116}, {40,117}, + {40,118}, {40,119}, {40,120}, {40,121}, {40,122}, {40,123}, {40,124}, + {40,125}, {40,126}, {40,127}, {40,128}, {40,129}, {40,130}, {40,131}, + {40,132}, {40,133}, {40,134}, {40,135}, {40,136}, {40,137}, {40,138}, + {40,139}, {40,140}, {34,158}, {39,137}, {39,138}, {39,139}, {39,140}, + {39,141}, {39,122}, {39,123}, {39,156}, {39,157}, {39,158}, {39,118}, + {39,119}, {39,120}, {39,148}, {39,149}, {39,150}, {39,151}, {39,152}, + {39,97}, {39,98}, {39,99}, {39,101}, {39,107}, {39,108}, {39,109}, + {39,110}, {39,111}, {39,112}, {39,113}, {39,114}, {39,115}, {39,116}, + {39,103}, {39,104}, {39,105}, {39,106}, {39,125}, {39,126}, {39,165}, + {39,166}, {39,167}, {39,168}, {39,161}, {39,162}, {39,163}, {39,127}, + {39,128}, {39,129}, {39,130}, {39,131}, {39,132}, {39,133}, {39,134}, + {39,135}, {39,136}, {39,142}, {39,143}, {39,144}, {39,145}, {39,146}, + {39,147}, {39,154}, {39,155}, {34,163}, {39,172}, {39,102}, {39,160}, + {39,175}, {34,161}, {39,124}, {39,173}, {39,117}, {39,121}, {39,170}, + {39,171}, {39,159}, {34,164}, {39,164}, {39,174}, {39,169}, {108,169}, + {111,139}, {118,146}, {88,114}, {109,155}, {95,114}, {95,126}, {121,123}, + {92,180}, {117,164}, {115,102}, {93,160}, {97,102}, {78,184}, {92,112}, + {99,106}, {113,169}, {77,186}, {124,111}, {83,97}, {113,107}, {103,145}, + {82,108}, {78,185}, {113,189}, {94,127}, {123,122}, {121,121}, {78,146}, + {99,107}, {107,160}, {78,186}, {75,183}, {101,101}, {74,161}, {84,140}, + {106,161}, {92,163}, {95,109}, {75,171}, {85,111}, {86,181}, {101,184}, + {94,128}, {108,99}, {105,141}, {106,103}, {105,182}, {123,123}, {103,169}, + {111,140}, {80,166}, {94,129}, {100,108}, {88,140}, {121,177}, {78,159}, + {122,100}, {102,114}, {122,187}, {122,125}, {76,136}, {111,141}, {85,149}, + {83,98}, {108,145}, {100,103}, {108,146}, {118,113}, {78,187}, {80,145}, + {75,127}, {109,100}, {109,104}, {94,130}, {118,162}, {109,156}, {92,181}, + {96,121}, {84,142}, {116,117}, {83,155}, {86,117}, {108,100}, {100,166}, + {113,170}, {75,172}, {75,128}, {108,178}, {80,170}, {121,178}, {108,101}, + {80,159}, {103,170}, {80,171}, {92,145}, {91,169}, {125,140}, {91,151}, + {90,161}, {86,118}, {99,159}, {94,131}, {94,132}, {74,97}, {110,172}, + {83,99}, {110,119}, {120,143}, {106,136}, {110,120}, {113,108}, {113,101}, + {105,142}, {121,124}, {101,185}, {108,170}, {93,150}, {109,130}, {120,101}, + {101,122}, {91,152}, {74,98}, {81,141}, {110,173}, {108,171}, {94,133}, + {99,160}, {74,137}, {114,169}, {85,142}, {118,118}, {78,130}, {86,135}, + {99,116}, {113,109}, {106,162}, {87,130}, {115,103}, {77,170}, {107,174}, + {89,114}, {125,101}, {118,149}, {85,162}, {120,117}, {76,181}, {117,117}, + {100,109}, {103,171}, {113,149}, {112,123}, {105,117}, {76,137}, {122,149}, + {97,148}, {87,150}, {92,129}, {94,134}, {122,175}, {99,161}, {97,179}, + {92,182}, {78,188}, {91,132}, {120,177}, {92,164}, {101,175}, {92,113}, + {85,150}, {115,154}, {75,129}, {91,131}, {89,186}, {83,174}, {122,120}, + {125,102}, {107,175}, {116,102}, {76,138}, {115,104}, {115,155}, {91,103}, + {118,119}, {79,166}, {112,178}, {75,154}, {103,146}, {87,131}, {118,176}, + {104,158}, {101,102}, {101,167}, {74,99}, {76,103}, {106,137}, {120,118}, + {122,101}, {113,110}, {111,142}, {75,173}, {118,112}, {111,143}, {105,143}, + {119,158}, {78,147}, {92,183}, {91,104}, {75,184}, {95,97}, {93,161}, + {117,138}, {105,118}, {103,172}, {110,174}, {115,176}, {95,127}, {76,139}, + {80,129}, {116,146}, {96,122}, {95,128}, {78,160}, {92,146}, {125,170}, + {86,182}, {106,138}, {104,169}, {99,108}, {115,144}, {74,100}, {91,184}, + {94,135}, {107,176}, {113,150}, {101,162}, {76,140}, {75,187}, {106,163}, + {95,129}, {86,173}, {105,144}, {110,121}, {85,163}, {81,147}, {101,176}, + {104,116}, {107,131}, {106,106}, {122,188}, {117,182}, {112,124}, {125,148}, + {96,123}, {78,131}, {80,122}, {119,122}, {88,179}, {119,141}, {100,110}, + {84,159}, {80,167}, {108,189}, {82,110}, {110,175}, {85,151}, {106,164}, + {120,98}, {77,171}, {87,127}, {123,113}, {77,172}, {92,114}, {80,172}, + {78,189}, {110,176}, {76,130}, {80,173}, {101,183}, {115,188}, {110,98}, + {89,115}, {88,180}, {105,119}, {78,110}, {89,98}, {88,177}, {84,143}, + {101,103}, {85,146}, {86,105}, {116,98}, {113,151}, {85,152}, {112,125}, + {87,144}, {84,144}, {87,143}, {107,170}, {125,171}, {91,173}, {124,133}, + {75,130}, {125,149}, {116,136}, {104,170}, {117,179}, {121,158}, {83,175}, + {108,147}, {93,130}, {111,119}, {103,148}, {74,138}, {89,187}, {122,189}, + {86,106}, {116,184}, {119,183}, {92,108}, {87,151}, {95,98}, {78,126}, + {83,176}, {112,100}, {97,172}, {79,167}, {115,139}, {109,105}, {74,126}, + {116,175}, {118,142}, {94,187}, {80,123}, {85,119}, {110,177}, {116,104}, + {92,184}, {75,103}, {90,142}, {96,166}, {109,101}, {110,178}, {92,185}, + {121,156}, {115,156}, {120,178}, {116,185}, {124,177}, {80,124}, {91,185}, + {87,113}, {75,188}, {112,101}, {75,189}, {85,180}, {77,173}, {74,101}, + {86,107}, {80,130}, {112,126}, {82,125}, {76,100}, {122,118}, {76,141}, + {90,186}, {118,143}, {105,120}, {88,181}, {76,142}, {87,141}, {84,145}, + {105,173}, {74,171}, {89,162}, {125,114}, {99,109}, {86,140}, {89,116}, + {97,103}, {110,147}, {80,131}, {125,115}, {85,164}, {79,168}, {109,131}, + {80,114}, {78,190}, {90,104}, {120,144}, {125,150}, {120,145}, {120,146}, + {92,147}, {93,162}, {123,185}, {93,129}, {99,117}, {109,157}, {78,132}, + {75,97}, {93,163}, {124,157}, {121,111}, {82,187}, {79,97}, {100,104}, + {116,118}, {108,190}, {99,110}, {103,173}, {125,129}, {90,162}, {88,115}, + {93,164}, {112,175}, {118,177}, {122,176}, {81,181}, {90,143}, {92,148}, + {92,102}, {111,127}, {78,143}, {96,153}, {89,150}, {108,148}, {106,139}, + {74,127}, {85,112}, {79,169}, {113,173}, {76,143}, {100,184}, {100,173}, + {87,152}, {125,103}, {106,107}, {118,114}, {79,176}, {121,125}, {102,180}, + {75,155}, {115,145}, {105,145}, {115,105}, {80,160}, {105,146}, {90,163}, + {98,146}, {118,98}, {97,180}, {90,164}, {103,149}, {117,127}, {79,98}, + {77,111}, {79,99}, {77,112}, {113,190}, {80,99}, {97,111}, {120,99}, + {74,102}, {119,123}, {114,170}, {94,136}, {105,147}, {94,137}, {125,158}, + {74,128}, {121,170}, {81,142}, {110,148}, {84,146}, {89,99}, {125,104}, + {87,153}, {119,142}, {122,126}, {79,150}, {87,176}, {107,161}, {120,133}, + {92,186}, {93,131}, {121,159}, {103,175}, {125,165}, {118,99}, {89,188}, + {125,105}, {103,174}, {85,165}, {111,144}, {77,113}, {119,98}, {113,114}, + {113,113}, {77,114}, {90,107}, {74,103}, {99,162}, {123,124}, {89,100}, + {110,122}, {120,147}, {123,186}, {79,100}, {92,187}, {118,163}, {109,106}, + {114,97}, {78,161}, {122,102}, {121,160}, {108,150}, {100,174}, {121,97}, + {123,175}, {121,171}, {110,99}, {106,108}, {74,104}, {116,186}, {77,150}, + {124,182}, {116,137}, {120,148}, {120,102}, {94,138}, {114,134}, {87,154}, + {83,144}, {88,133}, {106,166}, {115,157}, {100,154}, {118,164}, {118,178}, + {95,130}, {89,189}, {76,182}, {83,122}, {100,111}, {121,161}, {112,102}, + {75,147}, {96,124}, {116,138}, {84,186}, {125,106}, {121,162}, {116,119}, + {125,130}, {124,112}, {125,172}, {74,162}, {125,125}, {106,167}, {95,131}, + {81,146}, {78,162}, {83,100}, {125,107}, {95,160}, {114,135}, {103,176}, + {80,174}, {115,106}, {94,139}, {118,120}, {97,181}, {113,115}, {119,99}, + {74,105}, {79,101}, {95,132}, {97,112}, {112,127}, {118,100}, {99,118}, + {122,134}, {80,175}, {125,173}, {93,132}, {124,183}, {102,127}, {94,109}, + {122,127}, {101,177}, {109,132}, {82,101}, {125,174}, {117,118}, {97,182}, + {94,140}, {124,158}, {108,151}, {77,157}, {86,119}, {77,115}, {120,149}, + {101,152}, {79,170}, {79,144}, {106,140}, {106,110}, {106,109}, {83,177}, + {83,101}, {119,143}, {110,100}, {80,100}, {114,98}, {80,176}, {114,99}, + {119,184}, {80,115}, {91,105}, {83,123}, {74,172}, {113,102}, {75,149}, + {119,167}, {77,158}, {119,100}, {120,128}, {83,157}, {76,144}, {79,102}, + {118,179}, {97,183}, {83,156}, {122,190}, {122,103}, {107,153}, {79,103}, + {106,111}, {100,175}, {105,121}, {113,152}, {88,152}, {96,178}, {102,116}, + {92,188}, {115,177}, {99,144}, {114,187}, {91,134}, {80,177}, {80,178}, + {79,156}, {83,145}, {76,113}, {119,152}, {75,104}, {107,124}, {100,126}, + {116,156}, {92,130}, {112,103}, {102,128}, {74,173}, {104,171}, {101,168}, + {92,131}, {109,158}, {83,178}, {76,183}, {78,148}, {103,107}, {75,131}, + {97,113}, {119,114}, {83,179}, {83,146}, {117,128}, {95,157}, {110,179}, + {103,177}, {125,116}, {114,136}, {115,146}, {110,180}, {98,147}, {76,145}, + {95,170}, {105,122}, {89,151}, {117,141}, {113,178}, {122,135}, {89,184}, + {84,130}, {118,165}, {93,133}, {103,178}, {109,159}, {74,139}, {91,186}, + {104,117}, {83,102}, {125,117}, {121,137}, {100,162}, {123,125}, {87,100}, + {78,133}, {78,149}, {86,166}, {101,125}, {94,141}, {108,179}, {109,160}, + {108,172}, {123,126}, {95,171}, {97,184}, {121,126}, {80,179}, {96,106}, + {104,162}, {98,148}, {82,189}, {101,104}, {89,147}, {83,158}, {116,120}, + {119,124}, {92,189}, {104,172}, {100,167}, {99,183}, {108,104}, {122,177}, + {101,178}, {80,180}, {82,111}, {92,165}, {80,101}, {113,116}, {124,113}, + {76,184}, {93,134}, {122,145}, {119,159}, {122,104}, {110,181}, {94,142}, + {103,179}, {119,108}, {107,132}, {109,161}, {96,107}, {93,135}, {82,115}, + {82,127}, {74,140}, {123,127}, {101,189}, {93,165}, {88,141}, {108,180}, + {80,181}, {104,173}, {80,146}, {89,152}, {118,166}, {91,106}, {119,160}, + {88,153}, {116,99}, {116,157}, {111,145}, {89,117}, {109,107}, {99,119}, + {110,123}, {77,116}, {96,179}, {106,141}, {108,181}, {104,174}, {75,105}, + {113,111}, {74,141}, {108,105}, {114,171}, {125,175}, {121,179}, {102,129}, + {108,152}, {109,108}, {106,142}, {104,159}, {94,143}, {82,102}, {103,180}, + {81,150}, {102,130}, {99,163}, {100,112}, {88,116}, {118,101}, {115,158}, + {87,101}, {119,168}, {104,134}, {123,166}, {93,166}, {92,190}, {88,154}, + {90,108}, {106,112}, {99,120}, {74,106}, {97,185}, {106,113}, {114,172}, + {122,174}, {110,149}, {121,180}, {82,172}, {123,187}, {125,176}, {96,125}, + {78,163}, {120,134}, {94,110}, {95,133}, {101,126}, {109,109}, {122,170}, + {77,174}, {109,102}, {109,110}, {112,173}, {93,97}, {109,111}, {124,184}, + {88,171}, {76,185}, {77,117}, {122,105}, {97,157}, {98,149}, {109,143}, + {93,98}, {121,138}, {106,168}, {101,173}, {83,171}, {105,148}, {97,186}, + {100,140}, {97,164}, {104,135}, {78,155}, {92,149}, {119,117}, {124,179}, + {112,179}, {78,111}, {113,117}, {111,146}, {104,136}, {107,177}, {75,148}, + {96,126}, {99,184}, {106,169}, {124,114}, {96,180}, {79,160}, {110,101}, + {122,106}, {102,131}, {97,114}, {74,107}, {99,164}, {105,123}, {98,150}, + {115,178}, {110,150}, {106,114}, {80,182}, {108,153}, {90,139}, {79,104}, + {93,99}, {88,155}, {121,142}, {105,149}, {99,145}, {82,124}, {88,108}, + {115,140}, {77,187}, {118,150}, {103,181}, {104,175}, {99,185}, {82,123}, + {115,179}, {99,187}, {94,144}, {78,112}, {86,183}, {113,153}, {117,129}, + {92,132}, {117,123}, {94,145}, {92,166}, {94,146}, {109,162}, {110,182}, + {106,143}, {112,174}, {99,188}, {83,159}, {83,180}, {97,115}, {97,116}, + {116,147}, {95,134}, {105,150}, {91,107}, {118,102}, {99,121}, {107,133}, + {116,105}, {77,118}, {82,185}, {90,109}, {82,163}, {79,145}, {75,156}, + {76,186}, {79,157}, {104,105}, {99,123}, {99,122}, {96,154}, {110,183}, + {92,115}, {83,181}, {87,102}, {118,117}, {87,155}, {97,149}, {84,170}, + {95,99}, {125,159}, {80,183}, {109,148}, {75,106}, {100,155}, {97,187}, + {75,98}, {83,160}, {100,127}, {123,128}, {90,126}, {100,141}, {86,121}, + {111,128}, {97,188}, {118,121}, {95,135}, {100,113}, {92,167}, {92,168}, + {122,150}, {83,182}, {113,154}, {122,178}, {98,189}, {85,143}, {80,184}, + {77,159}, {117,139}, {100,176}, {75,107}, {87,132}, {98,190}, {93,154}, + {90,110}, {74,174}, {85,121}, {99,97}, {104,163}, {115,107}, {79,105}, + {83,183}, {84,177}, {78,164}, {104,178}, {101,181}, {103,110}, {86,122}, + {95,172}, {100,128}, {104,164}, {88,117}, {100,156}, {116,121}, {113,118}, + {98,158}, {97,117}, {77,175}, {113,103}, {78,165}, {75,157}, {89,163}, + {115,108}, {80,185}, {108,107}, {94,147}, {119,169}, {121,181}, {97,158}, + {75,174}, {99,124}, {120,150}, {91,174}, {125,177}, {119,118}, {116,158}, + {114,173}, {91,153}, {112,104}, {97,189}, {94,148}, {96,108}, {109,163}, + {83,161}, {95,136}, {89,118}, {125,108}, {111,147}, {100,129}, {120,171}, + {91,108}, {124,134}, {88,109}, {118,122}, {91,159}, {83,147}, {120,135}, + {74,142}, {120,129}, {82,116}, {92,116}, {122,121}, {74,143}, {124,115}, + {106,170}, {106,171}, {80,186}, {109,164}, {93,167}, {95,137}, {95,173}, + {110,124}, {111,129}, {76,146}, {93,100}, {95,138}, {83,184}, {113,104}, + {77,119}, {111,148}, {100,157}, {95,174}, {75,108}, {105,124}, {106,172}, + {95,139}, {121,127}, {86,111}, {85,134}, {79,106}, {78,105}, {86,184}, + {113,119}, {110,184}, {89,153}, {115,159}, {120,136}, {78,134}, {85,166}, + {116,166}, {102,133}, {111,149}, {75,175}, {124,159}, {92,103}, {86,167}, + {120,137}, {99,146}, {99,125}, {79,161}, {112,128}, {108,154}, {93,151}, + {123,176}, {108,108}, {112,105}, {122,151}, {123,129}, {82,128}, {101,112}, + {109,165}, {75,109}, {121,112}, {119,101}, {75,110}, {90,111}, {88,118}, + {83,103}, {123,114}, {125,132}, {108,109}, {123,97}, {101,169}, {105,174}, + {115,180}, {120,179}, {112,129}, {94,111}, {120,112}, {115,160}, {103,111}, + {91,109}, {102,117}, {121,104}, {93,152}, {104,153}, {111,150}, {83,162}, + {98,159}, {124,160}, {87,136}, {125,109}, {95,175}, {76,147}, {83,185}, + {84,176}, {91,135}, {94,149}, {112,180}, {85,144}, {101,153}, {124,135}, + {92,150}, {98,160}, {90,112}, {115,99}, {83,172}, {116,139}, {125,133}, + {99,189}, {121,113}, {80,187}, {108,155}, {117,124}, {114,100}, {88,142}, + {88,143}, {117,183}, {118,161}, {82,119}, {123,172}, {93,136}, {100,168}, + {82,129}, {120,151}, {86,123}, {94,150}, {119,125}, {108,110}, {80,161}, + {96,181}, {106,115}, {78,150}, {76,101}, {108,182}, {98,161}, {99,126}, + {124,136}, {77,176}, {121,182}, {95,176}, {101,127}, {78,127}, {124,161}, + {109,112}, {125,145}, {118,123}, {121,143}, {107,154}, {74,129}, {82,120}, + {77,177}, {99,147}, {125,166}, {102,173}, {99,186}, {112,106}, {121,144}, + {124,162}, {120,103}, {97,165}, {110,185}, {103,182}, {106,173}, {124,116}, + {117,130}, {87,156}, {112,181}, {93,168}, {83,173}, {117,188}, {90,127}, + {76,187}, {83,186}, {116,100}, {111,151}, {84,131}, {123,163}, {123,173}, + {96,109}, {106,174}, {123,115}, {100,130}, {118,167}, {82,157}, {95,140}, + {124,137}, {101,105}, {96,182}, {118,115}, {97,190}, {75,176}, {106,175}, + {106,176}, {90,128}, {120,116}, {107,178}, {100,131}, {105,151}, {100,177}, + {74,175}, {78,151}, {124,138}, {115,161}, {75,132}, {99,165}, {75,133}, + {106,116}, {105,125}, {87,137}, {107,155}, {109,113}, {76,131}, {119,126}, + {124,139}, {120,180}, {89,119}, {115,147}, {115,148}, {119,164}, {119,145}, + {88,119}, {78,113}, {74,130}, {123,116}, {75,134}, {112,182}, {85,167}, + {106,144}, {76,148}, {75,111}, {116,106}, {105,111}, {117,131}, {105,152}, + {93,169}, {113,179}, {85,187}, {94,123}, {116,187}, {125,179}, {125,178}, + {119,102}, {93,137}, {84,147}, {76,104}, {90,129}, {76,149}, {89,164}, + {122,138}, {101,163}, {83,124}, {74,176}, {80,132}, {74,144}, {122,107}, + {107,171}, {103,184}, {89,165}, {81,151}, {115,100}, {84,187}, {124,163}, + {122,152}, {115,149}, {79,107}, {107,179}, {85,188}, {83,148}, {77,188}, + {89,166}, {98,185}, {98,97}, {107,148}, {96,183}, {100,114}, {76,188}, + {123,164}, {116,107}, {80,125}, {74,177}, {111,120}, {87,128}, {110,186}, + {125,180}, {83,163}, {123,130}, {85,168}, {91,110}, {97,118}, {120,119}, + {96,127}, {123,131}, {93,170}, {98,98}, {110,102}, {118,168}, {118,181}, + {93,138}, {80,162}, {93,102}, {93,171}, {100,185}, {99,111}, {80,188}, + {116,188}, {76,124}, {119,170}, {101,164}, {95,177}, {119,161}, {121,183}, + {111,121}, {120,152}, {121,105}, {120,153}, {110,125}, {88,134}, {100,163}, + {117,142}, {93,153}, {89,167}, {82,121}, {85,131}, {90,165}, {90,144}, + {81,153}, {78,152}, {75,158}, {116,108}, {90,187}, {118,169}, {104,179}, + {79,108}, {112,176}, {116,189}, {91,136}, {78,128}, {99,148}, {81,143}, + {113,181}, {77,178}, {79,171}, {77,120}, {99,102}, {81,154}, {114,101}, + {114,102}, {100,142}, {83,187}, {113,105}, {114,137}, {111,152}, {102,137}, + {88,120}, {122,179}, {115,117}, {120,100}, {81,179}, {102,136}, {120,154}, + {92,169}, {94,151}, {75,159}, {79,172}, {116,159}, {81,180}, {82,122}, + {95,178}, {97,119}, {98,99}, {83,188}, {109,166}, {91,137}, {100,186}, + {79,158}, {78,144}, {85,147}, {115,181}, {119,110}, {111,136}, {77,179}, + {117,143}, {101,179}, {112,130}, {74,145}, {106,177}, {80,102}, {89,154}, + {112,107}, {107,167}, {101,128}, {124,117}, {100,132}, {76,105}, {125,134}, + {106,117}, {101,106}, {95,122}, {97,159}, {90,145}, {97,120}, {104,180}, + {83,189}, {98,100}, {114,138}, {90,166}, {119,115}, {125,141}, {115,118}, + {110,151}, {117,132}, {88,100}, {114,103}, {89,120}, {89,121}, {111,137}, + {86,142}, {119,139}, {95,110}, {104,181}, {82,117}, {83,149}, {116,140}, + {90,188}, {89,168}, {119,171}, {117,137}, {115,124}, {90,146}, {83,117}, + {104,118}, {86,143}, {116,122}, {119,137}, {76,106}, {112,131}, {76,150}, + {80,147}, {83,125}, {91,187}, {75,160}, {83,164}, {118,183}, {85,122}, + {115,141}, {75,161}, {107,180}, {116,109}, {124,106}, {119,172}, {104,182}, + {90,167}, {119,140}, {101,129}, {96,174}, {85,189}, {78,166}, {124,107}, + {85,123}, {114,104}, {98,101}, {77,121}, {106,178}, {75,135}, {77,180}, + {91,111}, {111,153}, {77,122}, {124,185}, {95,179}, {78,167}, {90,130}, + {79,109}, {103,185}, {120,104}, {115,162}, {74,178}, {95,100}, {84,132}, + {76,151}, {101,130}, {77,123}, {111,154}, {110,152}, {93,103}, {98,102}, + {96,128}, {86,112}, {120,138}, {124,186}, {89,190}, {94,112}, {93,172}, + {90,168}, {84,160}, {86,185}, {77,151}, {94,152}, {114,184}, {100,150}, + {80,133}, {116,110}, {93,104}, {109,133}, {115,150}, {94,153}, {99,166}, + {83,104}, {91,112}, {101,154}, {99,127}, {91,113}, {85,169}, {96,129}, + {111,155}, {112,169}, {87,114}, {80,189}, {89,169}, {80,190}, {108,173}, + {83,105}, {114,105}, {112,132}, {98,162}, {105,175}, {121,145}, {105,153}, + {104,154}, {90,131}, {90,132}, {84,133}, {103,186}, {77,160}, {99,112}, + {91,114}, {123,132}, {115,163}, {89,101}, {123,167}, {93,139}, {80,148}, + {102,118}, {96,110}, {125,154}, {92,117}, {96,184}, {103,113}, {117,176}, + {88,156}, {109,134}, {97,121}, {99,128}, {121,128}, {105,176}, {89,155}, + {115,164}, {92,118}, {100,169}, {112,133}, {99,129}, {124,140}, {124,141}, + {114,139}, {114,140}, {100,143}, {113,155}, {122,153}, {113,120}, {125,181}, + {96,185}, {103,187}, {124,119}, {124,164}, {123,133}, {99,167}, {88,121}, + {118,184}, {92,133}, {76,152}, {96,111}, {116,167}, {111,156}, {79,188}, + {111,157}, {114,106}, {125,126}, {74,108}, {125,123}, {125,135}, {103,114}, + {106,145}, {95,180}, {81,172}, {100,158}, {101,131}, {89,102}, {77,124}, + {115,165}, {109,149}, {89,122}, {109,167}, {123,117}, {120,172}, {96,167}, + {76,153}, {84,134}, {103,101}, {85,181}, {83,126}, {124,187}, {100,178}, + {95,181}, {104,184}, {120,173}, {78,135}, {125,182}, {104,152}, {77,152}, + {103,150}, {76,154}, {74,163}, {95,182}, {112,135}, {112,134}, {88,122}, + {113,180}, {116,176}, {117,140}, {124,165}, {106,133}, {106,179}, {93,155}, + {92,151}, {94,189}, {114,185}, {85,135}, {88,144}, {112,136}, {81,97}, + {81,98}, {89,148}, {86,168}, {89,138}, {90,113}, {88,135}, {92,162}, + {115,142}, {117,180}, {113,121}, {90,147}, {118,170}, {79,181}, {125,110}, + {74,146}, {95,116}, {87,157}, {122,122}, {110,103}, {117,125}, {120,181}, + {109,168}, {84,161}, {81,99}, {97,150}, {121,184}, {91,138}, {75,185}, + {84,148}, {89,156}, {110,126}, {119,173}, {82,174}, {97,166}, {119,185}, + {93,173}, {104,155}, {91,115}, {81,183}, {96,112}, {84,162}, {118,151}, + {87,185}, {88,157}, {77,189}, {114,107}, {77,125}, {120,130}, {114,108}, + {74,109}, {74,110}, {79,110}, {99,130}, {92,119}, {91,154}, {89,123}, + {74,179}, {118,147}, {102,184}, {106,181}, {106,182}, {118,185}, {79,111}, + {74,147}, {74,111}, {82,112}, {113,122}, {87,115}, {99,131}, {115,189}, + {94,154}, {94,155}, {111,158}, {98,163}, {110,187}, {95,183}, {87,138}, + {78,168}, {91,155}, {113,123}, {105,177}, {122,119}, {80,134}, {76,107}, + {110,104}, {75,186}, {121,185}, {76,189}, {83,190}, {100,144}, {114,174}, + {84,149}, {95,141}, {124,120}, {81,144}, {114,141}, {119,146}, {74,148}, + {85,153}, {88,158}, {77,153}, {110,105}, {118,124}, {76,155}, {112,137}, + {124,188}, {104,137}, {116,190}, {103,188}, {87,158}, {94,156}, {112,108}, + {76,190}, {77,161}, {97,122}, {91,175}, {90,114}, {81,101}, {92,120}, + {88,182}, {81,100}, {77,162}, {92,170}, {112,183}, {112,138}, {80,126}, + {93,156}, {84,150}, {83,150}, {109,144}, {77,97}, {95,117}, {95,184}, + {84,97}, {78,114}, {104,138}, {107,181}, {99,149}, {117,144}, {117,97}, + {89,103}, {101,107}, {102,139}, {117,177}, {101,133}, {121,99}, {96,155}, + {118,171}, {75,177}, {89,170}, {117,98}, {87,145}, {81,184}, {106,184}, + {106,185}, {90,115}, {111,159}, {113,175}, {101,182}, {110,127}, {98,164}, + {80,127}, {122,108}, {117,145}, {103,115}, {105,126}, {114,142}, {91,116}, + {124,142}, {93,174}, {103,116}, {87,116}, {119,116}, {77,126}, {90,169}, + {79,112}, {119,153}, {115,166}, {78,153}, {78,106}, {75,136}, {80,103}, + {112,139}, {80,135}, {100,133}, {91,160}, {85,154}, {87,103}, {110,128}, + {120,182}, {117,146}, {109,169}, {89,124}, {101,134}, {117,99}, {90,148}, + {98,103}, {123,188}, {113,156}, {74,180}, {104,186}, {78,169}, {105,184}, + {98,165}, {80,121}, {84,178}, {81,102}, {95,142}, {124,180}, {83,106}, + {76,108}, {111,160}, {101,165}, {80,149}, {91,188}, {124,166}, {75,190}, + {109,170}, {94,113}, {121,163}, {84,98}, {79,182}, {86,144}, {85,170}, + {113,174}, {122,139}, {101,97}, {85,113}, {79,173}, {109,171}, {85,114}, + {85,124}, {125,162}, {115,109}, {125,155}, {105,112}, {81,103}, {125,163}, + {78,115}, {125,164}, {122,142}, {74,112}, {119,103}, {79,113}, {102,98}, + {124,118}, {114,109}, {111,161}, {115,110}, {92,134}, {89,171}, {104,160}, + {97,104}, {85,182}, {79,189}, {94,157}, {89,145}, {100,170}, {114,143}, + {119,127}, {98,166}, {98,104}, {99,150}, {109,145}, {105,185}, {86,113}, + {94,114}, {96,168}, {83,107}, {107,156}, {95,111}, {74,131}, {110,188}, + {125,131}, {107,182}, {79,114}, {89,172}, {89,125}, {88,159}, {84,120}, + {107,126}, {93,175}, {93,176}, {93,177}, {93,178}, {89,126}, {123,134}, + {79,115}, {110,189}, {100,107}, {90,133}, {88,172}, {81,104}, {98,105}, + {94,124}, {103,117}, {91,176}, {111,162}, {113,176}, {79,116}, {91,177}, + {96,113}, {95,101}, {121,146}, {103,189}, {102,99}, {123,177}, {75,112}, + {114,110}, {77,167}, {104,156}, {103,151}, {119,128}, {80,163}, {90,97}, + {76,125}, {81,105}, {93,140}, {99,190}, {81,106}, {104,106}, {106,118}, + {121,186}, {102,140}, {118,152}, {84,135}, {89,139}, {89,146}, {83,139}, + {88,183}, {90,105}, {117,184}, {94,158}, {114,111}, {120,105}, {88,136}, + {110,129}, {121,129}, {93,179}, {106,186}, {118,125}, {97,123}, {77,127}, + {116,148}, {102,141}, {124,143}, {123,98}, {96,156}, {116,123}, {90,149}, + {121,114}, {123,178}, {91,182}, {94,159}, {91,178}, {120,156}, {119,174}, + {107,168}, {82,186}, {113,124}, {122,154}, {90,170}, {90,134}, {119,129}, + {103,118}, {101,135}, {86,108}, {92,135}, {97,105}, {98,106}, {85,102}, + {84,151}, {114,144}, {106,187}, {96,157}, {123,179}, {113,125}, {98,167}, + {125,151}, {78,136}, {106,119}, {124,128}, {125,167}, {119,175}, {87,117}, + {111,122}, {113,157}, {94,115}, {104,139}, {120,157}, {123,135}, {85,136}, + {87,159}, {93,105}, {105,113}, {122,109}, {118,153}, {122,180}, {120,106}, + {102,174}, {76,156}, {97,124}, {96,175}, {105,127}, {124,189}, {102,142}, + {97,151}, {102,143}, {116,177}, {100,179}, {100,187}, {121,164}, {111,163}, + {79,174}, {118,126}, {96,114}, {124,190}, {81,107}, {87,186}, {123,136}, + {98,151}, {84,99}, {112,184}, {87,104}, {97,167}, {83,127}, {111,164}, + {87,133}, {107,162}, {124,167}, {100,98}, {98,168}, {102,144}, {123,168}, + {116,168}, {101,180}, {116,124}, {116,149}, {95,118}, {124,121}, {110,130}, + {74,181}, {111,165}, {75,162}, {84,100}, {94,160}, {90,189}, {100,134}, + {104,126}, {96,158}, {118,116}, {106,146}, {121,187}, {96,130}, {74,164}, + {103,119}, {106,189}, {89,157}, {90,116}, {110,106}, {123,169}, {91,139}, + {90,117}, {113,126}, {83,108}, {123,137}, {95,143}, {83,128}, {99,151}, + {111,166}, {124,144}, {105,128}, {117,147}, {108,156}, {119,119}, {106,120}, + {81,185}, {92,136}, {106,121}, {113,158}, {87,118}, {79,117}, {89,104}, + {108,174}, {93,106}, {77,98}, {104,110}, {97,125}, {114,145}, {105,129}, + {82,188}, {91,117}, {115,167}, {88,190}, {124,145}, {109,114}, {116,111}, + {123,99}, {124,129}, {110,107}, {84,101}, {116,178}, {110,153}, {123,138}, + {77,163}, {88,123}, {101,155}, {120,183}, {118,148}, {87,105}, {75,137}, + {102,145}, {112,140}, {88,110}, {121,147}, {85,190}, {88,124}, {114,112}, + {98,107}, {115,168}, {111,130}, {109,172}, {103,120}, {90,190}, {76,126}, + {114,188}, {90,171}, {98,152}, {109,150}, {86,145}, {96,115}, {124,146}, + {107,136}, {83,129}, {112,141}, {79,183}, {109,146}, {84,152}, {92,137}, + {87,177}, {95,123}, {115,101}, {116,141}, {113,127}, {120,113}, {105,186}, + {123,139}, {74,149}, {121,148}, {119,138}, {86,136}, {124,168}, {115,125}, + {110,190}, {103,190}, {83,130}, {83,118}, {76,109}, {118,186}, {86,114}, + {82,152}, {103,152}, {99,101}, {103,121}, {112,109}, {123,140}, {107,97}, + {84,102}, {123,141}, {85,125}, {113,159}, {118,187}, {94,116}, {85,171}, + {101,136}, {123,100}, {84,121}, {94,161}, {100,99}, {87,119}, {120,174}, + {94,117}, {86,146}, {121,149}, {103,122}, {107,149}, {85,183}, {111,167}, + {97,126}, {122,110}, {86,169}, {86,174}, {103,123}, {108,139}, {85,115}, + {78,116}, {123,101}, {97,174}, {119,104}, {123,142}, {88,125}, {123,189}, + {124,169}, {79,118}, {109,135}, {110,108}, {76,157}, {118,103}, {102,186}, + {117,100}, {125,156}, {109,115}, {78,137}, {111,168}, {97,127}, {122,155}, + {75,163}, {119,105}, {123,102}, {92,121}, {113,128}, {109,136}, {111,131}, + {86,109}, {125,142}, {104,97}, {123,180}, {85,103}, {113,182}, {102,147}, + {76,158}, {120,114}, {92,171}, {125,118}, {101,170}, {113,160}, {91,140}, + {93,141}, {84,136}, {89,173}, {117,101}, {102,187}, {102,148}, {125,136}, + {86,97}, {125,127}, {124,147}, {111,97}, {103,124}, {81,174}, {102,149}, + {105,178}, {95,112}, {88,160}, {124,122}, {125,111}, {112,142}, {91,161}, + {101,137}, {109,116}, {96,131}, {99,152}, {105,187}, {106,104}, {125,119}, + {123,103}, {105,130}, {125,183}, {98,153}, {92,172}, {104,98}, {102,176}, + {125,184}, {125,185}, {118,127}, {103,103}, {102,151}, {84,179}, {84,137}, + {86,186}, {87,178}, {97,128}, {91,162}, {102,152}, {103,125}, {112,143}, + {115,126}, {98,108}, {117,119}, {96,176}, {125,120}, {99,168}, {84,103}, + {104,188}, {122,146}, {120,175}, {86,147}, {85,116}, {112,144}, {119,176}, + {110,115}, {106,122}, {106,147}, {109,137}, {93,107}, {101,108}, {125,97}, + {95,144}, {108,115}, {95,145}, {109,173}, {120,120}, {119,186}, {120,107}, + {116,160}, {84,122}, {100,115}, {105,154}, {94,118}, {89,127}, {89,128}, + {86,175}, {89,140}, {90,106}, {95,165}, {119,165}, {76,114}, {95,185}, + {87,160}, {84,123}, {125,186}, {76,115}, {91,179}, {95,146}, {78,138}, + {110,154}, {100,164}, {123,143}, {79,119}, {110,131}, {78,170}, {98,109}, + {87,161}, {122,181}, {85,137}, {120,108}, {103,153}, {115,169}, {88,173}, + {99,132}, {112,177}, {104,165}, {96,186}, {110,132}, {89,158}, {107,98}, + {107,99}, {124,130}, {106,123}, {104,107}, {94,162}, {109,175}, {104,99}, + {79,177}, {84,124}, {124,170}, {103,126}, {124,178}, {86,116}, {98,110}, + {83,119}, {122,140}, {122,156}, {109,117}, {97,163}, {104,108}, {104,157}, + {111,169}, {116,125}, {79,120}, {105,155}, {81,108}, {90,135}, {107,137}, + {104,140}, {94,119}, {86,124}, {83,165}, {122,157}, {90,150}, {74,113}, + {90,136}, {95,102}, {121,115}, {114,146}, {74,132}, {78,139}, {77,181}, + {125,112}, {85,104}, {113,129}, {98,169}, {92,138}, {108,116}, {122,128}, + {123,104}, {80,104}, {90,172}, {89,174}, {96,187}, {111,170}, {122,158}, + {96,132}, {79,121}, {85,138}, {87,162}, {98,111}, {87,120}, {104,141}, + {118,154}, {111,98}, {98,154}, {118,188}, {123,144}, {81,109}, {77,164}, + {81,110}, {92,173}, {104,142}, {112,185}, {78,117}, {102,188}, {87,187}, + {80,150}, {93,181}, {119,177}, {118,189}, {91,183}, {123,170}, {105,156}, + {89,129}, {117,178}, {96,133}, {106,148}, {121,130}, {106,124}, {82,133}, + {123,145}, {103,128}, {107,101}, {95,186}, {99,98}, {87,121}, {105,131}, + {104,189}, {104,111}, {114,147}, {123,105}, {88,101}, {85,139}, {80,136}, + {81,111}, {87,163}, {96,134}, {86,98}, {109,176}, {87,179}, {124,148}, + {90,151}, {76,159}, {114,148}, {81,112}, {76,160}, {91,189}, {115,127}, + {112,145}, {124,123}, {98,112}, {102,101}, {98,155}, {95,158}, {96,135}, + {114,175}, {76,161}, {86,170}, {103,130}, {78,118}, {115,128}, {77,190}, + {123,146}, {120,184}, {119,187}, {104,127}, {104,119}, {109,118}, {92,122}, + {76,116}, {113,183}, {104,120}, {74,182}, {100,100}, {116,150}, {95,166}, + {95,103}, {95,167}, {97,129}, {105,132}, {92,139}, {105,133}, {111,99}, + {107,102}, {75,99}, {99,169}, {81,187}, {111,100}, {111,171}, {80,116}, + {77,99}, {104,166}, {111,101}, {83,140}, {90,173}, {87,122}, {114,149}, + {117,165}, {89,175}, {121,116}, {85,148}, {125,143}, {91,163}, {113,161}, + {108,118}, {123,190}, {83,151}, {81,113}, {75,113}, {81,114}, {75,114}, + {113,130}, {116,161}, {121,117}, {97,131}, {97,130}, {107,183}, {95,104}, + {75,138}, {102,121}, {120,158}, {121,106}, {74,183}, {109,119}, {83,120}, + {114,150}, {84,153}, {110,133}, {114,176}, {74,114}, {92,123}, {113,184}, + {108,119}, {101,138}, {118,128}, {125,157}, {84,163}, {76,162}, {119,148}, + {87,165}, {83,131}, {88,102}, {118,129}, {93,182}, {77,128}, {101,156}, + {101,139}, {97,132}, {104,112}, {116,112}, {115,170}, {90,174}, {87,123}, + {98,113}, {87,106}, {86,187}, {100,159}, {74,150}, {107,104}, {91,190}, + {118,130}, {111,123}, {84,189}, {96,136}, {104,121}, {111,102}, {77,100}, + {84,180}, {91,97}, {91,156}, {91,157}, {110,156}, {75,139}, {124,149}, + {78,171}, {77,129}, {123,147}, {121,107}, {117,148}, {89,105}, {105,157}, + {91,141}, {93,142}, {103,131}, {108,140}, {121,172}, {75,140}, {96,188}, + {84,104}, {109,147}, {88,175}, {114,151}, {74,184}, {90,175}, {86,148}, + {89,141}, {88,174}, {114,129}, {95,147}, {90,176}, {98,170}, {96,189}, + {88,184}, {119,111}, {90,118}, {74,151}, {114,152}, {88,185}, {122,159}, + {79,175}, {89,130}, {112,146}, {100,145}, {115,119}, {122,160}, {111,172}, + {98,114}, {84,125}, {89,142}, {116,162}, {84,105}, {77,130}, {103,154}, + {114,153}, {89,106}, {88,126}, {92,109}, {98,171}, {86,188}, {74,185}, + {84,154}, {116,151}, {76,97}, {79,122}, {117,120}, {89,131}, {80,168}, + {99,133}, {107,184}, {114,113}, {79,123}, {83,109}, {104,161}, {78,172}, + {96,116}, {94,163}, {93,183}, {114,114}, {115,182}, {118,155}, {87,190}, + {120,159}, {119,178}, {80,105}, {102,154}, {117,102}, {87,124}, {76,163}, + {102,155}, {93,157}, {81,115}, {111,173}, {86,158}, {100,180}, {97,175}, + {93,184}, {104,143}, {74,165}, {92,97}, {96,117}, {124,108}, {124,109}, + {88,103}, {109,120}, {91,118}, {86,176}, {115,111}, {77,101}, {90,177}, + {88,104}, {76,164}, {81,116}, {74,152}, {90,178}, {117,103}, {117,104}, + {102,102}, {85,172}, {85,184}, {90,179}, {99,134}, {94,164}, {94,165}, + {81,117}, {81,118}, {81,119}, {114,115}, {105,158}, {112,147}, {114,116}, + {112,148}, {75,164}, {123,148}, {117,166}, {99,170}, {94,166}, {95,148}, + {120,185}, {112,110}, {81,120}, {86,159}, {80,151}, {124,97}, {111,174}, + {92,152}, {105,159}, {101,157}, {125,187}, {96,137}, {86,137}, {84,106}, + {101,140}, {105,160}, {80,152}, {124,98}, {84,126}, {98,115}, {94,167}, + {92,124}, {82,118}, {117,149}, {78,97}, {117,105}, {93,185}, {93,186}, + {112,149}, {118,159}, {114,154}, {100,171}, {114,177}, {108,121}, {125,188}, + {97,106}, {74,153}, {111,175}, {117,106}, {108,185}, {120,109}, {114,130}, + {118,131}, {87,146}, {121,98}, {112,150}, {112,186}, {118,160}, {105,179}, + {114,131}, {84,107}, {74,115}, {77,102}, {77,131}, {77,154}, {89,143}, + {118,132}, {110,157}, {103,132}, {98,116}, {95,162}, {103,155}, {104,113}, + {124,110}, {101,141}, {122,171}, {79,124}, {79,162}, {77,182}, {111,176}, + {116,126}, {84,141}, {115,120}, {105,97}, {114,178}, {115,171}, {112,151}, + {79,151}, {79,159}, {104,128}, {104,129}, {79,163}, {105,98}, {80,106}, + {115,129}, {80,107}, {84,164}, {111,124}, {88,97}, {89,159}, {115,151}, + {92,125}, {76,165}, {109,177}, {113,162}, {84,155}, {98,117}, {74,166}, + {83,110}, {76,166}, {113,147}, {117,167}, {74,154}, {123,174}, {97,133}, + {95,169}, {110,158}, {119,130}, {88,98}, {93,108}, {112,111}, {86,125}, + {97,107}, {121,118}, {84,181}, {80,137}, {111,103}, {98,172}, {91,170}, + {78,140}, {117,168}, {119,149}, {83,141}, {115,190}, {80,117}, {96,190}, + {95,187}, {102,157}, {104,100}, {75,141}, {111,104}, {110,116}, {90,152}, + {81,121}, {95,105}, {115,112}, {76,132}, {78,119}, {111,105}, {95,149}, + {109,151}, {110,134}, {111,125}, {124,150}, {91,180}, {111,106}, {120,121}, + {117,169}, {99,153}, {97,134}, {84,127}, {94,168}, {112,170}, {115,130}, + {83,111}, {74,155}, {124,151}, {109,152}, {97,135}, {116,152}, {86,115}, + {93,109}, {85,126}, {113,131}, {110,159}, {86,171}, {116,153}, {87,166}, + {90,119}, {93,187}, {93,143}, {88,99}, {90,153}, {112,152}, {111,132}, + {97,152}, {113,148}, {109,178}, {85,155}, {85,156}, {115,132}, {75,151}, + {98,118}, {111,177}, {123,149}, {83,152}, {93,144}, {112,153}, {75,115}, + {85,157}, {77,103}, {80,108}, {81,122}, {113,132}, {101,115}, {123,181}, + {105,161}, {125,160}, {124,124}, {90,98}, {90,99}, {82,97}, {82,175}, + {98,173}, {94,169}, {78,156}, {114,117}, {80,164}, {93,145}, {97,136}, + {91,119}, {95,163}, {109,121}, {113,133}, {115,143}, {87,107}, {97,108}, + {99,171}, {110,135}, {97,137}, {74,186}, {112,187}, {122,161}, {112,154}, + {76,167}, {90,180}, {76,127}, {78,173}, {85,105}, {122,162}, {80,165}, + {107,150}, {108,159}, {95,188}, {119,150}, {94,170}, {75,116}, {111,126}, + {76,117}, {79,125}, {111,178}, {98,119}, {76,168}, {112,188}, {86,160}, + {113,134}, {98,120}, {107,107}, {75,117}, {88,145}, {116,142}, {115,183}, + {87,134}, {81,123}, {119,106}, {109,138}, {87,147}, {88,186}, {118,133}, + {81,140}, {93,188}, {95,189}, {121,165}, {96,138}, {114,189}, {83,112}, + {116,179}, {90,137}, {102,158}, {120,122}, {104,144}, {88,187}, {106,149}, + {86,99}, {118,134}, {114,155}, {100,188}, {104,114}, {90,154}, {114,156}, + {123,150}, {105,114}, {110,109}, {122,163}, {92,174}, {117,170}, {102,160}, + {112,189}, {87,108}, {117,133}, {110,160}, {91,165}, {93,158}, {89,176}, + {105,99}, {113,185}, {114,132}, {96,139}, {105,100}, {98,121}, {99,113}, + {124,171}, {77,104}, {76,118}, {112,155}, {102,122}, {77,105}, {115,131}, + {97,153}, {111,107}, {103,133}, {96,169}, {115,133}, {84,128}, {85,127}, + {93,110}, {121,188}, {76,128}, {101,98}, {78,120}, {88,146}, {121,150}, + {113,106}, {78,145}, {118,135}, {91,171}, {95,190}, {88,161}, {119,179}, + {87,167}, {84,190}, {81,124}, {101,143}, {75,118}, {90,120}, {77,132}, + {86,126}, {98,122}, {79,152}, {96,140}, {107,185}, {125,189}, {87,168}, + {75,152}, {105,162}, {104,122}, {99,135}, {108,141}, {108,142}, {86,127}, + {99,103}, {95,150}, {125,168}, {110,161}, {118,104}, {93,189}, {120,123}, + {104,145}, {121,151}, {78,174}, {108,143}, {105,101}, {86,149}, {77,133}, + {109,122}, {81,125}, {79,126}, {108,123}, {82,113}, {76,169}, {89,132}, + {105,188}, {81,126}, {108,124}, {101,109}, {119,112}, {76,170}, {83,132}, + {86,128}, {86,189}, {97,97}, {94,125}, {118,105}, {90,100}, {86,100}, + {117,134}, {97,98}, {105,134}, {114,133}, {116,169}, {86,172}, {107,147}, + {108,125}, {98,156}, {94,171}, {112,156}, {107,127}, {87,142}, {81,127}, + {117,107}, {121,189}, {74,156}, {77,134}, {114,118}, {93,190}, {76,119}, + {91,120}, {80,169}, {78,157}, {107,128}, {125,98}, {120,139}, {106,150}, + {113,112}, {91,142}, {119,131}, {91,143}, {75,100}, {120,160}, {123,151}, + {107,138}, {96,97}, {78,141}, {84,156}, {125,152}, {82,182}, {114,119}, + {122,182}, {118,106}, {122,183}, {88,166}, {116,113}, {104,146}, {74,133}, + {76,171}, {98,174}, {98,123}, {119,109}, {120,161}, {115,172}, {94,97}, + {100,189}, {99,172}, {93,111}, {93,112}, {75,119}, {104,147}, {97,99}, + {82,160}, {112,190}, {105,102}, {75,178}, {109,179}, {92,153}, {96,141}, + {119,154}, {91,121}, {76,110}, {90,155}, {77,135}, {93,113}, {88,111}, + {99,99}, {78,175}, {114,179}, {120,115}, {96,142}, {117,189}, {107,172}, + {83,133}, {124,172}, {82,155}, {84,171}, {94,98}, {101,166}, {112,112}, + {85,132}, {109,180}, {99,173}, {104,130}, {109,181}, {87,188}, {109,123}, + {118,107}, {114,120}, {118,136}, {83,166}, {114,157}, {79,127}, {107,108}, + {79,128}, {102,104}, {125,169}, {79,129}, {96,159}, {94,172}, {96,98}, + {116,127}, {98,175}, {89,177}, {113,135}, {75,120}, {121,190}, {91,122}, + {90,181}, {118,172}, {90,156}, {122,164}, {96,143}, {93,114}, {102,105}, + {111,179}, {115,173}, {107,186}, {121,166}, {74,157}, {85,158}, {74,158}, + {95,164}, {102,189}, {117,108}, {100,181}, {105,163}, {109,139}, {79,164}, + {88,147}, {93,115}, {84,172}, {114,121}, {95,119}, {75,142}, {123,152}, + {80,153}, {93,146}, {119,180}, {103,156}, {100,101}, {124,99}, {91,123}, + {114,122}, {105,189}, {80,138}, {117,150}, {89,133}, {100,116}, {109,103}, + {106,125}, {102,190}, {119,132}, {117,109}, {89,160}, {74,116}, {120,162}, + {79,130}, {108,126}, {101,116}, {77,136}, {110,136}, {103,136}, {77,137}, + {121,119}, {113,168}, {89,178}, {91,181}, {74,117}, {89,134}, {88,137}, + {89,107}, {109,124}, {88,148}, {92,154}, {98,124}, {124,173}, {108,160}, + {82,190}, {105,135}, {102,106}, {98,176}, {122,123}, {117,110}, {123,106}, + {108,187}, {108,127}, {124,152}, {84,165}, {121,131}, {110,162}, {87,169}, + {109,182}, {94,173}, {76,172}, {99,174}, {104,148}, {122,184}, {93,116}, + {100,117}, {88,112}, {88,149}, {116,170}, {78,121}, {86,161}, {79,146}, + {80,118}, {78,98}, {115,174}, {115,184}, {92,140}, {80,139}, {124,100}, + {77,138}, {87,148}, {94,99}, {100,160}, {110,137}, {98,157}, {117,190}, + {84,108}, {85,145}, {88,176}, {120,131}, {106,151}, {117,151}, {88,127}, + {125,128}, {107,109}, {85,106}, {103,104}, {110,138}, {74,167}, {120,163}, + {84,157}, {106,152}, {123,153}, {109,183}, {101,117}, {80,109}, {113,177}, + {98,125}, {99,136}, {89,149}, {95,106}, {91,124}, {120,164}, {113,186}, + {101,118}, {115,175}, {123,154}, {97,160}, {89,108}, {117,171}, {96,118}, + {105,136}, {75,143}, {99,137}, {94,174}, {98,126}, {92,175}, {86,101}, + {98,177}, {86,190}, {89,97}, {88,128}, {92,155}, {109,125}, {95,120}, + {106,101}, {87,109}, {115,185}, {109,184}, {117,135}, {97,138}, {107,163}, + {114,158}, {120,140}, {106,153}, {83,134}, {91,166}, {117,111}, {78,176}, + {105,190}, {123,118}, {98,178}, {79,178}, {119,121}, {89,179}, {97,139}, + {90,157}, {90,121}, {107,187}, {75,121}, {109,185}, {96,160}, {116,128}, + {125,124}, {95,113}, {99,175}, {96,99}, {125,121}, {112,113}, {77,139}, + {109,126}, {85,128}, {99,176}, {109,186}, {105,164}, {85,173}, {103,157}, + {84,182}, {101,119}, {91,167}, {98,127}, {110,139}, {87,180}, {112,157}, + {78,107}, {103,158}, {86,150}, {97,140}, {104,115}, {101,174}, {92,98}, + {96,144}, {85,117}, {85,97}, {123,155}, {121,139}, {75,179}, {116,101}, + {122,136}, {86,151}, {105,165}, {123,156}, {125,144}, {123,182}, {90,101}, + {91,125}, {108,162}, {77,183}, {112,158}, {118,137}, {94,175}, {83,113}, + {124,174}, {104,131}, {113,136}, {78,177}, {121,173}, {114,180}, {100,118}, + {117,121}, {92,176}, {99,177}, {104,101}, {114,123}, {94,100}, {90,140}, + {74,169}, {99,154}, {124,153}, {106,154}, {121,132}, {99,100}, {123,157}, + {111,138}, {104,132}, {85,140}, {107,151}, {89,109}, {123,107}, {83,153}, + {85,98}, {118,158}, {90,182}, {96,145}, {105,104}, {117,185}, {122,111}, + {107,188}, {96,170}, {99,114}, {85,133}, {113,163}, {85,174}, {77,140}, + {109,153}, {88,129}, {122,172}, {113,171}, {122,124}, {102,162}, {122,165}, + {98,186}, {74,118}, {100,119}, {106,155}, {117,186}, {123,108}, {79,131}, + {107,189}, {120,186}, {95,121}, {97,177}, {82,100}, {117,187}, {80,154}, + {80,155}, {106,126}, {89,113}, {74,119}, {83,167}, {120,165}, {83,114}, + {98,128}, {114,159}, {77,165}, {121,108}, {77,141}, {110,110}, {86,110}, + {87,170}, {103,160}, {107,110}, {79,153}, {92,141}, {109,187}, {94,176}, + {87,171}, {94,101}, {95,151}, {91,144}, {91,145}, {85,99}, {112,114}, + {92,156}, {74,168}, {120,166}, {92,142}, {106,156}, {91,146}, {105,115}, + {119,155}, {99,104}, {87,110}, {96,161}, {75,122}, {101,145}, {80,156}, + {85,129}, {88,138}, {99,105}, {96,100}, {105,105}, {83,135}, {92,157}, + {120,110}, {76,120}, {80,110}, {88,178}, {99,138}, {76,111}, {84,109}, + {118,145}, {80,140}, {74,134}, {85,130}, {78,122}, {74,135}, {122,112}, + {95,152}, {117,122}, {101,171}, {111,180}, {93,117}, {77,106}, {99,178}, + {123,183}, {119,144}, {125,122}, {125,161}, {118,190}, {81,128}, {104,133}, + {100,120}, {97,168}, {76,129}, {82,173}, {91,126}, {96,162}, {122,137}, + {97,141}, {74,120}, {114,160}, {113,137}, {94,177}, {112,159}, {120,132}, + {110,140}, {94,178}, {103,137}, {98,179}, {103,161}, {99,139}, {99,140}, + {79,184}, {111,108}, {125,190}, {124,101}, {122,113}, {95,153}, {96,146}, + {116,154}, {113,138}, {78,99}, {114,124}, {108,163}, {96,101}, {119,107}, + {107,111}, {101,158}, {97,100}, {77,107}, {89,180}, {104,102}, {77,142}, + {97,169}, {124,175}, {96,163}, {98,129}, {78,100}, {94,102}, {107,190}, + {107,157}, {112,160}, {116,155}, {98,180}, {83,136}, {116,171}, {110,117}, + {117,152}, {85,159}, {86,165}, {107,112}, {116,163}, {99,141}, {116,180}, + {122,114}, {111,181}, {74,159}, {107,113}, {109,127}, {125,137}, {100,102}, + {121,100}, {112,115}, {101,172}, {81,167}, {89,135}, {100,151}, {106,157}, + {84,183}, {90,122}, {90,141}, {121,140}, {97,154}, {91,127}, {76,133}, + {108,144}, {75,123}, {94,179}, {105,106}, {89,136}, {110,163}, {87,125}, + {79,132}, {80,141}, {124,102}, {113,187}, {125,146}, {81,129}, {99,155}, + {83,137}, {92,143}, {76,173}, {94,103}, {102,123}, {108,97}, {76,121}, + {123,158}, {103,162}, {84,129}, {92,104}, {98,130}, {115,152}, {101,147}, + {115,153}, {115,134}, {77,155}, {77,108}, {124,131}, {84,167}, {81,130}, + {121,101}, {104,149}, {99,142}, {84,138}, {95,154}, {123,159}, {103,163}, + {120,187}, {99,143}, {117,112}, {88,167}, {89,137}, {120,111}, {111,182}, + {93,118}, {110,111}, {77,184}, {94,120}, {124,103}, {119,188}, {119,113}, + {78,123}, {116,97}, {110,141}, {97,110}, {108,131}, {79,190}, {120,127}, + {88,162}, {83,168}, {94,104}, {116,164}, {108,130}, {89,181}, {121,133}, + {93,147}, {86,177}, {108,188}, {124,176}, {109,128}, {74,121}, {110,164}, + {114,161}, {94,121}, {86,178}, {94,180}, {95,155}, {91,147}, {122,167}, + {88,163}, {116,129}, {93,119}, {114,181}, {84,110}, {86,179}, {93,120}, + {79,133}, {95,159}, {114,126}, {118,97}, {107,139}, {113,188}, {115,135}, + {96,171}, {109,188}, {97,155}, {110,165}, {94,181}, {122,147}, {113,139}, + {80,111}, {93,121}, {81,131}, {117,113}, {106,134}, {112,161}, {118,108}, + {117,153}, {112,171}, {93,122}, {114,127}, {119,133}, {91,98}, {114,182}, + {74,122}, {119,181}, {75,165}, {110,166}, {96,147}, {78,101}, {86,152}, + {84,111}, {105,137}, {83,142}, {116,130}, {75,166}, {113,97}, {107,114}, + {113,98}, {107,115}, {112,116}, {75,180}, {84,112}, {115,114}, {123,119}, + {117,172}, {110,167}, {116,114}, {117,173}, {79,179}, {112,162}, {110,142}, + {113,140}, {101,120}, {87,181}, {99,179}, {79,165}, {79,134}, {115,115}, + {100,152}, {79,185}, {79,154}, {122,141}, {102,163}, {114,162}, {117,174}, + {74,123}, {99,156}, {78,178}, {86,153}, {110,112}, {116,165}, {88,130}, + {92,144}, {76,174}, {85,160}, {118,138}, {125,138}, {88,150}, {116,143}, + {86,102}, {92,126}, {91,148}, {87,135}, {114,190}, {113,141}, {98,131}, + {92,158}, {92,159}, {111,109}, {102,107}, {121,157}, {106,127}, {111,110}, + {116,144}, {78,179}, {102,108}, {78,158}, {85,185}, {99,180}, {77,144}, + {85,120}, {119,189}, {92,105}, {94,182}, {92,106}, {114,163}, {105,116}, + {82,156}, {105,166}, {99,182}, {103,138}, {80,142}, {90,183}, {74,124}, + {110,168}, {90,158}, {114,183}, {98,187}, {76,102}, {90,123}, {110,169}, + {117,154}, {119,156}, {97,170}, {78,129}, {84,113}, {125,113}, {102,125}, + {123,109}, {120,167}, {97,142}, {119,162}, {117,175}, {79,135}, {84,114}, + {76,175}, {84,168}, {110,143}, {119,151}, {96,102}, {86,129}, {97,156}, + {112,163}, {113,164}, {92,177}, {86,103}, {116,181}, {113,142}, {114,164}, + {80,112}, {108,175}, {121,122}, {107,117}, {84,173}, {98,132}, {105,167}, + {107,116}, {106,97}, {120,124}, {78,102}, {121,134}, {124,154}, {84,115}, + {83,121}, {106,158}, {105,107}, {97,161}, {83,143}, {116,182}, {106,128}, + {97,143}, {76,122}, {110,170}, {112,164}, {115,116}, {84,174}, {114,128}, + {113,165}, {116,131}, {96,148}, {107,118}, {87,97}, {75,168}, {121,109}, + {105,109}, {88,164}, {122,115}, {98,133}, {124,125}, {108,132}, {88,113}, + {92,107}, {85,100}, {107,169}, {104,123}, {88,151}, {123,110}, {81,161}, + {91,128}, {117,126}, {94,183}, {74,187}, {119,134}, {79,136}, {97,144}, + {110,144}, {105,180}, {78,180}, {85,141}, {79,155}, {93,123}, {78,108}, + {105,168}, {84,116}, {100,135}, {117,155}, {122,129}, {94,105}, {84,184}, + {111,183}, {83,115}, {107,119}, {111,184}, {117,156}, {109,140}, {91,149}, + {113,143}, {113,144}, {117,114}, {89,110}, {85,108}, {98,134}, {125,99}, + {123,165}, {95,107}, {98,181}, {118,109}, {117,115}, {112,117}, {97,101}, + {117,157}, {108,98}, {109,189}, {117,116}, {123,120}, {91,99}, {86,138}, + {75,153}, {101,148}, {115,186}, {107,120}, {96,119}, {87,172}, {113,172}, + {101,111}, {85,161}, {87,173}, {81,145}, {97,178}, {111,185}, {93,124}, + {118,156}, {112,165}, {116,132}, {105,169}, {115,187}, {84,175}, {76,98}, + {119,190}, {95,124}, {107,141}, {80,119}, {86,130}, {104,109}, {111,111}, + {75,101}, {75,169}, {122,168}, {76,134}, {102,167}, {106,135}, {91,100}, + {79,137}, {98,188}, {111,186}, {107,158}, {117,136}, {84,158}, {96,149}, + {111,112}, {98,135}, {89,111}, {121,167}, {103,165}, {79,138}, {97,145}, + {98,136}, {111,187}, {122,185}, {92,178}, {96,103}, {120,168}, {75,170}, + {75,124}, {86,162}, {117,158}, {117,159}, {110,118}, {98,182}, {83,138}, + {111,188}, {81,132}, {111,113}, {81,133}, {80,158}, {89,161}, {96,120}, + {77,145}, {115,121}, {103,140}, {86,104}, {78,103}, {84,117}, {100,136}, + {83,116}, {107,121}, {75,181}, {118,157}, {113,99}, {76,135}, {105,138}, + {97,176}, {117,160}, {123,111}, {75,145}, {123,160}, {114,165}, {108,176}, + {112,172}, {110,171}, {105,139}, {76,176}, {87,111}, {115,97}, {124,181}, + {113,100}, {96,150}, {111,114}, {116,145}, {119,97}, {113,145}, {74,188}, + {74,189}, {78,142}, {115,136}, {115,122}, {109,190}, {90,102}, {96,172}, + {120,141}, {75,146}, {107,142}, {121,152}, {121,153}, {74,160}, {90,138}, + {75,102}, {74,136}, {121,174}, {91,172}, {80,113}, {85,175}, {102,179}, + {103,98}, {100,153}, {100,161}, {124,132}, {121,175}, {79,180}, {119,166}, + {78,124}, {116,133}, {92,99}, {93,125}, {116,134}, {120,97}, {104,150}, + {91,129}, {112,166}, {100,121}, {118,173}, {121,110}, {93,126}, {87,112}, + {88,168}, {75,125}, {121,154}, {120,142}, {121,176}, {96,173}, {99,115}, + {116,115}, {106,130}, {114,166}, {112,118}, {91,150}, {107,164}, {114,167}, + {87,149}, {84,118}, {121,168}, {87,129}, {101,149}, {105,170}, {87,140}, + {83,169}, {98,137}, {124,155}, {77,109}, {76,112}, {106,98}, {100,182}, + {80,128}, {112,119}, {110,97}, {87,182}, {98,138}, {98,139}, {122,143}, + {107,159}, {86,139}, {116,116}, {109,141}, {100,146}, {106,105}, {100,122}, + {115,98}, {77,146}, {118,139}, {113,166}, {109,129}, {104,124}, {110,145}, + {112,167}, {98,140}, {100,106}, {117,161}, {109,154}, {87,174}, {81,177}, + {105,171}, {105,172}, {96,164}, {90,103}, {93,148}, {106,99}, {86,131}, + {86,180}, {90,159}, {111,115}, {98,141}, {111,189}, {114,168}, {111,133}, + {103,167}, {87,189}, {103,142}, {95,156}, {121,135}, {89,182}, {95,108}, + {86,154}, {92,100}, {112,120}, {85,186}, {100,183}, {86,132}, {116,172}, + {111,190}, {112,97}, {94,106}, {90,124}, {88,188}, {122,148}, {108,165}, + {124,104}, {108,166}, {88,139}, {123,121}, {100,147}, {77,185}, {79,147}, + {74,170}, {79,148}, {120,125}, {116,135}, {106,159}, {121,155}, {84,119}, + {107,165}, {97,146}, {106,100}, {122,130}, {123,161}, {122,173}, {112,98}, + {76,177}, {122,99}, {98,183}, {98,142}, {105,181}, {97,171}, {103,168}, + {104,151}, {90,184}, {84,139}, {119,182}, {86,133}, {84,169}, {122,186}, + {76,178}, {119,157}, {94,122}, {78,104}, {112,121}, {100,190}, {100,137}, + {100,148}, {106,131}, {111,116}, {87,126}, {123,162}, {77,147}, {111,117}, + {122,169}, {121,102}, {95,125}, {119,135}, {120,189}, {120,188}, {94,107}, + {91,168}, {99,157}, {97,162}, {81,134}, {118,144}, {107,166}, {90,185}, + {108,135}, {94,184}, {120,169}, {99,158}, {78,181}, {122,131}, {101,151}, + {108,136}, {115,137}, {100,123}, {102,110}, {111,118}, {92,127}, {78,125}, + {88,131}, {80,143}, {79,186}, {115,138}, {96,151}, {81,135}, {105,110}, + {104,125}, {122,132}, {98,143}, {122,133}, {121,120}, {92,160}, {123,112}, + {88,105}, {101,159}, {121,103}, {118,174}, {118,140}, {98,184}, {108,177}, + {90,160}, {113,146}, {82,140}, {79,139}, {74,125}, {93,127}, {118,175}, + {94,185}, {122,116}, {85,109}, {113,167}, {94,126}, {92,128}, {81,136}, + {81,137}, {120,126}, {75,182}, {84,185}, {117,162}, {97,147}, {88,169}, + {120,190}, {79,140}, {125,100}, {78,182}, {122,144}, {76,179}, {102,126}, + {118,110}, {85,176}, {81,138}, {124,126}, {85,177}, {77,169}, {122,117}, + {98,144}, {116,183}, {77,148}, {103,99}, {91,101}, {98,145}, {87,98}, + {119,163}, {106,102}, {80,97}, {78,154}, {123,171}, {91,102}, {91,158}, + {88,165}, {106,160}, {88,106}, {101,160}, {86,155}, {111,134}, {120,170}, + {100,149}, {78,183}, {96,152}, {87,175}, {116,173}, {77,166}, {76,180}, + {117,163}, {100,138}, {92,161}, {121,136}, {124,127}, {104,103}, {88,132}, + {75,126}, {92,110}, {87,183}, {112,168}, {93,128}, {79,141}, {92,179}, + {89,112}, {102,169}, {100,124}, {106,132}, {100,172}, {100,165}, {123,184}, + {76,123}, {100,125}, {77,156}, {89,183}, {93,159}, {109,142}, {89,144}, + {101,99}, {121,141}, {77,110}, {79,142}, {118,111}, {125,147}, {107,173}, + {86,156}, {101,100}, {85,118}, {86,157}, {121,169}, {103,100}, {86,163}, + {81,139}, {86,164}, {85,178}, {94,186}, {87,184}, {88,170}, {79,149}, + {88,189}, {88,107}, {125,139}, {124,156}, {96,104}, {85,179}, {125,153}, + {76,99}, {89,185}, {83,170}, {117,181}, {111,135}, {83,154}, {90,125}, + {104,104}, {92,111}, {112,99}, {77,149}, {96,105}, {94,108}, {112,122}, + {110,113}, {110,114}, {118,141}, {110,146}, {86,134}, {96,165}, {115,123}, + {101,161}, {100,139}, {87,99}, {91,130}, {74,190}, {79,143}, {48,97}, + {48,98}, {1,1}, {1,2}, {48,99}, {1,3}, {1,4}, {48,100}, {48,101}, {48,102}, + {48,103}, {1,5}, {1,6}, {1,7}, {1,8}, {1,9}, {48,104}, {48,105}, {48,106}, + {48,107}, {48,108}, {48,109}, {48,110}, {48,111}, {1,10}, {48,112}, + {48,113}, {48,114}, {48,115}, {48,116}, {1,11}, {1,12}, {48,117}, {1,13}, + {1,14}, {1,15}, {48,118}, {1,16}, {1,17}, {1,18}, {1,19}, {1,20}, {1,21}, + {1,22}, {48,119}, {48,120}, {1,23}, {48,121}, {48,122}, {48,123}, {1,24}, + {1,25}, {1,26}, {1,33}, {1,34}, {1,35}, {48,124}, {48,125}, {1,36}, + {1,37}, {48,126}, {1,38}, {1,39}, {1,40}, {48,127}, {1,41}, {1,42}, + {1,43}, {1,44}, {1,45}, {1,46}, {1,47}, {1,48}, {1,49}, {1,50}, {48,128}, + {1,51}, {48,129}, {1,52}, {1,53}, {1,54}, {1,55}, {1,56}, {1,57}, {48,130}, + {1,58}, {1,65}, {1,66}, {48,131}, {1,67}, {1,68}, {1,69}, {48,132}, + {1,70}, {1,71}, {1,72}, {1,73}, {1,74}, {1,75}, {1,76}, {1,77}, {1,78}, + {1,79}, {1,80}, {1,81}, {1,82}, {1,83}, {1,84}, {1,85}, {1,86}, {1,87}, + {1,88}, {48,133}, {48,134}, {1,89}, {1,90}, {48,135}, {1,91}, {1,92}, + {48,136}, {48,137}, {1,93}, {48,138}, {1,94}, {1,95}, {1,96}, {1,97}, + {1,98}, {48,139}, {48,140}, {1,99}, {48,141}, {48,142}, {48,143}, {48,144}, + {1,100}, {1,101}, {48,145}, {48,146}, {48,147}, {48,148}, {1,102}, + {1,103}, {1,104}, {48,149}, {1,105}, {1,106}, {1,107}, {48,150}, {1,108}, + {1,109}, {1,110}, {1,111}, {1,112}, {1,113}, {1,114}, {48,151}, {48,152}, + {1,115}, {48,153}, {48,154}, {48,155}, {1,116}, {1,117}, {1,118}, {1,119}, + {1,120}, {1,121}, {48,156}, {48,157}, {48,158}, {1,122}, {48,159}, + {1,123}, {1,124}, {48,160}, {48,161}, {1,125}, {1,126}, {1,127}, {1,128}, + {1,129}, {1,130}, {1,131}, {48,162}, {48,163}, {1,132}, {48,164}, {48,165}, + {48,166}, {1,133}, {1,134}, {1,135}, {48,167}, {1,136}, {1,137}, {48,168}, + {1,138}, {1,139}, {1,140}, {48,169}, {1,141}, {1,142}, {1,143}, {48,170}, + {1,144}, {1,145}, {1,146}, {1,147}, {1,148}, {1,149}, {1,150}, {1,151}, + {48,171}, {1,152}, {48,172}, {1,153}, {1,154}, {1,155}, {1,156}, {1,157}, + {1,158}, {1,159}, {1,160}, {48,173}, {48,174}, {1,161}, {1,162}, {48,175}, + {1,163}, {1,164}, {48,176}, {48,177}, {1,165}, {48,178}, {1,166}, {48,179}, + {1,167}, {1,168}, {48,180}, {48,181}, {48,182}, {1,169}, {48,183}, + {1,170}, {48,184}, {48,185}, {1,171}, {1,172}, {1,173}, {1,174}, {1,175}, + {48,186}, {48,187}, {1,176}, {1,177}, {48,188}, {1,178}, {1,179}, {1,180}, + {48,189}, {1,181}, {48,190}, {1,182}, {1,183}, {1,184}, {1,185}, {1,186}, + {49,97}, {49,98}, {1,187}, {49,99}, {1,188}, {49,100}, {1,189}, {1,190}, + {2,1}, {2,2}, {2,3}, {2,4}, {49,101}, {2,5}, {2,6}, {2,7}, {49,102}, + {2,8}, {2,9}, {2,10}, {49,103}, {2,11}, {2,12}, {2,13}, {2,14}, {2,15}, + {2,16}, {2,17}, {2,18}, {49,104}, {2,19}, {2,20}, {49,105}, {49,106}, + {2,21}, {2,22}, {2,23}, {2,24}, {2,25}, {2,26}, {49,107}, {49,108}, + {2,33}, {2,34}, {49,109}, {2,35}, {2,36}, {2,37}, {49,110}, {2,38}, + {2,39}, {2,40}, {2,41}, {2,42}, {2,43}, {2,44}, {49,111}, {49,112}, + {2,45}, {49,113}, {2,46}, {49,114}, {2,47}, {2,48}, {2,49}, {2,50}, + {2,51}, {2,52}, {49,115}, {2,53}, {2,54}, {2,55}, {49,116}, {2,56}, + {2,57}, {2,58}, {49,117}, {2,65}, {2,66}, {2,67}, {2,68}, {2,69}, {2,70}, + {2,71}, {2,72}, {49,118}, {2,73}, {49,119}, {2,74}, {2,75}, {2,76}, + {2,77}, {2,78}, {2,79}, {2,80}, {2,81}, {49,120}, {49,121}, {2,82}, + {2,83}, {49,122}, {2,84}, {2,85}, {49,123}, {49,124}, {49,125}, {49,126}, + {2,86}, {2,87}, {2,88}, {2,89}, {49,127}, {49,128}, {49,129}, {2,90}, + {49,130}, {2,91}, {49,131}, {49,132}, {2,92}, {2,93}, {2,94}, {2,95}, + {2,96}, {49,133}, {49,134}, {2,97}, {2,98}, {49,135}, {2,99}, {2,100}, + {2,101}, {49,136}, {2,102}, {2,103}, {2,104}, {2,105}, {2,106}, {2,107}, + {2,108}, {2,109}, {2,110}, {2,111}, {2,112}, {49,137}, {49,138}, {2,113}, + {2,114}, {2,115}, {2,116}, {2,117}, {2,118}, {49,139}, {2,119}, {2,120}, + {2,121}, {2,122}, {2,123}, {2,124}, {2,125}, {2,126}, {2,127}, {2,128}, + {2,129}, {2,130}, {2,131}, {2,132}, {2,133}, {2,134}, {2,135}, {2,136}, + {49,140}, {2,137}, {2,138}, {2,139}, {2,140}, {2,141}, {2,142}, {2,143}, + {2,144}, {49,141}, {49,142}, {2,145}, {2,146}, {49,143}, {2,147}, {2,148}, + {2,149}, {49,144}, {2,150}, {2,151}, {2,152}, {2,153}, {2,154}, {2,155}, + {2,156}, {49,145}, {49,146}, {2,157}, {49,147}, {2,158}, {2,159}, {2,160}, + {2,161}, {2,162}, {2,163}, {2,164}, {2,165}, {49,148}, {2,166}, {2,167}, + {2,168}, {49,149}, {2,169}, {2,170}, {2,171}, {49,150}, {2,172}, {2,173}, + {2,174}, {2,175}, {2,176}, {2,177}, {2,178}, {2,179}, {2,180}, {2,181}, + {2,182}, {2,183}, {2,184}, {2,185}, {2,186}, {2,187}, {2,188}, {2,189}, + {2,190}, {49,151}, {49,152}, {3,1}, {3,2}, {49,153}, {3,3}, {3,4}, + {49,154}, {49,155}, {49,156}, {3,5}, {3,6}, {3,7}, {3,8}, {3,9}, {3,10}, + {49,157}, {49,158}, {3,11}, {49,159}, {3,12}, {49,160}, {3,13}, {3,14}, + {3,15}, {3,16}, {3,17}, {3,18}, {49,161}, {3,19}, {3,20}, {3,21}, {3,22}, + {3,23}, {3,24}, {3,25}, {3,26}, {3,33}, {3,34}, {3,35}, {3,36}, {3,37}, + {3,38}, {3,39}, {3,40}, {3,41}, {3,42}, {3,43}, {3,44}, {3,45}, {3,46}, + {3,47}, {3,48}, {3,49}, {3,50}, {3,51}, {49,162}, {49,163}, {3,52}, + {3,53}, {49,164}, {3,54}, {3,55}, {49,165}, {49,166}, {3,56}, {49,167}, + {3,57}, {3,58}, {3,65}, {3,66}, {3,67}, {49,168}, {49,169}, {3,68}, + {49,170}, {3,69}, {49,171}, {49,172}, {3,70}, {3,71}, {3,72}, {49,173}, + {3,73}, {49,174}, {49,175}, {49,176}, {3,74}, {49,177}, {3,75}, {3,76}, + {3,77}, {49,178}, {3,78}, {49,179}, {3,79}, {3,80}, {3,81}, {3,82}, + {3,83}, {49,180}, {49,181}, {3,84}, {49,182}, {49,183}, {49,184}, {3,85}, + {3,86}, {3,87}, {49,185}, {3,88}, {3,89}, {49,186}, {49,187}, {3,90}, + {3,91}, {49,188}, {3,92}, {3,93}, {3,94}, {49,189}, {3,95}, {3,96}, + {3,97}, {3,98}, {3,99}, {3,100}, {3,101}, {49,190}, {50,97}, {3,102}, + {50,98}, {50,99}, {50,100}, {3,103}, {3,104}, {3,105}, {3,106}, {3,107}, + {3,108}, {50,101}, {50,102}, {3,109}, {3,110}, {3,111}, {3,112}, {3,113}, + {3,114}, {50,103}, {3,115}, {3,116}, {3,117}, {3,118}, {3,119}, {3,120}, + {3,121}, {3,122}, {3,123}, {3,124}, {3,125}, {3,126}, {3,127}, {3,128}, + {3,129}, {3,130}, {3,131}, {3,132}, {3,133}, {3,134}, {3,135}, {3,136}, + {3,137}, {3,138}, {3,139}, {3,140}, {3,141}, {3,142}, {3,143}, {3,144}, + {3,145}, {3,146}, {3,147}, {3,148}, {3,149}, {3,150}, {3,151}, {3,152}, + {3,153}, {3,154}, {3,155}, {3,156}, {3,157}, {3,158}, {3,159}, {3,160}, + {3,161}, {50,104}, {50,105}, {50,106}, {3,162}, {50,107}, {3,163}, + {3,164}, {3,165}, {50,108}, {3,166}, {3,167}, {3,168}, {3,169}, {3,170}, + {3,171}, {3,172}, {50,109}, {50,110}, {3,173}, {50,111}, {50,112}, + {50,113}, {3,174}, {3,175}, {3,176}, {3,177}, {3,178}, {3,179}, {50,114}, + {50,115}, {3,180}, {3,181}, {50,116}, {3,182}, {3,183}, {3,184}, {3,185}, + {3,186}, {3,187}, {3,188}, {3,189}, {3,190}, {4,1}, {4,2}, {50,117}, + {4,3}, {4,4}, {50,118}, {4,5}, {50,119}, {4,6}, {4,7}, {4,8}, {4,9}, + {4,10}, {4,11}, {50,120}, {4,12}, {4,13}, {4,14}, {50,121}, {4,15}, + {4,16}, {4,17}, {50,122}, {4,18}, {4,19}, {4,20}, {4,21}, {4,22}, {4,23}, + {4,24}, {4,25}, {4,26}, {4,33}, {50,123}, {50,124}, {4,34}, {4,35}, + {4,36}, {4,37}, {50,125}, {4,38}, {4,39}, {50,126}, {4,40}, {4,41}, + {4,42}, {4,43}, {4,44}, {4,45}, {4,46}, {4,47}, {4,48}, {4,49}, {4,50}, + {4,51}, {4,52}, {4,53}, {4,54}, {4,55}, {4,56}, {4,57}, {4,58}, {4,65}, + {4,66}, {4,67}, {4,68}, {4,69}, {4,70}, {4,71}, {4,72}, {50,127}, {50,128}, + {4,73}, {4,74}, {50,129}, {4,75}, {50,130}, {4,76}, {50,131}, {4,77}, + {4,78}, {4,79}, {4,80}, {4,81}, {4,82}, {4,83}, {50,132}, {50,133}, + {4,84}, {50,134}, {4,85}, {50,135}, {50,136}, {50,137}, {4,86}, {4,87}, + {4,88}, {4,89}, {50,138}, {50,139}, {4,90}, {4,91}, {4,92}, {4,93}, + {4,94}, {4,95}, {50,140}, {4,96}, {4,97}, {4,98}, {4,99}, {4,100}, + {4,101}, {4,102}, {4,103}, {4,104}, {4,105}, {4,106}, {50,141}, {50,142}, + {4,107}, {4,108}, {4,109}, {4,110}, {4,111}, {4,112}, {50,143}, {50,144}, + {4,113}, {4,114}, {4,115}, {4,116}, {4,117}, {4,118}, {4,119}, {4,120}, + {4,121}, {4,122}, {4,123}, {4,124}, {4,125}, {4,126}, {4,127}, {4,128}, + {4,129}, {4,130}, {4,131}, {50,145}, {4,132}, {4,133}, {4,134}, {4,135}, + {4,136}, {4,137}, {50,146}, {4,138}, {4,139}, {4,140}, {50,147}, {4,141}, + {4,142}, {4,143}, {50,148}, {4,144}, {4,145}, {4,146}, {4,147}, {4,148}, + {4,149}, {4,150}, {50,149}, {50,150}, {4,151}, {4,152}, {4,153}, {50,151}, + {4,154}, {4,155}, {4,156}, {4,157}, {4,158}, {4,159}, {50,152}, {4,160}, + {4,161}, {4,162}, {4,163}, {4,164}, {4,165}, {4,166}, {4,167}, {4,168}, + {4,169}, {4,170}, {4,171}, {4,172}, {4,173}, {4,174}, {4,175}, {4,176}, + {4,177}, {4,178}, {4,179}, {4,180}, {4,181}, {4,182}, {4,183}, {4,184}, + {4,185}, {4,186}, {50,153}, {50,154}, {4,187}, {4,188}, {50,155}, {4,189}, + {4,190}, {5,1}, {50,156}, {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7}, + {50,157}, {50,158}, {50,159}, {5,8}, {50,160}, {5,9}, {50,161}, {50,162}, + {5,10}, {5,11}, {5,12}, {5,13}, {5,14}, {50,163}, {5,15}, {5,16}, {5,17}, + {5,18}, {5,19}, {5,20}, {5,21}, {50,164}, {5,22}, {5,23}, {5,24}, {5,25}, + {5,26}, {5,33}, {5,34}, {5,35}, {5,36}, {5,37}, {5,38}, {50,165}, {50,166}, + {5,39}, {5,40}, {5,41}, {5,42}, {5,43}, {5,44}, {50,167}, {50,168}, + {5,45}, {5,46}, {50,169}, {5,47}, {5,48}, {5,49}, {50,170}, {5,50}, + {5,51}, {5,52}, {5,53}, {5,54}, {5,55}, {5,56}, {50,171}, {50,172}, + {5,57}, {5,58}, {50,173}, {5,65}, {5,66}, {5,67}, {5,68}, {5,69}, {5,70}, + {5,71}, {50,174}, {5,72}, {5,73}, {5,74}, {50,175}, {5,75}, {5,76}, + {5,77}, {50,176}, {5,78}, {5,79}, {5,80}, {5,81}, {5,82}, {5,83}, {5,84}, + {50,177}, {50,178}, {5,85}, {5,86}, {5,87}, {5,88}, {5,89}, {5,90}, + {5,91}, {5,92}, {5,93}, {5,94}, {50,179}, {5,95}, {5,96}, {5,97}, {5,98}, + {5,99}, {5,100}, {5,101}, {5,102}, {5,103}, {5,104}, {5,105}, {5,106}, + {5,107}, {5,108}, {5,109}, {5,110}, {5,111}, {5,112}, {5,113}, {5,114}, + {5,115}, {5,116}, {5,117}, {5,118}, {5,119}, {5,120}, {5,121}, {50,180}, + {50,181}, {5,122}, {5,123}, {50,182}, {5,124}, {50,183}, {5,125}, {50,184}, + {5,126}, {50,185}, {5,127}, {5,128}, {5,129}, {5,130}, {50,186}, {50,187}, + {50,188}, {5,131}, {50,189}, {5,132}, {50,190}, {5,133}, {5,134}, {5,135}, + {51,97}, {5,136}, {5,137}, {5,138}, {5,139}, {5,140}, {5,141}, {5,142}, + {5,143}, {5,144}, {5,145}, {5,146}, {5,147}, {5,148}, {5,149}, {5,150}, + {5,151}, {5,152}, {5,153}, {5,154}, {5,155}, {5,156}, {5,157}, {5,158}, + {5,159}, {5,160}, {5,161}, {5,162}, {5,163}, {5,164}, {5,165}, {51,98}, + {51,99}, {5,166}, {5,167}, {51,100}, {5,168}, {5,169}, {5,170}, {51,101}, + {5,171}, {5,172}, {5,173}, {5,174}, {5,175}, {5,176}, {5,177}, {51,102}, + {51,103}, {5,178}, {51,104}, {5,179}, {51,105}, {5,180}, {5,181}, {5,182}, + {5,183}, {5,184}, {5,185}, {51,106}, {51,107}, {51,108}, {5,186}, {51,109}, + {5,187}, {5,188}, {51,110}, {51,111}, {51,112}, {51,113}, {5,189}, + {5,190}, {6,1}, {6,2}, {6,3}, {51,114}, {51,115}, {6,4}, {51,116}, + {51,117}, {51,118}, {51,119}, {51,120}, {6,5}, {51,121}, {6,6}, {51,122}, + {51,123}, {51,124}, {6,7}, {6,8}, {51,125}, {6,9}, {6,10}, {6,11}, + {51,126}, {6,12}, {6,13}, {6,14}, {6,15}, {6,16}, {6,17}, {6,18}, {51,127}, + {51,128}, {6,19}, {51,129}, {51,130}, {51,131}, {6,20}, {6,21}, {6,22}, + {6,23}, {6,24}, {6,25}, {51,132}, {51,133}, {6,26}, {6,33}, {51,134}, + {6,34}, {6,35}, {6,36}, {51,135}, {6,37}, {6,38}, {6,39}, {6,40}, {6,41}, + {6,42}, {6,43}, {51,136}, {6,44}, {6,45}, {6,46}, {6,47}, {51,137}, + {6,48}, {6,49}, {6,50}, {6,51}, {6,52}, {6,53}, {6,54}, {6,55}, {6,56}, + {6,57}, {6,58}, {6,65}, {6,66}, {6,67}, {6,68}, {6,69}, {6,70}, {6,71}, + {6,72}, {6,73}, {6,74}, {6,75}, {6,76}, {6,77}, {6,78}, {6,79}, {6,80}, + {6,81}, {6,82}, {6,83}, {6,84}, {6,85}, {6,86}, {6,87}, {51,138}, {51,139}, + {6,88}, {51,140}, {51,141}, {6,89}, {6,90}, {6,91}, {51,142}, {6,92}, + {51,143}, {51,144}, {6,93}, {6,94}, {6,95}, {6,96}, {51,145}, {51,146}, + {6,97}, {51,147}, {51,148}, {51,149}, {6,98}, {6,99}, {6,100}, {6,101}, + {6,102}, {51,150}, {51,151}, {51,152}, {6,103}, {6,104}, {51,153}, + {6,105}, {6,106}, {6,107}, {51,154}, {6,108}, {6,109}, {6,110}, {6,111}, + {6,112}, {6,113}, {6,114}, {51,155}, {51,156}, {6,115}, {51,157}, {51,158}, + {51,159}, {6,116}, {6,117}, {6,118}, {6,119}, {6,120}, {6,121}, {51,160}, + {51,161}, {6,122}, {6,123}, {51,162}, {6,124}, {6,125}, {6,126}, {51,163}, + {6,127}, {6,128}, {6,129}, {6,130}, {6,131}, {6,132}, {6,133}, {51,164}, + {51,165}, {6,134}, {6,135}, {51,166}, {51,167}, {6,136}, {6,137}, {51,168}, + {6,138}, {6,139}, {6,140}, {51,169}, {6,141}, {6,142}, {6,143}, {51,170}, + {6,144}, {6,145}, {6,146}, {6,147}, {6,148}, {6,149}, {6,150}, {6,151}, + {6,152}, {6,153}, {6,154}, {6,155}, {6,156}, {6,157}, {6,158}, {6,159}, + {6,160}, {6,161}, {6,162}, {6,163}, {6,164}, {6,165}, {6,166}, {51,171}, + {51,172}, {6,167}, {6,168}, {51,173}, {6,169}, {6,170}, {6,171}, {51,174}, + {6,172}, {51,175}, {6,173}, {6,174}, {6,175}, {6,176}, {6,177}, {51,176}, + {51,177}, {6,178}, {51,178}, {6,179}, {51,179}, {6,180}, {6,181}, {6,182}, + {6,183}, {51,180}, {51,181}, {51,182}, {6,184}, {6,185}, {6,186}, {51,183}, + {6,187}, {6,188}, {6,189}, {51,184}, {6,190}, {7,1}, {7,2}, {7,3}, + {7,4}, {7,5}, {7,6}, {7,7}, {7,8}, {7,9}, {7,10}, {51,185}, {7,11}, + {7,12}, {7,13}, {7,14}, {7,15}, {7,16}, {7,17}, {7,18}, {7,19}, {7,20}, + {7,21}, {7,22}, {7,23}, {7,24}, {7,25}, {7,26}, {7,33}, {7,34}, {7,35}, + {7,36}, {7,37}, {7,38}, {7,39}, {7,40}, {7,41}, {7,42}, {7,43}, {7,44}, + {7,45}, {7,46}, {7,47}, {7,48}, {7,49}, {7,50}, {7,51}, {51,186}, {7,52}, + {7,53}, {7,54}, {51,187}, {7,55}, {7,56}, {7,57}, {51,188}, {7,58}, + {7,65}, {7,66}, {7,67}, {7,68}, {7,69}, {7,70}, {51,189}, {51,190}, + {7,71}, {52,97}, {7,72}, {7,73}, {7,74}, {7,75}, {7,76}, {7,77}, {7,78}, + {7,79}, {52,98}, {52,99}, {7,80}, {7,81}, {52,100}, {7,82}, {7,83}, + {7,84}, {52,101}, {7,85}, {7,86}, {7,87}, {7,88}, {7,89}, {7,90}, {7,91}, + {7,92}, {52,102}, {7,93}, {52,103}, {7,94}, {52,104}, {7,95}, {7,96}, + {7,97}, {7,98}, {7,99}, {7,100}, {52,105}, {52,106}, {7,101}, {7,102}, + {52,107}, {7,103}, {7,104}, {52,108}, {52,109}, {7,105}, {7,106}, {7,107}, + {7,108}, {7,109}, {7,110}, {7,111}, {52,110}, {52,111}, {7,112}, {52,112}, + {7,113}, {52,113}, {7,114}, {7,115}, {7,116}, {7,117}, {7,118}, {7,119}, + {52,114}, {7,120}, {7,121}, {7,122}, {7,123}, {7,124}, {7,125}, {7,126}, + {7,127}, {7,128}, {7,129}, {7,130}, {7,131}, {7,132}, {7,133}, {7,134}, + {7,135}, {7,136}, {7,137}, {7,138}, {52,115}, {7,139}, {7,140}, {7,141}, + {7,142}, {7,143}, {7,144}, {7,145}, {52,116}, {7,146}, {7,147}, {7,148}, + {7,149}, {7,150}, {7,151}, {7,152}, {7,153}, {7,154}, {7,155}, {7,156}, + {7,157}, {7,158}, {7,159}, {7,160}, {7,161}, {7,162}, {7,163}, {7,164}, + {7,165}, {7,166}, {7,167}, {7,168}, {7,169}, {7,170}, {7,171}, {7,172}, + {52,117}, {7,173}, {7,174}, {7,175}, {52,118}, {7,176}, {7,177}, {7,178}, + {52,119}, {7,179}, {7,180}, {7,181}, {7,182}, {7,183}, {7,184}, {7,185}, + {52,120}, {52,121}, {7,186}, {7,187}, {7,188}, {7,189}, {7,190}, {8,1}, + {8,2}, {8,3}, {8,4}, {8,5}, {52,122}, {52,123}, {8,6}, {8,7}, {8,8}, + {8,9}, {8,10}, {8,11}, {52,124}, {8,12}, {8,13}, {8,14}, {8,15}, {8,16}, + {8,17}, {8,18}, {52,125}, {52,126}, {8,19}, {8,20}, {8,21}, {52,127}, + {8,22}, {8,23}, {8,24}, {8,25}, {8,26}, {8,33}, {52,128}, {52,129}, + {8,34}, {8,35}, {52,130}, {8,36}, {8,37}, {8,38}, {52,131}, {52,132}, + {52,133}, {8,39}, {8,40}, {8,41}, {8,42}, {8,43}, {52,134}, {52,135}, + {8,44}, {52,136}, {8,45}, {52,137}, {52,138}, {8,46}, {8,47}, {8,48}, + {52,139}, {8,49}, {52,140}, {8,50}, {8,51}, {8,52}, {52,141}, {8,53}, + {8,54}, {8,55}, {52,142}, {8,56}, {8,57}, {8,58}, {8,65}, {8,66}, {8,67}, + {8,68}, {8,69}, {8,70}, {8,71}, {8,72}, {8,73}, {8,74}, {8,75}, {8,76}, + {8,77}, {8,78}, {8,79}, {8,80}, {52,143}, {52,144}, {8,81}, {8,82}, + {52,145}, {8,83}, {8,84}, {8,85}, {52,146}, {8,86}, {52,147}, {8,87}, + {8,88}, {8,89}, {8,90}, {8,91}, {52,148}, {52,149}, {8,92}, {52,150}, + {8,93}, {52,151}, {8,94}, {8,95}, {8,96}, {8,97}, {52,152}, {8,98}, + {52,153}, {52,154}, {52,155}, {8,99}, {52,156}, {8,100}, {8,101}, {52,157}, + {52,158}, {52,159}, {52,160}, {52,161}, {8,102}, {8,103}, {8,104}, + {52,162}, {52,163}, {52,164}, {8,105}, {52,165}, {52,166}, {52,167}, + {52,168}, {52,169}, {8,106}, {8,107}, {8,108}, {52,170}, {52,171}, + {52,172}, {8,109}, {8,110}, {52,173}, {8,111}, {8,112}, {8,113}, {52,174}, + {8,114}, {8,115}, {8,116}, {8,117}, {8,118}, {8,119}, {8,120}, {52,175}, + {52,176}, {8,121}, {52,177}, {52,178}, {52,179}, {8,122}, {8,123}, + {8,124}, {8,125}, {8,126}, {8,127}, {52,180}, {8,128}, {8,129}, {8,130}, + {8,131}, {8,132}, {8,133}, {8,134}, {8,135}, {8,136}, {8,137}, {8,138}, + {8,139}, {8,140}, {8,141}, {8,142}, {8,143}, {8,144}, {8,145}, {8,146}, + {8,147}, {8,148}, {8,149}, {8,150}, {8,151}, {8,152}, {8,153}, {8,154}, + {8,155}, {8,156}, {8,157}, {8,158}, {8,159}, {8,160}, {8,161}, {8,162}, + {8,163}, {8,164}, {8,165}, {8,166}, {8,167}, {8,168}, {8,169}, {8,170}, + {8,171}, {8,172}, {8,173}, {8,174}, {8,175}, {8,176}, {8,177}, {8,178}, + {8,179}, {8,180}, {8,181}, {8,182}, {52,181}, {52,182}, {52,183}, {8,183}, + {52,184}, {8,184}, {8,185}, {52,185}, {52,186}, {8,186}, {52,187}, + {52,188}, {8,187}, {8,188}, {8,189}, {8,190}, {52,189}, {52,190}, {9,1}, + {53,97}, {9,2}, {53,98}, {9,3}, {53,99}, {9,4}, {9,5}, {53,100}, {9,6}, + {53,101}, {53,102}, {9,7}, {9,8}, {53,103}, {9,9}, {9,10}, {9,11}, + {53,104}, {9,12}, {9,13}, {9,14}, {9,15}, {9,16}, {9,17}, {9,18}, {53,105}, + {53,106}, {9,19}, {53,107}, {53,108}, {53,109}, {9,20}, {9,21}, {9,22}, + {9,23}, {9,24}, {9,25}, {53,110}, {9,26}, {9,33}, {9,34}, {53,111}, + {9,35}, {9,36}, {9,37}, {53,112}, {9,38}, {9,39}, {9,40}, {9,41}, {9,42}, + {9,43}, {9,44}, {9,45}, {9,46}, {9,47}, {9,48}, {53,113}, {53,114}, + {9,49}, {9,50}, {9,51}, {9,52}, {9,53}, {9,54}, {53,115}, {9,55}, {9,56}, + {9,57}, {53,116}, {9,58}, {9,65}, {9,66}, {9,67}, {9,68}, {9,69}, {9,70}, + {9,71}, {9,72}, {9,73}, {9,74}, {9,75}, {9,76}, {9,77}, {9,78}, {9,79}, + {9,80}, {9,81}, {9,82}, {9,83}, {9,84}, {9,85}, {9,86}, {53,117}, {53,118}, + {9,87}, {9,88}, {53,119}, {9,89}, {9,90}, {53,120}, {53,121}, {9,91}, + {53,122}, {9,92}, {53,123}, {9,93}, {9,94}, {9,95}, {53,124}, {53,125}, + {9,96}, {53,126}, {9,97}, {53,127}, {9,98}, {53,128}, {9,99}, {53,129}, + {9,100}, {9,101}, {53,130}, {9,102}, {9,103}, {9,104}, {53,131}, {9,105}, + {9,106}, {9,107}, {53,132}, {9,108}, {9,109}, {9,110}, {9,111}, {9,112}, + {9,113}, {9,114}, {9,115}, {9,116}, {9,117}, {9,118}, {9,119}, {9,120}, + {9,121}, {9,122}, {9,123}, {9,124}, {9,125}, {9,126}, {53,133}, {9,127}, + {9,128}, {9,129}, {9,130}, {9,131}, {9,132}, {9,133}, {9,134}, {9,135}, + {9,136}, {9,137}, {9,138}, {9,139}, {9,140}, {9,141}, {9,142}, {9,143}, + {9,144}, {9,145}, {53,134}, {9,146}, {9,147}, {9,148}, {9,149}, {9,150}, + {9,151}, {9,152}, {53,135}, {9,153}, {9,154}, {9,155}, {53,136}, {9,156}, + {9,157}, {9,158}, {53,137}, {9,159}, {9,160}, {9,161}, {9,162}, {9,163}, + {9,164}, {9,165}, {53,138}, {53,139}, {9,166}, {53,140}, {9,167}, {9,168}, + {9,169}, {9,170}, {9,171}, {9,172}, {9,173}, {9,174}, {53,141}, {9,175}, + {9,176}, {9,177}, {9,178}, {9,179}, {9,180}, {9,181}, {9,182}, {9,183}, + {9,184}, {9,185}, {9,186}, {9,187}, {9,188}, {9,189}, {9,190}, {10,1}, + {10,2}, {10,3}, {10,4}, {10,5}, {10,6}, {10,7}, {10,8}, {10,9}, {10,10}, + {10,11}, {53,142}, {53,143}, {10,12}, {10,13}, {53,144}, {10,14}, {10,15}, + {10,16}, {53,145}, {10,17}, {10,18}, {10,19}, {10,20}, {10,21}, {10,22}, + {10,23}, {53,146}, {53,147}, {10,24}, {53,148}, {10,25}, {53,149}, + {10,26}, {10,33}, {10,34}, {10,35}, {10,36}, {10,37}, {53,150}, {10,38}, + {10,39}, {10,40}, {10,41}, {10,42}, {10,43}, {10,44}, {10,45}, {10,46}, + {10,47}, {10,48}, {10,49}, {10,50}, {10,51}, {10,52}, {10,53}, {10,54}, + {10,55}, {10,56}, {53,151}, {10,57}, {10,58}, {10,65}, {10,66}, {10,67}, + {10,68}, {10,69}, {53,152}, {10,70}, {10,71}, {10,72}, {10,73}, {10,74}, + {10,75}, {10,76}, {10,77}, {10,78}, {10,79}, {10,80}, {10,81}, {10,82}, + {10,83}, {10,84}, {10,85}, {10,86}, {10,87}, {10,88}, {10,89}, {53,153}, + {10,90}, {10,91}, {10,92}, {10,93}, {10,94}, {10,95}, {53,154}, {10,96}, + {10,97}, {10,98}, {53,155}, {10,99}, {10,100}, {10,101}, {53,156}, + {10,102}, {10,103}, {10,104}, {10,105}, {10,106}, {10,107}, {10,108}, + {10,109}, {53,157}, {10,110}, {53,158}, {10,111}, {53,159}, {10,112}, + {10,113}, {10,114}, {10,115}, {10,116}, {10,117}, {53,160}, {10,118}, + {10,119}, {10,120}, {53,161}, {10,121}, {10,122}, {10,123}, {53,162}, + {10,124}, {10,125}, {10,126}, {10,127}, {10,128}, {10,129}, {10,130}, + {53,163}, {10,131}, {10,132}, {10,133}, {10,134}, {53,164}, {10,135}, + {10,136}, {10,137}, {10,138}, {10,139}, {10,140}, {53,165}, {53,166}, + {10,141}, {10,142}, {53,167}, {10,143}, {10,144}, {53,168}, {53,169}, + {10,145}, {53,170}, {10,146}, {10,147}, {10,148}, {10,149}, {10,150}, + {53,171}, {53,172}, {10,151}, {53,173}, {10,152}, {53,174}, {10,153}, + {10,154}, {10,155}, {10,156}, {10,157}, {10,158}, {53,175}, {10,159}, + {10,160}, {10,161}, {10,162}, {10,163}, {10,164}, {10,165}, {10,166}, + {10,167}, {10,168}, {10,169}, {10,170}, {10,171}, {10,172}, {10,173}, + {10,174}, {10,175}, {10,176}, {10,177}, {10,178}, {10,179}, {10,180}, + {10,181}, {10,182}, {10,183}, {10,184}, {10,185}, {53,176}, {53,177}, + {10,186}, {10,187}, {53,178}, {10,188}, {10,189}, {53,179}, {53,180}, + {10,190}, {11,1}, {11,2}, {11,3}, {11,4}, {11,5}, {11,6}, {53,181}, + {53,182}, {11,7}, {53,183}, {53,184}, {53,185}, {53,186}, {11,8}, {11,9}, + {11,10}, {11,11}, {11,12}, {53,187}, {53,188}, {11,13}, {11,14}, {53,189}, + {11,15}, {11,16}, {11,17}, {53,190}, {11,18}, {11,19}, {11,20}, {11,21}, + {11,22}, {11,23}, {11,24}, {54,97}, {54,98}, {11,25}, {54,99}, {54,100}, + {54,101}, {11,26}, {11,33}, {11,34}, {11,35}, {11,36}, {54,102}, {54,103}, + {54,104}, {11,37}, {11,38}, {54,105}, {11,39}, {11,40}, {11,41}, {54,106}, + {11,42}, {11,43}, {11,44}, {11,45}, {11,46}, {11,47}, {11,48}, {54,107}, + {54,108}, {11,49}, {54,109}, {54,110}, {54,111}, {11,50}, {11,51}, + {11,52}, {11,53}, {11,54}, {11,55}, {11,56}, {11,57}, {11,58}, {11,65}, + {11,66}, {11,67}, {11,68}, {11,69}, {11,70}, {11,71}, {11,72}, {11,73}, + {11,74}, {11,75}, {11,76}, {11,77}, {11,78}, {11,79}, {11,80}, {11,81}, + {11,82}, {11,83}, {11,84}, {11,85}, {11,86}, {11,87}, {11,88}, {11,89}, + {11,90}, {11,91}, {11,92}, {11,93}, {11,94}, {11,95}, {11,96}, {11,97}, + {11,98}, {11,99}, {11,100}, {11,101}, {11,102}, {11,103}, {11,104}, + {11,105}, {11,106}, {11,107}, {11,108}, {11,109}, {11,110}, {11,111}, + {11,112}, {11,113}, {11,114}, {11,115}, {11,116}, {11,117}, {54,112}, + {54,113}, {11,118}, {11,119}, {54,114}, {11,120}, {11,121}, {11,122}, + {54,115}, {11,123}, {54,116}, {54,117}, {11,124}, {11,125}, {11,126}, + {11,127}, {54,118}, {54,119}, {11,128}, {54,120}, {54,121}, {54,122}, + {11,129}, {11,130}, {11,131}, {11,132}, {11,133}, {54,123}, {54,124}, + {54,125}, {11,134}, {11,135}, {54,126}, {11,136}, {11,137}, {11,138}, + {54,127}, {11,139}, {11,140}, {11,141}, {11,142}, {11,143}, {11,144}, + {11,145}, {54,128}, {54,129}, {11,146}, {54,130}, {54,131}, {54,132}, + {11,147}, {11,148}, {11,149}, {11,150}, {11,151}, {11,152}, {54,133}, + {11,153}, {11,154}, {11,155}, {11,156}, {11,157}, {11,158}, {11,159}, + {11,160}, {11,161}, {11,162}, {11,163}, {11,164}, {11,165}, {11,166}, + {11,167}, {11,168}, {11,169}, {11,170}, {11,171}, {54,134}, {11,172}, + {11,173}, {11,174}, {11,175}, {11,176}, {11,177}, {11,178}, {11,179}, + {11,180}, {11,181}, {11,182}, {11,183}, {11,184}, {11,185}, {11,186}, + {11,187}, {11,188}, {11,189}, {11,190}, {12,1}, {12,2}, {12,3}, {12,4}, + {12,5}, {12,6}, {12,7}, {12,8}, {12,9}, {12,10}, {12,11}, {12,12}, + {12,13}, {12,14}, {12,15}, {12,16}, {54,135}, {54,136}, {12,17}, {12,18}, + {54,137}, {12,19}, {12,20}, {12,21}, {54,138}, {12,22}, {12,23}, {12,24}, + {12,25}, {12,26}, {12,33}, {12,34}, {12,35}, {12,36}, {12,37}, {12,38}, + {12,39}, {54,139}, {12,40}, {12,41}, {12,42}, {12,43}, {12,44}, {12,45}, + {54,140}, {12,46}, {12,47}, {12,48}, {12,49}, {12,50}, {12,51}, {12,52}, + {54,141}, {12,53}, {12,54}, {12,55}, {12,56}, {12,57}, {12,58}, {12,65}, + {12,66}, {12,67}, {12,68}, {12,69}, {12,70}, {12,71}, {12,72}, {12,73}, + {12,74}, {12,75}, {12,76}, {12,77}, {54,142}, {12,78}, {12,79}, {12,80}, + {12,81}, {12,82}, {12,83}, {12,84}, {12,85}, {12,86}, {12,87}, {12,88}, + {12,89}, {12,90}, {12,91}, {12,92}, {12,93}, {12,94}, {12,95}, {12,96}, + {12,97}, {12,98}, {12,99}, {12,100}, {12,101}, {12,102}, {12,103}, + {12,104}, {54,143}, {12,105}, {12,106}, {12,107}, {54,144}, {12,108}, + {12,109}, {12,110}, {12,111}, {12,112}, {12,113}, {12,114}, {12,115}, + {12,116}, {12,117}, {12,118}, {12,119}, {12,120}, {12,121}, {12,122}, + {12,123}, {12,124}, {12,125}, {12,126}, {12,127}, {12,128}, {12,129}, + {12,130}, {12,131}, {12,132}, {12,133}, {12,134}, {12,135}, {12,136}, + {12,137}, {12,138}, {12,139}, {12,140}, {12,141}, {12,142}, {12,143}, + {12,144}, {12,145}, {12,146}, {12,147}, {12,148}, {12,149}, {12,150}, + {12,151}, {12,152}, {12,153}, {12,154}, {12,155}, {12,156}, {12,157}, + {12,158}, {54,145}, {54,146}, {12,159}, {12,160}, {54,147}, {12,161}, + {12,162}, {12,163}, {54,148}, {12,164}, {12,165}, {12,166}, {12,167}, + {12,168}, {12,169}, {54,149}, {54,150}, {12,170}, {12,171}, {12,172}, + {12,173}, {54,151}, {12,174}, {12,175}, {12,176}, {12,177}, {12,178}, + {12,179}, {12,180}, {12,181}, {12,182}, {12,183}, {12,184}, {12,185}, + {12,186}, {12,187}, {12,188}, {12,189}, {12,190}, {13,1}, {13,2}, {13,3}, + {13,4}, {13,5}, {13,6}, {13,7}, {13,8}, {13,9}, {13,10}, {13,11}, {13,12}, + {13,13}, {13,14}, {13,15}, {13,16}, {13,17}, {54,152}, {13,18}, {13,19}, + {13,20}, {13,21}, {13,22}, {13,23}, {13,24}, {13,25}, {13,26}, {13,33}, + {13,34}, {13,35}, {13,36}, {13,37}, {13,38}, {13,39}, {13,40}, {13,41}, + {13,42}, {13,43}, {13,44}, {13,45}, {13,46}, {13,47}, {13,48}, {13,49}, + {13,50}, {54,153}, {13,51}, {13,52}, {13,53}, {54,154}, {13,54}, {13,55}, + {13,56}, {54,155}, {13,57}, {13,58}, {13,65}, {13,66}, {13,67}, {13,68}, + {13,69}, {54,156}, {54,157}, {13,70}, {13,71}, {13,72}, {54,158}, {13,73}, + {13,74}, {13,75}, {13,76}, {13,77}, {13,78}, {13,79}, {13,80}, {13,81}, + {13,82}, {13,83}, {13,84}, {13,85}, {13,86}, {13,87}, {13,88}, {13,89}, + {13,90}, {13,91}, {13,92}, {13,93}, {13,94}, {13,95}, {13,96}, {13,97}, + {13,98}, {13,99}, {13,100}, {13,101}, {13,102}, {13,103}, {13,104}, + {13,105}, {13,106}, {54,159}, {54,160}, {13,107}, {13,108}, {54,161}, + {13,109}, {13,110}, {54,162}, {54,163}, {13,111}, {13,112}, {13,113}, + {13,114}, {13,115}, {13,116}, {13,117}, {54,164}, {54,165}, {13,118}, + {54,166}, {13,119}, {13,120}, {13,121}, {13,122}, {13,123}, {13,124}, + {13,125}, {13,126}, {54,167}, {13,127}, {13,128}, {13,129}, {54,168}, + {13,130}, {13,131}, {13,132}, {54,169}, {13,133}, {13,134}, {13,135}, + {13,136}, {13,137}, {13,138}, {13,139}, {54,170}, {54,171}, {13,140}, + {13,141}, {13,142}, {13,143}, {13,144}, {13,145}, {13,146}, {13,147}, + {13,148}, {13,149}, {54,172}, {13,150}, {13,151}, {13,152}, {54,173}, + {13,153}, {13,154}, {13,155}, {54,174}, {13,156}, {13,157}, {13,158}, + {13,159}, {13,160}, {13,161}, {13,162}, {54,175}, {54,176}, {13,163}, + {54,177}, {13,164}, {54,178}, {13,165}, {13,166}, {13,167}, {13,168}, + {13,169}, {13,170}, {54,179}, {54,180}, {13,171}, {13,172}, {54,181}, + {13,173}, {13,174}, {13,175}, {54,182}, {13,176}, {13,177}, {13,178}, + {13,179}, {13,180}, {13,181}, {13,182}, {54,183}, {54,184}, {13,183}, + {54,185}, {54,186}, {54,187}, {54,188}, {13,184}, {13,185}, {13,186}, + {54,189}, {54,190}, {55,97}, {55,98}, {13,187}, {13,188}, {55,99}, + {13,189}, {13,190}, {14,1}, {55,100}, {14,2}, {14,3}, {14,4}, {14,5}, + {14,6}, {14,7}, {14,8}, {55,101}, {55,102}, {14,9}, {55,103}, {55,104}, + {55,105}, {14,10}, {14,11}, {14,12}, {14,13}, {14,14}, {14,15}, {55,106}, + {55,107}, {14,16}, {14,17}, {55,108}, {14,18}, {14,19}, {14,20}, {14,21}, + {14,22}, {14,23}, {14,24}, {14,25}, {14,26}, {14,33}, {14,34}, {14,35}, + {14,36}, {14,37}, {55,109}, {14,38}, {55,110}, {14,39}, {14,40}, {14,41}, + {14,42}, {14,43}, {14,44}, {14,45}, {14,46}, {14,47}, {14,48}, {14,49}, + {14,50}, {14,51}, {14,52}, {14,53}, {14,54}, {14,55}, {14,56}, {14,57}, + {14,58}, {14,65}, {14,66}, {14,67}, {14,68}, {14,69}, {14,70}, {14,71}, + {14,72}, {14,73}, {14,74}, {14,75}, {14,76}, {14,77}, {14,78}, {55,111}, + {55,112}, {14,79}, {14,80}, {55,113}, {14,81}, {14,82}, {14,83}, {55,114}, + {14,84}, {14,85}, {14,86}, {14,87}, {14,88}, {14,89}, {14,90}, {55,115}, + {55,116}, {14,91}, {55,117}, {55,118}, {55,119}, {14,92}, {14,93}, + {14,94}, {14,95}, {14,96}, {55,120}, {55,121}, {55,122}, {14,97}, {14,98}, + {55,123}, {14,99}, {14,100}, {14,101}, {55,124}, {14,102}, {14,103}, + {14,104}, {14,105}, {14,106}, {14,107}, {14,108}, {55,125}, {55,126}, + {14,109}, {55,127}, {14,110}, {55,128}, {14,111}, {14,112}, {14,113}, + {14,114}, {14,115}, {14,116}, {55,129}, {55,130}, {14,117}, {14,118}, + {55,131}, {14,119}, {14,120}, {14,121}, {55,132}, {14,122}, {14,123}, + {14,124}, {14,125}, {14,126}, {14,127}, {14,128}, {55,133}, {55,134}, + {14,129}, {55,135}, {55,136}, {55,137}, {14,130}, {14,131}, {14,132}, + {14,133}, {14,134}, {14,135}, {55,138}, {14,136}, {14,137}, {14,138}, + {55,139}, {14,139}, {14,140}, {14,141}, {14,142}, {14,143}, {14,144}, + {14,145}, {14,146}, {14,147}, {14,148}, {14,149}, {14,150}, {55,140}, + {14,151}, {55,141}, {14,152}, {14,153}, {14,154}, {14,155}, {14,156}, + {14,157}, {14,158}, {14,159}, {55,142}, {55,143}, {14,160}, {14,161}, + {55,144}, {14,162}, {14,163}, {14,164}, {55,145}, {14,165}, {14,166}, + {14,167}, {14,168}, {14,169}, {14,170}, {14,171}, {55,146}, {55,147}, + {14,172}, {55,148}, {14,173}, {55,149}, {14,174}, {14,175}, {14,176}, + {14,177}, {14,178}, {14,179}, {55,150}, {14,180}, {14,181}, {14,182}, + {55,151}, {14,183}, {14,184}, {14,185}, {14,186}, {14,187}, {14,188}, + {14,189}, {14,190}, {15,1}, {15,2}, {15,3}, {15,4}, {15,5}, {15,6}, + {15,7}, {15,8}, {55,152}, {15,9}, {15,10}, {15,11}, {15,12}, {15,13}, + {15,14}, {15,15}, {15,16}, {15,17}, {15,18}, {15,19}, {15,20}, {15,21}, + {15,22}, {15,23}, {15,24}, {15,25}, {15,26}, {15,33}, {15,34}, {15,35}, + {15,36}, {15,37}, {15,38}, {15,39}, {15,40}, {55,153}, {15,41}, {15,42}, + {15,43}, {15,44}, {15,45}, {15,46}, {15,47}, {55,154}, {15,48}, {15,49}, + {15,50}, {55,155}, {15,51}, {15,52}, {15,53}, {55,156}, {15,54}, {15,55}, + {15,56}, {15,57}, {15,58}, {15,65}, {15,66}, {55,157}, {55,158}, {15,67}, + {55,159}, {15,68}, {55,160}, {15,69}, {15,70}, {15,71}, {15,72}, {15,73}, + {15,74}, {55,161}, {15,75}, {15,76}, {15,77}, {55,162}, {15,78}, {15,79}, + {15,80}, {55,163}, {15,81}, {15,82}, {15,83}, {15,84}, {15,85}, {15,86}, + {15,87}, {15,88}, {55,164}, {15,89}, {55,165}, {15,90}, {55,166}, {15,91}, + {15,92}, {15,93}, {15,94}, {15,95}, {15,96}, {55,167}, {55,168}, {15,97}, + {15,98}, {55,169}, {15,99}, {15,100}, {15,101}, {55,170}, {15,102}, + {15,103}, {15,104}, {15,105}, {15,106}, {15,107}, {15,108}, {55,171}, + {55,172}, {15,109}, {55,173}, {15,110}, {55,174}, {15,111}, {15,112}, + {15,113}, {15,114}, {15,115}, {15,116}, {55,175}, {15,117}, {15,118}, + {15,119}, {15,120}, {15,121}, {15,122}, {15,123}, {15,124}, {15,125}, + {15,126}, {15,127}, {15,128}, {15,129}, {15,130}, {15,131}, {15,132}, + {15,133}, {15,134}, {15,135}, {55,176}, {15,136}, {15,137}, {15,138}, + {15,139}, {15,140}, {15,141}, {15,142}, {55,177}, {15,143}, {15,144}, + {15,145}, {15,146}, {15,147}, {15,148}, {15,149}, {15,150}, {15,151}, + {15,152}, {15,153}, {15,154}, {15,155}, {15,156}, {15,157}, {15,158}, + {15,159}, {15,160}, {15,161}, {15,162}, {15,163}, {15,164}, {15,165}, + {15,166}, {15,167}, {15,168}, {15,169}, {55,178}, {55,179}, {15,170}, + {15,171}, {55,180}, {15,172}, {15,173}, {15,174}, {55,181}, {15,175}, + {15,176}, {15,177}, {15,178}, {15,179}, {15,180}, {15,181}, {55,182}, + {15,182}, {15,183}, {55,183}, {15,184}, {55,184}, {15,185}, {15,186}, + {15,187}, {15,188}, {15,189}, {15,190}, {55,185}, {55,186}, {16,1}, + {16,2}, {55,187}, {16,3}, {16,4}, {16,5}, {55,188}, {16,6}, {16,7}, + {16,8}, {16,9}, {16,10}, {16,11}, {16,12}, {55,189}, {55,190}, {16,13}, + {56,97}, {16,14}, {56,98}, {16,15}, {16,16}, {16,17}, {16,18}, {16,19}, + {16,20}, {56,99}, {56,100}, {16,21}, {16,22}, {56,101}, {16,23}, {16,24}, + {16,25}, {56,102}, {16,26}, {16,33}, {16,34}, {16,35}, {16,36}, {16,37}, + {16,38}, {56,103}, {56,104}, {16,39}, {56,105}, {16,40}, {56,106}, + {56,107}, {16,41}, {16,42}, {56,108}, {56,109}, {16,43}, {16,44}, {16,45}, + {16,46}, {16,47}, {16,48}, {16,49}, {16,50}, {16,51}, {16,52}, {16,53}, + {16,54}, {16,55}, {16,56}, {16,57}, {16,58}, {16,65}, {16,66}, {16,67}, + {16,68}, {16,69}, {16,70}, {16,71}, {16,72}, {16,73}, {16,74}, {16,75}, + {16,76}, {16,77}, {56,110}, {56,111}, {16,78}, {16,79}, {56,112}, {16,80}, + {16,81}, {16,82}, {56,113}, {16,83}, {16,84}, {16,85}, {16,86}, {16,87}, + {16,88}, {16,89}, {56,114}, {56,115}, {16,90}, {56,116}, {16,91}, {56,117}, + {16,92}, {16,93}, {16,94}, {16,95}, {16,96}, {16,97}, {56,118}, {56,119}, + {16,98}, {16,99}, {56,120}, {16,100}, {56,121}, {56,122}, {56,123}, + {56,124}, {56,125}, {16,101}, {16,102}, {16,103}, {16,104}, {16,105}, + {56,126}, {56,127}, {16,106}, {56,128}, {16,107}, {56,129}, {56,130}, + {16,108}, {16,109}, {56,131}, {16,110}, {56,132}, {56,133}, {56,134}, + {16,111}, {16,112}, {56,135}, {16,113}, {16,114}, {16,115}, {56,136}, + {16,116}, {16,117}, {16,118}, {16,119}, {16,120}, {16,121}, {16,122}, + {56,137}, {56,138}, {16,123}, {56,139}, {56,140}, {56,141}, {56,142}, + {16,124}, {16,125}, {16,126}, {16,127}, {16,128}, {56,143}, {56,144}, + {16,129}, {16,130}, {16,131}, {16,132}, {16,133}, {16,134}, {56,145}, + {16,135}, {16,136}, {16,137}, {16,138}, {16,139}, {16,140}, {16,141}, + {16,142}, {16,143}, {16,144}, {16,145}, {16,146}, {56,146}, {16,147}, + {16,148}, {16,149}, {16,150}, {16,151}, {16,152}, {16,153}, {16,154}, + {16,155}, {16,156}, {16,157}, {16,158}, {16,159}, {16,160}, {16,161}, + {16,162}, {16,163}, {16,164}, {16,165}, {16,166}, {16,167}, {16,168}, + {16,169}, {16,170}, {16,171}, {16,172}, {16,173}, {16,174}, {16,175}, + {16,176}, {16,177}, {16,178}, {16,179}, {16,180}, {56,147}, {56,148}, + {16,181}, {16,182}, {56,149}, {16,183}, {16,184}, {16,185}, {56,150}, + {16,186}, {56,151}, {16,187}, {16,188}, {16,189}, {16,190}, {17,1}, + {56,152}, {56,153}, {17,2}, {56,154}, {17,3}, {56,155}, {56,156}, {17,4}, + {17,5}, {17,6}, {17,7}, {56,157}, {56,158}, {56,159}, {17,8}, {17,9}, + {56,160}, {17,10}, {17,11}, {17,12}, {56,161}, {17,13}, {17,14}, {17,15}, + {17,16}, {17,17}, {17,18}, {17,19}, {56,162}, {56,163}, {17,20}, {56,164}, + {56,165}, {56,166}, {17,21}, {17,22}, {17,23}, {17,24}, {17,25}, {17,26}, + {56,167}, {56,168}, {17,33}, {17,34}, {56,169}, {17,35}, {17,36}, {17,37}, + {56,170}, {17,38}, {17,39}, {17,40}, {17,41}, {17,42}, {17,43}, {17,44}, + {17,45}, {17,46}, {17,47}, {56,171}, {56,172}, {56,173}, {17,48}, {56,174}, + {17,49}, {17,50}, {17,51}, {17,52}, {56,175}, {17,53}, {17,54}, {17,55}, + {17,56}, {17,57}, {17,58}, {17,65}, {17,66}, {17,67}, {17,68}, {17,69}, + {17,70}, {17,71}, {17,72}, {17,73}, {17,74}, {17,75}, {17,76}, {17,77}, + {17,78}, {17,79}, {17,80}, {17,81}, {17,82}, {17,83}, {17,84}, {17,85}, + {56,176}, {56,177}, {17,86}, {56,178}, {56,179}, {17,87}, {17,88}, + {17,89}, {56,180}, {17,90}, {56,181}, {17,91}, {17,92}, {17,93}, {17,94}, + {17,95}, {56,182}, {56,183}, {17,96}, {56,184}, {17,97}, {56,185}, + {17,98}, {17,99}, {17,100}, {17,101}, {17,102}, {17,103}, {56,186}, + {17,104}, {17,105}, {17,106}, {56,187}, {17,107}, {17,108}, {17,109}, + {17,110}, {17,111}, {17,112}, {17,113}, {17,114}, {17,115}, {17,116}, + {17,117}, {17,118}, {17,119}, {17,120}, {17,121}, {56,188}, {56,189}, + {17,122}, {17,123}, {17,124}, {17,125}, {17,126}, {17,127}, {17,128}, + {17,129}, {17,130}, {17,131}, {17,132}, {17,133}, {17,134}, {17,135}, + {17,136}, {17,137}, {17,138}, {17,139}, {17,140}, {17,141}, {17,142}, + {17,143}, {17,144}, {17,145}, {17,146}, {17,147}, {17,148}, {17,149}, + {17,150}, {17,151}, {17,152}, {17,153}, {17,154}, {17,155}, {56,190}, + {17,156}, {17,157}, {17,158}, {57,97}, {17,159}, {17,160}, {17,161}, + {57,98}, {17,162}, {17,163}, {17,164}, {17,165}, {17,166}, {17,167}, + {17,168}, {17,169}, {57,99}, {17,170}, {57,100}, {17,171}, {57,101}, + {17,172}, {17,173}, {17,174}, {17,175}, {17,176}, {17,177}, {57,102}, + {17,178}, {17,179}, {17,180}, {57,103}, {17,181}, {17,182}, {17,183}, + {57,104}, {17,184}, {17,185}, {17,186}, {17,187}, {17,188}, {17,189}, + {17,190}, {18,1}, {57,105}, {18,2}, {57,106}, {18,3}, {18,4}, {18,5}, + {18,6}, {18,7}, {18,8}, {18,9}, {18,10}, {57,107}, {57,108}, {57,109}, + {18,11}, {57,110}, {18,12}, {18,13}, {57,111}, {57,112}, {57,113}, + {57,114}, {18,14}, {18,15}, {18,16}, {18,17}, {18,18}, {57,115}, {57,116}, + {18,19}, {57,117}, {18,20}, {57,118}, {18,21}, {18,22}, {18,23}, {57,119}, + {18,24}, {57,120}, {57,121}, {18,25}, {18,26}, {18,33}, {57,122}, {18,34}, + {18,35}, {18,36}, {57,123}, {18,37}, {18,38}, {18,39}, {18,40}, {18,41}, + {18,42}, {18,43}, {18,44}, {57,124}, {18,45}, {57,125}, {18,46}, {18,47}, + {18,48}, {18,49}, {18,50}, {18,51}, {18,52}, {18,53}, {57,126}, {18,54}, + {18,55}, {18,56}, {18,57}, {18,58}, {18,65}, {18,66}, {18,67}, {18,68}, + {18,69}, {18,70}, {18,71}, {18,72}, {18,73}, {18,74}, {18,75}, {18,76}, + {18,77}, {18,78}, {18,79}, {18,80}, {18,81}, {18,82}, {18,83}, {18,84}, + {18,85}, {18,86}, {57,127}, {18,87}, {18,88}, {18,89}, {57,128}, {18,90}, + {18,91}, {18,92}, {57,129}, {18,93}, {18,94}, {18,95}, {18,96}, {18,97}, + {18,98}, {18,99}, {18,100}, {18,101}, {18,102}, {18,103}, {18,104}, + {18,105}, {18,106}, {18,107}, {18,108}, {18,109}, {18,110}, {18,111}, + {57,130}, {18,112}, {18,113}, {18,114}, {57,131}, {18,115}, {18,116}, + {18,117}, {57,132}, {18,118}, {18,119}, {18,120}, {18,121}, {18,122}, + {18,123}, {18,124}, {57,133}, {18,125}, {18,126}, {57,134}, {18,127}, + {18,128}, {18,129}, {18,130}, {18,131}, {18,132}, {18,133}, {18,134}, + {57,135}, {18,135}, {18,136}, {18,137}, {57,136}, {18,138}, {18,139}, + {18,140}, {57,137}, {18,141}, {18,142}, {18,143}, {18,144}, {18,145}, + {18,146}, {18,147}, {57,138}, {18,148}, {18,149}, {57,139}, {18,150}, + {18,151}, {18,152}, {18,153}, {18,154}, {18,155}, {18,156}, {18,157}, + {18,158}, {18,159}, {18,160}, {18,161}, {18,162}, {18,163}, {18,164}, + {18,165}, {18,166}, {18,167}, {18,168}, {18,169}, {18,170}, {18,171}, + {18,172}, {18,173}, {18,174}, {18,175}, {18,176}, {18,177}, {18,178}, + {18,179}, {18,180}, {18,181}, {18,182}, {18,183}, {18,184}, {18,185}, + {57,140}, {57,141}, {18,186}, {18,187}, {57,142}, {18,188}, {18,189}, + {57,143}, {57,144}, {18,190}, {57,145}, {19,1}, {19,2}, {19,3}, {19,4}, + {19,5}, {57,146}, {57,147}, {19,6}, {57,148}, {57,149}, {57,150}, {19,7}, + {57,151}, {19,8}, {57,152}, {19,9}, {19,10}, {57,153}, {57,154}, {57,155}, + {57,156}, {57,157}, {19,11}, {19,12}, {57,158}, {57,159}, {57,160}, + {57,161}, {57,162}, {19,13}, {19,14}, {19,15}, {19,16}, {57,163}, {57,164}, + {19,17}, {57,165}, {19,18}, {57,166}, {19,19}, {19,20}, {19,21}, {57,167}, + {19,22}, {19,23}, {57,168}, {57,169}, {19,24}, {19,25}, {57,170}, {19,26}, + {19,33}, {19,34}, {57,171}, {19,35}, {19,36}, {19,37}, {19,38}, {19,39}, + {19,40}, {19,41}, {57,172}, {57,173}, {19,42}, {57,174}, {57,175}, + {57,176}, {19,43}, {19,44}, {19,45}, {57,177}, {19,46}, {19,47}, {57,178}, + {57,179}, {19,48}, {19,49}, {57,180}, {19,50}, {19,51}, {19,52}, {19,53}, + {19,54}, {19,55}, {19,56}, {19,57}, {19,58}, {19,65}, {19,66}, {19,67}, + {57,181}, {19,68}, {19,69}, {19,70}, {19,71}, {19,72}, {19,73}, {19,74}, + {19,75}, {19,76}, {19,77}, {19,78}, {19,79}, {19,80}, {19,81}, {19,82}, + {19,83}, {19,84}, {19,85}, {19,86}, {19,87}, {19,88}, {19,89}, {19,90}, + {19,91}, {19,92}, {19,93}, {19,94}, {19,95}, {19,96}, {19,97}, {19,98}, + {19,99}, {19,100}, {19,101}, {19,102}, {19,103}, {19,104}, {19,105}, + {57,182}, {57,183}, {19,106}, {19,107}, {57,184}, {19,108}, {19,109}, + {57,185}, {57,186}, {19,110}, {57,187}, {19,111}, {19,112}, {19,113}, + {19,114}, {19,115}, {57,188}, {57,189}, {19,116}, {57,190}, {19,117}, + {58,97}, {58,98}, {19,118}, {19,119}, {19,120}, {19,121}, {19,122}, + {58,99}, {58,100}, {19,123}, {19,124}, {58,101}, {19,125}, {19,126}, + {58,102}, {58,103}, {19,127}, {19,128}, {19,129}, {19,130}, {19,131}, + {19,132}, {19,133}, {58,104}, {58,105}, {19,134}, {58,106}, {58,107}, + {58,108}, {19,135}, {19,136}, {19,137}, {19,138}, {19,139}, {19,140}, + {58,109}, {58,110}, {19,141}, {19,142}, {58,111}, {19,143}, {19,144}, + {19,145}, {58,112}, {19,146}, {19,147}, {19,148}, {19,149}, {19,150}, + {19,151}, {19,152}, {19,153}, {58,113}, {19,154}, {58,114}, {58,115}, + {58,116}, {19,155}, {19,156}, {19,157}, {58,117}, {19,158}, {19,159}, + {58,118}, {19,160}, {19,161}, {19,162}, {58,119}, {19,163}, {19,164}, + {19,165}, {19,166}, {19,167}, {19,168}, {19,169}, {19,170}, {19,171}, + {19,172}, {19,173}, {19,174}, {19,175}, {19,176}, {19,177}, {19,178}, + {19,179}, {19,180}, {19,181}, {19,182}, {19,183}, {19,184}, {19,185}, + {58,120}, {58,121}, {58,122}, {19,186}, {58,123}, {19,187}, {19,188}, + {19,189}, {58,124}, {19,190}, {20,1}, {20,2}, {20,3}, {20,4}, {20,5}, + {20,6}, {58,125}, {58,126}, {20,7}, {58,127}, {20,8}, {58,128}, {20,9}, + {20,10}, {20,11}, {20,12}, {20,13}, {20,14}, {58,129}, {20,15}, {20,16}, + {20,17}, {58,130}, {20,18}, {20,19}, {20,20}, {20,21}, {20,22}, {20,23}, + {20,24}, {20,25}, {20,26}, {20,33}, {20,34}, {20,35}, {20,36}, {20,37}, + {20,38}, {58,131}, {20,39}, {20,40}, {20,41}, {20,42}, {20,43}, {20,44}, + {20,45}, {58,132}, {20,46}, {20,47}, {20,48}, {20,49}, {20,50}, {20,51}, + {20,52}, {20,53}, {20,54}, {20,55}, {20,56}, {20,57}, {20,58}, {20,65}, + {20,66}, {20,67}, {20,68}, {20,69}, {20,70}, {58,133}, {20,71}, {20,72}, + {20,73}, {20,74}, {20,75}, {20,76}, {20,77}, {58,134}, {58,135}, {20,78}, + {20,79}, {58,136}, {20,80}, {20,81}, {20,82}, {58,137}, {20,83}, {20,84}, + {20,85}, {20,86}, {20,87}, {20,88}, {20,89}, {58,138}, {58,139}, {20,90}, + {20,91}, {20,92}, {20,93}, {20,94}, {20,95}, {20,96}, {20,97}, {20,98}, + {20,99}, {58,140}, {20,100}, {20,101}, {20,102}, {58,141}, {20,103}, + {20,104}, {20,105}, {20,106}, {20,107}, {20,108}, {20,109}, {20,110}, + {20,111}, {20,112}, {20,113}, {20,114}, {20,115}, {20,116}, {20,117}, + {20,118}, {20,119}, {20,120}, {20,121}, {20,122}, {20,123}, {20,124}, + {20,125}, {58,142}, {58,143}, {20,126}, {20,127}, {58,144}, {20,128}, + {20,129}, {58,145}, {58,146}, {58,147}, {58,148}, {20,130}, {20,131}, + {20,132}, {20,133}, {20,134}, {58,149}, {58,150}, {20,135}, {58,151}, + {20,136}, {58,152}, {20,137}, {20,138}, {20,139}, {58,153}, {58,154}, + {20,140}, {58,155}, {20,141}, {20,142}, {20,143}, {20,144}, {20,145}, + {20,146}, {20,147}, {58,156}, {20,148}, {20,149}, {20,150}, {20,151}, + {20,152}, {20,153}, {20,154}, {20,155}, {20,156}, {20,157}, {20,158}, + {58,157}, {20,159}, {20,160}, {20,161}, {20,162}, {20,163}, {20,164}, + {20,165}, {58,158}, {20,166}, {20,167}, {20,168}, {20,169}, {20,170}, + {20,171}, {20,172}, {20,173}, {20,174}, {20,175}, {20,176}, {20,177}, + {20,178}, {20,179}, {20,180}, {20,181}, {20,182}, {20,183}, {20,184}, + {20,185}, {20,186}, {20,187}, {20,188}, {20,189}, {20,190}, {21,1}, + {21,2}, {58,159}, {58,160}, {21,3}, {21,4}, {58,161}, {21,5}, {21,6}, + {21,7}, {58,162}, {21,8}, {21,9}, {21,10}, {21,11}, {21,12}, {21,13}, + {21,14}, {21,15}, {21,16}, {21,17}, {21,18}, {21,19}, {58,163}, {21,20}, + {21,21}, {21,22}, {21,23}, {21,24}, {21,25}, {58,164}, {21,26}, {21,33}, + {21,34}, {58,165}, {21,35}, {21,36}, {21,37}, {58,166}, {21,38}, {21,39}, + {21,40}, {21,41}, {21,42}, {21,43}, {21,44}, {58,167}, {21,45}, {21,46}, + {58,168}, {21,47}, {58,169}, {21,48}, {21,49}, {21,50}, {21,51}, {21,52}, + {21,53}, {58,170}, {58,171}, {21,54}, {21,55}, {58,172}, {21,56}, {21,57}, + {21,58}, {58,173}, {21,65}, {21,66}, {21,67}, {21,68}, {21,69}, {21,70}, + {21,71}, {58,174}, {58,175}, {21,72}, {58,176}, {21,73}, {21,74}, {21,75}, + {21,76}, {21,77}, {21,78}, {21,79}, {21,80}, {21,81}, {21,82}, {21,83}, + {21,84}, {21,85}, {21,86}, {21,87}, {21,88}, {21,89}, {21,90}, {21,91}, + {21,92}, {21,93}, {21,94}, {21,95}, {21,96}, {21,97}, {21,98}, {21,99}, + {21,100}, {21,101}, {21,102}, {21,103}, {21,104}, {21,105}, {21,106}, + {21,107}, {21,108}, {58,177}, {58,178}, {21,109}, {21,110}, {58,179}, + {21,111}, {21,112}, {21,113}, {58,180}, {21,114}, {58,181}, {21,115}, + {21,116}, {21,117}, {21,118}, {21,119}, {58,182}, {58,183}, {21,120}, + {58,184}, {21,121}, {58,185}, {58,186}, {58,187}, {21,122}, {21,123}, + {21,124}, {21,125}, {58,188}, {58,189}, {21,126}, {21,127}, {58,190}, + {21,128}, {21,129}, {21,130}, {59,97}, {21,131}, {59,98}, {21,132}, + {21,133}, {21,134}, {21,135}, {21,136}, {59,99}, {59,100}, {21,137}, + {59,101}, {59,102}, {59,103}, {21,138}, {21,139}, {21,140}, {21,141}, + {21,142}, {59,104}, {59,105}, {59,106}, {21,143}, {21,144}, {59,107}, + {21,145}, {21,146}, {21,147}, {59,108}, {21,148}, {21,149}, {21,150}, + {21,151}, {21,152}, {21,153}, {21,154}, {59,109}, {59,110}, {21,155}, + {59,111}, {59,112}, {59,113}, {21,156}, {21,157}, {21,158}, {21,159}, + {21,160}, {21,161}, {59,114}, {59,115}, {21,162}, {21,163}, {21,164}, + {21,165}, {21,166}, {21,167}, {21,168}, {21,169}, {21,170}, {21,171}, + {21,172}, {21,173}, {21,174}, {21,175}, {59,116}, {21,176}, {21,177}, + {21,178}, {21,179}, {21,180}, {21,181}, {21,182}, {21,183}, {21,184}, + {21,185}, {21,186}, {21,187}, {21,188}, {21,189}, {21,190}, {22,1}, + {22,2}, {22,3}, {22,4}, {22,5}, {22,6}, {22,7}, {22,8}, {22,9}, {22,10}, + {22,11}, {22,12}, {22,13}, {22,14}, {22,15}, {22,16}, {22,17}, {22,18}, + {22,19}, {22,20}, {22,21}, {22,22}, {22,23}, {22,24}, {59,117}, {59,118}, + {22,25}, {22,26}, {59,119}, {22,33}, {22,34}, {59,120}, {59,121}, {22,35}, + {22,36}, {22,37}, {22,38}, {22,39}, {22,40}, {22,41}, {59,122}, {22,42}, + {22,43}, {59,123}, {59,124}, {59,125}, {22,44}, {22,45}, {22,46}, {22,47}, + {22,48}, {22,49}, {59,126}, {22,50}, {22,51}, {22,52}, {22,53}, {22,54}, + {22,55}, {22,56}, {22,57}, {22,58}, {22,65}, {22,66}, {22,67}, {22,68}, + {22,69}, {22,70}, {22,71}, {22,72}, {22,73}, {22,74}, {22,75}, {59,127}, + {22,76}, {22,77}, {22,78}, {22,79}, {22,80}, {22,81}, {59,128}, {59,129}, + {22,82}, {22,83}, {22,84}, {22,85}, {22,86}, {22,87}, {22,88}, {22,89}, + {22,90}, {22,91}, {22,92}, {22,93}, {22,94}, {22,95}, {59,130}, {59,131}, + {22,96}, {59,132}, {59,133}, {59,134}, {22,97}, {22,98}, {22,99}, {22,100}, + {22,101}, {22,102}, {22,103}, {22,104}, {22,105}, {22,106}, {22,107}, + {22,108}, {22,109}, {22,110}, {22,111}, {22,112}, {22,113}, {22,114}, + {22,115}, {22,116}, {22,117}, {22,118}, {22,119}, {22,120}, {22,121}, + {22,122}, {22,123}, {22,124}, {22,125}, {22,126}, {22,127}, {22,128}, + {22,129}, {22,130}, {59,135}, {59,136}, {22,131}, {22,132}, {59,137}, + {22,133}, {22,134}, {22,135}, {59,138}, {22,136}, {22,137}, {22,138}, + {22,139}, {22,140}, {22,141}, {22,142}, {59,139}, {59,140}, {22,143}, + {22,144}, {22,145}, {59,141}, {22,146}, {22,147}, {22,148}, {22,149}, + {22,150}, {22,151}, {22,152}, {22,153}, {22,154}, {22,155}, {22,156}, + {22,157}, {22,158}, {22,159}, {22,160}, {22,161}, {22,162}, {22,163}, + {22,164}, {22,165}, {22,166}, {22,167}, {22,168}, {22,169}, {22,170}, + {22,171}, {22,172}, {22,173}, {22,174}, {22,175}, {22,176}, {22,177}, + {22,178}, {22,179}, {22,180}, {22,181}, {22,182}, {22,183}, {22,184}, + {22,185}, {22,186}, {22,187}, {22,188}, {22,189}, {22,190}, {23,1}, + {23,2}, {23,3}, {23,4}, {23,5}, {23,6}, {23,7}, {23,8}, {23,9}, {23,10}, + {23,11}, {23,12}, {23,13}, {23,14}, {23,15}, {23,16}, {23,17}, {59,142}, + {23,18}, {23,19}, {23,20}, {23,21}, {23,22}, {23,23}, {23,24}, {23,25}, + {23,26}, {23,33}, {23,34}, {23,35}, {23,36}, {23,37}, {23,38}, {23,39}, + {23,40}, {23,41}, {23,42}, {23,43}, {23,44}, {23,45}, {23,46}, {23,47}, + {23,48}, {23,49}, {23,50}, {59,143}, {23,51}, {23,52}, {23,53}, {23,54}, + {23,55}, {23,56}, {23,57}, {23,58}, {23,65}, {23,66}, {23,67}, {23,68}, + {23,69}, {23,70}, {23,71}, {23,72}, {23,73}, {23,74}, {23,75}, {23,76}, + {59,144}, {23,77}, {23,78}, {23,79}, {23,80}, {23,81}, {23,82}, {59,145}, + {59,146}, {23,83}, {23,84}, {59,147}, {23,85}, {23,86}, {23,87}, {59,148}, + {23,88}, {23,89}, {23,90}, {23,91}, {23,92}, {23,93}, {23,94}, {59,149}, + {23,95}, {23,96}, {59,150}, {23,97}, {59,151}, {23,98}, {23,99}, {23,100}, + {23,101}, {23,102}, {23,103}, {23,104}, {23,105}, {23,106}, {23,107}, + {23,108}, {23,109}, {23,110}, {23,111}, {23,112}, {23,113}, {23,114}, + {23,115}, {23,116}, {23,117}, {23,118}, {23,119}, {23,120}, {23,121}, + {23,122}, {23,123}, {23,124}, {23,125}, {23,126}, {23,127}, {23,128}, + {23,129}, {23,130}, {23,131}, {23,132}, {23,133}, {23,134}, {23,135}, + {23,136}, {23,137}, {23,138}, {23,139}, {23,140}, {23,141}, {23,142}, + {23,143}, {23,144}, {23,145}, {23,146}, {23,147}, {23,148}, {23,149}, + {23,150}, {23,151}, {23,152}, {23,153}, {23,154}, {23,155}, {23,156}, + {23,157}, {23,158}, {23,159}, {23,160}, {23,161}, {23,162}, {23,163}, + {23,164}, {23,165}, {23,166}, {23,167}, {23,168}, {23,169}, {23,170}, + {23,171}, {23,172}, {23,173}, {23,174}, {23,175}, {23,176}, {23,177}, + {23,178}, {23,179}, {23,180}, {23,181}, {23,182}, {23,183}, {23,184}, + {23,185}, {23,186}, {23,187}, {59,152}, {23,188}, {23,189}, {23,190}, + {24,1}, {24,2}, {24,3}, {24,4}, {24,5}, {24,6}, {24,7}, {24,8}, {24,9}, + {24,10}, {24,11}, {24,12}, {24,13}, {24,14}, {24,15}, {24,16}, {24,17}, + {59,153}, {24,18}, {24,19}, {24,20}, {24,21}, {24,22}, {24,23}, {59,154}, + {24,24}, {24,25}, {24,26}, {59,155}, {24,33}, {24,34}, {24,35}, {59,156}, + {24,36}, {24,37}, {24,38}, {24,39}, {24,40}, {24,41}, {24,42}, {59,157}, + {59,158}, {24,43}, {24,44}, {24,45}, {24,46}, {24,47}, {24,48}, {24,49}, + {24,50}, {24,51}, {24,52}, {24,53}, {24,54}, {24,55}, {24,56}, {24,57}, + {24,58}, {24,65}, {24,66}, {24,67}, {24,68}, {24,69}, {24,70}, {24,71}, + {24,72}, {24,73}, {24,74}, {24,75}, {24,76}, {24,77}, {24,78}, {24,79}, + {24,80}, {24,81}, {24,82}, {24,83}, {24,84}, {24,85}, {24,86}, {59,159}, + {59,160}, {24,87}, {24,88}, {59,161}, {24,89}, {24,90}, {24,91}, {59,162}, + {24,92}, {24,93}, {24,94}, {24,95}, {24,96}, {24,97}, {24,98}, {59,163}, + {59,164}, {24,99}, {59,165}, {24,100}, {59,166}, {24,101}, {24,102}, + {24,103}, {24,104}, {24,105}, {24,106}, {59,167}, {59,168}, {24,107}, + {59,169}, {59,170}, {24,108}, {24,109}, {59,171}, {59,172}, {59,173}, + {59,174}, {24,110}, {24,111}, {24,112}, {24,113}, {24,114}, {59,175}, + {59,176}, {24,115}, {59,177}, {59,178}, {59,179}, {24,116}, {24,117}, + {24,118}, {59,180}, {24,119}, {24,120}, {59,181}, {59,182}, {24,121}, + {24,122}, {59,183}, {24,123}, {24,124}, {24,125}, {59,184}, {24,126}, + {24,127}, {24,128}, {24,129}, {24,130}, {24,131}, {24,132}, {59,185}, + {59,186}, {24,133}, {59,187}, {59,188}, {59,189}, {24,134}, {24,135}, + {24,136}, {24,137}, {24,138}, {24,139}, {59,190}, {60,97}, {24,140}, + {24,141}, {60,98}, {24,142}, {24,143}, {24,144}, {60,99}, {24,145}, + {24,146}, {24,147}, {24,148}, {24,149}, {24,150}, {24,151}, {60,100}, + {60,101}, {24,152}, {60,102}, {24,153}, {60,103}, {24,154}, {24,155}, + {24,156}, {24,157}, {24,158}, {24,159}, {60,104}, {24,160}, {24,161}, + {24,162}, {60,105}, {24,163}, {24,164}, {24,165}, {60,106}, {24,166}, + {24,167}, {24,168}, {24,169}, {24,170}, {24,171}, {24,172}, {60,107}, + {24,173}, {24,174}, {24,175}, {24,176}, {60,108}, {24,177}, {24,178}, + {24,179}, {24,180}, {24,181}, {24,182}, {60,109}, {60,110}, {60,111}, + {60,112}, {60,113}, {24,183}, {24,184}, {60,114}, {60,115}, {24,185}, + {60,116}, {60,117}, {24,186}, {24,187}, {24,188}, {24,189}, {60,118}, + {60,119}, {24,190}, {60,120}, {60,121}, {60,122}, {25,1}, {25,2}, {25,3}, + {25,4}, {60,123}, {25,5}, {60,124}, {60,125}, {25,6}, {25,7}, {60,126}, + {25,8}, {25,9}, {25,10}, {60,127}, {25,11}, {25,12}, {25,13}, {25,14}, + {25,15}, {25,16}, {25,17}, {60,128}, {60,129}, {25,18}, {60,130}, {60,131}, + {60,132}, {25,19}, {25,20}, {25,21}, {25,22}, {25,23}, {25,24}, {60,133}, + {60,134}, {25,25}, {25,26}, {60,135}, {25,33}, {25,34}, {25,35}, {60,136}, + {25,36}, {25,37}, {25,38}, {25,39}, {25,40}, {25,41}, {25,42}, {60,137}, + {60,138}, {25,43}, {60,139}, {60,140}, {60,141}, {25,44}, {25,45}, + {25,46}, {25,47}, {25,48}, {25,49}, {60,142}, {25,50}, {25,51}, {25,52}, + {60,143}, {25,53}, {25,54}, {25,55}, {60,144}, {25,56}, {25,57}, {25,58}, + {25,65}, {25,66}, {25,67}, {25,68}, {25,69}, {25,70}, {25,71}, {25,72}, + {25,73}, {60,145}, {25,74}, {25,75}, {25,76}, {25,77}, {25,78}, {25,79}, + {60,146}, {60,147}, {60,148}, {25,80}, {60,149}, {25,81}, {25,82}, + {25,83}, {60,150}, {25,84}, {60,151}, {25,85}, {25,86}, {25,87}, {25,88}, + {25,89}, {60,152}, {60,153}, {25,90}, {60,154}, {25,91}, {60,155}, + {25,92}, {25,93}, {25,94}, {60,156}, {25,95}, {25,96}, {60,157}, {60,158}, + {25,97}, {25,98}, {60,159}, {25,99}, {25,100}, {25,101}, {60,160}, + {25,102}, {25,103}, {25,104}, {25,105}, {25,106}, {25,107}, {25,108}, + {25,109}, {25,110}, {25,111}, {25,112}, {25,113}, {60,161}, {25,114}, + {25,115}, {25,116}, {25,117}, {25,118}, {25,119}, {60,162}, {25,120}, + {25,121}, {25,122}, {60,163}, {25,123}, {25,124}, {25,125}, {60,164}, + {25,126}, {25,127}, {25,128}, {25,129}, {25,130}, {25,131}, {25,132}, + {60,165}, {25,133}, {25,134}, {60,166}, {60,167}, {25,135}, {25,136}, + {25,137}, {25,138}, {25,139}, {25,140}, {25,141}, {60,168}, {25,142}, + {25,143}, {25,144}, {60,169}, {25,145}, {25,146}, {25,147}, {60,170}, + {25,148}, {25,149}, {25,150}, {25,151}, {25,152}, {25,153}, {25,154}, + {60,171}, {60,172}, {25,155}, {60,173}, {25,156}, {25,157}, {25,158}, + {25,159}, {25,160}, {25,161}, {25,162}, {25,163}, {60,174}, {60,175}, + {25,164}, {25,165}, {60,176}, {25,166}, {25,167}, {25,168}, {60,177}, + {25,169}, {25,170}, {25,171}, {25,172}, {25,173}, {25,174}, {25,175}, + {60,178}, {60,179}, {25,176}, {60,180}, {25,177}, {60,181}, {25,178}, + {25,179}, {25,180}, {25,181}, {25,182}, {25,183}, {60,182}, {60,183}, + {25,184}, {25,185}, {60,184}, {25,186}, {25,187}, {60,185}, {60,186}, + {25,188}, {25,189}, {25,190}, {26,1}, {26,2}, {26,3}, {26,4}, {60,187}, + {60,188}, {26,5}, {60,189}, {26,6}, {60,190}, {26,7}, {61,97}, {26,8}, + {61,98}, {61,99}, {26,9}, {61,100}, {26,10}, {26,11}, {26,12}, {26,13}, + {26,14}, {26,15}, {26,16}, {26,17}, {26,18}, {26,19}, {26,20}, {26,21}, + {26,22}, {26,23}, {26,24}, {26,25}, {26,26}, {26,33}, {26,34}, {61,101}, + {26,35}, {26,36}, {26,37}, {26,38}, {26,39}, {26,40}, {26,41}, {61,102}, + {61,103}, {26,42}, {26,43}, {61,104}, {26,44}, {26,45}, {26,46}, {61,105}, + {26,47}, {26,48}, {26,49}, {26,50}, {26,51}, {26,52}, {26,53}, {61,106}, + {26,54}, {26,55}, {26,56}, {26,57}, {61,107}, {26,58}, {26,65}, {26,66}, + {26,67}, {26,68}, {26,69}, {61,108}, {61,109}, {26,70}, {26,71}, {61,110}, + {26,72}, {26,73}, {26,74}, {61,111}, {26,75}, {26,76}, {26,77}, {26,78}, + {26,79}, {26,80}, {26,81}, {61,112}, {61,113}, {26,82}, {61,114}, {26,83}, + {61,115}, {26,84}, {26,85}, {26,86}, {26,87}, {26,88}, {26,89}, {61,116}, + {61,117}, {26,90}, {26,91}, {26,92}, {26,93}, {26,94}, {26,95}, {61,118}, + {26,96}, {26,97}, {26,98}, {26,99}, {26,100}, {26,101}, {26,102}, {61,119}, + {26,103}, {26,104}, {61,120}, {26,105}, {61,121}, {26,106}, {26,107}, + {26,108}, {26,109}, {26,110}, {26,111}, {61,122}, {61,123}, {26,112}, + {26,113}, {61,124}, {26,114}, {26,115}, {26,116}, {61,125}, {61,126}, + {26,117}, {26,118}, {26,119}, {26,120}, {26,121}, {26,122}, {61,127}, + {61,128}, {26,123}, {61,129}, {26,124}, {61,130}, {26,125}, {26,126}, + {26,127}, {26,128}, {26,129}, {26,130}, {26,131}, {26,132}, {26,133}, + {26,134}, {26,135}, {26,136}, {26,137}, {26,138}, {26,139}, {26,140}, + {26,141}, {26,142}, {26,143}, {26,144}, {26,145}, {26,146}, {26,147}, + {26,148}, {26,149}, {26,150}, {26,151}, {26,152}, {26,153}, {26,154}, + {26,155}, {26,156}, {26,157}, {26,158}, {61,131}, {61,132}, {26,159}, + {26,160}, {61,133}, {26,161}, {26,162}, {61,134}, {61,135}, {26,163}, + {26,164}, {26,165}, {26,166}, {26,167}, {26,168}, {61,136}, {61,137}, + {61,138}, {26,169}, {61,139}, {26,170}, {61,140}, {26,171}, {26,172}, + {26,173}, {26,174}, {61,141}, {26,175}, {61,142}, {61,143}, {26,176}, + {61,144}, {61,145}, {26,177}, {26,178}, {26,179}, {61,146}, {26,180}, + {26,181}, {26,182}, {26,183}, {26,184}, {26,185}, {26,186}, {61,147}, + {61,148}, {26,187}, {26,188}, {61,149}, {61,150}, {26,189}, {26,190}, + {27,1}, {27,2}, {27,3}, {61,151}, {61,152}, {61,153}, {27,4}, {27,5}, + {61,154}, {27,6}, {27,7}, {27,8}, {61,155}, {27,9}, {27,10}, {27,11}, + {27,12}, {27,13}, {27,14}, {27,15}, {61,156}, {61,157}, {27,16}, {27,17}, + {61,158}, {61,159}, {27,18}, {27,19}, {27,20}, {27,21}, {27,22}, {27,23}, + {27,24}, {27,25}, {27,26}, {27,33}, {27,34}, {27,35}, {27,36}, {27,37}, + {27,38}, {27,39}, {27,40}, {27,41}, {27,42}, {27,43}, {27,44}, {27,45}, + {27,46}, {27,47}, {27,48}, {27,49}, {27,50}, {61,160}, {27,51}, {27,52}, + {27,53}, {27,54}, {27,55}, {27,56}, {27,57}, {27,58}, {27,65}, {27,66}, + {27,67}, {27,68}, {27,69}, {27,70}, {27,71}, {27,72}, {27,73}, {27,74}, + {27,75}, {27,76}, {27,77}, {27,78}, {27,79}, {27,80}, {27,81}, {27,82}, + {27,83}, {27,84}, {27,85}, {27,86}, {27,87}, {27,88}, {27,89}, {27,90}, + {61,161}, {61,162}, {27,91}, {27,92}, {61,163}, {27,93}, {27,94}, {27,95}, + {61,164}, {27,96}, {61,165}, {27,97}, {27,98}, {27,99}, {27,100}, {27,101}, + {61,166}, {61,167}, {27,102}, {27,103}, {61,168}, {61,169}, {27,104}, + {27,105}, {27,106}, {27,107}, {27,108}, {27,109}, {61,170}, {27,110}, + {27,111}, {27,112}, {61,171}, {27,113}, {27,114}, {27,115}, {61,172}, + {27,116}, {27,117}, {27,118}, {27,119}, {27,120}, {27,121}, {27,122}, + {27,123}, {27,124}, {27,125}, {27,126}, {27,127}, {27,128}, {27,129}, + {27,130}, {27,131}, {27,132}, {27,133}, {27,134}, {27,135}, {27,136}, + {27,137}, {27,138}, {27,139}, {27,140}, {27,141}, {27,142}, {27,143}, + {27,144}, {27,145}, {27,146}, {27,147}, {27,148}, {27,149}, {27,150}, + {27,151}, {27,152}, {27,153}, {27,154}, {27,155}, {27,156}, {27,157}, + {27,158}, {27,159}, {27,160}, {27,161}, {27,162}, {27,163}, {27,164}, + {27,165}, {27,166}, {61,173}, {27,167}, {27,168}, {27,169}, {27,170}, + {27,171}, {27,172}, {27,173}, {27,174}, {27,175}, {27,176}, {27,177}, + {27,178}, {27,179}, {27,180}, {27,181}, {27,182}, {27,183}, {27,184}, + {27,185}, {27,186}, {27,187}, {27,188}, {27,189}, {61,174}, {61,175}, + {27,190}, {28,1}, {61,176}, {28,2}, {28,3}, {61,177}, {61,178}, {28,4}, + {61,179}, {28,5}, {28,6}, {28,7}, {28,8}, {28,9}, {61,180}, {61,181}, + {28,10}, {28,11}, {28,12}, {61,182}, {28,13}, {28,14}, {28,15}, {28,16}, + {28,17}, {28,18}, {61,183}, {61,184}, {28,19}, {28,20}, {61,185}, {28,21}, + {28,22}, {28,23}, {28,24}, {28,25}, {28,26}, {28,33}, {28,34}, {28,35}, + {28,36}, {28,37}, {28,38}, {28,39}, {28,40}, {28,41}, {61,186}, {28,42}, + {28,43}, {28,44}, {28,45}, {28,46}, {28,47}, {28,48}, {61,187}, {28,49}, + {28,50}, {28,51}, {28,52}, {28,53}, {28,54}, {28,55}, {28,56}, {28,57}, + {28,58}, {28,65}, {28,66}, {28,67}, {28,68}, {28,69}, {28,70}, {28,71}, + {28,72}, {28,73}, {61,188}, {28,74}, {28,75}, {28,76}, {28,77}, {28,78}, + {28,79}, {28,80}, {61,189}, {28,81}, {28,82}, {28,83}, {61,190}, {28,84}, + {28,85}, {28,86}, {62,97}, {28,87}, {28,88}, {28,89}, {28,90}, {28,91}, + {28,92}, {28,93}, {62,98}, {62,99}, {28,94}, {28,95}, {28,96}, {28,97}, + {28,98}, {28,99}, {28,100}, {28,101}, {28,102}, {28,103}, {62,100}, + {28,104}, {28,105}, {28,106}, {28,107}, {28,108}, {28,109}, {28,110}, + {28,111}, {28,112}, {28,113}, {28,114}, {28,115}, {28,116}, {28,117}, + {28,118}, {28,119}, {28,120}, {28,121}, {28,122}, {28,123}, {28,124}, + {28,125}, {28,126}, {28,127}, {28,128}, {28,129}, {28,130}, {62,101}, + {62,102}, {28,131}, {28,132}, {62,103}, {28,133}, {28,134}, {28,135}, + {62,104}, {28,136}, {28,137}, {28,138}, {28,139}, {28,140}, {28,141}, + {28,142}, {62,105}, {62,106}, {28,143}, {28,144}, {28,145}, {62,107}, + {28,146}, {28,147}, {28,148}, {28,149}, {28,150}, {28,151}, {62,108}, + {28,152}, {28,153}, {28,154}, {28,155}, {28,156}, {28,157}, {28,158}, + {28,159}, {28,160}, {28,161}, {28,162}, {28,163}, {28,164}, {28,165}, + {28,166}, {28,167}, {28,168}, {28,169}, {28,170}, {62,109}, {28,171}, + {28,172}, {28,173}, {28,174}, {28,175}, {28,176}, {28,177}, {62,110}, + {28,178}, {28,179}, {28,180}, {28,181}, {28,182}, {28,183}, {28,184}, + {28,185}, {28,186}, {28,187}, {28,188}, {28,189}, {28,190}, {29,1}, + {29,2}, {29,3}, {29,4}, {29,5}, {29,6}, {29,7}, {29,8}, {29,9}, {29,10}, + {29,11}, {29,12}, {29,13}, {29,14}, {62,111}, {29,15}, {29,16}, {29,17}, + {62,112}, {29,18}, {29,19}, {29,20}, {29,21}, {29,22}, {29,23}, {29,24}, + {29,25}, {29,26}, {29,33}, {29,34}, {29,35}, {29,36}, {29,37}, {29,38}, + {29,39}, {29,40}, {29,41}, {29,42}, {29,43}, {29,44}, {29,45}, {29,46}, + {29,47}, {29,48}, {29,49}, {29,50}, {29,51}, {29,52}, {29,53}, {29,54}, + {29,55}, {29,56}, {29,57}, {29,58}, {29,65}, {29,66}, {29,67}, {29,68}, + {29,69}, {29,70}, {29,71}, {29,72}, {29,73}, {62,113}, {29,74}, {29,75}, + {29,76}, {29,77}, {29,78}, {29,79}, {62,114}, {62,115}, {29,80}, {29,81}, + {62,116}, {29,82}, {29,83}, {29,84}, {62,117}, {29,85}, {62,118}, {29,86}, + {29,87}, {29,88}, {29,89}, {62,119}, {62,120}, {62,121}, {29,90}, {29,91}, + {29,92}, {29,93}, {29,94}, {29,95}, {29,96}, {29,97}, {29,98}, {29,99}, + {62,122}, {29,100}, {29,101}, {29,102}, {62,123}, {29,103}, {29,104}, + {29,105}, {62,124}, {29,106}, {29,107}, {29,108}, {29,109}, {29,110}, + {29,111}, {29,112}, {62,125}, {29,113}, {29,114}, {29,115}, {29,116}, + {29,117}, {29,118}, {29,119}, {29,120}, {29,121}, {29,122}, {29,123}, + {62,126}, {62,127}, {29,124}, {29,125}, {62,128}, {29,126}, {29,127}, + {29,128}, {62,129}, {29,129}, {29,130}, {29,131}, {29,132}, {29,133}, + {29,134}, {29,135}, {62,130}, {62,131}, {29,136}, {62,132}, {29,137}, + {62,133}, {29,138}, {29,139}, {29,140}, {29,141}, {29,142}, {29,143}, + {62,134}, {62,135}, {29,144}, {29,145}, {62,136}, {62,137}, {62,138}, + {29,146}, {62,139}, {62,140}, {62,141}, {29,147}, {29,148}, {29,149}, + {29,150}, {62,142}, {62,143}, {62,144}, {29,151}, {62,145}, {62,146}, + {62,147}, {29,152}, {29,153}, {29,154}, {62,148}, {62,149}, {29,155}, + {62,150}, {62,151}, {29,156}, {29,157}, {62,152}, {29,158}, {29,159}, + {29,160}, {62,153}, {29,161}, {29,162}, {29,163}, {29,164}, {29,165}, + {29,166}, {29,167}, {62,154}, {62,155}, {29,168}, {62,156}, {62,157}, + {62,158}, {29,169}, {29,170}, {29,171}, {29,172}, {29,173}, {29,174}, + {62,159}, {62,160}, {29,175}, {29,176}, {62,161}, {29,177}, {29,178}, + {29,179}, {62,162}, {29,180}, {29,181}, {62,163}, {29,182}, {29,183}, + {29,184}, {29,185}, {62,164}, {62,165}, {29,186}, {62,166}, {29,187}, + {62,167}, {29,188}, {29,189}, {29,190}, {62,168}, {30,1}, {62,169}, + {62,170}, {30,2}, {30,3}, {30,4}, {62,171}, {30,5}, {30,6}, {30,7}, + {62,172}, {30,8}, {30,9}, {30,10}, {30,11}, {30,12}, {30,13}, {30,14}, + {30,15}, {62,173}, {30,16}, {30,17}, {30,18}, {30,19}, {30,20}, {30,21}, + {30,22}, {30,23}, {30,24}, {30,25}, {62,174}, {62,175}, {30,26}, {30,33}, + {62,176}, {62,177}, {30,34}, {62,178}, {62,179}, {62,180}, {62,181}, + {30,35}, {30,36}, {30,37}, {30,38}, {30,39}, {62,182}, {62,183}, {62,184}, + {62,185}, {62,186}, {62,187}, {62,188}, {30,40}, {62,189}, {30,41}, + {62,190}, {30,42}, {63,97}, {63,98}, {30,43}, {30,44}, {63,99}, {30,45}, + {30,46}, {30,47}, {63,100}, {30,48}, {30,49}, {30,50}, {30,51}, {30,52}, + {30,53}, {30,54}, {63,101}, {63,102}, {30,55}, {63,103}, {30,56}, {63,104}, + {30,57}, {30,58}, {30,65}, {30,66}, {30,67}, {30,68}, {63,105}, {63,106}, + {63,107}, {30,69}, {63,108}, {30,70}, {30,71}, {30,72}, {63,109}, {30,73}, + {63,110}, {63,111}, {30,74}, {30,75}, {30,76}, {30,77}, {63,112}, {63,113}, + {63,114}, {63,115}, {63,116}, {63,117}, {30,78}, {30,79}, {30,80}, + {63,118}, {63,119}, {63,120}, {63,121}, {30,81}, {30,82}, {30,83}, + {63,122}, {30,84}, {30,85}, {30,86}, {63,123}, {30,87}, {30,88}, {30,89}, + {30,90}, {30,91}, {30,92}, {30,93}, {63,124}, {63,125}, {30,94}, {63,126}, + {63,127}, {30,95}, {30,96}, {30,97}, {30,98}, {30,99}, {30,100}, {30,101}, + {63,128}, {63,129}, {30,102}, {30,103}, {63,130}, {30,104}, {30,105}, + {30,106}, {63,131}, {63,132}, {63,133}, {30,107}, {63,134}, {30,108}, + {30,109}, {63,135}, {63,136}, {63,137}, {30,110}, {63,138}, {30,111}, + {63,139}, {30,112}, {63,140}, {30,113}, {30,114}, {30,115}, {30,116}, + {63,141}, {63,142}, {30,117}, {30,118}, {63,143}, {30,119}, {30,120}, + {30,121}, {63,144}, {30,122}, {30,123}, {30,124}, {30,125}, {30,126}, + {30,127}, {30,128}, {63,145}, {63,146}, {30,129}, {63,147}, {63,148}, + {63,149}, {30,130}, {30,131}, {30,132}, {30,133}, {30,134}, {30,135}, + {63,150}, {63,151}, {30,136}, {30,137}, {63,152}, {30,138}, {30,139}, + {30,140}, {30,141}, {30,142}, {30,143}, {30,144}, {30,145}, {30,146}, + {30,147}, {30,148}, {63,153}, {30,149}, {30,150}, {63,154}, {30,151}, + {63,155}, {30,152}, {30,153}, {30,154}, {30,155}, {30,156}, {30,157}, + {63,156}, {63,157}, {30,158}, {30,159}, {63,158}, {30,160}, {30,161}, + {30,162}, {63,159}, {30,163}, {30,164}, {30,165}, {30,166}, {30,167}, + {30,168}, {30,169}, {63,160}, {63,161}, {30,170}, {63,162}, {30,171}, + {63,163}, {30,172}, {30,173}, {30,174}, {30,175}, {30,176}, {30,177}, + {63,164}, {63,165}, {30,178}, {30,179}, {63,166}, {30,180}, {30,181}, + {30,182}, {63,167}, {30,183}, {30,184}, {30,185}, {30,186}, {30,187}, + {30,188}, {30,189}, {63,168}, {63,169}, {30,190}, {63,170}, {31,1}, + {63,171}, {31,2}, {31,3}, {31,4}, {31,5}, {31,6}, {31,7}, {63,172}, + {63,173}, {31,8}, {31,9}, {63,174}, {31,10}, {31,11}, {31,12}, {63,175}, + {63,176}, {63,177}, {31,13}, {31,14}, {31,15}, {31,16}, {31,17}, {63,178}, + {63,179}, {31,18}, {63,180}, {31,19}, {63,181}, {31,20}, {31,21}, {31,22}, + {31,23}, {31,24}, {31,25}, {63,182}, {63,183}, {31,26}, {31,33}, {63,184}, + {31,34}, {31,35}, {31,36}, {63,185}, {31,37}, {31,38}, {31,39}, {31,40}, + {31,41}, {31,42}, {31,43}, {63,186}, {63,187}, {31,44}, {31,45}, {63,188}, + {63,189}, {31,46}, {31,47}, {31,48}, {31,49}, {31,50}, {31,51}, {63,190}, + {64,97}, {31,52}, {31,53}, {64,98}, {31,54}, {31,55}, {31,56}, {64,99}, + {31,57}, {31,58}, {31,65}, {31,66}, {31,67}, {31,68}, {31,69}, {64,100}, + {64,101}, {31,70}, {31,71}, {31,72}, {64,102}, {31,73}, {31,74}, {31,75}, + {31,76}, {31,77}, {31,78}, {64,103}, {64,104}, {31,79}, {31,80}, {64,105}, + {31,81}, {31,82}, {31,83}, {64,106}, {31,84}, {31,85}, {31,86}, {31,87}, + {31,88}, {31,89}, {31,90}, {64,107}, {64,108}, {31,91}, {64,109}, {31,92}, + {64,110}, {31,93}, {31,94}, {31,95}, {31,96}, {31,97}, {31,98}, {64,111}, + {64,112}, {31,99}, {31,100}, {64,113}, {31,101}, {31,102}, {31,103}, + {64,114}, {31,104}, {31,105}, {31,106}, {31,107}, {31,108}, {31,109}, + {31,110}, {64,115}, {64,116}, {31,111}, {64,117}, {31,112}, {64,118}, + {31,113}, {64,119}, {31,114}, {31,115}, {31,116}, {31,117}, {64,120}, + {64,121}, {31,118}, {31,119}, {64,122}, {31,120}, {31,121}, {31,122}, + {64,123}, {31,123}, {31,124}, {31,125}, {31,126}, {31,127}, {64,124}, + {31,128}, {64,125}, {64,126}, {31,129}, {64,127}, {31,130}, {64,128}, + {64,129}, {64,130}, {64,131}, {64,132}, {64,133}, {64,134}, {64,135}, + {31,131}, {31,132}, {31,133}, {64,136}, {31,134}, {31,135}, {31,136}, + {64,137}, {31,137}, {31,138}, {31,139}, {31,140}, {31,141}, {31,142}, + {31,143}, {64,138}, {31,144}, {31,145}, {64,139}, {31,146}, {31,147}, + {31,148}, {31,149}, {31,150}, {31,151}, {31,152}, {31,153}, {64,140}, + {64,141}, {31,154}, {31,155}, {64,142}, {31,156}, {31,157}, {31,158}, + {64,143}, {64,144}, {64,145}, {31,159}, {31,160}, {31,161}, {31,162}, + {64,146}, {64,147}, {64,148}, {31,163}, {64,149}, {64,150}, {64,151}, + {64,152}, {31,164}, {31,165}, {31,166}, {64,153}, {31,167}, {64,154}, + {64,155}, {31,168}, {31,169}, {64,156}, {31,170}, {64,157}, {64,158}, + {64,159}, {31,171}, {64,160}, {31,172}, {31,173}, {31,174}, {31,175}, + {31,176}, {64,161}, {64,162}, {31,177}, {64,163}, {64,164}, {64,165}, + {64,166}, {31,178}, {31,179}, {31,180}, {31,181}, {31,182}, {64,167}, + {64,168}, {31,183}, {31,184}, {64,169}, {31,185}, {31,186}, {31,187}, + {64,170}, {31,188}, {31,189}, {31,190}, {32,1}, {32,2}, {32,3}, {32,4}, + {64,171}, {64,172}, {32,5}, {64,173}, {64,174}, {64,175}, {32,6}, {32,7}, + {32,8}, {32,9}, {32,10}, {32,11}, {64,176}, {64,177}, {32,12}, {32,13}, + {64,178}, {32,14}, {64,179}, {32,15}, {64,180}, {32,16}, {32,17}, {32,18}, + {32,19}, {32,20}, {32,21}, {32,22}, {64,181}, {32,23}, {32,24}, {32,25}, + {32,26}, {64,182}, {32,33}, {32,34}, {32,35}, {32,36}, {32,37}, {32,38}, + {64,183}, {32,39}, {32,40}, {32,41}, {64,184}, {32,42}, {32,43}, {32,44}, + {64,185}, {32,45}, {32,46}, {32,47}, {32,48}, {32,49}, {32,50}, {32,51}, + {32,52}, {32,53}, {32,54}, {32,55}, {32,56}, {32,57}, {32,58}, {32,65}, + {32,66}, {32,67}, {32,68}, {32,69}, {64,186}, {64,187}, {32,70}, {32,71}, + {64,188}, {32,72}, {32,73}, {32,74}, {64,189}, {32,75}, {64,190}, {32,76}, + {32,77}, {32,78}, {32,79}, {32,80}, {65,97}, {65,98}, {32,81}, {65,99}, + {32,82}, {65,100}, {65,101}, {32,83}, {32,84}, {32,85}, {32,86}, {32,87}, + {65,102}, {65,103}, {32,88}, {32,89}, {65,104}, {32,90}, {32,91}, {32,92}, + {65,105}, {32,93}, {32,94}, {32,95}, {32,96}, {32,97}, {32,98}, {32,99}, + {65,106}, {65,107}, {32,100}, {65,108}, {32,101}, {65,109}, {32,102}, + {32,103}, {32,104}, {32,105}, {32,106}, {32,107}, {65,110}, {32,108}, + {32,109}, {32,110}, {65,111}, {32,111}, {32,112}, {32,113}, {65,112}, + {32,114}, {32,115}, {32,116}, {32,117}, {32,118}, {32,119}, {32,120}, + {65,113}, {65,114}, {32,121}, {32,122}, {65,115}, {65,116}, {32,123}, + {32,124}, {32,125}, {32,126}, {32,127}, {32,128}, {65,117}, {32,129}, + {32,130}, {32,131}, {32,132}, {32,133}, {32,134}, {32,135}, {32,136}, + {32,137}, {32,138}, {32,139}, {32,140}, {32,141}, {32,142}, {32,143}, + {32,144}, {32,145}, {32,146}, {32,147}, {32,148}, {32,149}, {32,150}, + {32,151}, {32,152}, {32,153}, {32,154}, {32,155}, {65,118}, {65,119}, + {32,156}, {32,157}, {65,120}, {32,158}, {32,159}, {32,160}, {65,121}, + {32,161}, {65,122}, {32,162}, {32,163}, {32,164}, {32,165}, {32,166}, + {65,123}, {65,124}, {32,167}, {65,125}, {32,168}, {65,126}, {65,127}, + {65,128}, {32,169}, {32,170}, {32,171}, {65,129}, {65,130}, {65,131}, + {32,172}, {32,173}, {32,174}, {32,175}, {32,176}, {32,177}, {65,132}, + {32,178}, {32,179}, {32,180}, {32,181}, {32,182}, {32,183}, {32,184}, + {32,185}, {65,133}, {32,186}, {65,134}, {32,187}, {65,135}, {32,188}, + {32,189}, {32,190}, {33,1}, {33,2}, {33,3}, {65,136}, {33,4}, {33,5}, + {33,6}, {33,7}, {33,8}, {33,9}, {33,10}, {33,11}, {33,12}, {33,13}, + {33,14}, {33,15}, {33,16}, {33,17}, {33,18}, {33,19}, {33,20}, {33,21}, + {33,22}, {65,137}, {65,138}, {33,23}, {33,24}, {33,25}, {33,26}, {33,33}, + {33,34}, {65,139}, {33,35}, {33,36}, {33,37}, {65,140}, {33,38}, {33,39}, + {33,40}, {65,141}, {33,41}, {33,42}, {33,43}, {33,44}, {33,45}, {33,46}, + {33,47}, {65,142}, {65,143}, {33,48}, {65,144}, {33,49}, {65,145}, + {33,50}, {33,51}, {33,52}, {33,53}, {33,54}, {33,55}, {65,146}, {65,147}, + {33,56}, {33,57}, {65,148}, {33,58}, {33,65}, {33,66}, {33,67}, {33,68}, + {33,69}, {33,70}, {33,71}, {33,72}, {33,73}, {33,74}, {33,75}, {33,76}, + {33,77}, {33,78}, {33,79}, {65,149}, {33,80}, {33,81}, {33,82}, {33,83}, + {33,84}, {33,85}, {65,150}, {65,151}, {33,86}, {33,87}, {65,152}, {33,88}, + {33,89}, {33,90}, {65,153}, {65,154}, {65,155}, {33,91}, {33,92}, {33,93}, + {33,94}, {33,95}, {65,156}, {65,157}, {33,96}, {65,158}, {34,1}, {65,159}, + {34,2}, {34,3}, {34,4}, {34,5}, {34,6}, {34,7}, {65,160}, {34,8}, {34,9}, + {34,10}, {34,11}, {34,12}, {34,13}, {34,14}, {34,15}, {34,16}, {34,17}, + {34,18}, {34,19}, {34,20}, {34,21}, {34,22}, {34,23}, {34,24}, {34,25}, + {34,26}, {65,161}, {34,33}, {34,34}, {34,35}, {34,36}, {34,37}, {34,38}, + {34,39}, {65,162}, {34,40}, {34,41}, {34,42}, {34,43}, {34,44}, {34,45}, + {34,46}, {34,47}, {34,48}, {34,49}, {34,50}, {34,51}, {34,52}, {34,53}, + {34,54}, {34,55}, {34,56}, {34,57}, {34,58}, {34,65}, {34,66}, {34,67}, + {34,68}, {34,69}, {34,70}, {34,71}, {34,72}, {65,163}, {65,164}, {34,73}, + {34,74}, {65,165}, {34,75}, {34,76}, {34,77}, {65,166}, {34,78}, {34,79}, + {34,80}, {34,81}, {34,82}, {34,83}, {34,84}, {65,167}, {65,168}, {34,85}, + {65,169}, {34,86}, {34,87}, {34,88}, {34,89}, {34,90}, {34,91}, {34,92}, + {34,93}, {65,170}, {34,94}, {34,95}, {34,96}, {65,171}, {35,1}, {35,2}, + {35,3}, {65,172}, {35,4}, {35,5}, {35,6}, {35,7}, {35,8}, {35,9}, {35,10}, + {65,173}, {35,11}, {35,12}, {35,13}, {35,14}, {35,15}, {35,16}, {35,17}, + {35,18}, {35,19}, {35,20}, {35,21}, {65,174}, {65,175}, {35,22}, {35,23}, + {65,176}, {35,24}, {35,25}, {35,26}, {65,177}, {35,33}, {35,34}, {35,35}, + {35,36}, {35,37}, {35,38}, {35,39}, {65,178}, {65,179}, {35,40}, {65,180}, + {35,41}, {65,181}, {35,42}, {35,43}, {35,44}, {35,45}, {35,46}, {35,47}, + {35,48}, {35,49}, {35,50}, {35,51}, {35,52}, {35,53}, {35,54}, {35,55}, + {35,56}, {35,57}, {35,58}, {35,65}, {35,66}, {35,67}, {35,68}, {35,69}, + {35,70}, {35,71}, {35,72}, {35,73}, {35,74}, {35,75}, {35,76}, {35,77}, + {35,78}, {35,79}, {35,80}, {35,81}, {65,182}, {65,183}, {35,82}, {35,83}, + {65,184}, {35,84}, {35,85}, {65,185}, {65,186}, {35,86}, {65,187}, + {35,87}, {35,88}, {35,89}, {35,90}, {35,91}, {65,188}, {65,189}, {35,92}, + {65,190}, {35,93}, {66,97}, {66,98}, {35,94}, {35,95}, {66,99}, {66,100}, + {35,96}, {66,101}, {66,102}, {36,1}, {36,2}, {66,103}, {36,3}, {66,104}, + {36,4}, {66,105}, {36,5}, {36,6}, {66,106}, {36,7}, {36,8}, {36,9}, + {36,10}, {66,107}, {66,108}, {36,11}, {66,109}, {66,110}, {66,111}, + {36,12}, {36,13}, {36,14}, {36,15}, {36,16}, {36,17}, {66,112}, {66,113}, + {36,18}, {36,19}, {66,114}, {36,20}, {36,21}, {36,22}, {66,115}, {36,23}, + {36,24}, {36,25}, {36,26}, {36,33}, {36,34}, {36,35}, {66,116}, {66,117}, + {36,36}, {66,118}, {66,119}, {66,120}, {36,37}, {36,38}, {36,39}, {36,40}, + {36,41}, {36,42}, {66,121}, {36,43}, {36,44}, {36,45}, {66,122}, {36,46}, + {36,47}, {36,48}, {36,49}, {36,50}, {36,51}, {36,52}, {36,53}, {36,54}, + {36,55}, {36,56}, {36,57}, {36,58}, {36,65}, {36,66}, {36,67}, {66,123}, + {36,68}, {36,69}, {36,70}, {36,71}, {36,72}, {36,73}, {36,74}, {36,75}, + {36,76}, {36,77}, {36,78}, {36,79}, {36,80}, {36,81}, {36,82}, {36,83}, + {36,84}, {36,85}, {36,86}, {36,87}, {36,88}, {36,89}, {36,90}, {36,91}, + {36,92}, {36,93}, {36,94}, {36,95}, {36,96}, {37,1}, {37,2}, {37,3}, + {37,4}, {37,5}, {66,124}, {66,125}, {37,6}, {37,7}, {66,126}, {37,8}, + {37,9}, {37,10}, {66,127}, {37,11}, {37,12}, {37,13}, {37,14}, {37,15}, + {37,16}, {37,17}, {66,128}, {66,129}, {37,18}, {66,130}, {66,131}, + {66,132}, {37,19}, {37,20}, {37,21}, {37,22}, {37,23}, {37,24}, {66,133}, + {37,25}, {37,26}, {37,33}, {37,34}, {37,35}, {37,36}, {37,37}, {37,38}, + {37,39}, {37,40}, {37,41}, {37,42}, {37,43}, {37,44}, {37,45}, {37,46}, + {37,47}, {37,48}, {37,49}, {37,50}, {66,134}, {37,51}, {37,52}, {37,53}, + {37,54}, {37,55}, {37,56}, {66,135}, {37,57}, {37,58}, {37,65}, {37,66}, + {37,67}, {37,68}, {37,69}, {37,70}, {37,71}, {37,72}, {37,73}, {37,74}, + {37,75}, {37,76}, {37,77}, {37,78}, {37,79}, {37,80}, {37,81}, {66,136}, + {37,82}, {37,83}, {37,84}, {37,85}, {37,86}, {37,87}, {37,88}, {37,89}, + {37,90}, {37,91}, {37,92}, {37,93}, {37,94}, {37,95}, {37,96}, {38,1}, + {38,2}, {38,3}, {38,4}, {38,5}, {38,6}, {38,7}, {38,8}, {38,9}, {38,10}, + {38,11}, {38,12}, {38,13}, {38,14}, {38,15}, {38,16}, {38,17}, {38,18}, + {38,19}, {38,20}, {66,137}, {66,138}, {38,21}, {38,22}, {66,139}, {38,23}, + {38,24}, {38,25}, {66,140}, {38,26}, {38,33}, {38,34}, {38,35}, {38,36}, + {38,37}, {38,38}, {66,141}, {66,142}, {38,39}, {66,143}, {38,40}, {66,144}, + {38,41}, {66,145}, {38,42}, {38,43}, {38,44}, {38,45}, {66,146}, {66,147}, + {38,46}, {38,47}, {38,48}, {38,49}, {38,50}, {38,51}, {66,148}, {38,52}, + {38,53}, {38,54}, {38,55}, {38,56}, {38,57}, {38,58}, {38,65}, {38,66}, + {38,67}, {38,68}, {66,149}, {38,69}, {38,70}, {38,71}, {38,72}, {38,73}, + {38,74}, {38,75}, {66,150}, {38,76}, {38,77}, {38,78}, {38,79}, {38,80}, + {38,81}, {38,82}, {38,83}, {38,84}, {38,85}, {38,86}, {38,87}, {38,88}, + {38,89}, {38,90}, {38,91}, {38,92}, {38,93}, {38,94}, {66,151}, {38,95}, + {38,96}, {39,1}, {39,2}, {39,3}, {39,4}, {39,5}, {66,152}, {39,6}, + {39,7}, {39,8}, {66,153}, {39,9}, {39,10}, {39,11}, {66,154}, {39,12}, + {39,13}, {39,14}, {39,15}, {39,16}, {39,17}, {39,18}, {66,155}, {66,156}, + {39,19}, {39,20}, {39,21}, {39,22}, {39,23}, {39,24}, {39,25}, {39,26}, + {39,33}, {39,34}, {39,35}, {39,36}, {39,37}, {39,38}, {39,39}, {39,40}, + {39,41}, {39,42}, {39,43}, {39,44}, {39,45}, {39,46}, {39,47}, {39,48}, + {39,49}, {39,50}, {39,51}, {39,52}, {39,53}, {39,54}, {39,55}, {66,157}, + {39,56}, {39,57}, {39,58}, {39,65}, {39,66}, {39,67}, {66,158}, {66,159}, + {39,68}, {39,69}, {66,160}, {39,70}, {39,71}, {39,72}, {66,161}, {39,73}, + {39,74}, {39,75}, {39,76}, {39,77}, {39,78}, {39,79}, {66,162}, {66,163}, + {39,80}, {39,81}, {39,82}, {66,164}, {39,83}, {39,84}, {39,85}, {39,86}, + {39,87}, {39,88}, {66,165}, {39,89}, {39,90}, {39,91}, {39,92}, {39,93}, + {39,94}, {39,95}, {39,96}, {40,1}, {40,2}, {40,3}, {40,4}, {40,5}, + {40,6}, {40,7}, {40,8}, {40,9}, {40,10}, {40,11}, {66,166}, {66,167}, + {40,12}, {40,13}, {40,14}, {40,15}, {40,16}, {40,17}, {40,18}, {40,19}, + {40,20}, {40,21}, {40,22}, {40,23}, {40,24}, {40,25}, {40,26}, {40,33}, + {40,34}, {40,35}, {40,36}, {40,37}, {40,38}, {40,39}, {40,40}, {40,41}, + {40,42}, {40,43}, {40,44}, {40,45}, {40,46}, {40,47}, {40,48}, {40,49}, + {40,50}, {40,51}, {66,168}, {40,52}, {40,53}, {40,54}, {40,55}, {40,56}, + {40,57}, {40,58}, {40,65}, {40,66}, {40,67}, {40,68}, {40,69}, {40,70}, + {40,71}, {40,72}, {40,73}, {40,74}, {40,75}, {40,76}, {40,77}, {40,78}, + {40,79}, {40,80}, {40,81}, {40,82}, {40,83}, {40,84}, {66,169}, {40,85}, + {40,86}, {40,87}, {40,88}, {40,89}, {40,90}, {40,91}, {40,92}, {40,93}, + {40,94}, {40,95}, {40,96}, {41,1}, {41,2}, {41,3}, {41,4}, {41,5}, + {41,6}, {41,7}, {41,8}, {41,9}, {41,10}, {41,11}, {41,12}, {41,13}, + {41,14}, {41,15}, {66,170}, {41,16}, {41,17}, {41,18}, {41,19}, {41,20}, + {41,21}, {41,22}, {41,23}, {41,24}, {41,25}, {41,26}, {41,33}, {41,34}, + {41,35}, {41,36}, {66,171}, {41,37}, {41,38}, {66,172}, {41,39}, {66,173}, + {41,40}, {41,41}, {41,42}, {41,43}, {41,44}, {41,45}, {41,46}, {41,47}, + {41,48}, {41,49}, {41,50}, {41,51}, {41,52}, {41,53}, {41,54}, {41,55}, + {41,56}, {41,57}, {41,58}, {41,65}, {41,66}, {41,67}, {41,68}, {41,69}, + {41,70}, {41,71}, {41,72}, {41,73}, {41,74}, {41,75}, {41,76}, {41,77}, + {41,78}, {41,79}, {66,174}, {66,175}, {41,80}, {41,81}, {66,176}, {41,82}, + {41,83}, {41,84}, {66,177}, {41,85}, {41,86}, {41,87}, {41,88}, {41,89}, + {41,90}, {41,91}, {66,178}, {66,179}, {41,92}, {41,93}, {41,94}, {66,180}, + {66,181}, {41,95}, {41,96}, {42,1}, {42,2}, {66,182}, {66,183}, {66,184}, + {42,3}, {42,4}, {66,185}, {42,5}, {66,186}, {42,6}, {66,187}, {42,7}, + {42,8}, {42,9}, {42,10}, {42,11}, {42,12}, {42,13}, {66,188}, {66,189}, + {42,14}, {66,190}, {67,97}, {67,98}, {67,99}, {42,15}, {42,16}, {42,17}, + {42,18}, {42,19}, {67,100}, {67,101}, {42,20}, {42,21}, {67,102}, {42,22}, + {42,23}, {42,24}, {67,103}, {42,25}, {42,26}, {42,33}, {42,34}, {42,35}, + {42,36}, {42,37}, {67,104}, {67,105}, {42,38}, {67,106}, {67,107}, + {67,108}, {42,39}, {42,40}, {42,41}, {42,42}, {42,43}, {42,44}, {67,109}, + {42,45}, {42,46}, {42,47}, {67,110}, {42,48}, {67,111}, {42,49}, {67,112}, + {42,50}, {42,51}, {42,52}, {42,53}, {42,54}, {42,55}, {42,56}, {67,113}, + {42,57}, {42,58}, {42,65}, {42,66}, {67,114}, {42,67}, {42,68}, {42,69}, + {42,70}, {42,71}, {42,72}, {42,73}, {42,74}, {42,75}, {42,76}, {42,77}, + {42,78}, {42,79}, {42,80}, {42,81}, {42,82}, {42,83}, {42,84}, {42,85}, + {42,86}, {42,87}, {42,88}, {42,89}, {42,90}, {42,91}, {42,92}, {42,93}, + {42,94}, {42,95}, {42,96}, {43,1}, {43,2}, {43,3}, {43,4}, {67,115}, + {67,116}, {43,5}, {43,6}, {67,117}, {43,7}, {43,8}, {43,9}, {67,118}, + {43,10}, {43,11}, {43,12}, {43,13}, {43,14}, {43,15}, {43,16}, {67,119}, + {67,120}, {43,17}, {67,121}, {67,122}, {67,123}, {43,18}, {43,19}, + {43,20}, {43,21}, {43,22}, {43,23}, {67,124}, {67,125}, {43,24}, {43,25}, + {67,126}, {43,26}, {43,33}, {43,34}, {67,127}, {43,35}, {43,36}, {43,37}, + {43,38}, {43,39}, {43,40}, {43,41}, {67,128}, {67,129}, {43,42}, {67,130}, + {43,43}, {67,131}, {43,44}, {43,45}, {43,46}, {43,47}, {43,48}, {43,49}, + {67,132}, {43,50}, {43,51}, {43,52}, {67,133}, {43,53}, {43,54}, {43,55}, + {43,56}, {43,57}, {43,58}, {43,65}, {43,66}, {43,67}, {43,68}, {43,69}, + {43,70}, {43,71}, {43,72}, {43,73}, {67,134}, {43,74}, {43,75}, {43,76}, + {43,77}, {43,78}, {43,79}, {43,80}, {67,135}, {43,81}, {43,82}, {43,83}, + {67,136}, {43,84}, {43,85}, {43,86}, {43,87}, {43,88}, {43,89}, {43,90}, + {43,91}, {43,92}, {43,93}, {43,94}, {43,95}, {43,96}, {44,1}, {44,2}, + {44,3}, {67,137}, {44,4}, {44,5}, {44,6}, {44,7}, {44,8}, {44,9}, {67,138}, + {67,139}, {44,10}, {44,11}, {67,140}, {44,12}, {44,13}, {44,14}, {67,141}, + {44,15}, {44,16}, {44,17}, {44,18}, {44,19}, {44,20}, {44,21}, {67,142}, + {67,143}, {44,22}, {67,144}, {44,23}, {67,145}, {44,24}, {44,25}, {44,26}, + {44,33}, {44,34}, {44,35}, {67,146}, {44,36}, {44,37}, {44,38}, {67,147}, + {44,39}, {44,40}, {44,41}, {67,148}, {44,42}, {44,43}, {44,44}, {44,45}, + {44,46}, {44,47}, {44,48}, {44,49}, {44,50}, {44,51}, {44,52}, {44,53}, + {67,149}, {44,54}, {44,55}, {44,56}, {44,57}, {44,58}, {44,65}, {44,66}, + {44,67}, {44,68}, {44,69}, {44,70}, {44,71}, {44,72}, {44,73}, {44,74}, + {44,75}, {44,76}, {44,77}, {44,78}, {44,79}, {44,80}, {44,81}, {44,82}, + {44,83}, {44,84}, {44,85}, {44,86}, {44,87}, {44,88}, {44,89}, {44,90}, + {44,91}, {44,92}, {44,93}, {67,150}, {44,94}, {44,95}, {44,96}, {67,151}, + {45,1}, {45,2}, {45,3}, {67,152}, {45,4}, {45,5}, {45,6}, {45,7}, {45,8}, + {45,9}, {45,10}, {67,153}, {67,154}, {45,11}, {67,155}, {45,12}, {67,156}, + {45,13}, {45,14}, {45,15}, {45,16}, {45,17}, {45,18}, {67,157}, {45,19}, + {45,20}, {45,21}, {45,22}, {45,23}, {45,24}, {45,25}, {45,26}, {45,33}, + {45,34}, {45,35}, {45,36}, {45,37}, {45,38}, {45,39}, {67,158}, {45,40}, + {45,41}, {45,42}, {45,43}, {45,44}, {45,45}, {45,46}, {45,47}, {45,48}, + {45,49}, {45,50}, {67,159}, {67,160}, {45,51}, {45,52}, {67,161}, {45,53}, + {45,54}, {45,55}, {67,162}, {45,56}, {45,57}, {45,58}, {45,65}, {45,66}, + {45,67}, {45,68}, {67,163}, {67,164}, {45,69}, {67,165}, {45,70}, {67,166}, + {45,71}, {45,72}, {45,73}, {45,74}, {45,75}, {45,76}, {67,167}, {45,77}, + {45,78}, {45,79}, {45,80}, {45,81}, {45,82}, {45,83}, {45,84}, {45,85}, + {45,86}, {45,87}, {45,88}, {45,89}, {45,90}, {45,91}, {45,92}, {45,93}, + {45,94}, {45,95}, {67,168}, {45,96}, {46,1}, {46,2}, {46,3}, {46,4}, + {46,5}, {46,6}, {67,169}, {46,7}, {46,8}, {46,9}, {67,170}, {46,10}, + {46,11}, {46,12}, {46,13}, {46,14}, {46,15}, {46,16}, {46,17}, {46,18}, + {46,19}, {46,20}, {46,21}, {46,22}, {46,23}, {46,24}, {46,25}, {46,26}, + {46,33}, {46,34}, {46,35}, {46,36}, {46,37}, {46,38}, {67,171}, {46,39}, + {46,40}, {46,41}, {67,172}, {46,42}, {46,43}, {46,44}, {67,173}, {46,45}, + {46,46}, {46,47}, {46,48}, {46,49}, {46,50}, {46,51}, {67,174}, {67,175}, + {46,52}, {67,176}, {46,53}, {67,177}, {46,54}, {46,55}, {46,56}, {46,57}, + {46,58}, {46,65}, {67,178}, {46,66}, {46,67}, {46,68}, {67,179}, {46,69}, + {46,70}, {46,71}, {67,180}, {46,72}, {46,73}, {46,74}, {46,75}, {46,76}, + {46,77}, {46,78}, {67,181}, {46,79}, {46,80}, {46,81}, {46,82}, {67,182}, + {46,83}, {46,84}, {46,85}, {46,86}, {46,87}, {46,88}, {67,183}, {67,184}, + {46,89}, {46,90}, {67,185}, {46,91}, {46,92}, {46,93}, {67,186}, {46,94}, + {46,95}, {46,96}, {47,1}, {47,2}, {47,3}, {47,4}, {67,187}, {67,188}, + {47,5}, {67,189}, {47,6}, {67,190}, {47,7}, {47,8}, {47,9}, {47,10}, + {47,11}, {47,12}, {47,13}, {47,14}, {47,15}, {47,16}, {47,17}, {47,18}, + {47,19}, {47,20}, {47,21}, {47,22}, {47,23}, {47,24}, {47,25}, {47,26}, + {47,33}, {47,34}, {47,35}, {47,36}, {47,37}, {47,38}, {47,39}, {47,40}, + {47,41}, {47,42}, {47,43}, {47,44}, {47,45}, {47,46}, {68,97}, {68,98}, + {47,47}, {47,48}, {68,99}, {47,49}, {47,50}, {68,100}, {68,101}, {68,102}, + {47,51}, {47,52}, {47,53}, {47,54}, {47,55}, {47,56}, {68,103}, {68,104}, + {47,57}, {68,105}, {47,58}, {68,106}, {47,65}, {47,66}, {47,67}, {47,68}, + {47,69}, {47,70}, {68,107}, {68,108}, {47,71}, {47,72}, {68,109}, {47,73}, + {47,74}, {47,75}, {68,110}, {47,76}, {47,77}, {47,78}, {47,79}, {47,80}, + {47,81}, {47,82}, {68,111}, {68,112}, {47,83}, {68,113}, {47,84}, {68,114}, + {47,85}, {47,86}, {47,87}, {47,88}, {47,89}, {47,90}, {68,115}, {68,116}, + {47,91}, {47,92}, {68,117}, {47,93}, {47,94}, {47,95}, {68,118}, {47,96}, + {48,1}, {48,2}, {48,3}, {48,4}, {48,5}, {48,6}, {68,119}, {68,120}, + {48,7}, {68,121}, {68,122}, {68,123}, {48,8}, {48,9}, {48,10}, {48,11}, + {48,12}, {48,13}, {68,124}, {68,125}, {48,14}, {48,15}, {48,16}, {48,17}, + {48,18}, {48,19}, {48,20}, {48,21}, {48,22}, {48,23}, {48,24}, {48,25}, + {48,26}, {48,33}, {48,34}, {48,35}, {48,36}, {48,37}, {48,38}, {68,126}, + {48,39}, {48,40}, {48,41}, {48,42}, {48,43}, {48,44}, {48,45}, {48,46}, + {48,47}, {48,48}, {48,49}, {48,50}, {48,51}, {48,52}, {48,53}, {48,54}, + {48,55}, {48,56}, {48,57}, {48,58}, {48,65}, {48,66}, {48,67}, {48,68}, + {48,69}, {48,70}, {48,71}, {48,72}, {48,73}, {48,74}, {48,75}, {48,76}, + {48,77}, {48,78}, {68,127}, {68,128}, {48,79}, {48,80}, {68,129}, {48,81}, + {48,82}, {68,130}, {68,131}, {48,83}, {48,84}, {48,85}, {48,86}, {48,87}, + {48,88}, {48,89}, {68,132}, {68,133}, {48,90}, {68,134}, {68,135}, + {68,136}, {48,91}, {48,92}, {48,93}, {48,94}, {48,95}, {48,96}, {68,137}, + {68,138}, {49,1}, {49,2}, {68,139}, {49,3}, {49,4}, {49,5}, {68,140}, + {49,6}, {49,7}, {49,8}, {49,9}, {49,10}, {49,11}, {49,12}, {68,141}, + {68,142}, {49,13}, {68,143}, {49,14}, {68,144}, {49,15}, {49,16}, {49,17}, + {49,18}, {49,19}, {49,20}, {68,145}, {49,21}, {49,22}, {49,23}, {68,146}, + {49,24}, {49,25}, {49,26}, {68,147}, {49,33}, {49,34}, {49,35}, {49,36}, + {49,37}, {49,38}, {49,39}, {68,148}, {68,149}, {49,40}, {68,150}, {68,151}, + {68,152}, {49,41}, {49,42}, {49,43}, {49,44}, {49,45}, {49,46}, {68,153}, + {49,47}, {49,48}, {49,49}, {49,50}, {49,51}, {49,52}, {49,53}, {49,54}, + {49,55}, {49,56}, {49,57}, {49,58}, {49,65}, {49,66}, {49,67}, {49,68}, + {49,69}, {49,70}, {49,71}, {49,72}, {49,73}, {49,74}, {49,75}, {49,76}, + {49,77}, {49,78}, {49,79}, {68,154}, {68,155}, {49,80}, {49,81}, {68,156}, + {49,82}, {49,83}, {49,84}, {68,157}, {49,85}, {49,86}, {49,87}, {49,88}, + {49,89}, {49,90}, {49,91}, {68,158}, {68,159}, {49,92}, {68,160}, {49,93}, + {68,161}, {49,94}, {49,95}, {49,96}, {50,1}, {50,2}, {50,3}, {68,162}, + {68,163}, {50,4}, {50,5}, {68,164}, {50,6}, {50,7}, {50,8}, {68,165}, + {50,9}, {50,10}, {50,11}, {50,12}, {50,13}, {50,14}, {50,15}, {68,166}, + {50,16}, {50,17}, {50,18}, {50,19}, {68,167}, {50,20}, {50,21}, {50,22}, + {50,23}, {50,24}, {50,25}, {68,168}, {50,26}, {50,33}, {50,34}, {50,35}, + {50,36}, {50,37}, {50,38}, {50,39}, {50,40}, {50,41}, {50,42}, {50,43}, + {50,44}, {50,45}, {50,46}, {50,47}, {50,48}, {50,49}, {50,50}, {50,51}, + {68,169}, {50,52}, {50,53}, {50,54}, {50,55}, {50,56}, {50,57}, {68,170}, + {50,58}, {50,65}, {50,66}, {50,67}, {50,68}, {50,69}, {50,70}, {68,171}, + {50,71}, {50,72}, {50,73}, {50,74}, {50,75}, {50,76}, {50,77}, {50,78}, + {50,79}, {50,80}, {50,81}, {50,82}, {50,83}, {50,84}, {50,85}, {50,86}, + {50,87}, {50,88}, {50,89}, {68,172}, {50,90}, {50,91}, {50,92}, {50,93}, + {50,94}, {50,95}, {50,96}, {51,1}, {51,2}, {51,3}, {51,4}, {51,5}, + {51,6}, {51,7}, {51,8}, {51,9}, {51,10}, {51,11}, {51,12}, {51,13}, + {51,14}, {51,15}, {51,16}, {51,17}, {51,18}, {51,19}, {51,20}, {68,173}, + {68,174}, {51,21}, {51,22}, {68,175}, {51,23}, {51,24}, {51,25}, {68,176}, + {51,26}, {51,33}, {51,34}, {51,35}, {51,36}, {51,37}, {51,38}, {68,177}, + {68,178}, {51,39}, {68,179}, {51,40}, {68,180}, {51,41}, {51,42}, {51,43}, + {51,44}, {51,45}, {51,46}, {68,181}, {51,47}, {51,48}, {51,49}, {68,182}, + {51,50}, {51,51}, {51,52}, {68,183}, {51,53}, {51,54}, {51,55}, {51,56}, + {51,57}, {51,58}, {51,65}, {51,66}, {51,67}, {51,68}, {51,69}, {51,70}, + {68,184}, {51,71}, {51,72}, {51,73}, {51,74}, {51,75}, {51,76}, {68,185}, + {51,77}, {51,78}, {51,79}, {51,80}, {51,81}, {51,82}, {51,83}, {51,84}, + {51,85}, {51,86}, {51,87}, {51,88}, {51,89}, {51,90}, {51,91}, {51,92}, + {51,93}, {51,94}, {51,95}, {51,96}, {68,186}, {52,1}, {52,2}, {52,3}, + {52,4}, {52,5}, {52,6}, {68,187}, {68,188}, {52,7}, {52,8}, {68,189}, + {52,9}, {52,10}, {52,11}, {68,190}, {52,12}, {52,13}, {52,14}, {52,15}, + {52,16}, {52,17}, {52,18}, {69,97}, {69,98}, {52,19}, {69,99}, {52,20}, + {69,100}, {52,21}, {52,22}, {52,23}, {52,24}, {52,25}, {52,26}, {69,101}, + {52,33}, {52,34}, {52,35}, {69,102}, {52,36}, {52,37}, {52,38}, {69,103}, + {52,39}, {52,40}, {52,41}, {52,42}, {52,43}, {52,44}, {52,45}, {69,104}, + {52,46}, {52,47}, {52,48}, {52,49}, {52,50}, {52,51}, {52,52}, {52,53}, + {52,54}, {52,55}, {52,56}, {69,105}, {69,106}, {52,57}, {52,58}, {69,107}, + {52,65}, {52,66}, {52,67}, {69,108}, {52,68}, {52,69}, {52,70}, {52,71}, + {52,72}, {52,73}, {52,74}, {69,109}, {69,110}, {52,75}, {52,76}, {52,77}, + {69,111}, {52,78}, {52,79}, {52,80}, {52,81}, {52,82}, {52,83}, {52,84}, + {52,85}, {52,86}, {52,87}, {52,88}, {52,89}, {52,90}, {52,91}, {52,92}, + {52,93}, {52,94}, {52,95}, {52,96}, {53,1}, {53,2}, {53,3}, {53,4}, + {53,5}, {53,6}, {53,7}, {53,8}, {53,9}, {53,10}, {53,11}, {53,12}, + {53,13}, {53,14}, {53,15}, {69,112}, {69,113}, {53,16}, {53,17}, {69,114}, + {53,18}, {53,19}, {53,20}, {69,115}, {53,21}, {53,22}, {53,23}, {53,24}, + {53,25}, {53,26}, {53,33}, {69,116}, {69,117}, {53,34}, {69,118}, {53,35}, + {69,119}, {53,36}, {53,37}, {53,38}, {53,39}, {53,40}, {53,41}, {69,120}, + {69,121}, {53,42}, {53,43}, {69,122}, {53,44}, {53,45}, {53,46}, {69,123}, + {69,124}, {53,47}, {53,48}, {53,49}, {53,50}, {53,51}, {53,52}, {69,125}, + {69,126}, {53,53}, {69,127}, {69,128}, {69,129}, {53,54}, {53,55}, + {53,56}, {53,57}, {53,58}, {53,65}, {69,130}, {69,131}, {53,66}, {53,67}, + {69,132}, {53,68}, {53,69}, {53,70}, {69,133}, {53,71}, {53,72}, {53,73}, + {53,74}, {53,75}, {53,76}, {53,77}, {69,134}, {69,135}, {53,78}, {69,136}, + {69,137}, {69,138}, {53,79}, {53,80}, {53,81}, {53,82}, {53,83}, {53,84}, + {69,139}, {53,85}, {53,86}, {53,87}, {53,88}, {53,89}, {53,90}, {53,91}, + {53,92}, {53,93}, {53,94}, {53,95}, {53,96}, {54,1}, {54,2}, {54,3}, + {54,4}, {54,5}, {54,6}, {54,7}, {54,8}, {69,140}, {54,9}, {54,10}, + {54,11}, {54,12}, {54,13}, {54,14}, {54,15}, {54,16}, {54,17}, {54,18}, + {54,19}, {54,20}, {54,21}, {54,22}, {54,23}, {54,24}, {54,25}, {54,26}, + {54,33}, {54,34}, {54,35}, {54,36}, {54,37}, {54,38}, {54,39}, {54,40}, + {54,41}, {54,42}, {54,43}, {54,44}, {54,45}, {54,46}, {54,47}, {54,48}, + {69,141}, {69,142}, {54,49}, {54,50}, {69,143}, {54,51}, {54,52}, {54,53}, + {69,144}, {54,54}, {69,145}, {54,55}, {54,56}, {54,57}, {54,58}, {54,65}, + {69,146}, {69,147}, {54,66}, {69,148}, {69,149}, {69,150}, {54,67}, + {54,68}, {54,69}, {54,70}, {54,71}, {54,72}, {69,151}, {69,152}, {54,73}, + {54,74}, {69,153}, {54,75}, {54,76}, {54,77}, {69,154}, {54,78}, {54,79}, + {54,80}, {54,81}, {54,82}, {54,83}, {54,84}, {69,155}, {69,156}, {54,85}, + {69,157}, {54,86}, {69,158}, {54,87}, {54,88}, {54,89}, {54,90}, {54,91}, + {54,92}, {69,159}, {54,93}, {54,94}, {54,95}, {69,160}, {54,96}, {55,1}, + {55,2}, {55,3}, {55,4}, {55,5}, {55,6}, {55,7}, {55,8}, {55,9}, {55,10}, + {55,11}, {55,12}, {55,13}, {55,14}, {69,161}, {55,15}, {55,16}, {55,17}, + {55,18}, {55,19}, {55,20}, {55,21}, {69,162}, {55,22}, {55,23}, {55,24}, + {69,163}, {55,25}, {55,26}, {55,33}, {55,34}, {55,35}, {55,36}, {55,37}, + {55,38}, {55,39}, {55,40}, {55,41}, {55,42}, {55,43}, {55,44}, {55,45}, + {55,46}, {55,47}, {55,48}, {55,49}, {55,50}, {55,51}, {55,52}, {55,53}, + {69,164}, {69,165}, {55,54}, {55,55}, {69,166}, {55,56}, {55,57}, {55,58}, + {69,167}, {55,65}, {55,66}, {55,67}, {55,68}, {55,69}, {55,70}, {55,71}, + {69,168}, {69,169}, {55,72}, {69,170}, {55,73}, {69,171}, {55,74}, + {55,75}, {55,76}, {55,77}, {69,172}, {55,78}, {69,173}, {55,79}, {55,80}, + {55,81}, {69,174}, {55,82}, {55,83}, {55,84}, {55,85}, {55,86}, {55,87}, + {55,88}, {55,89}, {55,90}, {55,91}, {55,92}, {55,93}, {55,94}, {55,95}, + {55,96}, {56,1}, {56,2}, {56,3}, {56,4}, {56,5}, {56,6}, {56,7}, {56,8}, + {69,175}, {56,9}, {56,10}, {56,11}, {56,12}, {56,13}, {56,14}, {56,15}, + {56,16}, {56,17}, {56,18}, {56,19}, {56,20}, {56,21}, {56,22}, {56,23}, + {56,24}, {56,25}, {56,26}, {56,33}, {56,34}, {56,35}, {56,36}, {56,37}, + {56,38}, {56,39}, {56,40}, {56,41}, {69,176}, {56,42}, {56,43}, {56,44}, + {69,177}, {56,45}, {56,46}, {56,47}, {56,48}, {56,49}, {56,50}, {56,51}, + {56,52}, {56,53}, {56,54}, {56,55}, {56,56}, {56,57}, {56,58}, {69,178}, + {56,65}, {69,179}, {56,66}, {56,67}, {56,68}, {56,69}, {56,70}, {56,71}, + {69,180}, {56,72}, {56,73}, {56,74}, {56,75}, {56,76}, {56,77}, {56,78}, + {56,79}, {56,80}, {56,81}, {56,82}, {56,83}, {56,84}, {56,85}, {56,86}, + {56,87}, {56,88}, {56,89}, {56,90}, {56,91}, {56,92}, {56,93}, {56,94}, + {56,95}, {56,96}, {57,1}, {57,2}, {69,181}, {69,182}, {57,3}, {57,4}, + {69,183}, {57,5}, {57,6}, {57,7}, {69,184}, {57,8}, {57,9}, {57,10}, + {57,11}, {57,12}, {57,13}, {57,14}, {69,185}, {69,186}, {57,15}, {69,187}, + {57,16}, {69,188}, {57,17}, {57,18}, {57,19}, {57,20}, {57,21}, {57,22}, + {69,189}, {57,23}, {57,24}, {57,25}, {57,26}, {57,33}, {57,34}, {57,35}, + {57,36}, {57,37}, {57,38}, {57,39}, {57,40}, {57,41}, {57,42}, {57,43}, + {57,44}, {57,45}, {57,46}, {57,47}, {69,190}, {57,48}, {57,49}, {57,50}, + {57,51}, {57,52}, {57,53}, {57,54}, {70,97}, {57,55}, {57,56}, {57,57}, + {57,58}, {57,65}, {57,66}, {57,67}, {57,68}, {57,69}, {57,70}, {57,71}, + {57,72}, {57,73}, {57,74}, {57,75}, {57,76}, {57,77}, {57,78}, {57,79}, + {57,80}, {57,81}, {57,82}, {57,83}, {57,84}, {57,85}, {57,86}, {57,87}, + {70,98}, {70,99}, {57,88}, {57,89}, {70,100}, {57,90}, {57,91}, {57,92}, + {70,101}, {57,93}, {57,94}, {57,95}, {57,96}, {58,1}, {58,2}, {58,3}, + {70,102}, {70,103}, {58,4}, {58,5}, {58,6}, {70,104}, {58,7}, {58,8}, + {58,9}, {58,10}, {58,11}, {58,12}, {70,105}, {58,13}, {58,14}, {58,15}, + {70,106}, {58,16}, {58,17}, {58,18}, {70,107}, {58,19}, {58,20}, {58,21}, + {58,22}, {58,23}, {58,24}, {58,25}, {70,108}, {58,26}, {58,33}, {58,34}, + {58,35}, {70,109}, {58,36}, {58,37}, {58,38}, {58,39}, {58,40}, {58,41}, + {70,110}, {70,111}, {58,42}, {58,43}, {70,112}, {58,44}, {58,45}, {70,113}, + {70,114}, {58,46}, {70,115}, {58,47}, {58,48}, {58,49}, {58,50}, {58,51}, + {70,116}, {70,117}, {58,52}, {70,118}, {58,53}, {58,54}, {58,55}, {58,56}, + {58,57}, {58,58}, {58,65}, {58,66}, {70,119}, {58,67}, {58,68}, {58,69}, + {70,120}, {58,70}, {58,71}, {58,72}, {70,121}, {58,73}, {58,74}, {58,75}, + {58,76}, {58,77}, {58,78}, {58,79}, {70,122}, {70,123}, {58,80}, {58,81}, + {58,82}, {58,83}, {58,84}, {58,85}, {58,86}, {58,87}, {58,88}, {58,89}, + {70,124}, {70,125}, {58,90}, {58,91}, {70,126}, {58,92}, {58,93}, {58,94}, + {70,127}, {58,95}, {58,96}, {59,1}, {59,2}, {59,3}, {59,4}, {59,5}, + {70,128}, {70,129}, {59,6}, {70,130}, {59,7}, {70,131}, {59,8}, {59,9}, + {59,10}, {59,11}, {59,12}, {59,13}, {70,132}, {70,133}, {70,134}, {59,14}, + {70,135}, {59,15}, {59,16}, {59,17}, {70,136}, {59,18}, {70,137}, {59,19}, + {59,20}, {59,21}, {59,22}, {59,23}, {70,138}, {70,139}, {59,24}, {70,140}, + {70,141}, {70,142}, {59,25}, {59,26}, {59,33}, {70,143}, {59,34}, {59,35}, + {70,144}, {70,145}, {59,36}, {59,37}, {70,146}, {59,38}, {59,39}, {59,40}, + {70,147}, {59,41}, {59,42}, {59,43}, {59,44}, {59,45}, {59,46}, {59,47}, + {70,148}, {70,149}, {59,48}, {70,150}, {70,151}, {70,152}, {59,49}, + {59,50}, {59,51}, {59,52}, {59,53}, {59,54}, {70,153}, {70,154}, {59,55}, + {59,56}, {59,57}, {59,58}, {59,65}, {59,66}, {59,67}, {59,68}, {59,69}, + {59,70}, {59,71}, {59,72}, {59,73}, {59,74}, {59,75}, {59,76}, {59,77}, + {59,78}, {59,79}, {59,80}, {59,81}, {59,82}, {59,83}, {59,84}, {59,85}, + {59,86}, {59,87}, {59,88}, {59,89}, {59,90}, {59,91}, {59,92}, {59,93}, + {59,94}, {59,95}, {59,96}, {60,1}, {60,2}, {60,3}, {60,4}, {60,5}, + {60,6}, {60,7}, {60,8}, {60,9}, {60,10}, {60,11}, {60,12}, {60,13}, + {60,14}, {60,15}, {60,16}, {60,17}, {60,18}, {70,155}, {70,156}, {60,19}, + {60,20}, {70,157}, {60,21}, {60,22}, {60,23}, {70,158}, {60,24}, {60,25}, + {60,26}, {60,33}, {60,34}, {60,35}, {60,36}, {70,159}, {70,160}, {60,37}, + {70,161}, {70,162}, {70,163}, {60,38}, {60,39}, {60,40}, {60,41}, {60,42}, + {60,43}, {70,164}, {70,165}, {60,44}, {60,45}, {70,166}, {60,46}, {60,47}, + {60,48}, {70,167}, {60,49}, {60,50}, {60,51}, {60,52}, {60,53}, {60,54}, + {60,55}, {70,168}, {70,169}, {60,56}, {70,170}, {60,57}, {70,171}, + {60,58}, {60,65}, {60,66}, {60,67}, {60,68}, {60,69}, {70,172}, {60,70}, + {60,71}, {60,72}, {70,173}, {60,73}, {60,74}, {60,75}, {70,174}, {60,76}, + {60,77}, {60,78}, {60,79}, {60,80}, {60,81}, {60,82}, {70,175}, {70,176}, + {60,83}, {60,84}, {70,177}, {70,178}, {60,85}, {60,86}, {60,87}, {60,88}, + {60,89}, {60,90}, {70,179}, {60,91}, {60,92}, {60,93}, {60,94}, {60,95}, + {60,96}, {61,1}, {70,180}, {61,2}, {61,3}, {61,4}, {61,5}, {61,6}, + {61,7}, {61,8}, {61,9}, {70,181}, {61,10}, {70,182}, {61,11}, {61,12}, + {61,13}, {61,14}, {61,15}, {61,16}, {61,17}, {61,18}, {70,183}, {70,184}, + {61,19}, {61,20}, {70,185}, {61,21}, {61,22}, {61,23}, {70,186}, {61,24}, + {61,25}, {61,26}, {61,33}, {61,34}, {61,35}, {61,36}, {70,187}, {70,188}, + {61,37}, {70,189}, {61,38}, {70,190}, {61,39}, {61,40}, {61,41}, {61,42}, + {61,43}, {61,44}, {71,97}, {61,45}, {61,46}, {61,47}, {61,48}, {61,49}, + {61,50}, {61,51}, {61,52}, {61,53}, {61,54}, {61,55}, {61,56}, {61,57}, + {61,58}, {61,65}, {61,66}, {61,67}, {61,68}, {61,69}, {61,70}, {71,98}, + {61,71}, {61,72}, {61,73}, {61,74}, {61,75}, {61,76}, {61,77}, {61,78}, + {61,79}, {61,80}, {61,81}, {61,82}, {61,83}, {61,84}, {61,85}, {61,86}, + {61,87}, {61,88}, {61,89}, {61,90}, {61,91}, {61,92}, {61,93}, {61,94}, + {61,95}, {61,96}, {62,1}, {62,2}, {62,3}, {62,4}, {62,5}, {62,6}, {62,7}, + {62,8}, {71,99}, {62,9}, {62,10}, {62,11}, {71,100}, {62,12}, {62,13}, + {62,14}, {62,15}, {62,16}, {62,17}, {62,18}, {62,19}, {62,20}, {62,21}, + {62,22}, {62,23}, {62,24}, {62,25}, {62,26}, {62,33}, {62,34}, {62,35}, + {62,36}, {62,37}, {62,38}, {62,39}, {62,40}, {71,101}, {62,41}, {62,42}, + {62,43}, {71,102}, {62,44}, {62,45}, {62,46}, {71,103}, {62,47}, {62,48}, + {62,49}, {62,50}, {62,51}, {62,52}, {62,53}, {62,54}, {71,104}, {62,55}, + {71,105}, {62,56}, {62,57}, {62,58}, {62,65}, {62,66}, {62,67}, {62,68}, + {62,69}, {71,106}, {71,107}, {62,70}, {62,71}, {71,108}, {62,72}, {62,73}, + {71,109}, {71,110}, {62,74}, {71,111}, {62,75}, {62,76}, {62,77}, {62,78}, + {62,79}, {71,112}, {71,113}, {62,80}, {71,114}, {62,81}, {71,115}, + {62,82}, {62,83}, {62,84}, {62,85}, {62,86}, {62,87}, {71,116}, {62,88}, + {62,89}, {62,90}, {62,91}, {62,92}, {62,93}, {62,94}, {62,95}, {62,96}, + {63,1}, {63,2}, {63,3}, {63,4}, {63,5}, {63,6}, {63,7}, {63,8}, {63,9}, + {63,10}, {63,11}, {71,117}, {63,12}, {63,13}, {63,14}, {63,15}, {63,16}, + {63,17}, {63,18}, {63,19}, {63,20}, {63,21}, {63,22}, {63,23}, {63,24}, + {63,25}, {63,26}, {63,33}, {63,34}, {63,35}, {63,36}, {63,37}, {63,38}, + {63,39}, {63,40}, {63,41}, {63,42}, {63,43}, {63,44}, {63,45}, {63,46}, + {63,47}, {63,48}, {63,49}, {63,50}, {63,51}, {71,118}, {63,52}, {63,53}, + {63,54}, {71,119}, {63,55}, {63,56}, {63,57}, {71,120}, {63,58}, {63,65}, + {63,66}, {63,67}, {63,68}, {63,69}, {63,70}, {71,121}, {63,71}, {63,72}, + {71,122}, {63,73}, {63,74}, {63,75}, {63,76}, {63,77}, {63,78}, {63,79}, + {63,80}, {71,123}, {63,81}, {63,82}, {63,83}, {71,124}, {63,84}, {63,85}, + {63,86}, {71,125}, {63,87}, {63,88}, {63,89}, {63,90}, {63,91}, {63,92}, + {63,93}, {71,126}, {63,94}, {63,95}, {71,127}, {63,96}, {71,128}, {64,1}, + {64,2}, {64,3}, {64,4}, {64,5}, {64,6}, {71,129}, {64,7}, {64,8}, {64,9}, + {71,130}, {64,10}, {64,11}, {64,12}, {71,131}, {64,13}, {64,14}, {64,15}, + {64,16}, {64,17}, {64,18}, {64,19}, {71,132}, {71,133}, {64,20}, {71,134}, + {64,21}, {64,22}, {64,23}, {64,24}, {64,25}, {64,26}, {64,33}, {64,34}, + {64,35}, {64,36}, {64,37}, {64,38}, {64,39}, {64,40}, {64,41}, {64,42}, + {64,43}, {64,44}, {64,45}, {64,46}, {64,47}, {64,48}, {64,49}, {64,50}, + {64,51}, {64,52}, {64,53}, {64,54}, {64,55}, {64,56}, {64,57}, {64,58}, + {64,65}, {64,66}, {64,67}, {64,68}, {71,135}, {71,136}, {64,69}, {64,70}, + {71,137}, {64,71}, {64,72}, {64,73}, {71,138}, {64,74}, {64,75}, {64,76}, + {64,77}, {64,78}, {64,79}, {64,80}, {71,139}, {71,140}, {64,81}, {71,141}, + {64,82}, {71,142}, {64,83}, {64,84}, {64,85}, {64,86}, {64,87}, {64,88}, + {71,143}, {71,144}, {64,89}, {64,90}, {71,145}, {64,91}, {64,92}, {64,93}, + {71,146}, {64,94}, {64,95}, {64,96}, {65,1}, {71,147}, {65,2}, {65,3}, + {71,148}, {71,149}, {65,4}, {71,150}, {65,5}, {71,151}, {65,6}, {65,7}, + {65,8}, {65,9}, {65,10}, {65,11}, {71,152}, {71,153}, {65,12}, {65,13}, + {71,154}, {65,14}, {65,15}, {65,16}, {71,155}, {65,17}, {65,18}, {65,19}, + {65,20}, {65,21}, {65,22}, {65,23}, {71,156}, {71,157}, {65,24}, {71,158}, + {71,159}, {71,160}, {65,25}, {65,26}, {65,33}, {65,34}, {65,35}, {65,36}, + {71,161}, {65,37}, {65,38}, {65,39}, {65,40}, {65,41}, {65,42}, {65,43}, + {65,44}, {65,45}, {65,46}, {65,47}, {65,48}, {65,49}, {65,50}, {65,51}, + {65,52}, {65,53}, {65,54}, {65,55}, {65,56}, {71,162}, {65,57}, {65,58}, + {65,65}, {65,66}, {65,67}, {65,68}, {65,69}, {65,70}, {65,71}, {65,72}, + {65,73}, {65,74}, {65,75}, {65,76}, {65,77}, {65,78}, {65,79}, {65,80}, + {65,81}, {65,82}, {65,83}, {65,84}, {65,85}, {65,86}, {65,87}, {65,88}, + {65,89}, {65,90}, {65,91}, {65,92}, {65,93}, {65,94}, {65,95}, {65,96}, + {71,163}, {71,164}, {66,1}, {66,2}, {71,165}, {66,3}, {66,4}, {66,5}, + {71,166}, {66,6}, {71,167}, {66,7}, {66,8}, {66,9}, {66,10}, {66,11}, + {71,168}, {71,169}, {66,12}, {71,170}, {66,13}, {71,171}, {66,14}, + {66,15}, {66,16}, {66,17}, {66,18}, {66,19}, {71,172}, {71,173}, {66,20}, + {66,21}, {71,174}, {66,22}, {66,23}, {66,24}, {71,175}, {66,25}, {66,26}, + {66,33}, {66,34}, {66,35}, {66,36}, {66,37}, {71,176}, {71,177}, {66,38}, + {71,178}, {66,39}, {71,179}, {66,40}, {66,41}, {66,42}, {66,43}, {66,44}, + {66,45}, {71,180}, {71,181}, {66,46}, {66,47}, {71,182}, {66,48}, {66,49}, + {66,50}, {71,183}, {66,51}, {66,52}, {66,53}, {66,54}, {66,55}, {66,56}, + {66,57}, {71,184}, {71,185}, {66,58}, {71,186}, {71,187}, {71,188}, + {66,65}, {66,66}, {66,67}, {66,68}, {66,69}, {66,70}, {71,189}, {66,71}, + {66,72}, {66,73}, {71,190}, {66,74}, {66,75}, {66,76}, {72,97}, {66,77}, + {66,78}, {66,79}, {66,80}, {66,81}, {66,82}, {66,83}, {66,84}, {72,98}, + {66,85}, {66,86}, {66,87}, {66,88}, {66,89}, {66,90}, {66,91}, {66,92}, + {66,93}, {66,94}, {72,99}, {72,100}, {66,95}, {66,96}, {72,101}, {67,1}, + {67,2}, {67,3}, {72,102}, {67,4}, {67,5}, {67,6}, {67,7}, {72,103}, + {67,8}, {67,9}, {72,104}, {72,105}, {67,10}, {72,106}, {67,11}, {72,107}, + {67,12}, {67,13}, {67,14}, {72,108}, {67,15}, {67,16}, {72,109}, {72,110}, + {67,17}, {67,18}, {72,111}, {67,19}, {67,20}, {67,21}, {72,112}, {67,22}, + {67,23}, {67,24}, {67,25}, {67,26}, {67,33}, {67,34}, {67,35}, {67,36}, + {67,37}, {72,113}, {67,38}, {72,114}, {67,39}, {67,40}, {67,41}, {67,42}, + {67,43}, {67,44}, {72,115}, {72,116}, {67,45}, {67,46}, {72,117}, {67,47}, + {67,48}, {67,49}, {67,50}, {67,51}, {67,52}, {67,53}, {67,54}, {67,55}, + {67,56}, {67,57}, {67,58}, {67,65}, {67,66}, {72,118}, {67,67}, {72,119}, + {67,68}, {67,69}, {67,70}, {67,71}, {67,72}, {67,73}, {72,120}, {72,121}, + {67,74}, {67,75}, {72,122}, {67,76}, {67,77}, {67,78}, {72,123}, {67,79}, + {67,80}, {67,81}, {67,82}, {67,83}, {67,84}, {67,85}, {67,86}, {72,124}, + {67,87}, {72,125}, {67,88}, {72,126}, {67,89}, {67,90}, {67,91}, {67,92}, + {67,93}, {67,94}, {72,127}, {67,95}, {67,96}, {68,1}, {72,128}, {68,2}, + {68,3}, {68,4}, {72,129}, {68,5}, {68,6}, {68,7}, {68,8}, {68,9}, {68,10}, + {68,11}, {68,12}, {72,130}, {68,13}, {72,131}, {68,14}, {68,15}, {68,16}, + {68,17}, {68,18}, {68,19}, {68,20}, {68,21}, {72,132}, {72,133}, {68,22}, + {68,23}, {72,134}, {68,24}, {68,25}, {68,26}, {72,135}, {68,33}, {68,34}, + {68,35}, {68,36}, {72,136}, {68,37}, {68,38}, {72,137}, {68,39}, {68,40}, + {72,138}, {68,41}, {72,139}, {68,42}, {68,43}, {68,44}, {68,45}, {68,46}, + {68,47}, {72,140}, {68,48}, {68,49}, {68,50}, {72,141}, {68,51}, {68,52}, + {68,53}, {72,142}, {68,54}, {68,55}, {68,56}, {68,57}, {68,58}, {68,65}, + {68,66}, {72,143}, {68,67}, {68,68}, {68,69}, {68,70}, {72,144}, {68,71}, + {68,72}, {68,73}, {68,74}, {68,75}, {68,76}, {72,145}, {72,146}, {68,77}, + {68,78}, {72,147}, {68,79}, {68,80}, {68,81}, {72,148}, {68,82}, {68,83}, + {68,84}, {68,85}, {68,86}, {68,87}, {68,88}, {68,89}, {68,90}, {68,91}, + {68,92}, {68,93}, {72,149}, {68,94}, {68,95}, {68,96}, {69,1}, {69,2}, + {69,3}, {72,150}, {72,151}, {69,4}, {69,5}, {72,152}, {69,6}, {69,7}, + {69,8}, {72,153}, {69,9}, {69,10}, {69,11}, {69,12}, {69,13}, {69,14}, + {69,15}, {72,154}, {72,155}, {69,16}, {72,156}, {69,17}, {72,157}, + {69,18}, {69,19}, {69,20}, {69,21}, {69,22}, {69,23}, {72,158}, {72,159}, + {69,24}, {69,25}, {72,160}, {69,26}, {69,33}, {69,34}, {72,161}, {69,35}, + {69,36}, {69,37}, {69,38}, {69,39}, {69,40}, {69,41}, {72,162}, {69,42}, + {69,43}, {72,163}, {69,44}, {72,164}, {69,45}, {69,46}, {69,47}, {69,48}, + {69,49}, {69,50}, {72,165}, {72,166}, {69,51}, {69,52}, {72,167}, {69,53}, + {72,168}, {72,169}, {72,170}, {72,171}, {69,54}, {69,55}, {69,56}, + {69,57}, {69,58}, {69,65}, {72,172}, {72,173}, {69,66}, {72,174}, {69,67}, + {72,175}, {69,68}, {69,69}, {69,70}, {72,176}, {69,71}, {69,72}, {72,177}, + {69,73}, {69,74}, {69,75}, {72,178}, {69,76}, {69,77}, {69,78}, {72,179}, + {69,79}, {69,80}, {69,81}, {69,82}, {69,83}, {69,84}, {69,85}, {72,180}, + {72,181}, {69,86}, {69,87}, {69,88}, {72,182}, {69,89}, {69,90}, {69,91}, + {69,92}, {69,93}, {69,94}, {72,183}, {72,184}, {69,95}, {69,96}, {72,185}, + {70,1}, {70,2}, {70,3}, {72,186}, {70,4}, {70,5}, {70,6}, {70,7}, {70,8}, + {70,9}, {70,10}, {72,187}, {72,188}, {70,11}, {72,189}, {70,12}, {72,190}, + {70,13}, {70,14}, {70,15}, {70,16}, {70,17}, {70,18}, {75,144}, {75,150}, + {75,167}, {77,143}, {77,168}, {78,109}, {79,187}, {80,98}, {80,120}, + {80,144}, {80,157}, {81,148}, {81,149}, {81,152}, {81,155}, {81,156}, + {81,157}, {81,158}, {81,159}, {81,160}, {81,162}, {81,163}, {81,164}, + {81,165}, {81,166}, {81,168}, {81,169}, {81,170}, {81,171}, {81,173}, + {81,175}, {81,176}, {81,178}, {81,182}, {81,186}, {81,188}, {81,189}, + {81,190}, {82,98}, {82,99}, {82,103}, {82,104}, {82,105}, {82,106}, + {82,107}, {82,109}, {82,114}, {82,126}, {82,130}, {82,131}, {82,132}, + {82,134}, {82,135}, {82,136}, {82,137}, {82,138}, {82,139}, {82,141}, + {82,142}, {82,143}, {82,144}, {82,145}, {82,146}, {82,147}, {82,148}, + {82,149}, {82,150}, {82,151}, {82,153}, {82,154}, {82,158}, {82,159}, + {82,161}, {82,162}, {82,164}, {82,165}, {82,166}, {82,167}, {82,168}, + {82,169}, {82,170}, {82,171}, {82,176}, {82,177}, {82,178}, {82,179}, + {82,180}, {82,181}, {82,183}, {82,184}, {84,166}, {84,188}, {85,101}, + {85,107}, {85,110}, {86,120}, {86,141}, {87,139}, {87,164}, {91,133}, + {91,164}, {92,101}, {93,101}, {93,149}, {93,180}, {94,188}, {94,190}, + {95,115}, {95,161}, {95,168}, {96,177}, {97,109}, {97,173}, {99,181}, + {100,97}, {100,105}, {101,110}, {101,113}, {101,114}, {101,121}, {101,123}, + {101,124}, {101,132}, {101,142}, {101,144}, {101,146}, {101,150}, {101,186}, + {101,187}, {101,188}, {101,190}, {102,97}, {102,100}, {102,103}, {102,109}, + {102,111}, {102,112}, {102,113}, {102,115}, {102,119}, {102,120}, {102,124}, + {102,132}, {102,134}, {102,135}, {102,138}, {102,146}, {102,150}, {102,153}, + {102,156}, {102,159}, {102,161}, {102,164}, {102,165}, {102,166}, {102,168}, + {102,170}, {102,171}, {102,172}, {102,175}, {102,177}, {102,178}, {102,181}, + {102,182}, {102,183}, {102,185}, {103,97}, {103,102}, {103,105}, {103,106}, + {103,108}, {103,109}, {103,112}, {103,127}, {103,129}, {103,134}, {103,135}, + {103,139}, {103,141}, {103,143}, {103,144}, {103,147}, {103,159}, {103,164}, + {103,166}, {103,183}, {104,167}, {104,168}, {104,176}, {104,177}, {104,183}, + {104,185}, {104,187}, {104,190}, {105,103}, {105,108}, {105,140}, {105,183}, + {106,129}, {106,165}, {106,180}, {106,183}, {106,188}, {106,190}, {107,100}, + {107,103}, {107,105}, {107,106}, {107,122}, {107,123}, {107,125}, {107,129}, + {107,130}, {107,134}, {107,135}, {107,140}, {107,143}, {107,144}, {107,145}, + {107,146}, {107,152}, {108,102}, {108,103}, {108,106}, {108,111}, {108,112}, + {108,113}, {108,114}, {108,117}, {108,120}, {108,122}, {108,128}, {108,129}, + {108,133}, {108,134}, {108,137}, {108,138}, {108,149}, {108,157}, {108,158}, + {108,161}, {108,164}, {108,167}, {108,168}, {108,183}, {108,184}, {108,186}, + {109,97}, {109,98}, {109,99}, {109,174}, {110,155}, {114,125}, {114,186}, + {115,113}, {116,103}, {116,174}, {118,180}, {118,182}, {119,120}, {119,136}, + {119,147}, {120,155}, {120,176}, {122,97}, {122,98}, {122,166}, {124,105}, + {35,97}, {35,98}, {35,99}, {35,100}, {35,101}, {35,102}, {35,103}, + {35,104}, {35,105}, {35,106}, {35,107}, {35,108}, {35,109}, {35,110}, + {35,111}, {35,112}, {35,113}, {35,114}, {35,115}, {35,116}, {35,117}, + {35,118}, {35,119}, {35,120}, {35,121}, {35,122}, {35,123}, {35,124}, + {35,125}, {35,126}, {35,127}, {35,128}, {35,129}, {35,130}, {35,131}, + {35,132}, {35,133}, {35,134}, {35,135}, {35,136}, {35,137}, {35,138}, + {35,139}, {35,140}, {35,141}, {35,142}, {35,143}, {35,144}, {35,145}, + {35,146}, {35,147}, {35,148}, {35,149}, {35,150}, {35,151}, {35,152}, + {35,153}, {35,154}, {35,155}, {33,108}, {35,157}, {35,158}, {35,159}, + {35,160}, {35,161}, {35,162}, {35,163}, {35,164}, {35,165}, {35,166}, + {35,167}, {35,168}, {35,169}, {35,170}, {35,171}, {35,172}, {35,173}, + {35,174}, {35,175}, {35,176}, {35,177}, {35,178}, {35,179}, {35,180}, + {35,181}, {35,182}, {35,183}, {35,184}, {35,185}, {35,186}, {35,187}, + {35,188}, {35,189}, {34,102}, {33,139}, {33,140}, {33,190}, {35,190}, + {33,141}, {35,156} +}; + +/* This returns ERROR if the code point doesn't exist. */ +long int cp949_to_unicode(int r, int c) +{ + assert(r >= 0 && r < 128); + assert(c >= 0 && c < 192); + return cp949_forward[r][c]; +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_cp949(long int unicode, int *r, int *c) +{ + int rr, cc; + long int uu; + int i, j, k; + + i = -1; + j = lenof(cp949_backward); + while (j - i > 1) { + k = (i + j) / 2; + rr = cp949_backward[k].r; + cc = cp949_backward[k].c; + uu = cp949_forward[rr][cc]; + if (unicode > uu) + i = k; + else if (unicode < uu) + j = k; + else { + *r = rr; + *c = cc; + return 1; + } + } + return 0; +} + +/* Functions dealing with the KS X 1001 square subset */ +long int ksx1001_to_unicode(int r, int c) +{ + assert(r >= 0 && r < 94); + assert(c >= 0 && c < 94); + return cp949_forward[r+0x21][c+0x61]; +} + +/* This one returns 1 on success, 0 if the code point doesn't exist. */ +int unicode_to_ksx1001(long int unicode, int *r, int *c) +{ + int rr, cc; + if (!unicode_to_cp949(unicode, &rr, &cc)) + return 0; + rr -= 0x21; + cc -= 0x61; + if (rr < 0 || rr >= 94 || cc < 0 || cc >= 94) + return 0; + *r = rr; + *c = cc; + return 1; +} + +#ifdef TESTMODE + +#include <stdio.h> + +int main(void) +{ + int r, c, rr, cc, ret; + long int u, uu; + + for (r = 0; r < 128; r++) { + for (c = 0; c < 192; c++) { + u = cp949_to_unicode(r, c); + if (u != ERROR) { + ret = unicode_to_cp949(u, &rr, &cc); + if (!ret) + printf("(%d,%d) -> U-%08lx but didn't convert back\n", + r, c, u); + else if (rr != r || cc != c) + printf("(%d,%d) -> U-%08lx -> (%d,%d)\n", + r, c, u, rr, cc); + } + } + } + + for (u = 0; u < 0x10000L; u++) { + ret = unicode_to_cp949(u, &r, &c); + if (ret) { + uu = cp949_to_unicode(r, c); + if (uu == ERROR) + printf("U-%08lx -> (%d,%d) but didn't convert back\n", + u, r, c); + else if (uu != u) + printf("U-%08lx -> (%d,%d) -> U-%08lx\n", u, r, c, uu); + } + } + + return 0; +} + +#endif diff --git a/app/tools/halibut/charset/locale.c b/app/tools/halibut/charset/locale.c new file mode 100644 index 0000000..6710d1b --- /dev/null +++ b/app/tools/halibut/charset/locale.c @@ -0,0 +1,93 @@ +/* + * locale.c: try very hard to figure out the libcharset charset + * identifier corresponding to the current C library locale. + * + * This function works by calling nl_langinfo(CODESET) if + * available; failing that, it will try to figure it out manually + * by examining the locale environment variables. Code for the + * latter is adapted from Markus Kuhn's public-domain + * implementation of nl_langinfo(CODESET), available at + * + * http://www.cl.cam.ac.uk/~mgk25/ucs/langinfo.c + */ + +#include <stdlib.h> +#include <string.h> +#include "charset.h" + +#ifdef HAS_LANGINFO_CODESET +#include "langinfo.h" +#endif + +int charset_from_locale(void) +{ + char *l, *p; + +#ifdef HAS_LANGINFO_CODESET + int charset; + char const *csname; + + csname = nl_langinfo(CODESET); + if (csname && + (charset = charset_from_localenc(csname)) != CS_NONE) + return charset; +#endif + + if (((l = getenv("LC_ALL")) && *l) || + ((l = getenv("LC_CTYPE")) && *l) || + ((l = getenv("LANG")) && *l)) { + /* check standardized locales */ + if (!strcmp(l, "C") || !strcmp(l, "POSIX")) + return CS_ASCII; + /* check for encoding name fragment */ + if (strstr(l, "UTF") || strstr(l, "utf")) + return CS_UTF8; + if ((p = strstr(l, "8859-"))) { + char buf[16]; + int charset; + + memcpy(buf, "ISO-8859-\0\0", 12); + p += 5; + if ((*p) >= '0' && (*p) <= '9') { + buf[9] = *p++; + if ((*p) >= '0' && (*p) <= '9') buf[10] = *p++; + if ((charset = charset_from_localenc(buf)) != CS_NONE) + return charset; + } + } + if (strstr(l, "KOI8-RU")) return CS_KOI8_RU; + if (strstr(l, "KOI8-R")) return CS_KOI8_R; + if (strstr(l, "KOI8-U")) return CS_KOI8_U; + /* if (strstr(l, "620")) return "TIS-620"; */ + if (strstr(l, "2312")) return CS_EUC_CN; + /* if (strstr(l, "HKSCS")) return "Big5HKSCS"; */ + if (strstr(l, "Big5") || strstr(l, "BIG5")) return CS_BIG5; + /* if (strstr(l, "GBK")) return "GBK"; */ + /* if (strstr(l, "18030")) return "GB18030"; */ + if (strstr(l, "Shift_JIS") || strstr(l, "SJIS")) return CS_SHIFT_JIS; + /* check for conclusive modifier */ + if (strstr(l, "euro")) return CS_ISO8859_15; + /* check for language (and perhaps country) codes */ + if (strstr(l, "zh_TW")) return CS_BIG5; + /* if (strstr(l, "zh_HK")) return "Big5HKSCS"; */ + if (strstr(l, "zh")) return CS_EUC_CN; + if (strstr(l, "ja")) return CS_EUC_JP; + if (strstr(l, "ko")) return CS_EUC_KR; + if (strstr(l, "ru")) return CS_KOI8_R; + if (strstr(l, "uk")) return CS_KOI8_U; + if (strstr(l, "pl") || strstr(l, "hr") || + strstr(l, "hu") || strstr(l, "cs") || + strstr(l, "sk") || strstr(l, "sl")) return CS_ISO8859_2; + if (strstr(l, "eo") || strstr(l, "mt")) return CS_ISO8859_3; + if (strstr(l, "el")) return CS_ISO8859_7; + if (strstr(l, "he")) return CS_ISO8859_8; + if (strstr(l, "tr")) return CS_ISO8859_9; + /* if (strstr(l, "th")) return "TIS-620"; */ + if (strstr(l, "lt")) return CS_ISO8859_13; + if (strstr(l, "cy")) return CS_ISO8859_14; + if (strstr(l, "ro")) return CS_ISO8859_2; /* or ISO-8859-16 */ + if (strstr(l, "am") || strstr(l, "vi")) return CS_UTF8; + return CS_ISO8859_1; + } + return CS_ASCII; +} diff --git a/app/tools/halibut/charset/localenc.c b/app/tools/halibut/charset/localenc.c new file mode 100644 index 0000000..115ea7c --- /dev/null +++ b/app/tools/halibut/charset/localenc.c @@ -0,0 +1,174 @@ +/* + * local.c - translate our internal character set codes to and from + * our own set of plausibly legible character-set names. Also + * provides a canonical name for each encoding (useful for software + * announcing what character set it will be using), and a set of + * enumeration functions which return a list of supported + * encodings one by one. + * + * Also in this table are other ways people might plausibly refer + * to a charset (for example, Win1252 as well as CP1252). Where + * more than one string is given for a particular character set, + * the first one is the canonical one returned by + * charset_to_localenc. + * + * charset_from_localenc will attempt all other text translations + * as well as this table, to maximise the number of different ways + * you can select a supported charset. + */ + +#include <ctype.h> +#include "charset.h" +#include "internal.h" + +static const struct { + const char *name; + int charset; + int return_in_enum; /* enumeration misses some charsets */ +} localencs[] = { + { "<UNKNOWN>", CS_NONE, 0 }, + { "ASCII", CS_ASCII, 1 }, + { "BS 4730", CS_BS4730, 1 }, + { "ISO-8859-1", CS_ISO8859_1, 1 }, + { "ISO-8859-1 with X11 line drawing", CS_ISO8859_1_X11, 0 }, + { "ISO-8859-2", CS_ISO8859_2, 1 }, + { "ISO-8859-3", CS_ISO8859_3, 1 }, + { "ISO-8859-4", CS_ISO8859_4, 1 }, + { "ISO-8859-5", CS_ISO8859_5, 1 }, + { "ISO-8859-6", CS_ISO8859_6, 1 }, + { "ISO-8859-7", CS_ISO8859_7, 1 }, + { "ISO-8859-8", CS_ISO8859_8, 1 }, + { "ISO-8859-9", CS_ISO8859_9, 1 }, + { "ISO-8859-10", CS_ISO8859_10, 1 }, + { "ISO-8859-11", CS_ISO8859_11, 1 }, + { "ISO-8859-13", CS_ISO8859_13, 1 }, + { "ISO-8859-14", CS_ISO8859_14, 1 }, + { "ISO-8859-15", CS_ISO8859_15, 1 }, + { "ISO-8859-16", CS_ISO8859_16, 1 }, + { "CP437", CS_CP437, 1 }, + { "CP850", CS_CP850, 1 }, + { "CP866", CS_CP866, 1 }, + { "CP1250", CS_CP1250, 1 }, + { "Win1250", CS_CP1250, 0 }, + { "CP1251", CS_CP1251, 1 }, + { "Win1251", CS_CP1251, 0 }, + { "CP1252", CS_CP1252, 1 }, + { "Win1252", CS_CP1252, 0 }, + { "CP1253", CS_CP1253, 1 }, + { "Win1253", CS_CP1253, 0 }, + { "CP1254", CS_CP1254, 1 }, + { "Win1254", CS_CP1254, 0 }, + { "CP1255", CS_CP1255, 1 }, + { "Win1255", CS_CP1255, 0 }, + { "CP1256", CS_CP1256, 1 }, + { "Win1256", CS_CP1256, 0 }, + { "CP1257", CS_CP1257, 1 }, + { "Win1257", CS_CP1257, 0 }, + { "CP1258", CS_CP1258, 1 }, + { "Win1258", CS_CP1258, 0 }, + { "KOI8-R", CS_KOI8_R, 1 }, + { "KOI8-U", CS_KOI8_U, 1 }, + { "KOI8-RU", CS_KOI8_RU, 1 }, + { "JIS X 0201", CS_JISX0201, 1 }, + { "JIS-X-0201", CS_JISX0201, 0 }, + { "JIS_X_0201", CS_JISX0201, 0 }, + { "JISX0201", CS_JISX0201, 0 }, + { "Mac Roman", CS_MAC_ROMAN, 1 }, + { "Mac Turkish", CS_MAC_TURKISH, 1 }, + { "Mac Croatian", CS_MAC_CROATIAN, 1 }, + { "Mac Iceland", CS_MAC_ICELAND, 1 }, + { "Mac Romanian", CS_MAC_ROMANIAN, 1 }, + { "Mac Greek", CS_MAC_GREEK, 1 }, + { "Mac Cyrillic", CS_MAC_CYRILLIC, 1 }, + { "Mac Thai", CS_MAC_THAI, 1 }, + { "Mac Centeuro", CS_MAC_CENTEURO, 1 }, + { "Mac Symbol", CS_MAC_SYMBOL, 1 }, + { "Mac Dingbats", CS_MAC_DINGBATS, 1 }, + { "Mac Roman (old)", CS_MAC_ROMAN_OLD, 0 }, + { "Mac Croatian (old)", CS_MAC_CROATIAN_OLD, 0 }, + { "Mac Iceland (old)", CS_MAC_ICELAND_OLD, 0 }, + { "Mac Romanian (old)", CS_MAC_ROMANIAN_OLD, 0 }, + { "Mac Greek (old)", CS_MAC_GREEK_OLD, 0 }, + { "Mac Cyrillic (old)", CS_MAC_CYRILLIC_OLD, 0 }, + { "Mac Ukraine", CS_MAC_UKRAINE, 1 }, + { "Mac VT100", CS_MAC_VT100, 1 }, + { "Mac VT100 (old)", CS_MAC_VT100_OLD, 0 }, + { "VISCII", CS_VISCII, 1 }, + { "HP ROMAN8", CS_HP_ROMAN8, 1 }, + { "DEC MCS", CS_DEC_MCS, 1 }, + { "DEC graphics", CS_DEC_GRAPHICS, 1 }, + { "DEC-graphics", CS_DEC_GRAPHICS, 0 }, + { "DECgraphics", CS_DEC_GRAPHICS, 0 }, + { "UTF-8", CS_UTF8, 1 }, + { "UTF-7", CS_UTF7, 1 }, + { "UTF-7-conservative", CS_UTF7_CONSERVATIVE, 0 }, + { "EUC-CN", CS_EUC_CN, 1 }, + { "EUC-KR", CS_EUC_KR, 1 }, + { "EUC-JP", CS_EUC_JP, 1 }, + { "EUC-TW", CS_EUC_TW, 1 }, + { "ISO-2022-JP", CS_ISO2022_JP, 1 }, + { "ISO-2022-KR", CS_ISO2022_KR, 1 }, + { "Big5", CS_BIG5, 1 }, + { "Shift-JIS", CS_SHIFT_JIS, 1 }, + { "HZ", CS_HZ, 1 }, + { "UTF-16BE", CS_UTF16BE, 1 }, + { "UTF-16LE", CS_UTF16LE, 1 }, + { "UTF-16", CS_UTF16, 1 }, + { "CP949", CS_CP949, 1 }, + { "PDFDocEncoding", CS_PDF, 1 }, + { "StandardEncoding", CS_PSSTD, 1 }, + { "COMPOUND_TEXT", CS_CTEXT, 1 }, + { "COMPOUND-TEXT", CS_CTEXT, 0 }, + { "COMPOUND TEXT", CS_CTEXT, 0 }, + { "COMPOUNDTEXT", CS_CTEXT, 0 }, + { "CTEXT", CS_CTEXT, 0 }, + { "ISO-2022", CS_ISO2022, 1 }, + { "ISO2022", CS_ISO2022, 0 }, +}; + +const char *charset_to_localenc(int charset) +{ + int i; + + for (i = 0; i < (int)lenof(localencs); i++) + if (charset == localencs[i].charset) + return localencs[i].name; + + return NULL; /* not found */ +} + +int charset_from_localenc(const char *name) +{ + int i; + + if ( (i = charset_from_mimeenc(name)) != CS_NONE) + return i; + if ( (i = charset_from_xenc(name)) != CS_NONE) + return i; + + for (i = 0; i < (int)lenof(localencs); i++) { + const char *p, *q; + p = name; + q = localencs[i].name; + while (*p || *q) { + if (tolower(*p) != tolower(*q)) + break; + p++; q++; + } + if (!*p && !*q) + return localencs[i].charset; + } + + return CS_NONE; /* not found */ +} + +int charset_localenc_nth(int n) +{ + int i; + + for (i = 0; i < (int)lenof(localencs); i++) + if (localencs[i].return_in_enum && !n--) + return localencs[i].charset; + + return CS_NONE; /* end of list */ +} diff --git a/app/tools/halibut/charset/macenc.c b/app/tools/halibut/charset/macenc.c new file mode 100644 index 0000000..584b034 --- /dev/null +++ b/app/tools/halibut/charset/macenc.c @@ -0,0 +1,169 @@ +/* $Id: macenc.c,v 1.1 2007-04-07 07:39:13 m_fischer Exp $ */ +/* + * Copyright (c) 2003 Ben Harris + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +/* + * macenc.c -- Convert a Mac OS script/region/font combination to our + * internal charset code. + */ + +#include <string.h> + +#include "charset.h" +#include "internal.h" + +/* + * These are defined by Mac OS's <Script.h>, but we'd like to be + * independent of that. + */ + +#define smRoman 0 +#define smJapanese 1 +#define smTradChinese 2 +#define smKorean 3 +#define smArabic 4 +#define smHebrew 5 +#define smCyrillic 7 +#define smDevenagari 9 +#define smGurmukhi 10 +#define smGujurati 11 +#define smThai 21 +#define smSimpChinese 25 +#define smTibetan 26 +#define smEthiopic 28 +#define smCentralEuroRoman 29 + +#define verGreece 20 +#define verIceland 21 +#define verTurkey 24 +#define verYugoCroatian 25 +#define verRomania 39 +#define verFaroeIsl 47 +#define verIran 48 +#define verRussia 49 +#define verSlovenian 66 +#define verCroatia 68 +#define verBulgaria 72 +#define verScottishGaelic 75 +#define verManxGaelic 76 +#define verBreton 77 +#define verNunavut 78 +#define verWelsh 79 +#define verIrishGaelicScript 81 + +static const struct { + int script; + int region; + int sysvermin; + char const *fontname; + int charset; +} macencs[] = { + { smRoman, -1, 0x850, "VT100", CS_MAC_VT100 }, + { smRoman, -1, 0, "VT100", CS_MAC_VT100_OLD }, + /* + * From here on, this table is largely derived from + * <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/README.TXT>, + * with _OLD version added based on the comments in individual + * mapping files. + */ + { smRoman, -1, 0, "Symbol", CS_MAC_SYMBOL }, + { smRoman, -1, 0, "Zapf Dingbats", CS_MAC_DINGBATS }, + { smRoman, verTurkey, 0, NULL, CS_MAC_TURKISH }, + { smRoman, verYugoCroatian, 0x850, NULL, CS_MAC_CROATIAN }, + { smRoman, verYugoCroatian, 0, NULL, CS_MAC_CROATIAN_OLD }, + { smRoman, verSlovenian, 0x850, NULL, CS_MAC_CROATIAN }, + { smRoman, verSlovenian, 0, NULL, CS_MAC_CROATIAN_OLD }, + { smRoman, verCroatia, 0x850, NULL, CS_MAC_CROATIAN }, + { smRoman, verCroatia, 0, NULL, CS_MAC_CROATIAN_OLD }, + { smRoman, verIceland, 0x850, NULL, CS_MAC_ICELAND }, + { smRoman, verIceland, 0, NULL, CS_MAC_ICELAND_OLD }, + { smRoman, verFaroeIsl, 0x850, NULL, CS_MAC_ICELAND }, + { smRoman, verFaroeIsl, 0, NULL, CS_MAC_ICELAND_OLD }, + { smRoman, verRomania, 0x850, NULL, CS_MAC_ROMANIAN }, + { smRoman, verRomania, 0, NULL, CS_MAC_ROMANIAN_OLD }, +#if 0 /* No mapping table on ftp.unicode.org */ + { smRoman, verIreland, 0x850, NULL, CS_MAC_CELTIC }, + { smRoman, verIreland, 0, NULL, CS_MAC_CELTIC_OLD }, + { smRoman, verScottishGaelic, 0x850, NULL, CS_MAC_CELTIC }, + { smRoman, verScottishGaelic, 0, NULL, CS_MAC_CELTIC_OLD }, + { smRoman, verManxGaelic, 0x850, NULL, CS_MAC_CELTIC }, + { smRoman, verManxGaelic, 0, NULL, CS_MAC_CELTIC_OLD }, + { smRoman, verBreton, 0x850, NULL, CS_MAC_CELTIC }, + { smRoman, verBreton, 0, NULL, CS_MAC_CELTIC_OLD }, + { smRoman, verWelsh, 0x850, NULL, CS_MAC_CELTIC }, + { smRoman, verWelsh, 0, NULL, CS_MAC_CELTIC_OLD }, + { smRoman, verIrishGaelicScript, 0x850, NULL, CS_MAC_GAELIC }, + { smRoman, verIrishGaelicScript, 0, NULL, CS_MAC_GAELIC_OLD }, +#endif + { smRoman, verGreece, 0x922, NULL, CS_MAC_GREEK }, + { smRoman, verGreece, 0, NULL, CS_MAC_GREEK_OLD }, + { smRoman, -1, 0x850, NULL, CS_MAC_ROMAN }, + { smRoman, -1, 0, NULL, CS_MAC_ROMAN_OLD }, +#if 0 /* Multi-byte encodings, not yet supported */ + { smJapanese, -1, 0, NULL, CS_MAC_JAPANESE }, + { smTradChinese, -1, 0, NULL, CS_MAC_CHINTRAD }, + { smKorean, -1, 0, NULL, CS_MAC_KOREAN }, +#endif +#if 0 /* Bidirectional encodings, not yet supported */ + { smArabic, verIran, 0, NULL, CS_MAC_FARSI }, + { smArabic, -1, 0, NULL, CS_MAC_ARABIC }, + { smHebrew, -1, 0, NULL, CS_MAC_HEBREW }, +#endif + { smCyrillic, -1, 0x900, NULL, CS_MAC_CYRILLIC }, + { smCyrillic, verRussia, 0, NULL, CS_MAC_CYRILLIC_OLD }, + { smCyrillic, verBulgaria, 0, NULL, CS_MAC_CYRILLIC_OLD }, + { smCyrillic, -1, 0, NULL, CS_MAC_UKRAINE }, +#if 0 /* Complex Indic scripts, not yet supported */ + { smDevanagari, -1, 0, NULL, CS_MAC_DEVENAGA }, + { smGurmukhi, -1, 0, NULL, CS_MAC_GURMUKHI }, + { smGujurati, -1, 0, NULL, CS_MAC_GUJURATI }, +#endif + { smThai, -1, 0, NULL, CS_MAC_THAI }, +#if 0 /* Multi-byte encoding, not yet supported */ + { smSimpChinese, -1, 0, NULL, CS_MAC_CHINSIMP }, +#endif +#if 0 /* No mapping table on ftp.unicode.org */ + { smTibetan, -1, 0, NULL, CS_MAC_TIBETAN }, + { smEthiopic, -1, 0, NULL, CS_MAC_ETHIOPIC }, + { smEthiopic, verNanavut, 0, NULL, CS_MAC_INUIT }, +#endif + { smCentralEuroRoman, -1, 0, NULL, CS_MAC_CENTEURO }, +}; + +int charset_from_macenc(int script, int region, int sysvers, + char const *fontname) +{ + int i; + + for (i = 0; i < (int)lenof(macencs); i++) + if ((macencs[i].script == script) && + (macencs[i].region < 0 || macencs[i].region == region) && + (macencs[i].sysvermin <= sysvers) && + (macencs[i].fontname == NULL || + (fontname != NULL && strcmp(macencs[i].fontname, fontname) == 0))) + return macencs[i].charset; + + return CS_NONE; +} diff --git a/app/tools/halibut/charset/mimeenc.c b/app/tools/halibut/charset/mimeenc.c new file mode 100644 index 0000000..38b76e5 --- /dev/null +++ b/app/tools/halibut/charset/mimeenc.c @@ -0,0 +1,333 @@ +/* + * mimeenc.c - translate our internal character set codes to and + * from MIME standard character-set names. + * + */ + +#include <ctype.h> +#include "charset.h" +#include "internal.h" + +static const struct { + const char *name; + int charset; +} mimeencs[] = { + /* + * Most of these names are taken from + * + * http://www.iana.org/assignments/character-sets + * + * Where multiple encoding names map to the same encoding id + * (such as the variety of aliases for ISO-8859-1), the first + * is considered canonical and will be returned when + * translating the id to a string. + * + * I also list here a few names which aren't in the above web + * page, but which I've seen in the wild in real mail. These + * are marked with a comment saying WILD. + */ + + { "US-ASCII", CS_ASCII }, + { "ANSI_X3.4-1968", CS_ASCII }, + { "iso-ir-6", CS_ASCII }, + { "ANSI_X3.4-1986", CS_ASCII }, + { "ISO_646.irv:1991", CS_ASCII }, + { "ASCII", CS_ASCII }, + { "ISO646-US", CS_ASCII }, + { "us", CS_ASCII }, + { "IBM367", CS_ASCII }, + { "cp367", CS_ASCII }, + { "csASCII", CS_ASCII }, + { "646", CS_ASCII }, /* WILD */ + + { "BS_4730", CS_BS4730 }, + { "iso-ir-4", CS_BS4730 }, + { "ISO646-GB", CS_BS4730 }, + { "gb", CS_BS4730 }, + { "uk", CS_BS4730 }, + { "csISO4UnitedKingdom", CS_BS4730 }, + + { "ISO-8859-1", CS_ISO8859_1 }, + { "ISO8859-1", CS_ISO8859_1 }, /* WILD */ + { "iso-ir-100", CS_ISO8859_1 }, + { "ISO_8859-1", CS_ISO8859_1 }, + { "ISO_8859-1:1987", CS_ISO8859_1 }, + { "latin1", CS_ISO8859_1 }, + { "l1", CS_ISO8859_1 }, + { "IBM819", CS_ISO8859_1 }, + { "CP819", CS_ISO8859_1 }, + { "csISOLatin1", CS_ISO8859_1 }, + + { "ISO-8859-2", CS_ISO8859_2 }, + { "ISO8859-2", CS_ISO8859_2 }, /* WILD */ + { "ISO_8859-2:1987", CS_ISO8859_2 }, + { "iso-ir-101", CS_ISO8859_2 }, + { "ISO_8859-2", CS_ISO8859_2 }, + { "latin2", CS_ISO8859_2 }, + { "l2", CS_ISO8859_2 }, + { "csISOLatin2", CS_ISO8859_2 }, + + { "ISO-8859-3", CS_ISO8859_3 }, + { "ISO8859-3", CS_ISO8859_3 }, /* WILD */ + { "ISO_8859-3:1988", CS_ISO8859_3 }, + { "iso-ir-109", CS_ISO8859_3 }, + { "ISO_8859-3", CS_ISO8859_3 }, + { "latin3", CS_ISO8859_3 }, + { "l3", CS_ISO8859_3 }, + { "csISOLatin3", CS_ISO8859_3 }, + + { "ISO-8859-4", CS_ISO8859_4 }, + { "ISO8859-4", CS_ISO8859_4 }, /* WILD */ + { "ISO_8859-4:1988", CS_ISO8859_4 }, + { "iso-ir-110", CS_ISO8859_4 }, + { "ISO_8859-4", CS_ISO8859_4 }, + { "latin4", CS_ISO8859_4 }, + { "l4", CS_ISO8859_4 }, + { "csISOLatin4", CS_ISO8859_4 }, + + { "ISO-8859-5", CS_ISO8859_5 }, + { "ISO8859-5", CS_ISO8859_5 }, /* WILD */ + { "ISO_8859-5:1988", CS_ISO8859_5 }, + { "iso-ir-144", CS_ISO8859_5 }, + { "ISO_8859-5", CS_ISO8859_5 }, + { "cyrillic", CS_ISO8859_5 }, + { "csISOLatinCyrillic", CS_ISO8859_5 }, + + { "ISO-8859-6", CS_ISO8859_6 }, + { "ISO8859-6", CS_ISO8859_6 }, /* WILD */ + { "ISO_8859-6:1987", CS_ISO8859_6 }, + { "iso-ir-127", CS_ISO8859_6 }, + { "ISO_8859-6", CS_ISO8859_6 }, + { "ECMA-114", CS_ISO8859_6 }, + { "ASMO-708", CS_ISO8859_6 }, + { "arabic", CS_ISO8859_6 }, + { "csISOLatinArabic", CS_ISO8859_6 }, + + { "ISO-8859-7", CS_ISO8859_7 }, + { "ISO8859-7", CS_ISO8859_7 }, /* WILD */ + { "ISO_8859-7:1987", CS_ISO8859_7 }, + { "iso-ir-126", CS_ISO8859_7 }, + { "ISO_8859-7", CS_ISO8859_7 }, + { "ELOT_928", CS_ISO8859_7 }, + { "ECMA-118", CS_ISO8859_7 }, + { "greek", CS_ISO8859_7 }, + { "greek8", CS_ISO8859_7 }, + { "csISOLatinGreek", CS_ISO8859_7 }, + + { "ISO-8859-8", CS_ISO8859_8 }, + { "ISO8859-8", CS_ISO8859_8 }, /* WILD */ + { "ISO_8859-8:1988", CS_ISO8859_8 }, + { "iso-ir-138", CS_ISO8859_8 }, + { "ISO_8859-8", CS_ISO8859_8 }, + { "hebrew", CS_ISO8859_8 }, + { "csISOLatinHebrew", CS_ISO8859_8 }, + + { "ISO-8859-9", CS_ISO8859_9 }, + { "ISO8859-9", CS_ISO8859_9 }, /* WILD */ + { "ISO_8859-9:1989", CS_ISO8859_9 }, + { "iso-ir-148", CS_ISO8859_9 }, + { "ISO_8859-9", CS_ISO8859_9 }, + { "latin5", CS_ISO8859_9 }, + { "l5", CS_ISO8859_9 }, + { "csISOLatin5", CS_ISO8859_9 }, + + { "ISO-8859-10", CS_ISO8859_10 }, + { "ISO8859-10", CS_ISO8859_10 }, /* WILD */ + { "iso-ir-157", CS_ISO8859_10 }, + { "l6", CS_ISO8859_10 }, + { "ISO_8859-10:1992", CS_ISO8859_10 }, + { "csISOLatin6", CS_ISO8859_10 }, + { "latin6", CS_ISO8859_10 }, + + { "TIS-620", CS_ISO8859_11 }, + + { "ISO-8859-13", CS_ISO8859_13 }, + { "ISO8859-13", CS_ISO8859_13 }, /* WILD */ + + { "ISO-8859-14", CS_ISO8859_14 }, + { "ISO8859-14", CS_ISO8859_14 }, /* WILD */ + { "iso-ir-199", CS_ISO8859_14 }, + { "ISO_8859-14:1998", CS_ISO8859_14 }, + { "ISO_8859-14", CS_ISO8859_14 }, + { "latin8", CS_ISO8859_14 }, + { "iso-celtic", CS_ISO8859_14 }, + { "l8", CS_ISO8859_14 }, + + { "ISO-8859-15", CS_ISO8859_15 }, + { "ISO8859-15", CS_ISO8859_15 }, /* WILD */ + { "ISO_8859-15", CS_ISO8859_15 }, + { "Latin-9", CS_ISO8859_15 }, + + { "ISO-8859-16", CS_ISO8859_16 }, + { "ISO8859-16", CS_ISO8859_16 }, /* WILD */ + { "iso-ir-226", CS_ISO8859_16 }, + { "ISO_8859-16", CS_ISO8859_16 }, + { "ISO_8859-16:2001", CS_ISO8859_16 }, + { "latin10", CS_ISO8859_16 }, + { "l10", CS_ISO8859_16 }, + + { "IBM437", CS_CP437 }, + { "cp437", CS_CP437 }, + { "437", CS_CP437 }, + { "csPC8CodePage437", CS_CP437 }, + + { "IBM850", CS_CP850 }, + { "cp850", CS_CP850 }, + { "850", CS_CP850 }, + { "csPC850Multilingual", CS_CP850 }, + + { "IBM866", CS_CP866 }, + { "cp866", CS_CP866 }, + { "866", CS_CP866 }, + { "csIBM866", CS_CP866 }, + + { "windows-1250", CS_CP1250 }, + { "win-1250", CS_CP1250 }, /* WILD */ + + { "windows-1251", CS_CP1251 }, + { "win-1251", CS_CP1251 }, /* WILD */ + + { "windows-1252", CS_CP1252 }, + { "win-1252", CS_CP1252 }, /* WILD */ + + { "windows-1253", CS_CP1253 }, + { "win-1253", CS_CP1253 }, /* WILD */ + + { "windows-1254", CS_CP1254 }, + { "win-1254", CS_CP1254 }, /* WILD */ + + { "windows-1255", CS_CP1255 }, + { "win-1255", CS_CP1255 }, /* WILD */ + + { "windows-1256", CS_CP1256 }, + { "win-1256", CS_CP1256 }, /* WILD */ + + { "windows-1257", CS_CP1257 }, + { "win-1257", CS_CP1257 }, /* WILD */ + + { "windows-1258", CS_CP1258 }, + { "win-1258", CS_CP1258 }, /* WILD */ + + { "KOI8-R", CS_KOI8_R }, + { "csKOI8R", CS_KOI8_R }, + + { "KOI8-U", CS_KOI8_U }, + + { "KOI8-RU", CS_KOI8_RU }, /* WILD */ + + { "JIS_X0201", CS_JISX0201 }, + { "X0201", CS_JISX0201 }, + { "csHalfWidthKatakana", CS_JISX0201 }, + + { "macintosh", CS_MAC_ROMAN_OLD }, + { "mac", CS_MAC_ROMAN_OLD }, + { "csMacintosh", CS_MAC_ROMAN_OLD }, + + { "VISCII", CS_VISCII }, + { "csVISCII", CS_VISCII }, + + { "hp-roman8", CS_HP_ROMAN8 }, + { "roman8", CS_HP_ROMAN8 }, + { "r8", CS_HP_ROMAN8 }, + { "csHPRoman8", CS_HP_ROMAN8 }, + + { "DEC-MCS", CS_DEC_MCS }, + { "dec", CS_DEC_MCS }, + { "csDECMCS", CS_DEC_MCS }, + + { "UTF-8", CS_UTF8 }, + + { "UTF-7", CS_UTF7 }, + { "UNICODE-1-1-UTF-7", CS_UTF7 }, + { "csUnicode11UTF7", CS_UTF7 }, + + /* + * Quite why the EUC-CN encoding is known to MIME by the name + * of its underlying character set, I'm not entirely sure, but + * it is. Shrug. + */ + { "GB2312", CS_EUC_CN }, + { "csGB2312", CS_EUC_CN }, + + { "EUC-KR", CS_EUC_KR }, + { "csEUCKR", CS_EUC_KR }, + + { "EUC-JP", CS_EUC_JP }, + { "csEUCPkdFmtJapanese", CS_EUC_JP }, + { "Extended_UNIX_Code_Packed_Format_for_Japanese", CS_EUC_JP }, + + { "ISO-2022-JP", CS_ISO2022_JP }, + { "csISO2022JP", CS_ISO2022_JP }, + + { "ISO-2022-KR", CS_ISO2022_KR }, + { "csISO2022KR", CS_ISO2022_KR }, + + { "Big5", CS_BIG5 }, + { "csBig5", CS_BIG5 }, + { "Big-5", CS_BIG5 }, /* WILD */ + { "ChineseBig5", CS_BIG5 }, /* WILD */ + + { "Shift_JIS", CS_SHIFT_JIS }, + { "MS_Kanji", CS_SHIFT_JIS }, + { "csShiftJIS", CS_SHIFT_JIS }, + + { "HZ-GB-2312", CS_HZ }, + + { "UTF-16BE", CS_UTF16BE }, + + { "UTF-16LE", CS_UTF16LE }, + + { "UTF-16", CS_UTF16 }, + + /* + * This bit is fiddly and possibly technically incorrect; but + * rumour has it that the KSC 5601 encoding is a subset of + * Microsoft CP949, and that MS products tend to announce CP949 + * as KSC 5601 in much the same way they seem willing to + * announce CP1252 as its subset ISO 8859-1. So I cheat + * shamelessly here by letting KSC 5601 map to CP949. + */ + { "KS_C_5601-1987", CS_CP949 }, + { "iso-ir-149", CS_CP949 }, + { "KS_C_5601-1989", CS_CP949 }, + { "KSC_5601", CS_CP949 }, + { "korean", CS_CP949 }, + { "csKSC56011987", CS_CP949 }, + { "KSC5601", CS_CP949 }, /* WILD */ + +#if 0 + { "ISO-2022-JP-2", CS_ISO2022_JP_2 }, + { "csISO2022JP2", CS_ISO2022_JP_2 }, +#endif +}; + +const char *charset_to_mimeenc(int charset) +{ + int i; + + for (i = 0; i < (int)lenof(mimeencs); i++) + if (charset == mimeencs[i].charset) + return mimeencs[i].name; + + return NULL; /* not found */ +} + +int charset_from_mimeenc(const char *name) +{ + int i; + + for (i = 0; i < (int)lenof(mimeencs); i++) { + const char *p, *q; + p = name; + q = mimeencs[i].name; + while (*p || *q) { + if (tolower(*p) != tolower(*q)) + break; + p++; q++; + } + if (!*p && !*q) + return mimeencs[i].charset; + } + + return CS_NONE; /* not found */ +} diff --git a/app/tools/halibut/charset/sbcs.c b/app/tools/halibut/charset/sbcs.c new file mode 100644 index 0000000..e8be5a8 --- /dev/null +++ b/app/tools/halibut/charset/sbcs.c @@ -0,0 +1,72 @@ +/* + * sbcs.c - routines to handle single-byte character sets. + */ + +#include "charset.h" +#include "internal.h" + +/* + * The charset_spec for any single-byte character set should + * provide read_sbcs() as its read function, and its `data' field + * should be a wchar_t string constant containing the 256 entries + * of the translation table. + */ + +long int sbcs_to_unicode(const struct sbcs_data *sd, long int input_chr) +{ + return sd->sbcs2ucs[input_chr]; +} + +void read_sbcs(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + const struct sbcs_data *sd = charset->data; + + UNUSEDARG(state); + + emit(emitctx, sbcs_to_unicode(sd, input_chr)); +} + +long int sbcs_from_unicode(const struct sbcs_data *sd, long int input_chr) +{ + int i, j, k, c; + + /* + * Binary-search in the ucs2sbcs table. + */ + i = -1; + j = sd->nvalid; + while (i+1 < j) { + k = (i+j)/2; + c = sd->ucs2sbcs[k]; + if (input_chr < (long int)sd->sbcs2ucs[c]) + j = k; + else if (input_chr > (long int)sd->sbcs2ucs[c]) + i = k; + else { + return c; + } + } + return ERROR; +} + +int write_sbcs(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + const struct sbcs_data *sd = charset->data; + long int ret; + + UNUSEDARG(state); + + if (input_chr == -1) + return TRUE; /* stateless; no cleanup required */ + + ret = sbcs_from_unicode(sd, input_chr); + if (ret == ERROR) + return FALSE; + + emit(emitctx, ret); + return TRUE; +} diff --git a/app/tools/halibut/charset/sbcsdat.c b/app/tools/halibut/charset/sbcsdat.c new file mode 100644 index 0000000..03a62eb --- /dev/null +++ b/app/tools/halibut/charset/sbcsdat.c @@ -0,0 +1,4485 @@ +/* + * sbcsdat.c - data definitions for single-byte character sets. + * + * Generated by sbcsgen.pl from sbcs.dat. + * You should edit those files rather than editing this one. + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +const sbcs_data sbcsdata_CS_ASCII = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f + }, + 128 +}; +const charset_spec charset_CS_ASCII = { + CS_ASCII, read_sbcs, write_sbcs, &sbcsdata_CS_ASCII +}; + +const sbcs_data sbcsdata_CS_BS4730 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x00a3, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x203e, 0x007f, + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x24, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, + 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, + 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, + 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, + 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, + 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7f, 0x23, 0x7e + }, + 128 +}; +const charset_spec charset_CS_BS4730 = { + CS_BS4730, read_sbcs, write_sbcs, &sbcsdata_CS_BS4730 +}; + +const sbcs_data sbcsdata_CS_DEC_GRAPHICS = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x0020, + 0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1, + 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba, + 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c, + 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x007f, + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x7f, + 0x7d, 0x66, 0x67, 0x7e, 0x7b, 0x7c, 0x79, 0x7a, + 0x6f, 0x70, 0x72, 0x73, 0x62, 0x65, 0x69, 0x63, + 0x64, 0x68, 0x71, 0x78, 0x6c, 0x6b, 0x6d, 0x6a, + 0x74, 0x75, 0x77, 0x76, 0x6e, 0x61, 0x60 + }, + 127 +}; +const charset_spec charset_CS_DEC_GRAPHICS = { + CS_DEC_GRAPHICS, read_sbcs, write_sbcs, &sbcsdata_CS_DEC_GRAPHICS +}; + +const sbcs_data sbcsdata_CS_ISO8859_1 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff + }, + 256 +}; +const charset_spec charset_CS_ISO8859_1 = { + CS_ISO8859_1, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_1 +}; + +const sbcs_data sbcsdata_CS_ISO8859_2 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, + 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, + 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, + 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, + 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, + 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, + 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, + 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, + 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, + 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa4, 0xa7, 0xa8, 0xad, 0xb0, 0xb4, 0xb8, + 0xc1, 0xc2, 0xc4, 0xc7, 0xc9, 0xcb, 0xcd, 0xce, + 0xd3, 0xd4, 0xd6, 0xd7, 0xda, 0xdc, 0xdd, 0xdf, + 0xe1, 0xe2, 0xe4, 0xe7, 0xe9, 0xeb, 0xed, 0xee, + 0xf3, 0xf4, 0xf6, 0xf7, 0xfa, 0xfc, 0xfd, 0xc3, + 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, 0xc8, 0xe8, 0xcf, + 0xef, 0xd0, 0xf0, 0xca, 0xea, 0xcc, 0xec, 0xc5, + 0xe5, 0xa5, 0xb5, 0xa3, 0xb3, 0xd1, 0xf1, 0xd2, + 0xf2, 0xd5, 0xf5, 0xc0, 0xe0, 0xd8, 0xf8, 0xa6, + 0xb6, 0xaa, 0xba, 0xa9, 0xb9, 0xde, 0xfe, 0xab, + 0xbb, 0xd9, 0xf9, 0xdb, 0xfb, 0xac, 0xbc, 0xaf, + 0xbf, 0xae, 0xbe, 0xb7, 0xa2, 0xff, 0xb2, 0xbd + }, + 256 +}; +const charset_spec charset_CS_ISO8859_2 = { + CS_ISO8859_2, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_2 +}; + +const sbcs_data sbcsdata_CS_ISO8859_3 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, ERROR , 0x0124, 0x00a7, + 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, ERROR , 0x017b, + 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, + 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, ERROR , 0x017c, + 0x00c0, 0x00c1, 0x00c2, ERROR , 0x00c4, 0x010a, 0x0108, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + ERROR , 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, + 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, + 0x00e0, 0x00e1, 0x00e2, ERROR , 0x00e4, 0x010b, 0x0109, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + ERROR , 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, + 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xb0, 0xb2, + 0xb3, 0xb4, 0xb5, 0xb7, 0xb8, 0xbd, 0xc0, 0xc1, + 0xc2, 0xc4, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, + 0xcd, 0xce, 0xcf, 0xd1, 0xd2, 0xd3, 0xd4, 0xd6, + 0xd7, 0xd9, 0xda, 0xdb, 0xdc, 0xdf, 0xe0, 0xe1, + 0xe2, 0xe4, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, + 0xed, 0xee, 0xef, 0xf1, 0xf2, 0xf3, 0xf4, 0xf6, + 0xf7, 0xf9, 0xfa, 0xfb, 0xfc, 0xc6, 0xe6, 0xc5, + 0xe5, 0xd8, 0xf8, 0xab, 0xbb, 0xd5, 0xf5, 0xa6, + 0xb6, 0xa1, 0xb1, 0xa9, 0xb9, 0xac, 0xbc, 0xde, + 0xfe, 0xaa, 0xba, 0xdd, 0xfd, 0xaf, 0xbf, 0xa2, + 0xff + }, + 249 +}; +const charset_spec charset_CS_ISO8859_3 = { + CS_ISO8859_3, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_3 +}; + +const sbcs_data sbcsdata_CS_ISO8859_4 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, + 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, + 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, + 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, + 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, + 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, + 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, + 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa4, 0xa7, 0xa8, 0xad, 0xaf, 0xb0, 0xb4, + 0xb8, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc9, + 0xcb, 0xcd, 0xce, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, + 0xda, 0xdb, 0xdc, 0xdf, 0xe1, 0xe2, 0xe3, 0xe4, + 0xe5, 0xe6, 0xe9, 0xeb, 0xed, 0xee, 0xf4, 0xf5, + 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfc, 0xc0, 0xe0, + 0xa1, 0xb1, 0xc8, 0xe8, 0xd0, 0xf0, 0xaa, 0xba, + 0xcc, 0xec, 0xca, 0xea, 0xab, 0xbb, 0xa5, 0xb5, + 0xcf, 0xef, 0xc7, 0xe7, 0xd3, 0xf3, 0xa2, 0xa6, + 0xb6, 0xd1, 0xf1, 0xbd, 0xbf, 0xd2, 0xf2, 0xa3, + 0xb3, 0xa9, 0xb9, 0xac, 0xbc, 0xdd, 0xfd, 0xde, + 0xfe, 0xd9, 0xf9, 0xae, 0xbe, 0xb7, 0xff, 0xb2 + }, + 256 +}; +const charset_spec charset_CS_ISO8859_4 = { + CS_ISO8859_4, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_4 +}; + +const sbcs_data sbcsdata_CS_ISO8859_5 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xfd, 0xad, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, + 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xae, + 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, + 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, + 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, + 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, + 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, + 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, + 0xef, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfe, 0xff, 0xf0 + }, + 256 +}; +const charset_spec charset_CS_ISO8859_5 = { + CS_ISO8859_5, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_5 +}; + +const sbcs_data sbcsdata_CS_ISO8859_6 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, ERROR , ERROR , ERROR , 0x00a4, ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , 0x060c, 0x00ad, ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , 0x061b, ERROR , ERROR , ERROR , 0x061f, + ERROR , 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, + 0x0638, 0x0639, 0x063a, ERROR , ERROR , ERROR , ERROR , ERROR , + 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, + 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, + 0x0650, 0x0651, 0x0652, ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa4, 0xad, 0xac, 0xbb, 0xbf, 0xc1, 0xc2, + 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2 + }, + 211 +}; +const charset_spec charset_CS_ISO8859_6 = { + CS_ISO8859_6, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_6 +}; + +const sbcs_data sbcsdata_CS_ISO8859_7 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x2018, 0x2019, 0x00a3, ERROR , ERROR , 0x00a6, 0x00a7, + 0x00a8, 0x00a9, ERROR , 0x00ab, 0x00ac, 0x00ad, ERROR , 0x2015, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, + 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + 0x03a0, 0x03a1, ERROR , 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, + 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa3, 0xa6, 0xa7, 0xa8, 0xa9, 0xab, 0xac, + 0xad, 0xb0, 0xb1, 0xb2, 0xb3, 0xb7, 0xbb, 0xbd, + 0xb4, 0xb5, 0xb6, 0xb8, 0xb9, 0xba, 0xbc, 0xbe, + 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd1, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xaf, + 0xa1, 0xa2 + }, + 250 +}; +const charset_spec charset_CS_ISO8859_7 = { + CS_ISO8859_7, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_7 +}; + +const sbcs_data sbcsdata_CS_ISO8859_8 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, ERROR , 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , 0x2017, + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, ERROR , ERROR , 0x200e, 0x200f, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, + 0xa9, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xbb, 0xbc, 0xbd, 0xbe, 0xaa, 0xba, 0xe0, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xfd, 0xfe, 0xdf + }, + 220 +}; +const charset_spec charset_CS_ISO8859_8 = { + CS_ISO8859_8, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_8 +}; + +const sbcs_data sbcsdata_CS_ISO8859_9 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, + 0xd9, 0xda, 0xdb, 0xdc, 0xdf, 0xe0, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xff, 0xd0, 0xf0, 0xdd, 0xfd, 0xde, 0xfe + }, + 256 +}; +const charset_spec charset_CS_ISO8859_9 = { + CS_ISO8859_9, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_9 +}; + +const sbcs_data sbcsdata_CS_ISO8859_10 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, + 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, + 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, + 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, + 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, + 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, + 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa7, 0xad, 0xb0, 0xb7, 0xc1, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc9, 0xcb, 0xcd, 0xce, 0xcf, + 0xd0, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xda, 0xdb, + 0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe2, 0xe3, 0xe4, + 0xe5, 0xe6, 0xe9, 0xeb, 0xed, 0xee, 0xef, 0xf0, + 0xf3, 0xf4, 0xf5, 0xf6, 0xf8, 0xfa, 0xfb, 0xfc, + 0xfd, 0xfe, 0xc0, 0xe0, 0xa1, 0xb1, 0xc8, 0xe8, + 0xa9, 0xb9, 0xa2, 0xb2, 0xcc, 0xec, 0xca, 0xea, + 0xa3, 0xb3, 0xa5, 0xb5, 0xa4, 0xb4, 0xc7, 0xe7, + 0xa6, 0xb6, 0xff, 0xa8, 0xb8, 0xd1, 0xf1, 0xaf, + 0xbf, 0xd2, 0xf2, 0xaa, 0xba, 0xab, 0xbb, 0xd7, + 0xf7, 0xae, 0xbe, 0xd9, 0xf9, 0xac, 0xbc, 0xbd + }, + 256 +}; +const charset_spec charset_CS_ISO8859_10 = { + CS_ISO8859_10, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_10 +}; + +const sbcs_data sbcsdata_CS_ISO8859_11 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, + 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, + 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, + 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, + 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, + 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, + 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e38, 0x0e39, 0x0e3a, ERROR , ERROR , ERROR , ERROR , 0x0e3f, + 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, + 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb + }, + 248 +}; +const charset_spec charset_CS_ISO8859_11 = { + CS_ISO8859_11, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_11 +}; + +const sbcs_data sbcsdata_CS_ISO8859_13 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, + 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, + 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, + 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, + 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, + 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, + 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, + 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, + 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, + 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, + 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa2, 0xa3, 0xa4, 0xa6, 0xa7, 0xa9, 0xab, + 0xac, 0xad, 0xae, 0xb0, 0xb1, 0xb2, 0xb3, 0xb5, + 0xb6, 0xb7, 0xb9, 0xbb, 0xbc, 0xbd, 0xbe, 0xc4, + 0xc5, 0xaf, 0xc9, 0xd3, 0xd5, 0xd6, 0xd7, 0xa8, + 0xdc, 0xdf, 0xe4, 0xe5, 0xbf, 0xe9, 0xf3, 0xf5, + 0xf6, 0xf7, 0xb8, 0xfc, 0xc2, 0xe2, 0xc0, 0xe0, + 0xc3, 0xe3, 0xc8, 0xe8, 0xc7, 0xe7, 0xcb, 0xeb, + 0xc6, 0xe6, 0xcc, 0xec, 0xce, 0xee, 0xc1, 0xe1, + 0xcd, 0xed, 0xcf, 0xef, 0xd9, 0xf9, 0xd1, 0xf1, + 0xd2, 0xf2, 0xd4, 0xf4, 0xaa, 0xba, 0xda, 0xfa, + 0xd0, 0xf0, 0xdb, 0xfb, 0xd8, 0xf8, 0xca, 0xea, + 0xdd, 0xfd, 0xde, 0xfe, 0xff, 0xb4, 0xa1, 0xa5 + }, + 256 +}; +const charset_spec charset_CS_ISO8859_13 = { + CS_ISO8859_13, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_13 +}; + +const sbcs_data sbcsdata_CS_ISO8859_14 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, + 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, + 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, + 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa3, 0xa7, 0xa9, 0xad, 0xae, 0xb6, 0xc0, + 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd1, + 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xda, + 0xdb, 0xdc, 0xdd, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, + 0xec, 0xed, 0xee, 0xef, 0xf1, 0xf2, 0xf3, 0xf4, + 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, + 0xff, 0xa4, 0xa5, 0xb2, 0xb3, 0xd0, 0xf0, 0xde, + 0xfe, 0xaf, 0xa1, 0xa2, 0xa6, 0xab, 0xb0, 0xb1, + 0xb4, 0xb5, 0xb7, 0xb9, 0xbb, 0xbf, 0xd7, 0xf7, + 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0xac, 0xbc + }, + 256 +}; +const charset_spec charset_CS_ISO8859_14 = { + CS_ISO8859_14, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_14 +}; + +const sbcs_data sbcsdata_CS_ISO8859_15 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, + 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa5, 0xa7, 0xa9, 0xaa, + 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, + 0xb3, 0xb5, 0xb6, 0xb7, 0xb9, 0xba, 0xbb, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 0xbc, 0xbd, 0xa6, 0xa8, 0xbe, 0xb4, 0xb8, 0xa4 + }, + 256 +}; +const charset_spec charset_CS_ISO8859_15 = { + CS_ISO8859_15, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_15 +}; + +const sbcs_data sbcsdata_CS_ISO8859_16 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, + 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, + 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, + 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, + 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, + 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa7, 0xa9, 0xab, 0xad, 0xb0, 0xb1, 0xb6, + 0xb7, 0xbb, 0xc0, 0xc1, 0xc2, 0xc4, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd2, 0xd3, 0xd4, 0xd6, 0xd9, 0xda, 0xdb, 0xdc, + 0xdf, 0xe0, 0xe1, 0xe2, 0xe4, 0xe6, 0xe7, 0xe8, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf2, + 0xf3, 0xf4, 0xf6, 0xf9, 0xfa, 0xfb, 0xfc, 0xff, + 0xc3, 0xe3, 0xa1, 0xa2, 0xc5, 0xe5, 0xb2, 0xb9, + 0xd0, 0xf0, 0xdd, 0xfd, 0xa3, 0xb3, 0xd1, 0xf1, + 0xd5, 0xf5, 0xbc, 0xbd, 0xd7, 0xf7, 0xa6, 0xa8, + 0xd8, 0xf8, 0xbe, 0xac, 0xae, 0xaf, 0xbf, 0xb4, + 0xb8, 0xaa, 0xba, 0xde, 0xfe, 0xb5, 0xa5, 0xa4 + }, + 256 +}; +const charset_spec charset_CS_ISO8859_16 = { + CS_ISO8859_16, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_16 +}; + +const sbcs_data sbcsdata_CS_ISO8859_1_X11 = { + { + 0x0020, 0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, + 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, + 0x23ba, 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, + 0x252c, 0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff + }, + { + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 0x1c, 0x1d, 0x1a, 0x1b, 0x10, 0x11, 0x13, 0x14, + 0x03, 0x06, 0x0a, 0x04, 0x05, 0x09, 0x12, 0x19, + 0x0d, 0x0c, 0x0e, 0x0b, 0x15, 0x16, 0x18, 0x17, + 0x0f, 0x02, 0x01 + }, + 251 +}; +const charset_spec charset_CS_ISO8859_1_X11 = { + CS_ISO8859_1_X11, read_sbcs, write_sbcs, &sbcsdata_CS_ISO8859_1_X11 +}; + +const sbcs_data sbcsdata_CS_CP437 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192, + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + 0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229, + 0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xff, 0xad, 0x9b, 0x9c, 0x9d, 0xa6, 0xae, 0xaa, + 0xf8, 0xf1, 0xfd, 0xe6, 0xfa, 0xa7, 0xaf, 0xac, + 0xab, 0xa8, 0x8e, 0x8f, 0x92, 0x80, 0x90, 0xa5, + 0x99, 0x9a, 0xe1, 0x85, 0xa0, 0x83, 0x84, 0x86, + 0x91, 0x87, 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, + 0x8c, 0x8b, 0xa4, 0x95, 0xa2, 0x93, 0x94, 0xf6, + 0x97, 0xa3, 0x96, 0x81, 0x98, 0x9f, 0xe2, 0xe9, + 0xe4, 0xe8, 0xea, 0xe0, 0xeb, 0xee, 0xe3, 0xe5, + 0xe7, 0xed, 0xfc, 0x9e, 0xf9, 0xfb, 0xec, 0xef, + 0xf7, 0xf0, 0xf3, 0xf2, 0xa9, 0xf4, 0xf5, 0xc4, + 0xb3, 0xda, 0xbf, 0xc0, 0xd9, 0xc3, 0xb4, 0xc2, + 0xc1, 0xc5, 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, + 0xb7, 0xbb, 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, + 0xc6, 0xc7, 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, + 0xcb, 0xcf, 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0xdf, + 0xdc, 0xdb, 0xdd, 0xde, 0xb0, 0xb1, 0xb2, 0xfe + }, + 256 +}; +const charset_spec charset_CS_CP437 = { + CS_CP437, read_sbcs, write_sbcs, &sbcsdata_CS_CP437 +}; + +const sbcs_data sbcsdata_CS_CP850 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5, + 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192, + 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0, + 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510, + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4, + 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce, + 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580, + 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe, + 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4, + 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, + 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0xf0, 0xa9, 0xee, + 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, + 0xf7, 0xfb, 0xa7, 0xaf, 0xac, 0xab, 0xf3, 0xa8, + 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, + 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, + 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e, + 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0xed, 0xe8, 0xe1, + 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, + 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe7, 0x98, + 0xd5, 0x9f, 0xf2, 0xc4, 0xb3, 0xda, 0xbf, 0xc0, + 0xd9, 0xc3, 0xb4, 0xc2, 0xc1, 0xc5, 0xcd, 0xba, + 0xc9, 0xbb, 0xc8, 0xbc, 0xcc, 0xb9, 0xcb, 0xca, + 0xce, 0xdf, 0xdc, 0xdb, 0xb0, 0xb1, 0xb2, 0xfe + }, + 256 +}; +const charset_spec charset_CS_CP850 = { + CS_CP850, read_sbcs, write_sbcs, &sbcsdata_CS_CP850 +}; + +const sbcs_data sbcsdata_CS_CP866 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xff, 0xfd, 0xf8, 0xfa, 0xf0, 0xf2, 0xf4, 0xf6, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf1, 0xf3, 0xf5, 0xf7, 0xfc, 0xf9, 0xfb, 0xc4, + 0xb3, 0xda, 0xbf, 0xc0, 0xd9, 0xc3, 0xb4, 0xc2, + 0xc1, 0xc5, 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, + 0xb7, 0xbb, 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, + 0xc6, 0xc7, 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, + 0xcb, 0xcf, 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0xdf, + 0xdc, 0xdb, 0xdd, 0xde, 0xb0, 0xb1, 0xb2, 0xfe + }, + 256 +}; +const charset_spec charset_CS_CP866 = { + CS_CP866, read_sbcs, write_sbcs, &sbcsdata_CS_CP866 +}; + +const sbcs_data sbcsdata_CS_CP1250 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, ERROR , 0x201e, 0x2026, 0x2020, 0x2021, + ERROR , 0x2030, 0x0160, 0x2039, 0x015a, 0x0164, 0x017d, 0x0179, + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + ERROR , 0x2122, 0x0161, 0x203a, 0x015b, 0x0165, 0x017e, 0x017a, + 0x00a0, 0x02c7, 0x02d8, 0x0141, 0x00a4, 0x0104, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x015e, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x017b, + 0x00b0, 0x00b1, 0x02db, 0x0142, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x0105, 0x015f, 0x00bb, 0x013d, 0x02dd, 0x013e, 0x017c, + 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, + 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, + 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, + 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, + 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, + 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa4, 0xa6, 0xa7, 0xa8, 0xa9, 0xab, 0xac, + 0xad, 0xae, 0xb0, 0xb1, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xbb, 0xc1, 0xc2, 0xc4, 0xc7, 0xc9, 0xcb, + 0xcd, 0xce, 0xd3, 0xd4, 0xd6, 0xd7, 0xda, 0xdc, + 0xdd, 0xdf, 0xe1, 0xe2, 0xe4, 0xe7, 0xe9, 0xeb, + 0xed, 0xee, 0xf3, 0xf4, 0xf6, 0xf7, 0xfa, 0xfc, + 0xfd, 0xc3, 0xe3, 0xa5, 0xb9, 0xc6, 0xe6, 0xc8, + 0xe8, 0xcf, 0xef, 0xd0, 0xf0, 0xca, 0xea, 0xcc, + 0xec, 0xc5, 0xe5, 0xbc, 0xbe, 0xa3, 0xb3, 0xd1, + 0xf1, 0xd2, 0xf2, 0xd5, 0xf5, 0xc0, 0xe0, 0xd8, + 0xf8, 0x8c, 0x9c, 0xaa, 0xba, 0x8a, 0x9a, 0xde, + 0xfe, 0x8d, 0x9d, 0xd9, 0xf9, 0xdb, 0xfb, 0x8f, + 0x9f, 0xaf, 0xbf, 0x8e, 0x9e, 0xa1, 0xa2, 0xff, + 0xb2, 0xbd, 0x96, 0x97, 0x91, 0x92, 0x82, 0x93, + 0x94, 0x84, 0x86, 0x87, 0x95, 0x85, 0x89, 0x8b, + 0x9b, 0x80, 0x99 + }, + 251 +}; +const charset_spec charset_CS_CP1250 = { + CS_CP1250, read_sbcs, write_sbcs, &sbcsdata_CS_CP1250 +}; + +const sbcs_data sbcsdata_CS_CP1251 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, + 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, + 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + ERROR , 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, + 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, + 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, + 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa4, 0xa6, 0xa7, 0xa9, 0xab, 0xac, 0xad, + 0xae, 0xb0, 0xb1, 0xb5, 0xb6, 0xb7, 0xbb, 0xa8, + 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, 0xa3, 0x8a, + 0x8c, 0x8e, 0x8d, 0xa1, 0x8f, 0xc0, 0xc1, 0xc2, + 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, + 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, + 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, + 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, + 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0xb8, 0x90, 0x83, + 0xba, 0xbe, 0xb3, 0xbf, 0xbc, 0x9a, 0x9c, 0x9e, + 0x9d, 0xa2, 0x9f, 0xa5, 0xb4, 0x96, 0x97, 0x91, + 0x92, 0x82, 0x93, 0x94, 0x84, 0x86, 0x87, 0x95, + 0x85, 0x89, 0x8b, 0x9b, 0x88, 0xb9, 0x99 + }, + 255 +}; +const charset_spec charset_CS_CP1251 = { + CS_CP1251, read_sbcs, write_sbcs, &sbcsdata_CS_CP1251 +}; + +const sbcs_data sbcsdata_CS_CP1252 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, ERROR , 0x017d, ERROR , + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, ERROR , 0x017e, 0x0178, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 0x8c, 0x9c, 0x8a, 0x9a, 0x9f, 0x8e, 0x9e, 0x83, + 0x88, 0x98, 0x96, 0x97, 0x91, 0x92, 0x82, 0x93, + 0x94, 0x84, 0x86, 0x87, 0x95, 0x85, 0x89, 0x8b, + 0x9b, 0x80, 0x99 + }, + 251 +}; +const charset_spec charset_CS_CP1252 = { + CS_CP1252, read_sbcs, write_sbcs, &sbcsdata_CS_CP1252 +}; + +const sbcs_data sbcsdata_CS_CP1253 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + ERROR , 0x2030, ERROR , 0x2039, ERROR , ERROR , ERROR , ERROR , + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + ERROR , 0x2122, ERROR , 0x203a, ERROR , ERROR , ERROR , ERROR , + 0x00a0, 0x0385, 0x0386, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, ERROR , 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x2015, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x00b5, 0x00b6, 0x00b7, + 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + 0x03a0, 0x03a1, ERROR , 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, + 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, + 0xab, 0xac, 0xad, 0xae, 0xb0, 0xb1, 0xb2, 0xb3, + 0xb5, 0xb6, 0xb7, 0xbb, 0xbd, 0x83, 0xb4, 0xa1, + 0xa2, 0xb8, 0xb9, 0xba, 0xbc, 0xbe, 0xbf, 0xc0, + 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd1, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x96, 0x97, 0xaf, + 0x91, 0x92, 0x82, 0x93, 0x94, 0x84, 0x86, 0x87, + 0x95, 0x85, 0x89, 0x8b, 0x9b, 0x80, 0x99 + }, + 239 +}; +const charset_spec charset_CS_CP1253 = { + CS_CP1253, read_sbcs, write_sbcs, &sbcsdata_CS_CP1253 +}; + +const sbcs_data sbcsdata_CS_CP1254 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, ERROR , ERROR , ERROR , + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, ERROR , ERROR , 0x0178, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, + 0xd9, 0xda, 0xdb, 0xdc, 0xdf, 0xe0, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xff, 0xd0, 0xf0, 0xdd, 0xfd, 0x8c, 0x9c, + 0xde, 0xfe, 0x8a, 0x9a, 0x9f, 0x83, 0x88, 0x98, + 0x96, 0x97, 0x91, 0x92, 0x82, 0x93, 0x94, 0x84, + 0x86, 0x87, 0x95, 0x85, 0x89, 0x8b, 0x9b, 0x80, + 0x99 + }, + 249 +}; +const charset_spec charset_CS_CP1254 = { + CS_CP1254, read_sbcs, write_sbcs, &sbcsdata_CS_CP1254 +}; + +const sbcs_data sbcsdata_CS_CP1255 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, ERROR , 0x2039, ERROR , ERROR , ERROR , ERROR , + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, ERROR , 0x203a, ERROR , ERROR , ERROR , ERROR , + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, + 0x05b8, 0x05b9, ERROR , 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, + 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, + 0x05f4, ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, ERROR , ERROR , 0x200e, 0x200f, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa5, 0xa6, 0xa7, 0xa8, + 0xa9, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xaa, 0xba, 0x83, + 0x88, 0x98, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, + 0xc6, 0xc7, 0xc8, 0xc9, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xe0, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, + 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xfd, 0xfe, 0x96, + 0x97, 0x91, 0x92, 0x82, 0x93, 0x94, 0x84, 0x86, + 0x87, 0x95, 0x85, 0x89, 0x8b, 0x9b, 0xa4, 0x80, + 0x99 + }, + 233 +}; +const charset_spec charset_CS_CP1255 = { + CS_CP1255, read_sbcs, write_sbcs, &sbcsdata_CS_CP1255 +}; + +const sbcs_data sbcsdata_CS_CP1256 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, + 0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba, + 0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f, + 0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7, + 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, + 0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef, + 0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7, + 0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, + 0xa9, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xbb, 0xbc, 0xbd, 0xbe, 0xd7, 0xe0, 0xe2, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xee, 0xef, 0xf4, 0xf7, + 0xf9, 0xfb, 0xfc, 0x8c, 0x9c, 0x83, 0x88, 0xa1, + 0xba, 0xbf, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, + 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe1, 0xe3, 0xe4, 0xe5, 0xe6, 0xec, 0xed, 0xf0, + 0xf1, 0xf2, 0xf3, 0xf5, 0xf6, 0xf8, 0xfa, 0x8a, + 0x81, 0x8d, 0x8f, 0x9a, 0x8e, 0x98, 0x90, 0x9f, + 0xaa, 0xc0, 0xff, 0x9d, 0x9e, 0xfd, 0xfe, 0x96, + 0x97, 0x91, 0x92, 0x82, 0x93, 0x94, 0x84, 0x86, + 0x87, 0x95, 0x85, 0x89, 0x8b, 0x9b, 0x80, 0x99 + }, + 256 +}; +const charset_spec charset_CS_CP1256 = { + CS_CP1256, read_sbcs, write_sbcs, &sbcsdata_CS_CP1256 +}; + +const sbcs_data sbcsdata_CS_CP1257 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, ERROR , 0x201e, 0x2026, 0x2020, 0x2021, + ERROR , 0x2030, ERROR , 0x2039, ERROR , 0x00a8, 0x02c7, 0x00b8, + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + ERROR , 0x2122, ERROR , 0x203a, ERROR , 0x00af, 0x02db, ERROR , + 0x00a0, ERROR , 0x00a2, 0x00a3, 0x00a4, ERROR , 0x00a6, 0x00a7, + 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, + 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, + 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, + 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, + 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, + 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, + 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, + 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, + 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x02d9 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa2, 0xa3, 0xa4, 0xa6, 0xa7, 0x8d, 0xa9, + 0xab, 0xac, 0xad, 0xae, 0x9d, 0xb0, 0xb1, 0xb2, + 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0x8f, 0xb9, 0xbb, + 0xbc, 0xbd, 0xbe, 0xc4, 0xc5, 0xaf, 0xc9, 0xd3, + 0xd5, 0xd6, 0xd7, 0xa8, 0xdc, 0xdf, 0xe4, 0xe5, + 0xbf, 0xe9, 0xf3, 0xf5, 0xf6, 0xf7, 0xb8, 0xfc, + 0xc2, 0xe2, 0xc0, 0xe0, 0xc3, 0xe3, 0xc8, 0xe8, + 0xc7, 0xe7, 0xcb, 0xeb, 0xc6, 0xe6, 0xcc, 0xec, + 0xce, 0xee, 0xc1, 0xe1, 0xcd, 0xed, 0xcf, 0xef, + 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0xd4, 0xf4, + 0xaa, 0xba, 0xda, 0xfa, 0xd0, 0xf0, 0xdb, 0xfb, + 0xd8, 0xf8, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, + 0x8e, 0xff, 0x9e, 0x96, 0x97, 0x91, 0x92, 0x82, + 0x93, 0x94, 0x84, 0x86, 0x87, 0x95, 0x85, 0x89, + 0x8b, 0x9b, 0x80, 0x99 + }, + 244 +}; +const charset_spec charset_CS_CP1257 = { + CS_CP1257, read_sbcs, write_sbcs, &sbcsdata_CS_CP1257 +}; + +const sbcs_data sbcsdata_CS_CP1258 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x20ac, ERROR , 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, ERROR , 0x2039, 0x0152, ERROR , ERROR , ERROR , + ERROR , 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, ERROR , 0x203a, 0x0153, ERROR , ERROR , 0x0178, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x0300, 0x00cd, 0x00ce, 0x00cf, + 0x0110, 0x00d1, 0x0309, 0x00d3, 0x00d4, 0x01a0, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x01af, 0x0303, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0301, 0x00ed, 0x00ee, 0x00ef, + 0x0111, 0x00f1, 0x0323, 0x00f3, 0x00f4, 0x01a1, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x01b0, 0x20ab, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, + 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf, 0xd1, 0xd3, + 0xd4, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, + 0xdf, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xed, 0xee, 0xef, 0xf1, + 0xf3, 0xf4, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xff, 0xc3, 0xe3, 0xd0, 0xf0, 0x8c, 0x9c, + 0x9f, 0x83, 0xd5, 0xf5, 0xdd, 0xfd, 0x88, 0x98, + 0xcc, 0xec, 0xde, 0xd2, 0xf2, 0x96, 0x97, 0x91, + 0x92, 0x82, 0x93, 0x94, 0x84, 0x86, 0x87, 0x95, + 0x85, 0x89, 0x8b, 0x9b, 0xfe, 0x80, 0x99 + }, + 247 +}; +const charset_spec charset_CS_CP1258 = { + CS_CP1258, read_sbcs, write_sbcs, &sbcsdata_CS_CP1258 +}; + +const sbcs_data sbcsdata_CS_KOI8_R = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, + 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x9a, 0xbf, 0x9c, 0x9d, 0x9e, 0x9f, 0xb3, 0xe1, + 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, 0xe9, + 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf2, + 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, 0xfb, + 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, 0xc1, + 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, 0xc9, + 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd2, + 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, 0xdb, + 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, 0xa3, + 0x95, 0x96, 0x97, 0x98, 0x99, 0x93, 0x9b, 0x80, + 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8a, 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, + 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, + 0xaf, 0xb0, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x8b, + 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x94 + }, + 256 +}; +const charset_spec charset_CS_KOI8_R = { + CS_KOI8_R, read_sbcs, write_sbcs, &sbcsdata_CS_KOI8_R +}; + +const sbcs_data sbcsdata_CS_KOI8_U = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x255d, 0x255e, + 0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x256c, 0x00a9, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x9a, 0xbf, 0x9c, 0x9d, 0x9e, 0x9f, 0xb3, 0xb4, + 0xb6, 0xb7, 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, + 0xf6, 0xfa, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, + 0xef, 0xf0, 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, + 0xe3, 0xfe, 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, + 0xe0, 0xf1, 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, + 0xd6, 0xda, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xd0, 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, + 0xc3, 0xde, 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, + 0xc0, 0xd1, 0xa3, 0xa4, 0xa6, 0xa7, 0xbd, 0xad, + 0x95, 0x96, 0x97, 0x98, 0x99, 0x93, 0x9b, 0x80, + 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, + 0x89, 0x8a, 0xa0, 0xa1, 0xa2, 0xa5, 0xa8, 0xa9, + 0xaa, 0xab, 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, + 0xb5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbe, 0x8b, + 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x94 + }, + 256 +}; +const charset_spec charset_CS_KOI8_U = { + CS_KOI8_U, read_sbcs, write_sbcs, &sbcsdata_CS_KOI8_U +}; + +const sbcs_data sbcsdata_CS_KOI8_RU = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x045e, 0x255e, + 0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x040e, 0x00a9, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x9a, 0xbf, 0x9c, 0x9d, 0x9e, 0x9f, 0xb3, 0xb4, + 0xb6, 0xb7, 0xbe, 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, + 0xe5, 0xf6, 0xfa, 0xe9, 0xea, 0xeb, 0xec, 0xed, + 0xee, 0xef, 0xf0, 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, + 0xe8, 0xe3, 0xfe, 0xfb, 0xfd, 0xff, 0xf9, 0xf8, + 0xfc, 0xe0, 0xf1, 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, + 0xc5, 0xd6, 0xda, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, + 0xce, 0xcf, 0xd0, 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, + 0xc8, 0xc3, 0xde, 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, + 0xdc, 0xc0, 0xd1, 0xa3, 0xa4, 0xa6, 0xa7, 0xae, + 0xbd, 0xad, 0x95, 0x96, 0x97, 0x98, 0x99, 0x93, + 0x9b, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, + 0x87, 0x88, 0x89, 0x8a, 0xa0, 0xa1, 0xa2, 0xa5, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xaf, 0xb0, 0xb1, + 0xb2, 0xb5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0x8b, + 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x94 + }, + 256 +}; +const charset_spec charset_CS_KOI8_RU = { + CS_KOI8_RU, read_sbcs, write_sbcs, &sbcsdata_CS_KOI8_RU +}; + +const sbcs_data sbcsdata_CS_JISX0201 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x00a5, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x203e, 0x007f, + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, + 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, + 0xff70, 0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, + 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, + 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, + 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, + 0xff90, 0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, + 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5d, 0x5e, 0x5f, 0x60, + 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, + 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, + 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, + 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7f, 0x5c, 0x7e, + 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, + 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, + 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, + 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, + 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, + 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf + }, + 191 +}; +const charset_spec charset_CS_JISX0201 = { + CS_JISX0201, read_sbcs, write_sbcs, &sbcsdata_CS_JISX0201 +}; + +const sbcs_data sbcsdata_CS_MAC_ROMAN = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x20ac, 0x2039, 0x203a, 0xfb01, 0xfb02, + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xb4, 0xa4, 0xac, 0xa9, + 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, 0xab, + 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, 0xcb, + 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, + 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 0x84, + 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xaf, 0xf4, 0xf2, + 0xf3, 0x86, 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, + 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, + 0x92, 0x94, 0x95, 0x96, 0x98, 0x97, 0x99, 0x9b, + 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xd8, + 0xf5, 0xce, 0xcf, 0xd9, 0xc4, 0xf6, 0xff, 0xf9, + 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0xbd, 0xb9, 0xd0, + 0xd1, 0xd4, 0xd5, 0xe2, 0xd2, 0xd3, 0xe3, 0xa0, + 0xe0, 0xa5, 0xc9, 0xe4, 0xdc, 0xdd, 0xda, 0xdb, + 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, 0xb0, 0xba, + 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0, 0xde, 0xdf + }, + 256 +}; +const charset_spec charset_CS_MAC_ROMAN = { + CS_MAC_ROMAN, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_ROMAN +}; + +const sbcs_data sbcsdata_CS_MAC_TURKISH = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x011e, 0x011f, 0x0130, 0x0131, 0x015e, 0x015f, + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, ERROR , 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xb4, 0xa4, 0xac, 0xa9, + 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, 0xab, + 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, 0xcb, + 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, + 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 0x84, + 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xaf, 0xf4, 0xf2, + 0xf3, 0x86, 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, + 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, + 0x92, 0x94, 0x95, 0x96, 0x98, 0x97, 0x99, 0x9b, + 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xd8, + 0xda, 0xdb, 0xdc, 0xdd, 0xce, 0xcf, 0xde, 0xdf, + 0xd9, 0xc4, 0xf6, 0xff, 0xf9, 0xfa, 0xfb, 0xfe, + 0xf7, 0xfd, 0xbd, 0xb9, 0xd0, 0xd1, 0xd4, 0xd5, + 0xe2, 0xd2, 0xd3, 0xe3, 0xa0, 0xe0, 0xa5, 0xc9, + 0xe4, 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, 0xb0, + 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0 + }, + 255 +}; +const charset_spec charset_CS_MAC_TURKISH = { + CS_MAC_TURKISH, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_TURKISH +}; + +const sbcs_data sbcsdata_CS_MAC_CROATIAN = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x0160, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x017d, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x2206, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x0161, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x017e, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x0106, 0x00ab, + 0x010c, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x0110, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0xf8ff, 0x00a9, 0x2044, 0x20ac, 0x2039, 0x203a, 0x00c6, 0x00bb, + 0x2013, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x0107, 0x00c1, + 0x010d, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0x0111, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x03c0, 0x00cb, 0x02da, 0x00b8, 0x00ca, 0x00e6, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xa4, 0xac, 0xd9, 0xbb, + 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, 0xab, 0xb5, + 0xa6, 0xe1, 0xfc, 0xbc, 0xdf, 0xc0, 0xcb, 0xe7, + 0xe5, 0xcc, 0x80, 0x81, 0xde, 0x82, 0xe9, 0x83, + 0xfd, 0xfa, 0xed, 0xea, 0xeb, 0xec, 0x84, 0xf1, + 0xee, 0xef, 0xcd, 0x85, 0xaf, 0xf4, 0xf2, 0xf3, + 0x86, 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, + 0xfe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, + 0x94, 0x95, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, + 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc6, 0xe6, + 0xc8, 0xe8, 0xd0, 0xf0, 0xf5, 0xce, 0xcf, 0xa9, + 0xb9, 0xae, 0xbe, 0xc4, 0xf6, 0xff, 0xfb, 0xf7, + 0xbd, 0xf9, 0xe0, 0xd1, 0xd4, 0xd5, 0xe2, 0xd2, + 0xd3, 0xe3, 0xa0, 0xa5, 0xc9, 0xe4, 0xdc, 0xdd, + 0xda, 0xdb, 0xaa, 0xb6, 0xb4, 0xb8, 0xb7, 0xc3, + 0xb0, 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xd8 + }, + 256 +}; +const charset_spec charset_CS_MAC_CROATIAN = { + CS_MAC_CROATIAN, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_CROATIAN +}; + +const sbcs_data sbcsdata_CS_MAC_ICELAND = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x20ac, 0x00d0, 0x00f0, 0x00de, 0x00fe, + 0x00fd, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xb4, 0xa4, 0xac, 0xa9, + 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, 0xab, + 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, 0xcb, + 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, 0xe9, + 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 0xdc, + 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xaf, 0xf4, + 0xf2, 0xf3, 0x86, 0xa0, 0xde, 0xa7, 0x88, 0x87, + 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, + 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 0xdd, 0x96, + 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, + 0x9c, 0x9e, 0x9f, 0xe0, 0xdf, 0xd8, 0xf5, 0xce, + 0xcf, 0xd9, 0xc4, 0xf6, 0xff, 0xf9, 0xfa, 0xfb, + 0xfe, 0xf7, 0xfd, 0xbd, 0xb9, 0xd0, 0xd1, 0xd4, + 0xd5, 0xe2, 0xd2, 0xd3, 0xe3, 0xa5, 0xc9, 0xe4, + 0xda, 0xdb, 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, + 0xb0, 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0 + }, + 256 +}; +const charset_spec charset_CS_MAC_ICELAND = { + CS_MAC_ICELAND, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_ICELAND +}; + +const sbcs_data sbcsdata_CS_MAC_ROMANIAN = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x0102, 0x0218, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x0103, 0x0219, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x20ac, 0x2039, 0x203a, 0x021a, 0x021b, + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xb4, 0xa4, 0xac, 0xa9, + 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, 0xab, + 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, 0xcb, + 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0x82, 0xe9, 0x83, + 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 0x84, 0xf1, + 0xee, 0xef, 0xcd, 0x85, 0xf4, 0xf2, 0xf3, 0x86, + 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0x8d, + 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, + 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0x9d, + 0x9c, 0x9e, 0x9f, 0xd8, 0xae, 0xbe, 0xf5, 0xce, + 0xcf, 0xd9, 0xc4, 0xaf, 0xbf, 0xde, 0xdf, 0xf6, + 0xff, 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0xbd, + 0xb9, 0xd0, 0xd1, 0xd4, 0xd5, 0xe2, 0xd2, 0xd3, + 0xe3, 0xa0, 0xe0, 0xa5, 0xc9, 0xe4, 0xdc, 0xdd, + 0xda, 0xdb, 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, + 0xb0, 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0 + }, + 256 +}; +const charset_spec charset_CS_MAC_ROMANIAN = { + CS_MAC_ROMANIAN, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_ROMANIAN +}; + +const sbcs_data sbcsdata_CS_MAC_GREEK = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00b9, 0x00b2, 0x00c9, 0x00b3, 0x00d6, 0x00dc, 0x0385, + 0x00e0, 0x00e2, 0x00e4, 0x0384, 0x00a8, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00a3, 0x2122, 0x00ee, 0x00ef, 0x2022, 0x00bd, + 0x2030, 0x00f4, 0x00f6, 0x00a6, 0x20ac, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x0393, 0x0394, 0x0398, 0x039b, 0x039e, 0x03a0, 0x00df, + 0x00ae, 0x00a9, 0x03a3, 0x03aa, 0x00a7, 0x2260, 0x00b0, 0x00b7, + 0x0391, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x0392, 0x0395, 0x0396, + 0x0397, 0x0399, 0x039a, 0x039c, 0x03a6, 0x03ab, 0x03a8, 0x03a9, + 0x03ac, 0x039d, 0x00ac, 0x039f, 0x03a1, 0x2248, 0x03a4, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x03a5, 0x03a7, 0x0386, 0x0388, 0x0153, + 0x2013, 0x2015, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0389, + 0x038a, 0x038c, 0x038e, 0x03ad, 0x03ae, 0x03af, 0x03cc, 0x038f, + 0x03cd, 0x03b1, 0x03b2, 0x03c8, 0x03b4, 0x03b5, 0x03c6, 0x03b3, + 0x03b7, 0x03b9, 0x03be, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf, + 0x03c0, 0x03ce, 0x03c1, 0x03c3, 0x03c4, 0x03b8, 0x03c9, 0x03c2, + 0x03c7, 0x03c5, 0x03b6, 0x03ca, 0x03cb, 0x0390, 0x03b0, 0x00ad + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0x92, 0xb4, 0x9b, 0xac, 0x8c, 0xa9, 0xc7, + 0xc2, 0xff, 0xa8, 0xae, 0xb1, 0x82, 0x84, 0xaf, + 0x81, 0xc8, 0x97, 0x80, 0x83, 0x85, 0x86, 0xa7, + 0x88, 0x89, 0x8a, 0x8d, 0x8f, 0x8e, 0x90, 0x91, + 0x94, 0x95, 0x99, 0x9a, 0xd6, 0x9d, 0x9e, 0x9f, + 0xcf, 0x8b, 0x87, 0xcd, 0xce, 0xd7, 0xd8, 0xd9, + 0xda, 0xdf, 0xfd, 0xb0, 0xb5, 0xa1, 0xa2, 0xb6, + 0xb7, 0xb8, 0xa3, 0xb9, 0xba, 0xa4, 0xbb, 0xc1, + 0xa5, 0xc3, 0xa6, 0xc4, 0xaa, 0xc6, 0xcb, 0xbc, + 0xcc, 0xbe, 0xbf, 0xab, 0xbd, 0xc0, 0xdb, 0xdc, + 0xdd, 0xfe, 0xe1, 0xe2, 0xe7, 0xe4, 0xe5, 0xfa, + 0xe8, 0xf5, 0xe9, 0xeb, 0xec, 0xed, 0xee, 0xea, + 0xef, 0xf0, 0xf2, 0xf7, 0xf3, 0xf4, 0xf9, 0xe6, + 0xf8, 0xe3, 0xf6, 0xfb, 0xfc, 0xde, 0xe0, 0xf1, + 0xd0, 0xd1, 0xd4, 0xd5, 0xd2, 0xd3, 0xa0, 0x96, + 0xc9, 0x98, 0x9c, 0x93, 0xc5, 0xad, 0xb2, 0xb3 + }, + 256 +}; +const charset_spec charset_CS_MAC_GREEK = { + CS_MAC_GREEK, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_GREEK +}; + +const sbcs_data sbcsdata_CS_MAC_CYRILLIC = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x2020, 0x00b0, 0x0490, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406, + 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x0491, 0x0408, + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a, + 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e, + 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x20ac + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xa3, 0xa4, 0xa9, 0xc7, 0xc2, 0xa8, 0xa1, + 0xb1, 0xb5, 0xa6, 0xc8, 0xd6, 0xc4, 0xdd, 0xab, + 0xae, 0xb8, 0xc1, 0xa7, 0xba, 0xb7, 0xbc, 0xbe, + 0xcb, 0xcd, 0xd8, 0xda, 0x80, 0x81, 0x82, 0x83, + 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, + 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, + 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, + 0x9c, 0x9d, 0x9e, 0x9f, 0xe0, 0xe1, 0xe2, 0xe3, + 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, + 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xfd, 0xfe, 0xdf, 0xde, 0xac, 0xaf, 0xb9, + 0xcf, 0xb4, 0xbb, 0xc0, 0xbd, 0xbf, 0xcc, 0xce, + 0xd9, 0xdb, 0xa2, 0xb6, 0xd0, 0xd1, 0xd4, 0xd5, + 0xd2, 0xd3, 0xd7, 0xa0, 0xa5, 0xc9, 0xff, 0xdc, + 0xaa, 0xc6, 0xc3, 0xb0, 0xc5, 0xad, 0xb2, 0xb3 + }, + 256 +}; +const charset_spec charset_CS_MAC_CYRILLIC = { + CS_MAC_CYRILLIC, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_CYRILLIC +}; + +const sbcs_data sbcsdata_CS_MAC_THAI = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00ab, 0x00bb, 0x2026, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x201c, 0x201d, 0x0e4d, + ERROR , 0x2022, 0x0e31, 0x0e47, 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x2018, 0x2019, ERROR , + 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, + 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, + 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, + 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, + 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, + 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, + 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e38, 0x0e39, 0x0e3a, 0x2060, 0x200b, 0x2013, 0x2014, 0x0e3f, + 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x2122, 0x0e4f, + 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x00ae, 0x00a9, ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xa0, 0xfb, 0x80, 0xfa, 0x81, 0xa1, 0xa2, 0xa3, + 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, + 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, + 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, + 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, + 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xef, 0xf0, + 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, + 0xf9, 0xdc, 0xdd, 0xde, 0x9d, 0x9e, 0x8d, 0x8e, + 0x91, 0x82, 0xdb, 0xee + }, + 228 +}; +const charset_spec charset_CS_MAC_THAI = { + CS_MAC_THAI, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_THAI +}; + +const sbcs_data sbcsdata_CS_MAC_CENTEURO = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x0100, 0x0101, 0x00c9, 0x0104, 0x00d6, 0x00dc, 0x00e1, + 0x0105, 0x010c, 0x00e4, 0x010d, 0x0106, 0x0107, 0x00e9, 0x0179, + 0x017a, 0x010e, 0x00ed, 0x010f, 0x0112, 0x0113, 0x0116, 0x00f3, + 0x0117, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x011a, 0x011b, 0x00fc, + 0x2020, 0x00b0, 0x0118, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x0119, 0x00a8, 0x2260, 0x0123, 0x012e, + 0x012f, 0x012a, 0x2264, 0x2265, 0x012b, 0x0136, 0x2202, 0x2211, + 0x0142, 0x013b, 0x013c, 0x013d, 0x013e, 0x0139, 0x013a, 0x0145, + 0x0146, 0x0143, 0x00ac, 0x221a, 0x0144, 0x0147, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x0148, 0x0150, 0x00d5, 0x0151, 0x014c, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x014d, 0x0154, 0x0155, 0x0158, 0x2039, 0x203a, 0x0159, 0x0156, + 0x0157, 0x0160, 0x201a, 0x201e, 0x0161, 0x015a, 0x015b, 0x00c1, + 0x0164, 0x0165, 0x00cd, 0x017d, 0x017e, 0x016a, 0x00d3, 0x00d4, + 0x016b, 0x016e, 0x00da, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, + 0x00dd, 0x00fd, 0x0137, 0x017b, 0x0141, 0x017c, 0x0122, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xa3, 0xa4, 0xac, 0xa9, 0xc7, 0xc2, 0xa8, + 0xa1, 0xa6, 0xc8, 0xe7, 0x80, 0x83, 0xea, 0xee, + 0xef, 0xcd, 0x85, 0xf2, 0x86, 0xf8, 0xa7, 0x87, + 0x8a, 0x8e, 0x92, 0x97, 0x99, 0x9b, 0x9a, 0xd6, + 0x9c, 0x9f, 0xf9, 0x81, 0x82, 0x84, 0x88, 0x8c, + 0x8d, 0x89, 0x8b, 0x91, 0x93, 0x94, 0x95, 0x96, + 0x98, 0xa2, 0xab, 0x9d, 0x9e, 0xfe, 0xae, 0xb1, + 0xb4, 0xaf, 0xb0, 0xb5, 0xfa, 0xbd, 0xbe, 0xb9, + 0xba, 0xbb, 0xbc, 0xfc, 0xb8, 0xc1, 0xc4, 0xbf, + 0xc0, 0xc5, 0xcb, 0xcf, 0xd8, 0xcc, 0xce, 0xd9, + 0xda, 0xdf, 0xe0, 0xdb, 0xde, 0xe5, 0xe6, 0xe1, + 0xe4, 0xe8, 0xe9, 0xed, 0xf0, 0xf1, 0xf3, 0xf4, + 0xf5, 0xf6, 0xf7, 0x8f, 0x90, 0xfb, 0xfd, 0xeb, + 0xec, 0xff, 0xd0, 0xd1, 0xd4, 0xd5, 0xe2, 0xd2, + 0xd3, 0xe3, 0xa0, 0xa5, 0xc9, 0xdc, 0xdd, 0xaa, + 0xb6, 0xc6, 0xb7, 0xc3, 0xad, 0xb2, 0xb3, 0xd7 + }, + 256 +}; +const charset_spec charset_CS_MAC_CENTEURO = { + CS_MAC_CENTEURO, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_CENTEURO +}; + +const sbcs_data sbcsdata_CS_MAC_SYMBOL = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x2200, 0x0023, 0x2203, 0x0025, 0x0026, 0x220d, + 0x0028, 0x0029, 0x2217, 0x002b, 0x002c, 0x2212, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x2245, 0x0391, 0x0392, 0x03a7, 0x0394, 0x0395, 0x03a6, 0x0393, + 0x0397, 0x0399, 0x03d1, 0x039a, 0x039b, 0x039c, 0x039d, 0x039f, + 0x03a0, 0x0398, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03c2, 0x03a9, + 0x039e, 0x03a8, 0x0396, 0x005b, 0x2234, 0x005d, 0x22a5, 0x005f, + 0xf8e5, 0x03b1, 0x03b2, 0x03c7, 0x03b4, 0x03b5, 0x03c6, 0x03b3, + 0x03b7, 0x03b9, 0x03d5, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf, + 0x03c0, 0x03b8, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03d6, 0x03c9, + 0x03be, 0x03c8, 0x03b6, 0x007b, 0x007c, 0x007d, 0x223c, 0x007f, + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + 0x20ac, 0x03d2, 0x2032, 0x2264, 0x2044, 0x221e, 0x0192, 0x2663, + 0x2666, 0x2665, 0x2660, 0x2194, 0x2190, 0x2191, 0x2192, 0x2193, + 0x00b0, 0x00b1, 0x2033, 0x2265, 0x00d7, 0x221d, 0x2202, 0x2022, + 0x00f7, 0x2260, 0x2261, 0x2248, 0x2026, 0xf8e6, 0x23af, 0x21b5, + 0x2135, 0x2111, 0x211c, 0x2118, 0x2297, 0x2295, 0x2205, 0x2229, + 0x222a, 0x2283, 0x2287, 0x2284, 0x2282, 0x2286, 0x2208, 0x2209, + 0x2220, 0x2207, 0x00ae, 0x00a9, 0x2122, 0x220f, 0x221a, 0x22c5, + 0x00ac, 0x2227, 0x2228, 0x21d4, 0x21d0, 0x21d1, 0x21d2, 0x21d3, + 0x22c4, 0x3008, 0x00ae, 0x00a9, 0x2122, 0x2211, 0x239b, 0x239c, + 0x239d, 0x23a1, 0x23a2, 0x23a3, 0x23a7, 0x23a8, 0x23a9, 0x23aa, + 0xf8ff, 0x3009, 0x222b, 0x2320, 0x23ae, 0x2321, 0x239e, 0x239f, + 0x23a0, 0x23a4, 0x23a5, 0x23a6, 0x23ab, 0x23ac, 0x23ad, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x23, 0x25, 0x26, 0x28, 0x29, 0x2b, + 0x2c, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, + 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, + 0x3d, 0x3e, 0x3f, 0x5b, 0x5d, 0x5f, 0x7b, 0x7c, + 0x7d, 0x7f, 0xd3, 0xd8, 0xd2, 0xb0, 0xb1, 0xb4, + 0xb8, 0xa6, 0x41, 0x42, 0x47, 0x44, 0x45, 0x5a, + 0x48, 0x51, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0x58, + 0x4f, 0x50, 0x52, 0x53, 0x54, 0x55, 0x46, 0x43, + 0x59, 0x57, 0x61, 0x62, 0x67, 0x64, 0x65, 0x7a, + 0x68, 0x71, 0x69, 0x6b, 0x6c, 0x6d, 0x6e, 0x78, + 0x6f, 0x70, 0x72, 0x56, 0x73, 0x74, 0x75, 0x66, + 0x63, 0x79, 0x77, 0x4a, 0xa1, 0x6a, 0x76, 0xb7, + 0xbc, 0xa2, 0xb2, 0xa4, 0xa0, 0xc1, 0xc3, 0xc2, + 0xd4, 0xc0, 0xac, 0xad, 0xae, 0xaf, 0xab, 0xbf, + 0xdc, 0xdd, 0xde, 0xdf, 0xdb, 0x22, 0xb6, 0x24, + 0xc6, 0xd1, 0xce, 0xcf, 0x27, 0xd5, 0xe5, 0x2d, + 0x2a, 0xd6, 0xb5, 0xa5, 0xd0, 0xd9, 0xda, 0xc7, + 0xc8, 0xf2, 0x5c, 0x7e, 0x40, 0xbb, 0xb9, 0xba, + 0xa3, 0xb3, 0xcc, 0xc9, 0xcb, 0xcd, 0xca, 0xc5, + 0xc4, 0x5e, 0xe0, 0xd7, 0xf3, 0xf5, 0xe6, 0xe7, + 0xe8, 0xf6, 0xf7, 0xf8, 0xe9, 0xea, 0xeb, 0xf9, + 0xfa, 0xfb, 0xec, 0xed, 0xee, 0xef, 0xfc, 0xfd, + 0xfe, 0xf4, 0xbe, 0xaa, 0xa7, 0xa9, 0xa8, 0xe1, + 0xf1, 0x60, 0xbd, 0xf0 + }, + 220 +}; +const charset_spec charset_CS_MAC_SYMBOL = { + CS_MAC_SYMBOL, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_SYMBOL +}; + +const sbcs_data sbcsdata_CS_MAC_DINGBATS = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x2701, 0x2702, 0x2703, 0x2704, 0x260e, 0x2706, 0x2707, + 0x2708, 0x2709, 0x261b, 0x261e, 0x270c, 0x270d, 0x270e, 0x270f, + 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, + 0x2718, 0x2719, 0x271a, 0x271b, 0x271c, 0x271d, 0x271e, 0x271f, + 0x2720, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2727, + 0x2605, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f, + 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, + 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, + 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, + 0x2748, 0x2749, 0x274a, 0x274b, 0x25cf, 0x274d, 0x25a0, 0x274f, + 0x2750, 0x2751, 0x2752, 0x25b2, 0x25bc, 0x25c6, 0x2756, 0x25d7, + 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, 0x275e, 0x007f, + 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d, 0x276e, 0x276f, + 0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775, ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, + 0x2663, 0x2666, 0x2665, 0x2660, 0x2460, 0x2461, 0x2462, 0x2463, + 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2776, 0x2777, + 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e, 0x277f, + 0x2780, 0x2781, 0x2782, 0x2783, 0x2784, 0x2785, 0x2786, 0x2787, + 0x2788, 0x2789, 0x278a, 0x278b, 0x278c, 0x278d, 0x278e, 0x278f, + 0x2790, 0x2791, 0x2792, 0x2793, 0x2794, 0x2192, 0x2194, 0x2195, + 0x2798, 0x2799, 0x279a, 0x279b, 0x279c, 0x279d, 0x279e, 0x279f, + 0x27a0, 0x27a1, 0x27a2, 0x27a3, 0x27a4, 0x27a5, 0x27a6, 0x27a7, + 0x27a8, 0x27a9, 0x27aa, 0x27ab, 0x27ac, 0x27ad, 0x27ae, 0x27af, + ERROR , 0x27b1, 0x27b2, 0x27b3, 0x27b4, 0x27b5, 0x27b6, 0x27b7, + 0x27b8, 0x27b9, 0x27ba, 0x27bb, 0x27bc, 0x27bd, 0x27be, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x7f, 0xd5, 0xd6, 0xd7, 0xac, 0xad, 0xae, + 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x6e, + 0x73, 0x74, 0x75, 0x6c, 0x77, 0x48, 0x25, 0x2a, + 0x2b, 0xab, 0xa8, 0xaa, 0xa9, 0x21, 0x22, 0x23, + 0x24, 0x26, 0x27, 0x28, 0x29, 0x2c, 0x2d, 0x2e, + 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, + 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, + 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, + 0x47, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6d, 0x6f, 0x70, 0x71, + 0x72, 0x76, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd8, 0xd9, 0xda, + 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf1, 0xf2, 0xf3, + 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, + 0xfc, 0xfd, 0xfe + }, + 235 +}; +const charset_spec charset_CS_MAC_DINGBATS = { + CS_MAC_DINGBATS, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_DINGBATS +}; + +const sbcs_data sbcsdata_CS_MAC_ROMAN_OLD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0xfb01, 0xfb02, + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0xa4, 0xac, + 0xa9, 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, + 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, + 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, + 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xaf, 0xf4, + 0xf2, 0xf3, 0x86, 0xa7, 0x88, 0x87, 0x89, 0x8b, + 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, + 0x93, 0x92, 0x94, 0x95, 0x96, 0x98, 0x97, 0x99, + 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, + 0xd8, 0xf5, 0xce, 0xcf, 0xd9, 0xc4, 0xf6, 0xff, + 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, 0xbd, 0xb9, + 0xd0, 0xd1, 0xd4, 0xd5, 0xe2, 0xd2, 0xd3, 0xe3, + 0xa0, 0xe0, 0xa5, 0xc9, 0xe4, 0xdc, 0xdd, 0xda, + 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, 0xb0, 0xba, + 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0, 0xde, 0xdf + }, + 256 +}; +const charset_spec charset_CS_MAC_ROMAN_OLD = { + CS_MAC_ROMAN_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_ROMAN_OLD +}; + +const sbcs_data sbcsdata_CS_MAC_CROATIAN_OLD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x0160, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x017d, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x2206, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x0161, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x017e, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x0106, 0x00ab, + 0x010c, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x0110, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0xf8ff, 0x00a9, 0x2044, 0x00a4, 0x2039, 0x203a, 0x00c6, 0x00bb, + 0x2013, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x0107, 0x00c1, + 0x010d, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0x0111, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x03c0, 0x00cb, 0x02da, 0x00b8, 0x00ca, 0x00e6, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xa4, 0xac, 0xd9, + 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, 0xab, + 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xdf, 0xc0, 0xcb, + 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xde, 0x82, 0xe9, + 0x83, 0xfd, 0xfa, 0xed, 0xea, 0xeb, 0xec, 0x84, + 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xaf, 0xf4, 0xf2, + 0xf3, 0x86, 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, + 0x8c, 0xfe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, + 0x92, 0x94, 0x95, 0x96, 0x98, 0x97, 0x99, 0x9b, + 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, 0xc6, + 0xe6, 0xc8, 0xe8, 0xd0, 0xf0, 0xf5, 0xce, 0xcf, + 0xa9, 0xb9, 0xae, 0xbe, 0xc4, 0xf6, 0xff, 0xfb, + 0xf7, 0xbd, 0xf9, 0xe0, 0xd1, 0xd4, 0xd5, 0xe2, + 0xd2, 0xd3, 0xe3, 0xa0, 0xa5, 0xc9, 0xe4, 0xdc, + 0xdd, 0xda, 0xaa, 0xb6, 0xb4, 0xb8, 0xb7, 0xc3, + 0xb0, 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xd8 + }, + 256 +}; +const charset_spec charset_CS_MAC_CROATIAN_OLD = { + CS_MAC_CROATIAN_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_CROATIAN_OLD +}; + +const sbcs_data sbcsdata_CS_MAC_ICELAND_OLD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x00d0, 0x00f0, 0x00de, 0x00fe, + 0x00fd, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0xa4, 0xac, + 0xa9, 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, + 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0xae, 0x82, + 0xe9, 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, + 0xdc, 0x84, 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xaf, + 0xf4, 0xf2, 0xf3, 0x86, 0xa0, 0xde, 0xa7, 0x88, + 0x87, 0x89, 0x8b, 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, + 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, 0x95, 0xdd, + 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, 0xbf, + 0x9d, 0x9c, 0x9e, 0x9f, 0xe0, 0xdf, 0xd8, 0xf5, + 0xce, 0xcf, 0xd9, 0xc4, 0xf6, 0xff, 0xf9, 0xfa, + 0xfb, 0xfe, 0xf7, 0xfd, 0xbd, 0xb9, 0xd0, 0xd1, + 0xd4, 0xd5, 0xe2, 0xd2, 0xd3, 0xe3, 0xa5, 0xc9, + 0xe4, 0xda, 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, + 0xb0, 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0 + }, + 256 +}; +const charset_spec charset_CS_MAC_ICELAND_OLD = { + CS_MAC_ICELAND_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_ICELAND_OLD +}; + +const sbcs_data sbcsdata_CS_MAC_ROMANIAN_OLD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x0102, 0x0218, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x2202, 0x2211, + 0x220f, 0x03c0, 0x222b, 0x00aa, 0x00ba, 0x03a9, 0x0103, 0x0219, + 0x00bf, 0x00a1, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x25ca, + 0x00ff, 0x0178, 0x2044, 0x00a4, 0x2039, 0x203a, 0x021a, 0x021b, + 0x2021, 0x00b7, 0x201a, 0x201e, 0x2030, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + 0xf8ff, 0x00d2, 0x00da, 0x00db, 0x00d9, 0x0131, 0x02c6, 0x02dc, + 0x00af, 0x02d8, 0x02d9, 0x02da, 0x00b8, 0x02dd, 0x02db, 0x02c7 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xc1, 0xa2, 0xa3, 0xdb, 0xb4, 0xa4, 0xac, + 0xa9, 0xbb, 0xc7, 0xc2, 0xa8, 0xf8, 0xa1, 0xb1, + 0xab, 0xb5, 0xa6, 0xe1, 0xfc, 0xbc, 0xc8, 0xc0, + 0xcb, 0xe7, 0xe5, 0xcc, 0x80, 0x81, 0x82, 0xe9, + 0x83, 0xe6, 0xe8, 0xed, 0xea, 0xeb, 0xec, 0x84, + 0xf1, 0xee, 0xef, 0xcd, 0x85, 0xf4, 0xf2, 0xf3, + 0x86, 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, 0x8c, + 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, 0x92, 0x94, + 0x95, 0x96, 0x98, 0x97, 0x99, 0x9b, 0x9a, 0xd6, + 0x9d, 0x9c, 0x9e, 0x9f, 0xd8, 0xae, 0xbe, 0xf5, + 0xce, 0xcf, 0xd9, 0xc4, 0xaf, 0xbf, 0xde, 0xdf, + 0xf6, 0xff, 0xf9, 0xfa, 0xfb, 0xfe, 0xf7, 0xfd, + 0xbd, 0xb9, 0xd0, 0xd1, 0xd4, 0xd5, 0xe2, 0xd2, + 0xd3, 0xe3, 0xa0, 0xe0, 0xa5, 0xc9, 0xe4, 0xdc, + 0xdd, 0xda, 0xaa, 0xb6, 0xc6, 0xb8, 0xb7, 0xc3, + 0xb0, 0xba, 0xc5, 0xad, 0xb2, 0xb3, 0xd7, 0xf0 + }, + 256 +}; +const charset_spec charset_CS_MAC_ROMANIAN_OLD = { + CS_MAC_ROMANIAN_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_ROMANIAN_OLD +}; + +const sbcs_data sbcsdata_CS_MAC_GREEK_OLD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x00c4, 0x00b9, 0x00b2, 0x00c9, 0x00b3, 0x00d6, 0x00dc, 0x0385, + 0x00e0, 0x00e2, 0x00e4, 0x0384, 0x00a8, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00a3, 0x2122, 0x00ee, 0x00ef, 0x2022, 0x00bd, + 0x2030, 0x00f4, 0x00f6, 0x00a6, 0x00ad, 0x00f9, 0x00fb, 0x00fc, + 0x2020, 0x0393, 0x0394, 0x0398, 0x039b, 0x039e, 0x03a0, 0x00df, + 0x00ae, 0x00a9, 0x03a3, 0x03aa, 0x00a7, 0x2260, 0x00b0, 0x00b7, + 0x0391, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x0392, 0x0395, 0x0396, + 0x0397, 0x0399, 0x039a, 0x039c, 0x03a6, 0x03ab, 0x03a8, 0x03a9, + 0x03ac, 0x039d, 0x00ac, 0x039f, 0x03a1, 0x2248, 0x03a4, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x03a5, 0x03a7, 0x0386, 0x0388, 0x0153, + 0x2013, 0x2015, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x0389, + 0x038a, 0x038c, 0x038e, 0x03ad, 0x03ae, 0x03af, 0x03cc, 0x038f, + 0x03cd, 0x03b1, 0x03b2, 0x03c8, 0x03b4, 0x03b5, 0x03c6, 0x03b3, + 0x03b7, 0x03b9, 0x03be, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03bf, + 0x03c0, 0x03ce, 0x03c1, 0x03c3, 0x03c4, 0x03b8, 0x03c9, 0x03c2, + 0x03c7, 0x03c5, 0x03b6, 0x03ca, 0x03cb, 0x0390, 0x03b0, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0x92, 0xb4, 0x9b, 0xac, 0x8c, 0xa9, 0xc7, + 0xc2, 0x9c, 0xa8, 0xae, 0xb1, 0x82, 0x84, 0xaf, + 0x81, 0xc8, 0x97, 0x80, 0x83, 0x85, 0x86, 0xa7, + 0x88, 0x89, 0x8a, 0x8d, 0x8f, 0x8e, 0x90, 0x91, + 0x94, 0x95, 0x99, 0x9a, 0xd6, 0x9d, 0x9e, 0x9f, + 0xcf, 0x8b, 0x87, 0xcd, 0xce, 0xd7, 0xd8, 0xd9, + 0xda, 0xdf, 0xfd, 0xb0, 0xb5, 0xa1, 0xa2, 0xb6, + 0xb7, 0xb8, 0xa3, 0xb9, 0xba, 0xa4, 0xbb, 0xc1, + 0xa5, 0xc3, 0xa6, 0xc4, 0xaa, 0xc6, 0xcb, 0xbc, + 0xcc, 0xbe, 0xbf, 0xab, 0xbd, 0xc0, 0xdb, 0xdc, + 0xdd, 0xfe, 0xe1, 0xe2, 0xe7, 0xe4, 0xe5, 0xfa, + 0xe8, 0xf5, 0xe9, 0xeb, 0xec, 0xed, 0xee, 0xea, + 0xef, 0xf0, 0xf2, 0xf7, 0xf3, 0xf4, 0xf9, 0xe6, + 0xf8, 0xe3, 0xf6, 0xfb, 0xfc, 0xde, 0xe0, 0xf1, + 0xd0, 0xd1, 0xd4, 0xd5, 0xd2, 0xd3, 0xa0, 0x96, + 0xc9, 0x98, 0x93, 0xc5, 0xad, 0xb2, 0xb3 + }, + 255 +}; +const charset_spec charset_CS_MAC_GREEK_OLD = { + CS_MAC_GREEK_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_GREEK_OLD +}; + +const sbcs_data sbcsdata_CS_MAC_CYRILLIC_OLD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x2020, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406, + 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x2022, 0x0408, + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a, + 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e, + 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x00a4 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xa2, 0xa3, 0xff, 0xa4, 0xa9, 0xc7, 0xc2, + 0xa8, 0xa1, 0xb1, 0xb5, 0xa6, 0xc8, 0xd6, 0xc4, + 0xdd, 0xab, 0xae, 0xb8, 0xc1, 0xa7, 0xba, 0xb7, + 0xbc, 0xbe, 0xcb, 0xcd, 0xd8, 0xda, 0x80, 0x81, + 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, + 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, + 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, + 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xe0, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, 0xde, 0xac, + 0xaf, 0xb9, 0xcf, 0xb4, 0xbb, 0xc0, 0xbd, 0xbf, + 0xcc, 0xce, 0xd9, 0xdb, 0xd0, 0xd1, 0xd4, 0xd5, + 0xd2, 0xd3, 0xd7, 0xa0, 0xa5, 0xc9, 0xdc, 0xaa, + 0xc6, 0xc3, 0xb0, 0xc5, 0xad, 0xb2, 0xb3 + }, + 255 +}; +const charset_spec charset_CS_MAC_CYRILLIC_OLD = { + CS_MAC_CYRILLIC_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_CYRILLIC_OLD +}; + +const sbcs_data sbcsdata_CS_MAC_UKRAINE = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x2020, 0x00b0, 0x0490, 0x00a3, 0x00a7, 0x2022, 0x00b6, 0x0406, + 0x00ae, 0x00a9, 0x2122, 0x0402, 0x0452, 0x2260, 0x0403, 0x0453, + 0x221e, 0x00b1, 0x2264, 0x2265, 0x0456, 0x00b5, 0x0491, 0x0408, + 0x0404, 0x0454, 0x0407, 0x0457, 0x0409, 0x0459, 0x040a, 0x045a, + 0x0458, 0x0405, 0x00ac, 0x221a, 0x0192, 0x2248, 0x2206, 0x00ab, + 0x00bb, 0x2026, 0x00a0, 0x040b, 0x045b, 0x040c, 0x045c, 0x0455, + 0x2013, 0x2014, 0x201c, 0x201d, 0x2018, 0x2019, 0x00f7, 0x201e, + 0x040e, 0x045e, 0x040f, 0x045f, 0x2116, 0x0401, 0x0451, 0x044f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x00a4 + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0xca, 0xa3, 0xff, 0xa4, 0xa9, 0xc7, 0xc2, 0xa8, + 0xa1, 0xb1, 0xb5, 0xa6, 0xc8, 0xd6, 0xc4, 0xdd, + 0xab, 0xae, 0xb8, 0xc1, 0xa7, 0xba, 0xb7, 0xbc, + 0xbe, 0xcb, 0xcd, 0xd8, 0xda, 0x80, 0x81, 0x82, + 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, + 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, + 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, + 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xe0, 0xe1, 0xe2, + 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, + 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, + 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, + 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, 0xde, 0xac, 0xaf, + 0xb9, 0xcf, 0xb4, 0xbb, 0xc0, 0xbd, 0xbf, 0xcc, + 0xce, 0xd9, 0xdb, 0xa2, 0xb6, 0xd0, 0xd1, 0xd4, + 0xd5, 0xd2, 0xd3, 0xd7, 0xa0, 0xa5, 0xc9, 0xdc, + 0xaa, 0xc6, 0xc3, 0xb0, 0xc5, 0xad, 0xb2, 0xb3 + }, + 256 +}; +const charset_spec charset_CS_MAC_UKRAINE = { + CS_MAC_UKRAINE, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_UKRAINE +}; + +const sbcs_data sbcsdata_CS_MAC_VT100 = { + { + 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, + 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f, + 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, + 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2421, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x00b8, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x00d7, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x00b9, 0x00b2, + 0x00b3, 0x03c0, 0x00a6, 0x00aa, 0x00ba, 0x2592, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x00bd, 0x0192, 0x00bc, 0x00be, 0x00ab, + 0x00bb, 0x2026, ERROR , 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x2518, 0x2510, 0x250c, 0x2514, 0x00f7, 0x2022, + 0x00ff, 0x0178, 0x253c, 0x20ac, 0x00d0, 0x00f0, 0x00fe, 0x00de, + 0x00fd, 0x00b7, 0x23ba, 0x23bb, 0x2500, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + ERROR , 0x00d2, 0x00da, 0x00db, 0x00d9, 0x23bc, 0x23bd, 0x251c, + 0x2524, 0x2534, 0x252c, 0x2502, ERROR , ERROR , ERROR , ERROR + }, + { + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0xc1, + 0xa2, 0xa3, 0xb4, 0xba, 0xa4, 0xac, 0xa9, 0xbb, + 0xc7, 0xc2, 0xa8, 0xa1, 0xb1, 0xb7, 0xb8, 0xab, + 0xb5, 0xa6, 0xe1, 0xa5, 0xb6, 0xbc, 0xc8, 0xc5, + 0xc3, 0xc6, 0xc0, 0xcb, 0xe7, 0xe5, 0xcc, 0x80, + 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, 0xed, + 0xea, 0xeb, 0xec, 0xdc, 0x84, 0xf1, 0xee, 0xef, + 0xcd, 0x85, 0xb0, 0xaf, 0xf4, 0xf2, 0xf3, 0x86, + 0xa0, 0xdf, 0xa7, 0x88, 0x87, 0x89, 0x8b, 0x8a, + 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, 0x93, + 0x92, 0x94, 0x95, 0xdd, 0x96, 0x98, 0x97, 0x99, + 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, 0x9f, + 0xe0, 0xde, 0xd8, 0xce, 0xcf, 0xd9, 0xc4, 0xb9, + 0xd0, 0xd1, 0xd7, 0xc9, 0xdb, 0xaa, 0xad, 0xb2, + 0xb3, 0xe2, 0xe3, 0xf5, 0xf6, 0x00, 0x01, 0x02, + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x7f, 0xe4, 0xfb, + 0xd4, 0xd3, 0xd5, 0xd2, 0xf7, 0xf8, 0xfa, 0xf9, + 0xda, 0xbd + }, + 250 +}; +const charset_spec charset_CS_MAC_VT100 = { + CS_MAC_VT100, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_VT100 +}; + +const sbcs_data sbcsdata_CS_MAC_VT100_OLD = { + { + 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, + 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f, + 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, + 0x2418, 0x2419, 0x241a, 0x241b, 0x241c, 0x241d, 0x241e, 0x241f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2421, + 0x00c4, 0x00c5, 0x00c7, 0x00c9, 0x00d1, 0x00d6, 0x00dc, 0x00e1, + 0x00e0, 0x00e2, 0x00e4, 0x00e3, 0x00e5, 0x00e7, 0x00e9, 0x00e8, + 0x00ea, 0x00eb, 0x00ed, 0x00ec, 0x00ee, 0x00ef, 0x00f1, 0x00f3, + 0x00f2, 0x00f4, 0x00f6, 0x00f5, 0x00fa, 0x00f9, 0x00fb, 0x00fc, + 0x00dd, 0x00b0, 0x00a2, 0x00a3, 0x00a7, 0x00b8, 0x00b6, 0x00df, + 0x00ae, 0x00a9, 0x2122, 0x00b4, 0x00a8, 0x2260, 0x00c6, 0x00d8, + 0x00d7, 0x00b1, 0x2264, 0x2265, 0x00a5, 0x00b5, 0x00b9, 0x00b2, + 0x00b3, 0x03c0, 0x00a6, 0x00aa, 0x00ba, 0x2592, 0x00e6, 0x00f8, + 0x00bf, 0x00a1, 0x00ac, 0x00bd, 0x0192, 0x00bc, 0x00be, 0x00ab, + 0x00bb, 0x2026, ERROR , 0x00c0, 0x00c3, 0x00d5, 0x0152, 0x0153, + 0x2013, 0x2014, 0x2518, 0x2510, 0x250c, 0x2514, 0x00f7, 0x2022, + 0x00ff, 0x0178, 0x253c, 0x00a4, 0x00d0, 0x00f0, 0x00fe, 0x00de, + 0x00fd, 0x00b7, 0x23ba, 0x23bb, 0x2500, 0x00c2, 0x00ca, 0x00c1, + 0x00cb, 0x00c8, 0x00cd, 0x00ce, 0x00cf, 0x00cc, 0x00d3, 0x00d4, + ERROR , 0x00d2, 0x00da, 0x00db, 0x00d9, 0x23bc, 0x23bd, 0x251c, + 0x2524, 0x2534, 0x252c, 0x2502, ERROR , ERROR , ERROR , ERROR + }, + { + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0xc1, + 0xa2, 0xa3, 0xdb, 0xb4, 0xba, 0xa4, 0xac, 0xa9, + 0xbb, 0xc7, 0xc2, 0xa8, 0xa1, 0xb1, 0xb7, 0xb8, + 0xab, 0xb5, 0xa6, 0xe1, 0xa5, 0xb6, 0xbc, 0xc8, + 0xc5, 0xc3, 0xc6, 0xc0, 0xcb, 0xe7, 0xe5, 0xcc, + 0x80, 0x81, 0xae, 0x82, 0xe9, 0x83, 0xe6, 0xe8, + 0xed, 0xea, 0xeb, 0xec, 0xdc, 0x84, 0xf1, 0xee, + 0xef, 0xcd, 0x85, 0xb0, 0xaf, 0xf4, 0xf2, 0xf3, + 0x86, 0xa0, 0xdf, 0xa7, 0x88, 0x87, 0x89, 0x8b, + 0x8a, 0x8c, 0xbe, 0x8d, 0x8f, 0x8e, 0x90, 0x91, + 0x93, 0x92, 0x94, 0x95, 0xdd, 0x96, 0x98, 0x97, + 0x99, 0x9b, 0x9a, 0xd6, 0xbf, 0x9d, 0x9c, 0x9e, + 0x9f, 0xe0, 0xde, 0xd8, 0xce, 0xcf, 0xd9, 0xc4, + 0xb9, 0xd0, 0xd1, 0xd7, 0xc9, 0xaa, 0xad, 0xb2, + 0xb3, 0xe2, 0xe3, 0xf5, 0xf6, 0x00, 0x01, 0x02, + 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, + 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x7f, 0xe4, 0xfb, + 0xd4, 0xd3, 0xd5, 0xd2, 0xf7, 0xf8, 0xfa, 0xf9, + 0xda, 0xbd + }, + 250 +}; +const charset_spec charset_CS_MAC_VT100_OLD = { + CS_MAC_VT100_OLD, read_sbcs, write_sbcs, &sbcsdata_CS_MAC_VT100_OLD +}; + +const sbcs_data sbcsdata_CS_VISCII = { + { + 0x0000, 0x0001, 0x1eb2, 0x0003, 0x0004, 0x1eb4, 0x1eaa, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x1ef6, 0x0015, 0x0016, 0x0017, + 0x0018, 0x1ef8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1ef4, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x1ea0, 0x1eae, 0x1eb0, 0x1eb6, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eac, + 0x1ebc, 0x1eb8, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ed0, + 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1ee2, 0x1eda, 0x1edc, 0x1ede, + 0x1eca, 0x1ece, 0x1ecc, 0x1ec8, 0x1ee6, 0x0168, 0x1ee4, 0x1ef2, + 0x00d5, 0x1eaf, 0x1eb1, 0x1eb7, 0x1ea5, 0x1ea7, 0x1ea8, 0x1ead, + 0x1ebd, 0x1eb9, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ed1, + 0x1ed3, 0x1ed5, 0x1ed7, 0x1ee0, 0x01a0, 0x1ed9, 0x1edd, 0x1edf, + 0x1ecb, 0x1ef0, 0x1ee8, 0x1eea, 0x1eec, 0x01a1, 0x1edb, 0x01af, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x1ea2, 0x0102, 0x1eb3, 0x1eb5, + 0x00c8, 0x00c9, 0x00ca, 0x1eba, 0x00cc, 0x00cd, 0x0128, 0x1ef3, + 0x0110, 0x1ee9, 0x00d2, 0x00d3, 0x00d4, 0x1ea1, 0x1ef7, 0x1eeb, + 0x1eed, 0x00d9, 0x00da, 0x1ef9, 0x1ef5, 0x00dd, 0x1ee1, 0x01b0, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x1ea3, 0x0103, 0x1eef, 0x1eab, + 0x00e8, 0x00e9, 0x00ea, 0x1ebb, 0x00ec, 0x00ed, 0x0129, 0x1ec9, + 0x0111, 0x1ef1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x1ecf, 0x1ecd, + 0x1ee5, 0x00f9, 0x00fa, 0x0169, 0x1ee7, 0x00fd, 0x1ee3, 0x1eee + }, + { + 0x00, 0x01, 0x03, 0x04, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, + 0x1d, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, + 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, + 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, + 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, + 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, + 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, + 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, + 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, + 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, + 0x7e, 0x7f, 0xc0, 0xc1, 0xc2, 0xc3, 0xc8, 0xc9, + 0xca, 0xcc, 0xcd, 0xd2, 0xd3, 0xd4, 0xa0, 0xd9, + 0xda, 0xdd, 0xe0, 0xe1, 0xe2, 0xe3, 0xe8, 0xe9, + 0xea, 0xec, 0xed, 0xf2, 0xf3, 0xf4, 0xf5, 0xf9, + 0xfa, 0xfd, 0xc5, 0xe5, 0xd0, 0xf0, 0xce, 0xee, + 0x9d, 0xfb, 0xb4, 0xbd, 0xbf, 0xdf, 0x80, 0xd5, + 0xc4, 0xe4, 0x84, 0xa4, 0x85, 0xa5, 0x86, 0x06, + 0xe7, 0x87, 0xa7, 0x81, 0xa1, 0x82, 0xa2, 0x02, + 0xc6, 0x05, 0xc7, 0x83, 0xa3, 0x89, 0xa9, 0xcb, + 0xeb, 0x88, 0xa8, 0x8a, 0xaa, 0x8b, 0xab, 0x8c, + 0xac, 0x8d, 0xad, 0x8e, 0xae, 0x9b, 0xef, 0x98, + 0xb8, 0x9a, 0xf7, 0x99, 0xf6, 0x8f, 0xaf, 0x90, + 0xb0, 0x91, 0xb1, 0x92, 0xb2, 0x93, 0xb5, 0x95, + 0xbe, 0x96, 0xb6, 0x97, 0xb7, 0xb3, 0xde, 0x94, + 0xfe, 0x9e, 0xf8, 0x9c, 0xfc, 0xba, 0xd1, 0xbb, + 0xd7, 0xbc, 0xd8, 0xff, 0xe6, 0xb9, 0xf1, 0x9f, + 0xcf, 0x1e, 0xdc, 0x14, 0xd6, 0x19, 0xdb + }, + 255 +}; +const charset_spec charset_CS_VISCII = { + CS_VISCII, read_sbcs, write_sbcs, &sbcsdata_CS_VISCII +}; + +const sbcs_data sbcsdata_CS_HP_ROMAN8 = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + 0x00a0, 0x00c0, 0x00c2, 0x00c8, 0x00ca, 0x00cb, 0x00ce, 0x00cf, + 0x00b4, 0x02cb, 0x02c6, 0x00a8, 0x02dc, 0x00d9, 0x00db, 0x20a4, + 0x00af, 0x00dd, 0x00fd, 0x00b0, 0x00c7, 0x00e7, 0x00d1, 0x00f1, + 0x00a1, 0x00bf, 0x00a4, 0x00a3, 0x00a5, 0x00a7, 0x0192, 0x00a2, + 0x00e2, 0x00ea, 0x00f4, 0x00fb, 0x00e1, 0x00e9, 0x00f3, 0x00fa, + 0x00e0, 0x00e8, 0x00f2, 0x00f9, 0x00e4, 0x00eb, 0x00f6, 0x00fc, + 0x00c5, 0x00ee, 0x00d8, 0x00c6, 0x00e5, 0x00ed, 0x00f8, 0x00e6, + 0x00c4, 0x00ec, 0x00d6, 0x00dc, 0x00c9, 0x00ef, 0x00df, 0x00d4, + 0x00c1, 0x00c3, 0x00e3, 0x00d0, 0x00f0, 0x00cd, 0x00cc, 0x00d3, + 0x00d2, 0x00d5, 0x00f5, 0x0160, 0x0161, 0x00da, 0x0178, 0x00ff, + 0x00de, 0x00fe, 0x00b7, 0x00b5, 0x00b6, 0x00be, 0x2014, 0x00bc, + 0x00bd, 0x00aa, 0x00ba, 0x00ab, 0x25a0, 0x00bb, 0x00b1, ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xb8, 0xbf, 0xbb, 0xba, 0xbc, 0xbd, 0xab, + 0xf9, 0xfb, 0xb0, 0xb3, 0xfe, 0xa8, 0xf3, 0xf4, + 0xf2, 0xfa, 0xfd, 0xf7, 0xf8, 0xf5, 0xb9, 0xa1, + 0xe0, 0xa2, 0xe1, 0xd8, 0xd0, 0xd3, 0xb4, 0xa3, + 0xdc, 0xa4, 0xa5, 0xe6, 0xe5, 0xa6, 0xa7, 0xe3, + 0xb6, 0xe8, 0xe7, 0xdf, 0xe9, 0xda, 0xd2, 0xad, + 0xed, 0xae, 0xdb, 0xb1, 0xf0, 0xde, 0xc8, 0xc4, + 0xc0, 0xe2, 0xcc, 0xd4, 0xd7, 0xb5, 0xc9, 0xc5, + 0xc1, 0xcd, 0xd9, 0xd5, 0xd1, 0xdd, 0xe4, 0xb7, + 0xca, 0xc6, 0xc2, 0xea, 0xce, 0xd6, 0xcb, 0xc7, + 0xc3, 0xcf, 0xb2, 0xf1, 0xef, 0xeb, 0xec, 0xee, + 0xbe, 0xaa, 0xa9, 0xac, 0xf6, 0xaf, 0xfc + }, + 255 +}; +const charset_spec charset_CS_HP_ROMAN8 = { + CS_HP_ROMAN8, read_sbcs, write_sbcs, &sbcsdata_CS_HP_ROMAN8 +}; + +const sbcs_data sbcsdata_CS_DEC_MCS = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, + 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, + 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, + ERROR , 0x00a1, 0x00a2, 0x00a3, ERROR , 0x00a5, ERROR , 0x00a7, + 0x00a4, 0x00a9, 0x00aa, 0x00ab, ERROR , ERROR , ERROR , ERROR , + 0x00b0, 0x00b1, 0x00b2, 0x00b3, ERROR , 0x00b5, 0x00b6, 0x00b7, + ERROR , 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, ERROR , 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + ERROR , 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0152, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0178, ERROR , 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + ERROR , 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0153, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00ff, ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa1, 0xa2, 0xa3, 0xa8, 0xa5, 0xa7, 0xa9, 0xaa, + 0xab, 0xb0, 0xb1, 0xb2, 0xb3, 0xb5, 0xb6, 0xb7, + 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbf, 0xc0, 0xc1, + 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, + 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd1, 0xd2, + 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, 0xd9, 0xda, 0xdb, + 0xdc, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, + 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, + 0xee, 0xef, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xd7, 0xf7, + 0xdd + }, + 241 +}; +const charset_spec charset_CS_DEC_MCS = { + CS_DEC_MCS, read_sbcs, write_sbcs, &sbcsdata_CS_DEC_MCS +}; + +const sbcs_data sbcsdata_CS_PDF = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x02d8, 0x02c7, 0x02c6, 0x02d9, 0x02dd, 0x02db, 0x02da, 0x02dc, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, ERROR , + 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x0192, 0x2044, + 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, + 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x0141, 0x0152, 0x0160, + 0x0178, 0x017d, 0x0131, 0x0142, 0x0153, 0x0161, 0x017e, ERROR , + 0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0xa1, + 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, + 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, + 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, + 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, + 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, + 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, + 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, + 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, + 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, + 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x9a, 0x95, + 0x9b, 0x96, 0x9c, 0x97, 0x9d, 0x98, 0x99, 0x9e, + 0x86, 0x1a, 0x19, 0x18, 0x1b, 0x1e, 0x1d, 0x1f, + 0x1c, 0x85, 0x84, 0x8f, 0x90, 0x91, 0x8d, 0x8e, + 0x8c, 0x81, 0x82, 0x80, 0x83, 0x8b, 0x88, 0x89, + 0x87, 0xa0, 0x92, 0x8a, 0x93, 0x94 + }, + 254 +}; +const charset_spec charset_CS_PDF = { + CS_PDF, read_sbcs, write_sbcs, &sbcsdata_CS_PDF +}; + +const sbcs_data sbcsdata_CS_PSSTD = { + { + 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, + 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, + 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x2019, + 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, + 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, + 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, + 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, + 0x2018, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, + 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , 0x00a1, 0x00a2, 0x00a3, 0x2044, 0x00a5, 0x0192, 0x00a7, + 0x00a4, 0x0027, 0x201c, 0x00ab, 0x2039, 0x203a, 0xfb01, 0xfb02, + ERROR , 0x2013, 0x2020, 0x2021, 0x00b7, ERROR , 0x00b6, 0x2022, + 0x201a, 0x201e, 0x201d, 0x00bb, 0x2026, 0x2030, ERROR , 0x00bf, + ERROR , 0x0060, 0x00b4, 0x02c6, 0x02dc, 0x00af, 0x02d8, 0x02d9, + 0x00a8, ERROR , 0x02da, 0x00b8, ERROR , 0x02dd, 0x02db, 0x02c7, + 0x2014, ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , ERROR , + ERROR , 0x00c6, ERROR , 0x00aa, ERROR , ERROR , ERROR , ERROR , + 0x0141, 0x00d8, 0x0152, 0x00ba, ERROR , ERROR , ERROR , ERROR , + ERROR , 0x00e6, ERROR , ERROR , ERROR , 0x0131, ERROR , ERROR , + 0x0142, 0x00f8, 0x0153, 0x00df, ERROR , ERROR , ERROR , ERROR + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0xa9, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, + 0xc1, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0xa1, + 0xa2, 0xa3, 0xa8, 0xa5, 0xa7, 0xc8, 0xe3, 0xab, + 0xc5, 0xc2, 0xb6, 0xb4, 0xcb, 0xeb, 0xbb, 0xbf, + 0xe1, 0xe9, 0xfb, 0xf1, 0xf9, 0xf5, 0xe8, 0xf8, + 0xea, 0xfa, 0xa6, 0xc3, 0xcf, 0xc6, 0xc7, 0xca, + 0xce, 0xc4, 0xcd, 0xb1, 0xd0, 0x60, 0x27, 0xb8, + 0xaa, 0xba, 0xb9, 0xb2, 0xb3, 0xb7, 0xbc, 0xbd, + 0xac, 0xad, 0xa4, 0xae, 0xaf + }, + 181 +}; +const charset_spec charset_CS_PSSTD = { + CS_PSSTD, read_sbcs, write_sbcs, &sbcsdata_CS_PSSTD +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_ASCII) +ENUM_CHARSET(CS_BS4730) +ENUM_CHARSET(CS_DEC_GRAPHICS) +ENUM_CHARSET(CS_ISO8859_1) +ENUM_CHARSET(CS_ISO8859_2) +ENUM_CHARSET(CS_ISO8859_3) +ENUM_CHARSET(CS_ISO8859_4) +ENUM_CHARSET(CS_ISO8859_5) +ENUM_CHARSET(CS_ISO8859_6) +ENUM_CHARSET(CS_ISO8859_7) +ENUM_CHARSET(CS_ISO8859_8) +ENUM_CHARSET(CS_ISO8859_9) +ENUM_CHARSET(CS_ISO8859_10) +ENUM_CHARSET(CS_ISO8859_11) +ENUM_CHARSET(CS_ISO8859_13) +ENUM_CHARSET(CS_ISO8859_14) +ENUM_CHARSET(CS_ISO8859_15) +ENUM_CHARSET(CS_ISO8859_16) +ENUM_CHARSET(CS_ISO8859_1_X11) +ENUM_CHARSET(CS_CP437) +ENUM_CHARSET(CS_CP850) +ENUM_CHARSET(CS_CP866) +ENUM_CHARSET(CS_CP1250) +ENUM_CHARSET(CS_CP1251) +ENUM_CHARSET(CS_CP1252) +ENUM_CHARSET(CS_CP1253) +ENUM_CHARSET(CS_CP1254) +ENUM_CHARSET(CS_CP1255) +ENUM_CHARSET(CS_CP1256) +ENUM_CHARSET(CS_CP1257) +ENUM_CHARSET(CS_CP1258) +ENUM_CHARSET(CS_KOI8_R) +ENUM_CHARSET(CS_KOI8_U) +ENUM_CHARSET(CS_KOI8_RU) +ENUM_CHARSET(CS_JISX0201) +ENUM_CHARSET(CS_MAC_ROMAN) +ENUM_CHARSET(CS_MAC_TURKISH) +ENUM_CHARSET(CS_MAC_CROATIAN) +ENUM_CHARSET(CS_MAC_ICELAND) +ENUM_CHARSET(CS_MAC_ROMANIAN) +ENUM_CHARSET(CS_MAC_GREEK) +ENUM_CHARSET(CS_MAC_CYRILLIC) +ENUM_CHARSET(CS_MAC_THAI) +ENUM_CHARSET(CS_MAC_CENTEURO) +ENUM_CHARSET(CS_MAC_SYMBOL) +ENUM_CHARSET(CS_MAC_DINGBATS) +ENUM_CHARSET(CS_MAC_ROMAN_OLD) +ENUM_CHARSET(CS_MAC_CROATIAN_OLD) +ENUM_CHARSET(CS_MAC_ICELAND_OLD) +ENUM_CHARSET(CS_MAC_ROMANIAN_OLD) +ENUM_CHARSET(CS_MAC_GREEK_OLD) +ENUM_CHARSET(CS_MAC_CYRILLIC_OLD) +ENUM_CHARSET(CS_MAC_UKRAINE) +ENUM_CHARSET(CS_MAC_VT100) +ENUM_CHARSET(CS_MAC_VT100_OLD) +ENUM_CHARSET(CS_VISCII) +ENUM_CHARSET(CS_HP_ROMAN8) +ENUM_CHARSET(CS_DEC_MCS) +ENUM_CHARSET(CS_PDF) +ENUM_CHARSET(CS_PSSTD) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/sbcsdat.h b/app/tools/halibut/charset/sbcsdat.h new file mode 100644 index 0000000..964c912 --- /dev/null +++ b/app/tools/halibut/charset/sbcsdat.h @@ -0,0 +1,75 @@ +/* + * sbcsdat.h - header file for SBCS data structures. + * + * Generated by sbcsgen.pl from sbcs.dat. + * You should edit those files rather than editing this one. + */ + +#ifndef charset_sbcsdat_h +#define charset_sbcsdat_h + +#include "charset.h" +#include "internal.h" + +extern const sbcs_data sbcsdata_CS_ASCII; +extern const sbcs_data sbcsdata_CS_BS4730; +extern const sbcs_data sbcsdata_CS_DEC_GRAPHICS; +extern const sbcs_data sbcsdata_CS_ISO8859_1; +extern const sbcs_data sbcsdata_CS_ISO8859_2; +extern const sbcs_data sbcsdata_CS_ISO8859_3; +extern const sbcs_data sbcsdata_CS_ISO8859_4; +extern const sbcs_data sbcsdata_CS_ISO8859_5; +extern const sbcs_data sbcsdata_CS_ISO8859_6; +extern const sbcs_data sbcsdata_CS_ISO8859_7; +extern const sbcs_data sbcsdata_CS_ISO8859_8; +extern const sbcs_data sbcsdata_CS_ISO8859_9; +extern const sbcs_data sbcsdata_CS_ISO8859_10; +extern const sbcs_data sbcsdata_CS_ISO8859_11; +extern const sbcs_data sbcsdata_CS_ISO8859_13; +extern const sbcs_data sbcsdata_CS_ISO8859_14; +extern const sbcs_data sbcsdata_CS_ISO8859_15; +extern const sbcs_data sbcsdata_CS_ISO8859_16; +extern const sbcs_data sbcsdata_CS_ISO8859_1_X11; +extern const sbcs_data sbcsdata_CS_CP437; +extern const sbcs_data sbcsdata_CS_CP850; +extern const sbcs_data sbcsdata_CS_CP866; +extern const sbcs_data sbcsdata_CS_CP1250; +extern const sbcs_data sbcsdata_CS_CP1251; +extern const sbcs_data sbcsdata_CS_CP1252; +extern const sbcs_data sbcsdata_CS_CP1253; +extern const sbcs_data sbcsdata_CS_CP1254; +extern const sbcs_data sbcsdata_CS_CP1255; +extern const sbcs_data sbcsdata_CS_CP1256; +extern const sbcs_data sbcsdata_CS_CP1257; +extern const sbcs_data sbcsdata_CS_CP1258; +extern const sbcs_data sbcsdata_CS_KOI8_R; +extern const sbcs_data sbcsdata_CS_KOI8_U; +extern const sbcs_data sbcsdata_CS_KOI8_RU; +extern const sbcs_data sbcsdata_CS_JISX0201; +extern const sbcs_data sbcsdata_CS_MAC_ROMAN; +extern const sbcs_data sbcsdata_CS_MAC_TURKISH; +extern const sbcs_data sbcsdata_CS_MAC_CROATIAN; +extern const sbcs_data sbcsdata_CS_MAC_ICELAND; +extern const sbcs_data sbcsdata_CS_MAC_ROMANIAN; +extern const sbcs_data sbcsdata_CS_MAC_GREEK; +extern const sbcs_data sbcsdata_CS_MAC_CYRILLIC; +extern const sbcs_data sbcsdata_CS_MAC_THAI; +extern const sbcs_data sbcsdata_CS_MAC_CENTEURO; +extern const sbcs_data sbcsdata_CS_MAC_SYMBOL; +extern const sbcs_data sbcsdata_CS_MAC_DINGBATS; +extern const sbcs_data sbcsdata_CS_MAC_ROMAN_OLD; +extern const sbcs_data sbcsdata_CS_MAC_CROATIAN_OLD; +extern const sbcs_data sbcsdata_CS_MAC_ICELAND_OLD; +extern const sbcs_data sbcsdata_CS_MAC_ROMANIAN_OLD; +extern const sbcs_data sbcsdata_CS_MAC_GREEK_OLD; +extern const sbcs_data sbcsdata_CS_MAC_CYRILLIC_OLD; +extern const sbcs_data sbcsdata_CS_MAC_UKRAINE; +extern const sbcs_data sbcsdata_CS_MAC_VT100; +extern const sbcs_data sbcsdata_CS_MAC_VT100_OLD; +extern const sbcs_data sbcsdata_CS_VISCII; +extern const sbcs_data sbcsdata_CS_HP_ROMAN8; +extern const sbcs_data sbcsdata_CS_DEC_MCS; +extern const sbcs_data sbcsdata_CS_PDF; +extern const sbcs_data sbcsdata_CS_PSSTD; + +#endif /* charset_sbcsdat_h */ diff --git a/app/tools/halibut/charset/shiftjis.c b/app/tools/halibut/charset/shiftjis.c new file mode 100644 index 0000000..4ad879f --- /dev/null +++ b/app/tools/halibut/charset/shiftjis.c @@ -0,0 +1,128 @@ +/* + * shiftjis.c - multibyte encoding of Shift-JIS + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +/* + * Shift-JIS has no associated data, so `charset' may be ignored. + */ + +static void read_sjis(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + UNUSEDARG(charset); + + /* + * For reading Shift-JIS, state->s0 simply contains the single + * stored lead byte when we are half way through a double-byte + * character, or 0 if we aren't. + */ + + if (state->s0 == 0) { + if ((input_chr >= 0x81 && input_chr <= 0x9F) || + (input_chr >= 0xE0 && input_chr <= 0xEF)) { + /* + * Lead byte. Just store it. + */ + state->s0 = input_chr; + } else { + /* + * Anything else we translate through JIS X 0201. + */ + if (input_chr == 0x5C) + input_chr = 0xA5; + else if (input_chr == 0x7E) + input_chr = 0x203E; + else if (input_chr >= 0xA1 && input_chr <= 0xDF) + input_chr += 0xFF61 - 0xA1; + else if (input_chr < 0x80) + /* do nothing */; + else + input_chr = ERROR; + emit(emitctx, input_chr); + } + } else { + /* + * We have a stored lead byte. We expect a valid followup + * byte. + */ + if (input_chr >= 0x40 && input_chr <= 0xFC && input_chr != 0x7F) { + int r, c; + r = state->s0; + if (r >= 0xE0) r -= (0xE0 - 0xA0); + r -= 0x81; + c = input_chr; + if (c > 0x7F) c--; + c -= 0x40; + r *= 2; + if (c >= 94) + r++, c -= 94; + emit(emitctx, jisx0208_to_unicode(r, c)); + } else { + emit(emitctx, ERROR); + } + state->s0 = 0; + } +} + +/* + * Shift-JIS is a stateless multi-byte encoding (in the sense that + * just after any character has been completed, the state is always + * the same); hence when writing it, there is no need to use the + * charset_state. + */ + +static int write_sjis(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + UNUSEDARG(charset); + UNUSEDARG(state); + + if (input_chr == -1) + return TRUE; /* stateless; no cleanup required */ + + if (input_chr < 0x80 && input_chr != 0x5C && input_chr != 0x7E) { + emit(emitctx, input_chr); + return TRUE; + } else if (input_chr == 0xA5) { + emit(emitctx, 0x5C); + return TRUE; + } else if (input_chr == 0x203E) { + emit(emitctx, 0x7E); + return TRUE; + } else if (input_chr >= 0xFF61 && input_chr <= 0xFF9F) { + emit(emitctx, input_chr - (0xFF61 - 0xA1)); + return TRUE; + } else { + int r, c; + if (unicode_to_jisx0208(input_chr, &r, &c)) { + c += 94 * (r % 2); + r /= 2; + r += 0x81; + if (r >= 0xA0) r += 0xE0 - 0xA0; + c += 0x40; + if (c >= 0x7F) c++; + emit(emitctx, r); + emit(emitctx, c); + return TRUE; + } else { + return FALSE; + } + } +} + +const charset_spec charset_CS_SHIFT_JIS = { + CS_SHIFT_JIS, read_sjis, write_sjis, NULL +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_SHIFT_JIS) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/slookup.c b/app/tools/halibut/charset/slookup.c new file mode 100644 index 0000000..7a4d7c2 --- /dev/null +++ b/app/tools/halibut/charset/slookup.c @@ -0,0 +1,29 @@ +/* + * slookup.c - static lookup of character sets. + */ + +#include "charset.h" +#include "internal.h" + +#define ENUM_CHARSET(x) extern charset_spec const charset_##x; +#include "enum.c" +#undef ENUM_CHARSET + +static charset_spec const *const cs_table[] = { + +#define ENUM_CHARSET(x) &charset_##x, +#include "enum.c" +#undef ENUM_CHARSET + +}; + +charset_spec const *charset_find_spec(int charset) +{ + int i; + + for (i = 0; i < (int)lenof(cs_table); i++) + if (cs_table[i]->charset == charset) + return cs_table[i]; + + return NULL; +} diff --git a/app/tools/halibut/charset/superset.c b/app/tools/halibut/charset/superset.c new file mode 100644 index 0000000..b9b5ea8 --- /dev/null +++ b/app/tools/halibut/charset/superset.c @@ -0,0 +1,65 @@ +/* + * superset.c: deal with character sets which are supersets of + * others. + */ + +#include "charset.h" + +/* + * Just in case it's ever useful again, this rather simplistic + * piece of Perl/sh analyses sbcs.dat and determines which pairs of + * character sets are identical in the A0-FF region. This doesn't + * prove supersethood, but it spots obvious cases. + +perl -ne '/^[^ ]{4} / and defined ($line) and $line < 16 and do {' \ + -e ' chomp; print " $_" if $line>=10; print "\n" if ++$line==16; };' \ + -e '/^charset (.*)$/ and do { $line = 0; printf "%30s:", $1; };' \ + sbcs.dat | sort +1 | uniq -f1 -D + + * When run on sbcs.dat rev 1.3, it reports only two sets of matches: + * + * - ISO8859_1, ISO8859_1_X11 and CP1252 all match. + * - ISO8859_4 and CP1254 match. + * + * FIXME: There is more to it than this, and in particular there's + * even more to it than simple subsethood. Look at CP1255 and + * ISO8859_8: they match at every code point defined in both, but + * they each define at least one code point the other doesn't. It + * isn't clear how I should handle this. The right thing might be + * to define yet another SBCS which is the union of both, and + * upgrade both to that. Or it might be that the unicode.org + * mapping table for CP1255 is simply out of date, and the mapping + * ISO8859_8 has which it doesn't (DF -> U+2017 DOUBLE LOW LINE) + * should be present in it too, which would make it a proper + * superset of ISO8859_8 and solve the problem. + * + * However, for the moment I'm satisfied with enhancing this table + * as and when necessary; the idea is not to include _all_ superset + * relations here, the idea is to spot charset IDs which are used + * _in practice_ to mean other charset IDs. So unless and until I + * find out that there really is confusion between ISO8859_8 and + * CP1255, I don't need to do anything about it here. + */ + +int charset_upgrade(int charset) +{ + if (charset == CS_ASCII || charset == CS_ISO8859_1) + charset = CS_CP1252; + if (charset == CS_ISO8859_4) + charset = CS_CP1254; + if (charset == CS_EUC_KR) + charset = CS_CP949; + return charset; +} + +/* + * This function returns TRUE if the input charset is a vaguely + * sensible superset of ASCII. That is, it returns FALSE for 7-bit + * encoding formats such as HZ and UTF-7. + */ +int charset_contains_ascii(int charset) +{ + return (charset != CS_HZ && + charset != CS_UTF7 && + charset != CS_UTF7_CONSERVATIVE); +} diff --git a/app/tools/halibut/charset/test.c b/app/tools/halibut/charset/test.c new file mode 100644 index 0000000..fc5128e --- /dev/null +++ b/app/tools/halibut/charset/test.c @@ -0,0 +1,72 @@ +/* + * test.c - general libcharset test/demo program which converts + * between two arbitrary charsets. + */ + +#include <stdio.h> +#include <string.h> +#include "charset.h" + +#define lenof(x) ( sizeof((x)) / sizeof(*(x)) ) + +int main(int argc, char **argv) +{ + int srcset, dstset; + charset_state instate = CHARSET_INIT_STATE; + charset_state outstate = CHARSET_INIT_STATE; + char inbuf[256], outbuf[256]; + wchar_t midbuf[256]; + const char *inptr; + const wchar_t *midptr; + int rdret, inlen, midlen, inret, midret; + + if (argc != 3) { + fprintf(stderr, "usage: convcs <charset> <charset>\n"); + return 1; + } + + srcset = charset_from_localenc(argv[1]); + if (srcset == CS_NONE) { + fprintf(stderr, "unknown source charset '%s'\n", argv[1]); + return 1; + } + + dstset = charset_from_localenc(argv[2]); + if (dstset == CS_NONE) { + fprintf(stderr, "unknown destination charset '%s'\n", argv[2]); + return 1; + } + + while (1) { + + rdret = fread(inbuf, 1, sizeof(inbuf), stdin); + + if (rdret <= 0) + break; /* EOF */ + + inlen = rdret; + inptr = inbuf; + while ( (inret = charset_to_unicode(&inptr, &inlen, midbuf, + lenof(midbuf), srcset, + &instate, NULL, 0)) > 0) { + midlen = inret; + midptr = midbuf; + while ( (midret = charset_from_unicode(&midptr, &midlen, outbuf, + lenof(outbuf), dstset, + &outstate, NULL)) > 0) { + fwrite(outbuf, 1, midret, stdout); + } + } + } + + /* + * Reset encoding state. + */ + while ( (midret = charset_from_unicode(NULL, NULL, outbuf, + lenof(outbuf), dstset, + &outstate, NULL)) > 0) { + fwrite(outbuf, 1, midret, stdout); + } + + return 0; +} diff --git a/app/tools/halibut/charset/toucs.c b/app/tools/halibut/charset/toucs.c new file mode 100644 index 0000000..bee98ab --- /dev/null +++ b/app/tools/halibut/charset/toucs.c @@ -0,0 +1,87 @@ +/* + * toucs.c - convert charsets to Unicode. + */ + +#include "charset.h" +#include "internal.h" + +struct unicode_emit_param { + wchar_t *output; + int outlen; + const wchar_t *errstr; + int errlen; + int stopped; +}; + +static void unicode_emit(void *ctx, long int output) +{ + struct unicode_emit_param *param = (struct unicode_emit_param *)ctx; + wchar_t outval; + wchar_t const *p; + int outlen; + + if (output == ERROR) { + if (param->errstr) { + p = param->errstr; + outlen = param->errlen; + } else { + outval = 0xFFFD; /* U+FFFD REPLACEMENT CHARACTER */ + p = &outval; + outlen = 1; + } + } else { + outval = output; + p = &outval; + outlen = 1; + } + + if (param->outlen >= outlen) { + while (outlen > 0) { + *param->output++ = *p++; + param->outlen--; + outlen--; + } + } else { + param->stopped = 1; + } +} + +int charset_to_unicode(const char **input, int *inlen, + wchar_t *output, int outlen, + int charset, charset_state *state, + const wchar_t *errstr, int errlen) +{ + charset_spec const *spec = charset_find_spec(charset); + charset_state localstate = CHARSET_INIT_STATE; + struct unicode_emit_param param; + + param.output = output; + param.outlen = outlen; + param.errstr = errstr; + param.errlen = errlen; + param.stopped = 0; + + if (state) + localstate = *state; /* structure copy */ + + while (*inlen > 0) { + int lenbefore = param.output - output; + spec->read(spec, (unsigned char)**input, &localstate, + unicode_emit, ¶m); + if (param.stopped) { + /* + * The emit function has _tried_ to output some + * characters, but ran up against the end of the + * buffer. Leave immediately, and return what happened + * _before_ attempting to process this character. + */ + return lenbefore; + } + if (state) + *state = localstate; /* structure copy */ + (*input)++; + (*inlen)--; + } + + return param.output - output; +} diff --git a/app/tools/halibut/charset/utf16.c b/app/tools/halibut/charset/utf16.c new file mode 100644 index 0000000..a1af88b --- /dev/null +++ b/app/tools/halibut/charset/utf16.c @@ -0,0 +1,217 @@ +/* + * utf16.c - routines to handle UTF-16 (RFC 2781). + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +struct utf16 { + int s0; /* initial value of state->s0 */ +}; + +static void read_utf16(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + struct utf16 const *utf = (struct utf16 *)charset->data; + long int hw; + + /* + * State variable s1 handles the combining of bytes into + * transport-endianness halfwords. It contains: + * + * - 0 if we're between halfwords + * - 0x100 plus the first byte if we're in mid-halfword + * + * State variable s0 handles everything from there upwards. It + * contains: + * + * - Bottom 16 bits are set to a surrogate value if we've just + * seen one. + * - Next two bits (17:16) indicate possible endiannesses. Bit + * 17 is set if we might be BE; bit 16 if we might be LE. If + * they're both zero, it has to be because this is right at + * the start, so the first thing we do is set them to the + * correct initial state. + * - The bit after that (18) is 1 iff we have already seen at + * least one halfword (meaning we should pass any further + * BOMs straight through). + */ + + /* Set up s0 if this is the start. */ + if (state->s0 == 0) + state->s0 = utf->s0; + + /* Accumulate a transport-endianness halfword. */ + if (state->s1 == 0) { + state->s1 = 0x100 | input_chr; + return; + } + hw = ((state->s1 & 0xFF) << 8) + input_chr; + state->s1 = 0; + + /* Process BOM and determine byte order. */ + if (!(state->s0 & 0x40000)) { + state->s0 |= 0x40000; + if (hw == 0xFEFF && (state->s0 & 0x20000)) { + /* + * Text starts with a big-endian BOM, and big- + * endianness is a possibility. So clear the + * little-endian bit (the BOM confirms our endianness), + * and return without emitting the BOM in Unicode. + */ + state->s0 &= ~0x10000; + return; + } else if (hw == 0xFFFE && (state->s0 & 0x10000)) { + /* + * Text starts with a little-endian BOM, and little- + * endianness is a possibility. So clear the big-endian + * bit (the BOM confirms our endianness), and return + * without emitting the BOM in Unicode. + */ + state->s0 &= ~0x20000; + return; + } else { + /* + * Text does not begin with a BOM. RFC 2781 states that + * in this case we must assume big-endianness if we + * haven't been told otherwise by the content type. + */ + if ((state->s0 & 0x30000) == 0x30000) + state->s0 &= ~0x10000; /* clear LE bit */ + } + } + + /* + * Byte-swap transport-endianness halfword if necessary. We may + * now test individual endianness bits, since we can be sure + * exactly one is set. + */ + if (state->s0 & 0x10000) + hw = ((hw >> 8) | (hw << 8)) & 0xFFFF; + + /* + * Now that the endianness issue has been dealt with, what + * reaches this point should be a stream of halfwords in + * sensible numeric form. So now we process surrogates. + */ + if (state->s0 & 0xFFFF) { + /* + * We have already seen a high surrogate, so we expect a + * low surrogate. Whinge if we didn't get it. + */ + if (hw < 0xDC00 || hw >= 0xE000) { + emit(emitctx, ERROR); + } else { + hw &= 0x3FF; + hw |= (state->s0 & 0x3FF) << 10; + emit(emitctx, hw + 0x10000); + } + state->s0 &= 0xFFFF0000; + } else { + /* + * Any low surrogate is an error. + */ + if (hw >= 0xDC00 && hw < 0xE000) { + emit(emitctx, ERROR); + return; + } + + /* + * Any high surrogate is simply stored until we see the + * next halfword. + */ + if (hw >= 0xD800 && hw < 0xDC00) { + state->s0 |= hw; + return; + } + + /* + * Anything else we simply output. + */ + emit(emitctx, hw); + } +} + +/* + * Repeated code in write_utf16 abstracted out for sanity. + */ +static void emithl(void (*emit)(void *ctx, long int output), void *emitctx, + unsigned long s0, long int hw) +{ + int h = (hw >> 8) & 0xFF, l = hw & 0xFF; + + if (s0 & 0x20000) { + /* Big-endian takes priority over little, if both are allowed. */ + emit(emitctx, h); + emit(emitctx, l); + } else { + emit(emitctx, l); + emit(emitctx, h); + } +} + +static int write_utf16(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + struct utf16 const *utf = (struct utf16 *)charset->data; + + /* + * state->s0 == 0 means we have not output anything yet (and so + * must output a BOM before we do anything else). state->s0 == + * 1 means we are off and running. + */ + + if (input_chr < 0) + return TRUE; /* no cleanup required */ + + if ((input_chr >= 0xD800 && input_chr < 0xE000) || + input_chr >= 0x110000) { + /* + * We can't output surrogates, or anything above 0x10FFFF. + */ + return FALSE; + } + + if (!state->s0) { + state->s0 = 1; + emithl(emit, emitctx, utf->s0, 0xFEFF); + } + + if (input_chr < 0x10000) { + emithl(emit, emitctx, utf->s0, input_chr); + } else { + input_chr -= 0x10000; + /* now input_chr is between 0 and 0xFFFFF inclusive */ + emithl(emit, emitctx, utf->s0, 0xD800 | ((input_chr >> 10) & 0x3FF)); + emithl(emit, emitctx, utf->s0, 0xDC00 | (input_chr & 0x3FF)); + } + return TRUE; +} + +static const struct utf16 utf16_bigendian = { 0x20000 }; +static const struct utf16 utf16_littleendian = { 0x10000 }; +static const struct utf16 utf16_variable_endianness = { 0x30000 }; + +const charset_spec charset_CS_UTF16BE = { + CS_UTF16BE, read_utf16, write_utf16, &utf16_bigendian +}; +const charset_spec charset_CS_UTF16LE = { + CS_UTF16LE, read_utf16, write_utf16, &utf16_littleendian +}; +const charset_spec charset_CS_UTF16 = { + CS_UTF16, read_utf16, write_utf16, &utf16_variable_endianness +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_UTF16) +ENUM_CHARSET(CS_UTF16BE) +ENUM_CHARSET(CS_UTF16LE) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/utf7.c b/app/tools/halibut/charset/utf7.c new file mode 100644 index 0000000..588aa47 --- /dev/null +++ b/app/tools/halibut/charset/utf7.c @@ -0,0 +1,295 @@ +/* + * utf7.c - routines to handle UTF-7 (RFC 1642 / RFC 2152). + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +/* + * This array is generated by a piece of Perl: + +perl -e 'for $i (0..32) { $a[$i] |= 2; } $a[32] |= 1;' \ + -e 'for $i ("a".."z","A".."Z","0".."9","'\''","(",' \ + -e ' ")",",","-",".","/",":","?") { $a[ord $i] |= 1; }' \ + -e 'for $i ("!","\"","#","\$","%","&","*",";","<","=",">","\@",' \ + -e ' "[","]","^","_","`","{","|","}") { $a[ord $i] |= 2; }' \ + -e 'for $i ("a".."z","A".."Z","0".."9","+","/") { $a[ord $i] |= 4; }' \ + -e 'for $i (0..127) { printf "%s%d,%s", $i%32?"":" ", $a[$i],' \ + -e ' ($i+1)%32?"":"\n"; }' + + */ +static const unsigned char utf7_ascii_properties[128] = { + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,2,2,2,2,2,2,1,1,1,2,4,1,1,1,5,5,5,5,5,5,5,5,5,5,5,1,2,2,2,2,1, + 2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,0,2,2,2, + 2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,2,2,2,0,0, +}; +#define SET_D(c) ((c) >= 0 && (c) < 0x80 && (utf7_ascii_properties[(c)] & 1)) +#define SET_O(c) ((c) >= 0 && (c) < 0x80 && (utf7_ascii_properties[(c)] & 2)) +#define SET_B(c) ((c) >= 0 && (c) < 0x80 && (utf7_ascii_properties[(c)] & 4)) + +#define base64_value(c) ( (c) >= 'A' && (c) <= 'Z' ? (c) - 'A' : \ + (c) >= 'a' && (c) <= 'z' ? (c) - 'a' + 26 : \ + (c) >= '0' && (c) <= '9' ? (c) - '0' + 52 : \ + (c) == '+' ? 62 : 63 ) + +static const char *const base64_chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +static void read_utf7(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + long int hw; + + UNUSEDARG(charset); + + /* + * state->s0 is used to handle the conversion of the UTF-7 + * transport format into a stream of halfwords. Its layout is: + * + * - In normal ASCII mode, it is zero. + * + * - Otherwise, it holds a leading 1 followed by all the bits + * so far accumulated in base64 digits. + * + * - Special case: when we have only just seen the initial `+' + * which enters base64 mode, it is set to 2 rather than 1 + * (this is an otherwise unused value since base64 always + * accumulates an even number of bits at a time), so that + * the special sequence `+-' can be made to encode `+' + * easily. + * + * state->s1 is used to handle the conversion of those + * halfwords into Unicode values. It contains a high surrogate + * value if we've just seen one, and 0 otherwise. + */ + + if (!state->s0) { + if (input_chr == '+') + state->s0 = 2; + else + emit(emitctx, input_chr); + return; + } else { + if (!SET_B(input_chr)) { + /* + * base64 mode ends here. Emit the character we have, + * unless it's a minus in which case we should swallow + * it. + */ + if (input_chr != '-') + emit(emitctx, input_chr); + else if (state->s0 == 2) + emit(emitctx, '+'); /* special case */ + state->s0 = 0; + return; + } + + /* + * Now we have a base64 character, so add it to our state, + * first correcting the special case value of s0. + */ + if (state->s0 == 2) + state->s0 = 1; + state->s0 = (state->s0 << 6) | base64_value(input_chr); + } + + /* + * If we don't have a whole halfword at this point, bale out. + */ + if (!(state->s0 & 0xFFFF0000)) + return; + + /* + * Otherwise, extract the halfword. There are three + * possibilities for where the top set bit might be. + */ + if (state->s0 & 0x00100000) { + hw = (state->s0 >> 4) & 0xFFFF; + state->s0 = (state->s0 & 0xF) | 0x10; + } else if (state->s0 & 0x00040000) { + hw = (state->s0 >> 2) & 0xFFFF; + state->s0 = (state->s0 & 3) | 4; + } else { + hw = state->s0 & 0xFFFF; + state->s0 = 1; + } + + /* + * Now what reaches this point should be a stream of halfwords + * in sensible numeric form. So now we process surrogates. + */ + if (state->s1) { + /* + * We have already seen a high surrogate, so we expect a + * low surrogate. Whinge if we didn't get it. + */ + if (hw < 0xDC00 || hw >= 0xE000) { + emit(emitctx, ERROR); + } else { + hw &= 0x3FF; + hw |= (state->s1 & 0x3FF) << 10; + emit(emitctx, hw + 0x10000); + } + state->s1 = 0; + } else { + /* + * Any low surrogate is an error. + */ + if (hw >= 0xDC00 && hw < 0xE000) { + emit(emitctx, ERROR); + return; + } + + /* + * Any high surrogate is simply stored until we see the + * next halfword. + */ + if (hw >= 0xD800 && hw < 0xDC00) { + state->s1 = hw; + return; + } + + /* + * Anything else we simply output. + */ + emit(emitctx, hw); + } +} + +/* + * For writing UTF-7, we supply two charset definitions, one of + * which will directly encode Set O characters and the other of + * which will cautiously base64 them. + */ +static int write_utf7(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + unsigned long hws[2]; + int nhws; + int i; + + /* + * For writing: state->s0 contains accumulated base64 data with + * a 1 in front, and state->s1 indicates how many bits of it we + * have. + */ + + if ((input_chr >= 0xD800 && input_chr < 0xE000) || + input_chr >= 0x110000) { + /* + * We can't output surrogates, or anything above 0x10FFFF. + */ + return FALSE; + } + + /* + * Look for characters which we output in ASCII mode. A special + * case here is +, which can be encoded as the empty base64 + * escape sequence `+-': if we're _already_ in ASCII mode we do + * that, but if we're in base64 mode at the point we see the + + * then we simply stay in base64 mode and output it as a + * halfword. (Switching back would cost three bytes, whereas + * staying in base64 costs only 2 2/3.) + */ + if (input_chr == -1 || SET_D(input_chr) || + (charset->charset == CS_UTF7 && SET_O(input_chr)) || + (!state->s0 && input_chr == '+')) { + if (state->s0) { + /* + * These characters are output in ASCII mode, so flush any + * lingering base64 data. + */ + state->s0 <<= 6 - state->s1; + emit(emitctx, base64_chars[state->s0 & 0x3F]); + /* + * I'm going to arbitrarily decide to always use the + * terminating minus sign. It's easier than figuring out + * whether to do so or not, and looks prettier besides. + */ + emit(emitctx, '-'); + state->s0 = state->s1 = 0; + } + + /* + * Now output the character. + */ + if (input_chr != -1) /* special case: just reset state */ + emit(emitctx, input_chr); + if (input_chr == '+') + emit(emitctx, '-'); /* +- encodes + */ + return TRUE; + } + + /* + * Now we know we have a character that needs to be output as + * either one base64-encoded halfword or two. So first figure + * out how many... + */ + if (input_chr < 0x10000) { + nhws = 1; + hws[0] = input_chr; + } else { + input_chr -= 0x10000; + if (input_chr >= 0x100000) { + /* Anything above 0x10FFFF is outside UTF-7 range. */ + return FALSE; + } + + nhws = 2; + hws[0] = 0xD800 | ((input_chr >> 10) & 0x3FF); + hws[1] = 0xDC00 | (input_chr & 0x3FF); + } + + /* + * ... switch into base64 mode if required ... + */ + if (!state->s0) { + emit(emitctx, '+'); + state->s0 = 1; + state->s1 = 0; + } + + /* + * ... and do the base64 output. + */ + for (i = 0; i < nhws; i++) { + state->s0 = (state->s0 << 16) | hws[i]; + state->s1 += 16; + + while (state->s1 >= 6) { + /* + * The top set bit must be in position 16, 18 or 20. + */ + unsigned long out, topbit; + + out = (state->s0 >> (state->s1 - 6)) & 0x3F; + state->s1 -= 6; + topbit = 1 << state->s1; + state->s0 = (state->s0 & (topbit-1)) | topbit; + + emit(emitctx, base64_chars[out]); + } + } + return TRUE; +} + +const charset_spec charset_CS_UTF7 = { + CS_UTF7, read_utf7, write_utf7, NULL +}; + +const charset_spec charset_CS_UTF7_CONSERVATIVE = { + CS_UTF7_CONSERVATIVE, read_utf7, write_utf7, NULL +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_UTF7) +ENUM_CHARSET(CS_UTF7_CONSERVATIVE) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/utf8.c b/app/tools/halibut/charset/utf8.c new file mode 100644 index 0000000..fa4f0a8 --- /dev/null +++ b/app/tools/halibut/charset/utf8.c @@ -0,0 +1,907 @@ +/* + * utf8.c - routines to handle UTF-8. + */ + +#ifndef ENUM_CHARSETS + +#include "charset.h" +#include "internal.h" + +/* + * The internal read_utf8 and write_utf8 functions in this module + * are not static, because they're also called internally from + * iso2022.c. + */ + +/* + * UTF-8 has no associated data, so `charset' may be ignored. + */ + +void read_utf8(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), void *emitctx) +{ + UNUSEDARG(charset); + + /* + * For reading UTF-8, the `state' word contains the character + * being accumulated. This is shifted left by six bits each + * time a character is added, and there's a single '1' bit + * in what would be bit 31 of the final character, which we + * use to detect when it's complete. + * + * As required, the state is zero when we are not in the middle + * of a multibyte character at all. + * + * For example, when reading E9 8D 8B, starting at state=0: + * + * - after E9, the state is 0x00080009 + * - after 8D, the state is 0x0200024d + * - after 8B, the state conceptually becomes 0x8000934b, at + * which point we notice we've got as many characters as we + * were expecting, output U+934B, and reset the state to + * zero. + * + * If we detect an overlong sequence, we shift the marker bit + * right one bit. This is safe because an overlong sequence + * can't encode a top-bit-set character. Not that we worry + * about what overlong sequences are trying to encode, but + * it's nice to know that we could if we wanted to. + * + * Note that the maximum number of bits we might need to store + * in the character value field is 25 (U+7FFFFFFF contains 31 + * bits, but we will never actually store its full value + * because when we receive the last 6 bits in the final + * continuation byte we will output it and revert the state to + * zero). Hence we need 26 bits in total. + */ + + if (input_chr < 0x80) { + /* + * Single-byte character. If the state is nonzero before + * coming here, output an error for an incomplete sequence. + * Then output the character. + */ + if (state->s0 != 0) { + emit(emitctx, ERROR); + state->s0 = 0; + } + emit(emitctx, input_chr); + } else if (input_chr == 0xFE || input_chr == 0xFF) { + /* + * FE and FF bytes should _never_ occur in UTF-8. They are + * automatic errors; if the state was nonzero to start + * with, output a further error for an incomplete sequence. + */ + if (state->s0 != 0) { + emit(emitctx, ERROR); + state->s0 = 0; + } + emit(emitctx, ERROR); + } else if (input_chr >= 0x80 && input_chr < 0xC0) { + /* + * Continuation byte. Output an error for an unexpected + * continuation byte, if the state is zero. + */ + if (state->s0 == 0) { + emit(emitctx, ERROR); + } else { + unsigned long charval; + + /* + * Otherwise, accumulate more of the character value. + */ + charval = state->s0; + charval = (charval << 6) | (input_chr & 0x3F); + + /* + * Detect overlong encodings. We're looking for too many + * leading zeroes given our position in the character. If + * we find an overlong encoding, clear the current marker + * bit and set the bit below it. Overlong two-byte + * encodings are a special case, and are detected when we + * read their inital byte. + */ + if ((charval & 0xffffffe0L) == 0x02000000L) + charval ^= 0x03000000L; + else if ((charval & 0xfffffff0L) == 0x00080000L) + charval ^= 0x000c0000L; + else if ((charval & 0xfffffff8L) == 0x00002000L) + charval ^= 0x00003000L; + else if ((charval & 0xfffffffcL) == 0x00000080L) + charval ^= 0x000000c0L; + + /* + * Check the byte counts; if we have not reached the + * end of the character, update the state and return. + */ + if (!(charval & 0xc0000000L)) { + state->s0 = charval; + return; + } + + /* + * Clear the marker bit, or set it if it's clear, + * indicating an overlong sequence. + */ + charval ^= 0x80000000L; + + /* + * Now we know we've reached the end of the character. + * `charval' is the Unicode value. We should check for + * various invalid things, and then either output + * charval or an error. In all cases we reset the state + * to zero. + */ + state->s0 = 0; + + if (charval & 0x80000000L) { + /* We got an overlong sequence. */ + emit(emitctx, ERROR); + } else if (charval >= 0xD800 && charval < 0xE000) { + /* + * Surrogates (0xD800-0xDFFF) may never be encoded + * in UTF-8. A surrogate pair in Unicode should + * have been encoded as a single UTF-8 character + * occupying more than three bytes. + */ + emit(emitctx, ERROR); + } else if (charval == 0xFFFE || charval == 0xFFFF) { + /* + * U+FFFE and U+FFFF are invalid Unicode characters + * and may never be encoded in UTF-8. (This is one + * reason why U+FFFF is our way of signalling an + * error to our `emit' function :-) + */ + emit(emitctx, ERROR); + } else { + /* + * Oh, all right. We'll let this one off. + */ + emit(emitctx, charval); + } + } + + } else { + /* + * Lead byte. First output an error for an incomplete + * sequence, if the state is nonzero. + */ + if (state->s0 != 0) + emit(emitctx, ERROR); + + /* + * Now deal with the lead byte: work out the number of + * bytes we expect to see in this character, and extract + * the initial bits of it too. + */ + if (input_chr >= 0xC0 && input_chr < 0xC2) { + /* beginning of an overlong two-byte sequence */ + state->s0 = 0x01000000L | (input_chr & 0x1F); + } else if (input_chr >= 0xC2 && input_chr < 0xE0) { + state->s0 = 0x02000000L | (input_chr & 0x1F); + } else if (input_chr >= 0xE0 && input_chr < 0xF0) { + state->s0 = 0x00080000L | (input_chr & 0x0F); + } else if (input_chr >= 0xF0 && input_chr < 0xF8) { + state->s0 = 0x00002000L | (input_chr & 0x07); + } else if (input_chr >= 0xF8 && input_chr < 0xFC) { + state->s0 = 0x00000080L | (input_chr & 0x03); + } else if (input_chr >= 0xFC && input_chr < 0xFE) { + state->s0 = 0x00000002L | (input_chr & 0x01); + } + } +} + +/* + * UTF-8 is a stateless multi-byte encoding (in the sense that just + * after any character has been completed, the state is always the + * same); hence when writing it, there is no need to use the + * charset_state. + */ + +int write_utf8(charset_spec const *charset, long int input_chr, + charset_state *state, + void (*emit)(void *ctx, long int output), + void *emitctx) +{ + UNUSEDARG(charset); + UNUSEDARG(state); + + if (input_chr == -1) + return TRUE; /* stateless; no cleanup required */ + + /* + * Refuse to output any illegal code points. + */ + if (input_chr == 0xFFFE || input_chr == 0xFFFF || + (input_chr >= 0xD800 && input_chr < 0xE000)) { + return FALSE; + } else if (input_chr < 0x80) { /* one-byte character */ + emit(emitctx, input_chr); + return TRUE; + } else if (input_chr < 0x800) { /* two-byte character */ + emit(emitctx, 0xC0 | (0x1F & (input_chr >> 6))); + emit(emitctx, 0x80 | (0x3F & (input_chr ))); + return TRUE; + } else if (input_chr < 0x10000) { /* three-byte character */ + emit(emitctx, 0xE0 | (0x0F & (input_chr >> 12))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 6))); + emit(emitctx, 0x80 | (0x3F & (input_chr ))); + return TRUE; + } else if (input_chr < 0x200000) { /* four-byte character */ + emit(emitctx, 0xF0 | (0x07 & (input_chr >> 18))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 12))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 6))); + emit(emitctx, 0x80 | (0x3F & (input_chr ))); + return TRUE; + } else if (input_chr < 0x4000000) {/* five-byte character */ + emit(emitctx, 0xF8 | (0x03 & (input_chr >> 24))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 18))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 12))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 6))); + emit(emitctx, 0x80 | (0x3F & (input_chr ))); + return TRUE; + } else { /* six-byte character */ + emit(emitctx, 0xFC | (0x01 & (input_chr >> 30))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 24))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 18))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 12))); + emit(emitctx, 0x80 | (0x3F & (input_chr >> 6))); + emit(emitctx, 0x80 | (0x3F & (input_chr ))); + return TRUE; + } +} + +#ifdef TESTMODE + +#include <stdio.h> +#include <stdarg.h> + +int total_errs = 0; + +void utf8_emit(void *ctx, long output) +{ + wchar_t **p = (wchar_t **)ctx; + *(*p)++ = output; +} + +void utf8_read_test(int line, char *input, int inlen, ...) +{ + va_list ap; + wchar_t *p, str[512]; + int i; + charset_state state; + unsigned long l; + + state.s0 = 0; + p = str; + + for (i = 0; i < inlen; i++) + read_utf8(NULL, input[i] & 0xFF, &state, utf8_emit, &p); + + va_start(ap, inlen); + l = 0; + for (i = 0; i < p - str; i++) { + l = va_arg(ap, long int); + if (l == -1) { + printf("%d: correct string shorter than output\n", line); + total_errs++; + break; + } + if (l != str[i]) { + printf("%d: char %d came out as %08x, should be %08x\n", + line, i, str[i], l); + total_errs++; + } + } + if (l != -1) { + l = va_arg(ap, long int); + if (l != -1) { + printf("%d: correct string longer than output\n", line); + total_errs++; + } + } + va_end(ap); +} + +void utf8_write_test(int line, const long *input, int inlen, ...) +{ + va_list ap; + wchar_t *p, str[512]; + int i; + charset_state state; + unsigned long l; + + state.s0 = 0; + p = str; + + for (i = 0; i < inlen; i++) { + if (!write_utf8(NULL, input[i], &state, utf8_emit, &p)) + utf8_emit(&p, ERROR); + } + + va_start(ap, inlen); + l = 0; + for (i = 0; i < p - str; i++) { + l = va_arg(ap, long int); + if (l == -1) { + printf("%d: correct string shorter than output\n", line); + total_errs++; + break; + } + if (l != str[i]) { + printf("%d: char %d came out as %08x, should be %08x\n", + line, i, str[i], l); + total_errs++; + } + } + if (l != -1) { + l = va_arg(ap, long int); + if (l != -1) { + printf("%d: correct string longer than output\n", line); + total_errs++; + } + } + va_end(ap); +} + +/* Macro to concoct the first three parameters of utf8_read_test. */ +#define TESTSTR(x) __LINE__, x, lenof(x) + +int main(void) +{ + printf("read tests beginning\n"); + utf8_read_test(TESTSTR("\xCE\xBA\xE1\xBD\xB9\xCF\x83\xCE\xBC\xCE\xB5"), + 0x000003BA, /* GREEK SMALL LETTER KAPPA */ + 0x00001F79, /* GREEK SMALL LETTER OMICRON WITH OXIA */ + 0x000003C3, /* GREEK SMALL LETTER SIGMA */ + 0x000003BC, /* GREEK SMALL LETTER MU */ + 0x000003B5, /* GREEK SMALL LETTER EPSILON */ + 0, -1); + utf8_read_test(TESTSTR("\x00"), + 0x00000000, /* <control> */ + 0, -1); + utf8_read_test(TESTSTR("\xC2\x80"), + 0x00000080, /* <control> */ + 0, -1); + utf8_read_test(TESTSTR("\xE0\xA0\x80"), + 0x00000800, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xF0\x90\x80\x80"), + 0x00010000, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xF8\x88\x80\x80\x80"), + 0x00200000, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xFC\x84\x80\x80\x80\x80"), + 0x04000000, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\x7F"), + 0x0000007F, /* <control> */ + 0, -1); + utf8_read_test(TESTSTR("\xDF\xBF"), + 0x000007FF, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xEF\xBF\xBD"), + 0x0000FFFD, /* REPLACEMENT CHARACTER */ + 0, -1); + utf8_read_test(TESTSTR("\xEF\xBF\xBF"), + ERROR, /* <no name available> (invalid char) */ + 0, -1); + utf8_read_test(TESTSTR("\xF7\xBF\xBF\xBF"), + 0x001FFFFF, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xFB\xBF\xBF\xBF\xBF"), + 0x03FFFFFF, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xFD\xBF\xBF\xBF\xBF\xBF"), + 0x7FFFFFFF, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xED\x9F\xBF"), + 0x0000D7FF, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xEE\x80\x80"), + 0x0000E000, /* <Private Use, First> */ + 0, -1); + utf8_read_test(TESTSTR("\xEF\xBF\xBD"), + 0x0000FFFD, /* REPLACEMENT CHARACTER */ + 0, -1); + utf8_read_test(TESTSTR("\xF4\x8F\xBF\xBF"), + 0x0010FFFF, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\xF4\x90\x80\x80"), + 0x00110000, /* <no name available> */ + 0, -1); + utf8_read_test(TESTSTR("\x80"), + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\xBF"), + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\xBF"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\xBF\x80"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\xBF\x80\xBF"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\xBF\x80\xBF\x80"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\xBF\x80\xBF\x80\xBF"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\xBF\x80\xBF\x80\xBF\x80"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF"), + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + ERROR, /* (unexpected continuation byte) */ + 0, -1); + utf8_read_test(TESTSTR("\xC0\x20\xC1\x20\xC2\x20\xC3\x20\xC4\x20\xC5\x20\xC6\x20\xC7\x20"), + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + 0, -1); + utf8_read_test(TESTSTR("\xE0\x20\xE1\x20\xE2\x20\xE3\x20\xE4\x20\xE5\x20\xE6\x20\xE7\x20\xE8\x20\xE9\x20\xEA\x20\xEB\x20\xEC\x20\xED\x20\xEE\x20\xEF\x20"), + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + 0, -1); + utf8_read_test(TESTSTR("\xF0\x20\xF1\x20\xF2\x20\xF3\x20\xF4\x20\xF5\x20\xF6\x20\xF7\x20"), + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + 0, -1); + utf8_read_test(TESTSTR("\xF8\x20\xF9\x20\xFA\x20\xFB\x20"), + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + 0, -1); + utf8_read_test(TESTSTR("\xFC\x20\xFD\x20"), + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + ERROR, /* (incomplete sequence) */ + 0x00000020, /* SPACE */ + 0, -1); + utf8_read_test(TESTSTR("\xC0"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xE0\x80"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xF0\x80\x80"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xF8\x80\x80\x80"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xFC\x80\x80\x80\x80"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xDF"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xEF\xBF"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xF7\xBF\xBF"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xFB\xBF\xBF\xBF"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xFD\xBF\xBF\xBF\xBF"), + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xC0\xE0\x80\xF0\x80\x80\xF8\x80\x80\x80\xFC\x80\x80\x80\x80\xDF\xEF\xBF\xF7\xBF\xBF\xFB\xBF\xBF\xBF\xFD\xBF\xBF\xBF\xBF"), + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + ERROR, /* (incomplete sequence) */ + 0, -1); + utf8_read_test(TESTSTR("\xFE"), + ERROR, /* (invalid UTF-8 byte) */ + 0, -1); + utf8_read_test(TESTSTR("\xFF"), + ERROR, /* (invalid UTF-8 byte) */ + 0, -1); + utf8_read_test(TESTSTR("\xFE\xFE\xFF\xFF"), + ERROR, /* (invalid UTF-8 byte) */ + ERROR, /* (invalid UTF-8 byte) */ + ERROR, /* (invalid UTF-8 byte) */ + ERROR, /* (invalid UTF-8 byte) */ + 0, -1); + utf8_read_test(TESTSTR("\xC0\xAF"), + ERROR, /* SOLIDUS (overlong form of 2F) */ + 0, -1); + utf8_read_test(TESTSTR("\xE0\x80\xAF"), + ERROR, /* SOLIDUS (overlong form of 2F) */ + 0, -1); + utf8_read_test(TESTSTR("\xF0\x80\x80\xAF"), + ERROR, /* SOLIDUS (overlong form of 2F) */ + 0, -1); + utf8_read_test(TESTSTR("\xF8\x80\x80\x80\xAF"), + ERROR, /* SOLIDUS (overlong form of 2F) */ + 0, -1); + utf8_read_test(TESTSTR("\xFC\x80\x80\x80\x80\xAF"), + ERROR, /* SOLIDUS (overlong form of 2F) */ + 0, -1); + utf8_read_test(TESTSTR("\xC1\xBF"), + ERROR, /* <control> (overlong form of 7F) */ + 0, -1); + utf8_read_test(TESTSTR("\xE0\x9F\xBF"), + ERROR, /* <no name available> (overlong form of DF BF) */ + 0, -1); + utf8_read_test(TESTSTR("\xF0\x8F\xBF\xBF"), + ERROR, /* <no name available> (overlong form of EF BF BF) (invalid char) */ + 0, -1); + utf8_read_test(TESTSTR("\xF8\x87\xBF\xBF\xBF"), + ERROR, /* <no name available> (overlong form of F7 BF BF BF) */ + 0, -1); + utf8_read_test(TESTSTR("\xFC\x83\xBF\xBF\xBF\xBF"), + ERROR, /* <no name available> (overlong form of FB BF BF BF BF) */ + 0, -1); + utf8_read_test(TESTSTR("\xC0\x80"), + ERROR, /* <control> (overlong form of 00) */ + 0, -1); + utf8_read_test(TESTSTR("\xE0\x80\x80"), + ERROR, /* <control> (overlong form of 00) */ + 0, -1); + utf8_read_test(TESTSTR("\xF0\x80\x80\x80"), + ERROR, /* <control> (overlong form of 00) */ + 0, -1); + utf8_read_test(TESTSTR("\xF8\x80\x80\x80\x80"), + ERROR, /* <control> (overlong form of 00) */ + 0, -1); + utf8_read_test(TESTSTR("\xFC\x80\x80\x80\x80\x80"), + ERROR, /* <control> (overlong form of 00) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xA0\x80"), + ERROR, /* <Non Private Use High Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAD\xBF"), + ERROR, /* <Non Private Use High Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAE\x80"), + ERROR, /* <Private Use High Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAF\xBF"), + ERROR, /* <Private Use High Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xB0\x80"), + ERROR, /* <Low Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xBE\x80"), + ERROR, /* <no name available> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xBF\xBF"), + ERROR, /* <Low Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xA0\x80\xED\xB0\x80"), + ERROR, /* <Non Private Use High Surrogate, First> (surrogate) */ + ERROR, /* <Low Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xA0\x80\xED\xBF\xBF"), + ERROR, /* <Non Private Use High Surrogate, First> (surrogate) */ + ERROR, /* <Low Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAD\xBF\xED\xB0\x80"), + ERROR, /* <Non Private Use High Surrogate, Last> (surrogate) */ + ERROR, /* <Low Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAD\xBF\xED\xBF\xBF"), + ERROR, /* <Non Private Use High Surrogate, Last> (surrogate) */ + ERROR, /* <Low Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAE\x80\xED\xB0\x80"), + ERROR, /* <Private Use High Surrogate, First> (surrogate) */ + ERROR, /* <Low Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAE\x80\xED\xBF\xBF"), + ERROR, /* <Private Use High Surrogate, First> (surrogate) */ + ERROR, /* <Low Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAF\xBF\xED\xB0\x80"), + ERROR, /* <Private Use High Surrogate, Last> (surrogate) */ + ERROR, /* <Low Surrogate, First> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xED\xAF\xBF\xED\xBF\xBF"), + ERROR, /* <Private Use High Surrogate, Last> (surrogate) */ + ERROR, /* <Low Surrogate, Last> (surrogate) */ + 0, -1); + utf8_read_test(TESTSTR("\xEF\xBF\xBE"), + ERROR, /* <no name available> (invalid char) */ + 0, -1); + utf8_read_test(TESTSTR("\xEF\xBF\xBF"), + ERROR, /* <no name available> (invalid char) */ + 0, -1); + printf("read tests completed\n"); + printf("write tests beginning\n"); + { + const static long str[] = + {0x03BAL, 0x1F79L, 0x03C3L, 0x03BCL, 0x03B5L, 0}; + utf8_write_test(TESTSTR(str), + 0xCE, 0xBA, + 0xE1, 0xBD, 0xB9, + 0xCF, 0x83, + 0xCE, 0xBC, + 0xCE, 0xB5, + 0, -1); + } + { + const static long str[] = {0x0000L, 0}; + utf8_write_test(TESTSTR(str), + 0x00, + 0, -1); + } + { + const static long str[] = {0x0080L, 0}; + utf8_write_test(TESTSTR(str), + 0xC2, 0x80, + 0, -1); + } + { + const static long str[] = {0x0800L, 0}; + utf8_write_test(TESTSTR(str), + 0xE0, 0xA0, 0x80, + 0, -1); + } + { + const static long str[] = {0x00010000L, 0}; + utf8_write_test(TESTSTR(str), + 0xF0, 0x90, 0x80, 0x80, + 0, -1); + } + { + const static long str[] = {0x00200000L, 0}; + utf8_write_test(TESTSTR(str), + 0xF8, 0x88, 0x80, 0x80, 0x80, + 0, -1); + } + { + const static long str[] = {0x04000000L, 0}; + utf8_write_test(TESTSTR(str), + 0xFC, 0x84, 0x80, 0x80, 0x80, 0x80, + 0, -1); + } + { + const static long str[] = {0x007FL, 0}; + utf8_write_test(TESTSTR(str), + 0x7F, + 0, -1); + } + { + const static long str[] = {0x07FFL, 0}; + utf8_write_test(TESTSTR(str), + 0xDF, 0xBF, + 0, -1); + } + { + const static long str[] = {0xFFFDL, 0}; + utf8_write_test(TESTSTR(str), + 0xEF, 0xBF, 0xBD, + 0, -1); + } + { + const static long str[] = {0xFFFFL, 0}; + utf8_write_test(TESTSTR(str), + ERROR, + 0, -1); + } + { + const static long str[] = {0x001FFFFFL, 0}; + utf8_write_test(TESTSTR(str), + 0xF7, 0xBF, 0xBF, 0xBF, + 0, -1); + } + { + const static long str[] = {0x03FFFFFFL, 0}; + utf8_write_test(TESTSTR(str), + 0xFB, 0xBF, 0xBF, 0xBF, 0xBF, + 0, -1); + } + { + const static long str[] = {0x7FFFFFFFL, 0}; + utf8_write_test(TESTSTR(str), + 0xFD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, + 0, -1); + } + { + const static long str[] = {0xD7FFL, 0}; + utf8_write_test(TESTSTR(str), + 0xED, 0x9F, 0xBF, + 0, -1); + } + { + const static long str[] = {0xD800L, 0}; + utf8_write_test(TESTSTR(str), + ERROR, + 0, -1); + } + { + const static long str[] = {0xD800L, 0xDC00L, 0}; + utf8_write_test(TESTSTR(str), + ERROR, + ERROR, + 0, -1); + } + { + const static long str[] = {0xDFFFL, 0}; + utf8_write_test(TESTSTR(str), + ERROR, + 0, -1); + } + { + const static long str[] = {0xE000L, 0}; + utf8_write_test(TESTSTR(str), + 0xEE, 0x80, 0x80, + 0, -1); + } + printf("write tests completed\n"); + + printf("total: %d errors\n", total_errs); + return (total_errs != 0); +} +#endif /* TESTMODE */ + +const charset_spec charset_CS_UTF8 = { + CS_UTF8, read_utf8, write_utf8, NULL +}; + +#else /* ENUM_CHARSETS */ + +ENUM_CHARSET(CS_UTF8) + +#endif /* ENUM_CHARSETS */ diff --git a/app/tools/halibut/charset/xenc.c b/app/tools/halibut/charset/xenc.c new file mode 100644 index 0000000..d27dafb --- /dev/null +++ b/app/tools/halibut/charset/xenc.c @@ -0,0 +1,95 @@ +/* + * xenc.c - translate our internal character set codes to and from + * X11 character encoding names. + * + */ + +#include <ctype.h> +#include "charset.h" +#include "internal.h" + +static const struct { + const char *name; + int charset; +} xencs[] = { + /* + * Officially registered encoding names. This list is derived + * from the font encodings section of + * + * http://ftp.x.org/pub/DOCS/registry + * + * Where multiple encoding names map to the same encoding id + * (such as iso8859-15 and fcd8859-15), the first is considered + * canonical and will be returned when translating the id to a + * string. + */ + { "iso646.1991-irv", CS_ASCII }, + { "iso8859-1", CS_ISO8859_1 }, + { "iso8859-2", CS_ISO8859_2 }, + { "iso8859-3", CS_ISO8859_3 }, + { "iso8859-4", CS_ISO8859_4 }, + { "iso8859-5", CS_ISO8859_5 }, + { "iso8859-6", CS_ISO8859_6 }, + { "iso8859-7", CS_ISO8859_7 }, + { "iso8859-8", CS_ISO8859_8 }, + { "iso8859-9", CS_ISO8859_9 }, + { "iso8859-10", CS_ISO8859_10 }, + { "iso8859-13", CS_ISO8859_13 }, + { "iso8859-14", CS_ISO8859_14 }, + { "iso8859-15", CS_ISO8859_15 }, + { "fcd8859-15", CS_ISO8859_15 }, + { "hp-roman8", CS_HP_ROMAN8 }, + { "koi8-r", CS_KOI8_R }, + { "jisx0201.1976-0", CS_JISX0201 }, + /* + * Unofficial encoding names found in the wild. + */ + { "iso8859-16", CS_ISO8859_16 }, + { "koi8-u", CS_KOI8_U }, + { "ibm-cp437", CS_CP437 }, + { "ibm-cp850", CS_CP850 }, + { "ibm-cp866", CS_CP866 }, + { "microsoft-cp1250", CS_CP1250 }, + { "microsoft-cp1251", CS_CP1251 }, + { "microsoft-cp1252", CS_CP1252 }, + { "microsoft-cp1253", CS_CP1253 }, + { "microsoft-cp1254", CS_CP1254 }, + { "microsoft-cp1255", CS_CP1255 }, + { "microsoft-cp1256", CS_CP1256 }, + { "microsoft-cp1257", CS_CP1257 }, + { "microsoft-cp1258", CS_CP1258 }, + { "mac-roman", CS_MAC_ROMAN }, + { "viscii1.1-1", CS_VISCII }, + { "viscii1-1", CS_VISCII }, +}; + +const char *charset_to_xenc(int charset) +{ + int i; + + for (i = 0; i < (int)lenof(xencs); i++) + if (charset == xencs[i].charset) + return xencs[i].name; + + return NULL; /* not found */ +} + +int charset_from_xenc(const char *name) +{ + int i; + + for (i = 0; i < (int)lenof(xencs); i++) { + const char *p, *q; + p = name; + q = xencs[i].name; + while (*p || *q) { + if (tolower(*p) != tolower(*q)) + break; + p++; q++; + } + if (!*p && !*q) + return xencs[i].charset; + } + + return CS_NONE; /* not found */ +} diff --git a/app/tools/halibut/contents.c b/app/tools/halibut/contents.c new file mode 100644 index 0000000..2acf81e --- /dev/null +++ b/app/tools/halibut/contents.c @@ -0,0 +1,244 @@ +/* + * contents.c: build a table of contents + */ + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <limits.h> +#include "halibut.h" + +struct numberstate_Tag { + int chapternum; + int appendixnum; + int ischapter; + int *sectionlevels; + paragraph **currentsects; + paragraph *lastsect; + int oklevel; + int maxsectlevel; + int listitem; + stack listitem_stack; + wchar_t *chaptertext; /* the word for a chapter */ + wchar_t *sectiontext; /* the word for a section */ + wchar_t *apptext; /* the word for an appendix */ +}; + +numberstate *number_init(void) { + numberstate *ret = snew(numberstate); + ret->chapternum = 0; + ret->appendixnum = -1; + ret->ischapter = 1; + ret->oklevel = -1; /* not even in a chapter yet */ + ret->maxsectlevel = 32; + ret->sectionlevels = snewn(ret->maxsectlevel, int); + ret->currentsects = snewn(ret->maxsectlevel+1, paragraph *); + memset(ret->currentsects, 0, (ret->maxsectlevel+1)*sizeof(paragraph *)); + ret->lastsect = NULL; + ret->listitem = -1; + ret->listitem_stack = stk_new(); + return ret; +} + +void number_free(numberstate *state) { + stk_free(state->listitem_stack); + sfree(state->sectionlevels); + sfree(state->currentsects); + sfree(state); +} + +static void dotext(word ***wret, wchar_t *text) { + word *mnewword = snew(word); + mnewword->text = ustrdup(text); + mnewword->type = word_Normal; + mnewword->alt = NULL; + mnewword->next = NULL; + **wret = mnewword; + *wret = &mnewword->next; +} + +static void dospace(word ***wret) { + word *mnewword = snew(word); + mnewword->text = NULL; + mnewword->type = word_WhiteSpace; + mnewword->alt = NULL; + mnewword->next = NULL; + **wret = mnewword; + *wret = &mnewword->next; +} + +static void donumber(word ***wret, int num) { + wchar_t text[20]; + wchar_t *p = text + lenof(text); + *--p = L'\0'; + while (num != 0) { + assert(p > text); + *--p = L"0123456789"[num % 10]; + num /= 10; + } + dotext(wret, p); +} + +static void doanumber(word ***wret, int num) { + wchar_t text[20]; + wchar_t *p; + int nletters, aton; + nletters = 1; + aton = 25; + while (num > aton) { + nletters++; + num -= aton+1; + if (aton < INT_MAX/26) + aton = (aton+1) * 26 - 1; + else + aton = INT_MAX; + } + p = text + lenof(text); + *--p = L'\0'; + while (nletters--) { + assert(p > text); + *--p = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[num % 26]; + num /= 26; + } + dotext(wret, p); +} + +void number_cfg(numberstate *state, paragraph *source) { + /* + * Defaults + */ + state->chaptertext = L"Chapter"; + state->sectiontext = L"Section"; + state->apptext = L"Appendix"; + + for (; source; source = source->next) { + if (source->type == para_Config) { + if (!ustricmp(source->keyword, L"chapter")) { + state->chaptertext = uadv(source->keyword); + } else if (!ustricmp(source->keyword, L"section")) { + state->sectiontext = uadv(source->keyword); + } else if (!ustricmp(source->keyword, L"appendix")) { + state->apptext = uadv(source->keyword); + } + } + } +} + +word *number_mktext(numberstate *state, paragraph *p, wchar_t *category, + int *prev, int *errflag) { + word *ret = NULL; + word **ret2 = &ret; + word **pret = &ret; + int i, level, thistype; + struct listitem_stack_entry { + int listitem; + int prev; + } *lse; + + level = -2; /* default for non-section-heading */ + thistype = p->type; + switch (p->type) { + case para_Chapter: + state->chapternum++; + for (i = 0; i < state->maxsectlevel; i++) + state->sectionlevels[i] = 0; + dotext(&pret, category ? category : state->chaptertext); + dospace(&pret); + ret2 = pret; + donumber(&pret, state->chapternum); + state->ischapter = 1; + state->oklevel = 0; + level = -1; + break; + case para_Heading: + case para_Subsect: + level = (p->type == para_Heading ? 0 : p->aux); + if (level > state->oklevel) { + error(err_sectjump, &p->fpos); + *errflag = TRUE; + ret = NULL; + break; + } + state->oklevel = level+1; + if (state->maxsectlevel <= level) { + state->maxsectlevel = level + 32; + state->sectionlevels = sresize(state->sectionlevels, + state->maxsectlevel, int); + } + state->sectionlevels[level]++; + for (i = level+1; i < state->maxsectlevel; i++) + state->sectionlevels[i] = 0; + dotext(&pret, category ? category : state->sectiontext); + dospace(&pret); + ret2 = pret; + if (state->ischapter) + donumber(&pret, state->chapternum); + else + doanumber(&pret, state->appendixnum); + for (i = 0; i <= level; i++) { + dotext(&pret, L"."); + if (state->sectionlevels[i] == 0) + state->sectionlevels[i] = 1; + donumber(&pret, state->sectionlevels[i]); + } + break; + case para_Appendix: + state->appendixnum++; + for (i = 0; i < state->maxsectlevel; i++) + state->sectionlevels[i] = 0; + dotext(&pret, category ? category : state->apptext); + dospace(&pret); + ret2 = pret; + doanumber(&pret, state->appendixnum); + state->ischapter = 0; + state->oklevel = 0; + level = -1; + break; + case para_UnnumberedChapter: + level = -1; + break; + case para_NumberedList: + ret2 = pret; + if (*prev != para_NumberedList) + state->listitem = 0; + state->listitem++; + donumber(&pret, state->listitem); + break; + case para_LcontPush: + lse = snew(struct listitem_stack_entry); + lse->listitem = state->listitem; + lse->prev = *prev; + stk_push(state->listitem_stack, lse); + state->listitem = 0; + break; + case para_LcontPop: + lse = (struct listitem_stack_entry *)stk_pop(state->listitem_stack); + state->listitem = lse->listitem; + thistype = lse->prev; + sfree(lse); + break; + } + + /* + * Now set up parent, child and sibling links. + */ + p->parent = p->child = p->sibling = NULL; + if (level != -2) { + if (state->currentsects[level+1]) + state->currentsects[level+1]->sibling = p; + if (level >= 0 && state->currentsects[level]) { + p->parent = state->currentsects[level]; + if (!state->currentsects[level]->child) + state->currentsects[level]->child = p; + } + state->currentsects[level+1] = state->lastsect = p; + for (i = level+2; i < state->maxsectlevel+1; i++) + state->currentsects[i] = NULL; + } else { + p->parent = state->lastsect; + } + + p->kwtext2 = *ret2; + *prev = thistype; + return ret; +} diff --git a/app/tools/halibut/deflate.c b/app/tools/halibut/deflate.c new file mode 100644 index 0000000..685097b --- /dev/null +++ b/app/tools/halibut/deflate.c @@ -0,0 +1,2781 @@ +/* + * Reimplementation of Deflate (RFC1951) compression. Adapted from + * the version in PuTTY, and extended to write dynamic Huffman + * trees and choose block boundaries usefully. + */ + +/* + * TODO: + * + * - Feature: could do with forms of flush other than SYNC_FLUSH. + * I'm not sure exactly how those work when you don't know in + * advance that your next block will be static (as we did in + * PuTTY). And remember the 9-bit limitation of zlib. + * + also, zlib has FULL_FLUSH which clears the LZ77 state as + * well, for random access. + * + * - Compression quality: chooseblock() appears to be computing + * wildly inaccurate block size estimates. Possible resolutions: + * + find and fix some trivial bug I haven't spotted yet + * + abandon the entropic approximation and go with trial + * Huffman runs + * + * - Compression quality: see if increasing SYMLIMIT causes + * dynamic blocks to start being consistently smaller than it. + * + actually we seem to be there already, but check on a + * larger corpus. + * + * - Compression quality: we ought to be able to fall right back + * to actual uncompressed blocks if really necessary, though + * it's not clear what the criterion for doing so would be. + */ + +/* + * This software is copyright 2000-2006 Simon Tatham. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR + * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include <stdio.h> +#include <stddef.h> +#include <string.h> +#include <stdlib.h> +#include <assert.h> + +#include "deflate.h" + +#define snew(type) ( (type *) malloc(sizeof(type)) ) +#define snewn(n, type) ( (type *) malloc((n) * sizeof(type)) ) +#define sresize(x, n, type) ( (type *) realloc((x), (n) * sizeof(type)) ) +#define sfree(x) ( free((x)) ) + +#define lenof(x) (sizeof((x)) / sizeof(*(x))) + +#ifndef FALSE +#define FALSE 0 +#define TRUE (!FALSE) +#endif + +/* ---------------------------------------------------------------------- + * This file can be compiled in a number of modes. + * + * With -DSTANDALONE, it builds a self-contained deflate tool which + * can compress, decompress, and also analyse a deflated file to + * print out the sequence of literals and copy commands it + * contains. + * + * With -DTESTMODE, it builds a test application which is given a + * file on standard input, both compresses and decompresses it, and + * outputs the re-decompressed result so it can be conveniently + * diffed against the original. Define -DTESTDBG as well for lots + * of diagnostics. + */ + +#if defined TESTDBG +/* gcc-specific diagnostic macro */ +#define debug_int(x...) ( fprintf(stderr, x) ) +#define debug(x) ( debug_int x ) +#else +#define debug(x) +#endif + +#ifdef STANDALONE +#define ANALYSIS +#endif + +#ifdef ANALYSIS +int analyse_level = 0; +#endif + +/* ---------------------------------------------------------------------- + * Basic LZ77 code. This bit is designed modularly, so it could be + * ripped out and used in a different LZ77 compressor. Go to it, + * and good luck :-) + */ + +struct LZ77InternalContext; +struct LZ77Context { + struct LZ77InternalContext *ictx; + void *userdata; + void (*literal) (struct LZ77Context * ctx, unsigned char c); + void (*match) (struct LZ77Context * ctx, int distance, int len); +}; + +/* + * Initialise the private fields of an LZ77Context. It's up to the + * user to initialise the public fields. + */ +static int lz77_init(struct LZ77Context *ctx); + +/* + * Supply data to be compressed. Will update the private fields of + * the LZ77Context, and will call literal() and match() to output. + * If `compress' is FALSE, it will never emit a match, but will + * instead call literal() for everything. + */ +static void lz77_compress(struct LZ77Context *ctx, + const unsigned char *data, int len, int compress); + +/* + * Modifiable parameters. + */ +#define WINSIZE 32768 /* window size. Must be power of 2! */ +#define HASHMAX 2039 /* one more than max hash value */ +#define MAXMATCH 32 /* how many matches we track */ +#define HASHCHARS 3 /* how many chars make a hash */ + +/* + * This compressor takes a less slapdash approach than the + * gzip/zlib one. Rather than allowing our hash chains to fall into + * disuse near the far end, we keep them doubly linked so we can + * _find_ the far end, and then every time we add a new byte to the + * window (thus rolling round by one and removing the previous + * byte), we can carefully remove the hash chain entry. + */ + +#define INVALID -1 /* invalid hash _and_ invalid offset */ +struct WindowEntry { + short next, prev; /* array indices within the window */ + short hashval; +}; + +struct HashEntry { + short first; /* window index of first in chain */ +}; + +struct Match { + int distance, len; +}; + +struct LZ77InternalContext { + struct WindowEntry win[WINSIZE]; + unsigned char data[WINSIZE]; + int winpos; + struct HashEntry hashtab[HASHMAX]; + unsigned char pending[HASHCHARS]; + int npending; +}; + +static int lz77_hash(const unsigned char *data) +{ + return (257 * data[0] + 263 * data[1] + 269 * data[2]) % HASHMAX; +} + +static int lz77_init(struct LZ77Context *ctx) +{ + struct LZ77InternalContext *st; + int i; + + st = snew(struct LZ77InternalContext); + if (!st) + return 0; + + ctx->ictx = st; + + for (i = 0; i < WINSIZE; i++) + st->win[i].next = st->win[i].prev = st->win[i].hashval = INVALID; + for (i = 0; i < HASHMAX; i++) + st->hashtab[i].first = INVALID; + st->winpos = 0; + + st->npending = 0; + + return 1; +} + +static void lz77_advance(struct LZ77InternalContext *st, + unsigned char c, int hash) +{ + int off; + + /* + * Remove the hash entry at winpos from the tail of its chain, + * or empty the chain if it's the only thing on the chain. + */ + if (st->win[st->winpos].prev != INVALID) { + st->win[st->win[st->winpos].prev].next = INVALID; + } else if (st->win[st->winpos].hashval != INVALID) { + st->hashtab[st->win[st->winpos].hashval].first = INVALID; + } + + /* + * Create a new entry at winpos and add it to the head of its + * hash chain. + */ + st->win[st->winpos].hashval = hash; + st->win[st->winpos].prev = INVALID; + off = st->win[st->winpos].next = st->hashtab[hash].first; + st->hashtab[hash].first = st->winpos; + if (off != INVALID) + st->win[off].prev = st->winpos; + st->data[st->winpos] = c; + + /* + * Advance the window pointer. + */ + st->winpos = (st->winpos + 1) & (WINSIZE - 1); +} + +#define CHARAT(k) ( (k)<0 ? st->data[(st->winpos+k)&(WINSIZE-1)] : data[k] ) + +static void lz77_compress(struct LZ77Context *ctx, + const unsigned char *data, int len, int compress) +{ + struct LZ77InternalContext *st = ctx->ictx; + int i, hash, distance, off, nmatch, matchlen, advance; + struct Match defermatch, matches[MAXMATCH]; + int deferchr; + + /* + * Add any pending characters from last time to the window. (We + * might not be able to.) + */ + for (i = 0; i < st->npending; i++) { + unsigned char foo[HASHCHARS]; + int j; + if (len + st->npending - i < HASHCHARS) { + /* Update the pending array. */ + for (j = i; j < st->npending; j++) + st->pending[j - i] = st->pending[j]; + break; + } + for (j = 0; j < HASHCHARS; j++) + foo[j] = (i + j < st->npending ? st->pending[i + j] : + data[i + j - st->npending]); + lz77_advance(st, foo[0], lz77_hash(foo)); + } + st->npending -= i; + + defermatch.len = 0; + deferchr = '\0'; + while (len > 0) { + + /* Don't even look for a match, if we're not compressing. */ + if (compress && len >= HASHCHARS) { + /* + * Hash the next few characters. + */ + hash = lz77_hash(data); + + /* + * Look the hash up in the corresponding hash chain and see + * what we can find. + */ + nmatch = 0; + for (off = st->hashtab[hash].first; + off != INVALID; off = st->win[off].next) { + /* distance = 1 if off == st->winpos-1 */ + /* distance = WINSIZE if off == st->winpos */ + distance = + WINSIZE - (off + WINSIZE - st->winpos) % WINSIZE; + for (i = 0; i < HASHCHARS; i++) + if (CHARAT(i) != CHARAT(i - distance)) + break; + if (i == HASHCHARS) { + matches[nmatch].distance = distance; + matches[nmatch].len = 3; + if (++nmatch >= MAXMATCH) + break; + } + } + } else { + nmatch = 0; + hash = INVALID; + } + + if (nmatch > 0) { + /* + * We've now filled up matches[] with nmatch potential + * matches. Follow them down to find the longest. (We + * assume here that it's always worth favouring a + * longer match over a shorter one.) + */ + matchlen = HASHCHARS; + while (matchlen < len) { + int j; + for (i = j = 0; i < nmatch; i++) { + if (CHARAT(matchlen) == + CHARAT(matchlen - matches[i].distance)) { + matches[j++] = matches[i]; + } + } + if (j == 0) + break; + matchlen++; + nmatch = j; + } + + /* + * We've now got all the longest matches. We favour the + * shorter distances, which means we go with matches[0]. + * So see if we want to defer it or throw it away. + */ + matches[0].len = matchlen; + if (defermatch.len > 0) { + if (matches[0].len > defermatch.len + 1) { + /* We have a better match. Emit the deferred char, + * and defer this match. */ + ctx->literal(ctx, (unsigned char) deferchr); + defermatch = matches[0]; + deferchr = data[0]; + advance = 1; + } else { + /* We don't have a better match. Do the deferred one. */ + ctx->match(ctx, defermatch.distance, defermatch.len); + advance = defermatch.len - 1; + defermatch.len = 0; + } + } else { + /* There was no deferred match. Defer this one. */ + defermatch = matches[0]; + deferchr = data[0]; + advance = 1; + } + } else { + /* + * We found no matches. Emit the deferred match, if + * any; otherwise emit a literal. + */ + if (defermatch.len > 0) { + ctx->match(ctx, defermatch.distance, defermatch.len); + advance = defermatch.len - 1; + defermatch.len = 0; + } else { + ctx->literal(ctx, data[0]); + advance = 1; + } + } + + /* + * Now advance the position by `advance' characters, + * keeping the window and hash chains consistent. + */ + while (advance > 0) { + if (len >= HASHCHARS) { + lz77_advance(st, *data, lz77_hash(data)); + } else { + st->pending[st->npending++] = *data; + } + data++; + len--; + advance--; + } + } +} + +/* ---------------------------------------------------------------------- + * Deflate functionality common to both compression and decompression. + */ + +static const unsigned char lenlenmap[] = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 +}; + +#define MAXCODELEN 16 + +/* + * Given a sequence of Huffman code lengths, compute the actual + * codes, in the final form suitable for feeding to outbits (i.e. + * already bit-mirrored). + * + * Returns the maximum code length found. Can also return -1 to + * indicate the table was overcommitted (too many or too short + * codes to exactly cover the possible space), or -2 to indicate it + * was undercommitted (too few or too long codes). + */ +static int hufcodes(const unsigned char *lengths, int *codes, int nsyms) +{ + int count[MAXCODELEN], startcode[MAXCODELEN]; + int code, maxlen; + int i, j; + + /* Count the codes of each length. */ + maxlen = 0; + for (i = 1; i < MAXCODELEN; i++) + count[i] = 0; + for (i = 0; i < nsyms; i++) { + count[lengths[i]]++; + if (maxlen < lengths[i]) + maxlen = lengths[i]; + } + /* Determine the starting code for each length block. */ + code = 0; + for (i = 1; i < MAXCODELEN; i++) { + startcode[i] = code; + code += count[i]; + if (code > (1 << i)) + maxlen = -1; /* overcommitted */ + code <<= 1; + } + if (code < (1 << MAXCODELEN)) + maxlen = -2; /* undercommitted */ + /* Determine the code for each symbol. Mirrored, of course. */ + for (i = 0; i < nsyms; i++) { + code = startcode[lengths[i]]++; + codes[i] = 0; + for (j = 0; j < lengths[i]; j++) { + codes[i] = (codes[i] << 1) | (code & 1); + code >>= 1; + } + } + + return maxlen; +} + +/* + * Adler32 checksum function. + */ +static unsigned long adler32_update(unsigned long s, + const unsigned char *data, int len) +{ + unsigned s1 = s & 0xFFFF, s2 = (s >> 16) & 0xFFFF; + int i; + + for (i = 0; i < len; i++) { + s1 += data[i]; + s2 += s1; + if (!(i & 0xFFF)) { + s1 %= 65521; + s2 %= 65521; + } + } + + return ((s2 % 65521) << 16) | (s1 % 65521); +} + +/* + * CRC32 checksum function. + */ + +static unsigned long crc32_update(unsigned long crcword, + const unsigned char *data, int len) +{ + static const unsigned long crc32_table[256] = { + 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL, + 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L, + 0x0EDB8832L, 0x79DCB8A4L, 0xE0D5E91EL, 0x97D2D988L, + 0x09B64C2BL, 0x7EB17CBDL, 0xE7B82D07L, 0x90BF1D91L, + 0x1DB71064L, 0x6AB020F2L, 0xF3B97148L, 0x84BE41DEL, + 0x1ADAD47DL, 0x6DDDE4EBL, 0xF4D4B551L, 0x83D385C7L, + 0x136C9856L, 0x646BA8C0L, 0xFD62F97AL, 0x8A65C9ECL, + 0x14015C4FL, 0x63066CD9L, 0xFA0F3D63L, 0x8D080DF5L, + 0x3B6E20C8L, 0x4C69105EL, 0xD56041E4L, 0xA2677172L, + 0x3C03E4D1L, 0x4B04D447L, 0xD20D85FDL, 0xA50AB56BL, + 0x35B5A8FAL, 0x42B2986CL, 0xDBBBC9D6L, 0xACBCF940L, + 0x32D86CE3L, 0x45DF5C75L, 0xDCD60DCFL, 0xABD13D59L, + 0x26D930ACL, 0x51DE003AL, 0xC8D75180L, 0xBFD06116L, + 0x21B4F4B5L, 0x56B3C423L, 0xCFBA9599L, 0xB8BDA50FL, + 0x2802B89EL, 0x5F058808L, 0xC60CD9B2L, 0xB10BE924L, + 0x2F6F7C87L, 0x58684C11L, 0xC1611DABL, 0xB6662D3DL, + 0x76DC4190L, 0x01DB7106L, 0x98D220BCL, 0xEFD5102AL, + 0x71B18589L, 0x06B6B51FL, 0x9FBFE4A5L, 0xE8B8D433L, + 0x7807C9A2L, 0x0F00F934L, 0x9609A88EL, 0xE10E9818L, + 0x7F6A0DBBL, 0x086D3D2DL, 0x91646C97L, 0xE6635C01L, + 0x6B6B51F4L, 0x1C6C6162L, 0x856530D8L, 0xF262004EL, + 0x6C0695EDL, 0x1B01A57BL, 0x8208F4C1L, 0xF50FC457L, + 0x65B0D9C6L, 0x12B7E950L, 0x8BBEB8EAL, 0xFCB9887CL, + 0x62DD1DDFL, 0x15DA2D49L, 0x8CD37CF3L, 0xFBD44C65L, + 0x4DB26158L, 0x3AB551CEL, 0xA3BC0074L, 0xD4BB30E2L, + 0x4ADFA541L, 0x3DD895D7L, 0xA4D1C46DL, 0xD3D6F4FBL, + 0x4369E96AL, 0x346ED9FCL, 0xAD678846L, 0xDA60B8D0L, + 0x44042D73L, 0x33031DE5L, 0xAA0A4C5FL, 0xDD0D7CC9L, + 0x5005713CL, 0x270241AAL, 0xBE0B1010L, 0xC90C2086L, + 0x5768B525L, 0x206F85B3L, 0xB966D409L, 0xCE61E49FL, + 0x5EDEF90EL, 0x29D9C998L, 0xB0D09822L, 0xC7D7A8B4L, + 0x59B33D17L, 0x2EB40D81L, 0xB7BD5C3BL, 0xC0BA6CADL, + 0xEDB88320L, 0x9ABFB3B6L, 0x03B6E20CL, 0x74B1D29AL, + 0xEAD54739L, 0x9DD277AFL, 0x04DB2615L, 0x73DC1683L, + 0xE3630B12L, 0x94643B84L, 0x0D6D6A3EL, 0x7A6A5AA8L, + 0xE40ECF0BL, 0x9309FF9DL, 0x0A00AE27L, 0x7D079EB1L, + 0xF00F9344L, 0x8708A3D2L, 0x1E01F268L, 0x6906C2FEL, + 0xF762575DL, 0x806567CBL, 0x196C3671L, 0x6E6B06E7L, + 0xFED41B76L, 0x89D32BE0L, 0x10DA7A5AL, 0x67DD4ACCL, + 0xF9B9DF6FL, 0x8EBEEFF9L, 0x17B7BE43L, 0x60B08ED5L, + 0xD6D6A3E8L, 0xA1D1937EL, 0x38D8C2C4L, 0x4FDFF252L, + 0xD1BB67F1L, 0xA6BC5767L, 0x3FB506DDL, 0x48B2364BL, + 0xD80D2BDAL, 0xAF0A1B4CL, 0x36034AF6L, 0x41047A60L, + 0xDF60EFC3L, 0xA867DF55L, 0x316E8EEFL, 0x4669BE79L, + 0xCB61B38CL, 0xBC66831AL, 0x256FD2A0L, 0x5268E236L, + 0xCC0C7795L, 0xBB0B4703L, 0x220216B9L, 0x5505262FL, + 0xC5BA3BBEL, 0xB2BD0B28L, 0x2BB45A92L, 0x5CB36A04L, + 0xC2D7FFA7L, 0xB5D0CF31L, 0x2CD99E8BL, 0x5BDEAE1DL, + 0x9B64C2B0L, 0xEC63F226L, 0x756AA39CL, 0x026D930AL, + 0x9C0906A9L, 0xEB0E363FL, 0x72076785L, 0x05005713L, + 0x95BF4A82L, 0xE2B87A14L, 0x7BB12BAEL, 0x0CB61B38L, + 0x92D28E9BL, 0xE5D5BE0DL, 0x7CDCEFB7L, 0x0BDBDF21L, + 0x86D3D2D4L, 0xF1D4E242L, 0x68DDB3F8L, 0x1FDA836EL, + 0x81BE16CDL, 0xF6B9265BL, 0x6FB077E1L, 0x18B74777L, + 0x88085AE6L, 0xFF0F6A70L, 0x66063BCAL, 0x11010B5CL, + 0x8F659EFFL, 0xF862AE69L, 0x616BFFD3L, 0x166CCF45L, + 0xA00AE278L, 0xD70DD2EEL, 0x4E048354L, 0x3903B3C2L, + 0xA7672661L, 0xD06016F7L, 0x4969474DL, 0x3E6E77DBL, + 0xAED16A4AL, 0xD9D65ADCL, 0x40DF0B66L, 0x37D83BF0L, + 0xA9BCAE53L, 0xDEBB9EC5L, 0x47B2CF7FL, 0x30B5FFE9L, + 0xBDBDF21CL, 0xCABAC28AL, 0x53B39330L, 0x24B4A3A6L, + 0xBAD03605L, 0xCDD70693L, 0x54DE5729L, 0x23D967BFL, + 0xB3667A2EL, 0xC4614AB8L, 0x5D681B02L, 0x2A6F2B94L, + 0xB40BBE37L, 0xC30C8EA1L, 0x5A05DF1BL, 0x2D02EF8DL + }; + crcword ^= 0xFFFFFFFFL; + while (len--) { + unsigned long newbyte = *data++; + newbyte ^= crcword & 0xFFL; + crcword = (crcword >> 8) ^ crc32_table[newbyte]; + } + return crcword ^ 0xFFFFFFFFL; +} + +typedef struct { + short code, extrabits; + int min, max; +} coderecord; + +static const coderecord lencodes[] = { + {257, 0, 3, 3}, + {258, 0, 4, 4}, + {259, 0, 5, 5}, + {260, 0, 6, 6}, + {261, 0, 7, 7}, + {262, 0, 8, 8}, + {263, 0, 9, 9}, + {264, 0, 10, 10}, + {265, 1, 11, 12}, + {266, 1, 13, 14}, + {267, 1, 15, 16}, + {268, 1, 17, 18}, + {269, 2, 19, 22}, + {270, 2, 23, 26}, + {271, 2, 27, 30}, + {272, 2, 31, 34}, + {273, 3, 35, 42}, + {274, 3, 43, 50}, + {275, 3, 51, 58}, + {276, 3, 59, 66}, + {277, 4, 67, 82}, + {278, 4, 83, 98}, + {279, 4, 99, 114}, + {280, 4, 115, 130}, + {281, 5, 131, 162}, + {282, 5, 163, 194}, + {283, 5, 195, 226}, + {284, 5, 227, 257}, + {285, 0, 258, 258}, +}; + +static const coderecord distcodes[] = { + {0, 0, 1, 1}, + {1, 0, 2, 2}, + {2, 0, 3, 3}, + {3, 0, 4, 4}, + {4, 1, 5, 6}, + {5, 1, 7, 8}, + {6, 2, 9, 12}, + {7, 2, 13, 16}, + {8, 3, 17, 24}, + {9, 3, 25, 32}, + {10, 4, 33, 48}, + {11, 4, 49, 64}, + {12, 5, 65, 96}, + {13, 5, 97, 128}, + {14, 6, 129, 192}, + {15, 6, 193, 256}, + {16, 7, 257, 384}, + {17, 7, 385, 512}, + {18, 8, 513, 768}, + {19, 8, 769, 1024}, + {20, 9, 1025, 1536}, + {21, 9, 1537, 2048}, + {22, 10, 2049, 3072}, + {23, 10, 3073, 4096}, + {24, 11, 4097, 6144}, + {25, 11, 6145, 8192}, + {26, 12, 8193, 12288}, + {27, 12, 12289, 16384}, + {28, 13, 16385, 24576}, + {29, 13, 24577, 32768}, +}; + +/* ---------------------------------------------------------------------- + * Deflate compression. + */ + +#define SYMLIMIT 65536 +#define SYMPFX_LITLEN 0x00000000U +#define SYMPFX_DIST 0x40000000U +#define SYMPFX_EXTRABITS 0x80000000U +#define SYMPFX_CODELEN 0xC0000000U +#define SYMPFX_MASK 0xC0000000U + +#define SYM_EXTRABITS_MASK 0x3C000000U +#define SYM_EXTRABITS_SHIFT 26 + +struct huftrees { + unsigned char *len_litlen; + int *code_litlen; + unsigned char *len_dist; + int *code_dist; + unsigned char *len_codelen; + int *code_codelen; +}; + +struct deflate_compress_ctx { + struct LZ77Context *lzc; + unsigned char *outbuf; + int outlen, outsize; + unsigned long outbits; + int noutbits; + int firstblock; + unsigned long *syms; + int symstart, nsyms; + int type; + unsigned long checksum; + unsigned long datasize; + int lastblock; + int finished; + unsigned char static_len1[286], static_len2[30]; + int static_code1[286], static_code2[30]; + struct huftrees sht; +#ifdef STATISTICS + unsigned long bitcount; +#endif +}; + +static void outbits(deflate_compress_ctx *out, + unsigned long bits, int nbits) +{ + assert(out->noutbits + nbits <= 32); + out->outbits |= bits << out->noutbits; + out->noutbits += nbits; + while (out->noutbits >= 8) { + if (out->outlen >= out->outsize) { + out->outsize = out->outlen + 64; + out->outbuf = sresize(out->outbuf, out->outsize, unsigned char); + } + out->outbuf[out->outlen++] = (unsigned char) (out->outbits & 0xFF); + out->outbits >>= 8; + out->noutbits -= 8; + } +#ifdef STATISTICS + out->bitcount += nbits; +#endif +} + +/* + * Binary heap functions used by buildhuf(). Each one assumes the + * heap to be stored in an array of ints, with two ints per node + * (user data and key). They take in the old heap length, and + * return the new one. + */ +#define HEAPPARENT(x) (((x)-2)/4*2) +#define HEAPLEFT(x) ((x)*2+2) +#define HEAPRIGHT(x) ((x)*2+4) +static int addheap(int *heap, int len, int userdata, int key) +{ + int me, dad, tmp; + + me = len; + heap[len++] = userdata; + heap[len++] = key; + + while (me > 0) { + dad = HEAPPARENT(me); + if (heap[me+1] < heap[dad+1]) { + tmp = heap[me]; heap[me] = heap[dad]; heap[dad] = tmp; + tmp = heap[me+1]; heap[me+1] = heap[dad+1]; heap[dad+1] = tmp; + me = dad; + } else + break; + } + + return len; +} +static int rmheap(int *heap, int len, int *userdata, int *key) +{ + int me, lc, rc, c, tmp; + + len -= 2; + *userdata = heap[0]; + *key = heap[1]; + heap[0] = heap[len]; + heap[1] = heap[len+1]; + + me = 0; + + while (1) { + lc = HEAPLEFT(me); + rc = HEAPRIGHT(me); + if (lc >= len) + break; + else if (rc >= len || heap[lc+1] < heap[rc+1]) + c = lc; + else + c = rc; + if (heap[me+1] > heap[c+1]) { + tmp = heap[me]; heap[me] = heap[c]; heap[c] = tmp; + tmp = heap[me+1]; heap[me+1] = heap[c+1]; heap[c+1] = tmp; + } else + break; + me = c; + } + + return len; +} + +/* + * The core of the Huffman algorithm: takes an input array of + * symbol frequencies, and produces an output array of code + * lengths. + * + * This is basically a generic Huffman implementation, but it has + * one zlib-related quirk which is that it caps the output code + * lengths to fit in an unsigned char (which is safe since Deflate + * will reject anything longer than 15 anyway). Anyone wanting to + * rip it out and use it in another context should find that easy + * to remove. + */ +#define HUFMAX 286 +static void buildhuf(const int *freqs, unsigned char *lengths, int nsyms) +{ + int parent[2*HUFMAX-1]; + int length[2*HUFMAX-1]; + int heap[2*HUFMAX]; + int heapsize; + int i, j, n; + int si, sj; + + assert(nsyms <= HUFMAX); + + memset(parent, 0, sizeof(parent)); + + /* + * Begin by building the heap. + */ + heapsize = 0; + for (i = 0; i < nsyms; i++) + if (freqs[i] > 0) /* leave unused symbols out totally */ + heapsize = addheap(heap, heapsize, i, freqs[i]); + + /* + * Now repeatedly take two elements off the heap and merge + * them. + */ + n = HUFMAX; + while (heapsize > 2) { + heapsize = rmheap(heap, heapsize, &i, &si); + heapsize = rmheap(heap, heapsize, &j, &sj); + parent[i] = n; + parent[j] = n; + heapsize = addheap(heap, heapsize, n, si + sj); + n++; + } + + /* + * Now we have our tree, in the form of a link from each node + * to the index of its parent. Count back down the tree to + * determine the code lengths. + */ + memset(length, 0, sizeof(length)); + /* The tree root has length 0 after that, which is correct. */ + for (i = n-1; i-- ;) + if (parent[i] > 0) + length[i] = 1 + length[parent[i]]; + + /* + * And that's it. (Simple, wasn't it?) Copy the lengths into + * the output array and leave. + * + * Here we cap lengths to fit in unsigned char. + */ + for (i = 0; i < nsyms; i++) + lengths[i] = (length[i] > 255 ? 255 : length[i]); +} + +/* + * Wrapper around buildhuf() which enforces the Deflate restriction + * that no code length may exceed 15 bits, or 7 for the auxiliary + * code length alphabet. This function has the same calling + * semantics as buildhuf(), except that it might modify the freqs + * array. + */ +static void deflate_buildhuf(int *freqs, unsigned char *lengths, + int nsyms, int limit) +{ + int smallestfreq, totalfreq, nactivesyms; + int num, denom, adjust; + int i; + int maxprob; + + /* + * Nasty special case: if the frequency table has fewer than + * two non-zero elements, we must invent some, because we can't + * have fewer than one bit encoding a symbol. + */ + assert(nsyms >= 2); + { + int count = 0; + for (i = 0; i < nsyms; i++) + if (freqs[i] > 0) + count++; + if (count < 2) { + for (i = 0; i < nsyms && count > 0; i++) + if (freqs[i] == 0) { + freqs[i] = 1; + count--; + } + } + } + + /* + * First, try building the Huffman table the normal way. If + * this works, it's optimal, so we don't want to mess with it. + */ + buildhuf(freqs, lengths, nsyms); + + for (i = 0; i < nsyms; i++) + if (lengths[i] > limit) + break; + + if (i == nsyms) + return; /* OK */ + + /* + * The Huffman algorithm can only ever generate a code length + * of N bits or more if there is a symbol whose probability is + * less than the reciprocal of the (N+2)th Fibonacci number + * (counting from F_0=0 and F_1=1), i.e. 1/2584 for N=16, or + * 1/55 for N=8. (This is a necessary though not sufficient + * condition.) + * + * Why is this? Well, consider the input symbol with the + * smallest probability. Let that probability be x. In order + * for this symbol to have a code length of at least 1, the + * Huffman algorithm will have to merge it with some other + * node; and since x is the smallest probability, the node it + * gets merged with must be at least x. Thus, the probability + * of the resulting combined node will be at least 2x. Now in + * order for our node to reach depth 2, this 2x-node must be + * merged again. But what with? We can't assume the node it + * merges with is at least 2x, because this one might only be + * the _second_ smallest remaining node. But we do know the + * node it merges with must be at least x, so our order-2 + * internal node is at least 3x. + * + * How small a node can merge with _that_ to get an order-3 + * internal node? Well, it must be at least 2x, because if it + * was smaller than that then it would have been one of the two + * smallest nodes in the previous step and been merged at that + * point. So at least 3x, plus at least 2x, comes to at least + * 5x for an order-3 node. + * + * And so it goes on: at every stage we must merge our current + * node with a node at least as big as the bigger of this one's + * two parents, and from this starting point that gives rise to + * the Fibonacci sequence. So we find that in order to have a + * node n levels deep (i.e. a maximum code length of n), the + * overall probability of the root of the entire tree must be + * at least F_{n+2} times the probability of the rarest symbol. + * In other words, since the overall probability is 1, it is a + * necessary condition for a code length of 16 or more that + * there must be at least one symbol with probability <= + * 1/F_18. + * + * (To demonstrate that a probability this big really can give + * rise to a code length of 16, consider the set of input + * frequencies { 1-epsilon, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, + * 89, 144, 233, 377, 610, 987 }, for arbitrarily small + * epsilon.) + * + * So here buildhuf() has returned us an overlong code. So to + * ensure it doesn't do it again, we add a constant to all the + * (non-zero) symbol frequencies, causing them to become more + * balanced and removing the danger. We can then feed the + * results back to the standard buildhuf() and be + * assert()-level confident that the resulting code lengths + * contain nothing outside the permitted range. + */ + assert(limit == 15 || limit == 7); + maxprob = (limit == 15 ? 2584 : 55); /* no point in computing full F_n */ + totalfreq = nactivesyms = 0; + smallestfreq = -1; + for (i = 0; i < nsyms; i++) { + if (freqs[i] == 0) + continue; + if (smallestfreq < 0 || smallestfreq > freqs[i]) + smallestfreq = freqs[i]; + totalfreq += freqs[i]; + nactivesyms++; + } + assert(smallestfreq <= totalfreq / maxprob); + + /* + * We want to find the smallest integer `adjust' such that + * (totalfreq + nactivesyms * adjust) / (smallestfreq + + * adjust) is less than maxprob. A bit of algebra tells us + * that the threshold value is equal to + * + * totalfreq - maxprob * smallestfreq + * ---------------------------------- + * maxprob - nactivesyms + * + * rounded up, of course. And we'll only even be trying + * this if + */ + num = totalfreq - smallestfreq * maxprob; + denom = maxprob - nactivesyms; + adjust = (num + denom - 1) / denom; + + /* + * Now add `adjust' to all the input symbol frequencies. + */ + for (i = 0; i < nsyms; i++) + if (freqs[i] != 0) + freqs[i] += adjust; + + /* + * Rebuild the Huffman tree... + */ + buildhuf(freqs, lengths, nsyms); + + /* + * ... and this time it ought to be OK. + */ + for (i = 0; i < nsyms; i++) + assert(lengths[i] <= limit); +} + +/* + * Compute the bit length of a symbol, given the three Huffman + * trees. + */ +static int symsize(unsigned sym, const struct huftrees *trees) +{ + unsigned basesym = sym &~ SYMPFX_MASK; + + switch (sym & SYMPFX_MASK) { + case SYMPFX_LITLEN: + return trees->len_litlen[basesym]; + case SYMPFX_DIST: + return trees->len_dist[basesym]; + case SYMPFX_CODELEN: + return trees->len_codelen[basesym]; + default /*case SYMPFX_EXTRABITS*/: + return basesym >> SYM_EXTRABITS_SHIFT; + } +} + +/* + * Write out a single symbol, given the three Huffman trees. + */ +static void writesym(deflate_compress_ctx *out, + unsigned sym, const struct huftrees *trees) +{ + unsigned basesym = sym &~ SYMPFX_MASK; + int i; + + switch (sym & SYMPFX_MASK) { + case SYMPFX_LITLEN: + debug(("send: litlen %d\n", basesym)); + outbits(out, trees->code_litlen[basesym], trees->len_litlen[basesym]); + break; + case SYMPFX_DIST: + debug(("send: dist %d\n", basesym)); + outbits(out, trees->code_dist[basesym], trees->len_dist[basesym]); + break; + case SYMPFX_CODELEN: + debug(("send: codelen %d\n", basesym)); + outbits(out, trees->code_codelen[basesym],trees->len_codelen[basesym]); + break; + case SYMPFX_EXTRABITS: + i = basesym >> SYM_EXTRABITS_SHIFT; + basesym &= ~SYM_EXTRABITS_MASK; + debug(("send: extrabits %d/%d\n", basesym, i)); + outbits(out, basesym, i); + break; + } +} + +/* + * outblock() must output _either_ a dynamic block of length + * `dynamic_len', _or_ a static block of length `static_len', but + * it gets to choose which. + */ +static void outblock(deflate_compress_ctx *out, + int dynamic_len, int static_len) +{ + int freqs1[286], freqs2[30], freqs3[19]; + unsigned char len1[286], len2[30], len3[19]; + int code1[286], code2[30], code3[19]; + int hlit, hdist, hclen, bfinal, btype; + int treesrc[286 + 30]; + int treesyms[286 + 30]; + int codelen[19]; + int i, ntreesrc, ntreesyms; + int dynamic, blklen; + struct huftrees dht; + const struct huftrees *ht; +#ifdef STATISTICS + unsigned long bitcount_before; +#endif + + dht.len_litlen = len1; + dht.len_dist = len2; + dht.len_codelen = len3; + dht.code_litlen = code1; + dht.code_dist = code2; + dht.code_codelen = code3; + + /* + * We make our choice of block to output by doing all the + * detailed work to determine the exact length of each possible + * block. Then we choose the one which has fewest output bits + * per symbol. + */ + + /* + * First build the two main Huffman trees for the dynamic + * block. + */ + + /* + * Count up the frequency tables. + */ + memset(freqs1, 0, sizeof(freqs1)); + memset(freqs2, 0, sizeof(freqs2)); + freqs1[256] = 1; /* we're bound to need one EOB */ + for (i = 0; i < dynamic_len; i++) { + unsigned sym = out->syms[(out->symstart + i) % SYMLIMIT]; + + /* + * Increment the occurrence counter for this symbol, if + * it's in one of the Huffman alphabets and isn't extra + * bits. + */ + if ((sym & SYMPFX_MASK) == SYMPFX_LITLEN) { + sym &= ~SYMPFX_MASK; + assert(sym < lenof(freqs1)); + freqs1[sym]++; + } else if ((sym & SYMPFX_MASK) == SYMPFX_DIST) { + sym &= ~SYMPFX_MASK; + assert(sym < lenof(freqs2)); + freqs2[sym]++; + } + } + deflate_buildhuf(freqs1, len1, lenof(freqs1), 15); + deflate_buildhuf(freqs2, len2, lenof(freqs2), 15); + hufcodes(len1, code1, lenof(freqs1)); + hufcodes(len2, code2, lenof(freqs2)); + + /* + * Determine HLIT and HDIST. + */ + for (hlit = 286; hlit > 257 && len1[hlit-1] == 0; hlit--); + for (hdist = 30; hdist > 1 && len2[hdist-1] == 0; hdist--); + + /* + * Write out the list of symbols used to transmit the + * trees. + */ + ntreesrc = 0; + for (i = 0; i < hlit; i++) + treesrc[ntreesrc++] = len1[i]; + for (i = 0; i < hdist; i++) + treesrc[ntreesrc++] = len2[i]; + ntreesyms = 0; + for (i = 0; i < ntreesrc ;) { + int j = 1; + int k; + + /* Find length of run of the same length code. */ + while (i+j < ntreesrc && treesrc[i+j] == treesrc[i]) + j++; + + /* Encode that run as economically as we can. */ + k = j; + if (treesrc[i] == 0) { + /* + * Zero code length: we can output run codes for + * 3-138 zeroes. So if we have fewer than 3 zeroes, + * we just output literals. Otherwise, we output + * nothing but run codes, and tweak their lengths + * to make sure we aren't left with under 3 at the + * end. + */ + if (k < 3) { + while (k--) + treesyms[ntreesyms++] = 0 | SYMPFX_CODELEN; + } else { + while (k > 0) { + int rpt = (k < 138 ? k : 138); + if (rpt > k-3 && rpt < k) + rpt = k-3; + assert(rpt >= 3 && rpt <= 138); + if (rpt < 11) { + treesyms[ntreesyms++] = 17 | SYMPFX_CODELEN; + treesyms[ntreesyms++] = + (SYMPFX_EXTRABITS | (rpt - 3) | + (3 << SYM_EXTRABITS_SHIFT)); + } else { + treesyms[ntreesyms++] = 18 | SYMPFX_CODELEN; + treesyms[ntreesyms++] = + (SYMPFX_EXTRABITS | (rpt - 11) | + (7 << SYM_EXTRABITS_SHIFT)); + } + k -= rpt; + } + } + } else { + /* + * Non-zero code length: we must output the first + * one explicitly, then we can output a copy code + * for 3-6 repeats. So if we have fewer than 4 + * repeats, we _just_ output literals. Otherwise, + * we output one literal plus at least one copy + * code, and tweak the copy codes to make sure we + * aren't left with under 3 at the end. + */ + assert(treesrc[i] < 16); + treesyms[ntreesyms++] = treesrc[i] | SYMPFX_CODELEN; + k--; + if (k < 3) { + while (k--) + treesyms[ntreesyms++] = treesrc[i] | SYMPFX_CODELEN; + } else { + while (k > 0) { + int rpt = (k < 6 ? k : 6); + if (rpt > k-3 && rpt < k) + rpt = k-3; + assert(rpt >= 3 && rpt <= 6); + treesyms[ntreesyms++] = 16 | SYMPFX_CODELEN; + treesyms[ntreesyms++] = (SYMPFX_EXTRABITS | (rpt - 3) | + (2 << SYM_EXTRABITS_SHIFT)); + k -= rpt; + } + } + } + + i += j; + } + assert((unsigned)ntreesyms < lenof(treesyms)); + + /* + * Count up the frequency table for the tree-transmission + * symbols, and build the auxiliary Huffman tree for that. + */ + memset(freqs3, 0, sizeof(freqs3)); + for (i = 0; i < ntreesyms; i++) { + unsigned sym = treesyms[i]; + + /* + * Increment the occurrence counter for this symbol, if + * it's the Huffman alphabet and isn't extra bits. + */ + if ((sym & SYMPFX_MASK) == SYMPFX_CODELEN) { + sym &= ~SYMPFX_MASK; + assert(sym < lenof(freqs3)); + freqs3[sym]++; + } + } + deflate_buildhuf(freqs3, len3, lenof(freqs3), 7); + hufcodes(len3, code3, lenof(freqs3)); + + /* + * Reorder the code length codes into transmission order, and + * determine HCLEN. + */ + for (i = 0; i < 19; i++) + codelen[i] = len3[lenlenmap[i]]; + for (hclen = 19; hclen > 4 && codelen[hclen-1] == 0; hclen--); + + /* + * Now work out the exact size of both the dynamic and the + * static block, in bits. + */ + { + int ssize, dsize; + + /* + * First the dynamic block. + */ + dsize = 3 + 5 + 5 + 4; /* 3-bit header, HLIT, HDIST, HCLEN */ + dsize += 3 * hclen; /* code-length-alphabet code lengths */ + /* Code lengths */ + for (i = 0; i < ntreesyms; i++) + dsize += symsize(treesyms[i], &dht); + /* The actual block data */ + for (i = 0; i < dynamic_len; i++) { + unsigned sym = out->syms[(out->symstart + i) % SYMLIMIT]; + dsize += symsize(sym, &dht); + } + /* And the end-of-data symbol. */ + dsize += symsize(SYMPFX_LITLEN | 256, &dht); + + /* + * Now the static block. + */ + ssize = 3; /* 3-bit block header */ + /* The actual block data */ + for (i = 0; i < static_len; i++) { + unsigned sym = out->syms[(out->symstart + i) % SYMLIMIT]; + ssize += symsize(sym, &out->sht); + } + /* And the end-of-data symbol. */ + ssize += symsize(SYMPFX_LITLEN | 256, &out->sht); + + /* + * Compare the two and decide which to output. We break + * exact ties in favour of the static block, because of the + * special case in which that block has zero length. + */ + dynamic = ((double)ssize * dynamic_len > (double)dsize * static_len); + ht = dynamic ? &dht : &out->sht; + blklen = dynamic ? dynamic_len : static_len; + } + + /* + * Actually transmit the block. + */ + + /* 3-bit block header */ + bfinal = (out->lastblock ? 1 : 0); + btype = dynamic ? 2 : 1; + debug(("send: bfinal=%d btype=%d\n", bfinal, btype)); + outbits(out, bfinal, 1); + outbits(out, btype, 2); + +#ifdef STATISTICS + bitcount_before = out->bitcount; +#endif + + if (dynamic) { + /* HLIT, HDIST and HCLEN */ + debug(("send: hlit=%d hdist=%d hclen=%d\n", hlit, hdist, hclen)); + outbits(out, hlit - 257, 5); + outbits(out, hdist - 1, 5); + outbits(out, hclen - 4, 4); + + /* Code lengths for the auxiliary tree */ + for (i = 0; i < hclen; i++) { + debug(("send: lenlen %d\n", codelen[i])); + outbits(out, codelen[i], 3); + } + + /* Code lengths for the literal/length and distance trees */ + for (i = 0; i < ntreesyms; i++) + writesym(out, treesyms[i], ht); +#ifdef STATISTICS + fprintf(stderr, "total tree size %lu bits\n", + out->bitcount - bitcount_before); +#endif + } + + /* Output the actual symbols from the buffer */ + for (i = 0; i < blklen; i++) { + unsigned sym = out->syms[(out->symstart + i) % SYMLIMIT]; + writesym(out, sym, ht); + } + + /* Output the end-of-data symbol */ + writesym(out, SYMPFX_LITLEN | 256, ht); + + /* + * Remove all the just-output symbols from the symbol buffer by + * adjusting symstart and nsyms. + */ + out->symstart = (out->symstart + blklen) % SYMLIMIT; + out->nsyms -= blklen; +} + +/* + * Give the approximate log-base-2 of an input integer, measured in + * 8ths of a bit. (I.e. this computes an integer approximation to + * 8*logbase2(x).) + */ +static int approxlog2(unsigned x) +{ + int ret = 31*8; + + /* + * Binary-search to get the top bit of x up to bit 31. + */ + if (x < 0x00010000U) x <<= 16, ret -= 16*8; + if (x < 0x01000000U) x <<= 8, ret -= 8*8; + if (x < 0x10000000U) x <<= 4, ret -= 4*8; + if (x < 0x40000000U) x <<= 2, ret -= 2*8; + if (x < 0x80000000U) x <<= 1, ret -= 1*8; + + /* + * Now we know the logarithm we want is in [ret,ret+1). + * Determine the bottom three bits by checking against + * threshold values. + * + * (Each of these threshold values is 0x80000000 times an odd + * power of 2^(1/16). Therefore, this function rounds to + * nearest.) + */ + if (x <= 0xAD583EEAU) { + if (x <= 0x91C3D373U) + ret += (x <= 0x85AAC367U ? 0 : 1); + else + ret += (x <= 0x9EF53260U ? 2 : 3); + } else { + if (x <= 0xCE248C15U) + ret += (x <= 0xBD08A39FU ? 4 : 5); + else + ret += (x <= 0xE0CCDEECU ? 6 : x <= 0xF5257D15L ? 7 : 8); + } + + return ret; +} + +static void chooseblock(deflate_compress_ctx *out) +{ + int freqs1[286], freqs2[30]; + int i, len, bestlen, longestlen = 0; + int total1, total2; + int bestvfm; + + memset(freqs1, 0, sizeof(freqs1)); + memset(freqs2, 0, sizeof(freqs2)); + freqs1[256] = 1; /* we're bound to need one EOB */ + total1 = 1; + total2 = 0; + + /* + * Iterate over all possible block lengths, computing the + * entropic coding approximation to the final length at every + * stage. We divide the result by the number of symbols + * encoded, to determine the `value for money' (overall + * bits-per-symbol count) of a block of that length. + */ + bestlen = -1; + bestvfm = 0; + + len = 300 * 8; /* very approximate size of the Huffman trees */ + + for (i = 0; i < out->nsyms; i++) { + unsigned sym = out->syms[(out->symstart + i) % SYMLIMIT]; + + if (i > 0 && (sym & SYMPFX_MASK) == SYMPFX_LITLEN) { + /* + * This is a viable point at which to end the block. + * Compute the value for money. + */ + int vfm = i * 32768 / len; /* symbols encoded per bit */ + + if (bestlen < 0 || vfm > bestvfm) { + bestlen = i; + bestvfm = vfm; + } + + longestlen = i; + } + + /* + * Increment the occurrence counter for this symbol, if + * it's in one of the Huffman alphabets and isn't extra + * bits. + */ + if ((sym & SYMPFX_MASK) == SYMPFX_LITLEN) { + sym &= ~SYMPFX_MASK; + assert(sym < lenof(freqs1)); + len += freqs1[sym] * approxlog2(freqs1[sym]); + len -= total1 * approxlog2(total1); + freqs1[sym]++; + total1++; + len -= freqs1[sym] * approxlog2(freqs1[sym]); + len += total1 * approxlog2(total1); + } else if ((sym & SYMPFX_MASK) == SYMPFX_DIST) { + sym &= ~SYMPFX_MASK; + assert(sym < lenof(freqs2)); + len += freqs2[sym] * approxlog2(freqs2[sym]); + len -= total2 * approxlog2(total2); + freqs2[sym]++; + total2++; + len -= freqs2[sym] * approxlog2(freqs2[sym]); + len += total2 * approxlog2(total2); + } else if ((sym & SYMPFX_MASK) == SYMPFX_EXTRABITS) { + len += 8 * ((sym &~ SYMPFX_MASK) >> SYM_EXTRABITS_SHIFT); + } + } + + assert(bestlen > 0); + + outblock(out, bestlen, longestlen); +} + +/* + * Force the current symbol buffer to be flushed out as a single + * block. + */ +static void flushblock(deflate_compress_ctx *out) +{ + /* + * No need to check that out->nsyms is a valid block length: we + * know it has to be, because flushblock() is called in between + * two matches/literals. + */ + outblock(out, out->nsyms, out->nsyms); + assert(out->nsyms == 0); +} + +/* + * Place a symbol into the symbols buffer. + */ +static void outsym(deflate_compress_ctx *out, unsigned long sym) +{ + assert(out->nsyms < SYMLIMIT); + out->syms[(out->symstart + out->nsyms++) % SYMLIMIT] = sym; + + if (out->nsyms == SYMLIMIT) + chooseblock(out); +} + +static void literal(struct LZ77Context *ectx, unsigned char c) +{ + deflate_compress_ctx *out = (deflate_compress_ctx *) ectx->userdata; + + outsym(out, SYMPFX_LITLEN | c); +} + +static void match(struct LZ77Context *ectx, int distance, int len) +{ + const coderecord *d, *l; + int i, j, k; + deflate_compress_ctx *out = (deflate_compress_ctx *) ectx->userdata; + + while (len > 0) { + int thislen; + + /* + * We can transmit matches of lengths 3 through 258 + * inclusive. So if len exceeds 258, we must transmit in + * several steps, with 258 or less in each step. + * + * Specifically: if len >= 261, we can transmit 258 and be + * sure of having at least 3 left for the next step. And if + * len <= 258, we can just transmit len. But if len == 259 + * or 260, we must transmit len-3. + */ + thislen = (len > 260 ? 258 : len <= 258 ? len : len - 3); + len -= thislen; + + /* + * Binary-search to find which length code we're + * transmitting. + */ + i = -1; + j = sizeof(lencodes) / sizeof(*lencodes); + while (1) { + assert(j - i >= 2); + k = (j + i) / 2; + if (thislen < lencodes[k].min) + j = k; + else if (thislen > lencodes[k].max) + i = k; + else { + l = &lencodes[k]; + break; /* found it! */ + } + } + + /* + * Transmit the length code. + */ + outsym(out, SYMPFX_LITLEN | l->code); + + /* + * Transmit the extra bits. + */ + if (l->extrabits) { + outsym(out, (SYMPFX_EXTRABITS | (thislen - l->min) | + (l->extrabits << SYM_EXTRABITS_SHIFT))); + } + + /* + * Binary-search to find which distance code we're + * transmitting. + */ + i = -1; + j = sizeof(distcodes) / sizeof(*distcodes); + while (1) { + assert(j - i >= 2); + k = (j + i) / 2; + if (distance < distcodes[k].min) + j = k; + else if (distance > distcodes[k].max) + i = k; + else { + d = &distcodes[k]; + break; /* found it! */ + } + } + + /* + * Write the distance code. + */ + outsym(out, SYMPFX_DIST | d->code); + + /* + * Transmit the extra bits. + */ + if (d->extrabits) { + outsym(out, (SYMPFX_EXTRABITS | (distance - d->min) | + (d->extrabits << SYM_EXTRABITS_SHIFT))); + } + } +} + +deflate_compress_ctx *deflate_compress_new(int type) +{ + deflate_compress_ctx *out; + struct LZ77Context *ectx = snew(struct LZ77Context); + + lz77_init(ectx); + ectx->literal = literal; + ectx->match = match; + + out = snew(deflate_compress_ctx); + out->type = type; + out->outbits = out->noutbits = 0; + out->firstblock = TRUE; +#ifdef STATISTICS + out->bitcount = 0; +#endif + + out->syms = snewn(SYMLIMIT, unsigned long); + out->symstart = out->nsyms = 0; + + out->checksum = (type == DEFLATE_TYPE_ZLIB ? 1 : 0); + out->datasize = 0; + out->lastblock = FALSE; + out->finished = FALSE; + + /* + * Build the static Huffman tables now, so we'll have them + * available every time outblock() is called. + */ + { + int i; + + for (i = 0; i < lenof(out->static_len1); i++) + out->static_len1[i] = (i < 144 ? 8 : + i < 256 ? 9 : + i < 280 ? 7 : 8); + for (i = 0; i < lenof(out->static_len2); i++) + out->static_len2[i] = 5; + } + hufcodes(out->static_len1, out->static_code1, lenof(out->static_code1)); + hufcodes(out->static_len2, out->static_code2, lenof(out->static_code2)); + out->sht.len_litlen = out->static_len1; + out->sht.len_dist = out->static_len2; + out->sht.len_codelen = NULL; + out->sht.code_litlen = out->static_code1; + out->sht.code_dist = out->static_code2; + out->sht.code_codelen = NULL; + + ectx->userdata = out; + out->lzc = ectx; + + return out; +} + +void deflate_compress_free(deflate_compress_ctx *out) +{ + struct LZ77Context *ectx = out->lzc; + + sfree(out->syms); + sfree(ectx->ictx); + sfree(ectx); + sfree(out); +} + +void deflate_compress_data(deflate_compress_ctx *out, + const void *vblock, int len, int flushtype, + void **outblock, int *outlen) +{ + struct LZ77Context *ectx = out->lzc; + const unsigned char *block = (const unsigned char *)vblock; + + assert(!out->finished); + + out->outbuf = NULL; + out->outlen = out->outsize = 0; + + /* + * If this is the first block, output the header. + */ + if (out->firstblock) { + switch (out->type) { + case DEFLATE_TYPE_BARE: + break; /* no header */ + case DEFLATE_TYPE_ZLIB: + /* + * zlib (RFC1950) header bytes: 78 9C. (Deflate + * compression, 32K window size, default algorithm.) + */ + outbits(out, 0x9C78, 16); + break; + case DEFLATE_TYPE_GZIP: + /* + * Minimal gzip (RFC1952) header: + * + * - basic header of 1F 8B + * - compression method byte (8 = deflate) + * - flags byte (zero: we use no optional features) + * - modification time (zero: no time stamp available) + * - extra flags byte (2: we use maximum compression + * always) + * - operating system byte (255: we do not specify) + */ + outbits(out, 0x00088B1F, 32); /* header, CM, flags */ + outbits(out, 0, 32); /* mtime */ + outbits(out, 0xFF02, 16); /* xflags, OS */ + break; + } + out->firstblock = FALSE; + } + + /* + * Feed our data to the LZ77 compression phase. + */ + lz77_compress(ectx, block, len, TRUE); + + /* + * Update checksums and counters. + */ + switch (out->type) { + case DEFLATE_TYPE_ZLIB: + out->checksum = adler32_update(out->checksum, block, len); + break; + case DEFLATE_TYPE_GZIP: + out->checksum = crc32_update(out->checksum, block, len); + break; + } + out->datasize += len; + + switch (flushtype) { + /* + * FIXME: what other flush types are available and useful? + * In PuTTY, it was clear that we generally wanted to be in + * a static block so it was safe to open one. Here, we + * probably prefer to be _outside_ a block if we can. Think + * about this. + */ + case DEFLATE_NO_FLUSH: + break; /* don't flush any data at all (duh) */ + case DEFLATE_SYNC_FLUSH: + /* + * Close the current block. + */ + flushblock(out); + + /* + * Then output an empty _uncompressed_ block: send 000, + * then sync to byte boundary, then send bytes 00 00 FF + * FF. + */ + outbits(out, 0, 3); + if (out->noutbits) + outbits(out, 0, 8 - out->noutbits); + outbits(out, 0, 16); + outbits(out, 0xFFFF, 16); + break; + case DEFLATE_END_OF_DATA: + /* + * Output a block with BFINAL set. + */ + out->lastblock = TRUE; + flushblock(out); + + /* + * Sync to byte boundary, flushing out the final byte. + */ + if (out->noutbits) + outbits(out, 0, 8 - out->noutbits); + + /* + * Format-specific trailer data. + */ + switch (out->type) { + case DEFLATE_TYPE_ZLIB: + /* + * Just write out the Adler32 checksum. + */ + outbits(out, (out->checksum >> 24) & 0xFF, 8); + outbits(out, (out->checksum >> 16) & 0xFF, 8); + outbits(out, (out->checksum >> 8) & 0xFF, 8); + outbits(out, (out->checksum >> 0) & 0xFF, 8); + break; + case DEFLATE_TYPE_GZIP: + /* + * Write out the CRC32 checksum and the data length. + */ + outbits(out, out->checksum, 32); + outbits(out, out->datasize, 32); + break; + } + + out->finished = TRUE; + break; + } + + /* + * Return any data that we've generated. + */ + *outblock = (void *)out->outbuf; + *outlen = out->outlen; +} + +/* ---------------------------------------------------------------------- + * Deflate decompression. + */ + +/* + * The way we work the Huffman decode is to have a table lookup on + * the first N bits of the input stream (in the order they arrive, + * of course, i.e. the first bit of the Huffman code is in bit 0). + * Each table entry lists the number of bits to consume, plus + * either an output code or a pointer to a secondary table. + */ +struct table; +struct tableentry; + +struct tableentry { + unsigned char nbits; + short code; + struct table *nexttable; +}; + +struct table { + int mask; /* mask applied to input bit stream */ + struct tableentry *table; +}; + +#define MAXSYMS 288 + +#define DWINSIZE 32768 + +/* + * Build a single-level decode table for elements + * [minlength,maxlength) of the provided code/length tables, and + * recurse to build subtables. + */ +static struct table *mkonetab(int *codes, unsigned char *lengths, int nsyms, + int pfx, int pfxbits, int bits) +{ + struct table *tab = snew(struct table); + int pfxmask = (1 << pfxbits) - 1; + int nbits, i, j, code; + + tab->table = snewn(1 << bits, struct tableentry); + tab->mask = (1 << bits) - 1; + + for (code = 0; code <= tab->mask; code++) { + tab->table[code].code = -1; + tab->table[code].nbits = 0; + tab->table[code].nexttable = NULL; + } + + for (i = 0; i < nsyms; i++) { + if (lengths[i] <= pfxbits || (codes[i] & pfxmask) != pfx) + continue; + code = (codes[i] >> pfxbits) & tab->mask; + for (j = code; j <= tab->mask; j += 1 << (lengths[i] - pfxbits)) { + tab->table[j].code = i; + nbits = lengths[i] - pfxbits; + if (tab->table[j].nbits < nbits) + tab->table[j].nbits = nbits; + } + } + for (code = 0; code <= tab->mask; code++) { + if (tab->table[code].nbits <= bits) + continue; + /* Generate a subtable. */ + tab->table[code].code = -1; + nbits = tab->table[code].nbits - bits; + if (nbits > 7) + nbits = 7; + tab->table[code].nbits = bits; + tab->table[code].nexttable = mkonetab(codes, lengths, nsyms, + pfx | (code << pfxbits), + pfxbits + bits, nbits); + } + + return tab; +} + +/* + * Build a decode table, given a set of Huffman tree lengths. + */ +static struct table *mktable(unsigned char *lengths, int nlengths, +#ifdef ANALYSIS + const char *alphabet, +#endif + int *error) +{ + int codes[MAXSYMS]; + int maxlen; + +#ifdef ANALYSIS + if (alphabet && analyse_level > 1) { + int i, col = 0; + printf("code lengths for %s alphabet:\n", alphabet); + for (i = 0; i < nlengths; i++) { + col += printf("%3d", lengths[i]); + if (col > 72) { + putchar('\n'); + col = 0; + } + } + if (col > 0) + putchar('\n'); + } +#endif + + maxlen = hufcodes(lengths, codes, nlengths); + + if (maxlen < 0) { + *error = (maxlen == -1 ? DEFLATE_ERR_LARGE_HUFTABLE : + DEFLATE_ERR_SMALL_HUFTABLE); + return NULL; + } + + /* + * Now we have the complete list of Huffman codes. Build a + * table. + */ + return mkonetab(codes, lengths, nlengths, 0, 0, maxlen < 9 ? maxlen : 9); +} + +static int freetable(struct table **ztab) +{ + struct table *tab; + int code; + + if (ztab == NULL) + return -1; + + if (*ztab == NULL) + return 0; + + tab = *ztab; + + for (code = 0; code <= tab->mask; code++) + if (tab->table[code].nexttable != NULL) + freetable(&tab->table[code].nexttable); + + sfree(tab->table); + tab->table = NULL; + + sfree(tab); + *ztab = NULL; + + return (0); +} + +struct deflate_decompress_ctx { + struct table *staticlentable, *staticdisttable; + struct table *currlentable, *currdisttable, *lenlentable; + enum { + ZLIBSTART, + GZIPSTART, GZIPMETHFLAGS, GZIPIGNORE1, GZIPIGNORE2, GZIPIGNORE3, + GZIPEXTRA, GZIPFNAME, GZIPCOMMENT, + OUTSIDEBLK, TREES_HDR, TREES_LENLEN, TREES_LEN, TREES_LENREP, + INBLK, GOTLENSYM, GOTLEN, GOTDISTSYM, + UNCOMP_LEN, UNCOMP_NLEN, UNCOMP_DATA, + END, + ADLER1, ADLER2, + CRC1, CRC2, ILEN1, ILEN2, + FINALSPIN + } state; + int sym, hlit, hdist, hclen, lenptr, lenextrabits, lenaddon, len, + lenrep, lastblock; + int uncomplen; + unsigned char lenlen[19]; + unsigned char lengths[286 + 32]; + unsigned long bits; + int nbits; + unsigned char window[DWINSIZE]; + int winpos; + unsigned char *outblk; + int outlen, outsize; + int type; + unsigned long checksum; + unsigned long bytesout; + int gzflags, gzextralen; +#ifdef ANALYSIS + int bytesread; + int bitcount_before; +#define BITCOUNT(dctx) ( (dctx)->bytesread * 8 - (dctx)->nbits ) +#endif +}; + +deflate_decompress_ctx *deflate_decompress_new(int type) +{ + deflate_decompress_ctx *dctx = snew(deflate_decompress_ctx); + unsigned char lengths[288]; + + memset(lengths, 8, 144); + memset(lengths + 144, 9, 256 - 144); + memset(lengths + 256, 7, 280 - 256); + memset(lengths + 280, 8, 288 - 280); + dctx->staticlentable = mktable(lengths, 288, +#ifdef ANALYSIS + NULL, +#endif + NULL); + assert(dctx->staticlentable); + memset(lengths, 5, 32); + dctx->staticdisttable = mktable(lengths, 32, +#ifdef ANALYSIS + NULL, +#endif + NULL); + assert(dctx->staticdisttable); + dctx->state = (type == DEFLATE_TYPE_ZLIB ? ZLIBSTART : + type == DEFLATE_TYPE_GZIP ? GZIPSTART : + OUTSIDEBLK); + dctx->currlentable = dctx->currdisttable = dctx->lenlentable = NULL; + dctx->bits = 0; + dctx->nbits = 0; + dctx->winpos = 0; + dctx->type = type; + dctx->lastblock = FALSE; + dctx->checksum = (type == DEFLATE_TYPE_ZLIB ? 1 : 0); + dctx->bytesout = 0; + dctx->gzflags = dctx->gzextralen = 0; +#ifdef ANALYSIS + dctx->bytesread = dctx->bitcount_before = 0; +#endif + + return dctx; +} + +void deflate_decompress_free(deflate_decompress_ctx *dctx) +{ + if (dctx->currlentable && dctx->currlentable != dctx->staticlentable) + freetable(&dctx->currlentable); + if (dctx->currdisttable && dctx->currdisttable != dctx->staticdisttable) + freetable(&dctx->currdisttable); + if (dctx->lenlentable) + freetable(&dctx->lenlentable); + freetable(&dctx->staticlentable); + freetable(&dctx->staticdisttable); + sfree(dctx); +} + +static int huflookup(unsigned long *bitsp, int *nbitsp, struct table *tab) +{ + unsigned long bits = *bitsp; + int nbits = *nbitsp; + while (1) { + struct tableentry *ent; + ent = &tab->table[bits & tab->mask]; + if (ent->nbits > nbits) + return -1; /* not enough data */ + bits >>= ent->nbits; + nbits -= ent->nbits; + if (ent->code == -1) + tab = ent->nexttable; + else { + *bitsp = bits; + *nbitsp = nbits; + return ent->code; + } + + /* + * If we reach here with `tab' null, it can only be because + * there was a missing entry in the Huffman table. This + * should never occur even with invalid input data, because + * we enforce at mktable time that the Huffman codes should + * precisely cover the code space; so we can enforce this + * by assertion. + */ + assert(tab); + } +} + +static void emit_char(deflate_decompress_ctx *dctx, int c) +{ + dctx->window[dctx->winpos] = c; + dctx->winpos = (dctx->winpos + 1) & (DWINSIZE - 1); + if (dctx->outlen >= dctx->outsize) { + dctx->outsize = dctx->outlen * 3 / 2 + 512; + dctx->outblk = sresize(dctx->outblk, dctx->outsize, unsigned char); + } + if (dctx->type == DEFLATE_TYPE_ZLIB) { + unsigned char uc = c; + dctx->checksum = adler32_update(dctx->checksum, &uc, 1); + } else if (dctx->type == DEFLATE_TYPE_GZIP) { + unsigned char uc = c; + dctx->checksum = crc32_update(dctx->checksum, &uc, 1); + } + dctx->outblk[dctx->outlen++] = c; + dctx->bytesout++; +} + +#define EATBITS(n) ( dctx->nbits -= (n), dctx->bits >>= (n) ) + +int deflate_decompress_data(deflate_decompress_ctx *dctx, + const void *vblock, int len, + void **outblock, int *outlen) +{ + const coderecord *rec; + const unsigned char *block = (const unsigned char *)vblock; + int code, bfinal, btype, rep, dist, nlen, header, cksum; + int error = 0; + + if (len == 0) { + *outblock = NULL; + *outlen = 0; + if (dctx->state != FINALSPIN) + return DEFLATE_ERR_UNEXPECTED_EOF; + else + return 0; + } + + dctx->outblk = NULL; + dctx->outsize = 0; + dctx->outlen = 0; + + while (len > 0 || dctx->nbits > 0) { + while (dctx->nbits < 24 && len > 0) { + dctx->bits |= (*block++) << dctx->nbits; + dctx->nbits += 8; + len--; +#ifdef ANALYSIS + dctx->bytesread++; +#endif + } + switch (dctx->state) { + case ZLIBSTART: + /* Expect 16-bit zlib header. */ + if (dctx->nbits < 16) + goto finished; /* done all we can */ + + /* + * The header is stored as a big-endian 16-bit integer, + * in contrast to the general little-endian policy in + * the rest of the format :-( + */ + header = (((dctx->bits & 0xFF00) >> 8) | + ((dctx->bits & 0x00FF) << 8)); + EATBITS(16); + + /* + * Check the header: + * + * - bits 8-11 should be 1000 (Deflate/RFC1951) + * - bits 12-15 should be at most 0111 (window size) + * - bit 5 should be zero (no dictionary present) + * - we don't care about bits 6-7 (compression rate) + * - bits 0-4 should be set up to make the whole thing + * a multiple of 31 (checksum). + */ + if ((header & 0xF000) > 0x7000 || + (header & 0x0020) != 0x0000 || + (header % 31) != 0) { + error = DEFLATE_ERR_ZLIB_HEADER; + goto finished; + } + if ((header & 0x0F00) != 0x0800) { + error = DEFLATE_ERR_ZLIB_WRONGCOMP; + goto finished; + } + dctx->state = OUTSIDEBLK; + break; + case GZIPSTART: + /* Expect 16-bit gzip header. */ + if (dctx->nbits < 16) + goto finished; + header = dctx->bits & 0xFFFF; + EATBITS(16); + if (header != 0x8B1F) { + error = DEFLATE_ERR_GZIP_HEADER; + goto finished; + } + dctx->state = GZIPMETHFLAGS; + break; + case GZIPMETHFLAGS: + /* Expect gzip compression method and flags bytes. */ + if (dctx->nbits < 16) + goto finished; + header = dctx->bits & 0xFF; + EATBITS(8); + if (header != 8) { + error = DEFLATE_ERR_GZIP_WRONGCOMP; + goto finished; + } + dctx->gzflags = dctx->bits & 0xFF; + if (dctx->gzflags & 2) { + /* + * The FHCRC flag is slightly confusing. RFC1952 + * documents it as indicating the presence of a + * two-byte CRC16 of the gzip header, occurring + * just before the beginning of the Deflate stream. + * However, gzip itself (as of 1.3.5) appears to + * believe it indicates that the current gzip + * `member' is not the final one, i.e. that the + * stream is composed of multiple gzip members + * concatenated together, and furthermore gzip will + * refuse to decode any file that has it set. + * + * For this reason, I label it as `disputed' and + * also refuse to decode anything that has it set. + * I don't expect this to be a problem in practice. + */ + error = DEFLATE_ERR_GZIP_FHCRC; + goto finished; + } + EATBITS(8); + dctx->state = GZIPIGNORE1; + break; + case GZIPIGNORE1: + case GZIPIGNORE2: + case GZIPIGNORE3: + /* Expect two bytes of gzip timestamp/XFL/OS, which we ignore. */ + if (dctx->nbits < 16) + goto finished; + EATBITS(16); + if (dctx->state == GZIPIGNORE3) { + dctx->state = GZIPEXTRA; + } else + dctx->state++; /* maps IGNORE1 -> IGNORE2 -> IGNORE3 */ + break; + case GZIPEXTRA: + if (dctx->gzflags & 4) { + /* Expect two bytes of extra-length count, then that many + * extra bytes of header data, all of which we ignore. */ + if (!dctx->gzextralen) { + if (dctx->nbits < 16) + goto finished; + dctx->gzextralen = dctx->bits & 0xFFFF; + EATBITS(16); + break; + } else if (dctx->gzextralen > 0) { + if (dctx->nbits < 8) + goto finished; + EATBITS(8); + if (--dctx->gzextralen > 0) + break; + } + } + dctx->state = GZIPFNAME; + break; + case GZIPFNAME: + if (dctx->gzflags & 8) { + /* + * Expect a NUL-terminated filename. + */ + if (dctx->nbits < 8) + goto finished; + code = dctx->bits & 0xFF; + EATBITS(8); + } else + code = 0; + if (code == 0) + dctx->state = GZIPCOMMENT; + break; + case GZIPCOMMENT: + if (dctx->gzflags & 16) { + /* + * Expect a NUL-terminated filename. + */ + if (dctx->nbits < 8) + goto finished; + code = dctx->bits & 0xFF; + EATBITS(8); + } else + code = 0; + if (code == 0) + dctx->state = OUTSIDEBLK; + break; + case OUTSIDEBLK: + /* Expect 3-bit block header. */ + if (dctx->nbits < 3) + goto finished; /* done all we can */ + bfinal = dctx->bits & 1; + if (bfinal) + dctx->lastblock = TRUE; + EATBITS(1); + btype = dctx->bits & 3; + EATBITS(2); + if (btype == 0) { + int to_eat = dctx->nbits & 7; + dctx->state = UNCOMP_LEN; + EATBITS(to_eat); /* align to byte boundary */ + } else if (btype == 1) { + dctx->currlentable = dctx->staticlentable; + dctx->currdisttable = dctx->staticdisttable; + dctx->state = INBLK; + } else if (btype == 2) { + dctx->state = TREES_HDR; + } + debug(("recv: bfinal=%d btype=%d\n", bfinal, btype)); +#ifdef ANALYSIS + if (analyse_level > 1) { + static const char *const btypes[] = { + "uncompressed", "static", "dynamic", "type 3 (unknown)" + }; + printf("new block, %sfinal, %s\n", + bfinal ? "" : "not ", + btypes[btype]); + } +#endif + break; + case TREES_HDR: + /* + * Dynamic block header. Five bits of HLIT, five of + * HDIST, four of HCLEN. + */ + if (dctx->nbits < 5 + 5 + 4) + goto finished; /* done all we can */ + dctx->hlit = 257 + (dctx->bits & 31); + EATBITS(5); + dctx->hdist = 1 + (dctx->bits & 31); + EATBITS(5); + dctx->hclen = 4 + (dctx->bits & 15); + EATBITS(4); + debug(("recv: hlit=%d hdist=%d hclen=%d\n", dctx->hlit, + dctx->hdist, dctx->hclen)); +#ifdef ANALYSIS + if (analyse_level > 1) + printf("hlit=%d, hdist=%d, hclen=%d\n", + dctx->hlit, dctx->hdist, dctx->hclen); +#endif + dctx->lenptr = 0; + dctx->state = TREES_LENLEN; + memset(dctx->lenlen, 0, sizeof(dctx->lenlen)); + break; + case TREES_LENLEN: + if (dctx->nbits < 3) + goto finished; + while (dctx->lenptr < dctx->hclen && dctx->nbits >= 3) { + dctx->lenlen[lenlenmap[dctx->lenptr++]] = + (unsigned char) (dctx->bits & 7); + debug(("recv: lenlen %d\n", (unsigned char) (dctx->bits & 7))); + EATBITS(3); + } + if (dctx->lenptr == dctx->hclen) { + dctx->lenlentable = mktable(dctx->lenlen, 19, +#ifdef ANALYSIS + "code length", +#endif + &error); + if (!dctx->lenlentable) + goto finished; /* error code set up by mktable */ + dctx->state = TREES_LEN; + dctx->lenptr = 0; + } + break; + case TREES_LEN: + if (dctx->lenptr >= dctx->hlit + dctx->hdist) { + dctx->currlentable = mktable(dctx->lengths, dctx->hlit, +#ifdef ANALYSIS + "literal/length", +#endif + &error); + if (!dctx->currlentable) + goto finished; /* error code set up by mktable */ + dctx->currdisttable = mktable(dctx->lengths + dctx->hlit, + dctx->hdist, +#ifdef ANALYSIS + "distance", +#endif + &error); + if (!dctx->currdisttable) + goto finished; /* error code set up by mktable */ + freetable(&dctx->lenlentable); + dctx->lenlentable = NULL; + dctx->state = INBLK; + break; + } + code = huflookup(&dctx->bits, &dctx->nbits, dctx->lenlentable); + debug(("recv: codelen %d\n", code)); + if (code == -1) + goto finished; + if (code < 16) { +#ifdef ANALYSIS + if (analyse_level > 1) + printf("code-length %d\n", code); +#endif + dctx->lengths[dctx->lenptr++] = code; + } else { + dctx->lenextrabits = (code == 16 ? 2 : code == 17 ? 3 : 7); + dctx->lenaddon = (code == 18 ? 11 : 3); + dctx->lenrep = (code == 16 && dctx->lenptr > 0 ? + dctx->lengths[dctx->lenptr - 1] : 0); + dctx->state = TREES_LENREP; + } + break; + case TREES_LENREP: + if (dctx->nbits < dctx->lenextrabits) + goto finished; + rep = + dctx->lenaddon + + (dctx->bits & ((1 << dctx->lenextrabits) - 1)); + EATBITS(dctx->lenextrabits); + if (dctx->lenextrabits) + debug(("recv: codelen-extrabits %d/%d\n", rep - dctx->lenaddon, + dctx->lenextrabits)); +#ifdef ANALYSIS + if (analyse_level > 1) + printf("code-length-repeat: %d copies of %d\n", rep, + dctx->lenrep); +#endif + while (rep > 0 && dctx->lenptr < dctx->hlit + dctx->hdist) { + dctx->lengths[dctx->lenptr] = dctx->lenrep; + dctx->lenptr++; + rep--; + } + dctx->state = TREES_LEN; + break; + case INBLK: +#ifdef ANALYSIS + dctx->bitcount_before = BITCOUNT(dctx); +#endif + code = huflookup(&dctx->bits, &dctx->nbits, dctx->currlentable); + debug(("recv: litlen %d\n", code)); + if (code == -1) + goto finished; + if (code < 256) { +#ifdef ANALYSIS + if (analyse_level > 0) + printf("%lu: literal %d [%d]\n", dctx->bytesout, code, + BITCOUNT(dctx) - dctx->bitcount_before); +#endif + emit_char(dctx, code); + } else if (code == 256) { + if (dctx->lastblock) + dctx->state = END; + else + dctx->state = OUTSIDEBLK; + if (dctx->currlentable != dctx->staticlentable) { + freetable(&dctx->currlentable); + dctx->currlentable = NULL; + } + if (dctx->currdisttable != dctx->staticdisttable) { + freetable(&dctx->currdisttable); + dctx->currdisttable = NULL; + } + } else if (code < 286) { /* static tree can give >285; ignore */ + dctx->state = GOTLENSYM; + dctx->sym = code; + } + break; + case GOTLENSYM: + rec = &lencodes[dctx->sym - 257]; + if (dctx->nbits < rec->extrabits) + goto finished; + dctx->len = + rec->min + (dctx->bits & ((1 << rec->extrabits) - 1)); + if (rec->extrabits) + debug(("recv: litlen-extrabits %d/%d\n", + dctx->len - rec->min, rec->extrabits)); + EATBITS(rec->extrabits); + dctx->state = GOTLEN; + break; + case GOTLEN: + code = huflookup(&dctx->bits, &dctx->nbits, dctx->currdisttable); + debug(("recv: dist %d\n", code)); + if (code == -1) + goto finished; + dctx->state = GOTDISTSYM; + dctx->sym = code; + break; + case GOTDISTSYM: + rec = &distcodes[dctx->sym]; + if (dctx->nbits < rec->extrabits) + goto finished; + dist = rec->min + (dctx->bits & ((1 << rec->extrabits) - 1)); + if (rec->extrabits) + debug(("recv: dist-extrabits %d/%d\n", + dist - rec->min, rec->extrabits)); + EATBITS(rec->extrabits); + dctx->state = INBLK; +#ifdef ANALYSIS + if (analyse_level > 0) + printf("%lu: copy len=%d dist=%d [%d]\n", dctx->bytesout, + dctx->len, dist, + BITCOUNT(dctx) - dctx->bitcount_before); +#endif + while (dctx->len--) + emit_char(dctx, dctx->window[(dctx->winpos - dist) & + (DWINSIZE - 1)]); + break; + case UNCOMP_LEN: + /* + * Uncompressed block. We expect to see a 16-bit LEN. + */ + if (dctx->nbits < 16) + goto finished; + dctx->uncomplen = dctx->bits & 0xFFFF; + EATBITS(16); + dctx->state = UNCOMP_NLEN; + break; + case UNCOMP_NLEN: + /* + * Uncompressed block. We expect to see a 16-bit NLEN, + * which should be the one's complement of the previous + * LEN. + */ + if (dctx->nbits < 16) + goto finished; + nlen = dctx->bits & 0xFFFF; + EATBITS(16); + if (dctx->uncomplen == 0) + dctx->state = OUTSIDEBLK; /* block is empty */ + else + dctx->state = UNCOMP_DATA; + break; + case UNCOMP_DATA: + if (dctx->nbits < 8) + goto finished; +#ifdef ANALYSIS + if (analyse_level > 0) + printf("%lu: uncompressed %d [8]\n", dctx->bytesout, + (int)(dctx->bits & 0xFF)); +#endif + emit_char(dctx, dctx->bits & 0xFF); + EATBITS(8); + if (--dctx->uncomplen == 0) + dctx->state = OUTSIDEBLK; /* end of uncompressed block */ + break; + case END: + /* + * End of compressed data. We align to a byte boundary, + * and then look for format-specific trailer data. + */ + { + int to_eat = dctx->nbits & 7; + EATBITS(to_eat); + } + if (dctx->type == DEFLATE_TYPE_ZLIB) + dctx->state = ADLER1; + else if (dctx->type == DEFLATE_TYPE_GZIP) + dctx->state = CRC1; + else + dctx->state = FINALSPIN; + break; + case ADLER1: + if (dctx->nbits < 16) + goto finished; + cksum = (dctx->bits & 0xFF) << 8; + EATBITS(8); + cksum |= (dctx->bits & 0xFF); + EATBITS(8); + if (cksum != ((dctx->checksum >> 16) & 0xFFFF)) { + error = DEFLATE_ERR_CHECKSUM; + goto finished; + } + dctx->state = ADLER2; + break; + case ADLER2: + if (dctx->nbits < 16) + goto finished; + cksum = (dctx->bits & 0xFF) << 8; + EATBITS(8); + cksum |= (dctx->bits & 0xFF); + EATBITS(8); + if (cksum != (dctx->checksum & 0xFFFF)) { + error = DEFLATE_ERR_CHECKSUM; + goto finished; + } + dctx->state = FINALSPIN; + break; + case CRC1: + if (dctx->nbits < 16) + goto finished; + cksum = dctx->bits & 0xFFFF; + EATBITS(16); + if (cksum != (dctx->checksum & 0xFFFF)) { + error = DEFLATE_ERR_CHECKSUM; + goto finished; + } + dctx->state = CRC2; + break; + case CRC2: + if (dctx->nbits < 16) + goto finished; + cksum = dctx->bits & 0xFFFF; + EATBITS(16); + if (cksum != ((dctx->checksum >> 16) & 0xFFFF)) { + error = DEFLATE_ERR_CHECKSUM; + goto finished; + } + dctx->state = ILEN1; + break; + case ILEN1: + if (dctx->nbits < 16) + goto finished; + cksum = dctx->bits & 0xFFFF; + EATBITS(16); + if (cksum != (dctx->bytesout & 0xFFFF)) { + error = DEFLATE_ERR_INLEN; + goto finished; + } + dctx->state = ILEN2; + break; + case ILEN2: + if (dctx->nbits < 16) + goto finished; + cksum = dctx->bits & 0xFFFF; + EATBITS(16); + if (cksum != ((dctx->bytesout >> 16) & 0xFFFF)) { + error = DEFLATE_ERR_INLEN; + goto finished; + } + dctx->state = FINALSPIN; + break; + case FINALSPIN: + /* Just ignore any trailing garbage on the data stream. */ + /* (We could alternatively throw an error here, if we wanted + * to detect and complain about trailing garbage.) */ + EATBITS(dctx->nbits); + break; + } + } + + finished: + *outblock = dctx->outblk; + *outlen = dctx->outlen; + return error; +} + +#define A(code,str) str +const char *const deflate_error_msg[DEFLATE_NUM_ERRORS] = { + DEFLATE_ERRORLIST(A) +}; +#undef A + +#define A(code,str) #code +const char *const deflate_error_sym[DEFLATE_NUM_ERRORS] = { + DEFLATE_ERRORLIST(A) +}; +#undef A + +#ifdef STANDALONE + +int main(int argc, char **argv) +{ + unsigned char buf[65536]; + void *outbuf; + int ret, err, outlen; + deflate_decompress_ctx *dhandle; + deflate_compress_ctx *chandle; + int type = DEFLATE_TYPE_ZLIB, opts = TRUE; + int compress = FALSE, decompress = FALSE; + int got_arg = FALSE; + char *filename = NULL; + FILE *fp; + + while (--argc) { + char *p = *++argv; + + got_arg = TRUE; + + if (p[0] == '-' && opts) { + if (!strcmp(p, "-b")) + type = DEFLATE_TYPE_BARE; + else if (!strcmp(p, "-g")) + type = DEFLATE_TYPE_GZIP; + else if (!strcmp(p, "-c")) + compress = TRUE; + else if (!strcmp(p, "-d")) + decompress = TRUE; + else if (!strcmp(p, "-a")) + analyse_level++, decompress = TRUE; + else if (!strcmp(p, "--")) + opts = FALSE; /* next thing is filename */ + else { + fprintf(stderr, "unknown command line option '%s'\n", p); + return 1; + } + } else if (!filename) { + filename = p; + } else { + fprintf(stderr, "can only handle one filename\n"); + return 1; + } + } + + if (!compress && !decompress) { + fprintf(stderr, "usage: deflate [ -c | -d | -a ] [ -b | -g ]" + " [filename]\n"); + return (got_arg ? 1 : 0); + } + + if (compress && decompress) { + fprintf(stderr, "please do not specify both compression and" + " decompression\n"); + return (got_arg ? 1 : 0); + } + + if (compress) { + chandle = deflate_compress_new(type); + dhandle = NULL; + } else { + dhandle = deflate_decompress_new(type); + chandle = NULL; + } + + if (filename) + fp = fopen(filename, "rb"); + else + fp = stdin; + + if (!fp) { + assert(filename); + fprintf(stderr, "unable to open '%s'\n", filename); + return 1; + } + + do { + ret = fread(buf, 1, sizeof(buf), fp); + outbuf = NULL; + if (dhandle) { + if (ret > 0) + err = deflate_decompress_data(dhandle, buf, ret, + (void **)&outbuf, &outlen); + else + err = deflate_decompress_data(dhandle, NULL, 0, + (void **)&outbuf, &outlen); + } else { + if (ret > 0) + deflate_compress_data(chandle, buf, ret, DEFLATE_NO_FLUSH, + (void **)&outbuf, &outlen); + else + deflate_compress_data(chandle, buf, ret, DEFLATE_END_OF_DATA, + (void **)&outbuf, &outlen); + err = 0; + } + if (outbuf) { + if (!analyse_level && outlen) + fwrite(outbuf, 1, outlen, stdout); + sfree(outbuf); + } + if (err > 0) { + fprintf(stderr, "decoding error: %s\n", deflate_error_msg[err]); + return 1; + } + } while (ret > 0); + + if (dhandle) + deflate_decompress_free(dhandle); + if (chandle) + deflate_compress_free(chandle); + + if (filename) + fclose(fp); + + return 0; +} + +#endif + +#ifdef TESTMODE + +int main(int argc, char **argv) +{ + char *filename = NULL; + FILE *fp; + deflate_compress_ctx *chandle; + deflate_decompress_ctx *dhandle; + unsigned char buf[65536], *outbuf, *outbuf2; + int ret, err, outlen, outlen2; + int dlen = 0, clen = 0; + int opts = TRUE; + + while (--argc) { + char *p = *++argv; + + if (p[0] == '-' && opts) { + if (!strcmp(p, "--")) + opts = FALSE; /* next thing is filename */ + else { + fprintf(stderr, "unknown command line option '%s'\n", p); + return 1; + } + } else if (!filename) { + filename = p; + } else { + fprintf(stderr, "can only handle one filename\n"); + return 1; + } + } + + if (filename) + fp = fopen(filename, "rb"); + else + fp = stdin; + + if (!fp) { + assert(filename); + fprintf(stderr, "unable to open '%s'\n", filename); + return 1; + } + + chandle = deflate_compress_new(DEFLATE_TYPE_ZLIB); + dhandle = deflate_decompress_new(DEFLATE_TYPE_ZLIB); + + do { + ret = fread(buf, 1, sizeof(buf), fp); + if (ret <= 0) { + deflate_compress_data(chandle, NULL, 0, DEFLATE_END_OF_DATA, + (void **)&outbuf, &outlen); + } else { + dlen += ret; + deflate_compress_data(chandle, buf, ret, DEFLATE_NO_FLUSH, + (void **)&outbuf, &outlen); + } + if (outbuf) { + clen += outlen; + err = deflate_decompress_data(dhandle, outbuf, outlen, + (void **)&outbuf2, &outlen2); + sfree(outbuf); + if (outbuf2) { + if (outlen2) + fwrite(outbuf2, 1, outlen2, stdout); + sfree(outbuf2); + } + if (!err && ret <= 0) { + /* + * signal EOF + */ + err = deflate_decompress_data(dhandle, NULL, 0, + (void **)&outbuf2, &outlen2); + assert(outbuf2 == NULL); + } + if (err) { + fprintf(stderr, "decoding error: %s\n", + deflate_error_msg[err]); + return 1; + } + } + } while (ret > 0); + + fprintf(stderr, "%d plaintext -> %d compressed\n", dlen, clen); + + return 0; +} + +#endif diff --git a/app/tools/halibut/deflate.h b/app/tools/halibut/deflate.h new file mode 100644 index 0000000..80837f9 --- /dev/null +++ b/app/tools/halibut/deflate.h @@ -0,0 +1,168 @@ +/* + * Header file for my independent implementation of Deflate + * (RFC1951) compression. + */ + +#ifndef DEFLATE_DEFLATE_H +#define DEFLATE_DEFLATE_H + +/* + * Types of Deflate data stream. + * + * DEFLATE_TYPE_BARE represents the basic Deflate data format, as + * defined in RFC 1951. It has no checksum to detect errors and no + * magic-number header for ease of recognition, but it does have + * internal EOF indication. + * + * DEFLATE_TYPE_ZLIB represents the zlib container format, as + * defined in RFC 1950. It has a two-byte header, and a four-byte + * Adler32 checksum at the end to verify correct decoding, but + * apart from those six bytes it's exactly equivalent to + * DEFLATE_TYPE_BARE. + * + * DEFLATE_TYPE_GZIP represents the gzip compressed file format, as + * defined in RFC 1952. This is a more full-featured format, with a + * magic number, a CRC checksum of the compressed data, and various + * header features including storing the original filename. This + * implementation accepts but ignores all of those features on + * input except the checksum, and outputs them in the most trivial + * fashion. Also, this implementation will not decode multiple + * concatenated gzip members (permitted by the RFC). + */ +enum { + DEFLATE_TYPE_BARE, + DEFLATE_TYPE_ZLIB, + DEFLATE_TYPE_GZIP +}; + +/* ---------------------------------------------------------------------- + * Compression functions. Create a compression context with + * deflate_compress_new(); feed it data with repeated calls to + * deflate_compress_data(); destroy it with + * deflate_compress_free(). + */ + +typedef struct deflate_compress_ctx deflate_compress_ctx; + +/* + * Create a new compression context. `type' indicates whether it's + * bare Deflate (as used in, say, zip files) or Zlib (as used in, + * say, PDF). + */ +deflate_compress_ctx *deflate_compress_new(int type); + +/* + * Free a compression context previously allocated by + * deflate_compress_new(). + */ +void deflate_compress_free(deflate_compress_ctx *ctx); + +/* + * Give the compression context some data to compress. The input + * data is passed in `inblock', and has length `inlen'. This + * function may or may not produce some output data; if so, it is + * written to a dynamically allocated chunk of memory, a pointer to + * that memory is stored in `outblock', and the length of output + * data is stored in `outlen'. It is common for no data to be + * output, if the input data has merely been stored in internal + * buffers. + * + * `flushtype' indicates whether you want to force buffered data to + * be output. It can be one of the following values: + * + * - DEFLATE_NO_FLUSH: nothing is output if the compressor would + * rather not. Use this when the best compression is desired + * (i.e. most of the time). + * + * - DEFLATE_SYNC_FLUSH: all the buffered data is output, but the + * compressed data stream remains open and ready to continue + * compressing data. Use this in interactive protocols when a + * single compressed data stream is split across several network + * packets. + * + * - DEFLATE_END_OF_DATA: all the buffered data is output and the + * compressed data stream is cleaned up. Any checksums required + * at the end of the stream are also output. + */ +void deflate_compress_data(deflate_compress_ctx *ctx, + const void *inblock, int inlen, int flushtype, + void **outblock, int *outlen); + +enum { + DEFLATE_NO_FLUSH, + DEFLATE_SYNC_FLUSH, + DEFLATE_END_OF_DATA +}; + +/* ---------------------------------------------------------------------- + * Decompression functions. Create a decompression context with + * deflate_decompress_new(); feed it data with repeated calls to + * deflate_decompress_data(); destroy it with + * deflate_decompress_free(). + */ + +typedef struct deflate_decompress_ctx deflate_decompress_ctx; + +/* + * Create a new decompression context. `type' means the same as it + * does in deflate_compress_new(). + */ +deflate_decompress_ctx *deflate_decompress_new(int type); + +/* + * Free a decompression context previously allocated by + * deflate_decompress_new(). + */ +void deflate_decompress_free(deflate_decompress_ctx *ctx); + +/* + * Give the decompression context some data to decompress. The + * input data is passed in `inblock', and has length `inlen'. This + * function may or may not produce some output data; if so, it is + * written to a dynamically allocated chunk of memory, a pointer to + * that memory is stored in `outblock', and the length of output + * data is stored in `outlen'. + * + * Returns 0 on success, or a non-zero error code if there was a + * decoding error. In case of an error return, the data decoded + * before the error is still returned as well. The possible errors + * are listed below. + * + * If you want to check that the compressed data stream was + * correctly terminated, you can call this function with inlen==0 + * to signal input EOF and see if an error comes back. If you don't + * care, don't bother. + */ +int deflate_decompress_data(deflate_decompress_ctx *ctx, + const void *inblock, int inlen, + void **outblock, int *outlen); + +/* + * Enumeration of error codes. The strange macro is so that I can + * define description arrays in the accompanying source. + */ +#define DEFLATE_ERRORLIST(A) \ + A(DEFLATE_NO_ERR, "success"), \ + A(DEFLATE_ERR_ZLIB_HEADER, "invalid zlib header"), \ + A(DEFLATE_ERR_ZLIB_WRONGCOMP, "zlib header specifies non-deflate compression"), \ + A(DEFLATE_ERR_GZIP_HEADER, "invalid gzip header"), \ + A(DEFLATE_ERR_GZIP_WRONGCOMP, "gzip header specifies non-deflate compression"), \ + A(DEFLATE_ERR_GZIP_FHCRC, "gzip header specifies disputed FHCRC flag"), \ + A(DEFLATE_ERR_SMALL_HUFTABLE, "under-committed Huffman code space"), \ + A(DEFLATE_ERR_LARGE_HUFTABLE, "over-committed Huffman code space"), \ + A(DEFLATE_ERR_CHECKSUM, "incorrect data checksum"), \ + A(DEFLATE_ERR_INLEN, "incorrect data length"), \ + A(DEFLATE_ERR_UNEXPECTED_EOF, "unexpected end of data") +#define DEFLATE_ENUM_DEF(x,y) x +enum { DEFLATE_ERRORLIST(DEFLATE_ENUM_DEF), DEFLATE_NUM_ERRORS }; +#undef DEFLATE_ENUM_DEF + +/* + * Arrays mapping the above error codes to, respectively, a text + * error string and a textual representation of the symbolic error + * code. + */ +extern const char *const deflate_error_msg[DEFLATE_NUM_ERRORS]; +extern const char *const deflate_error_sym[DEFLATE_NUM_ERRORS]; + +#endif /* DEFLATE_DEFLATE_H */ diff --git a/app/tools/halibut/error.c b/app/tools/halibut/error.c new file mode 100644 index 0000000..6b4254d --- /dev/null +++ b/app/tools/halibut/error.c @@ -0,0 +1,378 @@ +/* + * error.c: Halibut error handling + */ + +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include "halibut.h" + +/* + * Error flags + */ +#define PREFIX 0x0001 /* give `halibut:' prefix */ +#define FILEPOS 0x0002 /* give file position prefix */ + +static void do_error(int code, va_list ap) { + char error[1024]; + char c; + int i, j; + char *sp, *sp2; + wchar_t *wsp, *wsp2; + filepos fpos, fpos2, *fposp; + int flags = 0; + + switch(code) { + case err_nomemory: /* no arguments */ + sprintf(error, "out of memory"); + flags = PREFIX; + break; + case err_optnoarg: + sp = va_arg(ap, char *); + sprintf(error, "option `-%.200s' requires an argument", sp); + flags = PREFIX; + break; + case err_nosuchopt: + sp = va_arg(ap, char *); + sprintf(error, "unrecognised option `-%.200s'", sp); + flags = PREFIX; + break; + case err_cmdcharset: + sp = va_arg(ap, char *); + sprintf(error, "character set `%.200s' not recognised", sp); + flags = PREFIX; + break; + case err_futileopt: + sp = va_arg(ap, char *); + sp2 = va_arg(ap, char *); + sprintf(error, "warning: option `-%s' has no effect%s", sp, sp2); + flags = PREFIX; + break; + case err_noinput: /* no arguments */ + sprintf(error, "no input files"); + flags = PREFIX; + break; + case err_cantopen: + sp = va_arg(ap, char *); + sprintf(error, "unable to open input file `%.200s'", sp); + flags = PREFIX; + break; + case err_nodata: /* no arguments */ + sprintf(error, "no data in input files"); + flags = PREFIX; + break; + case err_brokencodepara: + fpos = *va_arg(ap, filepos *); + sprintf(error, "every line of a code paragraph should begin `\\c'"); + flags = FILEPOS; + break; + case err_kwunclosed: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected `}' after paragraph keyword"); + flags = FILEPOS; + break; + case err_kwexpected: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected a paragraph keyword"); + flags = FILEPOS; + break; + case err_kwillegal: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected no paragraph keyword"); + flags = FILEPOS; + break; + case err_kwtoomany: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected only one paragraph keyword"); + flags = FILEPOS; + break; + case err_bodyillegal: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected no text after paragraph keyword"); + flags = FILEPOS; + break; + case err_badparatype: + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + fpos = *va_arg(ap, filepos *); + sprintf(error, "command `%.200s' unrecognised at start of" + " paragraph", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_badmidcmd: + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + fpos = *va_arg(ap, filepos *); + sprintf(error, "command `%.200s' unexpected in mid-paragraph", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_unexbrace: + fpos = *va_arg(ap, filepos *); + sprintf(error, "brace character unexpected in mid-paragraph"); + flags = FILEPOS; + break; + case err_explbr: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected `{' after command"); + flags = FILEPOS; + break; + case err_commenteof: + fpos = *va_arg(ap, filepos *); + sprintf(error, "end of file unexpected inside `\\#{...}' comment"); + flags = FILEPOS; + break; + case err_kwexprbr: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected `}' after cross-reference"); + flags = FILEPOS; + break; + case err_codequote: + fpos = *va_arg(ap, filepos *); + sprintf(error, "unable to nest \\q{...} within \\c{...} or \\cw{...}"); + flags = FILEPOS; + break; + case err_missingrbrace: + fpos = *va_arg(ap, filepos *); + sprintf(error, "unclosed braces at end of paragraph"); + flags = FILEPOS; + break; + case err_missingrbrace2: + fpos = *va_arg(ap, filepos *); + sprintf(error, "unclosed braces at end of input file"); + flags = FILEPOS; + break; + case err_nestedstyles: + fpos = *va_arg(ap, filepos *); + sprintf(error, "unable to nest text styles"); + flags = FILEPOS; + break; + case err_nestedindex: + fpos = *va_arg(ap, filepos *); + sprintf(error, "unable to nest index markings"); + flags = FILEPOS; + break; + case err_indexcase: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + fpos2 = *va_arg(ap, filepos *); + wsp2 = va_arg(ap, wchar_t *); + sp2 = utoa_locale_dup(wsp2); + sprintf(error, "warning: index tag `%.200s' used with ", sp); + sprintf(error + strlen(error), "different case (`%.200s') at %s:%d", + sp2, fpos2.filename, fpos2.line); + flags = FILEPOS; + sfree(sp); + sfree(sp2); + break; + case err_nosuchkw: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "unable to resolve cross-reference to `%.200s'", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_multiBR: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "multiple `\\BR' entries given for `%.200s'", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_nosuchidxtag: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "`\\IM' on unknown index tag `%.200s'", sp); + sfree(sp); + flags = FILEPOS; + break; + case err_cantopenw: + sp = va_arg(ap, char *); + sprintf(error, "unable to open output file `%.200s'", sp); + flags = PREFIX; + break; + case err_macroexists: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "macro `%.200s' already defined", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_sectjump: + fpos = *va_arg(ap, filepos *); + sprintf(error, "expected higher heading levels before this one"); + flags = FILEPOS; + break; + case err_winhelp_ctxclash: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sp2 = va_arg(ap, char *); + sprintf(error, "Windows Help context id `%.200s' clashes with " + "previously defined `%.200s'", sp, sp2); + flags = FILEPOS; + break; + case err_multikw: + fpos = *va_arg(ap, filepos *); + fpos2 = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "paragraph keyword `%.200s' already defined at ", sp); + sprintf(error + strlen(error), "%s:%d", fpos2.filename, fpos2.line); + flags = FILEPOS; + sfree(sp); + break; + case err_misplacedlcont: + fpos = *va_arg(ap, filepos *); + sprintf(error, "\\lcont is only expected after a list item"); + flags = FILEPOS; + break; + case err_sectmarkerinblock: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "section headings are not supported within \\%.100s", + sp); + flags = FILEPOS; + break; + case err_cfginsufarg: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + i = va_arg(ap, int); + sprintf(error, "\\cfg{%s} expects at least %d parameter%s", sp, + i, (i==1)?"":"s"); + flags = FILEPOS; + break; + case err_infonodechar: + fposp = va_arg(ap, filepos *); + c = (char)va_arg(ap, int); + sprintf(error, "info output format does not support '%c' in" + " node names; removing", c); + if (fposp) { + flags = FILEPOS; + fpos = *fposp; + } + break; + case err_text_codeline: + fpos = *va_arg(ap, filepos *); + i = va_arg(ap, int); + j = va_arg(ap, int); + sprintf(error, "warning: code paragraph line is %d chars wide, wider" + " than body width %d", i, j); + flags = FILEPOS; + break; + case err_htmlver: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "unrecognised HTML version keyword `%.200s'", sp); + sfree(sp); + flags = FILEPOS; + break; + case err_charset: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "character set `%.200s' not recognised", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_nofont: + fpos = *va_arg(ap, filepos *); + wsp = va_arg(ap, wchar_t *); + sp = utoa_locale_dup(wsp); + sprintf(error, "font `%.200s' not recognised", sp); + flags = FILEPOS; + sfree(sp); + break; + case err_afmeof: + fpos = *va_arg(ap, filepos *); + sprintf(error, "AFM file ended unexpectedly"); + flags = FILEPOS; + break; + case err_afmkey: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "required AFM key '%.200s' missing", sp); + flags = FILEPOS; + break; + case err_afmvers: + fpos = *va_arg(ap, filepos *); + sprintf(error, "unsupported AFM version"); + flags = FILEPOS; + break; + case err_afmval: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + i = va_arg(ap, int); + if (i == 1) + sprintf(error, "AFM key '%.200s' requires a value", sp); + else + sprintf(error, "AFM key '%.200s' requires %d values", sp, i); + flags = FILEPOS; + break; + case err_pfeof: + fpos = *va_arg(ap, filepos *); + sprintf(error, "Type 1 font file ended unexpectedly"); + flags = FILEPOS; + break; + case err_pfhead: + fpos = *va_arg(ap, filepos *); + sprintf(error, "Type 1 font file header line invalid"); + flags = FILEPOS; + break; + case err_pfbad: + fpos = *va_arg(ap, filepos *); + sprintf(error, "Type 1 font file invalid"); + flags = FILEPOS; + break; + case err_pfnoafm: + fpos = *va_arg(ap, filepos *); + sp = va_arg(ap, char *); + sprintf(error, "no metrics available for Type 1 font '%.200s'", sp); + flags = FILEPOS; + break; + case err_chmnames: + sprintf(error, "only one of html-mshtmlhelp-chm and " + "html-mshtmlhelp-hhp found"); + flags = PREFIX; + break; + case err_whatever: + sp = va_arg(ap, char *); + vsprintf(error, sp, ap); + flags = PREFIX; + break; + } + + if (flags & PREFIX) + fputs("halibut: ", stderr); + if (flags & FILEPOS) { + fprintf(stderr, "%s:", fpos.filename); + if (fpos.line > 0) + fprintf(stderr, "%d:", fpos.line); + if (fpos.col > 0) + fprintf(stderr, "%d:", fpos.col); + fputc(' ', stderr); + } + fputs(error, stderr); + fputc('\n', stderr); +} + +void fatal(int code, ...) { + va_list ap; + va_start(ap, code); + do_error(code, ap); + va_end(ap); + exit(EXIT_FAILURE); +} + +void error(int code, ...) { + va_list ap; + va_start(ap, code); + do_error(code, ap); + va_end(ap); +} diff --git a/app/tools/halibut/halibut.h b/app/tools/halibut/halibut.h new file mode 100644 index 0000000..8fe1f08 --- /dev/null +++ b/app/tools/halibut/halibut.h @@ -0,0 +1,548 @@ +#ifndef HALIBUT_HALIBUT_H +#define HALIBUT_HALIBUT_H + +#include <stdio.h> +#include <wchar.h> +#include <time.h> +#include <string.h> + +#include "charset.h" + +#ifdef __GNUC__ +#define NORETURN __attribute__((__noreturn__)) +#else +#define NORETURN /* nothing */ +#endif + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +/* For suppressing unused-parameter warnings */ +#define IGNORE(x) ( (x) = (x) ) + +#include "tree234.h" + +/* + * Structure tags + */ +typedef struct input_Tag input; +typedef struct filepos_Tag filepos; +typedef struct paragraph_Tag paragraph; +typedef struct word_Tag word; +typedef struct keywordlist_Tag keywordlist; +typedef struct keyword_Tag keyword; +typedef struct numberstate_Tag numberstate; +typedef struct indexdata_Tag indexdata; +typedef struct indextag_Tag indextag; +typedef struct indexentry_Tag indexentry; +typedef struct macrostack_Tag macrostack; + +/* + * Data structure to hold a file name and index, a line and a + * column number, for reporting errors + */ +struct filepos_Tag { + char *filename; + int line, col; +}; + +/* + * Data structure to hold all the file names etc for input + */ +typedef struct pushback_Tag { + int chr; + filepos pos; +} pushback; +struct input_Tag { + char **filenames; /* complete list of input files */ + int nfiles; /* how many in the list */ + FILE *currfp; /* the currently open one */ + int currindex; /* which one is that in the list */ + pushback *pushback; /* pushed-back input characters */ + int npushback, pushbacksize; + filepos pos; + int reportcols; /* report column numbers in errors */ + macrostack *stack; /* macro expansions in force */ + int defcharset, charset; /* character sets for input files */ + charset_state csstate; + wchar_t wc[16]; /* wide chars from input conversion */ + int nwc, wcpos; /* size of, and position in, wc[] */ + char *pushback_chars; /* used to save input-encoding data */ +}; + +/* + * Data structure to hold the input form of the source, ie a linked + * list of paragraphs + */ +struct paragraph_Tag { + paragraph *next; + int type; + wchar_t *keyword; /* for most special paragraphs */ + char *origkeyword; /* same again in original charset */ + word *words; /* list of words in paragraph */ + int aux; /* number, in a numbered paragraph + * or subsection level + */ + word *kwtext; /* chapter/section indication */ + word *kwtext2; /* numeric-only form of kwtext */ + filepos fpos; + + paragraph *parent, *child, *sibling; /* for hierarchy navigation */ + + void *private_data; /* for temp use in backends */ +}; +enum { + para_IM, /* index merge */ + para_BR, /* bibliography rewrite */ + para_Rule, /* random horizontal rule */ + para_Chapter, + para_Appendix, + para_UnnumberedChapter, + para_Heading, + para_Subsect, + para_Normal, + para_Biblio, /* causes no output unless turned ... */ + para_BiblioCited, /* ... into this paragraph type */ + para_Bullet, + para_NumberedList, + para_DescribedThing, + para_Description, + para_Code, + para_Copyright, + para_NoCite, + para_Title, + para_VersionID, + para_Config, /* configuration directive */ + para_LcontPush, /* begin continuation of list item */ + para_LcontPop, /* end continuation of list item */ + para_QuotePush, /* begin block quote */ + para_QuotePop, /* end block quote */ + /* + * Back ends may define their own paragraph types beyond here, + * in case they need to use them internally. + */ + para_NotParaType /* placeholder value */ +}; + +/* + * Data structure to hold an individual word + */ +struct word_Tag { + word *next, *alt; + int type; + int aux; + int breaks; /* can a line break after it? */ + wchar_t *text; + filepos fpos; + + void *private_data; /* for temp use in backends */ +}; +enum { + /* ORDERING CONSTRAINT: these normal-word types ... */ + word_Normal, + word_Emph, + word_Strong, + word_Code, /* monospaced; `quoted' in text */ + word_WeakCode, /* monospaced, normal in text */ + /* ... must be in the same order as these space types ... */ + word_WhiteSpace, /* text is NULL or ignorable */ + word_EmphSpace, /* WhiteSpace when emphasised */ + word_StrongSpace, + word_CodeSpace, /* WhiteSpace when code */ + word_WkCodeSpace, /* WhiteSpace when weak code */ + /* ... and must be in the same order as these quote types ... */ + word_Quote, /* text is NULL or ignorable */ + word_EmphQuote, /* Quote when emphasised */ + word_StrongQuote, + word_CodeQuote, /* (can't happen) */ + word_WkCodeQuote, /* (can't happen) */ + /* END ORDERING CONSTRAINT */ + word_internal_endattrs, + word_UpperXref, /* \K */ + word_LowerXref, /* \k */ + word_XrefEnd, /* (invisible; no text) */ + word_IndexRef, /* (always an invisible one) */ + word_HyperLink, /* (invisible) */ + word_HyperEnd, /* (also invisible; no text) */ + word_Graphic, /* \G */ + /* + * Back ends may define their own word types beyond here, in + * case they need to use them internally. + */ + word_NotWordType /* placeholder value */ +}; +/* aux values for attributed words */ +enum { + attr_Only = 0x0000, /* a lone word with the attribute */ + attr_First = 0x0001, /* the first of a series */ + attr_Last = 0x0002, /* the last of a series */ + attr_Always = 0x0003, /* any other part of a series */ + attr_mask = 0x0003 +}; +/* aux values for quote-type words */ +enum { + quote_Open = 0x0010, + quote_Close = 0x0020, + quote_mask = 0x0030 +}; +#define isvis(x) ( ( (x) >= word_Normal && (x) <= word_LowerXref ) ) +#define isattr(x) ( ( (x) > word_Normal && (x) < word_WhiteSpace ) || \ + ( (x) > word_WhiteSpace && (x) < word_internal_endattrs ) ) + +#define ATTRSCOUNT (word_WhiteSpace - word_Normal) + +#define sameattr(x,y) (((x)%ATTRSCOUNT) == ((y)%ATTRSCOUNT)) +#define towordstyle(x) (word_Normal + ((x)%ATTRSCOUNT)) +#define tospacestyle(x) (word_WhiteSpace + ((x)%ATTRSCOUNT)) +#define toquotestyle(x) (word_Quote + ((x)%ATTRSCOUNT)) +#define removeattr(x) (word_Normal + (x)-((x)%ATTRSCOUNT)) + +/* +#define sameattr(x,y) ( (((x)-(y)) & 3) == 0 ) +#define towordstyle(x) ( word_Normal + ((x) & 3) ) +#define tospacestyle(x) ( word_WhiteSpace + ((x) & 3) ) +#define toquotestyle(x) ( word_Quote + ((x) & 3) ) +#define removeattr(x) ( word_Normal + ((x) &~ 3) ) +*/ + +#define attraux(x) ( (x) & attr_mask ) +#define quoteaux(x) ( (x) & quote_mask ) + + +/* + * error.c + */ +void fatal(int code, ...) NORETURN; +void error(int code, ...); +enum { + err_nomemory, /* out of memory */ + err_optnoarg, /* option `-%s' requires an argument */ + err_nosuchopt, /* unrecognised option `-%s' */ + err_cmdcharset, /* unrecognised charset %s (cmdline) */ + err_futileopt, /* futile option `-%s'%s */ + err_noinput, /* no input files */ + err_cantopen, /* unable to open input file `%s' */ + err_nodata, /* no data in input files */ + err_brokencodepara, /* line in codepara didn't begin `\c' */ + err_kwunclosed, /* expected `}' after keyword */ + err_kwillegal, /* paragraph type expects no keyword */ + err_kwexpected, /* paragraph type expects a keyword */ + err_kwtoomany, /* paragraph type expects only 1 */ + err_bodyillegal, /* paragraph type expects only kws! */ + err_badparatype, /* invalid command at start of para */ + err_badmidcmd, /* invalid command in mid-para */ + err_unexbrace, /* unexpected brace */ + err_explbr, /* expected `{' after command */ + err_commenteof, /* EOF inside braced comment */ + err_kwexprbr, /* expected `}' after cross-ref */ + err_codequote, /* \q within \c is not supported */ + err_missingrbrace, /* unclosed braces at end of para */ + err_missingrbrace2, /* unclosed braces at end of file */ + err_nestedstyles, /* unable to nest text styles */ + err_nestedindex, /* unable to nest `\i' thingys */ + err_indexcase, /* two \i differing only in case */ + err_nosuchkw, /* unresolved cross-reference */ + err_multiBR, /* multiple \BRs on same keyword */ + err_nosuchidxtag, /* \IM on unknown index tag (warning) */ + err_cantopenw, /* can't open output file for write */ + err_macroexists, /* this macro already exists */ + err_sectjump, /* jump a heading level, eg \C -> \S */ + err_winhelp_ctxclash, /* WinHelp context ID hash clash */ + err_multikw, /* keyword clash in sections */ + err_misplacedlcont, /* \lcont not after a list item */ + err_sectmarkerinblock, /* section marker appeared in block */ + err_cfginsufarg, /* \cfg{%s} insufficient args (<%d) */ + err_infonodechar, /* colon/comma in node name in info */ + err_text_codeline, /* \c line too long in text backend */ + err_htmlver, /* unrecognised HTML version keyword */ + err_charset, /* unrecognised character set name */ + err_nofont, /* unrecognised font name */ + err_afmeof, /* eof in AFM file */ + err_afmkey, /* missing expected keyword in AFM */ + err_afmvers, /* unsupported AFM version */ + err_afmval, /* missing value(s) for AFM key */ + err_pfeof, /* eof in Type 1 font file */ + err_pfhead, /* bad Type 1 header line */ + err_pfbad, /* otherwise invalide Type 1 font */ + err_pfnoafm, /* Type 1 font but no AFM */ + err_chmnames, /* need both or neither of hhp+chm */ + err_whatever /* random error of another type */ +}; + +/* + * malloc.c + */ +#ifdef LOGALLOC +void *smalloc(char *file, int line, int size); +void *srealloc(char *file, int line, void *p, int size); +void sfree(char *file, int line, void *p); +#define smalloc(x) smalloc(__FILE__, __LINE__, x) +#define srealloc(x, y) srealloc(__FILE__, __LINE__, x, y) +#define sfree(x) sfree(__FILE__, __LINE__, x) +#else +void *smalloc(int size); +void *srealloc(void *p, int size); +void sfree(void *p); +#endif +void free_word_list(word *w); +void free_para_list(paragraph *p); +word *dup_word_list(word *w); +char *dupstr(char *s); + +#define snew(type) ( (type *) smalloc (sizeof (type)) ) +#define snewn(number, type) ( (type *) smalloc ((number) * sizeof (type)) ) +#define sresize(array, number, type) \ + ( (type *) srealloc ((array), (number) * sizeof (type)) ) +#define lenof(array) ( sizeof(array) / sizeof(*(array)) ) + +/* + * ustring.c + */ +wchar_t *ustrdup(wchar_t const *s); +char *ustrtoa(wchar_t const *s, char *outbuf, int size, int charset); +char *ustrtoa_careful(wchar_t const *s, char *outbuf, int size, int charset); +wchar_t *ustrfroma(char const *s, wchar_t *outbuf, int size, int charset); +char *utoa_dup(wchar_t const *s, int charset); +char *utoa_dup_len(wchar_t const *s, int charset, int *len); +char *utoa_careful_dup(wchar_t const *s, int charset); +wchar_t *ufroma_dup(char const *s, int charset); +char *utoa_locale_dup(wchar_t const *s); +wchar_t *ufroma_locale_dup(char const *s); +int ustrlen(wchar_t const *s); +wchar_t *uadv(wchar_t *s); +wchar_t *ustrcpy(wchar_t *dest, wchar_t const *source); +wchar_t *ustrncpy(wchar_t *dest, wchar_t const *source, int n); +wchar_t utolower(wchar_t); +int uisalpha(wchar_t); +int ustrcmp(wchar_t *lhs, wchar_t *rhs); +int ustricmp(wchar_t const *lhs, wchar_t const *rhs); +int ustrnicmp(wchar_t const *lhs, wchar_t const *rhs, int maxlen); +int utoi(wchar_t const *); +double utof(wchar_t const *); +int utob(wchar_t const *); +int uisdigit(wchar_t); +wchar_t *ustrlow(wchar_t *s); +wchar_t *ustrftime(const wchar_t *wfmt, const struct tm *timespec); +int cvt_ok(int charset, const wchar_t *s); +int charset_from_ustr(filepos *fpos, const wchar_t *name); + +/* + * wcwidth.c + */ +int strwid(char const *s, int charset); +int ustrwid(wchar_t const *s, int charset); + +/* + * help.c + */ +void help(void); +void usage(void); +void showversion(void); +void listcharsets(void); + +/* + * licence.c + */ +void licence(void); + +/* + * version.c + */ +extern const char *const version; + +/* + * misc.c + */ +char *adv(char *s); + +typedef struct stackTag *stack; +stack stk_new(void); +void stk_free(stack); +void stk_push(stack, void *); +void *stk_pop(stack); +void *stk_top(stack); + +typedef struct tagRdstring rdstring; +struct tagRdstring { + int pos, size; + wchar_t *text; +}; +typedef struct tagRdstringc rdstringc; +struct tagRdstringc { + int pos, size; + char *text; +}; +extern const rdstring empty_rdstring; +extern const rdstringc empty_rdstringc; +void rdadd(rdstring *rs, wchar_t c); +void rdadds(rdstring *rs, wchar_t const *p); +wchar_t *rdtrim(rdstring *rs); +void rdaddc(rdstringc *rs, char c); +void rdaddsc(rdstringc *rs, char const *p); +void rdaddsn(rdstringc *rc, char const *p, int len); +char *rdtrimc(rdstringc *rs); + +int compare_wordlists(word *a, word *b); + +void mark_attr_ends(word *words); + +typedef struct tagWrappedLine wrappedline; +struct tagWrappedLine { + wrappedline *next; + word *begin, *end; /* first & last words of line */ + int nspaces; /* number of whitespaces in line */ + int shortfall; /* how much shorter than max width */ +}; +wrappedline *wrap_para(word *, int, int, int (*)(void *, word *), void *, int); +void wrap_free(wrappedline *); +void cmdline_cfg_add(paragraph *cfg, char *string); +paragraph *cmdline_cfg_new(void); +paragraph *cmdline_cfg_simple(char *string, ...); + +/* + * input.c + */ +paragraph *read_input(input *in, indexdata *idx); + +/* + * in_afm.c + */ +void read_afm_file(input *in); + +/* + * in_pf.c + */ +void read_pfa_file(input *in); +void read_pfb_file(input *in); + +/* + * keywords.c + */ +struct keywordlist_Tag { + int nkeywords; + int size; + tree234 *keys; /* sorted by `key' field */ + word **looseends; /* non-keyword list element numbers */ + int nlooseends; + int looseendssize; +}; +struct keyword_Tag { + wchar_t *key; /* the keyword itself */ + word *text; /* "Chapter 2", "Appendix Q"... */ + /* (NB: filepos are not set) */ + paragraph *para; /* the paragraph referenced */ +}; +keyword *kw_lookup(keywordlist *, wchar_t *); +keywordlist *get_keywords(paragraph *); +void free_keywords(keywordlist *); +void subst_keywords(paragraph *, keywordlist *); + +/* + * index.c + */ + +/* + * Data structure to hold both sides of the index. + */ +struct indexdata_Tag { + tree234 *tags; /* holds type `indextag' */ + tree234 *entries; /* holds type `indexentry' */ +}; + +/* + * Data structure to hold an index tag (LHS of index). + */ +struct indextag_Tag { + wchar_t *name; + word *implicit_text; + filepos implicit_fpos; + word **explicit_texts; + filepos *explicit_fpos; + int nexplicit, explicit_size; + int nrefs; + indexentry **refs; /* array of entries referenced by tag */ +}; + +/* + * Data structure to hold an index entry (RHS of index). + */ +struct indexentry_Tag { + word *text; + void *backend_data; /* private to back end */ + filepos fpos; +}; + +indexdata *make_index(void); +void cleanup_index(indexdata *); +/* index_merge takes responsibility for freeing arg 3 iff implicit; never + * takes responsibility for arg 2 */ +void index_merge(indexdata *, int is_explicit, wchar_t *, word *, filepos *); +void build_index(indexdata *); +void index_debug(indexdata *); +indextag *index_findtag(indexdata *idx, wchar_t *name); + +/* + * contents.c + */ +numberstate *number_init(void); +void number_cfg(numberstate *, paragraph *); +word *number_mktext(numberstate *, paragraph *, wchar_t *, int *, int *); +void number_free(numberstate *); + +/* + * biblio.c + */ +void gen_citations(paragraph *, keywordlist *); + +/* + * bk_text.c + */ +void text_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *text_config_filename(char *filename); + +/* + * bk_html.c + */ +void html_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *html_config_filename(char *filename); + +/* + * bk_whlp.c + */ +void whlp_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *whlp_config_filename(char *filename); + +/* + * bk_man.c + */ +void man_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *man_config_filename(char *filename); + +/* + * bk_info.c + */ +void info_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *info_config_filename(char *filename); + +/* + * bk_paper.c + */ +void *paper_pre_backend(paragraph *, keywordlist *, indexdata *); + +/* + * bk_ps.c + */ +void ps_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *ps_config_filename(char *filename); + +/* + * bk_pdf.c + */ +void pdf_backend(paragraph *, keywordlist *, indexdata *, void *); +paragraph *pdf_config_filename(char *filename); + +#endif diff --git a/app/tools/halibut/help.c b/app/tools/halibut/help.c new file mode 100644 index 0000000..8db2859 --- /dev/null +++ b/app/tools/halibut/help.c @@ -0,0 +1,56 @@ +/* + * help.c: usage instructions + */ + +#include <stdio.h> +#include "halibut.h" + +static const char *const helptext[] = { + "usage: halibut [options] files", + "options: --text[=filename] generate plain text output", + " --html[=filename] generate XHTML output", + " --winhelp[=filename] generate Windows Help output", + " --man[=filename] generate man page output", + " --info[=filename] generate GNU info output", + " --ps[=filename] generate PostScript output", + " --pdf[=filename] generate PDF output", + " -Cfoo:bar:baz append \\cfg{foo}{bar}{baz} to input", + " --input-charset=cs change default input file charset", + " --list-charsets display supported character set names", + " --precise report column numbers in error messages", + " --help display this text", + " --version display version number", + " --licence display licence text", + NULL +}; + +static const char *const usagetext[] = { + "usage: halibut [--format[=filename]] [options] file.but [file.but...]", + NULL +}; + +void help(void) { + const char *const *p; + for (p = helptext; *p; p++) + puts(*p); +} + +void usage(void) { + const char *const *p; + for (p = usagetext; *p; p++) + puts(*p); +} + +void showversion(void) { + printf("Halibut, %s\n", version); +} + +void listcharsets(void) { + int i = 0, c; + do { + c = charset_localenc_nth(i); + if (c == CS_NONE) break; + printf("%s\n", charset_to_localenc(c)); + i++; + } while (1); +} diff --git a/app/tools/halibut/in_afm.c b/app/tools/halibut/in_afm.c new file mode 100644 index 0000000..b2aacae --- /dev/null +++ b/app/tools/halibut/in_afm.c @@ -0,0 +1,276 @@ +#include <stdio.h> +#include <stdlib.h> +#include "halibut.h" +#include "paper.h" + +char *afm_read_line(input *in) { + int i, len = 256; + int c; + char *line; + + do { + i = 0; + in->pos.line++; + c = getc(in->currfp); + if (c == EOF) { + error(err_afmeof, &in->pos); + return NULL; + } + line = snewn(len, char); + while (c != EOF && c != '\r' && c != '\n') { + if (i >= len - 1) { + len += 256; + line = sresize(line, len, char); + } + line[i++] = c; + c = getc(in->currfp); + } + if (c == '\r') { + /* Cope with CRLF terminated lines */ + c = getc(in->currfp); + if (c != '\n' && c != EOF) + ungetc(c, in->currfp); + } + line[i] = 0; + } while (line[(strspn(line, " \t"))] == 0 || + strncmp(line, "Comment ", 8) == 0 || + strncmp(line, "Comment\t", 8) == 0); + + return line; +} + +static int afm_require_key(char *line, char const *expected, input *in) { + char *key = strtok(line, " \t"); + + if (strcmp(key, expected) == 0) + return TRUE; + error(err_afmkey, &in->pos, expected); + return FALSE; +} + +void read_afm_file(input *in) { + char *line, *key, *val; + font_info *fi; + size_t i; + + fi = snew(font_info); + fi->name = NULL; + fi->widths = newtree234(width_cmp); + fi->fontfile = NULL; + fi->kerns = newtree234(kern_cmp); + fi->ligs = newtree234(lig_cmp); + fi->fontbbox[0] = fi->fontbbox[1] = fi->fontbbox[2] = fi->fontbbox[3] = 0; + fi->capheight = fi->xheight = fi->ascent = fi->descent = 0; + fi->stemh = fi->stemv = fi->italicangle = 0; + for (i = 0; i < lenof(fi->bmp); i++) + fi->bmp[i] = 0xFFFF; + in->pos.line = 0; + line = afm_read_line(in); + if (!line || !afm_require_key(line, "StartFontMetrics", in)) + goto giveup; + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, in->pos, "StartFontMetrics", 1); + goto giveup; + } + if (atof(val) >= 5.0) { + error(err_afmvers, &in->pos); + goto giveup; + } + sfree(line); + for (;;) { + line = afm_read_line(in); + if (line == NULL) + goto giveup; + key = strtok(line, " \t"); + if (strcmp(key, "EndFontMetrics") == 0) { + fi->next = all_fonts; + all_fonts = fi; + fclose(in->currfp); + return; + } else if (strcmp(key, "FontName") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->name = dupstr(val); + } else if (strcmp(key, "FontBBox") == 0) { + int i; + for (i = 0; i < 3; i++) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 4); + goto giveup; + } + fi->fontbbox[i] = atof(val); + } + } else if (strcmp(key, "CapHeight") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->capheight = atof(val); + } else if (strcmp(key, "XHeight") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->xheight = atof(val); + } else if (strcmp(key, "Ascender") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->ascent = atof(val); + } else if (strcmp(key, "Descender") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->descent = atof(val); + } else if (strcmp(key, "CapHeight") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->capheight = atof(val); + } else if (strcmp(key, "StdHW") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->stemh = atof(val); + } else if (strcmp(key, "StdVW") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->stemv = atof(val); + } else if (strcmp(key, "ItalicAngle") == 0) { + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + fi->italicangle = atof(val); + } else if (strcmp(key, "StartCharMetrics") == 0) { + int nglyphs, i; + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + nglyphs = atoi(val); + sfree(line); + for (i = 0; i < nglyphs; i++) { + int width = 0; + glyph g = NOGLYPH; + + line = afm_read_line(in); + if (line == NULL) + goto giveup; + key = strtok(line, " \t"); + while (key != NULL) { + if (strcmp(key, "WX") == 0 || strcmp(key, "W0X") == 0) { + if (!(val = strtok(NULL, " \t")) || + !strcmp(val, ";")) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + width = atoi(val); + } else if (strcmp(key, "N") == 0) { + if (!(val = strtok(NULL, " \t")) || + !strcmp(val, ";")) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + g = glyph_intern(val); + } else if (strcmp(key, "L") == 0) { + glyph succ, lig; + if (!(val = strtok(NULL, " \t")) || + !strcmp(val, ";")) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + succ = glyph_intern(val); + if (!(val = strtok(NULL, " \t")) || + !strcmp(val, ";")) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + lig = glyph_intern(val); + if (g != NOGLYPH && succ != NOGLYPH && + lig != NOGLYPH) { + ligature *l = snew(ligature); + l->left = g; + l->right = succ; + l->lig = lig; + add234(fi->ligs, l); + } + } + do { + key = strtok(NULL, " \t"); + } while (key && strcmp(key, ";")); + key = strtok(NULL, " \t"); + } + sfree(line); + if (width != 0 && g != NOGLYPH) { + wchar_t ucs; + glyph_width *w = snew(glyph_width); + w->glyph = g; + w->width = width; + add234(fi->widths, w); + ucs = ps_glyph_to_unicode(g); + if (ucs < 0xFFFF) + fi->bmp[ucs] = g; + } + } + line = afm_read_line(in); + if (!line || !afm_require_key(line, "EndCharMetrics", in)) + goto giveup; + sfree(line); + + } else if (strcmp(key, "StartKernPairs") == 0 || + strcmp(key, "StartKernPairs0") == 0) { + int nkerns, i; + kern_pair *kerns; + if (!(val = strtok(NULL, " \t"))) { + error(err_afmval, &in->pos, key, 1); + goto giveup; + } + nkerns = atoi(val); + sfree(line); + kerns = snewn(nkerns, kern_pair); + for (i = 0; i < nkerns; i++) { + line = afm_read_line(in); + if (line == NULL) + goto giveup; + key = strtok(line, " \t"); + if (strcmp(key, "KPX") == 0) { + char *nl, *nr; + int l, r; + kern_pair *kp; + nl = strtok(NULL, " \t"); + nr = strtok(NULL, " \t"); + val = strtok(NULL, " \t"); + if (!val) { + error(err_afmval, &in->pos, key, 3); + goto giveup; + } + l = glyph_intern(nl); + r = glyph_intern(nr); + if (l == -1 || r == -1) continue; + kp = snew(kern_pair); + kp->left = l; + kp->right = r; + kp->kern = atoi(val); + add234(fi->kerns, kp); + } + } + line = afm_read_line(in); + if (!line || !afm_require_key(line, "EndKernPairs", in)) + goto giveup; + sfree(line); + } + } + giveup: + sfree(fi); + fclose(in->currfp); + return; +} diff --git a/app/tools/halibut/in_pf.c b/app/tools/halibut/in_pf.c new file mode 100644 index 0000000..3df6d37 --- /dev/null +++ b/app/tools/halibut/in_pf.c @@ -0,0 +1,450 @@ +/* + * PostScript Type 1 font file support for Halibut + */ +/* + * Type 1 font file formats are specified by Adobe Technical Note + * #5040: "Supporting Downloadable PostScript Language Fonts". + * Halibut supports hexadecimal format (section 3.1) and IBM PC format + * (section 3.3), commonly called PFA and PFB respectively. + */ + +#include <assert.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include "halibut.h" +#include "paper.h" + +#define PFB_ASCII 1 +#define PFB_BINARY 2 +#define PFB_EOF 3 + +typedef struct t1_font_Tag t1_font; +typedef struct t1_data_Tag t1_data; + +struct t1_font_Tag { + t1_data *data; + size_t length1; + size_t length2; + filepos pos; +}; + +struct t1_data_Tag { + char type; + size_t length; + unsigned char *data; + t1_data *next; +}; + +typedef struct pfstate_Tag { + t1_data *data; + t1_data *curblock; + size_t offset; +} pfstate; + +static void pf_identify(t1_font *tf); + +static t1_data *load_pfb_file(FILE *fp, filepos *pos) { + t1_data *head = NULL, *tail = NULL; + int c, i; + char type; + + pos->line = 0; + for (;;) { + if (fgetc(fp) != 128) abort(); + type = fgetc(fp); + if (type == PFB_EOF) return head; + if (tail) { + tail->next = snew(t1_data); + tail = tail->next; + } else { + head = snew(t1_data); + tail = head; + } + tail->type = type; + tail->length = 0; + for (i = 0; i < 4; i++) { + c = fgetc(fp); + if (c == EOF) abort(); + tail->length |= c << (8 * i); + } + tail->data = snewn(tail->length, unsigned char); + if (fread(tail->data, 1, tail->length, fp) != tail->length) abort(); + } +} + +static t1_data *load_pfa_file(FILE *fp, filepos *pos) { + t1_data *ret = snew(t1_data); + size_t off = 0, len, got; + + pos->line = 0; + ret->type = PFB_ASCII; + len = 32768; + ret->data = snewn(len, unsigned char); + for (;;) { + got = fread(ret->data + off, 1, len - off, fp); + off += got; + if (off != len) break; + len *= 2; + ret->data = sresize(ret->data, len, unsigned char); + } + ret->data = sresize(ret->data, off, unsigned char); + ret->length = off; + return ret; +} + +void read_pfa_file(input *in) { + t1_font *tf = snew(t1_font); + + tf->data = load_pfa_file(in->currfp, &in->pos); + tf->pos = in->pos; + tf->length1 = tf->length2 = 0; + fclose(in->currfp); + pf_identify(tf); +} + +void read_pfb_file(input *in) { + t1_font *tf = snew(t1_font); + + tf->data = load_pfb_file(in->currfp, &in->pos); + tf->pos = in->pos; + tf->length1 = tf->length2 = 0; + fclose(in->currfp); + pf_identify(tf); +} +static char *pf_read_token(pfstate *); + +/* + * Read a character from the initial plaintext part of a Type 1 font + */ +static int pf_getc(pfstate *pf) { + if (pf->offset == pf->curblock->length) { + if (pf->curblock->next == NULL) return EOF; + pf->curblock = pf->curblock->next; + pf->offset = 0; + } + if (pf->curblock->type != PFB_ASCII) return EOF; + return pf->curblock->data[pf->offset++]; +} + +static void pf_ungetc(int c, pfstate *pf) { + assert(pf->offset > 0); + pf->offset--; + assert(c == pf->curblock->data[pf->offset]); +} + +static void pf_rewind(pfstate *pf) { + pf->curblock = pf->data; + pf->offset = 0; +} + +static void pf_seek(pfstate *pf, size_t off) { + t1_data *td = pf->data; + + while (td->length < off) { + off -= td->length; + td = td->next; + } + pf->curblock = td; + pf->offset = off; +} + +static size_t pf_tell(pfstate *pf) { + t1_data *td = pf->data; + size_t o = 0; + + while (td != pf->curblock) { + o += td->length; + td = td->next; + } + return o + pf->offset; +} + +static void pf_identify(t1_font *tf) { + rdstringc rsc = { 0, 0, NULL }; + char *p; + size_t len; + char *fontname; + font_info *fi; + int c; + pfstate pfs, *pf = &pfs; + + pf->data = tf->data; + pf_rewind(pf); + do { + c = pf_getc(pf); + if (c == EOF) { + sfree(rsc.text); + error(err_pfeof, &tf->pos); + return; + } + rdaddc(&rsc, c); + } while (c != 012 && c != 015); + p = rsc.text; + if ((p = strchr(p, ':')) == NULL) { + sfree(rsc.text); + error(err_pfhead, &tf->pos); + return; + } + p++; + p += strspn(p, " \t"); + len = strcspn(p, " \t"); + fontname = snewn(len + 1, char); + memcpy(fontname, p, len); + fontname[len] = 0; + sfree(rsc.text); + + for (fi = all_fonts; fi; fi = fi->next) { + if (strcmp(fi->name, fontname) == 0) { + fi->fontfile = tf; + sfree(fontname); + return; + } + } + error(err_pfnoafm, &tf->pos, fontname); + sfree(fontname); +} + +/* + * PostScript white space characters; PLRM3 table 3.1 + */ +static int pf_isspace(int c) { + return c == 000 || c == 011 || c == 012 || c == 014 || c == 015 || + c == ' '; +} + +/* + * PostScript special characters; PLRM3 page 27 + */ +static int pf_isspecial(int c) { + return c == '(' || c == ')' || c == '<' || c == '>' || c == '[' || + c == ']' || c == '{' || c == '}' || c == '/' || c == '%'; +} + +static size_t pf_findtoken(t1_font *tf, size_t off, char const *needle) { + char *tok; + pfstate pfs, *pf = &pfs; + + pf->data = tf->data; + pf_seek(pf, off); + for (;;) { + tok = pf_read_token(pf); + if (tok == NULL) { + if (pf->offset == 0 && pf->curblock->type == PFB_BINARY) + pf->curblock = pf->curblock->next; + else + return (size_t)-1; + } else { + if (strcmp(tok, needle) == 0) { + sfree(tok); + return pf_tell(pf); + } + sfree(tok); + } + } +} + +static size_t pf_length1(t1_font *tf) { + size_t ret; + + ret = pf_findtoken(tf, 0, "eexec"); + if (ret == (size_t)-1) { + error(err_pfeof, &tf->pos); + return 0; + } + return ret; +} + +static size_t pf_length2(t1_font *tf) { + size_t ret; + + if (tf->length1 == 0) + tf->length1 = pf_length1(tf); + ret = pf_findtoken(tf, tf->length1, "cleartomark"); + if (ret == (size_t)-1) { + error(err_pfeof, &tf->pos); + return 0; + } + return ret - 12 - tf->length1; /* backspace over "cleartomark\n" */ +} + +static void pf_getascii(t1_font *tf, size_t off, size_t len, + char **bufp, size_t *lenp) { + t1_data *td = tf->data; + size_t blk, i; + char *p; + + while (td && off >= td->length) { + off -= td->length; + td = td->next; + } + *bufp = NULL; + *lenp = 0; + while (td && len) { + blk = len < td->length ? len : td->length; + if (td->type == PFB_ASCII) { + *bufp = sresize(*bufp, *lenp + blk, char); + memcpy(*bufp + *lenp, td->data + off, blk); + *lenp += blk; + } else { + *bufp = sresize(*bufp, *lenp + blk * 2 + blk / 39 + 3, char); + p = *bufp + *lenp; + for (i = 0; i < blk; i++) { + if (i % 39 == 0) p += sprintf(p, "\n"); + p += sprintf(p, "%02x", td->data[off + i]); + } + p += sprintf(p, "\n"); + *lenp = p - *bufp; + } + len -= blk; + td = td->next; + off = 0; + } +} + +void pf_writeps(font_info const *fi, FILE *ofp) { + char *buf; + size_t len; + + pf_getascii(fi->fontfile, 0, INT_MAX, &buf, &len); + fwrite(buf, 1, len, ofp); + sfree(buf); +} + +static int hexval(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'A' && c <= 'F') return c - 'A' + 0xA; + if (c >= 'a' && c <= 'f') return c - 'a' + 0xa; + return 0; +} + +static void pf_getbinary(t1_font *tf, size_t off, size_t len, + char **bufp, size_t *lenp) { + t1_data *td = tf->data; + size_t blk, i; + int havenybble = 0; + char *p, nybble; + + while (td && off >= td->length) { + off -= td->length; + td = td->next; + } + *bufp = NULL; + *lenp = 0; + while (td && len) { + blk = len < td->length ? len : td->length; + if (td->type == PFB_BINARY) { + *bufp = sresize(*bufp, *lenp + blk, char); + memcpy(*bufp + *lenp, td->data + off, blk); + *lenp += blk; + } else { + *bufp = sresize(*bufp, *lenp + blk / 2 + 1, char); + p = *bufp + *lenp; + for (i = 0; i < blk; i++) { + if (pf_isspace(td->data[off + i])) continue; + if (!havenybble) + nybble = hexval(td->data[off+i]); + else + *p++ = (nybble << 4) | hexval(td->data[off+i]); + havenybble = !havenybble; + } + *lenp = p - *bufp; + } + len -= blk; + td = td->next; + off = 0; + } +} + + +/* + * Return the initial, unencrypted, part of a font. + */ +void pf_part1(font_info *fi, char **bufp, size_t *lenp) { + t1_font *tf = fi->fontfile; + + if (tf->length1 == 0) + tf->length1 = pf_length1(tf); + pf_getascii(tf, 0, tf->length1, bufp, lenp); +} + +/* + * Return the middle, encrypted, part of a font. + */ +void pf_part2(font_info *fi, char **bufp, size_t *lenp) { + t1_font *tf = fi->fontfile; + + if (tf->length2 == 0) + tf->length2 = pf_length2(tf); + pf_getbinary(tf, tf->length1, tf->length2, bufp, lenp); + if (*lenp >= 256) + *lenp -= 256; +} + +static char *pf_read_litstring(pfstate *pf) { + rdstringc rsc = { 0, 0, NULL }; + int depth = 1; + int c; + + rdaddc(&rsc, '('); + do { + c = pf_getc(pf); + switch (c) { + case '(': + depth++; break; + case ')': + depth--; break; + case '\\': + rdaddc(&rsc, '\\'); + c = pf_getc(pf); + break; + } + if (c != EOF) rdaddc(&rsc, c); + } while (depth > 0 && c != EOF); + return rsc.text; +} + +static char *pf_read_hexstring(pfstate *pf) { + rdstringc rsc = { 0, 0, NULL }; + int c; + + rdaddc(&rsc, '<'); + do { + c = pf_getc(pf); + if (c != EOF) rdaddc(&rsc, c); + } while (c != '>' && c != EOF); + return rsc.text; +} + +static char *pf_read_word(pfstate *pf, int c) { + rdstringc rsc = { 0, 0, NULL }; + + rdaddc(&rsc, c); + if (c == '{' || c == '}' || c == '[' || c == ']') + return rsc.text; + for (;;) { + c = pf_getc(pf); + if (pf_isspecial(c) || pf_isspace(c) || c == EOF) break; + rdaddc(&rsc, c); + } + if (pf_isspecial(c)) pf_ungetc(c, pf); + return rsc.text; +} + +static char *pf_read_token(pfstate *pf) { + int c; + + do { + c = pf_getc(pf); + } while (pf_isspace(c)); + if (c == EOF) return NULL; + if (c == '%') { + do { + c = pf_getc(pf); + } while (c != 012 && c != 015); + return pf_read_token(pf); + } + if (c == '(') return pf_read_litstring(pf); + if (c == '<') return pf_read_hexstring(pf); + return pf_read_word(pf, c); +} diff --git a/app/tools/halibut/index.c b/app/tools/halibut/index.c new file mode 100644 index 0000000..628934e --- /dev/null +++ b/app/tools/halibut/index.c @@ -0,0 +1,270 @@ +/* + * index.c: create and collate index data structures + */ + +#include <stdio.h> +#include <stdlib.h> +#include "halibut.h" + +static int compare_tags(void *av, void *bv); +static int compare_entries(void *av, void *bv); + +indexdata *make_index(void) { + indexdata *ret = snew(indexdata); + ret->tags = newtree234(compare_tags); + ret->entries = newtree234(compare_entries); + return ret; +} + +static indextag *make_indextag(void) { + indextag *ret = snew(indextag); + ret->name = NULL; + ret->implicit_text = NULL; + ret->explicit_texts = NULL; + ret->explicit_fpos = NULL; + ret->nexplicit = ret->explicit_size = ret->nrefs = 0; + ret->refs = NULL; + return ret; +} + +static int compare_tags(void *av, void *bv) { + indextag *a = (indextag *)av, *b = (indextag *)bv; + return ustricmp(a->name, b->name); +} + +static int compare_to_find_tag(void *av, void *bv) { + wchar_t *a = (wchar_t *)av; + indextag *b = (indextag *)bv; + return ustricmp(a, b->name); +} + +static int compare_entries(void *av, void *bv) { + indexentry *a = (indexentry *)av, *b = (indexentry *)bv; + return compare_wordlists(a->text, b->text); +} + +/* + * Back-end utility: find the indextag with a given name. + */ +indextag *index_findtag(indexdata *idx, wchar_t *name) { + return find234(idx->tags, name, compare_to_find_tag); +} + +/* + * Add a \IM. `tags' points to a zero-terminated chain of + * zero-terminated strings ("first\0second\0thirdandlast\0\0"). + * `text' points to a word list. + * + * Guarantee on calling sequence: all implicit merges are given + * before the explicit ones. + */ +void index_merge(indexdata *idx, int is_explicit, wchar_t *tags, word *text, + filepos *fpos) { + indextag *t, *existing; + + /* + * For an implicit merge, we want to remove all emphasis, + * because the chances are that the user didn't really want to + * index the term as emphasised. + */ + { + word *w; + + for (w = text; w; w = w->next) { + if (w->type == word_Emph) + w->type = word_Normal; + else if (w->type == word_EmphSpace) + w->type = word_WhiteSpace; + else if (w->type == word_EmphQuote) + w->type = word_Quote; + } + } + + /* + * FIXME: want to warn on overlapping source sets. + */ + for (; *tags; tags = uadv(tags)) { + t = make_indextag(); + t->name = tags; + existing = add234(idx->tags, t); + if (existing == t) { + /* + * Duplicate this so we can free it independently. + */ + t->name = ustrdup(tags); + + /* + * Every tag has an implicit \IM. So if this tag + * doesn't exist and we're explicit, then we should + * warn (and drop it, since it won't be referenced). + */ + if (is_explicit) { + error(err_nosuchidxtag, fpos, tags); + continue; + } + + /* + * Otherwise, this is a new tag with an implicit \IM. + */ + t->implicit_text = text; + t->implicit_fpos = *fpos; + } else { + if (!is_explicit) { + /* + * An implicit \IM for a tag that's had an implicit + * \IM before. FIXME: we should check the text + * against the existing text and warn on + * differences. And check the tag for case match + * against the existing tag, likewise. + */ + + /* + * Check the tag against its previous occurrence to + * see if the cases match. + */ + if (ustrcmp(t->name, existing->name)) { + error(err_indexcase, fpos, t->name, + &existing->implicit_fpos, existing->name); + } + + sfree(t); + } else { + /* + * An explicit \IM added to a valid tag. In + * particular, this removes the implicit \IM if + * present. + */ + sfree(t); + t = existing; + if (t->implicit_text) { + free_word_list(t->implicit_text); + t->implicit_text = NULL; + } + if (t->nexplicit >= t->explicit_size) { + t->explicit_size = t->nexplicit + 8; + t->explicit_texts = sresize(t->explicit_texts, + t->explicit_size, word *); + t->explicit_fpos = sresize(t->explicit_fpos, + t->explicit_size, filepos); + } + t->explicit_texts[t->nexplicit] = text; + t->explicit_fpos[t->nexplicit] = *fpos; + t->nexplicit++; + } + } + } +} + +/* + * Build the final-form index. We now have every tag, with every + * \IM, set up in a 2-3 tree indexed by tag. We now want to collate + * the RHSes of the \IMs, and sort by final form, and decorate the + * entries in the original 2-3 tree with pointers to the RHS + * entries. + */ +void build_index(indexdata *i) { + indextag *t; + word **ta; + filepos *fa; + int ti; + int j; + + for (ti = 0; (t = (indextag *)index234(i->tags, ti)) != NULL; ti++) { + if (t->implicit_text) { + t->nrefs = 1; + ta = &t->implicit_text; + fa = &t->implicit_fpos; + } else { + t->nrefs = t->nexplicit; + ta = t->explicit_texts; + fa = t->explicit_fpos; + } + if (t->nrefs) { + t->refs = snewn(t->nrefs, indexentry *); + for (j = 0; j < t->nrefs; j++) { + indexentry *ent = snew(indexentry); + ent->text = *ta++; + ent->fpos = *fa++; + t->refs[j] = add234(i->entries, ent); + if (t->refs[j] != ent) /* duplicate */ + sfree(ent); + } + } + } +} + +void cleanup_index(indexdata *i) { + indextag *t; + indexentry *ent; + int ti; + + for (ti = 0; (t = (indextag *)index234(i->tags, ti)) != NULL; ti++) { + sfree(t->name); + free_word_list(t->implicit_text); + sfree(t->explicit_texts); + sfree(t->refs); + sfree(t); + } + freetree234(i->tags); + for (ti = 0; (ent = (indexentry *)index234(i->entries, ti))!=NULL; ti++) { + sfree(ent); + } + freetree234(i->entries); + sfree(i); +} + +static void dbg_prtwordlist(int level, word *w); +static void dbg_prtmerge(int is_explicit, wchar_t *tag, word *text); + +void index_debug(indexdata *i) { + indextag *t; + indexentry *y; + int ti; + int j; + + printf("\nINDEX TAGS\n==========\n\n"); + for (ti = 0; (t = (indextag *)index234(i->tags, ti)) != NULL; ti++) { + printf("\n"); + if (t->implicit_text) + dbg_prtmerge(0, t->name, t->implicit_text); + for (j = 0; j < t->nexplicit; j++) + dbg_prtmerge(1, t->name, t->explicit_texts[j]); + } + + printf("\nINDEX ENTRIES\n=============\n\n"); + for (ti = 0; (y = (indexentry *)index234(i->entries, ti)) != NULL; ti++) { + printf("\n"); + printf("{\n"); + dbg_prtwordlist(1, y->text); + printf("}\n"); + } +} + +static void dbg_prtmerge(int is_explicit, wchar_t *tag, word *text) { + printf("\\IM: %splicit: \"", is_explicit ? "ex" : "im"); + for (; *tag; tag++) + putchar(*tag); + printf("\" {\n"); + dbg_prtwordlist(1, text); + printf("}\n"); +} + +static void dbg_prtwordlist(int level, word *w) { + for (; w; w = w->next) { + wchar_t *wp; + printf("%*sword %d ", level*4, "", w->type); + if (w->text) { + printf("\""); + for (wp = w->text; *wp; wp++) + putchar(*wp); + printf("\""); + } else + printf("(no text)"); + if (w->alt) { + printf(" alt = {\n"); + dbg_prtwordlist(level+1, w->alt); + printf("%*s}", level*4, ""); + } + printf("\n"); + } +} diff --git a/app/tools/halibut/input.c b/app/tools/halibut/input.c new file mode 100644 index 0000000..b877508 --- /dev/null +++ b/app/tools/halibut/input.c @@ -0,0 +1,1644 @@ +/* + * input.c: read the source form + */ + +#include <stdio.h> +#include <assert.h> +#include <time.h> +#include "halibut.h" + +#define TAB_STOP 8 /* for column number tracking */ + +static void setpos(input *in, char *fname) { + in->pos.filename = fname; + in->pos.line = 1; + in->pos.col = (in->reportcols ? 1 : -1); +} + +static void unget(input *in, int c, filepos *pos) { + if (in->npushback >= in->pushbacksize) { + in->pushbacksize = in->npushback + 16; + in->pushback = sresize(in->pushback, in->pushbacksize, pushback); + } + in->pushback[in->npushback].chr = c; + in->pushback[in->npushback].pos = *pos; /* structure copy */ + in->npushback++; +} + +/* ---------------------------------------------------------------------- */ +/* + * Macro subsystem + */ +typedef struct macro_Tag macro; +struct macro_Tag { + wchar_t *name, *text; +}; +struct macrostack_Tag { + macrostack *next; + wchar_t *text; + int ptr, npushback; + filepos pos; +}; +static int macrocmp(void *av, void *bv) { + macro *a = (macro *)av, *b = (macro *)bv; + return ustrcmp(a->name, b->name); +} +static void macrodef(tree234 *macros, wchar_t *name, wchar_t *text, + filepos fpos) { + macro *m = snew(macro); + m->name = name; + m->text = text; + if (add234(macros, m) != m) { + error(err_macroexists, &fpos, name); + sfree(name); + sfree(text); + } +} +static int macrolookup(tree234 *macros, input *in, wchar_t *name, + filepos *pos) { + macro m, *gotit; + m.name = name; + gotit = find234(macros, &m, NULL); + if (gotit) { + macrostack *expansion = snew(macrostack); + expansion->next = in->stack; + expansion->text = gotit->text; + expansion->pos = *pos; /* structure copy */ + expansion->ptr = 0; + expansion->npushback = in->npushback; + in->stack = expansion; + return TRUE; + } else + return FALSE; +} +static void macrocleanup(tree234 *macros) { + int ti; + macro *m; + for (ti = 0; (m = (macro *)index234(macros, ti)) != NULL; ti++) { + sfree(m->name); + sfree(m->text); + sfree(m); + } + freetree234(macros); +} + +static void input_configure(input *in, paragraph *cfg) { + assert(cfg->type == para_Config); + + if (!ustricmp(cfg->keyword, L"input-charset")) { + in->charset = charset_from_ustr(&cfg->fpos, uadv(cfg->keyword)); + } +} + +/* + * Can return EOF + */ +static int get(input *in, filepos *pos, rdstringc *rsc) { + int pushbackpt = in->stack ? in->stack->npushback : 0; + if (in->npushback > pushbackpt) { + --in->npushback; + if (pos) + *pos = in->pushback[in->npushback].pos; /* structure copy */ + return in->pushback[in->npushback].chr; + } + else if (in->stack) { + wchar_t c = in->stack->text[in->stack->ptr]; + if (pos) + *pos = in->stack->pos; + if (in->stack->text[++in->stack->ptr] == L'\0') { + macrostack *tmp = in->stack; + in->stack = tmp->next; + sfree(tmp); + } + return c; + } + else if (in->currfp) { + + while (in->wcpos >= in->nwc) { + + int c = getc(in->currfp); + + if (c == EOF) { + fclose(in->currfp); + in->currfp = NULL; + return EOF; + } + + if (rsc) + rdaddc(rsc, c); + + /* Track line numbers, for error reporting */ + if (pos) + *pos = in->pos; + if (in->reportcols) { + switch (c) { + case '\t': + in->pos.col = 1 + (in->pos.col + TAB_STOP-1) % TAB_STOP; + break; + case '\n': + in->pos.col = 1; + in->pos.line++; + break; + default: + in->pos.col++; + break; + } + } else { + in->pos.col = -1; + if (c == '\n') + in->pos.line++; + } + + /* + * Do input character set translation, so that we return + * Unicode. + */ + { + char buf[1]; + char const *p; + int inlen; + + buf[0] = (char)c; + p = buf; + inlen = 1; + + in->nwc = charset_to_unicode(&p, &inlen, + in->wc, lenof(in->wc), + in->charset, &in->csstate, + NULL, 0); + assert(p == buf+1 && inlen == 0); + + in->wcpos = 0; + } + } + + return in->wc[in->wcpos++]; + + } else + return EOF; +} + +/* + * Lexical analysis of source files. + */ +typedef struct token_Tag token; +struct token_Tag { + int type; + int cmd, aux; + wchar_t *text; + char *origtext; + filepos pos; +}; +enum { + tok_eof, /* end of file */ + tok_eop, /* end of paragraph */ + tok_white, /* whitespace */ + tok_word, /* a word or word fragment */ + tok_cmd, /* \command */ + tok_lbrace, /* { */ + tok_rbrace /* } */ +}; + +/* Halibut command keywords. */ +enum { + c__invalid, /* invalid command */ + c__comment, /* comment command (\#) */ + c__escaped, /* escaped character */ + c__nop, /* no-op */ + c__nbsp, /* nonbreaking space */ + c_A, /* appendix heading */ + c_B, /* bibliography entry */ + c_BR, /* bibliography rewrite */ + c_C, /* chapter heading */ + c_G, /* graphic */ + c_H, /* heading */ + c_I, /* invisible index mark */ + c_IM, /* index merge/rewrite */ + c_K, /* capitalised cross-reference */ + c_S, /* aux field is 0, 1, 2, ... */ + c_U, /* unnumbered-chapter heading */ + c_W, /* Web hyperlink */ + c_b, /* bulletted list */ + c_c, /* code */ + c_cfg, /* configuration directive */ + c_copyright, /* copyright statement */ + c_cq, /* quoted code (sugar for \q{\cw{x}}) */ + c_cw, /* weak code */ + c_date, /* document processing date */ + c_dd, /* description list: description */ + c_define, /* macro definition */ + c_dt, /* description list: described thing */ + c_e, /* emphasis */ + c_f, /* strong (fat) */ + c_i, /* visible index mark */ + c_ii, /* uncapitalised visible index mark */ + c_k, /* uncapitalised cross-reference */ + c_lcont, /* continuation para(s) for list item */ + c_n, /* numbered list */ + c_nocite, /* bibliography trickery */ + c_preamble, /* (obsolete) preamble text */ + c_q, /* quote marks */ + c_quote, /* block-quoted paragraphs */ + c_rule, /* horizontal rule */ + c_title, /* document title */ + c_u, /* aux field is char code */ + c_versionid /* document RCS id */ +}; + +/* Perhaps whitespace should be defined in a more Unicode-friendly way? */ +#define iswhite(c) ( (c)==32 || (c)==9 || (c)==13 || (c)==10 ) +#define isnl(c) ( (c)==10 ) +#define isdec(c) ( ((c)>='0'&&(c)<='9') ) +#define fromdec(c) ( (c)-'0' ) +#define ishex(c) ( ((c)>='0'&&(c)<='9') || ((c)>='A'&&(c)<='F') || ((c)>='a'&&(c)<='f')) +#define fromhex(c) ( (c)<='9' ? (c)-'0' : ((c)&0xDF) - ('A'-10) ) +#define iscmd(c) ( ((c)>='0'&&(c)<='9') || ((c)>='A'&&(c)<='Z') || ((c)>='a'&&(c)<='z')) + +/* + * Keyword comparison function. Like strcmp, but between a wchar_t * + * and a char *. + */ +static int kwcmp(wchar_t const *p, char const *q) { + int i; + do { + i = *p - *q; + } while (*p++ && *q++ && !i); + return i; +} + +/* + * Match a keyword. + */ +static void match_kw(token *tok) { + /* + * FIXME. The ids are explicit in here so as to allow long-name + * equivalents to the various very short keywords. + */ + static const struct { char const *name; int id; } keywords[] = { + {"#", c__comment}, /* comment command (\#) */ + {"-", c__escaped}, /* nonbreaking hyphen */ + {".", c__nop}, /* no-op */ + {"A", c_A}, /* appendix heading */ + {"B", c_B}, /* bibliography entry */ + {"BR", c_BR}, /* bibliography rewrite */ + {"C", c_C}, /* chapter heading */ + {"G", c_G}, /* graphic */ + {"H", c_H}, /* heading */ + {"I", c_I}, /* invisible index mark */ + {"IM", c_IM}, /* index merge/rewrite */ + {"K", c_K}, /* capitalised cross-reference */ + {"U", c_U}, /* unnumbered-chapter heading */ + {"W", c_W}, /* Web hyperlink */ + {"\\", c__escaped}, /* escaped backslash (\\) */ + {"_", c__nbsp}, /* nonbreaking space (\_) */ + {"b", c_b}, /* bulletted list */ + {"c", c_c}, /* code */ + {"cfg", c_cfg}, /* configuration directive */ + {"copyright", c_copyright}, /* copyright statement */ + {"cq", c_cq}, /* quoted code (sugar for \q{\cw{x}}) */ + {"cw", c_cw}, /* weak code */ + {"date", c_date}, /* document processing date */ + {"dd", c_dd}, /* description list: description */ + {"define", c_define}, /* macro definition */ + {"dt", c_dt}, /* description list: described thing */ + {"e", c_e}, /* emphasis */ + {"f", c_f}, /* strong (fat) */ + {"i", c_i}, /* visible index mark */ + {"ii", c_ii}, /* uncapitalised visible index mark */ + {"k", c_k}, /* uncapitalised cross-reference */ + {"lcont", c_lcont}, /* continuation para(s) for list item */ + {"n", c_n}, /* numbered list */ + {"nocite", c_nocite}, /* bibliography trickery */ + {"preamble", c_preamble}, /* (obsolete) preamble text */ + {"q", c_q}, /* quote marks */ + {"quote", c_quote}, /* block-quoted paragraphs */ + {"rule", c_rule}, /* horizontal rule */ + {"title", c_title}, /* document title */ + {"versionid", c_versionid}, /* document RCS id */ + {"{", c__escaped}, /* escaped lbrace (\{) */ + {"}", c__escaped}, /* escaped rbrace (\}) */ + }; + int i, j, k, c; + + /* + * Special cases: \S{0,1,2,...} and \uABCD. If the syntax + * doesn't match correctly, we just fall through to the + * binary-search phase. + */ + if (tok->text[0] == 'S') { + /* We expect numeric characters thereafter. */ + wchar_t *p = tok->text+1; + int n; + if (!*p) + n = 1; + else { + n = 0; + while (*p && isdec(*p)) { + n = 10 * n + fromdec(*p); + p++; + } + } + if (!*p) { + tok->cmd = c_S; + tok->aux = n; + return; + } + } else if (tok->text[0] == 'u') { + /* We expect hex characters thereafter. */ + wchar_t *p = tok->text+1; + int n = 0; + while (*p && ishex(*p)) { + n = 16 * n + fromhex(*p); + p++; + } + if (!*p) { + tok->cmd = c_u; + tok->aux = n; + return; + } + } + + i = -1; + j = sizeof(keywords)/sizeof(*keywords); + while (j-i > 1) { + k = (i+j)/2; + c = kwcmp(tok->text, keywords[k].name); + if (c < 0) + j = k; + else if (c > 0) + i = k; + else /* c == 0 */ { + tok->cmd = keywords[k].id; + return; + } + } + + tok->cmd = c__invalid; +} + + +/* + * Read a token from the input file, in the normal way (`normal' in + * the sense that code paragraphs work a different way). + */ +token get_token(input *in) { + int c; + int nls; + int prevpos; + token ret; + rdstring rs = { 0, 0, NULL }; + rdstringc rsc = { 0, 0, NULL }; + filepos cpos; + + ret.text = NULL; /* default */ + ret.origtext = NULL; /* default */ + if (in->pushback_chars) { + rdaddsc(&rsc, in->pushback_chars); + sfree(in->pushback_chars); + in->pushback_chars = NULL; + } + c = get(in, &cpos, &rsc); + ret.pos = cpos; + if (iswhite(c)) { /* tok_white or tok_eop */ + nls = 0; + prevpos = 0; + do { + if (isnl(c)) + nls++; + prevpos = rsc.pos; + } while ((c = get(in, &cpos, &rsc)) != EOF && iswhite(c)); + if (c == EOF) { + ret.type = tok_eof; + sfree(rsc.text); + return ret; + } + if (rsc.text) { + in->pushback_chars = dupstr(rsc.text + prevpos); + sfree(rsc.text); + } + unget(in, c, &cpos); + ret.type = (nls > 1 ? tok_eop : tok_white); + return ret; + } else if (c == EOF) { /* tok_eof */ + ret.type = tok_eof; + sfree(rsc.text); + return ret; + } else if (c == '\\') { /* tok_cmd */ + rsc.pos = prevpos = 0; + c = get(in, &cpos, &rsc); + if (c == '-' || c == '\\' || c == '_' || + c == '#' || c == '{' || c == '}' || c == '.') { + /* single-char command */ + rdadd(&rs, c); + prevpos = rsc.pos; + } else if (c == 'u') { + int len = 0; + do { + rdadd(&rs, c); + len++; + prevpos = rsc.pos; + c = get(in, &cpos, &rsc); + } while (ishex(c) && len < 5); + unget(in, c, &cpos); + } else if (iscmd(c)) { + do { + rdadd(&rs, c); + prevpos = rsc.pos; + c = get(in, &cpos, &rsc); + } while (iscmd(c)); + unget(in, c, &cpos); + } + /* + * Now match the command against the list of available + * ones. + */ + ret.type = tok_cmd; + ret.text = ustrdup(rs.text); + if (rsc.text) { + in->pushback_chars = dupstr(rsc.text + prevpos); + rsc.text[prevpos] = '\0'; + ret.origtext = dupstr(rsc.text); + } else { + ret.origtext = dupstr(""); + } + match_kw(&ret); + sfree(rs.text); + sfree(rsc.text); + return ret; + } else if (c == '{') { /* tok_lbrace */ + ret.type = tok_lbrace; + sfree(rsc.text); + return ret; + } else if (c == '}') { /* tok_rbrace */ + ret.type = tok_rbrace; + sfree(rsc.text); + return ret; + } else { /* tok_word */ + /* + * Read a word: the longest possible contiguous sequence of + * things other than whitespace, backslash, braces and + * hyphen. A hyphen terminates the word but is returned as + * part of it; everything else is pushed back for the next + * token. The `aux' field contains TRUE if the word ends in + * a hyphen. + */ + ret.aux = FALSE; /* assumed for now */ + prevpos = 0; + while (1) { + if (iswhite(c) || c=='{' || c=='}' || c=='\\' || c==EOF) { + /* Put back the character that caused termination */ + unget(in, c, &cpos); + break; + } else { + rdadd(&rs, c); + if (c == '-') { + prevpos = rsc.pos; + ret.aux = TRUE; + break; /* hyphen terminates word */ + } + } + prevpos = rsc.pos; + c = get(in, &cpos, &rsc); + } + ret.type = tok_word; + ret.text = ustrdup(rs.text); + if (rsc.text) { + in->pushback_chars = dupstr(rsc.text + prevpos); + rsc.text[prevpos] = '\0'; + ret.origtext = dupstr(rsc.text); + } else { + ret.origtext = dupstr(""); + } + sfree(rs.text); + sfree(rsc.text); + return ret; + } +} + +/* + * Determine whether the next input character is an open brace (for + * telling code paragraphs from paragraphs which merely start with + * code). + */ +int isbrace(input *in) { + int c; + filepos cpos; + + c = get(in, &cpos, NULL); + unget(in, c, &cpos); + return (c == '{'); +} + +/* + * Read the rest of a line that starts `\c'. Including nothing at + * all (tok_word with empty text). + */ +token get_codepar_token(input *in) { + int c; + token ret; + rdstring rs = { 0, 0, NULL }; + filepos cpos; + + ret.type = tok_word; + ret.origtext = NULL; + c = get(in, &cpos, NULL); /* expect (and discard) one space */ + ret.pos = cpos; + if (c == ' ') { + c = get(in, &cpos, NULL); + ret.pos = cpos; + } + while (!isnl(c) && c != EOF) { + int c2 = c; + c = get(in, &cpos, NULL); + /* Discard \r just before \n. */ + if (c2 != 13 || !isnl(c)) + rdadd(&rs, c2); + } + unget(in, c, &cpos); + ret.text = ustrdup(rs.text); + sfree(rs.text); + return ret; +} + +/* + * Adds a new word to a linked list + */ +static word *addword(word newword, word ***hptrptr) { + word *mnewword; + if (!hptrptr) + return NULL; + mnewword = snew(word); + *mnewword = newword; /* structure copy */ + mnewword->next = NULL; + **hptrptr = mnewword; + *hptrptr = &mnewword->next; + return mnewword; +} + +/* + * Adds a new paragraph to a linked list + */ +static paragraph *addpara(paragraph newpara, paragraph ***hptrptr) { + paragraph *mnewpara = snew(paragraph); + *mnewpara = newpara; /* structure copy */ + mnewpara->next = NULL; + **hptrptr = mnewpara; + *hptrptr = &mnewpara->next; + return mnewpara; +} + +/* + * Destructor before token is reassigned; should catch most memory + * leaks + */ +#define dtor(t) ( sfree(t.text), sfree(t.origtext) ) + +/* + * Reads a single file (ie until get() returns EOF) + */ +static void read_file(paragraph ***ret, input *in, indexdata *idx, + tree234 *macros) { + token t; + paragraph par; + word wd, **whptr, **idximplicit; + wchar_t utext[2], *wdtext; + int style, spcstyle; + int already; + int iswhite, seenwhite; + int type; + int prev_para_type; + struct stack_item { + enum { + stack_nop = 0, /* do nothing (for error recovery) */ + stack_ualt = 1, /* \u alternative */ + stack_style = 2, /* \e, \c, \cw */ + stack_idx = 4, /* \I, \i, \ii */ + stack_hyper = 8, /* \W */ + stack_quote = 16, /* \q */ + stack_alttext = 32 /* \G */ + } type; + word **whptr; /* to restore from \u alternatives */ + word **idximplicit; /* to restore from \u alternatives */ + filepos fpos; + int in_code; + } *sitem; + stack parsestk; + struct crossparaitem { + int type; /* currently c_lcont, c_quote or -1 */ + int seen_lcont, seen_quote; + }; + stack crossparastk; + word *indexword, *uword, *iword; + word *idxwordlist; + rdstring indexstr; + int index_downcase, index_visible, indexing; + const rdstring nullrs = { 0, 0, NULL }; + wchar_t uchr; + + t.text = NULL; + t.origtext = NULL; + already = FALSE; + + crossparastk = stk_new(); + + /* + * Loop on each paragraph. + */ + while (1) { + int start_cmd = c__invalid; + par.words = NULL; + par.keyword = NULL; + par.origkeyword = NULL; + whptr = &par.words; + + /* + * Get a token. + */ + do { + if (!already) { + dtor(t), t = get_token(in); + } + already = FALSE; + } while (t.type == tok_eop); + if (t.type == tok_eof) + break; + + /* + * Parse code paragraphs separately. + */ + if (t.type == tok_cmd && t.cmd == c_c && !isbrace(in)) { + int wtype = word_WeakCode; + + par.type = para_Code; + par.fpos = t.pos; + while (1) { + dtor(t), t = get_codepar_token(in); + wd.type = wtype; + wd.breaks = FALSE; /* shouldn't need this... */ + wd.text = ustrdup(t.text); + wd.alt = NULL; + wd.fpos = t.pos; + addword(wd, &whptr); + dtor(t), t = get_token(in); + if (t.type == tok_white) { + /* + * The newline after a code-paragraph line + */ + dtor(t), t = get_token(in); + } + if (t.type == tok_eop || t.type == tok_eof || + t.type == tok_rbrace) { /* might be } terminating \lcont */ + if (t.type == tok_rbrace) + already = TRUE; + break; + } else if (t.type == tok_cmd && t.cmd == c_c) { + wtype = word_WeakCode; + } else if (t.type == tok_cmd && t.cmd == c_e && + wtype == word_WeakCode) { + wtype = word_Emph; + } else if (t.type == tok_cmd && t.cmd == c_f && + wtype == word_WeakCode) { + wtype = word_Strong; + } else { + error(err_brokencodepara, &t.pos); + prev_para_type = par.type; + addpara(par, ret); + while (t.type != tok_eop) /* error recovery: */ + dtor(t), t = get_token(in); /* eat rest of paragraph */ + goto codeparabroken; /* ick, but such is life */ + } + } + prev_para_type = par.type; + addpara(par, ret); + codeparabroken: + continue; + } + + /* + * Spot the special commands that define a grouping of more + * than one paragraph, and also the closing braces that + * finish them. + */ + if (t.type == tok_cmd && + (t.cmd == c_lcont || t.cmd == c_quote)) { + struct crossparaitem *sitem, *stop; + int cmd = t.cmd; + + /* + * Expect, and swallow, an open brace. + */ + dtor(t), t = get_token(in); + if (t.type != tok_lbrace) { + error(err_explbr, &t.pos); + continue; + } + + /* + * Also expect, and swallow, any whitespace after that + * (a newline before a code paragraph wouldn't be + * surprising). + */ + do { + dtor(t), t = get_token(in); + } while (t.type == tok_white); + already = TRUE; + + if (cmd == c_lcont) { + /* + * \lcont causes a continuation of a list item into + * multiple paragraphs (which may in turn contain + * nested lists, code paras etc). Hence, the previous + * paragraph must be of a list type. + */ + sitem = snew(struct crossparaitem); + stop = (struct crossparaitem *)stk_top(crossparastk); + if (stop) + *sitem = *stop; + else + sitem->seen_quote = sitem->seen_lcont = 0; + + if (prev_para_type == para_Bullet || + prev_para_type == para_NumberedList || + prev_para_type == para_Description) { + sitem->type = c_lcont; + sitem->seen_lcont = 1; + par.type = para_LcontPush; + prev_para_type = par.type; + addpara(par, ret); + } else { + /* + * Push a null item on the cross-para stack so that + * when we see the corresponding closing brace we + * don't give a cascade error. + */ + sitem->type = -1; + error(err_misplacedlcont, &t.pos); + } + } else { + /* + * \quote causes a group of paragraphs to be + * block-quoted (typically they will be indented a + * bit). + */ + sitem = snew(struct crossparaitem); + stop = (struct crossparaitem *)stk_top(crossparastk); + if (stop) + *sitem = *stop; + else + sitem->seen_quote = sitem->seen_lcont = 0; + sitem->type = c_quote; + sitem->seen_quote = 1; + par.type = para_QuotePush; + prev_para_type = par.type; + addpara(par, ret); + } + stk_push(crossparastk, sitem); + continue; + } else if (t.type == tok_rbrace) { + struct crossparaitem *sitem = stk_pop(crossparastk); + if (!sitem) + error(err_unexbrace, &t.pos); + else { + switch (sitem->type) { + case c_lcont: + par.type = para_LcontPop; + prev_para_type = par.type; + addpara(par, ret); + break; + case c_quote: + par.type = para_QuotePop; + prev_para_type = par.type; + addpara(par, ret); + break; + } + sfree(sitem); + } + continue; + } + + while (t.type == tok_cmd && + macrolookup(macros, in, t.text, &t.pos)) { + dtor(t), t = get_token(in); + } + + /* + * This token begins a paragraph. See if it's one of the + * special commands that define a paragraph type. + * + * (note that \# is special in a way, and \nocite takes no + * text) + */ + par.type = para_Normal; + if (t.type == tok_cmd) { + int needkw; + int is_macro = FALSE; + + par.fpos = t.pos; + switch (t.cmd) { + default: + needkw = -1; + break; + case c__invalid: + error(err_badparatype, t.text, &t.pos); + needkw = 4; + break; + case c__comment: + if (isbrace(in)) + break; /* `\#{': isn't a comment para */ + do { + dtor(t), t = get_token(in); + } while (t.type != tok_eop && t.type != tok_eof); + continue; /* next paragraph */ + /* + * `needkw' values: + * + * 1 -- exactly one keyword + * 2 -- at least one keyword + * 4 -- any number of keywords including zero + * 8 -- at least one keyword and then nothing else + * 16 -- nothing at all! no keywords, no body + * 32 -- no keywords at all + */ + case c_A: needkw = 2; par.type = para_Appendix; break; + case c_B: needkw = 2; par.type = para_Biblio; break; + case c_BR: needkw = 1; par.type = para_BR; + start_cmd = c_BR; break; + case c_C: needkw = 2; par.type = para_Chapter; break; + case c_H: needkw = 2; par.type = para_Heading; + par.aux = 0; + break; + case c_IM: needkw = 2; par.type = para_IM; + start_cmd = c_IM; break; + case c_S: needkw = 2; par.type = para_Subsect; + par.aux = t.aux; break; + case c_U: needkw = 32; par.type = para_UnnumberedChapter; break; + /* For \b and \n the keyword is optional */ + case c_b: needkw = 4; par.type = para_Bullet; break; + case c_dt: needkw = 4; par.type = para_DescribedThing; break; + case c_dd: needkw = 4; par.type = para_Description; break; + case c_n: needkw = 4; par.type = para_NumberedList; break; + case c_cfg: needkw = 8; par.type = para_Config; + start_cmd = c_cfg; break; + case c_copyright: needkw = 32; par.type = para_Copyright; break; + case c_define: is_macro = TRUE; needkw = 1; break; + /* For \nocite the keyword is _everything_ */ + case c_nocite: needkw = 8; par.type = para_NoCite; break; + case c_preamble: needkw = 32; par.type = para_Normal; break; + case c_rule: needkw = 16; par.type = para_Rule; break; + case c_title: needkw = 32; par.type = para_Title; break; + case c_versionid: needkw = 32; par.type = para_VersionID; break; + } + + if (par.type == para_Chapter || + par.type == para_Heading || + par.type == para_Subsect || + par.type == para_Appendix || + par.type == para_UnnumberedChapter) { + struct crossparaitem *sitem = stk_top(crossparastk); + if (sitem && (sitem->seen_lcont || sitem->seen_quote)) { + error(err_sectmarkerinblock, + &t.pos, + (sitem->seen_lcont ? "lcont" : "quote")); + } + } + + if (needkw > 0) { + rdstring rs = { 0, 0, NULL }; + rdstringc rsc = { 0, 0, NULL }; + int nkeys = 0; + filepos fp; + + /* Get keywords. */ + dtor(t), t = get_token(in); + fp = t.pos; + while (t.type == tok_lbrace || + (t.type == tok_white && (needkw & 24))) { + /* + * In paragraph types which can't accept any + * body text (such as \cfg), we are lenient + * about whitespace between keywords. This is + * important for \cfg in particular since it + * can often have many keywords which are long + * pieces of text, so it's useful to permit the + * user to wrap the line between them. + */ + if (t.type == tok_white) { + dtor(t), t = get_token(in); /* eat the space */ + continue; + } + /* This is a keyword. */ + nkeys++; + /* FIXME: there will be bugs if anyone specifies an + * empty keyword (\foo{}), so trap this case. */ + while (dtor(t), t = get_token(in), + t.type == tok_word || + t.type == tok_white || + (t.type == tok_cmd && t.cmd == c__nbsp) || + (t.type == tok_cmd && t.cmd == c__escaped) || + (t.type == tok_cmd && t.cmd == c_u)) { + if (t.type == tok_white || + (t.type == tok_cmd && t.cmd == c__nbsp)) { + rdadd(&rs, ' '); + rdaddc(&rsc, ' '); + } else if (t.type == tok_cmd && t.cmd == c_u) { + rdadd(&rs, t.aux); + rdaddc(&rsc, '\\'); + rdaddsc(&rsc, t.origtext); + } else { + rdadds(&rs, t.text); + rdaddsc(&rsc, t.origtext); + } + } + if (t.type != tok_rbrace) { + error(err_kwunclosed, &t.pos); + continue; + } + rdadd(&rs, 0); /* add string terminator */ + rdaddc(&rsc, 0); /* add string terminator */ + dtor(t), t = get_token(in); /* eat right brace */ + } + + rdadd(&rs, 0); /* add string terminator */ + rdaddc(&rsc, 0); /* add string terminator */ + + /* See whether we have the right number of keywords. */ + if ((needkw & 48) && nkeys > 0) + error(err_kwillegal, &fp); + if ((needkw & 11) && nkeys == 0) + error(err_kwexpected, &fp); + if ((needkw & 5) && nkeys > 1) + error(err_kwtoomany, &fp); + + if (is_macro) { + /* + * Macro definition. Get the rest of the line + * as a code-paragraph token, repeatedly until + * there's nothing more left of it. Separate + * with newlines. + */ + rdstring macrotext = { 0, 0, NULL }; + while (1) { + dtor(t), t = get_codepar_token(in); + if (macrotext.pos > 0) + rdadd(¯otext, L'\n'); + rdadds(¯otext, t.text); + dtor(t), t = get_token(in); + if (t.type == tok_eop) break; + } + macrodef(macros, rs.text, macrotext.text, fp); + continue; /* next paragraph */ + } + + par.keyword = rdtrim(&rs); + par.origkeyword = rdtrimc(&rsc); + + /* Move to EOP in case of needkw==8 or 16 (no body) */ + if (needkw & 24) { + /* We allow whitespace even when we expect no para body */ + while (t.type == tok_white) + dtor(t), t = get_token(in); + if (t.type != tok_eop && t.type != tok_eof && + (start_cmd == c__invalid || + t.type != tok_cmd || t.cmd != start_cmd)) { + error(err_bodyillegal, &t.pos); + /* Error recovery: eat the rest of the paragraph */ + while (t.type != tok_eop && t.type != tok_eof && + (start_cmd == c__invalid || + t.type != tok_cmd || t.cmd != start_cmd)) + dtor(t), t = get_token(in); + } + if (t.type == tok_cmd) + already = TRUE;/* inhibit get_token at top of loop */ + prev_para_type = par.type; + addpara(par, ret); + + if (par.type == para_Config) { + input_configure(in, &par); + } + continue; /* next paragraph */ + } + } + } + + /* + * Now read the actual paragraph, word by word, adding to + * the paragraph list. + * + * Mid-paragraph commands: + * + * \K \k + * \c \cw \cq + * \e + * \i \ii + * \I + * \q + * \u + * \W + * \date + * \\ \{ \} + */ + parsestk = stk_new(); + style = word_Normal; + spcstyle = word_WhiteSpace; + indexing = FALSE; + seenwhite = TRUE; + while (t.type != tok_eop && t.type != tok_eof) { + iswhite = FALSE; + already = FALSE; + + /* Handle implicit paragraph breaks after \IM, \BR etc */ + if (start_cmd != c__invalid && + t.type == tok_cmd && t.cmd == start_cmd) { + already = TRUE; /* inhibit get_token at top of loop */ + break; + } + + if (t.type == tok_cmd && t.cmd == c__nop) { + dtor(t), t = get_token(in); + continue; /* do nothing! */ + } + + if (t.type == tok_cmd && t.cmd == c__escaped) { + t.type = tok_word; /* nice and simple */ + t.aux = 0; /* even if `\-' - nonbreaking! */ + } + if (t.type == tok_cmd && t.cmd == c__nbsp) { + t.type = tok_word; /* nice and simple */ + sfree(t.text); + t.text = ustrdup(L" "); /* text is ` ' not `_' */ + t.aux = 0; /* (nonbreaking) */ + } + switch (t.type) { + case tok_white: + if (whptr == &par.words) + break; /* strip whitespace at start of para */ + wd.text = NULL; + wd.type = spcstyle; + wd.alt = NULL; + wd.aux = 0; + wd.fpos = t.pos; + wd.breaks = FALSE; + + /* + * Inhibit use of whitespace if it's (probably the + * newline) before a repeat \IM / \BR type + * directive. + */ + if (start_cmd != c__invalid) { + dtor(t), t = get_token(in); + already = TRUE; + if (t.type == tok_cmd && t.cmd == start_cmd) + break; + } + + if (indexing) + rdadd(&indexstr, ' '); + if (!indexing || index_visible) + addword(wd, &whptr); + if (indexing) + addword(wd, &idximplicit); + iswhite = TRUE; + break; + case tok_word: + if (indexing) + rdadds(&indexstr, t.text); + wd.type = style; + wd.alt = NULL; + wd.aux = 0; + wd.fpos = t.pos; + wd.breaks = t.aux; + if (!indexing || index_visible) { + wd.text = ustrdup(t.text); + addword(wd, &whptr); + } + if (indexing) { + wd.text = ustrdup(t.text); + addword(wd, &idximplicit); + } + break; + case tok_lbrace: + error(err_unexbrace, &t.pos); + /* Error recovery: push nop */ + sitem = snew(struct stack_item); + sitem->type = stack_nop; + sitem->fpos = t.pos; + stk_push(parsestk, sitem); + break; + case tok_rbrace: + sitem = stk_pop(parsestk); + if (!sitem) { + /* + * This closing brace could have been an + * indication that the cross-paragraph stack + * wants popping. Accordingly, we treat it here + * as an indication that the paragraph is over. + */ + already = TRUE; + goto finished_para; + } else { + if (sitem->type & stack_ualt) { + whptr = sitem->whptr; + idximplicit = sitem->idximplicit; + } + if (sitem->type & stack_style) { + style = word_Normal; + spcstyle = word_WhiteSpace; + } + if (sitem->type & stack_idx) { + indexword->text = ustrdup(indexstr.text); + if (index_downcase) { + word *w; + + ustrlow(indexword->text); + ustrlow(indexstr.text); + + for (w = idxwordlist; w; w = w->next) + if (w->text) + ustrlow(w->text); + } + indexing = FALSE; + rdadd(&indexstr, L'\0'); + index_merge(idx, FALSE, indexstr.text, + idxwordlist, &sitem->fpos); + sfree(indexstr.text); + } + if (sitem->type & stack_hyper) { + wd.text = NULL; + wd.type = word_HyperEnd; + wd.alt = NULL; + wd.aux = 0; + wd.fpos = t.pos; + wd.breaks = FALSE; + if (!indexing || index_visible) + addword(wd, &whptr); + if (indexing) + addword(wd, &idximplicit); + } + if (sitem->type & stack_quote) { + wd.text = NULL; + wd.type = toquotestyle(style); + wd.alt = NULL; + wd.aux = quote_Close; + wd.fpos = t.pos; + wd.breaks = FALSE; + if (!indexing || index_visible) + addword(wd, &whptr); + if (indexing) { + rdadd(&indexstr, L'"'); + addword(wd, &idximplicit); + } + } + } + sfree(sitem); + break; + case tok_cmd: + switch (t.cmd) { + case c__comment: + /* + * In-paragraph comment: \#{ balanced braces } + * + * Anything goes here; even tok_eop. We should + * eat whitespace after the close brace _if_ + * there was whitespace before the \#. + */ + dtor(t), t = get_token(in); + if (t.type != tok_lbrace) { + error(err_explbr, &t.pos); + } else { + int braces = 1; + while (braces > 0) { + dtor(t), t = get_token(in); + if (t.type == tok_lbrace) + braces++; + else if (t.type == tok_rbrace) + braces--; + else if (t.type == tok_eof) { + error(err_commenteof, &t.pos); + break; + } + } + } + if (seenwhite) { + already = TRUE; + dtor(t), t = get_token(in); + if (t.type == tok_white) { + iswhite = TRUE; + already = FALSE; + } + } + break; + case c_q: + case c_cq: + type = t.cmd; + dtor(t), t = get_token(in); + if (t.type != tok_lbrace) { + error(err_explbr, &t.pos); + } else { + /* + * Enforce that \q may not be used anywhere + * within \c. (It shouldn't be necessary + * since the whole point of \c should be + * that the user wants to exercise exact + * control over the glyphs used, and + * forbidding it has the useful effect of + * relieving some backends of having to + * make difficult decisions.) + */ + int stype; + + if (style != word_Code && style != word_WeakCode) { + wd.text = NULL; + wd.type = toquotestyle(style); + wd.alt = NULL; + wd.aux = quote_Open; + wd.fpos = t.pos; + wd.breaks = FALSE; + if (!indexing || index_visible) + addword(wd, &whptr); + if (indexing) { + rdadd(&indexstr, L'"'); + addword(wd, &idximplicit); + } + stype = stack_quote; + } else { + error(err_codequote, &t.pos); + stype = stack_nop; + } + sitem = snew(struct stack_item); + sitem->fpos = t.pos; + sitem->type = stype; + if (type == c_cq) { + if (style != word_Normal) { + error(err_nestedstyles, &t.pos); + } else { + style = word_WeakCode; + spcstyle = tospacestyle(style); + sitem->type |= stack_style; + } + } + stk_push(parsestk, sitem); + } + break; + case c_K: + case c_k: + case c_W: + case c_G: + case c_date: + /* + * Keyword, hyperlink, or \date. We expect a + * left brace, some text, and then a right + * brace. No nesting; no arguments. + */ + wd.fpos = t.pos; + wd.breaks = FALSE; + if (t.cmd == c_K) + wd.type = word_UpperXref; + else if (t.cmd == c_k) + wd.type = word_LowerXref; + else if (t.cmd == c_W) + wd.type = word_HyperLink; + else if (t.cmd == c_G) + wd.type = word_Graphic; + else + wd.type = word_Normal; + dtor(t), t = get_token(in); + if (t.type != tok_lbrace) { + if (wd.type == word_Normal) { + time_t thetime = time(NULL); + struct tm *broken = localtime(&thetime); + already = TRUE; + wdtext = ustrftime(NULL, broken); + wd.type = style; + } else { + error(err_explbr, &t.pos); + wdtext = NULL; + } + } else { + rdstring rs = { 0, 0, NULL }; + while (dtor(t), t = get_token(in), + t.type == tok_word || t.type == tok_white) { + if (t.type == tok_white) + rdadd(&rs, ' '); + else + rdadds(&rs, t.text); + } + if (wd.type == word_Normal) { + time_t thetime = time(NULL); + struct tm *broken = localtime(&thetime); + wdtext = ustrftime(rs.text, broken); + wd.type = style; + } else { + wdtext = ustrdup(rs.text); + } + sfree(rs.text); + if (t.type != tok_rbrace) { + error(err_kwexprbr, &t.pos); + } + } + wd.alt = NULL; + wd.aux = 0; + if (!indexing || index_visible) { + wd.text = ustrdup(wdtext); + addword(wd, &whptr); + } + if (indexing) { + wd.text = ustrdup(wdtext); + addword(wd, &idximplicit); + } + sfree(wdtext); + + if (wd.type == word_HyperLink) { + /* + * Hyperlinks are different: they then + * expect another left brace, to begin + * delimiting the text marked by the link. + */ + dtor(t), t = get_token(in); + sitem = snew(struct stack_item); + sitem->fpos = wd.fpos; + sitem->type = stack_hyper; + /* + * Special cases: \W{}\i, \W{}\ii + */ + if (t.type == tok_cmd && + (t.cmd == c_i || t.cmd == c_ii)) { + if (indexing) { + error(err_nestedindex, &t.pos); + } else { + /* Add an index-reference word with no + * text as yet */ + wd.type = word_IndexRef; + wd.text = NULL; + wd.alt = NULL; + wd.aux = 0; + wd.breaks = FALSE; + indexword = addword(wd, &whptr); + /* Set up a rdstring to read the + * index text */ + indexstr = nullrs; + /* Flags so that we do the Right + * Things with text */ + index_visible = (type != c_I); + index_downcase = (type == c_ii); + indexing = TRUE; + idxwordlist = NULL; + idximplicit = &idxwordlist; + + sitem->type |= stack_idx; + } + dtor(t), t = get_token(in); + } + /* + * Special cases: \W{}\c, \W{}\e, \W{}\cw + */ + if (t.type == tok_cmd && + (t.cmd == c_e || t.cmd == c_f || t.cmd == c_c || t.cmd == c_cw)) { + if (style != word_Normal) + error(err_nestedstyles, &t.pos); + else { + style = (t.cmd == c_c ? word_Code : + t.cmd == c_cw ? word_WeakCode : + t.cmd == c_f ? word_Strong : + word_Emph); + spcstyle = tospacestyle(style); + sitem->type |= stack_style; + } + dtor(t), t = get_token(in); + } + if (t.type != tok_lbrace) { + error(err_explbr, &t.pos); + sfree(sitem); + } else { + stk_push(parsestk, sitem); + } + } + break; + case c_c: + case c_cw: + case c_e: + case c_f: + type = t.cmd; + if (style != word_Normal) { + error(err_nestedstyles, &t.pos); + /* Error recovery: eat lbrace, push nop. */ + dtor(t), t = get_token(in); + sitem = snew(struct stack_item); + sitem->fpos = t.pos; + sitem->type = stack_nop; + stk_push(parsestk, sitem); + } + dtor(t), t = get_token(in); + if (t.type != tok_lbrace) { + error(err_explbr, &t.pos); + } else { + style = (type == c_c ? word_Code : + type == c_cw ? word_WeakCode : + type == c_f ? word_Strong : + word_Emph); + spcstyle = tospacestyle(style); + sitem = snew(struct stack_item); + sitem->fpos = t.pos; + sitem->type = stack_style; + stk_push(parsestk, sitem); + } + break; + case c_i: + case c_ii: + case c_I: + type = t.cmd; + if (indexing) { + error(err_nestedindex, &t.pos); + /* Error recovery: eat lbrace, push nop. */ + dtor(t), t = get_token(in); + sitem = snew(struct stack_item); + sitem->fpos = t.pos; + sitem->type = stack_nop; + stk_push(parsestk, sitem); + } + sitem = snew(struct stack_item); + sitem->fpos = t.pos; + sitem->type = stack_idx; + dtor(t), t = get_token(in); + /* + * Special cases: \i\c, \i\e, \i\cw + */ + wd.fpos = t.pos; + if (t.type == tok_cmd && + (t.cmd == c_e || t.cmd == c_f || t.cmd == c_c || t.cmd == c_cw)) { + if (style != word_Normal) + error(err_nestedstyles, &t.pos); + else { + style = (t.cmd == c_c ? word_Code : + t.cmd == c_cw ? word_WeakCode : + t.cmd == c_f ? word_Strong : + word_Emph); + spcstyle = tospacestyle(style); + sitem->type |= stack_style; + } + dtor(t), t = get_token(in); + } + if (t.type != tok_lbrace) { + sfree(sitem); + error(err_explbr, &t.pos); + } else { + /* Add an index-reference word with no text as yet */ + wd.type = word_IndexRef; + wd.text = NULL; + wd.alt = NULL; + wd.aux = 0; + wd.breaks = FALSE; + indexword = addword(wd, &whptr); + /* Set up a rdstring to read the index text */ + indexstr = nullrs; + /* Flags so that we do the Right Things with text */ + index_visible = (type != c_I); + index_downcase = (type == c_ii); + indexing = TRUE; + idxwordlist = NULL; + idximplicit = &idxwordlist; + /* Stack item to close the indexing on exit */ + stk_push(parsestk, sitem); + } + break; + case c_u: + uchr = t.aux; + utext[0] = uchr; utext[1] = 0; + wd.type = style; + wd.breaks = FALSE; + wd.alt = NULL; + wd.aux = 0; + wd.fpos = t.pos; + if (!indexing || index_visible) { + wd.text = ustrdup(utext); + uword = addword(wd, &whptr); + } else + uword = NULL; + if (indexing) { + wd.text = ustrdup(utext); + iword = addword(wd, &idximplicit); + } else + iword = NULL; + dtor(t), t = get_token(in); + if (t.type == tok_lbrace) { + /* + * \u with a left brace. Until the brace + * closes, all further words go on a + * sidetrack from the main thread of the + * paragraph. + */ + sitem = snew(struct stack_item); + sitem->fpos = t.pos; + sitem->type = stack_ualt; + sitem->whptr = whptr; + sitem->idximplicit = idximplicit; + stk_push(parsestk, sitem); + whptr = uword ? &uword->alt : NULL; + idximplicit = iword ? &iword->alt : NULL; + } else { + if (indexing) + rdadd(&indexstr, uchr); + already = TRUE; + } + break; + default: + if (!macrolookup(macros, in, t.text, &t.pos)) + error(err_badmidcmd, t.text, &t.pos); + break; + } + } + if (!already) + dtor(t), t = get_token(in); + seenwhite = iswhite; + } + finished_para: + /* Check the stack is empty */ + if (stk_top(parsestk)) { + while ((sitem = stk_pop(parsestk))) + sfree(sitem); + error(err_missingrbrace, &t.pos); + } + stk_free(parsestk); + prev_para_type = par.type; + /* + * Before we add the paragraph to the output list, we + * should check that there was any text in it at all; there + * might not be if (for example) the paragraph contained + * nothing but an unrecognised command sequence, and if we + * put an empty paragraph on the list it may confuse the + * back ends later on. + */ + if (par.words) { + addpara(par, ret); + } + if (t.type == tok_eof) + already = TRUE; + } + + if (stk_top(crossparastk)) { + void *p; + + error(err_missingrbrace2, &t.pos); + while ((p = stk_pop(crossparastk))) + sfree(p); + } + + /* + * We break to here rather than returning, because otherwise + * this cleanup doesn't happen. + */ + dtor(t); + + stk_free(crossparastk); +} + +struct { + char const *magic; + size_t nmagic; + void (*reader)(input *); +} magics[] = { + { "%!FontType1-", 12, &read_pfa_file }, + { "%!PS-AdobeFont-", 15, &read_pfa_file }, + { "\x80\x01", 2, &read_pfb_file }, + { "StartFontMetrics", 16, &read_afm_file }, +}; + +paragraph *read_input(input *in, indexdata *idx) { + paragraph *head = NULL; + paragraph **hptr = &head; + tree234 *macros; + char mag[16]; + size_t len, i; + void (*reader)(input *); + + macros = newtree234(macrocmp); + + while (in->currindex < in->nfiles) { + in->currfp = fopen(in->filenames[in->currindex], "r"); + if (in->currfp) { + setpos(in, in->filenames[in->currindex]); + in->charset = in->defcharset; + in->csstate = charset_init_state; + in->wcpos = in->nwc = 0; + in->pushback_chars = NULL; + reader = NULL; + len = fread(mag, 1, sizeof(mag), in->currfp); + for (i = 0; i < lenof(magics); i++) { + if (len >= magics[i].nmagic && + memcmp(mag, magics[i].magic, magics[i].nmagic) == 0) { + reader = magics[i].reader; + break; + } + } + rewind(in->currfp); + if (reader == NULL) + read_file(&hptr, in, idx, macros); + else + (*reader)(in); + } + in->currindex++; + } + + macrocleanup(macros); + + return head; +} diff --git a/app/tools/halibut/keywords.c b/app/tools/halibut/keywords.c new file mode 100644 index 0000000..8101282 --- /dev/null +++ b/app/tools/halibut/keywords.c @@ -0,0 +1,154 @@ +/* + * keywords.c: keep track of all cross-reference keywords + */ + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include "halibut.h" + +static int kwcmp(void *av, void *bv) +{ + const keyword *a = (const keyword *)av; + const keyword *b = (const keyword *)bv; + return ustrcmp(a->key, b->key); +} + +static int kwfind(void *av, void *bv) +{ + wchar_t *a = (wchar_t *)av; + const keyword *b = (const keyword *)bv; + return ustrcmp(a, b->key); +} + +keyword *kw_lookup(keywordlist *kl, wchar_t *str) { + return find234(kl->keys, str, kwfind); +} + +/* + * This function reads through source form and collects the + * keywords. They get collected in a heap, sorted by Unicode + * collation, last at the top (so that we can Heapsort them when we + * finish). + */ +keywordlist *get_keywords(paragraph *source) { + int errors = FALSE; + keywordlist *kl = snew(keywordlist); + numberstate *n = number_init(); + int prevpara = para_NotParaType; + + number_cfg(n, source); + + kl->size = 0; + kl->keys = newtree234(kwcmp); + kl->nlooseends = kl->looseendssize = 0; + kl->looseends = NULL; + for (; source; source = source->next) { + wchar_t *p, *q; + p = q = source->keyword; + + /* + * Look for the section type override (`example', + * `question' or whatever - to replace `chapter' or + * `section' on a per-section basis). + */ + if (q) { + q = uadv(q); /* point q at the word beyond */ + if (!*q) q = NULL; + } + + /* + * Number the chapter / section / list-item / whatever. + * This also sets up the `parent', `child' and `sibling' + * links. + */ + source->kwtext = number_mktext(n, source, q, &prevpara, &errors); + + if (p && *p) { + if (source->kwtext || source->type == para_Biblio) { + keyword *kw, *ret; + + kw = snew(keyword); + kw->key = p; + kw->text = source->kwtext; + kw->para = source; + ret = add234(kl->keys, kw); + if (ret != kw) { + error(err_multikw, &source->fpos, &ret->para->fpos, p); + sfree(kw); + /* FIXME: what happens to kw->text? Does it leak? */ + } + } + } else { + if (kl->nlooseends >= kl->looseendssize) { + kl->looseendssize = kl->nlooseends + 32; + kl->looseends = sresize(kl->looseends, kl->looseendssize, + word *); + } + kl->looseends[kl->nlooseends++] = source->kwtext; + } + } + + number_free(n); + + if (errors) { + free_keywords(kl); + return NULL; + } + + return kl; +} + +void free_keywords(keywordlist *kl) { + keyword *kw; + while (kl->nlooseends) + free_word_list(kl->looseends[--kl->nlooseends]); + sfree(kl->looseends); + while ( (kw = index234(kl->keys, 0)) != NULL) { + delpos234(kl->keys, 0); + free_word_list(kw->text); + sfree(kw); + } + freetree234(kl->keys); + sfree(kl); +} + +void subst_keywords(paragraph *source, keywordlist *kl) { + for (; source; source = source->next) { + word *ptr; + for (ptr = source->words; ptr; ptr = ptr->next) { + if (ptr->type == word_UpperXref || + ptr->type == word_LowerXref) { + keyword *kw; + word **endptr, *close, *subst; + + kw = kw_lookup(kl, ptr->text); + if (!kw) { + error(err_nosuchkw, &ptr->fpos, ptr->text); + subst = NULL; + } else + subst = dup_word_list(kw->text); + + if (subst && ptr->type == word_LowerXref && + kw->para->type != para_Biblio && + kw->para->type != para_BiblioCited) + ustrlow(subst->text); + + close = snew(word); + close->text = NULL; + close->alt = NULL; + close->type = word_XrefEnd; + close->fpos = ptr->fpos; + + close->next = ptr->next; + ptr->next = subst; + + for (endptr = &ptr->next; *endptr; endptr = &(*endptr)->next) + (*endptr)->fpos = ptr->fpos; + + *endptr = close; + ptr = close; + } + } + } +} diff --git a/app/tools/halibut/licence.c b/app/tools/halibut/licence.c new file mode 100644 index 0000000..03fb11a --- /dev/null +++ b/app/tools/halibut/licence.c @@ -0,0 +1,51 @@ +/* + * licence.c: licence text + */ + +#include <stdio.h> + +static const char *const licencetext[] = { + "Halibut is copyright (c) 1999-2007 Simon Tatham.", + "", + "Permission is hereby granted, free of charge, to any person", + "obtaining a copy of this software and associated documentation files", + "(the \"Software\"), to deal in the Software without restriction,", + "including without limitation the rights to use, copy, modify, merge,", + "publish, distribute, sublicense, and/or sell copies of the Software,", + "and to permit persons to whom the Software is furnished to do so,", + "subject to the following conditions:", + "", + "The above copyright notice and this permission notice shall be", + "included in all copies or substantial portions of the Software.", + "", + "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,", + "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF", + "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND", + "NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS", + "BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN", + "ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN", + "CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", + "SOFTWARE.", + "", + "Halibut contains font metrics derived from the \"Font Metrics for PDF", + "Core 14 Fonts\", which carry the following copyright notice and licence:", + "", + " Copyright (c) 1985, 1987, 1989, 1990, 1991, 1992, 1993, 1997", + " Adobe Systems Incorporated. All Rights Reserved.", + "", + " This file and the 14 PostScript(R) AFM files it accompanies may be", + " used, copied, and distributed for any purpose and without charge,", + " with or without modification, provided that all copyright notices", + " are retained; that the AFM files are not distributed without this", + " file; that all modifications to this file or any of the AFM files", + " are prominently noted in the modified file(s); and that this", + " paragraph is not modified. Adobe Systems has no responsibility or", + " obligation to support the use of the AFM files.", + NULL +}; + +void licence(void) { + const char *const *p; + for (p = licencetext; *p; p++) + puts(*p); +} diff --git a/app/tools/halibut/main.c b/app/tools/halibut/main.c new file mode 100644 index 0000000..ffc70cc --- /dev/null +++ b/app/tools/halibut/main.c @@ -0,0 +1,473 @@ +/* + * main.c: command line parsing and top level + */ + +#include <assert.h> +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include "halibut.h" + +static void dbg_prtsource(paragraph *sourceform); +static void dbg_prtwordlist(int level, word *w); +static void dbg_prtkws(keywordlist *kws); + +static const struct pre_backend { + void *(*func)(paragraph *, keywordlist *, indexdata *); + int bitfield; +} pre_backends[] = { + {paper_pre_backend, 0x0001} +}; + +static const struct backend { + char *name; + void (*func)(paragraph *, keywordlist *, indexdata *, void *); + paragraph *(*filename)(char *filename); + int bitfield, prebackend_bitfield; +} backends[] = { + {"xhtml", html_backend, html_config_filename, 0x0002, 0}, + {"html", html_backend, html_config_filename, 0x0002, 0} +/* {"text", text_backend, text_config_filename, 0x0001, 0}, + {"xhtml", html_backend, html_config_filename, 0x0002, 0}, + {"html", html_backend, html_config_filename, 0x0002, 0}, + {"hlp", whlp_backend, whlp_config_filename, 0x0004, 0}, + {"whlp", whlp_backend, whlp_config_filename, 0x0004, 0}, + {"winhelp", whlp_backend, whlp_config_filename, 0x0004, 0}, + {"man", man_backend, man_config_filename, 0x0008, 0}, + {"info", info_backend, info_config_filename, 0x0010, 0}, + {"ps", ps_backend, ps_config_filename, 0x0020, 0x0001}, + {"pdf", pdf_backend, pdf_config_filename, 0x0040, 0x0001}, */ +}; + +int main(int argc, char **argv) { + char **infiles; + int nfiles; + int nogo; + int errs; + int reportcols; + int input_charset; + int debug; + int backendbits, prebackbits; + int k, b; + paragraph *cfg, *cfg_tail; + void *pre_backend_data[16]; + + /* + * Use the specified locale everywhere. It'll be used for + * output of error messages, and as the default character set + * for input files if one is not explicitly specified. + * + * However, we need to use standard numeric formatting for + * output of things like PDF. + */ + setlocale(LC_ALL, ""); + setlocale(LC_NUMERIC, "C"); + + /* + * Set up initial (default) parameters. + */ + infiles = snewn(argc, char *); + nfiles = 0; + nogo = errs = FALSE; + reportcols = 0; + input_charset = CS_ASCII; + debug = 0; + backendbits = 0; + cfg = cfg_tail = NULL; + + if (argc == 1) { + usage(); + exit(EXIT_SUCCESS); + } + + /* + * Parse command line arguments. + */ + while (--argc) { + char *p = *++argv; + if (*p == '-') { + /* + * An option. + */ + while (p && *++p) { + char c = *p; + switch (c) { + case '-': + /* + * Long option. + */ + { + char *opt, *val; + opt = p++; /* opt will have _one_ leading - */ + while (*p && *p != '=') + p++; /* find end of option */ + if (*p == '=') { + *p++ = '\0'; + val = p; + } else + val = NULL; + + assert(opt[0] == '-'); + for (k = 0; k < (int)lenof(backends); k++) + if (!strcmp(opt+1, backends[k].name)) { + backendbits |= backends[k].bitfield; + if (val) { + paragraph *p = backends[k].filename(val); + assert(p); + if (cfg_tail) + cfg_tail->next = p; + else + cfg = p; + while (p->next) + p = p->next; + cfg_tail = p; + } + break; + } + if (k < (int)lenof(backends)) { + /* do nothing */; + } else if (!strcmp(opt, "-input-charset")) { + if (!val) { + errs = TRUE, error(err_optnoarg, opt); + } else { + int charset = charset_from_localenc(val); + if (charset == CS_NONE) { + errs = TRUE, error(err_cmdcharset, val); + } else { + input_charset = charset; + } + } + } else if (!strcmp(opt, "-help")) { + help(); + nogo = TRUE; + } else if (!strcmp(opt, "-version")) { + showversion(); + nogo = TRUE; + } else if (!strcmp(opt, "-licence") || + !strcmp(opt, "-license")) { + licence(); + nogo = TRUE; + } else if (!strcmp(opt, "-list-charsets")) { + listcharsets(); + nogo = TRUE; + } else if (!strcmp(opt, "-precise")) { + reportcols = 1; + } else { + errs = TRUE, error(err_nosuchopt, opt); + } + } + p = NULL; + break; + case 'h': + case 'V': + case 'L': + case 'P': + case 'd': + /* + * Option requiring no parameter. + */ + switch (c) { + case 'h': + help(); + nogo = TRUE; + break; + case 'V': + showversion(); + nogo = TRUE; + break; + case 'L': + licence(); + nogo = TRUE; + break; + case 'P': + reportcols = 1; + break; + case 'd': + debug = TRUE; + break; + } + break; + case 'C': + /* + * Option requiring parameter. + */ + p++; + if (!*p && argc > 1) + --argc, p = *++argv; + else if (!*p) { + char opt[2]; + opt[0] = c; + opt[1] = '\0'; + errs = TRUE, error(err_optnoarg, opt); + } + /* + * Now c is the option and p is the parameter. + */ + switch (c) { + case 'C': + /* + * -C means we split our argument up into + * colon-separated chunks and assemble them + * into a config paragraph. + */ + { + char *s = dupstr(p), *q, *r; + paragraph *para; + + para = cmdline_cfg_new(); + + q = r = s; + while (*q) { + if (*q == ':') { + *r = '\0'; + /* XXX ad-hoc diagnostic */ + if (!strcmp(s, "input-charset")) + error(err_futileopt, "Cinput-charset", + "; use --input-charset"); + cmdline_cfg_add(para, s); + r = s; + } else { + if (*q == '\\' && q[1]) + q++; + *r++ = *q; + } + q++; + } + *r = '\0'; + cmdline_cfg_add(para, s); + + if (cfg_tail) + cfg_tail->next = para; + else + cfg = para; + cfg_tail = para; + } + break; + } + p = NULL; /* prevent continued processing */ + break; + default: + /* + * Unrecognised option. + */ + { + char opt[2]; + opt[0] = c; + opt[1] = '\0'; + errs = TRUE, error(err_nosuchopt, opt); + } + } + } + } else { + /* + * A non-option argument. + */ + infiles[nfiles++] = p; + } + } + + if (errs) + exit(EXIT_FAILURE); + if (nogo) + exit(EXIT_SUCCESS); + + /* + * Do the work. + */ + if (nfiles == 0) { + error(err_noinput); + usage(); + exit(EXIT_FAILURE); + } + + { + input in; + paragraph *sourceform, *p; + indexdata *idx; + keywordlist *keywords; + + in.filenames = infiles; + in.nfiles = nfiles; + in.currfp = NULL; + in.currindex = 0; + in.npushback = in.pushbacksize = 0; + in.pushback = NULL; + in.reportcols = reportcols; + in.stack = NULL; + in.defcharset = input_charset; + + idx = make_index(); + + sourceform = read_input(&in, idx); + if (!sourceform) + exit(EXIT_FAILURE); + + /* + * Append the config directives acquired from the command + * line. + */ + { + paragraph *end; + + end = sourceform; + while (end && end->next) + end = end->next; + assert(end); + + end->next = cfg; + } + + sfree(in.pushback); + + sfree(infiles); + + keywords = get_keywords(sourceform); + if (!keywords) + exit(EXIT_FAILURE); + gen_citations(sourceform, keywords); + subst_keywords(sourceform, keywords); + + for (p = sourceform; p; p = p->next) + if (p->type == para_IM) + index_merge(idx, TRUE, p->keyword, p->words, &p->fpos); + + build_index(idx); + + /* + * Set up attr_First / attr_Last / attr_Always, in the main + * document and in the index entries. + */ + for (p = sourceform; p; p = p->next) + mark_attr_ends(p->words); + { + int i; + indexentry *entry; + + for (i = 0; (entry = index234(idx->entries, i)) != NULL; i++) + mark_attr_ends(entry->text); + } + + if (debug) { + index_debug(idx); + dbg_prtkws(keywords); + dbg_prtsource(sourceform); + } + + /* + * Select and run the pre-backends. + */ + prebackbits = 0; + for (k = 0; k < (int)lenof(backends); k++) + if (backendbits == 0 || (backendbits & backends[k].bitfield)) + prebackbits |= backends[k].prebackend_bitfield; + for (k = 0; k < (int)lenof(pre_backends); k++) + if (prebackbits & pre_backends[k].bitfield) { + assert(k < (int)lenof(pre_backend_data)); + pre_backend_data[k] = + pre_backends[k].func(sourceform, keywords, idx); + } + + /* + * Run the selected set of backends. + */ + for (k = b = 0; k < (int)lenof(backends); k++) + if (b != backends[k].bitfield) { + b = backends[k].bitfield; + if (backendbits == 0 || (backendbits & b)) { + void *pbd = NULL; + int pbb = backends[k].prebackend_bitfield; + int m; + + for (m = 0; m < (int)lenof(pre_backends); m++) + if (pbb & pre_backends[m].bitfield) { + assert(m < (int)lenof(pre_backend_data)); + pbd = pre_backend_data[m]; + break; + } + + backends[k].func(sourceform, keywords, idx, pbd); + } + } + + free_para_list(sourceform); + free_keywords(keywords); + cleanup_index(idx); + } + + return 0; +} + +static void dbg_prtsource(paragraph *sourceform) { + /* + * Output source form in debugging format. + */ + + paragraph *p; + for (p = sourceform; p; p = p->next) { + wchar_t *wp; + printf("para %d ", p->type); + if (p->keyword) { + wp = p->keyword; + while (*wp) { + putchar('\"'); + for (; *wp; wp++) + putchar(*wp); + putchar('\"'); + if (*++wp) + printf(", "); + } + } else + printf("(no keyword)"); + printf(" {\n"); + dbg_prtwordlist(1, p->words); + printf("}\n"); + } +} + +static void dbg_prtkws(keywordlist *kws) { + /* + * Output keywords in debugging format. + */ + + int i; + keyword *kw; + + for (i = 0; (kw = index234(kws->keys, i)) != NULL; i++) { + wchar_t *wp; + printf("keyword "); + wp = kw->key; + while (*wp) { + putchar('\"'); + for (; *wp; wp++) + putchar(*wp); + putchar('\"'); + if (*++wp) + printf(", "); + } + printf(" {\n"); + dbg_prtwordlist(1, kw->text); + printf("}\n"); + } +} + +static void dbg_prtwordlist(int level, word *w) { + for (; w; w = w->next) { + wchar_t *wp; + printf("%*sword %d ", level*4, "", w->type); + if (w->text) { + printf("\""); + for (wp = w->text; *wp; wp++) + putchar(*wp); + printf("\""); + } else + printf("(no text)"); + if (w->breaks) + printf(" [breaks]"); + if (w->alt) { + printf(" alt = {\n"); + dbg_prtwordlist(level+1, w->alt); + printf("%*s}", level*4, ""); + } + printf("\n"); + } +} diff --git a/app/tools/halibut/malloc.c b/app/tools/halibut/malloc.c new file mode 100644 index 0000000..2ff22fd --- /dev/null +++ b/app/tools/halibut/malloc.c @@ -0,0 +1,149 @@ +/* + * malloc.c: safe wrappers around malloc, realloc, free, strdup + */ + +#include <stdlib.h> +#include <stdarg.h> +#include "halibut.h" + +#ifdef LOGALLOC +#define LOGPARAMS char *file, int line, +static FILE *logallocfp = NULL; +static int logline = 2; /* off by 1: `null pointer is' */ +static void loginc(void) { } +static void logallocinit(void) { + if (!logallocfp) { + logallocfp = fopen("malloc.log", "w"); + if (!logallocfp) { + fprintf(stderr, "panic: unable to open malloc.log\n"); + exit(10); + } + setvbuf (logallocfp, NULL, _IOLBF, BUFSIZ); + fprintf(logallocfp, "null pointer is %p\n", NULL); + } +} +static void logprintf(char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(logallocfp, fmt, ap); + va_end(ap); +} +#define LOGPRINT(x) ( logallocinit(), logprintf x ) +#define LOGINC do { loginc(); logline++; } while (0) +#else +#define LOGPARAMS +#define LOGPRINT(x) +#define LOGINC ((void)0) +#endif + +/* + * smalloc should guarantee to return a useful pointer - Halibut + * can do nothing except die when it's out of memory anyway. + */ +void *(smalloc)(LOGPARAMS int size) { + void *p; + LOGINC; + LOGPRINT(("%s %d malloc(%ld)", + file, line, (long)size)); + p = malloc(size); + if (!p) + fatal(err_nomemory); + LOGPRINT((" returns %p\n", p)); + return p; +} + +/* + * sfree should guaranteeably deal gracefully with freeing NULL + */ +void (sfree)(LOGPARAMS void *p) { + if (p) { + LOGINC; + LOGPRINT(("%s %d free(%p)\n", + file, line, p)); + free(p); + } +} + +/* + * srealloc should guaranteeably be able to realloc NULL + */ +void *(srealloc)(LOGPARAMS void *p, int size) { + void *q; + if (p) { + LOGINC; + LOGPRINT(("%s %d realloc(%p,%ld)", + file, line, p, (long)size)); + q = realloc(p, size); + LOGPRINT((" returns %p\n", q)); + } else { + LOGINC; + LOGPRINT(("%s %d malloc(%ld)", + file, line, (long)size)); + q = malloc(size); + LOGPRINT((" returns %p\n", q)); + } + if (!q) + fatal(err_nomemory); + return q; +} + +/* + * dupstr is like strdup, but with the never-return-NULL property + * of smalloc (and also reliably defined in all environments :-) + */ +char *dupstr(char *s) { + char *r = smalloc(1+strlen(s)); + strcpy(r,s); + return r; +} + +/* + * Duplicate a linked list of words + */ +word *dup_word_list(word *w) { + word *head = NULL, **eptr = &head; + + while (w) { + word *newwd = snew(word); + *newwd = *w; /* structure copy */ + newwd->text = ustrdup(w->text); + if (w->alt) + newwd->alt = dup_word_list(w->alt); + *eptr = newwd; + newwd->next = NULL; + eptr = &newwd->next; + + w = w->next; + } + + return head; +} + +/* + * Free a linked list of words + */ +void free_word_list(word *w) { + word *t; + while (w) { + t = w; + w = w->next; + sfree(t->text); + if (t->alt) + free_word_list(t->alt); + sfree(t); + } +} + +/* + * Free a linked list of paragraphs + */ +void free_para_list(paragraph *p) { + paragraph *t; + while (p) { + t = p; + p = p->next; + sfree(t->keyword); + free_word_list(t->words); + sfree(t); + } +} diff --git a/app/tools/halibut/misc.c b/app/tools/halibut/misc.c new file mode 100644 index 0000000..3f2483c --- /dev/null +++ b/app/tools/halibut/misc.c @@ -0,0 +1,580 @@ +/* + * misc.c: miscellaneous useful items + */ + +#include <stdarg.h> +#include "halibut.h" + +char *adv(char *s) { + return s + 1 + strlen(s); +} + +struct stackTag { + void **data; + int sp; + int size; +}; + +stack stk_new(void) { + stack s; + + s = snew(struct stackTag); + s->sp = 0; + s->size = 0; + s->data = NULL; + + return s; +} + +void stk_free(stack s) { + sfree(s->data); + sfree(s); +} + +void stk_push(stack s, void *item) { + if (s->size <= s->sp) { + s->size = s->sp + 32; + s->data = sresize(s->data, s->size, void *); + } + s->data[s->sp++] = item; +} + +void *stk_pop(stack s) { + if (s->sp > 0) + return s->data[--s->sp]; + else + return NULL; +} + +void *stk_top(stack s) { + if (s->sp > 0) + return s->data[s->sp-1]; + else + return NULL; +} + +/* + * Small routines to amalgamate a string from an input source. + */ +const rdstring empty_rdstring = {0, 0, NULL}; +const rdstringc empty_rdstringc = {0, 0, NULL}; + +void rdadd(rdstring *rs, wchar_t c) { + if (rs->pos >= rs->size-1) { + rs->size = rs->pos + 128; + rs->text = sresize(rs->text, rs->size, wchar_t); + } + rs->text[rs->pos++] = c; + rs->text[rs->pos] = 0; +} +void rdadds(rdstring *rs, wchar_t const *p) { + int len = ustrlen(p); + if (rs->pos >= rs->size - len) { + rs->size = rs->pos + len + 128; + rs->text = sresize(rs->text, rs->size, wchar_t); + } + ustrcpy(rs->text + rs->pos, p); + rs->pos += len; +} +wchar_t *rdtrim(rdstring *rs) { + rs->text = sresize(rs->text, rs->pos + 1, wchar_t); + return rs->text; +} + +void rdaddc(rdstringc *rs, char c) { + if (rs->pos >= rs->size-1) { + rs->size = rs->pos + 128; + rs->text = sresize(rs->text, rs->size, char); + } + rs->text[rs->pos++] = c; + rs->text[rs->pos] = 0; +} +void rdaddsc(rdstringc *rs, char const *p) { + rdaddsn(rs, p, strlen(p)); +} +void rdaddsn(rdstringc *rs, char const *p, int len) { + if (rs->pos >= rs->size - len) { + rs->size = rs->pos + len + 128; + rs->text = sresize(rs->text, rs->size, char); + } + memcpy(rs->text + rs->pos, p, len); + rs->pos += len; + rs->text[rs->pos] = 0; +} +char *rdtrimc(rdstringc *rs) { + rs->text = sresize(rs->text, rs->pos + 1, char); + return rs->text; +} + +static int compare_wordlists_literally(word *a, word *b) { + int t; + while (a && b) { + if (a->type != b->type) + return (a->type < b->type ? -1 : +1); /* FIXME? */ + t = a->type; + if ((t != word_Normal && t != word_Code && + t != word_WeakCode && t != word_Emph) || + a->alt || b->alt) { + int c; + if (a->text && b->text) { + c = ustricmp(a->text, b->text); + if (c) + return c; + } + c = compare_wordlists_literally(a->alt, b->alt); + if (c) + return c; + a = a->next; + b = b->next; + } else { + wchar_t *ap = a->text, *bp = b->text; + while (*ap && *bp) { + wchar_t ac = *ap, bc = *bp; + if (ac != bc) + return (ac < bc ? -1 : +1); + if (!*++ap && a->next && a->next->type == t && !a->next->alt) + a = a->next, ap = a->text; + if (!*++bp && b->next && b->next->type == t && !b->next->alt) + b = b->next, bp = b->text; + } + if (*ap || *bp) + return (*ap ? +1 : -1); + a = a->next; + b = b->next; + } + } + + if (a || b) + return (a ? +1 : -1); + else + return 0; +} + +int compare_wordlists(word *a, word *b) { + /* + * First we compare only the alphabetic content of the word + * lists, with case not a factor. If that comes out equal, + * _then_ we compare the word lists literally. + */ + struct { + word *w; + int i; + wchar_t c; + } pos[2]; + + pos[0].w = a; + pos[1].w = b; + pos[0].i = pos[1].i = 0; + + while (1) { + /* + * Find the next alphabetic character in each word list. + */ + int k; + + for (k = 0; k < 2; k++) { + /* + * Advance until we hit either an alphabetic character + * or the end of the word list. + */ + while (1) { + if (!pos[k].w) { + /* End of word list. */ + pos[k].c = 0; + break; + } else if (!pos[k].w->text || !pos[k].w->text[pos[k].i]) { + /* No characters remaining in this word; move on. */ + pos[k].w = pos[k].w->next; + pos[k].i = 0; + } else if (!uisalpha(pos[k].w->text[pos[k].i])) { + /* This character isn't alphabetic; move on. */ + pos[k].i++; + } else { + /* We have an alphabetic! Lowercase it and continue. */ + pos[k].c = utolower(pos[k].w->text[pos[k].i]); + break; + } + } + } + +#ifdef HAS_WCSCOLL + { + wchar_t a[2], b[2]; + int ret; + + a[0] = pos[0].c; + b[0] = pos[1].c; + a[1] = b[1] = L'\0'; + + ret = wcscoll(a, b); + if (ret) + return ret; + } +#else + if (pos[0].c < pos[1].c) + return -1; + else if (pos[0].c > pos[1].c) + return +1; +#endif + + if (!pos[0].c) + break; /* they're equal */ + + pos[0].i++; + pos[1].i++; + } + + /* + * If we reach here, the strings were alphabetically equal, so + * compare in more detail. + */ + return compare_wordlists_literally(a, b); +} + +void mark_attr_ends(word *words) +{ + word *w, *wp; + + wp = NULL; + for (w = words; w; w = w->next) { + int both; + if (!isvis(w->type)) + /* Invisible elements should not affect this calculation */ + continue; + both = (isattr(w->type) && + wp && isattr(wp->type) && + sameattr(wp->type, w->type)); + w->aux |= both ? attr_Always : attr_First; + if (wp && !both) { + /* If previous considered word turns out to have been + * the end of a run, tidy it up. */ + int wp_attr = attraux(wp->aux); + wp->aux = (wp->aux & ~attr_mask) | + ((wp_attr == attr_Always) ? attr_Last + /* attr_First */ : attr_Only); + } + wp = w; + } + + /* Tidy up last word touched */ + if (wp) { + int wp_attr = attraux(wp->aux); + wp->aux = (wp->aux & ~attr_mask) | + ((wp_attr == attr_Always) ? attr_Last + /* attr_First */ : attr_Only); + } +} + +/* + * This function implements the optimal paragraph wrapping + * algorithm, pretty much as used in TeX. A cost function is + * defined for each line of the wrapped paragraph (typically some + * convex function of the difference between the line's length and + * its desired length), and a dynamic programming approach is used + * to optimise globally across all possible layouts of the + * paragraph to find the one with the minimum total cost. + * + * The function as implemented here gives a choice of two options + * for the cost function: + * + * - If `natural_space' is zero, then the algorithm attempts to + * make each line the maximum possible width (either `width' or + * `subsequentwidth' depending on whether it's the first line of + * the paragraph or not), and the cost function is simply the + * square of the unused space at the end of each line. This is a + * simple mechanism suitable for use in fixed-pitch environments + * such as plain text displayed on a terminal. + * + * - However, if `natural_space' is positive, the algorithm + * assumes the medium is fully graphical and that the width of + * space characters can be adjusted finely, and it attempts to + * make each _space character_ the width given in + * `natural_space'. (The provided width function should return + * the _minimum_ acceptable width of a space character in this + * case.) Therefore, the cost function for a line is dependent + * on the number of spaces on that line as well as the amount by + * which the line width differs from the optimum. + */ +wrappedline *wrap_para(word *text, int width, int subsequentwidth, + int (*widthfn)(void *, word *), void *ctx, + int natural_space) { + wrappedline *head = NULL, **ptr = &head; + int nwords, wordsize; + struct wrapword { + word *begin, *end; + int width; + int spacewidth; + int cost; + int nwords; + } *wrapwords; + int i, j, n; + + /* + * Break the line up into wrappable components. + */ + nwords = wordsize = 0; + wrapwords = NULL; + while (text) { + if (nwords >= wordsize) { + wordsize = nwords + 64; + wrapwords = srealloc(wrapwords, wordsize * sizeof(*wrapwords)); + } + wrapwords[nwords].width = 0; + wrapwords[nwords].begin = text; + while (text) { + wrapwords[nwords].width += widthfn(ctx, text); + wrapwords[nwords].end = text->next; + if (text->next && (text->next->type == word_WhiteSpace || + text->next->type == word_EmphSpace || + text->breaks)) + break; + text = text->next; + } + if (text && text->next && (text->next->type == word_WhiteSpace || + text->next->type == word_EmphSpace)) { + wrapwords[nwords].spacewidth = widthfn(ctx, text->next); + text = text->next; + } else { + wrapwords[nwords].spacewidth = 0; + } + nwords++; + if (text) + text = text->next; + } + + /* + * Perform the dynamic wrapping algorithm: work backwards from + * nwords-1, determining the optimal wrapping for each terminal + * subsequence of the paragraph. + */ + for (i = nwords; i-- ;) { + int best = -1; + int bestcost = 0; + int cost; + int linelen = 0, spacewidth = 0, minspacewidth = 0; + int nspaces; + int thiswidth = (i == 0 ? width : subsequentwidth); + + j = 0; + nspaces = 0; + while (i+j < nwords) { + /* + * See what happens if we put j+1 words on this line. + */ + if (spacewidth) { + nspaces++; + minspacewidth = spacewidth; + } + linelen += spacewidth + wrapwords[i+j].width; + spacewidth = wrapwords[i+j].spacewidth; + j++; + if (linelen > thiswidth) { + /* + * If we're over the width limit, abandon ship, + * _unless_ there is no best-effort yet (which will + * only happen if the first word is too long all by + * itself). + */ + if (best > 0) + break; + } + + /* + * Compute the cost of this line. The method of doing + * this differs hugely depending on whether + * natural_space is nonzero or not. + */ + if (natural_space) { + if (!nspaces && linelen > thiswidth) { + /* + * Special case: if there are no spaces at all + * on the line because one single word is too + * long for its line, cost is zero because + * there's nothing we can do about it anyway. + */ + cost = 0; + } else { + int shortfall = thiswidth - linelen; + int spaceextra = shortfall / (nspaces ? nspaces : 1); + int spaceshortfall = natural_space - + (minspacewidth + spaceextra); + + if (i+j == nwords && spaceshortfall < 0) { + /* + * Special case: on the very last line of + * the paragraph, we don't score penalty + * points for having to _stretch_ the line, + * since we won't stretch it anyway. + * However, we score penalties as normal + * for having to squeeze it. + */ + cost = 0; + } else { + /* + * Squaring this number is tricky since + * it's liable to be quite big. Let's + * divide it through by 256. + */ + int x = spaceshortfall >> 8; + int xf = spaceshortfall & 0xFF; + + /* + * Not counting strange variable-fixed- + * point oddities, we are computing + * + * (x+xf)^2 = x^2 + 2*x*xf + xf*xf + * + * except that _our_ xf is 256 times the + * one listed there. + */ + + cost = x * x; + cost += (2 * x * xf) >> 8; + } + } + } else { + if (i+j == nwords) { + /* + * Special case: if we're at the very end of the + * paragraph, we don't score penalty points for the + * white space left on the line. + */ + cost = 0; + } else { + cost = (thiswidth-linelen) * (thiswidth-linelen); + } + } + + /* + * Add in the cost of wrapping all lines after this + * point too. + */ + if (i+j < nwords) + cost += wrapwords[i+j].cost; + + /* + * We compare bestcost >= cost, not bestcost > cost, + * because in cases where the costs are identical we + * want to try to look like the greedy algorithm, + * because readers are likely to have spent a lot of + * time looking at greedy-wrapped paragraphs and + * there's no point violating the Principle of Least + * Surprise if it doesn't actually gain anything. + */ + if (best < 0 || bestcost >= cost) { + bestcost = cost; + best = j; + } + } + /* + * Now we know the optimal answer for this terminal + * subsequence, so put it in wrapwords. + */ + wrapwords[i].cost = bestcost; + wrapwords[i].nwords = best; + } + + /* + * We've wrapped the paragraph. Now build the output + * `wrappedline' list. + */ + i = 0; + while (i < nwords) { + wrappedline *w = snew(wrappedline); + *ptr = w; + ptr = &w->next; + w->next = NULL; + + n = wrapwords[i].nwords; + w->begin = wrapwords[i].begin; + w->end = wrapwords[i+n-1].end; + + /* + * Count along the words to find nspaces and shortfall. + */ + w->nspaces = 0; + w->shortfall = width; + for (j = 0; j < n; j++) { + w->shortfall -= wrapwords[i+j].width; + if (j < n-1 && wrapwords[i+j].spacewidth) { + w->nspaces++; + w->shortfall -= wrapwords[i+j].spacewidth; + } + } + i += n; + } + + sfree(wrapwords); + + return head; +} + +void wrap_free(wrappedline *w) { + while (w) { + wrappedline *t = w->next; + sfree(w); + w = t; + } +} + +void cmdline_cfg_add(paragraph *cfg, char *string) +{ + wchar_t *ustring; + int upos, ulen, pos, len; + + ulen = 0; + while (cfg->keyword[ulen]) + ulen += 1 + ustrlen(cfg->keyword+ulen); + len = 0; + while (cfg->origkeyword[len]) + len += 1 + strlen(cfg->origkeyword+len); + + ustring = ufroma_locale_dup(string); + + upos = ulen; + ulen += 2 + ustrlen(ustring); + cfg->keyword = sresize(cfg->keyword, ulen, wchar_t); + ustrcpy(cfg->keyword+upos, ustring); + cfg->keyword[ulen-1] = L'\0'; + + pos = len; + len += 2 + strlen(string); + cfg->origkeyword = sresize(cfg->origkeyword, len, char); + strcpy(cfg->origkeyword+pos, string); + cfg->origkeyword[len-1] = '\0'; + + sfree(ustring); +} + +paragraph *cmdline_cfg_new(void) +{ + paragraph *p; + + p = snew(paragraph); + memset(p, 0, sizeof(*p)); + p->type = para_Config; + p->next = NULL; + p->fpos.filename = "<command line>"; + p->fpos.line = p->fpos.col = -1; + p->keyword = ustrdup(L"\0"); + p->origkeyword = dupstr("\0"); + + return p; +} + +paragraph *cmdline_cfg_simple(char *string, ...) +{ + va_list ap; + char *s; + paragraph *p; + + p = cmdline_cfg_new(); + cmdline_cfg_add(p, string); + + va_start(ap, string); + while ((s = va_arg(ap, char *)) != NULL) + cmdline_cfg_add(p, s); + va_end(ap); + + return p; +} diff --git a/app/tools/halibut/paper.h b/app/tools/halibut/paper.h new file mode 100644 index 0000000..29d6407 --- /dev/null +++ b/app/tools/halibut/paper.h @@ -0,0 +1,405 @@ +/* + * Paper printing definitions. + * + * This header file defines data structures and constants which are + * shared between bk_paper.c and its clients bk_ps.c and bk_pdf.c. + */ + +#ifndef HALIBUT_PAPER_H +#define HALIBUT_PAPER_H + +/* Number of internal units per PostScript point. */ +#define UNITS_PER_PT 1000 +#define FUNITS_PER_PT 1000.0 + +/* Glyphs are represented by integer indicies into a table of names. */ +typedef unsigned short glyph; +#define NOGLYPH 0xFFFF + +typedef struct document_Tag document; +typedef struct glyph_width_Tag glyph_width; +typedef struct kern_pair_Tag kern_pair; +typedef struct ligature_Tag ligature; +typedef struct font_info_Tag font_info; +typedef struct font_data_Tag font_data; +typedef struct font_encoding_Tag font_encoding; +typedef struct font_list_Tag font_list; +typedef struct para_data_Tag para_data; +typedef struct line_data_Tag line_data; +typedef struct page_data_Tag page_data; +typedef struct subfont_map_entry_Tag subfont_map_entry; +typedef struct text_fragment_Tag text_fragment; +typedef struct xref_Tag xref; +typedef struct xref_dest_Tag xref_dest; +typedef struct rect_Tag rect; +typedef struct outline_element_Tag outline_element; + +/* + * This data structure represents the overall document, in the form + * it will be given to the client backends. + */ +struct document_Tag { + int paper_width, paper_height; + font_list *fonts; + page_data *pages; + outline_element *outline_elements; + int n_outline_elements; +}; + +/* + * This data structure represents the normal width of a single glyph + * in a font. + */ +struct glyph_width_Tag { + glyph glyph; + int width; +}; + +/* + * This data structure represents a kerning pair within a font. + */ +struct kern_pair_Tag { + /* Glyph indices. */ + glyph left, right; + /* Kern amount, in internal units. */ + int kern; +}; + +/* + * ... and this one represents a ligature. + */ +struct ligature_Tag { + glyph left, right, lig; +}; + +/* + * This data structure holds static information about a font that doesn't + * depend on the particular document. It gets generated when the font's + * metrics are read in. + */ + +font_info *all_fonts; + +struct font_info_Tag { + font_info *next; + /* + * Specify the PostScript name of the font and its point size. + */ + const char *name; + /* + * Pointer to data about the file containing the font, if any. + */ + void *fontfile; + /* A tree of glyph_widths */ + tree234 *widths; + /* A tree of kern_pairs */ + tree234 *kerns; + /* ... and one of ligatures */ + tree234 *ligs; + /* + * For reasonably speedy lookup, we set up a 65536-element + * table representing the Unicode BMP (I can conveniently + * restrict myself to the BMP for the moment since I happen to + * know that no glyph in the Adobe Glyph List falls outside + * it), whose elements are indices into the above two arrays. + */ + glyph bmp[65536]; + /* + * Various bits of metadata needed for the /FontDescriptor dictionary + * in PDF. + */ + float fontbbox[4]; + float capheight; + float xheight; + float ascent; + float descent; + float stemv; + float stemh; + float italicangle; +}; + +/* + * This structure holds the information about how a font is used + * in a document. + */ +struct font_data_Tag { + font_info const *info; + /* + * At some point I'm going to divide the font into sub-fonts + * with largely non-overlapping encoding vectors. This tree + * will track which glyphs go into which subfonts. Also here I + * keep track of the latest subfont of any given font, so I can + * go back and extend its encoding. + */ + tree234 *subfont_map; + font_encoding *latest_subfont; + /* + * The font list to which this font belongs. + */ + font_list *list; +}; + +struct subfont_map_entry_Tag { + font_encoding *subfont; + unsigned char position; +}; + +/* + * This data structure represents a sub-font: a font with an + * encoding vector. + */ +struct font_encoding_Tag { + font_encoding *next; + + char *name; /* used by client backends */ + + font_data *font; /* the parent font structure */ + glyph vector[256]; /* the actual encoding vector */ + wchar_t to_unicode[256]; /* PDF will want to know this */ + int free_pos; /* space left to extend encoding */ +}; + +/* + * This data structure represents the overall list of sub-fonts in + * the whole document. + */ +struct font_list_Tag { + font_encoding *head; + font_encoding *tail; +}; + +/* + * Constants defining array indices for the various fonts used in a + * paragraph. + */ +enum { + FONT_NORMAL, + FONT_EMPH, + FONT_CODE, + NFONTS +}; + +/* + * This is the data structure which is stored in the private_data + * field of each paragraph. It divides the paragraph up into a + * linked list of lines, while at the same time providing for those + * lines to be linked together into a much longer list spanning the + * whole document for page-breaking purposes. + */ + +struct para_data_Tag { + para_data *next; + /* + * Data about the fonts used in this paragraph. Indices are the + * FONT_* constants defined above. + */ + font_data *fonts[NFONTS]; + int sizes[NFONTS]; + /* + * Pointers to the first and last line of the paragraph. The + * line structures are linked into a list, which runs from + * `first' to `last' as might be expected. However, the list + * does not terminate there: first->prev will end up pointing + * to the last line of the previous paragraph in most cases, + * and likewise last->next will point to the first line of the + * next paragraph. + */ + line_data *first; /* first line in paragraph */ + line_data *last; /* last line in paragraph */ + /* + * Some paragraphs have associated graphics; currently this is + * nothing more complex than a single black rectangle. + */ + enum { + RECT_NONE, RECT_CHAPTER_UNDERLINE, RECT_RULE + } rect_type; + /* + * We left- and right-justify in special circumstances. + */ + enum { + JUST, LEFT, RIGHT + } justification; + /* + * Sometimes (in code paragraphs) we want to override the flags + * passed to render_string(). + */ + unsigned extraflags; + /* + * For constructing the page outline. + */ + int outline_level; /* 0=title 1=C 2=H 3=S 4=S2... */ + wchar_t *outline_title; + /* + * For adding the page number of a contents entry afterwards. + */ + paragraph *contents_entry; +}; + +struct line_data_Tag { + /* + * The parent paragraph. + */ + para_data *pdata; + /* + * Pointers to join lines into a linked list. + */ + line_data *prev; + line_data *next; + /* + * The extent of the text displayed on this line. Also mention + * its starting x position, and by how much the width of spaces + * needs to be adjusted for paragraph justification. + * + * (Unlike most of the `last' pointers defined in this file, + * this `end' pointer points to the word _after_ the last one + * that should be displayed on the line. This is how it's + * returned from wrap_para().) + */ + word *first; + word *end; + int xpos; + int hshortfall, nspaces; /* for justifying paragraphs */ + int real_shortfall; + /* + * Auxiliary text: a section number in a margin, or a list item + * bullet or number. Also mention where to display this text + * relative to the left margin. + */ + word *aux_text; + word *aux_text_2; + int aux_left_indent; + /* + * This line might have a non-negotiable page break before it. + * Also there will be space required above and below it; also I + * store the physical line height (defined as the maximum of + * the heights of the three fonts in the pdata) because it's + * easier than looking it up repeatedly during page breaking. + */ + int page_break; + int space_before; + int space_after; + int line_height; + /* + * Penalties for page breaking before or after this line. + */ + int penalty_before, penalty_after; + /* + * These fields are used in the page breaking algorithm. + */ + int *bestcost; + int *vshortfall, *text, *space; + line_data **page_last; /* last line on a page starting here */ + /* + * After page breaking, we can assign an actual y-coordinate on + * the page to each line. Also we store a pointer back to the + * page structure itself. + */ + int ypos; + page_data *page; +}; + +/* + * This data structure is constructed to describe each page of the + * printed output. + */ +struct page_data_Tag { + /* + * Pointers to join pages into a linked list. + */ + page_data *prev; + page_data *next; + /* + * The set of lines displayed on this page. + */ + line_data *first_line; + line_data *last_line; + /* + * After text rendering: the set of actual pieces of text + * needing to be displayed on this page. + */ + text_fragment *first_text; + text_fragment *last_text; + /* + * Cross-references. + */ + xref *first_xref; + xref *last_xref; + /* + * Rectangles to be drawn. (These are currently only used for + * underlining chapter titles and drawing horizontal rules.) + */ + rect *first_rect; + rect *last_rect; + /* + * The page number, as a string. + */ + wchar_t *number; + /* + * This spare pointer field is for use by the client backends. + */ + void *spare; +}; + +struct text_fragment_Tag { + text_fragment *next; + int x, y; + font_encoding *fe; + int fontsize; + char *text; + int width; +}; + +struct xref_dest_Tag { + enum { NONE, PAGE, URL } type; + page_data *page; + char *url; +}; + +struct xref_Tag { + xref *next; + int lx, rx, ty, by; + xref_dest dest; +}; + +struct rect_Tag { + rect *next; + int x, y, w, h; +}; + +struct outline_element_Tag { + int level; /* 0=title 1=C 2=H 3=S 4=S2... */ + para_data *pdata; +}; + +/* + * Functions exported from bk_paper.c + */ +int width_cmp(void *, void *); /* use when setting up widths */ +int kern_cmp(void *, void *); /* use when setting up kern_pairs */ +int lig_cmp(void *, void *); /* use when setting up ligatures */ +int find_width(font_data *, glyph); + +/* + * Functions and data exported from psdata.c. + */ +glyph glyph_intern(char const *); +char const *glyph_extern(glyph); +wchar_t ps_glyph_to_unicode(glyph); +extern const char *const ps_std_glyphs[]; +void init_std_fonts(void); +const int *ps_std_font_widths(char const *fontname); +const kern_pair *ps_std_font_kerns(char const *fontname); + +/* + * Function from bk_pdf.c borrowed by bk_ps.c + */ +char *pdf_outline_convert(wchar_t *s, int *len); + +/* + * Backend functions exported by in_pf.c + */ +void pf_part1(font_info *fi, char **bufp, size_t *lenp); +void pf_part2(font_info *fi, char **bufp, size_t *lenp); +void pf_writeps(font_info const *fi, FILE *ofp); + +#endif diff --git a/app/tools/halibut/psdata.c b/app/tools/halibut/psdata.c new file mode 100644 index 0000000..4412055 --- /dev/null +++ b/app/tools/halibut/psdata.c @@ -0,0 +1,4523 @@ +/* + * Data, and supporting functions, for PostScript-based output + * formats. + */ + +#include <assert.h> +#include "halibut.h" +#include "paper.h" + +/* + * Within the paper backends, PostScript glyph names are represented + * by small integers. For standard glyphs, these are indicies into + * a table generated from the Adobe Glyph List from + * <http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt>. + * Since all the scripts that generate fragments of code for this file + * need that list, it's worth generating a file containing just the names. + +grep '^[^#;][^;]*;[^ ][^ ][^ ][^ ]$' glyphlist.txt | sort -t\; -k1,2 | \ + cut -f1 -d\; > glyphnames.txt + +< glyphnames.txt xargs printf '"%s", ' | fold -s -w68 | sed 's/^/ /'; echo + + */ +static const char *const ps_glyphs_alphabetic[] = { + "A", "AE", "AEacute", "AEmacron", "AEsmall", "Aacute", + "Aacutesmall", "Abreve", "Abreveacute", "Abrevecyrillic", + "Abrevedotbelow", "Abrevegrave", "Abrevehookabove", "Abrevetilde", + "Acaron", "Acircle", "Acircumflex", "Acircumflexacute", + "Acircumflexdotbelow", "Acircumflexgrave", "Acircumflexhookabove", + "Acircumflexsmall", "Acircumflextilde", "Acute", "Acutesmall", + "Acyrillic", "Adblgrave", "Adieresis", "Adieresiscyrillic", + "Adieresismacron", "Adieresissmall", "Adotbelow", "Adotmacron", + "Agrave", "Agravesmall", "Ahookabove", "Aiecyrillic", + "Ainvertedbreve", "Alpha", "Alphatonos", "Amacron", "Amonospace", + "Aogonek", "Aring", "Aringacute", "Aringbelow", "Aringsmall", + "Asmall", "Atilde", "Atildesmall", "Aybarmenian", "B", "Bcircle", + "Bdotaccent", "Bdotbelow", "Becyrillic", "Benarmenian", "Beta", + "Bhook", "Blinebelow", "Bmonospace", "Brevesmall", "Bsmall", + "Btopbar", "C", "Caarmenian", "Cacute", "Caron", "Caronsmall", + "Ccaron", "Ccedilla", "Ccedillaacute", "Ccedillasmall", "Ccircle", + "Ccircumflex", "Cdot", "Cdotaccent", "Cedillasmall", "Chaarmenian", + "Cheabkhasiancyrillic", "Checyrillic", + "Chedescenderabkhasiancyrillic", "Chedescendercyrillic", + "Chedieresiscyrillic", "Cheharmenian", "Chekhakassiancyrillic", + "Cheverticalstrokecyrillic", "Chi", "Chook", "Circumflexsmall", + "Cmonospace", "Coarmenian", "Csmall", "D", "DZ", "DZcaron", + "Daarmenian", "Dafrican", "Dcaron", "Dcedilla", "Dcircle", + "Dcircumflexbelow", "Dcroat", "Ddotaccent", "Ddotbelow", + "Decyrillic", "Deicoptic", "Delta", "Deltagreek", "Dhook", + "Dieresis", "DieresisAcute", "DieresisGrave", "Dieresissmall", + "Digammagreek", "Djecyrillic", "Dlinebelow", "Dmonospace", + "Dotaccentsmall", "Dslash", "Dsmall", "Dtopbar", "Dz", "Dzcaron", + "Dzeabkhasiancyrillic", "Dzecyrillic", "Dzhecyrillic", "E", + "Eacute", "Eacutesmall", "Ebreve", "Ecaron", "Ecedillabreve", + "Echarmenian", "Ecircle", "Ecircumflex", "Ecircumflexacute", + "Ecircumflexbelow", "Ecircumflexdotbelow", "Ecircumflexgrave", + "Ecircumflexhookabove", "Ecircumflexsmall", "Ecircumflextilde", + "Ecyrillic", "Edblgrave", "Edieresis", "Edieresissmall", "Edot", + "Edotaccent", "Edotbelow", "Efcyrillic", "Egrave", "Egravesmall", + "Eharmenian", "Ehookabove", "Eightroman", "Einvertedbreve", + "Eiotifiedcyrillic", "Elcyrillic", "Elevenroman", "Emacron", + "Emacronacute", "Emacrongrave", "Emcyrillic", "Emonospace", + "Encyrillic", "Endescendercyrillic", "Eng", "Enghecyrillic", + "Enhookcyrillic", "Eogonek", "Eopen", "Epsilon", "Epsilontonos", + "Ercyrillic", "Ereversed", "Ereversedcyrillic", "Escyrillic", + "Esdescendercyrillic", "Esh", "Esmall", "Eta", "Etarmenian", + "Etatonos", "Eth", "Ethsmall", "Etilde", "Etildebelow", "Euro", + "Ezh", "Ezhcaron", "Ezhreversed", "F", "Fcircle", "Fdotaccent", + "Feharmenian", "Feicoptic", "Fhook", "Fitacyrillic", "Fiveroman", + "Fmonospace", "Fourroman", "Fsmall", "G", "GBsquare", "Gacute", + "Gamma", "Gammaafrican", "Gangiacoptic", "Gbreve", "Gcaron", + "Gcedilla", "Gcircle", "Gcircumflex", "Gcommaaccent", "Gdot", + "Gdotaccent", "Gecyrillic", "Ghadarmenian", + "Ghemiddlehookcyrillic", "Ghestrokecyrillic", "Gheupturncyrillic", + "Ghook", "Gimarmenian", "Gjecyrillic", "Gmacron", "Gmonospace", + "Grave", "Gravesmall", "Gsmall", "Gsmallhook", "Gstroke", "H", + "H18533", "H18543", "H18551", "H22073", "HPsquare", + "Haabkhasiancyrillic", "Hadescendercyrillic", "Hardsigncyrillic", + "Hbar", "Hbrevebelow", "Hcedilla", "Hcircle", "Hcircumflex", + "Hdieresis", "Hdotaccent", "Hdotbelow", "Hmonospace", "Hoarmenian", + "Horicoptic", "Hsmall", "Hungarumlaut", "Hungarumlautsmall", + "Hzsquare", "I", "IAcyrillic", "IJ", "IUcyrillic", "Iacute", + "Iacutesmall", "Ibreve", "Icaron", "Icircle", "Icircumflex", + "Icircumflexsmall", "Icyrillic", "Idblgrave", "Idieresis", + "Idieresisacute", "Idieresiscyrillic", "Idieresissmall", "Idot", + "Idotaccent", "Idotbelow", "Iebrevecyrillic", "Iecyrillic", + "Ifraktur", "Igrave", "Igravesmall", "Ihookabove", "Iicyrillic", + "Iinvertedbreve", "Iishortcyrillic", "Imacron", "Imacroncyrillic", + "Imonospace", "Iniarmenian", "Iocyrillic", "Iogonek", "Iota", + "Iotaafrican", "Iotadieresis", "Iotatonos", "Ismall", "Istroke", + "Itilde", "Itildebelow", "Izhitsacyrillic", + "Izhitsadblgravecyrillic", "J", "Jaarmenian", "Jcircle", + "Jcircumflex", "Jecyrillic", "Jheharmenian", "Jmonospace", + "Jsmall", "K", "KBsquare", "KKsquare", "Kabashkircyrillic", + "Kacute", "Kacyrillic", "Kadescendercyrillic", "Kahookcyrillic", + "Kappa", "Kastrokecyrillic", "Kaverticalstrokecyrillic", "Kcaron", + "Kcedilla", "Kcircle", "Kcommaaccent", "Kdotbelow", "Keharmenian", + "Kenarmenian", "Khacyrillic", "Kheicoptic", "Khook", "Kjecyrillic", + "Klinebelow", "Kmonospace", "Koppacyrillic", "Koppagreek", + "Ksicyrillic", "Ksmall", "L", "LJ", "LL", "Lacute", "Lambda", + "Lcaron", "Lcedilla", "Lcircle", "Lcircumflexbelow", + "Lcommaaccent", "Ldot", "Ldotaccent", "Ldotbelow", + "Ldotbelowmacron", "Liwnarmenian", "Lj", "Ljecyrillic", + "Llinebelow", "Lmonospace", "Lslash", "Lslashsmall", "Lsmall", "M", + "MBsquare", "Macron", "Macronsmall", "Macute", "Mcircle", + "Mdotaccent", "Mdotbelow", "Menarmenian", "Mmonospace", "Msmall", + "Mturned", "Mu", "N", "NJ", "Nacute", "Ncaron", "Ncedilla", + "Ncircle", "Ncircumflexbelow", "Ncommaaccent", "Ndotaccent", + "Ndotbelow", "Nhookleft", "Nineroman", "Nj", "Njecyrillic", + "Nlinebelow", "Nmonospace", "Nowarmenian", "Nsmall", "Ntilde", + "Ntildesmall", "Nu", "O", "OE", "OEsmall", "Oacute", "Oacutesmall", + "Obarredcyrillic", "Obarreddieresiscyrillic", "Obreve", "Ocaron", + "Ocenteredtilde", "Ocircle", "Ocircumflex", "Ocircumflexacute", + "Ocircumflexdotbelow", "Ocircumflexgrave", "Ocircumflexhookabove", + "Ocircumflexsmall", "Ocircumflextilde", "Ocyrillic", "Odblacute", + "Odblgrave", "Odieresis", "Odieresiscyrillic", "Odieresissmall", + "Odotbelow", "Ogoneksmall", "Ograve", "Ogravesmall", "Oharmenian", + "Ohm", "Ohookabove", "Ohorn", "Ohornacute", "Ohorndotbelow", + "Ohorngrave", "Ohornhookabove", "Ohorntilde", "Ohungarumlaut", + "Oi", "Oinvertedbreve", "Omacron", "Omacronacute", "Omacrongrave", + "Omega", "Omegacyrillic", "Omegagreek", "Omegaroundcyrillic", + "Omegatitlocyrillic", "Omegatonos", "Omicron", "Omicrontonos", + "Omonospace", "Oneroman", "Oogonek", "Oogonekmacron", "Oopen", + "Oslash", "Oslashacute", "Oslashsmall", "Osmall", "Ostrokeacute", + "Otcyrillic", "Otilde", "Otildeacute", "Otildedieresis", + "Otildesmall", "P", "Pacute", "Pcircle", "Pdotaccent", + "Pecyrillic", "Peharmenian", "Pemiddlehookcyrillic", "Phi", + "Phook", "Pi", "Piwrarmenian", "Pmonospace", "Psi", "Psicyrillic", + "Psmall", "Q", "Qcircle", "Qmonospace", "Qsmall", "R", + "Raarmenian", "Racute", "Rcaron", "Rcedilla", "Rcircle", + "Rcommaaccent", "Rdblgrave", "Rdotaccent", "Rdotbelow", + "Rdotbelowmacron", "Reharmenian", "Rfraktur", "Rho", "Ringsmall", + "Rinvertedbreve", "Rlinebelow", "Rmonospace", "Rsmall", + "Rsmallinverted", "Rsmallinvertedsuperior", "S", "SF010000", + "SF020000", "SF030000", "SF040000", "SF050000", "SF060000", + "SF070000", "SF080000", "SF090000", "SF100000", "SF110000", + "SF190000", "SF200000", "SF210000", "SF220000", "SF230000", + "SF240000", "SF250000", "SF260000", "SF270000", "SF280000", + "SF360000", "SF370000", "SF380000", "SF390000", "SF400000", + "SF410000", "SF420000", "SF430000", "SF440000", "SF450000", + "SF460000", "SF470000", "SF480000", "SF490000", "SF500000", + "SF510000", "SF520000", "SF530000", "SF540000", "Sacute", + "Sacutedotaccent", "Sampigreek", "Scaron", "Scarondotaccent", + "Scaronsmall", "Scedilla", "Schwa", "Schwacyrillic", + "Schwadieresiscyrillic", "Scircle", "Scircumflex", "Scommaaccent", + "Sdotaccent", "Sdotbelow", "Sdotbelowdotaccent", "Seharmenian", + "Sevenroman", "Shaarmenian", "Shacyrillic", "Shchacyrillic", + "Sheicoptic", "Shhacyrillic", "Shimacoptic", "Sigma", "Sixroman", + "Smonospace", "Softsigncyrillic", "Ssmall", "Stigmagreek", "T", + "Tau", "Tbar", "Tcaron", "Tcedilla", "Tcircle", "Tcircumflexbelow", + "Tcommaaccent", "Tdotaccent", "Tdotbelow", "Tecyrillic", + "Tedescendercyrillic", "Tenroman", "Tetsecyrillic", "Theta", + "Thook", "Thorn", "Thornsmall", "Threeroman", "Tildesmall", + "Tiwnarmenian", "Tlinebelow", "Tmonospace", "Toarmenian", + "Tonefive", "Tonesix", "Tonetwo", "Tretroflexhook", "Tsecyrillic", + "Tshecyrillic", "Tsmall", "Twelveroman", "Tworoman", "U", "Uacute", + "Uacutesmall", "Ubreve", "Ucaron", "Ucircle", "Ucircumflex", + "Ucircumflexbelow", "Ucircumflexsmall", "Ucyrillic", "Udblacute", + "Udblgrave", "Udieresis", "Udieresisacute", "Udieresisbelow", + "Udieresiscaron", "Udieresiscyrillic", "Udieresisgrave", + "Udieresismacron", "Udieresissmall", "Udotbelow", "Ugrave", + "Ugravesmall", "Uhookabove", "Uhorn", "Uhornacute", + "Uhorndotbelow", "Uhorngrave", "Uhornhookabove", "Uhorntilde", + "Uhungarumlaut", "Uhungarumlautcyrillic", "Uinvertedbreve", + "Ukcyrillic", "Umacron", "Umacroncyrillic", "Umacrondieresis", + "Umonospace", "Uogonek", "Upsilon", "Upsilon1", + "Upsilonacutehooksymbolgreek", "Upsilonafrican", "Upsilondieresis", + "Upsilondieresishooksymbolgreek", "Upsilonhooksymbol", + "Upsilontonos", "Uring", "Ushortcyrillic", "Usmall", + "Ustraightcyrillic", "Ustraightstrokecyrillic", "Utilde", + "Utildeacute", "Utildebelow", "V", "Vcircle", "Vdotbelow", + "Vecyrillic", "Vewarmenian", "Vhook", "Vmonospace", "Voarmenian", + "Vsmall", "Vtilde", "W", "Wacute", "Wcircle", "Wcircumflex", + "Wdieresis", "Wdotaccent", "Wdotbelow", "Wgrave", "Wmonospace", + "Wsmall", "X", "Xcircle", "Xdieresis", "Xdotaccent", "Xeharmenian", + "Xi", "Xmonospace", "Xsmall", "Y", "Yacute", "Yacutesmall", + "Yatcyrillic", "Ycircle", "Ycircumflex", "Ydieresis", + "Ydieresissmall", "Ydotaccent", "Ydotbelow", "Yericyrillic", + "Yerudieresiscyrillic", "Ygrave", "Yhook", "Yhookabove", + "Yiarmenian", "Yicyrillic", "Yiwnarmenian", "Ymonospace", "Ysmall", + "Ytilde", "Yusbigcyrillic", "Yusbigiotifiedcyrillic", + "Yuslittlecyrillic", "Yuslittleiotifiedcyrillic", "Z", + "Zaarmenian", "Zacute", "Zcaron", "Zcaronsmall", "Zcircle", + "Zcircumflex", "Zdot", "Zdotaccent", "Zdotbelow", "Zecyrillic", + "Zedescendercyrillic", "Zedieresiscyrillic", "Zeta", "Zhearmenian", + "Zhebrevecyrillic", "Zhecyrillic", "Zhedescendercyrillic", + "Zhedieresiscyrillic", "Zlinebelow", "Zmonospace", "Zsmall", + "Zstroke", "a", "aabengali", "aacute", "aadeva", "aagujarati", + "aagurmukhi", "aamatragurmukhi", "aarusquare", + "aavowelsignbengali", "aavowelsigndeva", "aavowelsigngujarati", + "abbreviationmarkarmenian", "abbreviationsigndeva", "abengali", + "abopomofo", "abreve", "abreveacute", "abrevecyrillic", + "abrevedotbelow", "abrevegrave", "abrevehookabove", "abrevetilde", + "acaron", "acircle", "acircumflex", "acircumflexacute", + "acircumflexdotbelow", "acircumflexgrave", "acircumflexhookabove", + "acircumflextilde", "acute", "acutebelowcmb", "acutecmb", + "acutecomb", "acutedeva", "acutelowmod", "acutetonecmb", + "acyrillic", "adblgrave", "addakgurmukhi", "adeva", "adieresis", + "adieresiscyrillic", "adieresismacron", "adotbelow", "adotmacron", + "ae", "aeacute", "aekorean", "aemacron", "afii00208", "afii08941", + "afii10017", "afii10018", "afii10019", "afii10020", "afii10021", + "afii10022", "afii10023", "afii10024", "afii10025", "afii10026", + "afii10027", "afii10028", "afii10029", "afii10030", "afii10031", + "afii10032", "afii10033", "afii10034", "afii10035", "afii10036", + "afii10037", "afii10038", "afii10039", "afii10040", "afii10041", + "afii10042", "afii10043", "afii10044", "afii10045", "afii10046", + "afii10047", "afii10048", "afii10049", "afii10050", "afii10051", + "afii10052", "afii10053", "afii10054", "afii10055", "afii10056", + "afii10057", "afii10058", "afii10059", "afii10060", "afii10061", + "afii10062", "afii10063", "afii10064", "afii10065", "afii10066", + "afii10067", "afii10068", "afii10069", "afii10070", "afii10071", + "afii10072", "afii10073", "afii10074", "afii10075", "afii10076", + "afii10077", "afii10078", "afii10079", "afii10080", "afii10081", + "afii10082", "afii10083", "afii10084", "afii10085", "afii10086", + "afii10087", "afii10088", "afii10089", "afii10090", "afii10091", + "afii10092", "afii10093", "afii10094", "afii10095", "afii10096", + "afii10097", "afii10098", "afii10099", "afii10100", "afii10101", + "afii10102", "afii10103", "afii10104", "afii10105", "afii10106", + "afii10107", "afii10108", "afii10109", "afii10110", "afii10145", + "afii10146", "afii10147", "afii10148", "afii10192", "afii10193", + "afii10194", "afii10195", "afii10196", "afii10831", "afii10832", + "afii10846", "afii299", "afii300", "afii301", "afii57381", + "afii57388", "afii57392", "afii57393", "afii57394", "afii57395", + "afii57396", "afii57397", "afii57398", "afii57399", "afii57400", + "afii57401", "afii57403", "afii57407", "afii57409", "afii57410", + "afii57411", "afii57412", "afii57413", "afii57414", "afii57415", + "afii57416", "afii57417", "afii57418", "afii57419", "afii57420", + "afii57421", "afii57422", "afii57423", "afii57424", "afii57425", + "afii57426", "afii57427", "afii57428", "afii57429", "afii57430", + "afii57431", "afii57432", "afii57433", "afii57434", "afii57440", + "afii57441", "afii57442", "afii57443", "afii57444", "afii57445", + "afii57446", "afii57448", "afii57449", "afii57450", "afii57451", + "afii57452", "afii57453", "afii57454", "afii57455", "afii57456", + "afii57457", "afii57458", "afii57470", "afii57505", "afii57506", + "afii57507", "afii57508", "afii57509", "afii57511", "afii57512", + "afii57513", "afii57514", "afii57519", "afii57534", "afii57636", + "afii57645", "afii57658", "afii57664", "afii57665", "afii57666", + "afii57667", "afii57668", "afii57669", "afii57670", "afii57671", + "afii57672", "afii57673", "afii57674", "afii57675", "afii57676", + "afii57677", "afii57678", "afii57679", "afii57680", "afii57681", + "afii57682", "afii57683", "afii57684", "afii57685", "afii57686", + "afii57687", "afii57688", "afii57689", "afii57690", "afii57694", + "afii57695", "afii57700", "afii57705", "afii57716", "afii57717", + "afii57718", "afii57723", "afii57793", "afii57794", "afii57795", + "afii57796", "afii57797", "afii57798", "afii57799", "afii57800", + "afii57801", "afii57802", "afii57803", "afii57804", "afii57806", + "afii57807", "afii57839", "afii57841", "afii57842", "afii57929", + "afii61248", "afii61289", "afii61352", "afii61573", "afii61574", + "afii61575", "afii61664", "afii63167", "afii64937", "agrave", + "agujarati", "agurmukhi", "ahiragana", "ahookabove", "aibengali", + "aibopomofo", "aideva", "aiecyrillic", "aigujarati", "aigurmukhi", + "aimatragurmukhi", "ainarabic", "ainfinalarabic", + "aininitialarabic", "ainmedialarabic", "ainvertedbreve", + "aivowelsignbengali", "aivowelsigndeva", "aivowelsigngujarati", + "akatakana", "akatakanahalfwidth", "akorean", "alef", "alefarabic", + "alefdageshhebrew", "aleffinalarabic", "alefhamzaabovearabic", + "alefhamzaabovefinalarabic", "alefhamzabelowarabic", + "alefhamzabelowfinalarabic", "alefhebrew", "aleflamedhebrew", + "alefmaddaabovearabic", "alefmaddaabovefinalarabic", + "alefmaksuraarabic", "alefmaksurafinalarabic", + "alefmaksurainitialarabic", "alefmaksuramedialarabic", + "alefpatahhebrew", "alefqamatshebrew", "aleph", "allequal", + "alpha", "alphatonos", "amacron", "amonospace", "ampersand", + "ampersandmonospace", "ampersandsmall", "amsquare", "anbopomofo", + "angbopomofo", "angkhankhuthai", "angle", "anglebracketleft", + "anglebracketleftvertical", "anglebracketright", + "anglebracketrightvertical", "angleleft", "angleright", "angstrom", + "anoteleia", "anudattadeva", "anusvarabengali", "anusvaradeva", + "anusvaragujarati", "aogonek", "apaatosquare", "aparen", + "apostrophearmenian", "apostrophemod", "apple", "approaches", + "approxequal", "approxequalorimage", "approximatelyequal", + "araeaekorean", "araeakorean", "arc", "arighthalfring", "aring", + "aringacute", "aringbelow", "arrowboth", "arrowdashdown", + "arrowdashleft", "arrowdashright", "arrowdashup", "arrowdblboth", + "arrowdbldown", "arrowdblleft", "arrowdblright", "arrowdblup", + "arrowdown", "arrowdownleft", "arrowdownright", "arrowdownwhite", + "arrowheaddownmod", "arrowheadleftmod", "arrowheadrightmod", + "arrowheadupmod", "arrowhorizex", "arrowleft", "arrowleftdbl", + "arrowleftdblstroke", "arrowleftoverright", "arrowleftwhite", + "arrowright", "arrowrightdblstroke", "arrowrightheavy", + "arrowrightoverleft", "arrowrightwhite", "arrowtableft", + "arrowtabright", "arrowup", "arrowupdn", "arrowupdnbse", + "arrowupdownbase", "arrowupleft", "arrowupleftofdown", + "arrowupright", "arrowupwhite", "arrowvertex", "asciicircum", + "asciicircummonospace", "asciitilde", "asciitildemonospace", + "ascript", "ascriptturned", "asmallhiragana", "asmallkatakana", + "asmallkatakanahalfwidth", "asterisk", "asteriskaltonearabic", + "asteriskarabic", "asteriskmath", "asteriskmonospace", + "asterisksmall", "asterism", "asuperior", "asymptoticallyequal", + "at", "atilde", "atmonospace", "atsmall", "aturned", "aubengali", + "aubopomofo", "audeva", "augujarati", "augurmukhi", + "aulengthmarkbengali", "aumatragurmukhi", "auvowelsignbengali", + "auvowelsigndeva", "auvowelsigngujarati", "avagrahadeva", + "aybarmenian", "ayin", "ayinaltonehebrew", "ayinhebrew", "b", + "babengali", "backslash", "backslashmonospace", "badeva", + "bagujarati", "bagurmukhi", "bahiragana", "bahtthai", "bakatakana", + "bar", "barmonospace", "bbopomofo", "bcircle", "bdotaccent", + "bdotbelow", "beamedsixteenthnotes", "because", "becyrillic", + "beharabic", "behfinalarabic", "behinitialarabic", "behiragana", + "behmedialarabic", "behmeeminitialarabic", "behmeemisolatedarabic", + "behnoonfinalarabic", "bekatakana", "benarmenian", "bet", "beta", + "betasymbolgreek", "betdagesh", "betdageshhebrew", "bethebrew", + "betrafehebrew", "bhabengali", "bhadeva", "bhagujarati", + "bhagurmukhi", "bhook", "bihiragana", "bikatakana", + "bilabialclick", "bindigurmukhi", "birusquare", "blackcircle", + "blackdiamond", "blackdownpointingtriangle", + "blackleftpointingpointer", "blackleftpointingtriangle", + "blacklenticularbracketleft", "blacklenticularbracketleftvertical", + "blacklenticularbracketright", + "blacklenticularbracketrightvertical", "blacklowerlefttriangle", + "blacklowerrighttriangle", "blackrectangle", + "blackrightpointingpointer", "blackrightpointingtriangle", + "blacksmallsquare", "blacksmilingface", "blacksquare", "blackstar", + "blackupperlefttriangle", "blackupperrighttriangle", + "blackuppointingsmalltriangle", "blackuppointingtriangle", "blank", + "blinebelow", "block", "bmonospace", "bobaimaithai", "bohiragana", + "bokatakana", "bparen", "bqsquare", "braceex", "braceleft", + "braceleftbt", "braceleftmid", "braceleftmonospace", + "braceleftsmall", "bracelefttp", "braceleftvertical", "braceright", + "bracerightbt", "bracerightmid", "bracerightmonospace", + "bracerightsmall", "bracerighttp", "bracerightvertical", + "bracketleft", "bracketleftbt", "bracketleftex", + "bracketleftmonospace", "bracketlefttp", "bracketright", + "bracketrightbt", "bracketrightex", "bracketrightmonospace", + "bracketrighttp", "breve", "brevebelowcmb", "brevecmb", + "breveinvertedbelowcmb", "breveinvertedcmb", + "breveinverteddoublecmb", "bridgebelowcmb", + "bridgeinvertedbelowcmb", "brokenbar", "bstroke", "bsuperior", + "btopbar", "buhiragana", "bukatakana", "bullet", "bulletinverse", + "bulletoperator", "bullseye", "c", "caarmenian", "cabengali", + "cacute", "cadeva", "cagujarati", "cagurmukhi", "calsquare", + "candrabindubengali", "candrabinducmb", "candrabindudeva", + "candrabindugujarati", "capslock", "careof", "caron", + "caronbelowcmb", "caroncmb", "carriagereturn", "cbopomofo", + "ccaron", "ccedilla", "ccedillaacute", "ccircle", "ccircumflex", + "ccurl", "cdot", "cdotaccent", "cdsquare", "cedilla", "cedillacmb", + "cent", "centigrade", "centinferior", "centmonospace", + "centoldstyle", "centsuperior", "chaarmenian", "chabengali", + "chadeva", "chagujarati", "chagurmukhi", "chbopomofo", + "cheabkhasiancyrillic", "checkmark", "checyrillic", + "chedescenderabkhasiancyrillic", "chedescendercyrillic", + "chedieresiscyrillic", "cheharmenian", "chekhakassiancyrillic", + "cheverticalstrokecyrillic", "chi", "chieuchacirclekorean", + "chieuchaparenkorean", "chieuchcirclekorean", "chieuchkorean", + "chieuchparenkorean", "chochangthai", "chochanthai", + "chochingthai", "chochoethai", "chook", "cieucacirclekorean", + "cieucaparenkorean", "cieuccirclekorean", "cieuckorean", + "cieucparenkorean", "cieucuparenkorean", "circle", + "circlemultiply", "circleot", "circleplus", "circlepostalmark", + "circlewithlefthalfblack", "circlewithrighthalfblack", + "circumflex", "circumflexbelowcmb", "circumflexcmb", "clear", + "clickalveolar", "clickdental", "clicklateral", "clickretroflex", + "club", "clubsuitblack", "clubsuitwhite", "cmcubedsquare", + "cmonospace", "cmsquaredsquare", "coarmenian", "colon", + "colonmonetary", "colonmonospace", "colonsign", "colonsmall", + "colontriangularhalfmod", "colontriangularmod", "comma", + "commaabovecmb", "commaaboverightcmb", "commaaccent", + "commaarabic", "commaarmenian", "commainferior", "commamonospace", + "commareversedabovecmb", "commareversedmod", "commasmall", + "commasuperior", "commaturnedabovecmb", "commaturnedmod", + "compass", "congruent", "contourintegral", "control", "controlACK", + "controlBEL", "controlBS", "controlCAN", "controlCR", "controlDC1", + "controlDC2", "controlDC3", "controlDC4", "controlDEL", + "controlDLE", "controlEM", "controlENQ", "controlEOT", + "controlESC", "controlETB", "controlETX", "controlFF", "controlFS", + "controlGS", "controlHT", "controlLF", "controlNAK", "controlRS", + "controlSI", "controlSO", "controlSOT", "controlSTX", "controlSUB", + "controlSYN", "controlUS", "controlVT", "copyright", + "copyrightsans", "copyrightserif", "cornerbracketleft", + "cornerbracketlefthalfwidth", "cornerbracketleftvertical", + "cornerbracketright", "cornerbracketrighthalfwidth", + "cornerbracketrightvertical", "corporationsquare", "cosquare", + "coverkgsquare", "cparen", "cruzeiro", "cstretched", "curlyand", + "curlyor", "currency", "cyrBreve", "cyrFlex", "cyrbreve", + "cyrflex", "d", "daarmenian", "dabengali", "dadarabic", "dadeva", + "dadfinalarabic", "dadinitialarabic", "dadmedialarabic", "dagesh", + "dageshhebrew", "dagger", "daggerdbl", "dagujarati", "dagurmukhi", + "dahiragana", "dakatakana", "dalarabic", "dalet", "daletdagesh", + "daletdageshhebrew", "dalethebrew", "dalfinalarabic", + "dammaarabic", "dammalowarabic", "dammatanaltonearabic", + "dammatanarabic", "danda", "dargahebrew", "dargalefthebrew", + "dasiapneumatacyrilliccmb", "dblGrave", "dblanglebracketleft", + "dblanglebracketleftvertical", "dblanglebracketright", + "dblanglebracketrightvertical", "dblarchinvertedbelowcmb", + "dblarrowleft", "dblarrowright", "dbldanda", "dblgrave", + "dblgravecmb", "dblintegral", "dbllowline", "dbllowlinecmb", + "dbloverlinecmb", "dblprimemod", "dblverticalbar", + "dblverticallineabovecmb", "dbopomofo", "dbsquare", "dcaron", + "dcedilla", "dcircle", "dcircumflexbelow", "dcroat", "ddabengali", + "ddadeva", "ddagujarati", "ddagurmukhi", "ddalarabic", + "ddalfinalarabic", "dddhadeva", "ddhabengali", "ddhadeva", + "ddhagujarati", "ddhagurmukhi", "ddotaccent", "ddotbelow", + "decimalseparatorarabic", "decimalseparatorpersian", "decyrillic", + "degree", "dehihebrew", "dehiragana", "deicoptic", "dekatakana", + "deleteleft", "deleteright", "delta", "deltaturned", + "denominatorminusonenumeratorbengali", "dezh", "dhabengali", + "dhadeva", "dhagujarati", "dhagurmukhi", "dhook", "dialytikatonos", + "dialytikatonoscmb", "diamond", "diamondsuitwhite", "dieresis", + "dieresisacute", "dieresisbelowcmb", "dieresiscmb", + "dieresisgrave", "dieresistonos", "dihiragana", "dikatakana", + "dittomark", "divide", "divides", "divisionslash", "djecyrillic", + "dkshade", "dlinebelow", "dlsquare", "dmacron", "dmonospace", + "dnblock", "dochadathai", "dodekthai", "dohiragana", "dokatakana", + "dollar", "dollarinferior", "dollarmonospace", "dollaroldstyle", + "dollarsmall", "dollarsuperior", "dong", "dorusquare", "dotaccent", + "dotaccentcmb", "dotbelowcmb", "dotbelowcomb", "dotkatakana", + "dotlessi", "dotlessj", "dotlessjstrokehook", "dotmath", + "dottedcircle", "doubleyodpatah", "doubleyodpatahhebrew", + "downtackbelowcmb", "downtackmod", "dparen", "dsuperior", "dtail", + "dtopbar", "duhiragana", "dukatakana", "dz", "dzaltone", "dzcaron", + "dzcurl", "dzeabkhasiancyrillic", "dzecyrillic", "dzhecyrillic", + "e", "eacute", "earth", "ebengali", "ebopomofo", "ebreve", + "ecandradeva", "ecandragujarati", "ecandravowelsigndeva", + "ecandravowelsigngujarati", "ecaron", "ecedillabreve", + "echarmenian", "echyiwnarmenian", "ecircle", "ecircumflex", + "ecircumflexacute", "ecircumflexbelow", "ecircumflexdotbelow", + "ecircumflexgrave", "ecircumflexhookabove", "ecircumflextilde", + "ecyrillic", "edblgrave", "edeva", "edieresis", "edot", + "edotaccent", "edotbelow", "eegurmukhi", "eematragurmukhi", + "efcyrillic", "egrave", "egujarati", "eharmenian", "ehbopomofo", + "ehiragana", "ehookabove", "eibopomofo", "eight", "eightarabic", + "eightbengali", "eightcircle", "eightcircleinversesansserif", + "eightdeva", "eighteencircle", "eighteenparen", "eighteenperiod", + "eightgujarati", "eightgurmukhi", "eighthackarabic", + "eighthangzhou", "eighthnotebeamed", "eightideographicparen", + "eightinferior", "eightmonospace", "eightoldstyle", "eightparen", + "eightperiod", "eightpersian", "eightroman", "eightsuperior", + "eightthai", "einvertedbreve", "eiotifiedcyrillic", "ekatakana", + "ekatakanahalfwidth", "ekonkargurmukhi", "ekorean", "elcyrillic", + "element", "elevencircle", "elevenparen", "elevenperiod", + "elevenroman", "ellipsis", "ellipsisvertical", "emacron", + "emacronacute", "emacrongrave", "emcyrillic", "emdash", + "emdashvertical", "emonospace", "emphasismarkarmenian", "emptyset", + "enbopomofo", "encyrillic", "endash", "endashvertical", + "endescendercyrillic", "eng", "engbopomofo", "enghecyrillic", + "enhookcyrillic", "enspace", "eogonek", "eokorean", "eopen", + "eopenclosed", "eopenreversed", "eopenreversedclosed", + "eopenreversedhook", "eparen", "epsilon", "epsilontonos", "equal", + "equalmonospace", "equalsmall", "equalsuperior", "equivalence", + "erbopomofo", "ercyrillic", "ereversed", "ereversedcyrillic", + "escyrillic", "esdescendercyrillic", "esh", "eshcurl", + "eshortdeva", "eshortvowelsigndeva", "eshreversedloop", + "eshsquatreversed", "esmallhiragana", "esmallkatakana", + "esmallkatakanahalfwidth", "estimated", "esuperior", "eta", + "etarmenian", "etatonos", "eth", "etilde", "etildebelow", + "etnahtafoukhhebrew", "etnahtafoukhlefthebrew", "etnahtahebrew", + "etnahtalefthebrew", "eturned", "eukorean", "euro", + "evowelsignbengali", "evowelsigndeva", "evowelsigngujarati", + "exclam", "exclamarmenian", "exclamdbl", "exclamdown", + "exclamdownsmall", "exclammonospace", "exclamsmall", "existential", + "ezh", "ezhcaron", "ezhcurl", "ezhreversed", "ezhtail", "f", + "fadeva", "fagurmukhi", "fahrenheit", "fathaarabic", + "fathalowarabic", "fathatanarabic", "fbopomofo", "fcircle", + "fdotaccent", "feharabic", "feharmenian", "fehfinalarabic", + "fehinitialarabic", "fehmedialarabic", "feicoptic", "female", "ff", + "ffi", "ffl", "fi", "fifteencircle", "fifteenparen", + "fifteenperiod", "figuredash", "filledbox", "filledrect", + "finalkaf", "finalkafdagesh", "finalkafdageshhebrew", + "finalkafhebrew", "finalmem", "finalmemhebrew", "finalnun", + "finalnunhebrew", "finalpe", "finalpehebrew", "finaltsadi", + "finaltsadihebrew", "firsttonechinese", "fisheye", "fitacyrillic", + "five", "fivearabic", "fivebengali", "fivecircle", + "fivecircleinversesansserif", "fivedeva", "fiveeighths", + "fivegujarati", "fivegurmukhi", "fivehackarabic", "fivehangzhou", + "fiveideographicparen", "fiveinferior", "fivemonospace", + "fiveoldstyle", "fiveparen", "fiveperiod", "fivepersian", + "fiveroman", "fivesuperior", "fivethai", "fl", "florin", + "fmonospace", "fmsquare", "fofanthai", "fofathai", "fongmanthai", + "forall", "four", "fourarabic", "fourbengali", "fourcircle", + "fourcircleinversesansserif", "fourdeva", "fourgujarati", + "fourgurmukhi", "fourhackarabic", "fourhangzhou", + "fourideographicparen", "fourinferior", "fourmonospace", + "fournumeratorbengali", "fouroldstyle", "fourparen", "fourperiod", + "fourpersian", "fourroman", "foursuperior", "fourteencircle", + "fourteenparen", "fourteenperiod", "fourthai", "fourthtonechinese", + "fparen", "fraction", "franc", "g", "gabengali", "gacute", + "gadeva", "gafarabic", "gaffinalarabic", "gafinitialarabic", + "gafmedialarabic", "gagujarati", "gagurmukhi", "gahiragana", + "gakatakana", "gamma", "gammalatinsmall", "gammasuperior", + "gangiacoptic", "gbopomofo", "gbreve", "gcaron", "gcedilla", + "gcircle", "gcircumflex", "gcommaaccent", "gdot", "gdotaccent", + "gecyrillic", "gehiragana", "gekatakana", "geometricallyequal", + "gereshaccenthebrew", "gereshhebrew", "gereshmuqdamhebrew", + "germandbls", "gershayimaccenthebrew", "gershayimhebrew", + "getamark", "ghabengali", "ghadarmenian", "ghadeva", "ghagujarati", + "ghagurmukhi", "ghainarabic", "ghainfinalarabic", + "ghaininitialarabic", "ghainmedialarabic", "ghemiddlehookcyrillic", + "ghestrokecyrillic", "gheupturncyrillic", "ghhadeva", + "ghhagurmukhi", "ghook", "ghzsquare", "gihiragana", "gikatakana", + "gimarmenian", "gimel", "gimeldagesh", "gimeldageshhebrew", + "gimelhebrew", "gjecyrillic", "glottalinvertedstroke", + "glottalstop", "glottalstopinverted", "glottalstopmod", + "glottalstopreversed", "glottalstopreversedmod", + "glottalstopreversedsuperior", "glottalstopstroke", + "glottalstopstrokereversed", "gmacron", "gmonospace", "gohiragana", + "gokatakana", "gparen", "gpasquare", "gradient", "grave", + "gravebelowcmb", "gravecmb", "gravecomb", "gravedeva", + "gravelowmod", "gravemonospace", "gravetonecmb", "greater", + "greaterequal", "greaterequalorless", "greatermonospace", + "greaterorequivalent", "greaterorless", "greateroverequal", + "greatersmall", "gscript", "gstroke", "guhiragana", + "guillemotleft", "guillemotright", "guilsinglleft", + "guilsinglright", "gukatakana", "guramusquare", "gysquare", "h", + "haabkhasiancyrillic", "haaltonearabic", "habengali", + "hadescendercyrillic", "hadeva", "hagujarati", "hagurmukhi", + "haharabic", "hahfinalarabic", "hahinitialarabic", "hahiragana", + "hahmedialarabic", "haitusquare", "hakatakana", + "hakatakanahalfwidth", "halantgurmukhi", "hamzaarabic", + "hamzalowarabic", "hangulfiller", "hardsigncyrillic", + "harpoonleftbarbup", "harpoonrightbarbup", "hasquare", + "hatafpatah", "hatafpatah16", "hatafpatah23", "hatafpatah2f", + "hatafpatahhebrew", "hatafpatahnarrowhebrew", + "hatafpatahquarterhebrew", "hatafpatahwidehebrew", "hatafqamats", + "hatafqamats1b", "hatafqamats28", "hatafqamats34", + "hatafqamatshebrew", "hatafqamatsnarrowhebrew", + "hatafqamatsquarterhebrew", "hatafqamatswidehebrew", "hatafsegol", + "hatafsegol17", "hatafsegol24", "hatafsegol30", "hatafsegolhebrew", + "hatafsegolnarrowhebrew", "hatafsegolquarterhebrew", + "hatafsegolwidehebrew", "hbar", "hbopomofo", "hbrevebelow", + "hcedilla", "hcircle", "hcircumflex", "hdieresis", "hdotaccent", + "hdotbelow", "he", "heart", "heartsuitblack", "heartsuitwhite", + "hedagesh", "hedageshhebrew", "hehaltonearabic", "heharabic", + "hehebrew", "hehfinalaltonearabic", "hehfinalalttwoarabic", + "hehfinalarabic", "hehhamzaabovefinalarabic", + "hehhamzaaboveisolatedarabic", "hehinitialaltonearabic", + "hehinitialarabic", "hehiragana", "hehmedialaltonearabic", + "hehmedialarabic", "heiseierasquare", "hekatakana", + "hekatakanahalfwidth", "hekutaarusquare", "henghook", + "herutusquare", "het", "hethebrew", "hhook", "hhooksuperior", + "hieuhacirclekorean", "hieuhaparenkorean", "hieuhcirclekorean", + "hieuhkorean", "hieuhparenkorean", "hihiragana", "hikatakana", + "hikatakanahalfwidth", "hiriq", "hiriq14", "hiriq21", "hiriq2d", + "hiriqhebrew", "hiriqnarrowhebrew", "hiriqquarterhebrew", + "hiriqwidehebrew", "hlinebelow", "hmonospace", "hoarmenian", + "hohipthai", "hohiragana", "hokatakana", "hokatakanahalfwidth", + "holam", "holam19", "holam26", "holam32", "holamhebrew", + "holamnarrowhebrew", "holamquarterhebrew", "holamwidehebrew", + "honokhukthai", "hookabovecomb", "hookcmb", + "hookpalatalizedbelowcmb", "hookretroflexbelowcmb", "hoonsquare", + "horicoptic", "horizontalbar", "horncmb", "hotsprings", "house", + "hparen", "hsuperior", "hturned", "huhiragana", "huiitosquare", + "hukatakana", "hukatakanahalfwidth", "hungarumlaut", + "hungarumlautcmb", "hv", "hyphen", "hypheninferior", + "hyphenmonospace", "hyphensmall", "hyphensuperior", "hyphentwo", + "i", "iacute", "iacyrillic", "ibengali", "ibopomofo", "ibreve", + "icaron", "icircle", "icircumflex", "icyrillic", "idblgrave", + "ideographearthcircle", "ideographfirecircle", + "ideographicallianceparen", "ideographiccallparen", + "ideographiccentrecircle", "ideographicclose", "ideographiccomma", + "ideographiccommaleft", "ideographiccongratulationparen", + "ideographiccorrectcircle", "ideographicearthparen", + "ideographicenterpriseparen", "ideographicexcellentcircle", + "ideographicfestivalparen", "ideographicfinancialcircle", + "ideographicfinancialparen", "ideographicfireparen", + "ideographichaveparen", "ideographichighcircle", + "ideographiciterationmark", "ideographiclaborcircle", + "ideographiclaborparen", "ideographicleftcircle", + "ideographiclowcircle", "ideographicmedicinecircle", + "ideographicmetalparen", "ideographicmoonparen", + "ideographicnameparen", "ideographicperiod", + "ideographicprintcircle", "ideographicreachparen", + "ideographicrepresentparen", "ideographicresourceparen", + "ideographicrightcircle", "ideographicsecretcircle", + "ideographicselfparen", "ideographicsocietyparen", + "ideographicspace", "ideographicspecialparen", + "ideographicstockparen", "ideographicstudyparen", + "ideographicsunparen", "ideographicsuperviseparen", + "ideographicwaterparen", "ideographicwoodparen", "ideographiczero", + "ideographmetalcircle", "ideographmooncircle", + "ideographnamecircle", "ideographsuncircle", + "ideographwatercircle", "ideographwoodcircle", "ideva", + "idieresis", "idieresisacute", "idieresiscyrillic", "idotbelow", + "iebrevecyrillic", "iecyrillic", "ieungacirclekorean", + "ieungaparenkorean", "ieungcirclekorean", "ieungkorean", + "ieungparenkorean", "igrave", "igujarati", "igurmukhi", + "ihiragana", "ihookabove", "iibengali", "iicyrillic", "iideva", + "iigujarati", "iigurmukhi", "iimatragurmukhi", "iinvertedbreve", + "iishortcyrillic", "iivowelsignbengali", "iivowelsigndeva", + "iivowelsigngujarati", "ij", "ikatakana", "ikatakanahalfwidth", + "ikorean", "ilde", "iluyhebrew", "imacron", "imacroncyrillic", + "imageorapproximatelyequal", "imatragurmukhi", "imonospace", + "increment", "infinity", "iniarmenian", "integral", + "integralbottom", "integralbt", "integralex", "integraltop", + "integraltp", "intersection", "intisquare", "invbullet", + "invcircle", "invsmileface", "iocyrillic", "iogonek", "iota", + "iotadieresis", "iotadieresistonos", "iotalatin", "iotatonos", + "iparen", "irigurmukhi", "ismallhiragana", "ismallkatakana", + "ismallkatakanahalfwidth", "issharbengali", "istroke", "isuperior", + "iterationhiragana", "iterationkatakana", "itilde", "itildebelow", + "iubopomofo", "iucyrillic", "ivowelsignbengali", "ivowelsigndeva", + "ivowelsigngujarati", "izhitsacyrillic", "izhitsadblgravecyrillic", + "j", "jaarmenian", "jabengali", "jadeva", "jagujarati", + "jagurmukhi", "jbopomofo", "jcaron", "jcircle", "jcircumflex", + "jcrossedtail", "jdotlessstroke", "jecyrillic", "jeemarabic", + "jeemfinalarabic", "jeeminitialarabic", "jeemmedialarabic", + "jeharabic", "jehfinalarabic", "jhabengali", "jhadeva", + "jhagujarati", "jhagurmukhi", "jheharmenian", "jis", "jmonospace", + "jparen", "jsuperior", "k", "kabashkircyrillic", "kabengali", + "kacute", "kacyrillic", "kadescendercyrillic", "kadeva", "kaf", + "kafarabic", "kafdagesh", "kafdageshhebrew", "kaffinalarabic", + "kafhebrew", "kafinitialarabic", "kafmedialarabic", + "kafrafehebrew", "kagujarati", "kagurmukhi", "kahiragana", + "kahookcyrillic", "kakatakana", "kakatakanahalfwidth", "kappa", + "kappasymbolgreek", "kapyeounmieumkorean", "kapyeounphieuphkorean", + "kapyeounpieupkorean", "kapyeounssangpieupkorean", "karoriisquare", + "kashidaautoarabic", "kashidaautonosidebearingarabic", + "kasmallkatakana", "kasquare", "kasraarabic", "kasratanarabic", + "kastrokecyrillic", "katahiraprolongmarkhalfwidth", + "kaverticalstrokecyrillic", "kbopomofo", "kcalsquare", "kcaron", + "kcedilla", "kcircle", "kcommaaccent", "kdotbelow", "keharmenian", + "kehiragana", "kekatakana", "kekatakanahalfwidth", "kenarmenian", + "kesmallkatakana", "kgreenlandic", "khabengali", "khacyrillic", + "khadeva", "khagujarati", "khagurmukhi", "khaharabic", + "khahfinalarabic", "khahinitialarabic", "khahmedialarabic", + "kheicoptic", "khhadeva", "khhagurmukhi", "khieukhacirclekorean", + "khieukhaparenkorean", "khieukhcirclekorean", "khieukhkorean", + "khieukhparenkorean", "khokhaithai", "khokhonthai", "khokhuatthai", + "khokhwaithai", "khomutthai", "khook", "khorakhangthai", + "khzsquare", "kihiragana", "kikatakana", "kikatakanahalfwidth", + "kiroguramusquare", "kiromeetorusquare", "kirosquare", + "kiyeokacirclekorean", "kiyeokaparenkorean", "kiyeokcirclekorean", + "kiyeokkorean", "kiyeokparenkorean", "kiyeoksioskorean", + "kjecyrillic", "klinebelow", "klsquare", "kmcubedsquare", + "kmonospace", "kmsquaredsquare", "kohiragana", "kohmsquare", + "kokaithai", "kokatakana", "kokatakanahalfwidth", "kooposquare", + "koppacyrillic", "koreanstandardsymbol", "koroniscmb", "kparen", + "kpasquare", "ksicyrillic", "ktsquare", "kturned", "kuhiragana", + "kukatakana", "kukatakanahalfwidth", "kvsquare", "kwsquare", "l", + "labengali", "lacute", "ladeva", "lagujarati", "lagurmukhi", + "lakkhangyaothai", "lamaleffinalarabic", + "lamalefhamzaabovefinalarabic", "lamalefhamzaaboveisolatedarabic", + "lamalefhamzabelowfinalarabic", "lamalefhamzabelowisolatedarabic", + "lamalefisolatedarabic", "lamalefmaddaabovefinalarabic", + "lamalefmaddaaboveisolatedarabic", "lamarabic", "lambda", + "lambdastroke", "lamed", "lameddagesh", "lameddageshhebrew", + "lamedhebrew", "lamfinalarabic", "lamhahinitialarabic", + "laminitialarabic", "lamjeeminitialarabic", "lamkhahinitialarabic", + "lamlamhehisolatedarabic", "lammedialarabic", + "lammeemhahinitialarabic", "lammeeminitialarabic", "largecircle", + "lbar", "lbelt", "lbopomofo", "lcaron", "lcedilla", "lcircle", + "lcircumflexbelow", "lcommaaccent", "ldot", "ldotaccent", + "ldotbelow", "ldotbelowmacron", "leftangleabovecmb", + "lefttackbelowcmb", "less", "lessequal", "lessequalorgreater", + "lessmonospace", "lessorequivalent", "lessorgreater", + "lessoverequal", "lesssmall", "lezh", "lfblock", "lhookretroflex", + "lira", "liwnarmenian", "lj", "ljecyrillic", "ll", "lladeva", + "llagujarati", "llinebelow", "llladeva", "llvocalicbengali", + "llvocalicdeva", "llvocalicvowelsignbengali", + "llvocalicvowelsigndeva", "lmiddletilde", "lmonospace", "lmsquare", + "lochulathai", "logicaland", "logicalnot", "logicalnotreversed", + "logicalor", "lolingthai", "longs", "lowlinecenterline", + "lowlinecmb", "lowlinedashed", "lozenge", "lparen", "lslash", + "lsquare", "lsuperior", "ltshade", "luthai", "lvocalicbengali", + "lvocalicdeva", "lvocalicvowelsignbengali", + "lvocalicvowelsigndeva", "lxsquare", "m", "mabengali", "macron", + "macronbelowcmb", "macroncmb", "macronlowmod", "macronmonospace", + "macute", "madeva", "magujarati", "magurmukhi", "mahapakhhebrew", + "mahapakhlefthebrew", "mahiragana", "maichattawalowleftthai", + "maichattawalowrightthai", "maichattawathai", + "maichattawaupperleftthai", "maieklowleftthai", + "maieklowrightthai", "maiekthai", "maiekupperleftthai", + "maihanakatleftthai", "maihanakatthai", "maitaikhuleftthai", + "maitaikhuthai", "maitholowleftthai", "maitholowrightthai", + "maithothai", "maithoupperleftthai", "maitrilowleftthai", + "maitrilowrightthai", "maitrithai", "maitriupperleftthai", + "maiyamokthai", "makatakana", "makatakanahalfwidth", "male", + "mansyonsquare", "maqafhebrew", "mars", "masoracirclehebrew", + "masquare", "mbopomofo", "mbsquare", "mcircle", "mcubedsquare", + "mdotaccent", "mdotbelow", "meemarabic", "meemfinalarabic", + "meeminitialarabic", "meemmedialarabic", "meemmeeminitialarabic", + "meemmeemisolatedarabic", "meetorusquare", "mehiragana", + "meizierasquare", "mekatakana", "mekatakanahalfwidth", "mem", + "memdagesh", "memdageshhebrew", "memhebrew", "menarmenian", + "merkhahebrew", "merkhakefulahebrew", "merkhakefulalefthebrew", + "merkhalefthebrew", "mhook", "mhzsquare", + "middledotkatakanahalfwidth", "middot", "mieumacirclekorean", + "mieumaparenkorean", "mieumcirclekorean", "mieumkorean", + "mieumpansioskorean", "mieumparenkorean", "mieumpieupkorean", + "mieumsioskorean", "mihiragana", "mikatakana", + "mikatakanahalfwidth", "minus", "minusbelowcmb", "minuscircle", + "minusmod", "minusplus", "minute", "miribaarusquare", "mirisquare", + "mlonglegturned", "mlsquare", "mmcubedsquare", "mmonospace", + "mmsquaredsquare", "mohiragana", "mohmsquare", "mokatakana", + "mokatakanahalfwidth", "molsquare", "momathai", "moverssquare", + "moverssquaredsquare", "mparen", "mpasquare", "mssquare", + "msuperior", "mturned", "mu", "mu1", "muasquare", "muchgreater", + "muchless", "mufsquare", "mugreek", "mugsquare", "muhiragana", + "mukatakana", "mukatakanahalfwidth", "mulsquare", "multiply", + "mumsquare", "munahhebrew", "munahlefthebrew", "musicalnote", + "musicalnotedbl", "musicflatsign", "musicsharpsign", "mussquare", + "muvsquare", "muwsquare", "mvmegasquare", "mvsquare", + "mwmegasquare", "mwsquare", "n", "nabengali", "nabla", "nacute", + "nadeva", "nagujarati", "nagurmukhi", "nahiragana", "nakatakana", + "nakatakanahalfwidth", "napostrophe", "nasquare", "nbopomofo", + "nbspace", "ncaron", "ncedilla", "ncircle", "ncircumflexbelow", + "ncommaaccent", "ndotaccent", "ndotbelow", "nehiragana", + "nekatakana", "nekatakanahalfwidth", "newsheqelsign", "nfsquare", + "ngabengali", "ngadeva", "ngagujarati", "ngagurmukhi", + "ngonguthai", "nhiragana", "nhookleft", "nhookretroflex", + "nieunacirclekorean", "nieunaparenkorean", "nieuncieuckorean", + "nieuncirclekorean", "nieunhieuhkorean", "nieunkorean", + "nieunpansioskorean", "nieunparenkorean", "nieunsioskorean", + "nieuntikeutkorean", "nihiragana", "nikatakana", + "nikatakanahalfwidth", "nikhahitleftthai", "nikhahitthai", "nine", + "ninearabic", "ninebengali", "ninecircle", + "ninecircleinversesansserif", "ninedeva", "ninegujarati", + "ninegurmukhi", "ninehackarabic", "ninehangzhou", + "nineideographicparen", "nineinferior", "ninemonospace", + "nineoldstyle", "nineparen", "nineperiod", "ninepersian", + "nineroman", "ninesuperior", "nineteencircle", "nineteenparen", + "nineteenperiod", "ninethai", "nj", "njecyrillic", "nkatakana", + "nkatakanahalfwidth", "nlegrightlong", "nlinebelow", "nmonospace", + "nmsquare", "nnabengali", "nnadeva", "nnagujarati", "nnagurmukhi", + "nnnadeva", "nohiragana", "nokatakana", "nokatakanahalfwidth", + "nonbreakingspace", "nonenthai", "nonuthai", "noonarabic", + "noonfinalarabic", "noonghunnaarabic", "noonghunnafinalarabic", + "nooninitialarabic", "noonjeeminitialarabic", + "noonjeemisolatedarabic", "noonmedialarabic", + "noonmeeminitialarabic", "noonmeemisolatedarabic", + "noonnoonfinalarabic", "notcontains", "notelement", "notelementof", + "notequal", "notgreater", "notgreaternorequal", + "notgreaternorless", "notidentical", "notless", "notlessnorequal", + "notparallel", "notprecedes", "notsubset", "notsucceeds", + "notsuperset", "nowarmenian", "nparen", "nssquare", "nsuperior", + "ntilde", "nu", "nuhiragana", "nukatakana", "nukatakanahalfwidth", + "nuktabengali", "nuktadeva", "nuktagujarati", "nuktagurmukhi", + "numbersign", "numbersignmonospace", "numbersignsmall", + "numeralsigngreek", "numeralsignlowergreek", "numero", "nun", + "nundagesh", "nundageshhebrew", "nunhebrew", "nvsquare", + "nwsquare", "nyabengali", "nyadeva", "nyagujarati", "nyagurmukhi", + "o", "oacute", "oangthai", "obarred", "obarredcyrillic", + "obarreddieresiscyrillic", "obengali", "obopomofo", "obreve", + "ocandradeva", "ocandragujarati", "ocandravowelsigndeva", + "ocandravowelsigngujarati", "ocaron", "ocircle", "ocircumflex", + "ocircumflexacute", "ocircumflexdotbelow", "ocircumflexgrave", + "ocircumflexhookabove", "ocircumflextilde", "ocyrillic", + "odblacute", "odblgrave", "odeva", "odieresis", + "odieresiscyrillic", "odotbelow", "oe", "oekorean", "ogonek", + "ogonekcmb", "ograve", "ogujarati", "oharmenian", "ohiragana", + "ohookabove", "ohorn", "ohornacute", "ohorndotbelow", "ohorngrave", + "ohornhookabove", "ohorntilde", "ohungarumlaut", "oi", + "oinvertedbreve", "okatakana", "okatakanahalfwidth", "okorean", + "olehebrew", "omacron", "omacronacute", "omacrongrave", "omdeva", + "omega", "omega1", "omegacyrillic", "omegalatinclosed", + "omegaroundcyrillic", "omegatitlocyrillic", "omegatonos", + "omgujarati", "omicron", "omicrontonos", "omonospace", "one", + "onearabic", "onebengali", "onecircle", + "onecircleinversesansserif", "onedeva", "onedotenleader", + "oneeighth", "onefitted", "onegujarati", "onegurmukhi", + "onehackarabic", "onehalf", "onehangzhou", "oneideographicparen", + "oneinferior", "onemonospace", "onenumeratorbengali", + "oneoldstyle", "oneparen", "oneperiod", "onepersian", "onequarter", + "oneroman", "onesuperior", "onethai", "onethird", "oogonek", + "oogonekmacron", "oogurmukhi", "oomatragurmukhi", "oopen", + "oparen", "openbullet", "option", "ordfeminine", "ordmasculine", + "orthogonal", "oshortdeva", "oshortvowelsigndeva", "oslash", + "oslashacute", "osmallhiragana", "osmallkatakana", + "osmallkatakanahalfwidth", "ostrokeacute", "osuperior", + "otcyrillic", "otilde", "otildeacute", "otildedieresis", + "oubopomofo", "overline", "overlinecenterline", "overlinecmb", + "overlinedashed", "overlinedblwavy", "overlinewavy", "overscore", + "ovowelsignbengali", "ovowelsigndeva", "ovowelsigngujarati", "p", + "paampssquare", "paasentosquare", "pabengali", "pacute", "padeva", + "pagedown", "pageup", "pagujarati", "pagurmukhi", "pahiragana", + "paiyannoithai", "pakatakana", "palatalizationcyrilliccmb", + "palochkacyrillic", "pansioskorean", "paragraph", "parallel", + "parenleft", "parenleftaltonearabic", "parenleftbt", "parenleftex", + "parenleftinferior", "parenleftmonospace", "parenleftsmall", + "parenleftsuperior", "parenlefttp", "parenleftvertical", + "parenright", "parenrightaltonearabic", "parenrightbt", + "parenrightex", "parenrightinferior", "parenrightmonospace", + "parenrightsmall", "parenrightsuperior", "parenrighttp", + "parenrightvertical", "partialdiff", "paseqhebrew", "pashtahebrew", + "pasquare", "patah", "patah11", "patah1d", "patah2a", + "patahhebrew", "patahnarrowhebrew", "patahquarterhebrew", + "patahwidehebrew", "pazerhebrew", "pbopomofo", "pcircle", + "pdotaccent", "pe", "pecyrillic", "pedagesh", "pedageshhebrew", + "peezisquare", "pefinaldageshhebrew", "peharabic", "peharmenian", + "pehebrew", "pehfinalarabic", "pehinitialarabic", "pehiragana", + "pehmedialarabic", "pekatakana", "pemiddlehookcyrillic", + "perafehebrew", "percent", "percentarabic", "percentmonospace", + "percentsmall", "period", "periodarmenian", "periodcentered", + "periodhalfwidth", "periodinferior", "periodmonospace", + "periodsmall", "periodsuperior", "perispomenigreekcmb", + "perpendicular", "perthousand", "peseta", "pfsquare", "phabengali", + "phadeva", "phagujarati", "phagurmukhi", "phi", "phi1", + "phieuphacirclekorean", "phieuphaparenkorean", + "phieuphcirclekorean", "phieuphkorean", "phieuphparenkorean", + "philatin", "phinthuthai", "phisymbolgreek", "phook", + "phophanthai", "phophungthai", "phosamphaothai", "pi", + "pieupacirclekorean", "pieupaparenkorean", "pieupcieuckorean", + "pieupcirclekorean", "pieupkiyeokkorean", "pieupkorean", + "pieupparenkorean", "pieupsioskiyeokkorean", "pieupsioskorean", + "pieupsiostikeutkorean", "pieupthieuthkorean", "pieuptikeutkorean", + "pihiragana", "pikatakana", "pisymbolgreek", "piwrarmenian", + "plus", "plusbelowcmb", "pluscircle", "plusminus", "plusmod", + "plusmonospace", "plussmall", "plussuperior", "pmonospace", + "pmsquare", "pohiragana", "pointingindexdownwhite", + "pointingindexleftwhite", "pointingindexrightwhite", + "pointingindexupwhite", "pokatakana", "poplathai", "postalmark", + "postalmarkface", "pparen", "precedes", "prescription", "primemod", + "primereversed", "product", "projective", "prolongedkana", + "propellor", "propersubset", "propersuperset", "proportion", + "proportional", "psi", "psicyrillic", "psilipneumatacyrilliccmb", + "pssquare", "puhiragana", "pukatakana", "pvsquare", "pwsquare", + "q", "qadeva", "qadmahebrew", "qafarabic", "qaffinalarabic", + "qafinitialarabic", "qafmedialarabic", "qamats", "qamats10", + "qamats1a", "qamats1c", "qamats27", "qamats29", "qamats33", + "qamatsde", "qamatshebrew", "qamatsnarrowhebrew", + "qamatsqatanhebrew", "qamatsqatannarrowhebrew", + "qamatsqatanquarterhebrew", "qamatsqatanwidehebrew", + "qamatsquarterhebrew", "qamatswidehebrew", "qarneyparahebrew", + "qbopomofo", "qcircle", "qhook", "qmonospace", "qof", "qofdagesh", + "qofdageshhebrew", "qofhebrew", "qparen", "quarternote", "qubuts", + "qubuts18", "qubuts25", "qubuts31", "qubutshebrew", + "qubutsnarrowhebrew", "qubutsquarterhebrew", "qubutswidehebrew", + "question", "questionarabic", "questionarmenian", "questiondown", + "questiondownsmall", "questiongreek", "questionmonospace", + "questionsmall", "quotedbl", "quotedblbase", "quotedblleft", + "quotedblmonospace", "quotedblprime", "quotedblprimereversed", + "quotedblright", "quoteleft", "quoteleftreversed", "quotereversed", + "quoteright", "quoterightn", "quotesinglbase", "quotesingle", + "quotesinglemonospace", "r", "raarmenian", "rabengali", "racute", + "radeva", "radical", "radicalex", "radoverssquare", + "radoverssquaredsquare", "radsquare", "rafe", "rafehebrew", + "ragujarati", "ragurmukhi", "rahiragana", "rakatakana", + "rakatakanahalfwidth", "ralowerdiagonalbengali", + "ramiddlediagonalbengali", "ramshorn", "ratio", "rbopomofo", + "rcaron", "rcedilla", "rcircle", "rcommaaccent", "rdblgrave", + "rdotaccent", "rdotbelow", "rdotbelowmacron", "referencemark", + "reflexsubset", "reflexsuperset", "registered", "registersans", + "registerserif", "reharabic", "reharmenian", "rehfinalarabic", + "rehiragana", "rekatakana", "rekatakanahalfwidth", "resh", + "reshdageshhebrew", "reshhebrew", "reversedtilde", "reviahebrew", + "reviamugrashhebrew", "revlogicalnot", "rfishhook", + "rfishhookreversed", "rhabengali", "rhadeva", "rho", "rhook", + "rhookturned", "rhookturnedsuperior", "rhosymbolgreek", + "rhotichookmod", "rieulacirclekorean", "rieulaparenkorean", + "rieulcirclekorean", "rieulhieuhkorean", "rieulkiyeokkorean", + "rieulkiyeoksioskorean", "rieulkorean", "rieulmieumkorean", + "rieulpansioskorean", "rieulparenkorean", "rieulphieuphkorean", + "rieulpieupkorean", "rieulpieupsioskorean", "rieulsioskorean", + "rieulthieuthkorean", "rieultikeutkorean", + "rieulyeorinhieuhkorean", "rightangle", "righttackbelowcmb", + "righttriangle", "rihiragana", "rikatakana", "rikatakanahalfwidth", + "ring", "ringbelowcmb", "ringcmb", "ringhalfleft", + "ringhalfleftarmenian", "ringhalfleftbelowcmb", + "ringhalfleftcentered", "ringhalfright", "ringhalfrightbelowcmb", + "ringhalfrightcentered", "rinvertedbreve", "rittorusquare", + "rlinebelow", "rlongleg", "rlonglegturned", "rmonospace", + "rohiragana", "rokatakana", "rokatakanahalfwidth", "roruathai", + "rparen", "rrabengali", "rradeva", "rragurmukhi", "rreharabic", + "rrehfinalarabic", "rrvocalicbengali", "rrvocalicdeva", + "rrvocalicgujarati", "rrvocalicvowelsignbengali", + "rrvocalicvowelsigndeva", "rrvocalicvowelsigngujarati", + "rsuperior", "rtblock", "rturned", "rturnedsuperior", "ruhiragana", + "rukatakana", "rukatakanahalfwidth", "rupeemarkbengali", + "rupeesignbengali", "rupiah", "ruthai", "rvocalicbengali", + "rvocalicdeva", "rvocalicgujarati", "rvocalicvowelsignbengali", + "rvocalicvowelsigndeva", "rvocalicvowelsigngujarati", "s", + "sabengali", "sacute", "sacutedotaccent", "sadarabic", "sadeva", + "sadfinalarabic", "sadinitialarabic", "sadmedialarabic", + "sagujarati", "sagurmukhi", "sahiragana", "sakatakana", + "sakatakanahalfwidth", "sallallahoualayhewasallamarabic", "samekh", + "samekhdagesh", "samekhdageshhebrew", "samekhhebrew", "saraaathai", + "saraaethai", "saraaimaimalaithai", "saraaimaimuanthai", + "saraamthai", "saraathai", "saraethai", "saraiileftthai", + "saraiithai", "saraileftthai", "saraithai", "saraothai", + "saraueeleftthai", "saraueethai", "saraueleftthai", "sarauethai", + "sarauthai", "sarauuthai", "sbopomofo", "scaron", + "scarondotaccent", "scedilla", "schwa", "schwacyrillic", + "schwadieresiscyrillic", "schwahook", "scircle", "scircumflex", + "scommaaccent", "sdotaccent", "sdotbelow", "sdotbelowdotaccent", + "seagullbelowcmb", "second", "secondtonechinese", "section", + "seenarabic", "seenfinalarabic", "seeninitialarabic", + "seenmedialarabic", "segol", "segol13", "segol1f", "segol2c", + "segolhebrew", "segolnarrowhebrew", "segolquarterhebrew", + "segoltahebrew", "segolwidehebrew", "seharmenian", "sehiragana", + "sekatakana", "sekatakanahalfwidth", "semicolon", + "semicolonarabic", "semicolonmonospace", "semicolonsmall", + "semivoicedmarkkana", "semivoicedmarkkanahalfwidth", "sentisquare", + "sentosquare", "seven", "sevenarabic", "sevenbengali", + "sevencircle", "sevencircleinversesansserif", "sevendeva", + "seveneighths", "sevengujarati", "sevengurmukhi", + "sevenhackarabic", "sevenhangzhou", "sevenideographicparen", + "seveninferior", "sevenmonospace", "sevenoldstyle", "sevenparen", + "sevenperiod", "sevenpersian", "sevenroman", "sevensuperior", + "seventeencircle", "seventeenparen", "seventeenperiod", + "seventhai", "sfthyphen", "shaarmenian", "shabengali", + "shacyrillic", "shaddaarabic", "shaddadammaarabic", + "shaddadammatanarabic", "shaddafathaarabic", "shaddakasraarabic", + "shaddakasratanarabic", "shade", "shadedark", "shadelight", + "shademedium", "shadeva", "shagujarati", "shagurmukhi", + "shalshelethebrew", "shbopomofo", "shchacyrillic", "sheenarabic", + "sheenfinalarabic", "sheeninitialarabic", "sheenmedialarabic", + "sheicoptic", "sheqel", "sheqelhebrew", "sheva", "sheva115", + "sheva15", "sheva22", "sheva2e", "shevahebrew", + "shevanarrowhebrew", "shevaquarterhebrew", "shevawidehebrew", + "shhacyrillic", "shimacoptic", "shin", "shindagesh", + "shindageshhebrew", "shindageshshindot", "shindageshshindothebrew", + "shindageshsindot", "shindageshsindothebrew", "shindothebrew", + "shinhebrew", "shinshindot", "shinshindothebrew", "shinsindot", + "shinsindothebrew", "shook", "sigma", "sigma1", "sigmafinal", + "sigmalunatesymbolgreek", "sihiragana", "sikatakana", + "sikatakanahalfwidth", "siluqhebrew", "siluqlefthebrew", "similar", + "sindothebrew", "siosacirclekorean", "siosaparenkorean", + "sioscieuckorean", "sioscirclekorean", "sioskiyeokkorean", + "sioskorean", "siosnieunkorean", "siosparenkorean", + "siospieupkorean", "siostikeutkorean", "six", "sixarabic", + "sixbengali", "sixcircle", "sixcircleinversesansserif", "sixdeva", + "sixgujarati", "sixgurmukhi", "sixhackarabic", "sixhangzhou", + "sixideographicparen", "sixinferior", "sixmonospace", + "sixoldstyle", "sixparen", "sixperiod", "sixpersian", "sixroman", + "sixsuperior", "sixteencircle", + "sixteencurrencydenominatorbengali", "sixteenparen", + "sixteenperiod", "sixthai", "slash", "slashmonospace", "slong", + "slongdotaccent", "smileface", "smonospace", "sofpasuqhebrew", + "softhyphen", "softsigncyrillic", "sohiragana", "sokatakana", + "sokatakanahalfwidth", "soliduslongoverlaycmb", + "solidusshortoverlaycmb", "sorusithai", "sosalathai", "sosothai", + "sosuathai", "space", "spacehackarabic", "spade", "spadesuitblack", + "spadesuitwhite", "sparen", "squarebelowcmb", "squarecc", + "squarecm", "squarediagonalcrosshatchfill", "squarehorizontalfill", + "squarekg", "squarekm", "squarekmcapital", "squareln", "squarelog", + "squaremg", "squaremil", "squaremm", "squaremsquared", + "squareorthogonalcrosshatchfill", + "squareupperlefttolowerrightfill", + "squareupperrighttolowerleftfill", "squareverticalfill", + "squarewhitewithsmallblack", "srsquare", "ssabengali", "ssadeva", + "ssagujarati", "ssangcieuckorean", "ssanghieuhkorean", + "ssangieungkorean", "ssangkiyeokkorean", "ssangnieunkorean", + "ssangpieupkorean", "ssangsioskorean", "ssangtikeutkorean", + "ssuperior", "sterling", "sterlingmonospace", + "strokelongoverlaycmb", "strokeshortoverlaycmb", "subset", + "subsetnotequal", "subsetorequal", "succeeds", "suchthat", + "suhiragana", "sukatakana", "sukatakanahalfwidth", "sukunarabic", + "summation", "sun", "superset", "supersetnotequal", + "supersetorequal", "svsquare", "syouwaerasquare", "t", "tabengali", + "tackdown", "tackleft", "tadeva", "tagujarati", "tagurmukhi", + "taharabic", "tahfinalarabic", "tahinitialarabic", "tahiragana", + "tahmedialarabic", "taisyouerasquare", "takatakana", + "takatakanahalfwidth", "tatweelarabic", "tau", "tav", "tavdages", + "tavdagesh", "tavdageshhebrew", "tavhebrew", "tbar", "tbopomofo", + "tcaron", "tccurl", "tcedilla", "tcheharabic", "tchehfinalarabic", + "tchehinitialarabic", "tchehmedialarabic", "tcircle", + "tcircumflexbelow", "tcommaaccent", "tdieresis", "tdotaccent", + "tdotbelow", "tecyrillic", "tedescendercyrillic", "teharabic", + "tehfinalarabic", "tehhahinitialarabic", "tehhahisolatedarabic", + "tehinitialarabic", "tehiragana", "tehjeeminitialarabic", + "tehjeemisolatedarabic", "tehmarbutaarabic", + "tehmarbutafinalarabic", "tehmedialarabic", "tehmeeminitialarabic", + "tehmeemisolatedarabic", "tehnoonfinalarabic", "tekatakana", + "tekatakanahalfwidth", "telephone", "telephoneblack", + "telishagedolahebrew", "telishaqetanahebrew", "tencircle", + "tenideographicparen", "tenparen", "tenperiod", "tenroman", "tesh", + "tet", "tetdagesh", "tetdageshhebrew", "tethebrew", + "tetsecyrillic", "tevirhebrew", "tevirlefthebrew", "thabengali", + "thadeva", "thagujarati", "thagurmukhi", "thalarabic", + "thalfinalarabic", "thanthakhatlowleftthai", + "thanthakhatlowrightthai", "thanthakhatthai", + "thanthakhatupperleftthai", "theharabic", "thehfinalarabic", + "thehinitialarabic", "thehmedialarabic", "thereexists", + "therefore", "theta", "theta1", "thetasymbolgreek", + "thieuthacirclekorean", "thieuthaparenkorean", + "thieuthcirclekorean", "thieuthkorean", "thieuthparenkorean", + "thirteencircle", "thirteenparen", "thirteenperiod", + "thonangmonthothai", "thook", "thophuthaothai", "thorn", + "thothahanthai", "thothanthai", "thothongthai", "thothungthai", + "thousandcyrillic", "thousandsseparatorarabic", + "thousandsseparatorpersian", "three", "threearabic", + "threebengali", "threecircle", "threecircleinversesansserif", + "threedeva", "threeeighths", "threegujarati", "threegurmukhi", + "threehackarabic", "threehangzhou", "threeideographicparen", + "threeinferior", "threemonospace", "threenumeratorbengali", + "threeoldstyle", "threeparen", "threeperiod", "threepersian", + "threequarters", "threequartersemdash", "threeroman", + "threesuperior", "threethai", "thzsquare", "tihiragana", + "tikatakana", "tikatakanahalfwidth", "tikeutacirclekorean", + "tikeutaparenkorean", "tikeutcirclekorean", "tikeutkorean", + "tikeutparenkorean", "tilde", "tildebelowcmb", "tildecmb", + "tildecomb", "tildedoublecmb", "tildeoperator", "tildeoverlaycmb", + "tildeverticalcmb", "timescircle", "tipehahebrew", + "tipehalefthebrew", "tippigurmukhi", "titlocyrilliccmb", + "tiwnarmenian", "tlinebelow", "tmonospace", "toarmenian", + "tohiragana", "tokatakana", "tokatakanahalfwidth", + "tonebarextrahighmod", "tonebarextralowmod", "tonebarhighmod", + "tonebarlowmod", "tonebarmidmod", "tonefive", "tonesix", "tonetwo", + "tonos", "tonsquare", "topatakthai", "tortoiseshellbracketleft", + "tortoiseshellbracketleftsmall", + "tortoiseshellbracketleftvertical", "tortoiseshellbracketright", + "tortoiseshellbracketrightsmall", + "tortoiseshellbracketrightvertical", "totaothai", "tpalatalhook", + "tparen", "trademark", "trademarksans", "trademarkserif", + "tretroflexhook", "triagdn", "triaglf", "triagrt", "triagup", "ts", + "tsadi", "tsadidagesh", "tsadidageshhebrew", "tsadihebrew", + "tsecyrillic", "tsere", "tsere12", "tsere1e", "tsere2b", + "tserehebrew", "tserenarrowhebrew", "tserequarterhebrew", + "tserewidehebrew", "tshecyrillic", "tsuperior", "ttabengali", + "ttadeva", "ttagujarati", "ttagurmukhi", "tteharabic", + "ttehfinalarabic", "ttehinitialarabic", "ttehmedialarabic", + "tthabengali", "tthadeva", "tthagujarati", "tthagurmukhi", + "tturned", "tuhiragana", "tukatakana", "tukatakanahalfwidth", + "tusmallhiragana", "tusmallkatakana", "tusmallkatakanahalfwidth", + "twelvecircle", "twelveparen", "twelveperiod", "twelveroman", + "twentycircle", "twentyhangzhou", "twentyparen", "twentyperiod", + "two", "twoarabic", "twobengali", "twocircle", + "twocircleinversesansserif", "twodeva", "twodotenleader", + "twodotleader", "twodotleadervertical", "twogujarati", + "twogurmukhi", "twohackarabic", "twohangzhou", + "twoideographicparen", "twoinferior", "twomonospace", + "twonumeratorbengali", "twooldstyle", "twoparen", "twoperiod", + "twopersian", "tworoman", "twostroke", "twosuperior", "twothai", + "twothirds", "u", "uacute", "ubar", "ubengali", "ubopomofo", + "ubreve", "ucaron", "ucircle", "ucircumflex", "ucircumflexbelow", + "ucyrillic", "udattadeva", "udblacute", "udblgrave", "udeva", + "udieresis", "udieresisacute", "udieresisbelow", "udieresiscaron", + "udieresiscyrillic", "udieresisgrave", "udieresismacron", + "udotbelow", "ugrave", "ugujarati", "ugurmukhi", "uhiragana", + "uhookabove", "uhorn", "uhornacute", "uhorndotbelow", "uhorngrave", + "uhornhookabove", "uhorntilde", "uhungarumlaut", + "uhungarumlautcyrillic", "uinvertedbreve", "ukatakana", + "ukatakanahalfwidth", "ukcyrillic", "ukorean", "umacron", + "umacroncyrillic", "umacrondieresis", "umatragurmukhi", + "umonospace", "underscore", "underscoredbl", "underscoremonospace", + "underscorevertical", "underscorewavy", "union", "universal", + "uogonek", "uparen", "upblock", "upperdothebrew", "upsilon", + "upsilondieresis", "upsilondieresistonos", "upsilonlatin", + "upsilontonos", "uptackbelowcmb", "uptackmod", "uragurmukhi", + "uring", "ushortcyrillic", "usmallhiragana", "usmallkatakana", + "usmallkatakanahalfwidth", "ustraightcyrillic", + "ustraightstrokecyrillic", "utilde", "utildeacute", "utildebelow", + "uubengali", "uudeva", "uugujarati", "uugurmukhi", + "uumatragurmukhi", "uuvowelsignbengali", "uuvowelsigndeva", + "uuvowelsigngujarati", "uvowelsignbengali", "uvowelsigndeva", + "uvowelsigngujarati", "v", "vadeva", "vagujarati", "vagurmukhi", + "vakatakana", "vav", "vavdagesh", "vavdagesh65", "vavdageshhebrew", + "vavhebrew", "vavholam", "vavholamhebrew", "vavvavhebrew", + "vavyodhebrew", "vcircle", "vdotbelow", "vecyrillic", "veharabic", + "vehfinalarabic", "vehinitialarabic", "vehmedialarabic", + "vekatakana", "venus", "verticalbar", "verticallineabovecmb", + "verticallinebelowcmb", "verticallinelowmod", "verticallinemod", + "vewarmenian", "vhook", "vikatakana", "viramabengali", + "viramadeva", "viramagujarati", "visargabengali", "visargadeva", + "visargagujarati", "vmonospace", "voarmenian", + "voicediterationhiragana", "voicediterationkatakana", + "voicedmarkkana", "voicedmarkkanahalfwidth", "vokatakana", + "vparen", "vtilde", "vturned", "vuhiragana", "vukatakana", "w", + "wacute", "waekorean", "wahiragana", "wakatakana", + "wakatakanahalfwidth", "wakorean", "wasmallhiragana", + "wasmallkatakana", "wattosquare", "wavedash", + "wavyunderscorevertical", "wawarabic", "wawfinalarabic", + "wawhamzaabovearabic", "wawhamzaabovefinalarabic", "wbsquare", + "wcircle", "wcircumflex", "wdieresis", "wdotaccent", "wdotbelow", + "wehiragana", "weierstrass", "wekatakana", "wekorean", "weokorean", + "wgrave", "whitebullet", "whitecircle", "whitecircleinverse", + "whitecornerbracketleft", "whitecornerbracketleftvertical", + "whitecornerbracketright", "whitecornerbracketrightvertical", + "whitediamond", "whitediamondcontainingblacksmalldiamond", + "whitedownpointingsmalltriangle", "whitedownpointingtriangle", + "whiteleftpointingsmalltriangle", "whiteleftpointingtriangle", + "whitelenticularbracketleft", "whitelenticularbracketright", + "whiterightpointingsmalltriangle", "whiterightpointingtriangle", + "whitesmallsquare", "whitesmilingface", "whitesquare", "whitestar", + "whitetelephone", "whitetortoiseshellbracketleft", + "whitetortoiseshellbracketright", "whiteuppointingsmalltriangle", + "whiteuppointingtriangle", "wihiragana", "wikatakana", "wikorean", + "wmonospace", "wohiragana", "wokatakana", "wokatakanahalfwidth", + "won", "wonmonospace", "wowaenthai", "wparen", "wring", + "wsuperior", "wturned", "wynn", "x", "xabovecmb", "xbopomofo", + "xcircle", "xdieresis", "xdotaccent", "xeharmenian", "xi", + "xmonospace", "xparen", "xsuperior", "y", "yaadosquare", + "yabengali", "yacute", "yadeva", "yaekorean", "yagujarati", + "yagurmukhi", "yahiragana", "yakatakana", "yakatakanahalfwidth", + "yakorean", "yamakkanthai", "yasmallhiragana", "yasmallkatakana", + "yasmallkatakanahalfwidth", "yatcyrillic", "ycircle", + "ycircumflex", "ydieresis", "ydotaccent", "ydotbelow", "yeharabic", + "yehbarreearabic", "yehbarreefinalarabic", "yehfinalarabic", + "yehhamzaabovearabic", "yehhamzaabovefinalarabic", + "yehhamzaaboveinitialarabic", "yehhamzaabovemedialarabic", + "yehinitialarabic", "yehmedialarabic", "yehmeeminitialarabic", + "yehmeemisolatedarabic", "yehnoonfinalarabic", + "yehthreedotsbelowarabic", "yekorean", "yen", "yenmonospace", + "yeokorean", "yeorinhieuhkorean", "yerahbenyomohebrew", + "yerahbenyomolefthebrew", "yericyrillic", "yerudieresiscyrillic", + "yesieungkorean", "yesieungpansioskorean", "yesieungsioskorean", + "yetivhebrew", "ygrave", "yhook", "yhookabove", "yiarmenian", + "yicyrillic", "yikorean", "yinyang", "yiwnarmenian", "ymonospace", + "yod", "yoddagesh", "yoddageshhebrew", "yodhebrew", "yodyodhebrew", + "yodyodpatahhebrew", "yohiragana", "yoikorean", "yokatakana", + "yokatakanahalfwidth", "yokorean", "yosmallhiragana", + "yosmallkatakana", "yosmallkatakanahalfwidth", "yotgreek", + "yoyaekorean", "yoyakorean", "yoyakthai", "yoyingthai", "yparen", + "ypogegrammeni", "ypogegrammenigreekcmb", "yr", "yring", + "ysuperior", "ytilde", "yturned", "yuhiragana", "yuikorean", + "yukatakana", "yukatakanahalfwidth", "yukorean", "yusbigcyrillic", + "yusbigiotifiedcyrillic", "yuslittlecyrillic", + "yuslittleiotifiedcyrillic", "yusmallhiragana", "yusmallkatakana", + "yusmallkatakanahalfwidth", "yuyekorean", "yuyeokorean", + "yyabengali", "yyadeva", "z", "zaarmenian", "zacute", "zadeva", + "zagurmukhi", "zaharabic", "zahfinalarabic", "zahinitialarabic", + "zahiragana", "zahmedialarabic", "zainarabic", "zainfinalarabic", + "zakatakana", "zaqefgadolhebrew", "zaqefqatanhebrew", + "zarqahebrew", "zayin", "zayindagesh", "zayindageshhebrew", + "zayinhebrew", "zbopomofo", "zcaron", "zcircle", "zcircumflex", + "zcurl", "zdot", "zdotaccent", "zdotbelow", "zecyrillic", + "zedescendercyrillic", "zedieresiscyrillic", "zehiragana", + "zekatakana", "zero", "zeroarabic", "zerobengali", "zerodeva", + "zerogujarati", "zerogurmukhi", "zerohackarabic", "zeroinferior", + "zeromonospace", "zerooldstyle", "zeropersian", "zerosuperior", + "zerothai", "zerowidthjoiner", "zerowidthnonjoiner", + "zerowidthspace", "zeta", "zhbopomofo", "zhearmenian", + "zhebrevecyrillic", "zhecyrillic", "zhedescendercyrillic", + "zhedieresiscyrillic", "zihiragana", "zikatakana", "zinorhebrew", + "zlinebelow", "zmonospace", "zohiragana", "zokatakana", "zparen", + "zretroflexhook", "zstroke", "zuhiragana", "zukatakana", +}; + +glyph glyph_intern(char const *glyphname) +{ + int i, j, k, c; + + i = -1; + j = lenof(ps_glyphs_alphabetic); + while (j-i > 1) { + k = (i + j) / 2; + c = strcmp(glyphname, ps_glyphs_alphabetic[k]); + + if (c == 0) + return k; + else if (c < 0) + j = k; + else + i = k; + } + + return NOGLYPH; /* illegal value means not found */ +} + +char const *glyph_extern(glyph glyph) +{ + + if (glyph == NOGLYPH) return ".notdef"; + assert(glyph < lenof(ps_glyphs_alphabetic)); + return ps_glyphs_alphabetic[glyph]; +} + +/* ---------------------------------------------------------------------- + * Mapping between PS character names (/aacute, /zcaron etc) and + * Unicode code points. + * + * Generated from the Adobe Glyph List at + * + * http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt + * + * by another Perl/sh fragment. + +grep '^[^#;][^;]*;[^ ][^ ][^ ][^ ]$' glyphlist.txt | sort -t\; +0 -1 | \ + cut -f2 -d\; | perl -ne 'chomp; print "0x$_, "' | \ + fold -s -w68 | sed 's/^/ /'; echo + + */ +static const unsigned short ps_codes_alphabetic[] = { + 0x0041, 0x00C6, 0x01FC, 0x01E2, 0xF7E6, 0x00C1, 0xF7E1, 0x0102, + 0x1EAE, 0x04D0, 0x1EB6, 0x1EB0, 0x1EB2, 0x1EB4, 0x01CD, 0x24B6, + 0x00C2, 0x1EA4, 0x1EAC, 0x1EA6, 0x1EA8, 0xF7E2, 0x1EAA, 0xF6C9, + 0xF7B4, 0x0410, 0x0200, 0x00C4, 0x04D2, 0x01DE, 0xF7E4, 0x1EA0, + 0x01E0, 0x00C0, 0xF7E0, 0x1EA2, 0x04D4, 0x0202, 0x0391, 0x0386, + 0x0100, 0xFF21, 0x0104, 0x00C5, 0x01FA, 0x1E00, 0xF7E5, 0xF761, + 0x00C3, 0xF7E3, 0x0531, 0x0042, 0x24B7, 0x1E02, 0x1E04, 0x0411, + 0x0532, 0x0392, 0x0181, 0x1E06, 0xFF22, 0xF6F4, 0xF762, 0x0182, + 0x0043, 0x053E, 0x0106, 0xF6CA, 0xF6F5, 0x010C, 0x00C7, 0x1E08, + 0xF7E7, 0x24B8, 0x0108, 0x010A, 0x010A, 0xF7B8, 0x0549, 0x04BC, + 0x0427, 0x04BE, 0x04B6, 0x04F4, 0x0543, 0x04CB, 0x04B8, 0x03A7, + 0x0187, 0xF6F6, 0xFF23, 0x0551, 0xF763, 0x0044, 0x01F1, 0x01C4, + 0x0534, 0x0189, 0x010E, 0x1E10, 0x24B9, 0x1E12, 0x0110, 0x1E0A, + 0x1E0C, 0x0414, 0x03EE, 0x2206, 0x0394, 0x018A, 0xF6CB, 0xF6CC, + 0xF6CD, 0xF7A8, 0x03DC, 0x0402, 0x1E0E, 0xFF24, 0xF6F7, 0x0110, + 0xF764, 0x018B, 0x01F2, 0x01C5, 0x04E0, 0x0405, 0x040F, 0x0045, + 0x00C9, 0xF7E9, 0x0114, 0x011A, 0x1E1C, 0x0535, 0x24BA, 0x00CA, + 0x1EBE, 0x1E18, 0x1EC6, 0x1EC0, 0x1EC2, 0xF7EA, 0x1EC4, 0x0404, + 0x0204, 0x00CB, 0xF7EB, 0x0116, 0x0116, 0x1EB8, 0x0424, 0x00C8, + 0xF7E8, 0x0537, 0x1EBA, 0x2167, 0x0206, 0x0464, 0x041B, 0x216A, + 0x0112, 0x1E16, 0x1E14, 0x041C, 0xFF25, 0x041D, 0x04A2, 0x014A, + 0x04A4, 0x04C7, 0x0118, 0x0190, 0x0395, 0x0388, 0x0420, 0x018E, + 0x042D, 0x0421, 0x04AA, 0x01A9, 0xF765, 0x0397, 0x0538, 0x0389, + 0x00D0, 0xF7F0, 0x1EBC, 0x1E1A, 0x20AC, 0x01B7, 0x01EE, 0x01B8, + 0x0046, 0x24BB, 0x1E1E, 0x0556, 0x03E4, 0x0191, 0x0472, 0x2164, + 0xFF26, 0x2163, 0xF766, 0x0047, 0x3387, 0x01F4, 0x0393, 0x0194, + 0x03EA, 0x011E, 0x01E6, 0x0122, 0x24BC, 0x011C, 0x0122, 0x0120, + 0x0120, 0x0413, 0x0542, 0x0494, 0x0492, 0x0490, 0x0193, 0x0533, + 0x0403, 0x1E20, 0xFF27, 0xF6CE, 0xF760, 0xF767, 0x029B, 0x01E4, + 0x0048, 0x25CF, 0x25AA, 0x25AB, 0x25A1, 0x33CB, 0x04A8, 0x04B2, + 0x042A, 0x0126, 0x1E2A, 0x1E28, 0x24BD, 0x0124, 0x1E26, 0x1E22, + 0x1E24, 0xFF28, 0x0540, 0x03E8, 0xF768, 0xF6CF, 0xF6F8, 0x3390, + 0x0049, 0x042F, 0x0132, 0x042E, 0x00CD, 0xF7ED, 0x012C, 0x01CF, + 0x24BE, 0x00CE, 0xF7EE, 0x0406, 0x0208, 0x00CF, 0x1E2E, 0x04E4, + 0xF7EF, 0x0130, 0x0130, 0x1ECA, 0x04D6, 0x0415, 0x2111, 0x00CC, + 0xF7EC, 0x1EC8, 0x0418, 0x020A, 0x0419, 0x012A, 0x04E2, 0xFF29, + 0x053B, 0x0401, 0x012E, 0x0399, 0x0196, 0x03AA, 0x038A, 0xF769, + 0x0197, 0x0128, 0x1E2C, 0x0474, 0x0476, 0x004A, 0x0541, 0x24BF, + 0x0134, 0x0408, 0x054B, 0xFF2A, 0xF76A, 0x004B, 0x3385, 0x33CD, + 0x04A0, 0x1E30, 0x041A, 0x049A, 0x04C3, 0x039A, 0x049E, 0x049C, + 0x01E8, 0x0136, 0x24C0, 0x0136, 0x1E32, 0x0554, 0x053F, 0x0425, + 0x03E6, 0x0198, 0x040C, 0x1E34, 0xFF2B, 0x0480, 0x03DE, 0x046E, + 0xF76B, 0x004C, 0x01C7, 0xF6BF, 0x0139, 0x039B, 0x013D, 0x013B, + 0x24C1, 0x1E3C, 0x013B, 0x013F, 0x013F, 0x1E36, 0x1E38, 0x053C, + 0x01C8, 0x0409, 0x1E3A, 0xFF2C, 0x0141, 0xF6F9, 0xF76C, 0x004D, + 0x3386, 0xF6D0, 0xF7AF, 0x1E3E, 0x24C2, 0x1E40, 0x1E42, 0x0544, + 0xFF2D, 0xF76D, 0x019C, 0x039C, 0x004E, 0x01CA, 0x0143, 0x0147, + 0x0145, 0x24C3, 0x1E4A, 0x0145, 0x1E44, 0x1E46, 0x019D, 0x2168, + 0x01CB, 0x040A, 0x1E48, 0xFF2E, 0x0546, 0xF76E, 0x00D1, 0xF7F1, + 0x039D, 0x004F, 0x0152, 0xF6FA, 0x00D3, 0xF7F3, 0x04E8, 0x04EA, + 0x014E, 0x01D1, 0x019F, 0x24C4, 0x00D4, 0x1ED0, 0x1ED8, 0x1ED2, + 0x1ED4, 0xF7F4, 0x1ED6, 0x041E, 0x0150, 0x020C, 0x00D6, 0x04E6, + 0xF7F6, 0x1ECC, 0xF6FB, 0x00D2, 0xF7F2, 0x0555, 0x2126, 0x1ECE, + 0x01A0, 0x1EDA, 0x1EE2, 0x1EDC, 0x1EDE, 0x1EE0, 0x0150, 0x01A2, + 0x020E, 0x014C, 0x1E52, 0x1E50, 0x2126, 0x0460, 0x03A9, 0x047A, + 0x047C, 0x038F, 0x039F, 0x038C, 0xFF2F, 0x2160, 0x01EA, 0x01EC, + 0x0186, 0x00D8, 0x01FE, 0xF7F8, 0xF76F, 0x01FE, 0x047E, 0x00D5, + 0x1E4C, 0x1E4E, 0xF7F5, 0x0050, 0x1E54, 0x24C5, 0x1E56, 0x041F, + 0x054A, 0x04A6, 0x03A6, 0x01A4, 0x03A0, 0x0553, 0xFF30, 0x03A8, + 0x0470, 0xF770, 0x0051, 0x24C6, 0xFF31, 0xF771, 0x0052, 0x054C, + 0x0154, 0x0158, 0x0156, 0x24C7, 0x0156, 0x0210, 0x1E58, 0x1E5A, + 0x1E5C, 0x0550, 0x211C, 0x03A1, 0xF6FC, 0x0212, 0x1E5E, 0xFF32, + 0xF772, 0x0281, 0x02B6, 0x0053, 0x250C, 0x2514, 0x2510, 0x2518, + 0x253C, 0x252C, 0x2534, 0x251C, 0x2524, 0x2500, 0x2502, 0x2561, + 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, + 0x255B, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, + 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, + 0x2552, 0x2553, 0x256B, 0x256A, 0x015A, 0x1E64, 0x03E0, 0x0160, + 0x1E66, 0xF6FD, 0x015E, 0x018F, 0x04D8, 0x04DA, 0x24C8, 0x015C, + 0x0218, 0x1E60, 0x1E62, 0x1E68, 0x054D, 0x2166, 0x0547, 0x0428, + 0x0429, 0x03E2, 0x04BA, 0x03EC, 0x03A3, 0x2165, 0xFF33, 0x042C, + 0xF773, 0x03DA, 0x0054, 0x03A4, 0x0166, 0x0164, 0x0162, 0x24C9, + 0x1E70, 0x0162, 0x1E6A, 0x1E6C, 0x0422, 0x04AC, 0x2169, 0x04B4, + 0x0398, 0x01AC, 0x00DE, 0xF7FE, 0x2162, 0xF6FE, 0x054F, 0x1E6E, + 0xFF34, 0x0539, 0x01BC, 0x0184, 0x01A7, 0x01AE, 0x0426, 0x040B, + 0xF774, 0x216B, 0x2161, 0x0055, 0x00DA, 0xF7FA, 0x016C, 0x01D3, + 0x24CA, 0x00DB, 0x1E76, 0xF7FB, 0x0423, 0x0170, 0x0214, 0x00DC, + 0x01D7, 0x1E72, 0x01D9, 0x04F0, 0x01DB, 0x01D5, 0xF7FC, 0x1EE4, + 0x00D9, 0xF7F9, 0x1EE6, 0x01AF, 0x1EE8, 0x1EF0, 0x1EEA, 0x1EEC, + 0x1EEE, 0x0170, 0x04F2, 0x0216, 0x0478, 0x016A, 0x04EE, 0x1E7A, + 0xFF35, 0x0172, 0x03A5, 0x03D2, 0x03D3, 0x01B1, 0x03AB, 0x03D4, + 0x03D2, 0x038E, 0x016E, 0x040E, 0xF775, 0x04AE, 0x04B0, 0x0168, + 0x1E78, 0x1E74, 0x0056, 0x24CB, 0x1E7E, 0x0412, 0x054E, 0x01B2, + 0xFF36, 0x0548, 0xF776, 0x1E7C, 0x0057, 0x1E82, 0x24CC, 0x0174, + 0x1E84, 0x1E86, 0x1E88, 0x1E80, 0xFF37, 0xF777, 0x0058, 0x24CD, + 0x1E8C, 0x1E8A, 0x053D, 0x039E, 0xFF38, 0xF778, 0x0059, 0x00DD, + 0xF7FD, 0x0462, 0x24CE, 0x0176, 0x0178, 0xF7FF, 0x1E8E, 0x1EF4, + 0x042B, 0x04F8, 0x1EF2, 0x01B3, 0x1EF6, 0x0545, 0x0407, 0x0552, + 0xFF39, 0xF779, 0x1EF8, 0x046A, 0x046C, 0x0466, 0x0468, 0x005A, + 0x0536, 0x0179, 0x017D, 0xF6FF, 0x24CF, 0x1E90, 0x017B, 0x017B, + 0x1E92, 0x0417, 0x0498, 0x04DE, 0x0396, 0x053A, 0x04C1, 0x0416, + 0x0496, 0x04DC, 0x1E94, 0xFF3A, 0xF77A, 0x01B5, 0x0061, 0x0986, + 0x00E1, 0x0906, 0x0A86, 0x0A06, 0x0A3E, 0x3303, 0x09BE, 0x093E, + 0x0ABE, 0x055F, 0x0970, 0x0985, 0x311A, 0x0103, 0x1EAF, 0x04D1, + 0x1EB7, 0x1EB1, 0x1EB3, 0x1EB5, 0x01CE, 0x24D0, 0x00E2, 0x1EA5, + 0x1EAD, 0x1EA7, 0x1EA9, 0x1EAB, 0x00B4, 0x0317, 0x0301, 0x0301, + 0x0954, 0x02CF, 0x0341, 0x0430, 0x0201, 0x0A71, 0x0905, 0x00E4, + 0x04D3, 0x01DF, 0x1EA1, 0x01E1, 0x00E6, 0x01FD, 0x3150, 0x01E3, + 0x2015, 0x20A4, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, + 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, + 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, + 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, + 0x042D, 0x042E, 0x042F, 0x0490, 0x0402, 0x0403, 0x0404, 0x0405, + 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x040E, + 0xF6C4, 0xF6C5, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, + 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, + 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, + 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, + 0x044D, 0x044E, 0x044F, 0x0491, 0x0452, 0x0453, 0x0454, 0x0455, + 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x045E, + 0x040F, 0x0462, 0x0472, 0x0474, 0xF6C6, 0x045F, 0x0463, 0x0473, + 0x0475, 0xF6C7, 0xF6C8, 0x04D9, 0x200E, 0x200F, 0x200D, 0x066A, + 0x060C, 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, + 0x0667, 0x0668, 0x0669, 0x061B, 0x061F, 0x0621, 0x0622, 0x0623, + 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062A, 0x062B, + 0x062C, 0x062D, 0x062E, 0x062F, 0x0630, 0x0631, 0x0632, 0x0633, + 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063A, 0x0640, + 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0648, 0x0649, + 0x064A, 0x064B, 0x064C, 0x064D, 0x064E, 0x064F, 0x0650, 0x0651, + 0x0652, 0x0647, 0x06A4, 0x067E, 0x0686, 0x0698, 0x06AF, 0x0679, + 0x0688, 0x0691, 0x06BA, 0x06D2, 0x06D5, 0x20AA, 0x05BE, 0x05C3, + 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, + 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, + 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, + 0x05E8, 0x05E9, 0x05EA, 0xFB2A, 0xFB2B, 0xFB4B, 0xFB1F, 0x05F0, + 0x05F1, 0x05F2, 0xFB35, 0x05B4, 0x05B5, 0x05B6, 0x05BB, 0x05B8, + 0x05B7, 0x05B0, 0x05B2, 0x05B1, 0x05B3, 0x05C2, 0x05C1, 0x05B9, + 0x05BC, 0x05BD, 0x05BF, 0x05C0, 0x02BC, 0x2105, 0x2113, 0x2116, + 0x202C, 0x202D, 0x202E, 0x200C, 0x066D, 0x02BD, 0x00E0, 0x0A85, + 0x0A05, 0x3042, 0x1EA3, 0x0990, 0x311E, 0x0910, 0x04D5, 0x0A90, + 0x0A10, 0x0A48, 0x0639, 0xFECA, 0xFECB, 0xFECC, 0x0203, 0x09C8, + 0x0948, 0x0AC8, 0x30A2, 0xFF71, 0x314F, 0x05D0, 0x0627, 0xFB30, + 0xFE8E, 0x0623, 0xFE84, 0x0625, 0xFE88, 0x05D0, 0xFB4F, 0x0622, + 0xFE82, 0x0649, 0xFEF0, 0xFEF3, 0xFEF4, 0xFB2E, 0xFB2F, 0x2135, + 0x224C, 0x03B1, 0x03AC, 0x0101, 0xFF41, 0x0026, 0xFF06, 0xF726, + 0x33C2, 0x3122, 0x3124, 0x0E5A, 0x2220, 0x3008, 0xFE3F, 0x3009, + 0xFE40, 0x2329, 0x232A, 0x212B, 0x0387, 0x0952, 0x0982, 0x0902, + 0x0A82, 0x0105, 0x3300, 0x249C, 0x055A, 0x02BC, 0xF8FF, 0x2250, + 0x2248, 0x2252, 0x2245, 0x318E, 0x318D, 0x2312, 0x1E9A, 0x00E5, + 0x01FB, 0x1E01, 0x2194, 0x21E3, 0x21E0, 0x21E2, 0x21E1, 0x21D4, + 0x21D3, 0x21D0, 0x21D2, 0x21D1, 0x2193, 0x2199, 0x2198, 0x21E9, + 0x02C5, 0x02C2, 0x02C3, 0x02C4, 0xF8E7, 0x2190, 0x21D0, 0x21CD, + 0x21C6, 0x21E6, 0x2192, 0x21CF, 0x279E, 0x21C4, 0x21E8, 0x21E4, + 0x21E5, 0x2191, 0x2195, 0x21A8, 0x21A8, 0x2196, 0x21C5, 0x2197, + 0x21E7, 0xF8E6, 0x005E, 0xFF3E, 0x007E, 0xFF5E, 0x0251, 0x0252, + 0x3041, 0x30A1, 0xFF67, 0x002A, 0x066D, 0x066D, 0x2217, 0xFF0A, + 0xFE61, 0x2042, 0xF6E9, 0x2243, 0x0040, 0x00E3, 0xFF20, 0xFE6B, + 0x0250, 0x0994, 0x3120, 0x0914, 0x0A94, 0x0A14, 0x09D7, 0x0A4C, + 0x09CC, 0x094C, 0x0ACC, 0x093D, 0x0561, 0x05E2, 0xFB20, 0x05E2, + 0x0062, 0x09AC, 0x005C, 0xFF3C, 0x092C, 0x0AAC, 0x0A2C, 0x3070, + 0x0E3F, 0x30D0, 0x007C, 0xFF5C, 0x3105, 0x24D1, 0x1E03, 0x1E05, + 0x266C, 0x2235, 0x0431, 0x0628, 0xFE90, 0xFE91, 0x3079, 0xFE92, + 0xFC9F, 0xFC08, 0xFC6D, 0x30D9, 0x0562, 0x05D1, 0x03B2, 0x03D0, + 0xFB31, 0xFB31, 0x05D1, 0xFB4C, 0x09AD, 0x092D, 0x0AAD, 0x0A2D, + 0x0253, 0x3073, 0x30D3, 0x0298, 0x0A02, 0x3331, 0x25CF, 0x25C6, + 0x25BC, 0x25C4, 0x25C0, 0x3010, 0xFE3B, 0x3011, 0xFE3C, 0x25E3, + 0x25E2, 0x25AC, 0x25BA, 0x25B6, 0x25AA, 0x263B, 0x25A0, 0x2605, + 0x25E4, 0x25E5, 0x25B4, 0x25B2, 0x2423, 0x1E07, 0x2588, 0xFF42, + 0x0E1A, 0x307C, 0x30DC, 0x249D, 0x33C3, 0xF8F4, 0x007B, 0xF8F3, + 0xF8F2, 0xFF5B, 0xFE5B, 0xF8F1, 0xFE37, 0x007D, 0xF8FE, 0xF8FD, + 0xFF5D, 0xFE5C, 0xF8FC, 0xFE38, 0x005B, 0xF8F0, 0xF8EF, 0xFF3B, + 0xF8EE, 0x005D, 0xF8FB, 0xF8FA, 0xFF3D, 0xF8F9, 0x02D8, 0x032E, + 0x0306, 0x032F, 0x0311, 0x0361, 0x032A, 0x033A, 0x00A6, 0x0180, + 0xF6EA, 0x0183, 0x3076, 0x30D6, 0x2022, 0x25D8, 0x2219, 0x25CE, + 0x0063, 0x056E, 0x099A, 0x0107, 0x091A, 0x0A9A, 0x0A1A, 0x3388, + 0x0981, 0x0310, 0x0901, 0x0A81, 0x21EA, 0x2105, 0x02C7, 0x032C, + 0x030C, 0x21B5, 0x3118, 0x010D, 0x00E7, 0x1E09, 0x24D2, 0x0109, + 0x0255, 0x010B, 0x010B, 0x33C5, 0x00B8, 0x0327, 0x00A2, 0x2103, + 0xF6DF, 0xFFE0, 0xF7A2, 0xF6E0, 0x0579, 0x099B, 0x091B, 0x0A9B, + 0x0A1B, 0x3114, 0x04BD, 0x2713, 0x0447, 0x04BF, 0x04B7, 0x04F5, + 0x0573, 0x04CC, 0x04B9, 0x03C7, 0x3277, 0x3217, 0x3269, 0x314A, + 0x3209, 0x0E0A, 0x0E08, 0x0E09, 0x0E0C, 0x0188, 0x3276, 0x3216, + 0x3268, 0x3148, 0x3208, 0x321C, 0x25CB, 0x2297, 0x2299, 0x2295, + 0x3036, 0x25D0, 0x25D1, 0x02C6, 0x032D, 0x0302, 0x2327, 0x01C2, + 0x01C0, 0x01C1, 0x01C3, 0x2663, 0x2663, 0x2667, 0x33A4, 0xFF43, + 0x33A0, 0x0581, 0x003A, 0x20A1, 0xFF1A, 0x20A1, 0xFE55, 0x02D1, + 0x02D0, 0x002C, 0x0313, 0x0315, 0xF6C3, 0x060C, 0x055D, 0xF6E1, + 0xFF0C, 0x0314, 0x02BD, 0xFE50, 0xF6E2, 0x0312, 0x02BB, 0x263C, + 0x2245, 0x222E, 0x2303, 0x0006, 0x0007, 0x0008, 0x0018, 0x000D, + 0x0011, 0x0012, 0x0013, 0x0014, 0x007F, 0x0010, 0x0019, 0x0005, + 0x0004, 0x001B, 0x0017, 0x0003, 0x000C, 0x001C, 0x001D, 0x0009, + 0x000A, 0x0015, 0x001E, 0x000F, 0x000E, 0x0002, 0x0001, 0x001A, + 0x0016, 0x001F, 0x000B, 0x00A9, 0xF8E9, 0xF6D9, 0x300C, 0xFF62, + 0xFE41, 0x300D, 0xFF63, 0xFE42, 0x337F, 0x33C7, 0x33C6, 0x249E, + 0x20A2, 0x0297, 0x22CF, 0x22CE, 0x00A4, 0xF6D1, 0xF6D2, 0xF6D4, + 0xF6D5, 0x0064, 0x0564, 0x09A6, 0x0636, 0x0926, 0xFEBE, 0xFEBF, + 0xFEC0, 0x05BC, 0x05BC, 0x2020, 0x2021, 0x0AA6, 0x0A26, 0x3060, + 0x30C0, 0x062F, 0x05D3, 0xFB33, 0xFB33, 0x05D3, 0xFEAA, 0x064F, + 0x064F, 0x064C, 0x064C, 0x0964, 0x05A7, 0x05A7, 0x0485, 0xF6D3, + 0x300A, 0xFE3D, 0x300B, 0xFE3E, 0x032B, 0x21D4, 0x21D2, 0x0965, + 0xF6D6, 0x030F, 0x222C, 0x2017, 0x0333, 0x033F, 0x02BA, 0x2016, + 0x030E, 0x3109, 0x33C8, 0x010F, 0x1E11, 0x24D3, 0x1E13, 0x0111, + 0x09A1, 0x0921, 0x0AA1, 0x0A21, 0x0688, 0xFB89, 0x095C, 0x09A2, + 0x0922, 0x0AA2, 0x0A22, 0x1E0B, 0x1E0D, 0x066B, 0x066B, 0x0434, + 0x00B0, 0x05AD, 0x3067, 0x03EF, 0x30C7, 0x232B, 0x2326, 0x03B4, + 0x018D, 0x09F8, 0x02A4, 0x09A7, 0x0927, 0x0AA7, 0x0A27, 0x0257, + 0x0385, 0x0344, 0x2666, 0x2662, 0x00A8, 0xF6D7, 0x0324, 0x0308, + 0xF6D8, 0x0385, 0x3062, 0x30C2, 0x3003, 0x00F7, 0x2223, 0x2215, + 0x0452, 0x2593, 0x1E0F, 0x3397, 0x0111, 0xFF44, 0x2584, 0x0E0E, + 0x0E14, 0x3069, 0x30C9, 0x0024, 0xF6E3, 0xFF04, 0xF724, 0xFE69, + 0xF6E4, 0x20AB, 0x3326, 0x02D9, 0x0307, 0x0323, 0x0323, 0x30FB, + 0x0131, 0xF6BE, 0x0284, 0x22C5, 0x25CC, 0xFB1F, 0xFB1F, 0x031E, + 0x02D5, 0x249F, 0xF6EB, 0x0256, 0x018C, 0x3065, 0x30C5, 0x01F3, + 0x02A3, 0x01C6, 0x02A5, 0x04E1, 0x0455, 0x045F, 0x0065, 0x00E9, + 0x2641, 0x098F, 0x311C, 0x0115, 0x090D, 0x0A8D, 0x0945, 0x0AC5, + 0x011B, 0x1E1D, 0x0565, 0x0587, 0x24D4, 0x00EA, 0x1EBF, 0x1E19, + 0x1EC7, 0x1EC1, 0x1EC3, 0x1EC5, 0x0454, 0x0205, 0x090F, 0x00EB, + 0x0117, 0x0117, 0x1EB9, 0x0A0F, 0x0A47, 0x0444, 0x00E8, 0x0A8F, + 0x0567, 0x311D, 0x3048, 0x1EBB, 0x311F, 0x0038, 0x0668, 0x09EE, + 0x2467, 0x2791, 0x096E, 0x2471, 0x2485, 0x2499, 0x0AEE, 0x0A6E, + 0x0668, 0x3028, 0x266B, 0x3227, 0x2088, 0xFF18, 0xF738, 0x247B, + 0x248F, 0x06F8, 0x2177, 0x2078, 0x0E58, 0x0207, 0x0465, 0x30A8, + 0xFF74, 0x0A74, 0x3154, 0x043B, 0x2208, 0x246A, 0x247E, 0x2492, + 0x217A, 0x2026, 0x22EE, 0x0113, 0x1E17, 0x1E15, 0x043C, 0x2014, + 0xFE31, 0xFF45, 0x055B, 0x2205, 0x3123, 0x043D, 0x2013, 0xFE32, + 0x04A3, 0x014B, 0x3125, 0x04A5, 0x04C8, 0x2002, 0x0119, 0x3153, + 0x025B, 0x029A, 0x025C, 0x025E, 0x025D, 0x24A0, 0x03B5, 0x03AD, + 0x003D, 0xFF1D, 0xFE66, 0x207C, 0x2261, 0x3126, 0x0440, 0x0258, + 0x044D, 0x0441, 0x04AB, 0x0283, 0x0286, 0x090E, 0x0946, 0x01AA, + 0x0285, 0x3047, 0x30A7, 0xFF6A, 0x212E, 0xF6EC, 0x03B7, 0x0568, + 0x03AE, 0x00F0, 0x1EBD, 0x1E1B, 0x0591, 0x0591, 0x0591, 0x0591, + 0x01DD, 0x3161, 0x20AC, 0x09C7, 0x0947, 0x0AC7, 0x0021, 0x055C, + 0x203C, 0x00A1, 0xF7A1, 0xFF01, 0xF721, 0x2203, 0x0292, 0x01EF, + 0x0293, 0x01B9, 0x01BA, 0x0066, 0x095E, 0x0A5E, 0x2109, 0x064E, + 0x064E, 0x064B, 0x3108, 0x24D5, 0x1E1F, 0x0641, 0x0586, 0xFED2, + 0xFED3, 0xFED4, 0x03E5, 0x2640, 0xFB00, 0xFB03, 0xFB04, 0xFB01, + 0x246E, 0x2482, 0x2496, 0x2012, 0x25A0, 0x25AC, 0x05DA, 0xFB3A, + 0xFB3A, 0x05DA, 0x05DD, 0x05DD, 0x05DF, 0x05DF, 0x05E3, 0x05E3, + 0x05E5, 0x05E5, 0x02C9, 0x25C9, 0x0473, 0x0035, 0x0665, 0x09EB, + 0x2464, 0x278E, 0x096B, 0x215D, 0x0AEB, 0x0A6B, 0x0665, 0x3025, + 0x3224, 0x2085, 0xFF15, 0xF735, 0x2478, 0x248C, 0x06F5, 0x2174, + 0x2075, 0x0E55, 0xFB02, 0x0192, 0xFF46, 0x3399, 0x0E1F, 0x0E1D, + 0x0E4F, 0x2200, 0x0034, 0x0664, 0x09EA, 0x2463, 0x278D, 0x096A, + 0x0AEA, 0x0A6A, 0x0664, 0x3024, 0x3223, 0x2084, 0xFF14, 0x09F7, + 0xF734, 0x2477, 0x248B, 0x06F4, 0x2173, 0x2074, 0x246D, 0x2481, + 0x2495, 0x0E54, 0x02CB, 0x24A1, 0x2044, 0x20A3, 0x0067, 0x0997, + 0x01F5, 0x0917, 0x06AF, 0xFB93, 0xFB94, 0xFB95, 0x0A97, 0x0A17, + 0x304C, 0x30AC, 0x03B3, 0x0263, 0x02E0, 0x03EB, 0x310D, 0x011F, + 0x01E7, 0x0123, 0x24D6, 0x011D, 0x0123, 0x0121, 0x0121, 0x0433, + 0x3052, 0x30B2, 0x2251, 0x059C, 0x05F3, 0x059D, 0x00DF, 0x059E, + 0x05F4, 0x3013, 0x0998, 0x0572, 0x0918, 0x0A98, 0x0A18, 0x063A, + 0xFECE, 0xFECF, 0xFED0, 0x0495, 0x0493, 0x0491, 0x095A, 0x0A5A, + 0x0260, 0x3393, 0x304E, 0x30AE, 0x0563, 0x05D2, 0xFB32, 0xFB32, + 0x05D2, 0x0453, 0x01BE, 0x0294, 0x0296, 0x02C0, 0x0295, 0x02C1, + 0x02E4, 0x02A1, 0x02A2, 0x1E21, 0xFF47, 0x3054, 0x30B4, 0x24A2, + 0x33AC, 0x2207, 0x0060, 0x0316, 0x0300, 0x0300, 0x0953, 0x02CE, + 0xFF40, 0x0340, 0x003E, 0x2265, 0x22DB, 0xFF1E, 0x2273, 0x2277, + 0x2267, 0xFE65, 0x0261, 0x01E5, 0x3050, 0x00AB, 0x00BB, 0x2039, + 0x203A, 0x30B0, 0x3318, 0x33C9, 0x0068, 0x04A9, 0x06C1, 0x09B9, + 0x04B3, 0x0939, 0x0AB9, 0x0A39, 0x062D, 0xFEA2, 0xFEA3, 0x306F, + 0xFEA4, 0x332A, 0x30CF, 0xFF8A, 0x0A4D, 0x0621, 0x0621, 0x3164, + 0x044A, 0x21BC, 0x21C0, 0x33CA, 0x05B2, 0x05B2, 0x05B2, 0x05B2, + 0x05B2, 0x05B2, 0x05B2, 0x05B2, 0x05B3, 0x05B3, 0x05B3, 0x05B3, + 0x05B3, 0x05B3, 0x05B3, 0x05B3, 0x05B1, 0x05B1, 0x05B1, 0x05B1, + 0x05B1, 0x05B1, 0x05B1, 0x05B1, 0x0127, 0x310F, 0x1E2B, 0x1E29, + 0x24D7, 0x0125, 0x1E27, 0x1E23, 0x1E25, 0x05D4, 0x2665, 0x2665, + 0x2661, 0xFB34, 0xFB34, 0x06C1, 0x0647, 0x05D4, 0xFBA7, 0xFEEA, + 0xFEEA, 0xFBA5, 0xFBA4, 0xFBA8, 0xFEEB, 0x3078, 0xFBA9, 0xFEEC, + 0x337B, 0x30D8, 0xFF8D, 0x3336, 0x0267, 0x3339, 0x05D7, 0x05D7, + 0x0266, 0x02B1, 0x327B, 0x321B, 0x326D, 0x314E, 0x320D, 0x3072, + 0x30D2, 0xFF8B, 0x05B4, 0x05B4, 0x05B4, 0x05B4, 0x05B4, 0x05B4, + 0x05B4, 0x05B4, 0x1E96, 0xFF48, 0x0570, 0x0E2B, 0x307B, 0x30DB, + 0xFF8E, 0x05B9, 0x05B9, 0x05B9, 0x05B9, 0x05B9, 0x05B9, 0x05B9, + 0x05B9, 0x0E2E, 0x0309, 0x0309, 0x0321, 0x0322, 0x3342, 0x03E9, + 0x2015, 0x031B, 0x2668, 0x2302, 0x24A3, 0x02B0, 0x0265, 0x3075, + 0x3333, 0x30D5, 0xFF8C, 0x02DD, 0x030B, 0x0195, 0x002D, 0xF6E5, + 0xFF0D, 0xFE63, 0xF6E6, 0x2010, 0x0069, 0x00ED, 0x044F, 0x0987, + 0x3127, 0x012D, 0x01D0, 0x24D8, 0x00EE, 0x0456, 0x0209, 0x328F, + 0x328B, 0x323F, 0x323A, 0x32A5, 0x3006, 0x3001, 0xFF64, 0x3237, + 0x32A3, 0x322F, 0x323D, 0x329D, 0x3240, 0x3296, 0x3236, 0x322B, + 0x3232, 0x32A4, 0x3005, 0x3298, 0x3238, 0x32A7, 0x32A6, 0x32A9, + 0x322E, 0x322A, 0x3234, 0x3002, 0x329E, 0x3243, 0x3239, 0x323E, + 0x32A8, 0x3299, 0x3242, 0x3233, 0x3000, 0x3235, 0x3231, 0x323B, + 0x3230, 0x323C, 0x322C, 0x322D, 0x3007, 0x328E, 0x328A, 0x3294, + 0x3290, 0x328C, 0x328D, 0x0907, 0x00EF, 0x1E2F, 0x04E5, 0x1ECB, + 0x04D7, 0x0435, 0x3275, 0x3215, 0x3267, 0x3147, 0x3207, 0x00EC, + 0x0A87, 0x0A07, 0x3044, 0x1EC9, 0x0988, 0x0438, 0x0908, 0x0A88, + 0x0A08, 0x0A40, 0x020B, 0x0439, 0x09C0, 0x0940, 0x0AC0, 0x0133, + 0x30A4, 0xFF72, 0x3163, 0x02DC, 0x05AC, 0x012B, 0x04E3, 0x2253, + 0x0A3F, 0xFF49, 0x2206, 0x221E, 0x056B, 0x222B, 0x2321, 0x2321, + 0xF8F5, 0x2320, 0x2320, 0x2229, 0x3305, 0x25D8, 0x25D9, 0x263B, + 0x0451, 0x012F, 0x03B9, 0x03CA, 0x0390, 0x0269, 0x03AF, 0x24A4, + 0x0A72, 0x3043, 0x30A3, 0xFF68, 0x09FA, 0x0268, 0xF6ED, 0x309D, + 0x30FD, 0x0129, 0x1E2D, 0x3129, 0x044E, 0x09BF, 0x093F, 0x0ABF, + 0x0475, 0x0477, 0x006A, 0x0571, 0x099C, 0x091C, 0x0A9C, 0x0A1C, + 0x3110, 0x01F0, 0x24D9, 0x0135, 0x029D, 0x025F, 0x0458, 0x062C, + 0xFE9E, 0xFE9F, 0xFEA0, 0x0698, 0xFB8B, 0x099D, 0x091D, 0x0A9D, + 0x0A1D, 0x057B, 0x3004, 0xFF4A, 0x24A5, 0x02B2, 0x006B, 0x04A1, + 0x0995, 0x1E31, 0x043A, 0x049B, 0x0915, 0x05DB, 0x0643, 0xFB3B, + 0xFB3B, 0xFEDA, 0x05DB, 0xFEDB, 0xFEDC, 0xFB4D, 0x0A95, 0x0A15, + 0x304B, 0x04C4, 0x30AB, 0xFF76, 0x03BA, 0x03F0, 0x3171, 0x3184, + 0x3178, 0x3179, 0x330D, 0x0640, 0x0640, 0x30F5, 0x3384, 0x0650, + 0x064D, 0x049F, 0xFF70, 0x049D, 0x310E, 0x3389, 0x01E9, 0x0137, + 0x24DA, 0x0137, 0x1E33, 0x0584, 0x3051, 0x30B1, 0xFF79, 0x056F, + 0x30F6, 0x0138, 0x0996, 0x0445, 0x0916, 0x0A96, 0x0A16, 0x062E, + 0xFEA6, 0xFEA7, 0xFEA8, 0x03E7, 0x0959, 0x0A59, 0x3278, 0x3218, + 0x326A, 0x314B, 0x320A, 0x0E02, 0x0E05, 0x0E03, 0x0E04, 0x0E5B, + 0x0199, 0x0E06, 0x3391, 0x304D, 0x30AD, 0xFF77, 0x3315, 0x3316, + 0x3314, 0x326E, 0x320E, 0x3260, 0x3131, 0x3200, 0x3133, 0x045C, + 0x1E35, 0x3398, 0x33A6, 0xFF4B, 0x33A2, 0x3053, 0x33C0, 0x0E01, + 0x30B3, 0xFF7A, 0x331E, 0x0481, 0x327F, 0x0343, 0x24A6, 0x33AA, + 0x046F, 0x33CF, 0x029E, 0x304F, 0x30AF, 0xFF78, 0x33B8, 0x33BE, + 0x006C, 0x09B2, 0x013A, 0x0932, 0x0AB2, 0x0A32, 0x0E45, 0xFEFC, + 0xFEF8, 0xFEF7, 0xFEFA, 0xFEF9, 0xFEFB, 0xFEF6, 0xFEF5, 0x0644, + 0x03BB, 0x019B, 0x05DC, 0xFB3C, 0xFB3C, 0x05DC, 0xFEDE, 0xFCCA, + 0xFEDF, 0xFCC9, 0xFCCB, 0xFDF2, 0xFEE0, 0xFD88, 0xFCCC, 0x25EF, + 0x019A, 0x026C, 0x310C, 0x013E, 0x013C, 0x24DB, 0x1E3D, 0x013C, + 0x0140, 0x0140, 0x1E37, 0x1E39, 0x031A, 0x0318, 0x003C, 0x2264, + 0x22DA, 0xFF1C, 0x2272, 0x2276, 0x2266, 0xFE64, 0x026E, 0x258C, + 0x026D, 0x20A4, 0x056C, 0x01C9, 0x0459, 0xF6C0, 0x0933, 0x0AB3, + 0x1E3B, 0x0934, 0x09E1, 0x0961, 0x09E3, 0x0963, 0x026B, 0xFF4C, + 0x33D0, 0x0E2C, 0x2227, 0x00AC, 0x2310, 0x2228, 0x0E25, 0x017F, + 0xFE4E, 0x0332, 0xFE4D, 0x25CA, 0x24A7, 0x0142, 0x2113, 0xF6EE, + 0x2591, 0x0E26, 0x098C, 0x090C, 0x09E2, 0x0962, 0x33D3, 0x006D, + 0x09AE, 0x00AF, 0x0331, 0x0304, 0x02CD, 0xFFE3, 0x1E3F, 0x092E, + 0x0AAE, 0x0A2E, 0x05A4, 0x05A4, 0x307E, 0xF895, 0xF894, 0x0E4B, + 0xF893, 0xF88C, 0xF88B, 0x0E48, 0xF88A, 0xF884, 0x0E31, 0xF889, + 0x0E47, 0xF88F, 0xF88E, 0x0E49, 0xF88D, 0xF892, 0xF891, 0x0E4A, + 0xF890, 0x0E46, 0x30DE, 0xFF8F, 0x2642, 0x3347, 0x05BE, 0x2642, + 0x05AF, 0x3383, 0x3107, 0x33D4, 0x24DC, 0x33A5, 0x1E41, 0x1E43, + 0x0645, 0xFEE2, 0xFEE3, 0xFEE4, 0xFCD1, 0xFC48, 0x334D, 0x3081, + 0x337E, 0x30E1, 0xFF92, 0x05DE, 0xFB3E, 0xFB3E, 0x05DE, 0x0574, + 0x05A5, 0x05A6, 0x05A6, 0x05A5, 0x0271, 0x3392, 0xFF65, 0x00B7, + 0x3272, 0x3212, 0x3264, 0x3141, 0x3170, 0x3204, 0x316E, 0x316F, + 0x307F, 0x30DF, 0xFF90, 0x2212, 0x0320, 0x2296, 0x02D7, 0x2213, + 0x2032, 0x334A, 0x3349, 0x0270, 0x3396, 0x33A3, 0xFF4D, 0x339F, + 0x3082, 0x33C1, 0x30E2, 0xFF93, 0x33D6, 0x0E21, 0x33A7, 0x33A8, + 0x24A8, 0x33AB, 0x33B3, 0xF6EF, 0x026F, 0x00B5, 0x00B5, 0x3382, + 0x226B, 0x226A, 0x338C, 0x03BC, 0x338D, 0x3080, 0x30E0, 0xFF91, + 0x3395, 0x00D7, 0x339B, 0x05A3, 0x05A3, 0x266A, 0x266B, 0x266D, + 0x266F, 0x33B2, 0x33B6, 0x33BC, 0x33B9, 0x33B7, 0x33BF, 0x33BD, + 0x006E, 0x09A8, 0x2207, 0x0144, 0x0928, 0x0AA8, 0x0A28, 0x306A, + 0x30CA, 0xFF85, 0x0149, 0x3381, 0x310B, 0x00A0, 0x0148, 0x0146, + 0x24DD, 0x1E4B, 0x0146, 0x1E45, 0x1E47, 0x306D, 0x30CD, 0xFF88, + 0x20AA, 0x338B, 0x0999, 0x0919, 0x0A99, 0x0A19, 0x0E07, 0x3093, + 0x0272, 0x0273, 0x326F, 0x320F, 0x3135, 0x3261, 0x3136, 0x3134, + 0x3168, 0x3201, 0x3167, 0x3166, 0x306B, 0x30CB, 0xFF86, 0xF899, + 0x0E4D, 0x0039, 0x0669, 0x09EF, 0x2468, 0x2792, 0x096F, 0x0AEF, + 0x0A6F, 0x0669, 0x3029, 0x3228, 0x2089, 0xFF19, 0xF739, 0x247C, + 0x2490, 0x06F9, 0x2178, 0x2079, 0x2472, 0x2486, 0x249A, 0x0E59, + 0x01CC, 0x045A, 0x30F3, 0xFF9D, 0x019E, 0x1E49, 0xFF4E, 0x339A, + 0x09A3, 0x0923, 0x0AA3, 0x0A23, 0x0929, 0x306E, 0x30CE, 0xFF89, + 0x00A0, 0x0E13, 0x0E19, 0x0646, 0xFEE6, 0x06BA, 0xFB9F, 0xFEE7, + 0xFCD2, 0xFC4B, 0xFEE8, 0xFCD5, 0xFC4E, 0xFC8D, 0x220C, 0x2209, + 0x2209, 0x2260, 0x226F, 0x2271, 0x2279, 0x2262, 0x226E, 0x2270, + 0x2226, 0x2280, 0x2284, 0x2281, 0x2285, 0x0576, 0x24A9, 0x33B1, + 0x207F, 0x00F1, 0x03BD, 0x306C, 0x30CC, 0xFF87, 0x09BC, 0x093C, + 0x0ABC, 0x0A3C, 0x0023, 0xFF03, 0xFE5F, 0x0374, 0x0375, 0x2116, + 0x05E0, 0xFB40, 0xFB40, 0x05E0, 0x33B5, 0x33BB, 0x099E, 0x091E, + 0x0A9E, 0x0A1E, 0x006F, 0x00F3, 0x0E2D, 0x0275, 0x04E9, 0x04EB, + 0x0993, 0x311B, 0x014F, 0x0911, 0x0A91, 0x0949, 0x0AC9, 0x01D2, + 0x24DE, 0x00F4, 0x1ED1, 0x1ED9, 0x1ED3, 0x1ED5, 0x1ED7, 0x043E, + 0x0151, 0x020D, 0x0913, 0x00F6, 0x04E7, 0x1ECD, 0x0153, 0x315A, + 0x02DB, 0x0328, 0x00F2, 0x0A93, 0x0585, 0x304A, 0x1ECF, 0x01A1, + 0x1EDB, 0x1EE3, 0x1EDD, 0x1EDF, 0x1EE1, 0x0151, 0x01A3, 0x020F, + 0x30AA, 0xFF75, 0x3157, 0x05AB, 0x014D, 0x1E53, 0x1E51, 0x0950, + 0x03C9, 0x03D6, 0x0461, 0x0277, 0x047B, 0x047D, 0x03CE, 0x0AD0, + 0x03BF, 0x03CC, 0xFF4F, 0x0031, 0x0661, 0x09E7, 0x2460, 0x278A, + 0x0967, 0x2024, 0x215B, 0xF6DC, 0x0AE7, 0x0A67, 0x0661, 0x00BD, + 0x3021, 0x3220, 0x2081, 0xFF11, 0x09F4, 0xF731, 0x2474, 0x2488, + 0x06F1, 0x00BC, 0x2170, 0x00B9, 0x0E51, 0x2153, 0x01EB, 0x01ED, + 0x0A13, 0x0A4B, 0x0254, 0x24AA, 0x25E6, 0x2325, 0x00AA, 0x00BA, + 0x221F, 0x0912, 0x094A, 0x00F8, 0x01FF, 0x3049, 0x30A9, 0xFF6B, + 0x01FF, 0xF6F0, 0x047F, 0x00F5, 0x1E4D, 0x1E4F, 0x3121, 0x203E, + 0xFE4A, 0x0305, 0xFE49, 0xFE4C, 0xFE4B, 0x00AF, 0x09CB, 0x094B, + 0x0ACB, 0x0070, 0x3380, 0x332B, 0x09AA, 0x1E55, 0x092A, 0x21DF, + 0x21DE, 0x0AAA, 0x0A2A, 0x3071, 0x0E2F, 0x30D1, 0x0484, 0x04C0, + 0x317F, 0x00B6, 0x2225, 0x0028, 0xFD3E, 0xF8ED, 0xF8EC, 0x208D, + 0xFF08, 0xFE59, 0x207D, 0xF8EB, 0xFE35, 0x0029, 0xFD3F, 0xF8F8, + 0xF8F7, 0x208E, 0xFF09, 0xFE5A, 0x207E, 0xF8F6, 0xFE36, 0x2202, + 0x05C0, 0x0599, 0x33A9, 0x05B7, 0x05B7, 0x05B7, 0x05B7, 0x05B7, + 0x05B7, 0x05B7, 0x05B7, 0x05A1, 0x3106, 0x24DF, 0x1E57, 0x05E4, + 0x043F, 0xFB44, 0xFB44, 0x333B, 0xFB43, 0x067E, 0x057A, 0x05E4, + 0xFB57, 0xFB58, 0x307A, 0xFB59, 0x30DA, 0x04A7, 0xFB4E, 0x0025, + 0x066A, 0xFF05, 0xFE6A, 0x002E, 0x0589, 0x00B7, 0xFF61, 0xF6E7, + 0xFF0E, 0xFE52, 0xF6E8, 0x0342, 0x22A5, 0x2030, 0x20A7, 0x338A, + 0x09AB, 0x092B, 0x0AAB, 0x0A2B, 0x03C6, 0x03D5, 0x327A, 0x321A, + 0x326C, 0x314D, 0x320C, 0x0278, 0x0E3A, 0x03D5, 0x01A5, 0x0E1E, + 0x0E1C, 0x0E20, 0x03C0, 0x3273, 0x3213, 0x3176, 0x3265, 0x3172, + 0x3142, 0x3205, 0x3174, 0x3144, 0x3175, 0x3177, 0x3173, 0x3074, + 0x30D4, 0x03D6, 0x0583, 0x002B, 0x031F, 0x2295, 0x00B1, 0x02D6, + 0xFF0B, 0xFE62, 0x207A, 0xFF50, 0x33D8, 0x307D, 0x261F, 0x261C, + 0x261E, 0x261D, 0x30DD, 0x0E1B, 0x3012, 0x3020, 0x24AB, 0x227A, + 0x211E, 0x02B9, 0x2035, 0x220F, 0x2305, 0x30FC, 0x2318, 0x2282, + 0x2283, 0x2237, 0x221D, 0x03C8, 0x0471, 0x0486, 0x33B0, 0x3077, + 0x30D7, 0x33B4, 0x33BA, 0x0071, 0x0958, 0x05A8, 0x0642, 0xFED6, + 0xFED7, 0xFED8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, + 0x05B8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, 0x05B8, + 0x05B8, 0x05B8, 0x059F, 0x3111, 0x24E0, 0x02A0, 0xFF51, 0x05E7, + 0xFB47, 0xFB47, 0x05E7, 0x24AC, 0x2669, 0x05BB, 0x05BB, 0x05BB, + 0x05BB, 0x05BB, 0x05BB, 0x05BB, 0x05BB, 0x003F, 0x061F, 0x055E, + 0x00BF, 0xF7BF, 0x037E, 0xFF1F, 0xF73F, 0x0022, 0x201E, 0x201C, + 0xFF02, 0x301E, 0x301D, 0x201D, 0x2018, 0x201B, 0x201B, 0x2019, + 0x0149, 0x201A, 0x0027, 0xFF07, 0x0072, 0x057C, 0x09B0, 0x0155, + 0x0930, 0x221A, 0xF8E5, 0x33AE, 0x33AF, 0x33AD, 0x05BF, 0x05BF, + 0x0AB0, 0x0A30, 0x3089, 0x30E9, 0xFF97, 0x09F1, 0x09F0, 0x0264, + 0x2236, 0x3116, 0x0159, 0x0157, 0x24E1, 0x0157, 0x0211, 0x1E59, + 0x1E5B, 0x1E5D, 0x203B, 0x2286, 0x2287, 0x00AE, 0xF8E8, 0xF6DA, + 0x0631, 0x0580, 0xFEAE, 0x308C, 0x30EC, 0xFF9A, 0x05E8, 0xFB48, + 0x05E8, 0x223D, 0x0597, 0x0597, 0x2310, 0x027E, 0x027F, 0x09DD, + 0x095D, 0x03C1, 0x027D, 0x027B, 0x02B5, 0x03F1, 0x02DE, 0x3271, + 0x3211, 0x3263, 0x3140, 0x313A, 0x3169, 0x3139, 0x313B, 0x316C, + 0x3203, 0x313F, 0x313C, 0x316B, 0x313D, 0x313E, 0x316A, 0x316D, + 0x221F, 0x0319, 0x22BF, 0x308A, 0x30EA, 0xFF98, 0x02DA, 0x0325, + 0x030A, 0x02BF, 0x0559, 0x031C, 0x02D3, 0x02BE, 0x0339, 0x02D2, + 0x0213, 0x3351, 0x1E5F, 0x027C, 0x027A, 0xFF52, 0x308D, 0x30ED, + 0xFF9B, 0x0E23, 0x24AD, 0x09DC, 0x0931, 0x0A5C, 0x0691, 0xFB8D, + 0x09E0, 0x0960, 0x0AE0, 0x09C4, 0x0944, 0x0AC4, 0xF6F1, 0x2590, + 0x0279, 0x02B4, 0x308B, 0x30EB, 0xFF99, 0x09F2, 0x09F3, 0xF6DD, + 0x0E24, 0x098B, 0x090B, 0x0A8B, 0x09C3, 0x0943, 0x0AC3, 0x0073, + 0x09B8, 0x015B, 0x1E65, 0x0635, 0x0938, 0xFEBA, 0xFEBB, 0xFEBC, + 0x0AB8, 0x0A38, 0x3055, 0x30B5, 0xFF7B, 0xFDFA, 0x05E1, 0xFB41, + 0xFB41, 0x05E1, 0x0E32, 0x0E41, 0x0E44, 0x0E43, 0x0E33, 0x0E30, + 0x0E40, 0xF886, 0x0E35, 0xF885, 0x0E34, 0x0E42, 0xF888, 0x0E37, + 0xF887, 0x0E36, 0x0E38, 0x0E39, 0x3119, 0x0161, 0x1E67, 0x015F, + 0x0259, 0x04D9, 0x04DB, 0x025A, 0x24E2, 0x015D, 0x0219, 0x1E61, + 0x1E63, 0x1E69, 0x033C, 0x2033, 0x02CA, 0x00A7, 0x0633, 0xFEB2, + 0xFEB3, 0xFEB4, 0x05B6, 0x05B6, 0x05B6, 0x05B6, 0x05B6, 0x05B6, + 0x05B6, 0x0592, 0x05B6, 0x057D, 0x305B, 0x30BB, 0xFF7E, 0x003B, + 0x061B, 0xFF1B, 0xFE54, 0x309C, 0xFF9F, 0x3322, 0x3323, 0x0037, + 0x0667, 0x09ED, 0x2466, 0x2790, 0x096D, 0x215E, 0x0AED, 0x0A6D, + 0x0667, 0x3027, 0x3226, 0x2087, 0xFF17, 0xF737, 0x247A, 0x248E, + 0x06F7, 0x2176, 0x2077, 0x2470, 0x2484, 0x2498, 0x0E57, 0x00AD, + 0x0577, 0x09B6, 0x0448, 0x0651, 0xFC61, 0xFC5E, 0xFC60, 0xFC62, + 0xFC5F, 0x2592, 0x2593, 0x2591, 0x2592, 0x0936, 0x0AB6, 0x0A36, + 0x0593, 0x3115, 0x0449, 0x0634, 0xFEB6, 0xFEB7, 0xFEB8, 0x03E3, + 0x20AA, 0x20AA, 0x05B0, 0x05B0, 0x05B0, 0x05B0, 0x05B0, 0x05B0, + 0x05B0, 0x05B0, 0x05B0, 0x04BB, 0x03ED, 0x05E9, 0xFB49, 0xFB49, + 0xFB2C, 0xFB2C, 0xFB2D, 0xFB2D, 0x05C1, 0x05E9, 0xFB2A, 0xFB2A, + 0xFB2B, 0xFB2B, 0x0282, 0x03C3, 0x03C2, 0x03C2, 0x03F2, 0x3057, + 0x30B7, 0xFF7C, 0x05BD, 0x05BD, 0x223C, 0x05C2, 0x3274, 0x3214, + 0x317E, 0x3266, 0x317A, 0x3145, 0x317B, 0x3206, 0x317D, 0x317C, + 0x0036, 0x0666, 0x09EC, 0x2465, 0x278F, 0x096C, 0x0AEC, 0x0A6C, + 0x0666, 0x3026, 0x3225, 0x2086, 0xFF16, 0xF736, 0x2479, 0x248D, + 0x06F6, 0x2175, 0x2076, 0x246F, 0x09F9, 0x2483, 0x2497, 0x0E56, + 0x002F, 0xFF0F, 0x017F, 0x1E9B, 0x263A, 0xFF53, 0x05C3, 0x00AD, + 0x044C, 0x305D, 0x30BD, 0xFF7F, 0x0338, 0x0337, 0x0E29, 0x0E28, + 0x0E0B, 0x0E2A, 0x0020, 0x0020, 0x2660, 0x2660, 0x2664, 0x24AE, + 0x033B, 0x33C4, 0x339D, 0x25A9, 0x25A4, 0x338F, 0x339E, 0x33CE, + 0x33D1, 0x33D2, 0x338E, 0x33D5, 0x339C, 0x33A1, 0x25A6, 0x25A7, + 0x25A8, 0x25A5, 0x25A3, 0x33DB, 0x09B7, 0x0937, 0x0AB7, 0x3149, + 0x3185, 0x3180, 0x3132, 0x3165, 0x3143, 0x3146, 0x3138, 0xF6F2, + 0x00A3, 0xFFE1, 0x0336, 0x0335, 0x2282, 0x228A, 0x2286, 0x227B, + 0x220B, 0x3059, 0x30B9, 0xFF7D, 0x0652, 0x2211, 0x263C, 0x2283, + 0x228B, 0x2287, 0x33DC, 0x337C, 0x0074, 0x09A4, 0x22A4, 0x22A3, + 0x0924, 0x0AA4, 0x0A24, 0x0637, 0xFEC2, 0xFEC3, 0x305F, 0xFEC4, + 0x337D, 0x30BF, 0xFF80, 0x0640, 0x03C4, 0x05EA, 0xFB4A, 0xFB4A, + 0xFB4A, 0x05EA, 0x0167, 0x310A, 0x0165, 0x02A8, 0x0163, 0x0686, + 0xFB7B, 0xFB7C, 0xFB7D, 0x24E3, 0x1E71, 0x0163, 0x1E97, 0x1E6B, + 0x1E6D, 0x0442, 0x04AD, 0x062A, 0xFE96, 0xFCA2, 0xFC0C, 0xFE97, + 0x3066, 0xFCA1, 0xFC0B, 0x0629, 0xFE94, 0xFE98, 0xFCA4, 0xFC0E, + 0xFC73, 0x30C6, 0xFF83, 0x2121, 0x260E, 0x05A0, 0x05A9, 0x2469, + 0x3229, 0x247D, 0x2491, 0x2179, 0x02A7, 0x05D8, 0xFB38, 0xFB38, + 0x05D8, 0x04B5, 0x059B, 0x059B, 0x09A5, 0x0925, 0x0AA5, 0x0A25, + 0x0630, 0xFEAC, 0xF898, 0xF897, 0x0E4C, 0xF896, 0x062B, 0xFE9A, + 0xFE9B, 0xFE9C, 0x2203, 0x2234, 0x03B8, 0x03D1, 0x03D1, 0x3279, + 0x3219, 0x326B, 0x314C, 0x320B, 0x246C, 0x2480, 0x2494, 0x0E11, + 0x01AD, 0x0E12, 0x00FE, 0x0E17, 0x0E10, 0x0E18, 0x0E16, 0x0482, + 0x066C, 0x066C, 0x0033, 0x0663, 0x09E9, 0x2462, 0x278C, 0x0969, + 0x215C, 0x0AE9, 0x0A69, 0x0663, 0x3023, 0x3222, 0x2083, 0xFF13, + 0x09F6, 0xF733, 0x2476, 0x248A, 0x06F3, 0x00BE, 0xF6DE, 0x2172, + 0x00B3, 0x0E53, 0x3394, 0x3061, 0x30C1, 0xFF81, 0x3270, 0x3210, + 0x3262, 0x3137, 0x3202, 0x02DC, 0x0330, 0x0303, 0x0303, 0x0360, + 0x223C, 0x0334, 0x033E, 0x2297, 0x0596, 0x0596, 0x0A70, 0x0483, + 0x057F, 0x1E6F, 0xFF54, 0x0569, 0x3068, 0x30C8, 0xFF84, 0x02E5, + 0x02E9, 0x02E6, 0x02E8, 0x02E7, 0x01BD, 0x0185, 0x01A8, 0x0384, + 0x3327, 0x0E0F, 0x3014, 0xFE5D, 0xFE39, 0x3015, 0xFE5E, 0xFE3A, + 0x0E15, 0x01AB, 0x24AF, 0x2122, 0xF8EA, 0xF6DB, 0x0288, 0x25BC, + 0x25C4, 0x25BA, 0x25B2, 0x02A6, 0x05E6, 0xFB46, 0xFB46, 0x05E6, + 0x0446, 0x05B5, 0x05B5, 0x05B5, 0x05B5, 0x05B5, 0x05B5, 0x05B5, + 0x05B5, 0x045B, 0xF6F3, 0x099F, 0x091F, 0x0A9F, 0x0A1F, 0x0679, + 0xFB67, 0xFB68, 0xFB69, 0x09A0, 0x0920, 0x0AA0, 0x0A20, 0x0287, + 0x3064, 0x30C4, 0xFF82, 0x3063, 0x30C3, 0xFF6F, 0x246B, 0x247F, + 0x2493, 0x217B, 0x2473, 0x5344, 0x2487, 0x249B, 0x0032, 0x0662, + 0x09E8, 0x2461, 0x278B, 0x0968, 0x2025, 0x2025, 0xFE30, 0x0AE8, + 0x0A68, 0x0662, 0x3022, 0x3221, 0x2082, 0xFF12, 0x09F5, 0xF732, + 0x2475, 0x2489, 0x06F2, 0x2171, 0x01BB, 0x00B2, 0x0E52, 0x2154, + 0x0075, 0x00FA, 0x0289, 0x0989, 0x3128, 0x016D, 0x01D4, 0x24E4, + 0x00FB, 0x1E77, 0x0443, 0x0951, 0x0171, 0x0215, 0x0909, 0x00FC, + 0x01D8, 0x1E73, 0x01DA, 0x04F1, 0x01DC, 0x01D6, 0x1EE5, 0x00F9, + 0x0A89, 0x0A09, 0x3046, 0x1EE7, 0x01B0, 0x1EE9, 0x1EF1, 0x1EEB, + 0x1EED, 0x1EEF, 0x0171, 0x04F3, 0x0217, 0x30A6, 0xFF73, 0x0479, + 0x315C, 0x016B, 0x04EF, 0x1E7B, 0x0A41, 0xFF55, 0x005F, 0x2017, + 0xFF3F, 0xFE33, 0xFE4F, 0x222A, 0x2200, 0x0173, 0x24B0, 0x2580, + 0x05C4, 0x03C5, 0x03CB, 0x03B0, 0x028A, 0x03CD, 0x031D, 0x02D4, + 0x0A73, 0x016F, 0x045E, 0x3045, 0x30A5, 0xFF69, 0x04AF, 0x04B1, + 0x0169, 0x1E79, 0x1E75, 0x098A, 0x090A, 0x0A8A, 0x0A0A, 0x0A42, + 0x09C2, 0x0942, 0x0AC2, 0x09C1, 0x0941, 0x0AC1, 0x0076, 0x0935, + 0x0AB5, 0x0A35, 0x30F7, 0x05D5, 0xFB35, 0xFB35, 0xFB35, 0x05D5, + 0xFB4B, 0xFB4B, 0x05F0, 0x05F1, 0x24E5, 0x1E7F, 0x0432, 0x06A4, + 0xFB6B, 0xFB6C, 0xFB6D, 0x30F9, 0x2640, 0x007C, 0x030D, 0x0329, + 0x02CC, 0x02C8, 0x057E, 0x028B, 0x30F8, 0x09CD, 0x094D, 0x0ACD, + 0x0983, 0x0903, 0x0A83, 0xFF56, 0x0578, 0x309E, 0x30FE, 0x309B, + 0xFF9E, 0x30FA, 0x24B1, 0x1E7D, 0x028C, 0x3094, 0x30F4, 0x0077, + 0x1E83, 0x3159, 0x308F, 0x30EF, 0xFF9C, 0x3158, 0x308E, 0x30EE, + 0x3357, 0x301C, 0xFE34, 0x0648, 0xFEEE, 0x0624, 0xFE86, 0x33DD, + 0x24E6, 0x0175, 0x1E85, 0x1E87, 0x1E89, 0x3091, 0x2118, 0x30F1, + 0x315E, 0x315D, 0x1E81, 0x25E6, 0x25CB, 0x25D9, 0x300E, 0xFE43, + 0x300F, 0xFE44, 0x25C7, 0x25C8, 0x25BF, 0x25BD, 0x25C3, 0x25C1, + 0x3016, 0x3017, 0x25B9, 0x25B7, 0x25AB, 0x263A, 0x25A1, 0x2606, + 0x260F, 0x3018, 0x3019, 0x25B5, 0x25B3, 0x3090, 0x30F0, 0x315F, + 0xFF57, 0x3092, 0x30F2, 0xFF66, 0x20A9, 0xFFE6, 0x0E27, 0x24B2, + 0x1E98, 0x02B7, 0x028D, 0x01BF, 0x0078, 0x033D, 0x3112, 0x24E7, + 0x1E8D, 0x1E8B, 0x056D, 0x03BE, 0xFF58, 0x24B3, 0x02E3, 0x0079, + 0x334E, 0x09AF, 0x00FD, 0x092F, 0x3152, 0x0AAF, 0x0A2F, 0x3084, + 0x30E4, 0xFF94, 0x3151, 0x0E4E, 0x3083, 0x30E3, 0xFF6C, 0x0463, + 0x24E8, 0x0177, 0x00FF, 0x1E8F, 0x1EF5, 0x064A, 0x06D2, 0xFBAF, + 0xFEF2, 0x0626, 0xFE8A, 0xFE8B, 0xFE8C, 0xFEF3, 0xFEF4, 0xFCDD, + 0xFC58, 0xFC94, 0x06D1, 0x3156, 0x00A5, 0xFFE5, 0x3155, 0x3186, + 0x05AA, 0x05AA, 0x044B, 0x04F9, 0x3181, 0x3183, 0x3182, 0x059A, + 0x1EF3, 0x01B4, 0x1EF7, 0x0575, 0x0457, 0x3162, 0x262F, 0x0582, + 0xFF59, 0x05D9, 0xFB39, 0xFB39, 0x05D9, 0x05F2, 0xFB1F, 0x3088, + 0x3189, 0x30E8, 0xFF96, 0x315B, 0x3087, 0x30E7, 0xFF6E, 0x03F3, + 0x3188, 0x3187, 0x0E22, 0x0E0D, 0x24B4, 0x037A, 0x0345, 0x01A6, + 0x1E99, 0x02B8, 0x1EF9, 0x028E, 0x3086, 0x318C, 0x30E6, 0xFF95, + 0x3160, 0x046B, 0x046D, 0x0467, 0x0469, 0x3085, 0x30E5, 0xFF6D, + 0x318B, 0x318A, 0x09DF, 0x095F, 0x007A, 0x0566, 0x017A, 0x095B, + 0x0A5B, 0x0638, 0xFEC6, 0xFEC7, 0x3056, 0xFEC8, 0x0632, 0xFEB0, + 0x30B6, 0x0595, 0x0594, 0x0598, 0x05D6, 0xFB36, 0xFB36, 0x05D6, + 0x3117, 0x017E, 0x24E9, 0x1E91, 0x0291, 0x017C, 0x017C, 0x1E93, + 0x0437, 0x0499, 0x04DF, 0x305C, 0x30BC, 0x0030, 0x0660, 0x09E6, + 0x0966, 0x0AE6, 0x0A66, 0x0660, 0x2080, 0xFF10, 0xF730, 0x06F0, + 0x2070, 0x0E50, 0xFEFF, 0x200C, 0x200B, 0x03B6, 0x3113, 0x056A, + 0x04C2, 0x0436, 0x0497, 0x04DD, 0x3058, 0x30B8, 0x05AE, 0x1E95, + 0xFF5A, 0x305E, 0x30BE, 0x24B5, 0x0290, 0x01B6, 0x305A, 0x30BA, +}; + +wchar_t ps_glyph_to_unicode(glyph g) +{ + if (g == NOGLYPH) return 0xFFFF; + return ps_codes_alphabetic[g]; +} + +/* ---------------------------------------------------------------------- + * Data about the standard fonts: available glyphs and font metrics. + */ + +/* + * Character set list extracted from the back of the PostScript + * Language Reference Manual. + * + * I'm going to include a bit of shell which creates a file + * containing the list of characters, and then several further bits + * of shell that process it in different ways. + */ + +/* + +tr -s ' \n' '\n' << EOF > stdchars.txt +A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +a b c d e f g h i j k l m n o p q r s t u v w x y z +AE Aacute Acircumflex Adieresis Agrave Aring Atilde +Ccedilla +Eacute Ecircumflex Edieresis Egrave +Eth +Iacute Icircumflex Idieresis Igrave +Lslash +Ntilde +OE Oacute Ocircumflex Odieresis Ograve Oslash Otilde +Scaron +Thorn +Uacute Ucircumflex Udieresis Ugrave +Yacute Ydieresis +Zcaron +ae aacute acircumflex adieresis agrave aring atilde +ccedilla +eacute ecircumflex edieresis egrave +eth +iacute icircumflex idieresis igrave +lslash +ntilde +oe oacute ocircumflex odieresis ograve oslash otilde +scaron +thorn +uacute ucircumflex udieresis ugrave +yacute ydieresis +zcaron +acute ampersand asciicircum asciitilde asterisk at backslash bar +braceleft braceright bracketleft bracketright breve brokenbar bullet +caron cedilla cent circumflex colon comma copyright currency dagger +daggerdbl degree dieresis divide dollar dotaccent dotlessi eight +ellipsis emdash endash equal exclam exclamdown fi five fl florin +four fraction germandbls grave greater guillemotleft guillemotright +guilsinglleft guilsinglright hungarumlaut hyphen less logicalnot +macron minus mu multiply nine numbersign ogonek one onehalf onequarter +onesuperior ordfeminine ordmasculine paragraph parenleft parenright +percent period periodcentered perthousand plus plusminus question +questiondown quotedbl quotedblbase quotedblleft quotedblright quoteleft +quoteright quotesinglbase quotesingle registered ring section semicolon +seven six slash space sterling three threequarters threesuperior tilde +trademark two twosuperior underscore yen zero +EOF + + */ + +/* + * A simple string array giving the glyph list. + */ + +/* + +perl -ne 'chomp; print "\"$_\", "; END { print "NULL" }' stdchars.txt | \ + fold -s -w68 | sed 's/^/ /' + +*/ + +const char *const ps_std_glyphs[] = { + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", + "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + "AE", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", + "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", + "Egrave", "Eth", "Iacute", "Icircumflex", "Idieresis", "Igrave", + "Lslash", "Ntilde", "OE", "Oacute", "Ocircumflex", "Odieresis", + "Ograve", "Oslash", "Otilde", "Scaron", "Thorn", "Uacute", + "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", + "Zcaron", "ae", "aacute", "acircumflex", "adieresis", "agrave", + "aring", "atilde", "ccedilla", "eacute", "ecircumflex", + "edieresis", "egrave", "eth", "iacute", "icircumflex", "idieresis", + "igrave", "lslash", "ntilde", "oe", "oacute", "ocircumflex", + "odieresis", "ograve", "oslash", "otilde", "scaron", "thorn", + "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", + "ydieresis", "zcaron", "acute", "ampersand", "asciicircum", + "asciitilde", "asterisk", "at", "backslash", "bar", "braceleft", + "braceright", "bracketleft", "bracketright", "breve", "brokenbar", + "bullet", "caron", "cedilla", "cent", "circumflex", "colon", + "comma", "copyright", "currency", "dagger", "daggerdbl", "degree", + "dieresis", "divide", "dollar", "dotaccent", "dotlessi", "eight", + "ellipsis", "emdash", "endash", "equal", "exclam", "exclamdown", + "fi", "five", "fl", "florin", "four", "fraction", "germandbls", + "grave", "greater", "guillemotleft", "guillemotright", + "guilsinglleft", "guilsinglright", "hungarumlaut", "hyphen", + "less", "logicalnot", "macron", "minus", "mu", "multiply", "nine", + "numbersign", "ogonek", "one", "onehalf", "onequarter", + "onesuperior", "ordfeminine", "ordmasculine", "paragraph", + "parenleft", "parenright", "percent", "period", "periodcentered", + "perthousand", "plus", "plusminus", "question", "questiondown", + "quotedbl", "quotedblbase", "quotedblleft", "quotedblright", + "quoteleft", "quoteright", "quotesinglbase", "quotesingle", + "registered", "ring", "section", "semicolon", "seven", "six", + "slash", "space", "sterling", "three", "threequarters", + "threesuperior", "tilde", "trademark", "two", "twosuperior", + "underscore", "yen", "zero", NULL +}; + +/* + * Character width information from the standard PS fonts. + * Units are UNITS_PER_PT defined in paper.h. + * Extracted from the AFM files in + * <http://partners.adobe.com/public/developer/en/pdf/Core14_AFMs.tar> + * by the following script: + +fonts="Times-Roman Times-Italic Times-Bold Times-BoldItalic \ + Helvetica Helvetica-Oblique Helvetica-Bold Helvetica-BoldOblique \ + Courier Courier-Oblique Courier-Bold Courier-BoldOblique" + +for i in $fonts; do + printf 'static const kern_pair %s_kerns[] = {\n' $(echo $i | tr 'A-Z\-' a-z_) + perl -e ' +open S, "stdchars.txt" or die; +chomp(@s = <S>); +open G, "glyphnames.txt" or die; +chomp(@g = <G>); %g = map(($_, $i++), @g); %g = map(($_, $g{$_}), @s); +open M, "$ARGV[0].afm" or die; +while (<M>) { /KPX (\S+) (\S+) (\S+)/ and exists $g{$1} and exists $g{$2} and + print "{$g{$1},$g{$2},$3}, "; } print "\n"' $i |\ + fold -sw 68 | sed 's/^/ /' + printf ' {NOGLYPH,NOGLYPH,0}\n};\n' + printf 'static const ligature %s_ligs[] = {\n' $(echo $i | tr 'A-Z\-' a-z_) + perl -e ' +open S, "stdchars.txt" or die; +chomp(@s = <S>); +open G, "glyphnames.txt" or die; +chomp(@g = <G>); %g = map(($_, $i++), @g); %g = map(($_, $g{$_}), @s); +open M, "$ARGV[0].afm" or die; +while (<M>) { / N (\S+) / and $l = $1; + while (/ L (\S+) (\S+) /g) { exists $g{$l} and exists $g{$1} and + exists $g{$2} and print "{$g{$l},$g{$1},$g{$2}}, "; } } print "\n"' $i |\ + fold -sw 68 | sed 's/^/ /' + printf ' {NOGLYPH,NOGLYPH,NOGLYPH}\n};\n' +done + +cat <<DECL + +static const struct ps_std_font_data { + char const *name; + kern_pair const *kerns; + ligature const *ligs; + int widths[lenof(ps_std_glyphs)-1]; +} ps_std_fonts[] = { +DECL +for i in $fonts; do + printf ' { "%s",\n\t%s_kerns, %s_ligs, {\n' $i \ + $(echo $i | tr 'A-Z\-' a-z_) $(echo $i | tr 'A-Z\-' a-z_) + perl -e ' +open M, "$ARGV[0].afm" or die; +while (<M>) { /WX (\d+) ; N (\S+)/ and $m{$2} = $1; } +open G, "stdchars.txt" or die; +while (<G>) { chomp; print "$m{$_}, " }; print "\n"' $i |\ + fold -sw 68 | sed 's/^/ /' + printf ' }},\n' +done +printf '};\n' + + * The AFM files have the following copyright and licence: + * + * Copyright (c) 1985, 1987, 1989, 1990, 1991, 1992, 1993, 1997 + * Adobe Systems Incorporated. All Rights Reserved. + * + * This file and the 14 PostScript(R) AFM files it accompanies may be + * used, copied, and distributed for any purpose and without charge, + * with or without modification, provided that all copyright notices + * are retained; that the AFM files are not distributed without this + * file; that all modifications to this file or any of the AFM files + * are prominently noted in the modified file(s); and that this + * paragraph is not modified. Adobe Systems has no responsibility or + * obligation to support the use of the AFM files. + */ + +static const kern_pair times_roman_kerns[] = { + {0,64,-40}, {0,70,-40}, {0,203,-40}, {0,393,-55}, {0,396,-55}, + {0,404,-55}, {0,414,-55}, {0,419,-55}, {0,449,-55}, {0,455,-55}, + {0,474,-55}, {0,570,-111}, {0,603,-55}, {0,604,-55}, {0,609,-55}, + {0,615,-55}, {0,624,-55}, {0,658,-135}, {0,668,-90}, {0,686,-105}, + {0,687,-105}, {0,692,-105}, {0,3143,-111}, {0,3902,-74}, + {0,3951,-92}, {0,4031,-92}, {0,4034,-92}, {0,4050,-92}, {5,64,-40}, + {5,70,-40}, {5,203,-40}, {5,393,-55}, {5,396,-55}, {5,404,-55}, + {5,414,-55}, {5,419,-55}, {5,449,-55}, {5,455,-55}, {5,474,-55}, + {5,570,-111}, {5,603,-55}, {5,604,-55}, {5,609,-55}, {5,615,-55}, + {5,624,-55}, {5,658,-135}, {5,668,-90}, {5,686,-105}, {5,687,-105}, + {5,692,-105}, {5,3143,-111}, {5,3902,-74}, {5,3951,-92}, + {5,4031,-92}, {5,4034,-92}, {5,4050,-92}, {16,64,-40}, {16,70,-40}, + {16,203,-40}, {16,393,-55}, {16,396,-55}, {16,404,-55}, + {16,414,-55}, {16,419,-55}, {16,449,-55}, {16,455,-55}, + {16,474,-55}, {16,570,-111}, {16,603,-55}, {16,604,-55}, + {16,609,-55}, {16,615,-55}, {16,624,-55}, {16,658,-135}, + {16,668,-90}, {16,686,-105}, {16,687,-105}, {16,692,-105}, + {16,3143,-111}, {16,3902,-74}, {16,3951,-92}, {16,4031,-92}, + {16,4034,-92}, {16,4050,-92}, {27,64,-40}, {27,70,-40}, + {27,203,-40}, {27,393,-55}, {27,396,-55}, {27,404,-55}, + {27,414,-55}, {27,419,-55}, {27,449,-55}, {27,455,-55}, + {27,474,-55}, {27,570,-111}, {27,603,-55}, {27,604,-55}, + {27,609,-55}, {27,615,-55}, {27,624,-55}, {27,658,-135}, + {27,668,-90}, {27,686,-105}, {27,687,-105}, {27,692,-105}, + {27,3143,-111}, {27,3902,-74}, {27,3951,-92}, {27,4031,-92}, + {27,4034,-92}, {27,4050,-92}, {33,64,-40}, {33,70,-40}, + {33,203,-40}, {33,393,-55}, {33,396,-55}, {33,404,-55}, + {33,414,-55}, {33,419,-55}, {33,449,-55}, {33,455,-55}, + {33,474,-55}, {33,570,-111}, {33,603,-55}, {33,604,-55}, + {33,609,-55}, {33,615,-55}, {33,624,-55}, {33,658,-135}, + {33,668,-90}, {33,686,-105}, {33,687,-105}, {33,692,-105}, + {33,3143,-111}, {33,3902,-74}, {33,3951,-92}, {33,4031,-92}, + {33,4034,-92}, {33,4050,-92}, {43,64,-40}, {43,70,-40}, + {43,203,-40}, {43,393,-55}, {43,396,-55}, {43,404,-55}, + {43,414,-55}, {43,419,-55}, {43,449,-55}, {43,455,-55}, + {43,474,-55}, {43,570,-111}, {43,603,-55}, {43,604,-55}, + {43,609,-55}, {43,615,-55}, {43,624,-55}, {43,658,-135}, + {43,668,-90}, {43,686,-105}, {43,687,-105}, {43,692,-105}, + {43,3143,-111}, {43,3902,-74}, {43,3951,-92}, {43,4031,-92}, + {43,4034,-92}, {43,4050,-92}, {48,64,-40}, {48,70,-40}, + {48,203,-40}, {48,393,-55}, {48,396,-55}, {48,404,-55}, + {48,414,-55}, {48,419,-55}, {48,449,-55}, {48,455,-55}, + {48,474,-55}, {48,570,-111}, {48,603,-55}, {48,604,-55}, + {48,609,-55}, {48,615,-55}, {48,624,-55}, {48,658,-135}, + {48,668,-90}, {48,686,-105}, {48,687,-105}, {48,692,-105}, + {48,3143,-111}, {48,3902,-74}, {48,3951,-92}, {48,4031,-92}, + {48,4034,-92}, {48,4050,-92}, {51,0,-35}, {51,5,-35}, {51,16,-35}, + {51,27,-35}, {51,33,-35}, {51,43,-35}, {51,48,-35}, {51,603,-10}, + {51,604,-10}, {51,609,-10}, {51,615,-10}, {51,624,-10}, {93,0,-40}, + {93,5,-40}, {93,16,-40}, {93,27,-40}, {93,33,-40}, {93,43,-40}, + {93,48,-40}, {93,658,-40}, {93,668,-30}, {93,686,-55}, + {93,687,-55}, {93,692,-55}, {192,0,-74}, {192,5,-74}, {192,16,-74}, + {192,27,-74}, {192,33,-74}, {192,43,-74}, {192,48,-74}, + {192,734,-15}, {192,736,-15}, {192,758,-15}, {192,775,-15}, + {192,1030,-15}, {192,1111,-15}, {192,1173,-15}, {192,1409,-80}, + {192,2794,-15}, {192,2795,-15}, {192,2809,-15}, {192,2819,-15}, + {192,2826,-15}, {192,2899,-15}, {192,2907,-15}, {192,2995,-80}, + {301,0,-60}, {301,5,-60}, {301,16,-60}, {301,27,-60}, {301,33,-60}, + {301,43,-60}, {301,48,-60}, {309,393,-30}, {309,396,-30}, + {309,404,-30}, {309,414,-30}, {309,419,-30}, {309,449,-30}, + {309,455,-30}, {309,1630,-25}, {309,1631,-25}, {309,1645,-25}, + {309,1655,-25}, {309,1662,-25}, {309,2794,-35}, {309,2795,-35}, + {309,2809,-35}, {309,2819,-35}, {309,2826,-35}, {309,2899,-35}, + {309,2907,-35}, {309,3816,-15}, {309,3817,-15}, {309,3824,-15}, + {309,3831,-15}, {309,3839,-15}, {309,4031,-25}, {309,4034,-25}, + {309,4050,-25}, {337,570,-92}, {337,658,-100}, {337,668,-74}, + {337,686,-100}, {337,687,-100}, {337,692,-100}, {337,3143,-92}, + {337,4031,-55}, {337,4034,-55}, {337,4050,-55}, {356,570,-92}, + {356,658,-100}, {356,668,-74}, {356,686,-100}, {356,687,-100}, + {356,692,-100}, {356,3143,-92}, {356,4031,-55}, {356,4034,-55}, + {356,4050,-55}, {372,0,-35}, {372,5,-35}, {372,16,-35}, + {372,27,-35}, {372,33,-35}, {372,43,-35}, {372,48,-35}, + {390,0,-35}, {390,5,-35}, {390,16,-35}, {390,27,-35}, {390,33,-35}, + {390,43,-35}, {390,48,-35}, {393,0,-35}, {393,5,-35}, {393,16,-35}, + {393,27,-35}, {393,33,-35}, {393,43,-35}, {393,48,-35}, + {393,570,-40}, {393,658,-50}, {393,668,-35}, {393,678,-40}, + {393,686,-50}, {393,687,-50}, {393,692,-50}, {396,0,-35}, + {396,5,-35}, {396,16,-35}, {396,27,-35}, {396,33,-35}, + {396,43,-35}, {396,48,-35}, {396,570,-40}, {396,658,-50}, + {396,668,-35}, {396,678,-40}, {396,686,-50}, {396,687,-50}, + {396,692,-50}, {404,0,-35}, {404,5,-35}, {404,16,-35}, + {404,27,-35}, {404,33,-35}, {404,43,-35}, {404,48,-35}, + {404,570,-40}, {404,658,-50}, {404,668,-35}, {404,678,-40}, + {404,686,-50}, {404,687,-50}, {404,692,-50}, {414,0,-35}, + {414,5,-35}, {414,16,-35}, {414,27,-35}, {414,33,-35}, + {414,43,-35}, {414,48,-35}, {414,570,-40}, {414,658,-50}, + {414,668,-35}, {414,678,-40}, {414,686,-50}, {414,687,-50}, + {414,692,-50}, {419,0,-35}, {419,5,-35}, {419,16,-35}, + {419,27,-35}, {419,33,-35}, {419,43,-35}, {419,48,-35}, + {419,570,-40}, {419,658,-50}, {419,668,-35}, {419,678,-40}, + {419,686,-50}, {419,687,-50}, {419,692,-50}, {449,0,-35}, + {449,5,-35}, {449,16,-35}, {449,27,-35}, {449,33,-35}, + {449,43,-35}, {449,48,-35}, {449,570,-40}, {449,658,-50}, + {449,668,-35}, {449,678,-40}, {449,686,-50}, {449,687,-50}, + {449,692,-50}, {455,0,-35}, {455,5,-35}, {455,16,-35}, + {455,27,-35}, {455,33,-35}, {455,43,-35}, {455,48,-35}, + {455,570,-40}, {455,658,-50}, {455,668,-35}, {455,678,-40}, + {455,686,-50}, {455,687,-50}, {455,692,-50}, {459,0,-92}, + {459,5,-92}, {459,16,-92}, {459,27,-92}, {459,33,-92}, + {459,43,-92}, {459,48,-92}, {459,734,-15}, {459,736,-15}, + {459,758,-15}, {459,775,-15}, {459,1030,-15}, {459,1111,-15}, + {459,1173,-15}, {459,1409,-111}, {459,2995,-111}, {474,603,-10}, + {474,604,-10}, {474,609,-10}, {474,615,-10}, {474,624,-10}, + {478,393,-40}, {478,396,-40}, {478,404,-40}, {478,414,-40}, + {478,419,-40}, {478,449,-40}, {478,455,-40}, {478,570,-60}, + {478,603,-40}, {478,604,-40}, {478,609,-40}, {478,615,-40}, + {478,624,-40}, {478,658,-80}, {478,668,-55}, {478,686,-65}, + {478,687,-65}, {478,692,-65}, {570,0,-93}, {570,5,-93}, + {570,16,-93}, {570,27,-93}, {570,33,-93}, {570,43,-93}, + {570,48,-93}, {570,393,-18}, {570,396,-18}, {570,404,-18}, + {570,414,-18}, {570,419,-18}, {570,449,-18}, {570,455,-18}, + {570,734,-80}, {570,736,-80}, {570,758,-80}, {570,775,-40}, + {570,1030,-40}, {570,1111,-80}, {570,1173,-40}, {570,1402,-50}, + {570,1409,-74}, {570,1630,-70}, {570,1631,-70}, {570,1645,-70}, + {570,1655,-30}, {570,1662,-70}, {570,2126,-92}, {570,2132,-35}, + {570,2133,-35}, {570,2794,-80}, {570,2795,-80}, {570,2809,-80}, + {570,2819,-80}, {570,2826,-80}, {570,2899,-80}, {570,2907,-80}, + {570,2995,-74}, {570,3148,-35}, {570,3351,-55}, {570,3816,-45}, + {570,3817,-45}, {570,3824,-45}, {570,3831,-45}, {570,3839,-45}, + {570,3951,-80}, {570,4031,-80}, {570,4034,-80}, {570,4050,-80}, + {603,0,-40}, {603,5,-40}, {603,16,-40}, {603,27,-40}, {603,33,-40}, + {603,43,-40}, {603,48,-40}, {604,0,-40}, {604,5,-40}, {604,16,-40}, + {604,27,-40}, {604,33,-40}, {604,43,-40}, {604,48,-40}, + {609,0,-40}, {609,5,-40}, {609,16,-40}, {609,27,-40}, {609,33,-40}, + {609,43,-40}, {609,48,-40}, {615,0,-40}, {615,5,-40}, {615,16,-40}, + {615,27,-40}, {615,33,-40}, {615,43,-40}, {615,48,-40}, + {624,0,-40}, {624,5,-40}, {624,16,-40}, {624,27,-40}, {624,33,-40}, + {624,43,-40}, {624,48,-40}, {658,0,-135}, {658,5,-135}, + {658,16,-135}, {658,27,-135}, {658,33,-135}, {658,43,-135}, + {658,48,-135}, {658,203,-15}, {658,393,-40}, {658,396,-40}, + {658,404,-40}, {658,414,-40}, {658,419,-40}, {658,449,-40}, + {658,455,-40}, {658,734,-111}, {658,736,-111}, {658,758,-71}, + {658,775,-71}, {658,1030,-71}, {658,1111,-111}, {658,1173,-71}, + {658,1402,-74}, {658,1409,-129}, {658,1630,-111}, {658,1631,-111}, + {658,1645,-71}, {658,1655,-71}, {658,1662,-71}, {658,2126,-100}, + {658,2132,-60}, {658,2133,-60}, {658,2140,-20}, {658,2196,-20}, + {658,2207,-20}, {658,2794,-129}, {658,2795,-129}, {658,2809,-129}, + {658,2819,-89}, {658,2826,-89}, {658,2899,-129}, {658,2907,-89}, + {658,2995,-129}, {658,3351,-74}, {658,3816,-75}, {658,3817,-75}, + {658,3824,-75}, {658,3831,-75}, {658,3839,-75}, {668,0,-120}, + {668,5,-120}, {668,16,-120}, {668,27,-120}, {668,33,-120}, + {668,43,-120}, {668,48,-120}, {668,393,-10}, {668,396,-10}, + {668,404,-10}, {668,414,-10}, {668,419,-10}, {668,449,-10}, + {668,455,-10}, {668,734,-80}, {668,736,-80}, {668,758,-80}, + {668,775,-80}, {668,1030,-80}, {668,1111,-80}, {668,1173,-80}, + {668,1402,-37}, {668,1409,-92}, {668,1630,-80}, {668,1631,-80}, + {668,1645,-80}, {668,1655,-40}, {668,1662,-40}, {668,2126,-65}, + {668,2132,-40}, {668,2133,-40}, {668,2794,-80}, {668,2795,-80}, + {668,2809,-80}, {668,2819,-80}, {668,2826,-80}, {668,2899,-80}, + {668,2907,-80}, {668,2995,-92}, {668,3351,-37}, {668,3816,-50}, + {668,3817,-50}, {668,3824,-50}, {668,3831,-50}, {668,3839,-50}, + {668,4031,-73}, {668,4034,-73}, {668,4050,-73}, {686,0,-120}, + {686,5,-120}, {686,16,-120}, {686,27,-120}, {686,33,-120}, + {686,43,-120}, {686,48,-120}, {686,393,-30}, {686,396,-30}, + {686,404,-30}, {686,414,-30}, {686,419,-30}, {686,449,-30}, + {686,455,-30}, {686,734,-100}, {686,736,-100}, {686,758,-100}, + {686,775,-60}, {686,1030,-60}, {686,1111,-100}, {686,1173,-60}, + {686,1402,-92}, {686,1409,-129}, {686,1630,-100}, {686,1631,-100}, + {686,1645,-100}, {686,1655,-60}, {686,1662,-60}, {686,2126,-111}, + {686,2132,-55}, {686,2133,-55}, {686,2794,-110}, {686,2795,-110}, + {686,2809,-110}, {686,2819,-70}, {686,2826,-70}, {686,2899,-110}, + {686,2907,-70}, {686,2995,-129}, {686,3351,-92}, {686,3816,-111}, + {686,3817,-111}, {686,3824,-111}, {686,3831,-71}, {686,3839,-71}, + {687,0,-120}, {687,5,-120}, {687,16,-120}, {687,27,-120}, + {687,33,-120}, {687,43,-120}, {687,48,-120}, {687,393,-30}, + {687,396,-30}, {687,404,-30}, {687,414,-30}, {687,419,-30}, + {687,449,-30}, {687,455,-30}, {687,734,-100}, {687,736,-100}, + {687,758,-100}, {687,775,-60}, {687,1030,-60}, {687,1111,-100}, + {687,1173,-60}, {687,1402,-92}, {687,1409,-129}, {687,1630,-100}, + {687,1631,-100}, {687,1645,-100}, {687,1655,-60}, {687,1662,-60}, + {687,2126,-111}, {687,2132,-55}, {687,2133,-55}, {687,2794,-110}, + {687,2795,-110}, {687,2809,-110}, {687,2819,-70}, {687,2826,-70}, + {687,2899,-110}, {687,2907,-70}, {687,2995,-129}, {687,3351,-92}, + {687,3816,-111}, {687,3817,-111}, {687,3824,-111}, {687,3831,-71}, + {687,3839,-71}, {692,0,-120}, {692,5,-120}, {692,16,-120}, + {692,27,-120}, {692,33,-120}, {692,43,-120}, {692,48,-120}, + {692,393,-30}, {692,396,-30}, {692,404,-30}, {692,414,-30}, + {692,419,-30}, {692,449,-30}, {692,455,-30}, {692,734,-100}, + {692,736,-100}, {692,758,-100}, {692,775,-60}, {692,1030,-60}, + {692,1111,-100}, {692,1173,-100}, {692,1402,-92}, {692,1409,-129}, + {692,1630,-100}, {692,1631,-100}, {692,1645,-100}, {692,1655,-60}, + {692,1662,-60}, {692,2126,-111}, {692,2132,-55}, {692,2133,-55}, + {692,2794,-110}, {692,2795,-110}, {692,2809,-110}, {692,2819,-70}, + {692,2826,-70}, {692,2899,-110}, {692,2907,-70}, {692,2995,-129}, + {692,3351,-92}, {692,3816,-111}, {692,3817,-111}, {692,3824,-111}, + {692,3831,-71}, {692,3839,-71}, {734,3902,-20}, {734,3951,-15}, + {736,3902,-20}, {736,3951,-15}, {758,3902,-20}, {758,3951,-15}, + {775,3902,-20}, {775,3951,-15}, {1030,3902,-20}, {1030,3951,-15}, + {1111,3902,-20}, {1111,3951,-15}, {1173,3902,-20}, {1173,3951,-15}, + {1192,2995,-40}, {1192,3816,-20}, {1192,3817,-20}, {1192,3824,-20}, + {1192,3831,-20}, {1192,3839,-20}, {1192,3902,-15}, {1312,4031,-15}, + {1312,4034,-15}, {1312,4050,-15}, {1332,4031,-15}, {1332,4034,-15}, + {1332,4050,-15}, {1409,3139,-70}, {1409,3143,-70}, {1630,1886,-15}, + {1630,3902,-25}, {1630,3951,-25}, {1630,4020,-15}, {1630,4031,-15}, + {1630,4034,-15}, {1630,4050,-15}, {1631,1886,-15}, {1631,3902,-25}, + {1631,3951,-25}, {1631,4020,-15}, {1631,4031,-15}, {1631,4034,-15}, + {1631,4050,-15}, {1645,1886,-15}, {1645,3902,-25}, {1645,3951,-25}, + {1645,4020,-15}, {1645,4031,-15}, {1645,4034,-15}, {1645,4050,-15}, + {1655,1886,-15}, {1655,3902,-25}, {1655,3951,-25}, {1655,4020,-15}, + {1655,4031,-15}, {1655,4034,-15}, {1655,4050,-15}, {1662,1886,-15}, + {1662,3902,-25}, {1662,3951,-25}, {1662,4020,-15}, {1662,4031,-15}, + {1662,4034,-15}, {1662,4050,-15}, {1787,734,-10}, {1787,736,-10}, + {1787,758,-10}, {1787,775,-10}, {1787,1030,-10}, {1787,1111,-10}, + {1787,1173,-10}, {1787,1608,-50}, {1787,1787,-25}, {1787,2132,-20}, + {1787,2133,-20}, {1787,3143,55}, {1886,734,-5}, {1886,736,-5}, + {1886,758,-5}, {1886,775,-5}, {1886,1030,-5}, {1886,1111,-5}, + {1886,1173,-5}, {1988,4031,-5}, {1988,4034,-5}, {1988,4050,-5}, + {2132,3902,-25}, {2133,3902,-25}, {2140,3902,-25}, {2196,3902,-25}, + {2207,3902,-25}, {2302,1630,-10}, {2302,1631,-10}, {2302,1645,-10}, + {2302,1655,-10}, {2302,1662,-10}, {2302,2794,-10}, {2302,2795,-10}, + {2302,2809,-10}, {2302,2819,-10}, {2302,2826,-10}, {2302,2899,-10}, + {2302,2907,-10}, {2302,4031,-15}, {2302,4034,-15}, {2302,4050,-15}, + {2416,3951,-10}, {2501,3951,-10}, {2648,3902,-40}, {2648,4031,-15}, + {2648,4034,-15}, {2648,4050,-15}, {2769,3902,-40}, {2769,4031,-15}, + {2769,4034,-15}, {2769,4050,-15}, {2794,3902,-15}, {2794,3951,-25}, + {2794,4031,-10}, {2794,4034,-10}, {2794,4050,-10}, {2795,3902,-15}, + {2795,3951,-25}, {2795,4031,-10}, {2795,4034,-10}, {2795,4050,-10}, + {2809,3902,-15}, {2809,3951,-25}, {2809,4031,-10}, {2809,4034,-10}, + {2809,4050,-10}, {2819,3902,-15}, {2819,3951,-25}, {2819,4031,-10}, + {2819,4034,-10}, {2819,4050,-10}, {2826,3902,-15}, {2826,3951,-25}, + {2826,4031,-10}, {2826,4034,-10}, {2826,4050,-10}, {2899,3902,-15}, + {2899,3951,-25}, {2899,4031,-10}, {2899,4034,-10}, {2899,4050,-10}, + {2907,3902,-15}, {2907,3951,-25}, {2907,4031,-10}, {2907,4034,-10}, + {2907,4050,-10}, {2921,4031,-10}, {2921,4034,-10}, {2921,4050,-10}, + {2995,3139,-70}, {2995,3143,-70}, {3135,0,-80}, {3135,5,-80}, + {3135,16,-80}, {3135,27,-80}, {3135,33,-80}, {3135,43,-80}, + {3135,48,-80}, {3140,0,-80}, {3140,5,-80}, {3140,16,-80}, + {3140,27,-80}, {3140,33,-80}, {3140,43,-80}, {3140,48,-80}, + {3140,3140,-74}, {3143,1481,-50}, {3143,2416,-10}, {3143,2501,-10}, + {3143,3143,-74}, {3143,3148,-50}, {3143,3279,-55}, {3143,3317,-55}, + {3143,3498,-74}, {3143,3556,-18}, {3143,3902,-50}, {3148,1409,-40}, + {3148,1886,-18}, {3148,2126,-20}, {3148,2995,-55}, {3498,0,-55}, + {3498,5,-55}, {3498,16,-55}, {3498,27,-55}, {3498,33,-55}, + {3498,43,-55}, {3498,48,-55}, {3498,570,-18}, {3498,658,-50}, + {3498,668,-30}, {3498,686,-90}, {3498,687,-90}, {3498,692,-90}, + {3902,734,-25}, {3902,736,-25}, {3902,758,-25}, {3902,775,-25}, + {3902,1030,-25}, {3902,1111,-25}, {3902,1173,-25}, {3902,1409,-65}, + {3902,1630,-15}, {3902,1631,-15}, {3902,1645,-15}, {3902,1655,-15}, + {3902,1662,-15}, {3902,2794,-20}, {3902,2795,-20}, {3902,2809,-20}, + {3902,2819,-20}, {3902,2826,-20}, {3902,2899,-20}, {3902,2907,-20}, + {3902,2995,-65}, {3951,734,-10}, {3951,736,-10}, {3951,758,-10}, + {3951,775,-10}, {3951,1030,-10}, {3951,1111,-10}, {3951,1173,-10}, + {3951,1409,-65}, {3951,2794,-10}, {3951,2795,-10}, {3951,2809,-10}, + {3951,2819,-10}, {3951,2826,-10}, {3951,2899,-10}, {3951,2907,-10}, + {3951,2995,-65}, {4020,1630,-15}, {4020,1631,-15}, {4020,1645,-15}, + {4020,1655,-15}, {4020,1662,-15}, {4031,1409,-65}, {4031,2995,-65}, + {4034,1409,-65}, {4034,2995,-65}, {4050,1409,-65}, {4050,2995,-65}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature times_roman_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair times_italic_kerns[] = { + {0,64,-30}, {0,70,-30}, {0,203,-35}, {0,393,-40}, {0,396,-40}, + {0,404,-40}, {0,414,-40}, {0,419,-40}, {0,449,-40}, {0,455,-40}, + {0,474,-40}, {0,570,-37}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-105}, {0,668,-95}, {0,686,-55}, + {0,687,-55}, {0,692,-55}, {0,3143,-37}, {0,3816,-20}, {0,3817,-20}, + {0,3824,-20}, {0,3831,-20}, {0,3839,-20}, {0,3902,-55}, + {0,3951,-55}, {0,4031,-55}, {0,4034,-55}, {0,4050,-55}, {5,64,-30}, + {5,70,-30}, {5,203,-35}, {5,393,-40}, {5,396,-40}, {5,404,-40}, + {5,414,-40}, {5,419,-40}, {5,449,-40}, {5,455,-40}, {5,474,-40}, + {5,570,-37}, {5,603,-50}, {5,604,-50}, {5,609,-50}, {5,615,-50}, + {5,624,-50}, {5,658,-105}, {5,668,-95}, {5,686,-55}, {5,687,-55}, + {5,692,-55}, {5,3143,-37}, {5,3816,-20}, {5,3817,-20}, + {5,3824,-20}, {5,3831,-20}, {5,3839,-20}, {5,3902,-55}, + {5,3951,-55}, {5,4031,-55}, {5,4034,-55}, {5,4050,-55}, + {16,64,-30}, {16,70,-30}, {16,203,-35}, {16,393,-40}, {16,396,-40}, + {16,404,-40}, {16,414,-40}, {16,419,-40}, {16,449,-40}, + {16,455,-40}, {16,474,-40}, {16,570,-37}, {16,603,-50}, + {16,604,-50}, {16,609,-50}, {16,615,-50}, {16,624,-50}, + {16,658,-105}, {16,668,-95}, {16,686,-55}, {16,687,-55}, + {16,692,-55}, {16,3143,-37}, {16,3816,-20}, {16,3817,-20}, + {16,3824,-20}, {16,3831,-20}, {16,3839,-20}, {16,3902,-55}, + {16,3951,-55}, {16,4031,-55}, {16,4034,-55}, {16,4050,-55}, + {27,64,-30}, {27,70,-30}, {27,203,-35}, {27,393,-40}, {27,396,-40}, + {27,404,-40}, {27,414,-40}, {27,419,-40}, {27,449,-40}, + {27,455,-40}, {27,474,-40}, {27,570,-37}, {27,603,-50}, + {27,604,-50}, {27,609,-50}, {27,615,-50}, {27,624,-50}, + {27,658,-105}, {27,668,-95}, {27,686,-55}, {27,687,-55}, + {27,692,-55}, {27,3143,-37}, {27,3816,-20}, {27,3817,-20}, + {27,3824,-20}, {27,3831,-20}, {27,3839,-20}, {27,3902,-55}, + {27,3951,-55}, {27,4031,-55}, {27,4034,-55}, {27,4050,-55}, + {33,64,-30}, {33,70,-30}, {33,203,-35}, {33,393,-40}, {33,396,-40}, + {33,404,-40}, {33,414,-40}, {33,419,-40}, {33,449,-40}, + {33,455,-40}, {33,474,-40}, {33,570,-37}, {33,603,-50}, + {33,604,-50}, {33,609,-50}, {33,615,-50}, {33,624,-50}, + {33,658,-105}, {33,668,-95}, {33,686,-55}, {33,687,-55}, + {33,692,-55}, {33,3143,-37}, {33,3816,-20}, {33,3817,-20}, + {33,3824,-20}, {33,3831,-20}, {33,3839,-20}, {33,3902,-55}, + {33,3951,-55}, {33,4031,-55}, {33,4034,-55}, {33,4050,-55}, + {43,64,-30}, {43,70,-30}, {43,203,-35}, {43,393,-40}, {43,396,-40}, + {43,404,-40}, {43,414,-40}, {43,419,-40}, {43,449,-40}, + {43,455,-40}, {43,474,-40}, {43,570,-37}, {43,603,-50}, + {43,604,-50}, {43,609,-50}, {43,615,-50}, {43,624,-50}, + {43,658,-105}, {43,668,-95}, {43,686,-55}, {43,687,-55}, + {43,692,-55}, {43,3143,-37}, {43,3816,-20}, {43,3817,-20}, + {43,3824,-20}, {43,3831,-20}, {43,3839,-20}, {43,3902,-55}, + {43,3951,-55}, {43,4031,-55}, {43,4034,-55}, {43,4050,-55}, + {48,64,-30}, {48,70,-30}, {48,203,-35}, {48,393,-40}, {48,396,-40}, + {48,404,-40}, {48,414,-40}, {48,419,-40}, {48,449,-40}, + {48,455,-40}, {48,474,-40}, {48,570,-37}, {48,603,-50}, + {48,604,-50}, {48,609,-50}, {48,615,-50}, {48,624,-50}, + {48,658,-105}, {48,668,-95}, {48,686,-55}, {48,687,-55}, + {48,692,-55}, {48,3143,-37}, {48,3816,-20}, {48,3817,-20}, + {48,3824,-20}, {48,3831,-20}, {48,3839,-20}, {48,3902,-55}, + {48,3951,-55}, {48,4031,-55}, {48,4034,-55}, {48,4050,-55}, + {51,0,-25}, {51,5,-25}, {51,16,-25}, {51,27,-25}, {51,33,-25}, + {51,43,-25}, {51,48,-25}, {51,603,-10}, {51,604,-10}, {51,609,-10}, + {51,615,-10}, {51,624,-10}, {93,0,-35}, {93,5,-35}, {93,16,-35}, + {93,27,-35}, {93,33,-35}, {93,43,-35}, {93,48,-35}, {93,658,-40}, + {93,668,-40}, {93,686,-40}, {93,687,-40}, {93,692,-40}, + {192,0,-115}, {192,5,-115}, {192,16,-115}, {192,27,-115}, + {192,33,-115}, {192,43,-115}, {192,48,-115}, {192,734,-75}, + {192,736,-75}, {192,758,-75}, {192,775,-75}, {192,1030,-75}, + {192,1111,-75}, {192,1173,-75}, {192,1409,-135}, {192,1630,-75}, + {192,1631,-75}, {192,1645,-75}, {192,1655,-75}, {192,1662,-75}, + {192,2132,-45}, {192,2133,-45}, {192,2140,-45}, {192,2196,-45}, + {192,2207,-45}, {192,2794,-105}, {192,2795,-105}, {192,2809,-105}, + {192,2819,-105}, {192,2826,-105}, {192,2899,-105}, {192,2907,-105}, + {192,2995,-135}, {192,3148,-55}, {301,0,-40}, {301,5,-40}, + {301,16,-40}, {301,27,-40}, {301,33,-40}, {301,43,-40}, + {301,48,-40}, {301,734,-35}, {301,736,-35}, {301,758,-35}, + {301,775,-35}, {301,1030,-35}, {301,1111,-35}, {301,1173,-35}, + {301,1409,-25}, {301,1630,-25}, {301,1631,-25}, {301,1645,-25}, + {301,1655,-25}, {301,1662,-25}, {301,2794,-25}, {301,2795,-25}, + {301,2809,-25}, {301,2819,-25}, {301,2826,-25}, {301,2899,-25}, + {301,2907,-25}, {301,2995,-25}, {301,3816,-35}, {301,3817,-35}, + {301,3824,-35}, {301,3831,-35}, {301,3839,-35}, {309,393,-50}, + {309,396,-50}, {309,404,-50}, {309,414,-50}, {309,419,-50}, + {309,449,-50}, {309,455,-50}, {309,1630,-35}, {309,1631,-35}, + {309,1645,-35}, {309,1655,-35}, {309,1662,-35}, {309,2794,-40}, + {309,2795,-40}, {309,2809,-40}, {309,2819,-40}, {309,2826,-40}, + {309,2899,-40}, {309,2907,-40}, {309,3816,-40}, {309,3817,-40}, + {309,3824,-40}, {309,3831,-40}, {309,3839,-40}, {309,4031,-40}, + {309,4034,-40}, {309,4050,-40}, {337,570,-20}, {337,658,-55}, + {337,668,-55}, {337,686,-20}, {337,687,-20}, {337,692,-20}, + {337,3143,-37}, {337,4031,-30}, {337,4034,-30}, {337,4050,-30}, + {356,570,-20}, {356,658,-55}, {356,668,-55}, {356,686,-20}, + {356,687,-20}, {356,692,-20}, {356,3143,-37}, {356,4031,-30}, + {356,4034,-30}, {356,4050,-30}, {372,0,-27}, {372,5,-27}, + {372,16,-27}, {372,27,-27}, {372,33,-27}, {372,43,-27}, + {372,48,-27}, {390,0,-27}, {390,5,-27}, {390,16,-27}, {390,27,-27}, + {390,33,-27}, {390,43,-27}, {390,48,-27}, {393,0,-55}, {393,5,-55}, + {393,16,-55}, {393,27,-55}, {393,33,-55}, {393,43,-55}, + {393,48,-55}, {393,570,-40}, {393,658,-50}, {393,668,-50}, + {393,678,-40}, {393,686,-50}, {393,687,-50}, {393,692,-50}, + {396,0,-55}, {396,5,-55}, {396,16,-55}, {396,27,-55}, {396,33,-55}, + {396,43,-55}, {396,48,-55}, {396,570,-40}, {396,658,-50}, + {396,668,-50}, {396,678,-40}, {396,686,-50}, {396,687,-50}, + {396,692,-50}, {404,0,-55}, {404,5,-55}, {404,16,-55}, + {404,27,-55}, {404,33,-55}, {404,43,-55}, {404,48,-55}, + {404,570,-40}, {404,658,-50}, {404,668,-50}, {404,678,-40}, + {404,686,-50}, {404,687,-50}, {404,692,-50}, {414,0,-55}, + {414,5,-55}, {414,16,-55}, {414,27,-55}, {414,33,-55}, + {414,43,-55}, {414,48,-55}, {414,570,-40}, {414,658,-50}, + {414,668,-50}, {414,678,-40}, {414,686,-50}, {414,687,-50}, + {414,692,-50}, {419,0,-55}, {419,5,-55}, {419,16,-55}, + {419,27,-55}, {419,33,-55}, {419,43,-55}, {419,48,-55}, + {419,570,-40}, {419,658,-50}, {419,668,-50}, {419,678,-40}, + {419,686,-50}, {419,687,-50}, {419,692,-50}, {449,0,-55}, + {449,5,-55}, {449,16,-55}, {449,27,-55}, {449,33,-55}, + {449,43,-55}, {449,48,-55}, {449,570,-40}, {449,658,-50}, + {449,668,-50}, {449,678,-40}, {449,686,-50}, {449,687,-50}, + {449,692,-50}, {455,0,-55}, {455,5,-55}, {455,16,-55}, + {455,27,-55}, {455,33,-55}, {455,43,-55}, {455,48,-55}, + {455,570,-40}, {455,658,-50}, {455,668,-50}, {455,678,-40}, + {455,686,-50}, {455,687,-50}, {455,692,-50}, {459,0,-90}, + {459,5,-90}, {459,16,-90}, {459,27,-90}, {459,33,-90}, + {459,43,-90}, {459,48,-90}, {459,734,-80}, {459,736,-80}, + {459,758,-80}, {459,775,-80}, {459,1030,-80}, {459,1111,-80}, + {459,1173,-80}, {459,1409,-135}, {459,1630,-80}, {459,1631,-80}, + {459,1645,-80}, {459,1655,-80}, {459,1662,-80}, {459,2794,-80}, + {459,2795,-80}, {459,2809,-80}, {459,2819,-80}, {459,2826,-80}, + {459,2899,-80}, {459,2907,-80}, {459,2995,-135}, {474,603,-10}, + {474,604,-10}, {474,609,-10}, {474,615,-10}, {474,624,-10}, + {478,393,-40}, {478,396,-40}, {478,404,-40}, {478,414,-40}, + {478,419,-40}, {478,449,-40}, {478,455,-40}, {478,603,-40}, + {478,604,-40}, {478,609,-40}, {478,615,-40}, {478,624,-40}, + {478,658,-18}, {478,668,-18}, {478,686,-18}, {478,687,-18}, + {478,692,-18}, {570,0,-50}, {570,5,-50}, {570,16,-50}, + {570,27,-50}, {570,33,-50}, {570,43,-50}, {570,48,-50}, + {570,393,-18}, {570,396,-18}, {570,404,-18}, {570,414,-18}, + {570,419,-18}, {570,449,-18}, {570,455,-18}, {570,734,-92}, + {570,736,-92}, {570,758,-92}, {570,775,-92}, {570,1030,-92}, + {570,1111,-92}, {570,1173,-92}, {570,1402,-55}, {570,1409,-74}, + {570,1630,-92}, {570,1631,-92}, {570,1645,-52}, {570,1655,-52}, + {570,1662,-52}, {570,2126,-74}, {570,2132,-55}, {570,2133,-55}, + {570,2794,-92}, {570,2795,-92}, {570,2809,-92}, {570,2819,-92}, + {570,2826,-92}, {570,2899,-92}, {570,2907,-92}, {570,2995,-74}, + {570,3148,-55}, {570,3351,-65}, {570,3816,-55}, {570,3817,-55}, + {570,3824,-55}, {570,3831,-55}, {570,3839,-55}, {570,3951,-74}, + {570,4031,-74}, {570,4034,-74}, {570,4050,-34}, {603,0,-40}, + {603,5,-40}, {603,16,-40}, {603,27,-40}, {603,33,-40}, + {603,43,-40}, {603,48,-40}, {603,1409,-25}, {603,2995,-25}, + {604,0,-40}, {604,5,-40}, {604,16,-40}, {604,27,-40}, {604,33,-40}, + {604,43,-40}, {604,48,-40}, {604,1409,-25}, {604,2995,-25}, + {609,0,-40}, {609,5,-40}, {609,16,-40}, {609,27,-40}, {609,33,-40}, + {609,43,-40}, {609,48,-40}, {609,1409,-25}, {609,2995,-25}, + {615,0,-40}, {615,5,-40}, {615,16,-40}, {615,27,-40}, {615,33,-40}, + {615,43,-40}, {615,48,-40}, {615,1409,-25}, {615,2995,-25}, + {624,0,-40}, {624,5,-40}, {624,16,-40}, {624,27,-40}, {624,33,-40}, + {624,43,-40}, {624,48,-40}, {624,1409,-25}, {624,2995,-25}, + {658,0,-60}, {658,5,-60}, {658,16,-60}, {658,27,-60}, {658,33,-60}, + {658,43,-60}, {658,48,-60}, {658,393,-30}, {658,396,-30}, + {658,404,-30}, {658,414,-30}, {658,419,-30}, {658,449,-30}, + {658,455,-30}, {658,734,-111}, {658,736,-111}, {658,758,-111}, + {658,775,-111}, {658,1030,-111}, {658,1111,-111}, {658,1173,-111}, + {658,1402,-65}, {658,1409,-129}, {658,1630,-111}, {658,1631,-111}, + {658,1645,-111}, {658,1655,-71}, {658,1662,-71}, {658,2126,-55}, + {658,2132,-74}, {658,2133,-74}, {658,2140,-34}, {658,2196,-34}, + {658,2207,-34}, {658,2794,-111}, {658,2795,-111}, {658,2809,-111}, + {658,2819,-111}, {658,2826,-111}, {658,2899,-111}, {658,2907,-111}, + {658,2995,-129}, {658,3351,-74}, {658,3816,-74}, {658,3817,-74}, + {658,3824,-74}, {658,3831,-74}, {658,3839,-74}, {668,0,-60}, + {668,5,-60}, {668,16,-60}, {668,27,-60}, {668,33,-60}, + {668,43,-60}, {668,48,-60}, {668,393,-25}, {668,396,-25}, + {668,404,-25}, {668,414,-25}, {668,419,-25}, {668,449,-25}, + {668,455,-25}, {668,734,-92}, {668,736,-92}, {668,758,-92}, + {668,775,-92}, {668,1030,-92}, {668,1111,-92}, {668,1173,-92}, + {668,1402,-65}, {668,1409,-92}, {668,1630,-92}, {668,1631,-92}, + {668,1645,-92}, {668,1655,-52}, {668,1662,-52}, {668,2126,-37}, + {668,2132,-55}, {668,2133,-55}, {668,2794,-92}, {668,2795,-92}, + {668,2809,-92}, {668,2819,-92}, {668,2826,-92}, {668,2899,-92}, + {668,2907,-92}, {668,2995,-92}, {668,3351,-65}, {668,3816,-55}, + {668,3817,-55}, {668,3824,-55}, {668,3831,-55}, {668,3839,-55}, + {668,4031,-70}, {668,4034,-70}, {668,4050,-70}, {686,0,-50}, + {686,5,-50}, {686,16,-50}, {686,27,-50}, {686,33,-50}, + {686,43,-50}, {686,48,-50}, {686,393,-15}, {686,396,-15}, + {686,404,-15}, {686,414,-15}, {686,419,-15}, {686,449,-15}, + {686,455,-15}, {686,734,-92}, {686,736,-92}, {686,758,-92}, + {686,775,-92}, {686,1030,-92}, {686,1111,-92}, {686,1173,-92}, + {686,1402,-65}, {686,1409,-92}, {686,1630,-92}, {686,1631,-92}, + {686,1645,-92}, {686,1655,-52}, {686,1662,-52}, {686,2126,-74}, + {686,2132,-74}, {686,2133,-74}, {686,2140,-34}, {686,2196,-34}, + {686,2207,-34}, {686,2794,-92}, {686,2795,-92}, {686,2809,-92}, + {686,2819,-92}, {686,2826,-92}, {686,2899,-92}, {686,2907,-92}, + {686,2995,-92}, {686,3351,-65}, {686,3816,-92}, {686,3817,-92}, + {686,3824,-92}, {686,3831,-92}, {686,3839,-92}, {687,0,-50}, + {687,5,-50}, {687,16,-50}, {687,27,-50}, {687,33,-50}, + {687,43,-50}, {687,48,-50}, {687,393,-15}, {687,396,-15}, + {687,404,-15}, {687,414,-15}, {687,419,-15}, {687,449,-15}, + {687,455,-15}, {687,734,-92}, {687,736,-92}, {687,758,-92}, + {687,775,-92}, {687,1030,-92}, {687,1111,-92}, {687,1173,-92}, + {687,1402,-65}, {687,1409,-92}, {687,1630,-92}, {687,1631,-92}, + {687,1645,-92}, {687,1655,-52}, {687,1662,-52}, {687,2126,-74}, + {687,2132,-74}, {687,2133,-74}, {687,2140,-34}, {687,2196,-34}, + {687,2207,-34}, {687,2794,-92}, {687,2795,-92}, {687,2809,-92}, + {687,2819,-92}, {687,2826,-92}, {687,2899,-92}, {687,2907,-92}, + {687,2995,-92}, {687,3351,-65}, {687,3816,-92}, {687,3817,-92}, + {687,3824,-92}, {687,3831,-92}, {687,3839,-92}, {692,0,-50}, + {692,5,-50}, {692,16,-50}, {692,27,-50}, {692,33,-50}, + {692,43,-50}, {692,48,-50}, {692,393,-15}, {692,396,-15}, + {692,404,-15}, {692,414,-15}, {692,419,-15}, {692,449,-15}, + {692,455,-15}, {692,734,-92}, {692,736,-92}, {692,758,-92}, + {692,775,-92}, {692,1030,-92}, {692,1111,-92}, {692,1173,-92}, + {692,1402,-65}, {692,1409,-92}, {692,1630,-92}, {692,1631,-92}, + {692,1645,-92}, {692,1655,-52}, {692,1662,-52}, {692,2126,-74}, + {692,2132,-74}, {692,2133,-74}, {692,2140,-34}, {692,2196,-34}, + {692,2207,-34}, {692,2794,-92}, {692,2795,-92}, {692,2809,-92}, + {692,2819,-92}, {692,2826,-92}, {692,2899,-92}, {692,2907,-92}, + {692,2995,-92}, {692,3351,-65}, {692,3816,-92}, {692,3817,-92}, + {692,3824,-92}, {692,3831,-92}, {692,3839,-92}, {734,1886,-10}, + {736,1886,-10}, {758,1886,-10}, {775,1886,-10}, {1030,1886,-10}, + {1111,1886,-10}, {1173,1886,-10}, {1192,2995,-40}, {1192,3816,-20}, + {1192,3817,-20}, {1192,3824,-20}, {1192,3831,-20}, {1192,3839,-20}, + {1312,1988,-15}, {1312,2302,-20}, {1332,1988,-15}, {1332,2302,-20}, + {1409,3139,-140}, {1409,3143,-140}, {1630,1409,-10}, + {1630,1886,-40}, {1630,2995,-15}, {1630,3902,-15}, {1630,3951,-15}, + {1630,4020,-20}, {1630,4031,-30}, {1630,4034,-30}, {1630,4050,-30}, + {1631,1409,-10}, {1631,1886,-40}, {1631,2995,-15}, {1631,3902,-15}, + {1631,3951,-15}, {1631,4020,-20}, {1631,4031,-30}, {1631,4034,-30}, + {1631,4050,-30}, {1645,1409,-10}, {1645,1886,-40}, {1645,2995,-15}, + {1645,3902,-15}, {1645,3951,-15}, {1645,4020,-20}, {1645,4031,-30}, + {1645,4034,-30}, {1645,4050,-30}, {1655,1409,-10}, {1655,1886,-40}, + {1655,2995,-15}, {1655,3902,-15}, {1655,3951,-15}, {1655,4020,-20}, + {1655,4031,-30}, {1655,4034,-30}, {1655,4050,-30}, {1662,1409,-10}, + {1662,1886,-40}, {1662,2995,-15}, {1662,3902,-15}, {1662,3951,-15}, + {1662,4020,-20}, {1662,4031,-30}, {1662,4034,-30}, {1662,4050,-30}, + {1787,1409,-10}, {1787,1608,-60}, {1787,1787,-18}, {1787,2132,-20}, + {1787,2995,-15}, {1787,3143,92}, {1886,1409,-10}, {1886,1630,-10}, + {1886,1631,-10}, {1886,1645,-10}, {1886,1655,-10}, {1886,1662,-10}, + {1886,1886,-10}, {1886,2995,-15}, {2302,1630,-10}, {2302,1631,-10}, + {2302,1645,-10}, {2302,1655,-10}, {2302,1662,-10}, {2302,2794,-10}, + {2302,2795,-10}, {2302,2809,-10}, {2302,2819,-10}, {2302,2826,-10}, + {2302,2899,-10}, {2302,2907,-10}, {2302,4031,-10}, {2302,4034,-10}, + {2302,4050,-10}, {2648,3902,-40}, {2769,3902,-40}, {2794,1886,-10}, + {2794,3902,-10}, {2795,1886,-10}, {2795,3902,-10}, {2809,1886,-10}, + {2809,3902,-10}, {2819,1886,-10}, {2819,3902,-10}, {2826,1886,-10}, + {2826,3902,-10}, {2899,1886,-10}, {2899,3902,-10}, {2907,1886,-10}, + {2907,3902,-10}, {2995,3139,-140}, {2995,3143,-140}, + {3140,3140,-111}, {3143,1481,-25}, {3143,3143,-111}, + {3143,3148,-25}, {3143,3279,-40}, {3143,3317,-40}, + {3143,3498,-111}, {3143,3556,-30}, {3143,3902,-10}, {3148,734,-15}, + {3148,736,-15}, {3148,758,-15}, {3148,775,-15}, {3148,1030,-15}, + {3148,1111,-15}, {3148,1173,-15}, {3148,1312,-37}, {3148,1332,-37}, + {3148,1409,-111}, {3148,1481,-37}, {3148,1630,-37}, + {3148,1631,-37}, {3148,1645,-37}, {3148,1655,-37}, {3148,1662,-37}, + {3148,1886,-37}, {3148,2126,-20}, {3148,2794,-45}, {3148,2795,-45}, + {3148,2809,-45}, {3148,2819,-45}, {3148,2826,-45}, {3148,2899,-45}, + {3148,2907,-45}, {3148,2995,-111}, {3148,3083,-37}, + {3148,3279,-10}, {3148,3317,-10}, {3498,0,-18}, {3498,5,-18}, + {3498,16,-18}, {3498,27,-18}, {3498,33,-18}, {3498,43,-18}, + {3498,48,-18}, {3498,570,-18}, {3498,658,-35}, {3498,668,-40}, + {3498,686,-75}, {3498,687,-75}, {3498,692,-75}, {3902,1409,-74}, + {3902,2995,-74}, {3951,1409,-74}, {3951,2995,-74}, {4031,1409,-55}, + {4031,2995,-55}, {4034,1409,-55}, {4034,2995,-55}, {4050,1409,-55}, + {4050,2995,-55}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature times_italic_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair times_bold_kerns[] = { + {0,64,-55}, {0,70,-55}, {0,203,-55}, {0,393,-45}, {0,396,-45}, + {0,404,-45}, {0,414,-45}, {0,419,-45}, {0,449,-45}, {0,455,-45}, + {0,474,-45}, {0,570,-95}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-145}, {0,668,-130}, {0,686,-100}, + {0,687,-100}, {0,692,-100}, {0,2921,-25}, {0,3143,-74}, + {0,3816,-50}, {0,3817,-50}, {0,3824,-50}, {0,3831,-50}, + {0,3839,-50}, {0,3902,-100}, {0,3951,-90}, {0,4031,-74}, + {0,4034,-74}, {0,4050,-74}, {5,64,-55}, {5,70,-55}, {5,203,-55}, + {5,393,-45}, {5,396,-45}, {5,404,-45}, {5,414,-45}, {5,419,-45}, + {5,449,-45}, {5,455,-45}, {5,474,-45}, {5,570,-95}, {5,603,-50}, + {5,604,-50}, {5,609,-50}, {5,615,-50}, {5,624,-50}, {5,658,-145}, + {5,668,-130}, {5,686,-100}, {5,687,-100}, {5,692,-100}, + {5,2921,-25}, {5,3143,-74}, {5,3816,-50}, {5,3817,-50}, + {5,3824,-50}, {5,3831,-50}, {5,3839,-50}, {5,3902,-100}, + {5,3951,-90}, {5,4031,-74}, {5,4034,-74}, {5,4050,-74}, + {16,64,-55}, {16,70,-55}, {16,203,-55}, {16,393,-45}, {16,396,-45}, + {16,404,-45}, {16,414,-45}, {16,419,-45}, {16,449,-45}, + {16,455,-45}, {16,474,-45}, {16,570,-95}, {16,603,-50}, + {16,604,-50}, {16,609,-50}, {16,615,-50}, {16,624,-50}, + {16,658,-145}, {16,668,-130}, {16,686,-100}, {16,687,-100}, + {16,692,-100}, {16,2921,-25}, {16,3143,-74}, {16,3816,-50}, + {16,3817,-50}, {16,3824,-50}, {16,3831,-50}, {16,3839,-50}, + {16,3902,-100}, {16,3951,-90}, {16,4031,-74}, {16,4034,-74}, + {16,4050,-74}, {27,64,-55}, {27,70,-55}, {27,203,-55}, + {27,393,-45}, {27,396,-45}, {27,404,-45}, {27,414,-45}, + {27,419,-45}, {27,449,-45}, {27,455,-45}, {27,474,-45}, + {27,570,-95}, {27,603,-50}, {27,604,-50}, {27,609,-50}, + {27,615,-50}, {27,624,-50}, {27,658,-145}, {27,668,-130}, + {27,686,-100}, {27,687,-100}, {27,692,-100}, {27,2921,-25}, + {27,3143,-74}, {27,3816,-50}, {27,3817,-50}, {27,3824,-50}, + {27,3831,-50}, {27,3839,-50}, {27,3902,-100}, {27,3951,-90}, + {27,4031,-74}, {27,4034,-74}, {27,4050,-74}, {33,64,-55}, + {33,70,-55}, {33,203,-55}, {33,393,-45}, {33,396,-45}, + {33,404,-45}, {33,414,-45}, {33,419,-45}, {33,449,-45}, + {33,455,-45}, {33,474,-45}, {33,570,-95}, {33,603,-50}, + {33,604,-50}, {33,609,-50}, {33,615,-50}, {33,624,-50}, + {33,658,-145}, {33,668,-130}, {33,686,-100}, {33,687,-100}, + {33,692,-100}, {33,2921,-25}, {33,3143,-74}, {33,3816,-50}, + {33,3817,-50}, {33,3824,-50}, {33,3831,-50}, {33,3839,-50}, + {33,3902,-100}, {33,3951,-90}, {33,4031,-74}, {33,4034,-74}, + {33,4050,-74}, {43,64,-55}, {43,70,-55}, {43,203,-55}, + {43,393,-45}, {43,396,-45}, {43,404,-45}, {43,414,-45}, + {43,419,-45}, {43,449,-45}, {43,455,-45}, {43,474,-45}, + {43,570,-95}, {43,603,-50}, {43,604,-50}, {43,609,-50}, + {43,615,-50}, {43,624,-50}, {43,658,-145}, {43,668,-130}, + {43,686,-100}, {43,687,-100}, {43,692,-100}, {43,2921,-25}, + {43,3143,-74}, {43,3816,-50}, {43,3817,-50}, {43,3824,-50}, + {43,3831,-50}, {43,3839,-50}, {43,3902,-100}, {43,3951,-90}, + {43,4031,-74}, {43,4034,-74}, {43,4050,-74}, {48,64,-55}, + {48,70,-55}, {48,203,-55}, {48,393,-45}, {48,396,-45}, + {48,404,-45}, {48,414,-45}, {48,419,-45}, {48,449,-45}, + {48,455,-45}, {48,474,-45}, {48,570,-95}, {48,603,-50}, + {48,604,-50}, {48,609,-50}, {48,615,-50}, {48,624,-50}, + {48,658,-145}, {48,668,-130}, {48,686,-100}, {48,687,-100}, + {48,692,-100}, {48,2921,-25}, {48,3143,-74}, {48,3816,-50}, + {48,3817,-50}, {48,3824,-50}, {48,3831,-50}, {48,3839,-50}, + {48,3902,-100}, {48,3951,-90}, {48,4031,-74}, {48,4034,-74}, + {48,4050,-74}, {51,0,-30}, {51,5,-30}, {51,16,-30}, {51,27,-30}, + {51,33,-30}, {51,43,-30}, {51,48,-30}, {51,603,-10}, {51,604,-10}, + {51,609,-10}, {51,615,-10}, {51,624,-10}, {93,0,-35}, {93,5,-35}, + {93,16,-35}, {93,27,-35}, {93,33,-35}, {93,43,-35}, {93,48,-35}, + {93,658,-40}, {93,668,-40}, {93,686,-40}, {93,687,-40}, + {93,692,-40}, {93,2995,-20}, {192,0,-90}, {192,5,-90}, + {192,16,-90}, {192,27,-90}, {192,33,-90}, {192,43,-90}, + {192,48,-90}, {192,734,-25}, {192,736,-25}, {192,758,-25}, + {192,775,-25}, {192,1030,-25}, {192,1111,-25}, {192,1173,-25}, + {192,1409,-92}, {192,1630,-25}, {192,1631,-25}, {192,1645,-25}, + {192,1655,-25}, {192,1662,-25}, {192,2794,-25}, {192,2795,-25}, + {192,2809,-25}, {192,2819,-25}, {192,2826,-25}, {192,2899,-25}, + {192,2907,-25}, {192,2995,-110}, {301,0,-30}, {301,5,-30}, + {301,16,-30}, {301,27,-30}, {301,33,-30}, {301,43,-30}, + {301,48,-30}, {301,734,-15}, {301,736,-15}, {301,758,-15}, + {301,775,-15}, {301,1030,-15}, {301,1111,-15}, {301,1173,-15}, + {301,1630,-15}, {301,1631,-15}, {301,1645,-15}, {301,1655,-15}, + {301,1662,-15}, {301,2794,-15}, {301,2795,-15}, {301,2809,-15}, + {301,2819,-15}, {301,2826,-15}, {301,2899,-15}, {301,2907,-15}, + {301,2995,-20}, {301,3816,-15}, {301,3817,-15}, {301,3824,-15}, + {301,3831,-15}, {301,3839,-15}, {309,393,-30}, {309,396,-30}, + {309,404,-30}, {309,414,-30}, {309,419,-30}, {309,449,-30}, + {309,455,-30}, {309,1630,-25}, {309,1631,-25}, {309,1645,-25}, + {309,1655,-25}, {309,1662,-25}, {309,2794,-25}, {309,2795,-25}, + {309,2809,-25}, {309,2819,-25}, {309,2826,-25}, {309,2899,-25}, + {309,2907,-25}, {309,3816,-15}, {309,3817,-15}, {309,3824,-15}, + {309,3831,-15}, {309,3839,-15}, {309,4031,-45}, {309,4034,-45}, + {309,4050,-45}, {337,570,-92}, {337,658,-92}, {337,668,-92}, + {337,686,-92}, {337,687,-92}, {337,692,-92}, {337,3139,-20}, + {337,3143,-110}, {337,4031,-55}, {337,4034,-55}, {337,4050,-55}, + {356,570,-92}, {356,658,-92}, {356,668,-92}, {356,686,-92}, + {356,687,-92}, {356,692,-92}, {356,3139,-20}, {356,3143,-110}, + {356,4031,-55}, {356,4034,-55}, {356,4050,-55}, {372,0,-20}, + {372,5,-20}, {372,16,-20}, {372,27,-20}, {372,33,-20}, + {372,43,-20}, {372,48,-20}, {390,0,-20}, {390,5,-20}, {390,16,-20}, + {390,27,-20}, {390,33,-20}, {390,43,-20}, {390,48,-20}, + {393,0,-40}, {393,5,-40}, {393,16,-40}, {393,27,-40}, {393,33,-40}, + {393,43,-40}, {393,48,-40}, {393,570,-40}, {393,658,-50}, + {393,668,-50}, {393,678,-40}, {393,686,-50}, {393,687,-50}, + {393,692,-50}, {396,0,-40}, {396,5,-40}, {396,16,-40}, + {396,27,-40}, {396,33,-40}, {396,43,-40}, {396,48,-40}, + {396,570,-40}, {396,658,-50}, {396,668,-50}, {396,678,-40}, + {396,686,-50}, {396,687,-50}, {396,692,-50}, {404,0,-40}, + {404,5,-40}, {404,16,-40}, {404,27,-40}, {404,33,-40}, + {404,43,-40}, {404,48,-40}, {404,570,-40}, {404,658,-50}, + {404,668,-50}, {404,678,-40}, {404,686,-50}, {404,687,-50}, + {404,692,-50}, {414,0,-40}, {414,5,-40}, {414,16,-40}, + {414,27,-40}, {414,33,-40}, {414,43,-40}, {414,48,-40}, + {414,570,-40}, {414,658,-50}, {414,668,-50}, {414,678,-40}, + {414,686,-50}, {414,687,-50}, {414,692,-50}, {419,0,-40}, + {419,5,-40}, {419,16,-40}, {419,27,-40}, {419,33,-40}, + {419,43,-40}, {419,48,-40}, {419,570,-40}, {419,658,-50}, + {419,668,-50}, {419,678,-40}, {419,686,-50}, {419,687,-50}, + {419,692,-50}, {449,0,-40}, {449,5,-40}, {449,16,-40}, + {449,27,-40}, {449,33,-40}, {449,43,-40}, {449,48,-40}, + {449,570,-40}, {449,658,-50}, {449,668,-50}, {449,678,-40}, + {449,686,-50}, {449,687,-50}, {449,692,-50}, {455,0,-40}, + {455,5,-40}, {455,16,-40}, {455,27,-40}, {455,33,-40}, + {455,43,-40}, {455,48,-40}, {455,570,-40}, {455,658,-50}, + {455,668,-50}, {455,678,-40}, {455,686,-50}, {455,687,-50}, + {455,692,-50}, {459,0,-74}, {459,5,-74}, {459,16,-74}, + {459,27,-74}, {459,33,-74}, {459,43,-74}, {459,48,-74}, + {459,734,-10}, {459,736,-10}, {459,758,-10}, {459,775,-10}, + {459,1030,-10}, {459,1111,-10}, {459,1173,-10}, {459,1409,-92}, + {459,1630,-20}, {459,1631,-20}, {459,1645,-20}, {459,1655,-20}, + {459,1662,-20}, {459,2794,-20}, {459,2795,-20}, {459,2809,-20}, + {459,2819,-20}, {459,2826,-20}, {459,2899,-20}, {459,2907,-20}, + {459,2995,-110}, {474,603,-10}, {474,604,-10}, {474,609,-10}, + {474,615,-10}, {474,624,-10}, {474,2995,-20}, {478,393,-30}, + {478,396,-30}, {478,404,-30}, {478,414,-30}, {478,419,-30}, + {478,449,-30}, {478,455,-30}, {478,570,-40}, {478,603,-30}, + {478,604,-30}, {478,609,-30}, {478,615,-30}, {478,624,-30}, + {478,658,-55}, {478,668,-35}, {478,686,-35}, {478,687,-35}, + {478,692,-35}, {570,0,-90}, {570,5,-90}, {570,16,-90}, + {570,27,-90}, {570,33,-90}, {570,43,-90}, {570,48,-90}, + {570,393,-18}, {570,396,-18}, {570,404,-18}, {570,414,-18}, + {570,419,-18}, {570,449,-18}, {570,455,-18}, {570,734,-92}, + {570,736,-92}, {570,758,-52}, {570,775,-52}, {570,1030,-52}, + {570,1111,-92}, {570,1173,-52}, {570,1402,-74}, {570,1409,-74}, + {570,1630,-92}, {570,1631,-92}, {570,1645,-92}, {570,1655,-52}, + {570,1662,-52}, {570,2126,-92}, {570,2132,-18}, {570,2133,-18}, + {570,2794,-92}, {570,2795,-92}, {570,2809,-92}, {570,2819,-92}, + {570,2826,-92}, {570,2899,-92}, {570,2907,-92}, {570,2995,-90}, + {570,3148,-74}, {570,3351,-74}, {570,3816,-92}, {570,3817,-92}, + {570,3824,-92}, {570,3831,-92}, {570,3839,-92}, {570,3951,-74}, + {570,4031,-34}, {570,4034,-34}, {570,4050,-34}, {603,0,-60}, + {603,5,-60}, {603,16,-60}, {603,27,-60}, {603,33,-60}, + {603,43,-60}, {603,48,-60}, {603,1409,-50}, {603,2995,-50}, + {604,0,-60}, {604,5,-60}, {604,16,-60}, {604,27,-60}, {604,33,-60}, + {604,43,-60}, {604,48,-60}, {604,1409,-50}, {604,2995,-50}, + {609,0,-60}, {609,5,-60}, {609,16,-60}, {609,27,-60}, {609,33,-60}, + {609,43,-60}, {609,48,-60}, {609,1409,-50}, {609,2995,-50}, + {615,0,-60}, {615,5,-60}, {615,16,-60}, {615,27,-60}, {615,33,-60}, + {615,43,-60}, {615,48,-60}, {615,1409,-50}, {615,2995,-50}, + {624,0,-60}, {624,5,-60}, {624,16,-60}, {624,27,-60}, {624,33,-60}, + {624,43,-60}, {624,48,-60}, {624,1409,-50}, {624,2995,-50}, + {658,0,-135}, {658,5,-135}, {658,16,-135}, {658,27,-135}, + {658,33,-135}, {658,43,-135}, {658,48,-135}, {658,203,-30}, + {658,393,-45}, {658,396,-45}, {658,404,-45}, {658,414,-45}, + {658,419,-45}, {658,449,-45}, {658,455,-45}, {658,734,-92}, + {658,736,-92}, {658,758,-92}, {658,775,-92}, {658,1030,-92}, + {658,1111,-92}, {658,1173,-92}, {658,1402,-92}, {658,1409,-129}, + {658,1630,-100}, {658,1631,-100}, {658,1645,-100}, {658,1655,-100}, + {658,1662,-100}, {658,2126,-74}, {658,2132,-37}, {658,2133,-37}, + {658,2140,-37}, {658,2196,-37}, {658,2207,-37}, {658,2794,-100}, + {658,2795,-100}, {658,2809,-100}, {658,2819,-100}, {658,2826,-100}, + {658,2899,-100}, {658,2907,-100}, {658,2995,-145}, {658,3351,-92}, + {658,3816,-92}, {658,3817,-92}, {658,3824,-92}, {658,3831,-92}, + {658,3839,-92}, {668,0,-120}, {668,5,-120}, {668,16,-120}, + {668,27,-120}, {668,33,-120}, {668,43,-120}, {668,48,-120}, + {668,393,-10}, {668,396,-10}, {668,404,-10}, {668,414,-10}, + {668,419,-10}, {668,449,-10}, {668,455,-10}, {668,734,-65}, + {668,736,-65}, {668,758,-65}, {668,775,-65}, {668,1030,-65}, + {668,1111,-65}, {668,1173,-65}, {668,1402,-55}, {668,1409,-92}, + {668,1630,-65}, {668,1631,-65}, {668,1645,-65}, {668,1655,-65}, + {668,1662,-65}, {668,2126,-37}, {668,2132,-18}, {668,2133,-18}, + {668,2794,-75}, {668,2795,-75}, {668,2809,-75}, {668,2819,-75}, + {668,2826,-75}, {668,2899,-75}, {668,2907,-75}, {668,2995,-92}, + {668,3351,-55}, {668,3816,-50}, {668,3817,-50}, {668,3824,-50}, + {668,3831,-50}, {668,3839,-50}, {668,4031,-60}, {668,4034,-60}, + {668,4050,-60}, {686,0,-110}, {686,5,-110}, {686,16,-110}, + {686,27,-110}, {686,33,-110}, {686,43,-110}, {686,48,-110}, + {686,393,-35}, {686,396,-35}, {686,404,-35}, {686,414,-35}, + {686,419,-35}, {686,449,-35}, {686,455,-35}, {686,734,-85}, + {686,736,-85}, {686,758,-85}, {686,775,-85}, {686,1030,-85}, + {686,1111,-85}, {686,1173,-85}, {686,1402,-92}, {686,1409,-92}, + {686,1630,-111}, {686,1631,-111}, {686,1645,-111}, {686,1655,-71}, + {686,1662,-71}, {686,2126,-92}, {686,2132,-37}, {686,2133,-37}, + {686,2794,-111}, {686,2795,-111}, {686,2809,-111}, {686,2819,-111}, + {686,2826,-111}, {686,2899,-111}, {686,2907,-111}, {686,2995,-92}, + {686,3351,-92}, {686,3816,-92}, {686,3817,-92}, {686,3824,-92}, + {686,3831,-92}, {686,3839,-92}, {687,0,-110}, {687,5,-110}, + {687,16,-110}, {687,27,-110}, {687,33,-110}, {687,43,-110}, + {687,48,-110}, {687,393,-35}, {687,396,-35}, {687,404,-35}, + {687,414,-35}, {687,419,-35}, {687,449,-35}, {687,455,-35}, + {687,734,-85}, {687,736,-85}, {687,758,-85}, {687,775,-85}, + {687,1030,-85}, {687,1111,-85}, {687,1173,-85}, {687,1402,-92}, + {687,1409,-92}, {687,1630,-111}, {687,1631,-111}, {687,1645,-111}, + {687,1655,-71}, {687,1662,-71}, {687,2126,-92}, {687,2132,-37}, + {687,2133,-37}, {687,2794,-111}, {687,2795,-111}, {687,2809,-111}, + {687,2819,-111}, {687,2826,-111}, {687,2899,-111}, {687,2907,-111}, + {687,2995,-92}, {687,3351,-92}, {687,3816,-92}, {687,3817,-92}, + {687,3824,-92}, {687,3831,-92}, {687,3839,-92}, {692,0,-110}, + {692,5,-110}, {692,16,-110}, {692,27,-110}, {692,33,-110}, + {692,43,-110}, {692,48,-110}, {692,393,-35}, {692,396,-35}, + {692,404,-35}, {692,414,-35}, {692,419,-35}, {692,449,-35}, + {692,455,-35}, {692,734,-85}, {692,736,-85}, {692,758,-85}, + {692,775,-85}, {692,1030,-85}, {692,1111,-85}, {692,1173,-85}, + {692,1402,-92}, {692,1409,-92}, {692,1630,-111}, {692,1631,-111}, + {692,1645,-111}, {692,1655,-71}, {692,1662,-71}, {692,2126,-92}, + {692,2132,-37}, {692,2133,-37}, {692,2794,-111}, {692,2795,-111}, + {692,2809,-111}, {692,2819,-111}, {692,2826,-111}, {692,2899,-111}, + {692,2907,-111}, {692,2995,-92}, {692,3351,-92}, {692,3816,-92}, + {692,3817,-92}, {692,3824,-92}, {692,3831,-92}, {692,3839,-92}, + {734,3902,-25}, {736,3902,-25}, {758,3902,-25}, {775,3902,-25}, + {1030,3902,-25}, {1111,3902,-25}, {1173,3902,-25}, {1192,1192,-10}, + {1192,2995,-40}, {1192,3816,-20}, {1192,3817,-20}, {1192,3824,-20}, + {1192,3831,-20}, {1192,3839,-20}, {1192,3902,-15}, {1409,3139,-45}, + {1409,3143,-55}, {1481,3951,-15}, {1630,3902,-15}, {1631,3902,-15}, + {1645,3902,-15}, {1655,3902,-15}, {1662,3902,-15}, {1787,1409,-15}, + {1787,1608,-35}, {1787,2132,-25}, {1787,2794,-25}, {1787,2795,-25}, + {1787,2809,-25}, {1787,2819,-25}, {1787,2826,-25}, {1787,2899,-25}, + {1787,2907,-25}, {1787,2995,-15}, {1787,3139,50}, {1787,3143,55}, + {1886,2995,-15}, {1988,4031,-15}, {1988,4034,-15}, {1988,4050,-15}, + {2132,3902,-10}, {2133,3902,-10}, {2140,3902,-10}, {2196,3902,-10}, + {2207,3902,-10}, {2302,1630,-10}, {2302,1631,-10}, {2302,1645,-10}, + {2302,1655,-10}, {2302,1662,-10}, {2302,2794,-15}, {2302,2795,-15}, + {2302,2809,-15}, {2302,2819,-15}, {2302,2826,-15}, {2302,2899,-15}, + {2302,2907,-15}, {2302,4031,-15}, {2302,4034,-15}, {2302,4050,-15}, + {2648,3902,-40}, {2769,3902,-40}, {2794,3902,-10}, {2794,3951,-10}, + {2795,3902,-10}, {2795,3951,-10}, {2809,3902,-10}, {2809,3951,-10}, + {2819,3902,-10}, {2819,3951,-10}, {2826,3902,-10}, {2826,3951,-10}, + {2899,3902,-10}, {2899,3951,-10}, {2907,3902,-10}, {2907,3951,-10}, + {2995,3139,-55}, {2995,3143,-55}, {3135,0,-10}, {3135,5,-10}, + {3135,16,-10}, {3135,27,-10}, {3135,33,-10}, {3135,43,-10}, + {3135,48,-10}, {3140,0,-10}, {3140,5,-10}, {3140,16,-10}, + {3140,27,-10}, {3140,33,-10}, {3140,43,-10}, {3140,48,-10}, + {3140,3140,-63}, {3143,1481,-20}, {3143,3143,-63}, {3143,3148,-20}, + {3143,3279,-37}, {3143,3317,-37}, {3143,3498,-74}, {3143,3902,-20}, + {3148,1312,-18}, {3148,1332,-18}, {3148,1409,-92}, {3148,1630,-18}, + {3148,1631,-18}, {3148,1645,-18}, {3148,1655,-18}, {3148,1662,-18}, + {3148,1886,-10}, {3148,2126,-37}, {3148,2648,-15}, {3148,2769,-15}, + {3148,2794,-18}, {3148,2795,-18}, {3148,2809,-18}, {3148,2819,-18}, + {3148,2826,-18}, {3148,2899,-18}, {3148,2907,-18}, {3148,2921,-10}, + {3148,2995,-100}, {3148,3083,-18}, {3148,3902,-10}, {3498,0,-55}, + {3498,5,-55}, {3498,16,-55}, {3498,27,-55}, {3498,33,-55}, + {3498,43,-55}, {3498,48,-55}, {3498,570,-30}, {3498,658,-45}, + {3498,668,-30}, {3498,686,-55}, {3498,687,-55}, {3498,692,-55}, + {3902,734,-10}, {3902,736,-10}, {3902,758,-10}, {3902,775,-10}, + {3902,1030,-10}, {3902,1111,-10}, {3902,1173,-10}, {3902,1409,-55}, + {3902,1630,-10}, {3902,1631,-10}, {3902,1645,-10}, {3902,1655,-10}, + {3902,1662,-10}, {3902,2794,-10}, {3902,2795,-10}, {3902,2809,-10}, + {3902,2819,-10}, {3902,2826,-10}, {3902,2899,-10}, {3902,2907,-10}, + {3902,2995,-70}, {3951,1409,-55}, {3951,2794,-10}, {3951,2795,-10}, + {3951,2809,-10}, {3951,2819,-10}, {3951,2826,-10}, {3951,2899,-10}, + {3951,2907,-10}, {3951,2995,-70}, {4031,1409,-55}, {4031,1630,-10}, + {4031,1631,-10}, {4031,1645,-10}, {4031,1655,-10}, {4031,1662,-10}, + {4031,2794,-25}, {4031,2795,-25}, {4031,2809,-25}, {4031,2819,-25}, + {4031,2826,-25}, {4031,2899,-25}, {4031,2907,-25}, {4031,2995,-70}, + {4034,1409,-55}, {4034,1630,-10}, {4034,1631,-10}, {4034,1645,-10}, + {4034,1655,-10}, {4034,1662,-10}, {4034,2794,-25}, {4034,2795,-25}, + {4034,2809,-25}, {4034,2819,-25}, {4034,2826,-25}, {4034,2899,-25}, + {4034,2907,-25}, {4034,2995,-70}, {4050,1409,-55}, {4050,1630,-10}, + {4050,1631,-10}, {4050,1645,-10}, {4050,1655,-10}, {4050,1662,-10}, + {4050,2794,-25}, {4050,2795,-25}, {4050,2809,-25}, {4050,2819,-25}, + {4050,2826,-25}, {4050,2899,-25}, {4050,2907,-25}, {4050,2995,-70}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature times_bold_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair times_bolditalic_kerns[] = { + {0,64,-65}, {0,70,-65}, {0,203,-60}, {0,393,-50}, {0,396,-50}, + {0,404,-50}, {0,414,-50}, {0,419,-50}, {0,449,-50}, {0,455,-50}, + {0,474,-55}, {0,570,-55}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-95}, {0,668,-100}, {0,686,-70}, + {0,687,-70}, {0,692,-70}, {0,3143,-74}, {0,3816,-30}, {0,3817,-30}, + {0,3824,-30}, {0,3831,-30}, {0,3839,-30}, {0,3902,-74}, + {0,3951,-74}, {0,4031,-74}, {0,4034,-74}, {0,4050,-74}, {5,64,-65}, + {5,70,-65}, {5,203,-60}, {5,393,-50}, {5,396,-50}, {5,404,-50}, + {5,414,-50}, {5,419,-50}, {5,449,-50}, {5,455,-50}, {5,474,-55}, + {5,570,-55}, {5,603,-50}, {5,604,-50}, {5,609,-50}, {5,615,-50}, + {5,624,-50}, {5,658,-95}, {5,668,-100}, {5,686,-70}, {5,687,-70}, + {5,692,-70}, {5,3143,-74}, {5,3816,-30}, {5,3817,-30}, + {5,3824,-30}, {5,3831,-30}, {5,3839,-30}, {5,3902,-74}, + {5,3951,-74}, {5,4031,-74}, {5,4034,-74}, {5,4050,-74}, + {16,64,-65}, {16,70,-65}, {16,203,-60}, {16,393,-50}, {16,396,-50}, + {16,404,-50}, {16,414,-50}, {16,419,-50}, {16,449,-50}, + {16,455,-50}, {16,474,-55}, {16,570,-55}, {16,603,-50}, + {16,604,-50}, {16,609,-50}, {16,615,-50}, {16,624,-50}, + {16,658,-95}, {16,668,-100}, {16,686,-70}, {16,687,-70}, + {16,692,-70}, {16,3143,-74}, {16,3816,-30}, {16,3817,-30}, + {16,3824,-30}, {16,3831,-30}, {16,3839,-30}, {16,3902,-74}, + {16,3951,-74}, {16,4031,-74}, {16,4034,-74}, {16,4050,-74}, + {27,64,-65}, {27,70,-65}, {27,203,-60}, {27,393,-50}, {27,396,-50}, + {27,404,-50}, {27,414,-50}, {27,419,-50}, {27,449,-50}, + {27,455,-50}, {27,474,-55}, {27,570,-55}, {27,603,-50}, + {27,604,-50}, {27,609,-50}, {27,615,-50}, {27,624,-50}, + {27,658,-95}, {27,668,-100}, {27,686,-70}, {27,687,-70}, + {27,692,-70}, {27,3143,-74}, {27,3816,-30}, {27,3817,-30}, + {27,3824,-30}, {27,3831,-30}, {27,3839,-30}, {27,3902,-74}, + {27,3951,-74}, {27,4031,-74}, {27,4034,-74}, {27,4050,-74}, + {33,64,-65}, {33,70,-65}, {33,203,-60}, {33,393,-50}, {33,396,-50}, + {33,404,-50}, {33,414,-50}, {33,419,-50}, {33,449,-50}, + {33,455,-50}, {33,474,-55}, {33,570,-55}, {33,603,-50}, + {33,604,-50}, {33,609,-50}, {33,615,-50}, {33,624,-50}, + {33,658,-95}, {33,668,-100}, {33,686,-70}, {33,687,-70}, + {33,692,-70}, {33,3143,-74}, {33,3816,-30}, {33,3817,-30}, + {33,3824,-30}, {33,3831,-30}, {33,3839,-30}, {33,3902,-74}, + {33,3951,-74}, {33,4031,-74}, {33,4034,-74}, {33,4050,-74}, + {43,64,-65}, {43,70,-65}, {43,203,-60}, {43,393,-50}, {43,396,-50}, + {43,404,-50}, {43,414,-50}, {43,419,-50}, {43,449,-50}, + {43,455,-50}, {43,474,-55}, {43,570,-55}, {43,603,-50}, + {43,604,-50}, {43,609,-50}, {43,615,-50}, {43,624,-50}, + {43,658,-95}, {43,668,-100}, {43,686,-70}, {43,687,-70}, + {43,692,-70}, {43,3143,-74}, {43,3816,-30}, {43,3817,-30}, + {43,3824,-30}, {43,3831,-30}, {43,3839,-30}, {43,3902,-74}, + {43,3951,-74}, {43,4031,-74}, {43,4034,-74}, {43,4050,-74}, + {48,64,-65}, {48,70,-65}, {48,203,-60}, {48,393,-50}, {48,396,-50}, + {48,404,-50}, {48,414,-50}, {48,419,-50}, {48,449,-50}, + {48,455,-50}, {48,474,-55}, {48,570,-55}, {48,603,-50}, + {48,604,-50}, {48,609,-50}, {48,615,-50}, {48,624,-50}, + {48,658,-95}, {48,668,-100}, {48,686,-70}, {48,687,-70}, + {48,692,-70}, {48,3143,-74}, {48,3816,-30}, {48,3817,-30}, + {48,3824,-30}, {48,3831,-30}, {48,3839,-30}, {48,3902,-74}, + {48,3951,-74}, {48,4031,-74}, {48,4034,-74}, {48,4050,-74}, + {51,0,-25}, {51,5,-25}, {51,16,-25}, {51,27,-25}, {51,33,-25}, + {51,43,-25}, {51,48,-25}, {51,603,-10}, {51,604,-10}, {51,609,-10}, + {51,615,-10}, {51,624,-10}, {93,0,-25}, {93,5,-25}, {93,16,-25}, + {93,27,-25}, {93,33,-25}, {93,43,-25}, {93,48,-25}, {93,658,-50}, + {93,668,-40}, {93,686,-50}, {93,687,-50}, {93,692,-50}, + {192,0,-100}, {192,5,-100}, {192,16,-100}, {192,27,-100}, + {192,33,-100}, {192,43,-100}, {192,48,-100}, {192,734,-95}, + {192,736,-95}, {192,758,-95}, {192,775,-95}, {192,1030,-95}, + {192,1111,-95}, {192,1173,-95}, {192,1409,-129}, {192,1630,-100}, + {192,1631,-100}, {192,1645,-100}, {192,1655,-100}, {192,1662,-100}, + {192,2132,-40}, {192,2133,-40}, {192,2140,-40}, {192,2196,-40}, + {192,2207,-40}, {192,2794,-70}, {192,2795,-70}, {192,2809,-70}, + {192,2819,-70}, {192,2826,-70}, {192,2899,-70}, {192,2907,-70}, + {192,2995,-129}, {192,3148,-50}, {301,0,-25}, {301,5,-25}, + {301,16,-25}, {301,27,-25}, {301,33,-25}, {301,43,-25}, + {301,48,-25}, {301,734,-40}, {301,736,-40}, {301,758,-40}, + {301,775,-40}, {301,1030,-40}, {301,1111,-40}, {301,1173,-40}, + {301,1409,-10}, {301,1630,-40}, {301,1631,-40}, {301,1645,-40}, + {301,1655,-40}, {301,1662,-40}, {301,2794,-40}, {301,2795,-40}, + {301,2809,-40}, {301,2819,-40}, {301,2826,-40}, {301,2899,-40}, + {301,2907,-40}, {301,2995,-10}, {301,3816,-40}, {301,3817,-40}, + {301,3824,-40}, {301,3831,-40}, {301,3839,-40}, {309,393,-30}, + {309,396,-30}, {309,404,-30}, {309,414,-30}, {309,419,-30}, + {309,449,-30}, {309,455,-30}, {309,1630,-25}, {309,1631,-25}, + {309,1645,-25}, {309,1655,-25}, {309,1662,-25}, {309,2794,-25}, + {309,2795,-25}, {309,2809,-25}, {309,2819,-25}, {309,2826,-25}, + {309,2899,-25}, {309,2907,-25}, {309,3816,-20}, {309,3817,-20}, + {309,3824,-20}, {309,3831,-20}, {309,3839,-20}, {309,4031,-20}, + {309,4034,-20}, {309,4050,-20}, {337,570,-18}, {337,658,-37}, + {337,668,-37}, {337,686,-37}, {337,687,-37}, {337,692,-37}, + {337,3143,-55}, {337,4031,-37}, {337,4034,-37}, {337,4050,-37}, + {356,570,-18}, {356,658,-37}, {356,668,-37}, {356,686,-37}, + {356,687,-37}, {356,692,-37}, {356,3143,-55}, {356,4031,-37}, + {356,4034,-37}, {356,4050,-37}, {372,0,-30}, {372,5,-30}, + {372,16,-30}, {372,27,-30}, {372,33,-30}, {372,43,-30}, + {372,48,-30}, {390,0,-30}, {390,5,-30}, {390,16,-30}, {390,27,-30}, + {390,33,-30}, {390,43,-30}, {390,48,-30}, {393,0,-40}, {393,5,-40}, + {393,16,-40}, {393,27,-40}, {393,33,-40}, {393,43,-40}, + {393,48,-40}, {393,570,-40}, {393,658,-50}, {393,668,-50}, + {393,678,-40}, {393,686,-50}, {393,687,-50}, {393,692,-50}, + {396,0,-40}, {396,5,-40}, {396,16,-40}, {396,27,-40}, {396,33,-40}, + {396,43,-40}, {396,48,-40}, {396,570,-40}, {396,658,-50}, + {396,668,-50}, {396,678,-40}, {396,686,-50}, {396,687,-50}, + {396,692,-50}, {404,0,-40}, {404,5,-40}, {404,16,-40}, + {404,27,-40}, {404,33,-40}, {404,43,-40}, {404,48,-40}, + {404,570,-40}, {404,658,-50}, {404,668,-50}, {404,678,-40}, + {404,686,-50}, {404,687,-50}, {404,692,-50}, {414,0,-40}, + {414,5,-40}, {414,16,-40}, {414,27,-40}, {414,33,-40}, + {414,43,-40}, {414,48,-40}, {414,570,-40}, {414,658,-50}, + {414,668,-50}, {414,678,-40}, {414,686,-50}, {414,687,-50}, + {414,692,-50}, {419,0,-40}, {419,5,-40}, {419,16,-40}, + {419,27,-40}, {419,33,-40}, {419,43,-40}, {419,48,-40}, + {419,570,-40}, {419,658,-50}, {419,668,-50}, {419,678,-40}, + {419,686,-50}, {419,687,-50}, {419,692,-50}, {449,0,-40}, + {449,5,-40}, {449,16,-40}, {449,27,-40}, {449,33,-40}, + {449,43,-40}, {449,48,-40}, {449,570,-40}, {449,658,-50}, + {449,668,-50}, {449,678,-40}, {449,686,-50}, {449,687,-50}, + {449,692,-50}, {455,0,-40}, {455,5,-40}, {455,16,-40}, + {455,27,-40}, {455,33,-40}, {455,43,-40}, {455,48,-40}, + {455,570,-40}, {455,658,-50}, {455,668,-50}, {455,678,-40}, + {455,686,-50}, {455,687,-50}, {455,692,-50}, {459,0,-85}, + {459,5,-85}, {459,16,-85}, {459,27,-85}, {459,33,-85}, + {459,43,-85}, {459,48,-85}, {459,734,-40}, {459,736,-40}, + {459,758,-40}, {459,775,-40}, {459,1030,-40}, {459,1111,-40}, + {459,1173,-40}, {459,1409,-129}, {459,1630,-50}, {459,1631,-50}, + {459,1645,-50}, {459,1655,-50}, {459,1662,-50}, {459,2794,-55}, + {459,2795,-55}, {459,2809,-55}, {459,2819,-55}, {459,2826,-55}, + {459,2899,-55}, {459,2907,-55}, {459,2995,-129}, {474,603,-10}, + {474,604,-10}, {474,609,-10}, {474,615,-10}, {474,624,-10}, + {478,393,-40}, {478,396,-40}, {478,404,-40}, {478,414,-40}, + {478,419,-40}, {478,449,-40}, {478,455,-40}, {478,570,-30}, + {478,603,-40}, {478,604,-40}, {478,609,-40}, {478,615,-40}, + {478,624,-40}, {478,658,-18}, {478,668,-18}, {478,686,-18}, + {478,687,-18}, {478,692,-18}, {570,0,-55}, {570,5,-55}, + {570,16,-55}, {570,27,-55}, {570,33,-55}, {570,43,-55}, + {570,48,-55}, {570,393,-18}, {570,396,-18}, {570,404,-18}, + {570,414,-18}, {570,419,-18}, {570,449,-18}, {570,455,-18}, + {570,734,-92}, {570,736,-92}, {570,758,-92}, {570,775,-92}, + {570,1030,-92}, {570,1111,-92}, {570,1173,-92}, {570,1402,-74}, + {570,1409,-92}, {570,1630,-92}, {570,1631,-92}, {570,1645,-92}, + {570,1655,-52}, {570,1662,-52}, {570,2126,-92}, {570,2132,-37}, + {570,2133,-37}, {570,2794,-95}, {570,2795,-95}, {570,2809,-95}, + {570,2819,-95}, {570,2826,-95}, {570,2899,-95}, {570,2907,-95}, + {570,2995,-92}, {570,3148,-37}, {570,3351,-74}, {570,3816,-37}, + {570,3817,-37}, {570,3824,-37}, {570,3831,-37}, {570,3839,-37}, + {570,3951,-37}, {570,4031,-37}, {570,4034,-37}, {570,4050,-37}, + {603,0,-45}, {603,5,-45}, {603,16,-45}, {603,27,-45}, {603,33,-45}, + {603,43,-45}, {603,48,-45}, {604,0,-45}, {604,5,-45}, {604,16,-45}, + {604,27,-45}, {604,33,-45}, {604,43,-45}, {604,48,-45}, + {609,0,-45}, {609,5,-45}, {609,16,-45}, {609,27,-45}, {609,33,-45}, + {609,43,-45}, {609,48,-45}, {615,0,-45}, {615,5,-45}, {615,16,-45}, + {615,27,-45}, {615,33,-45}, {615,43,-45}, {615,48,-45}, + {624,0,-45}, {624,5,-45}, {624,16,-45}, {624,27,-45}, {624,33,-45}, + {624,43,-45}, {624,48,-45}, {658,0,-85}, {658,5,-85}, {658,16,-85}, + {658,27,-85}, {658,33,-85}, {658,43,-85}, {658,48,-85}, + {658,203,-10}, {658,393,-30}, {658,396,-30}, {658,404,-30}, + {658,414,-30}, {658,419,-30}, {658,449,-30}, {658,455,-30}, + {658,734,-111}, {658,736,-111}, {658,758,-111}, {658,775,-111}, + {658,1030,-111}, {658,1111,-111}, {658,1173,-111}, {658,1402,-74}, + {658,1409,-129}, {658,1630,-111}, {658,1631,-111}, {658,1645,-111}, + {658,1655,-71}, {658,1662,-71}, {658,2126,-70}, {658,2132,-55}, + {658,2133,-55}, {658,2794,-111}, {658,2795,-111}, {658,2809,-111}, + {658,2819,-111}, {658,2826,-111}, {658,2899,-111}, {658,2907,-111}, + {658,2995,-129}, {658,3351,-74}, {658,3816,-55}, {658,3817,-55}, + {658,3824,-55}, {658,3831,-55}, {658,3839,-55}, {668,0,-74}, + {668,5,-74}, {668,16,-74}, {668,27,-74}, {668,33,-74}, + {668,43,-74}, {668,48,-74}, {668,393,-15}, {668,396,-15}, + {668,404,-15}, {668,414,-15}, {668,419,-15}, {668,449,-15}, + {668,455,-15}, {668,734,-85}, {668,736,-85}, {668,758,-85}, + {668,775,-85}, {668,1030,-85}, {668,1111,-85}, {668,1173,-85}, + {668,1402,-55}, {668,1409,-74}, {668,1630,-90}, {668,1631,-90}, + {668,1645,-90}, {668,1655,-50}, {668,1662,-50}, {668,2126,-50}, + {668,2132,-37}, {668,2133,-37}, {668,2794,-80}, {668,2795,-80}, + {668,2809,-80}, {668,2819,-80}, {668,2826,-80}, {668,2899,-80}, + {668,2907,-80}, {668,2995,-74}, {668,3351,-55}, {668,3816,-55}, + {668,3817,-55}, {668,3824,-55}, {668,3831,-55}, {668,3839,-55}, + {668,4031,-55}, {668,4034,-55}, {668,4050,-55}, {686,0,-74}, + {686,5,-74}, {686,16,-74}, {686,27,-74}, {686,33,-74}, + {686,43,-74}, {686,48,-74}, {686,393,-25}, {686,396,-25}, + {686,404,-25}, {686,414,-25}, {686,419,-25}, {686,449,-25}, + {686,455,-25}, {686,734,-92}, {686,736,-92}, {686,758,-92}, + {686,775,-92}, {686,1030,-92}, {686,1111,-92}, {686,1173,-92}, + {686,1402,-92}, {686,1409,-92}, {686,1630,-111}, {686,1631,-111}, + {686,1645,-71}, {686,1655,-71}, {686,1662,-71}, {686,2126,-92}, + {686,2132,-55}, {686,2133,-55}, {686,2794,-111}, {686,2795,-111}, + {686,2809,-111}, {686,2819,-111}, {686,2826,-111}, {686,2899,-111}, + {686,2907,-111}, {686,2995,-74}, {686,3351,-92}, {686,3816,-92}, + {686,3817,-92}, {686,3824,-92}, {686,3831,-92}, {686,3839,-92}, + {687,0,-74}, {687,5,-74}, {687,16,-74}, {687,27,-74}, {687,33,-74}, + {687,43,-74}, {687,48,-74}, {687,393,-25}, {687,396,-25}, + {687,404,-25}, {687,414,-25}, {687,419,-25}, {687,449,-25}, + {687,455,-25}, {687,734,-92}, {687,736,-92}, {687,758,-92}, + {687,775,-92}, {687,1030,-92}, {687,1111,-92}, {687,1173,-92}, + {687,1402,-92}, {687,1409,-92}, {687,1630,-111}, {687,1631,-111}, + {687,1645,-71}, {687,1655,-71}, {687,1662,-71}, {687,2126,-92}, + {687,2132,-55}, {687,2133,-55}, {687,2794,-111}, {687,2795,-111}, + {687,2809,-111}, {687,2819,-111}, {687,2826,-111}, {687,2899,-111}, + {687,2907,-111}, {687,2995,-74}, {687,3351,-92}, {687,3816,-92}, + {687,3817,-92}, {687,3824,-92}, {687,3831,-92}, {687,3839,-92}, + {692,0,-74}, {692,5,-74}, {692,16,-74}, {692,27,-74}, {692,33,-74}, + {692,43,-74}, {692,48,-74}, {692,393,-25}, {692,396,-25}, + {692,404,-25}, {692,414,-25}, {692,419,-25}, {692,449,-25}, + {692,455,-25}, {692,734,-92}, {692,736,-92}, {692,758,-92}, + {692,775,-92}, {692,1030,-92}, {692,1111,-92}, {692,1173,-92}, + {692,1402,-92}, {692,1409,-92}, {692,1630,-111}, {692,1631,-111}, + {692,1645,-71}, {692,1655,-71}, {692,1662,-71}, {692,2126,-92}, + {692,2132,-55}, {692,2133,-55}, {692,2794,-111}, {692,2795,-111}, + {692,2809,-111}, {692,2819,-111}, {692,2826,-111}, {692,2899,-111}, + {692,2907,-111}, {692,2995,-74}, {692,3351,-92}, {692,3816,-92}, + {692,3817,-92}, {692,3824,-92}, {692,3831,-92}, {692,3839,-92}, + {1192,1192,-10}, {1192,2995,-40}, {1192,3816,-20}, {1192,3817,-20}, + {1192,3824,-20}, {1192,3831,-20}, {1192,3839,-20}, {1312,1988,-10}, + {1312,2302,-10}, {1332,1988,-10}, {1332,2302,-10}, {1409,3139,-95}, + {1409,3143,-95}, {1630,1192,-10}, {1631,1192,-10}, {1645,1192,-10}, + {1655,1192,-10}, {1662,1192,-10}, {1787,1409,-10}, {1787,1608,-30}, + {1787,1630,-10}, {1787,1631,-10}, {1787,1787,-18}, {1787,2794,-10}, + {1787,2795,-10}, {1787,2809,-10}, {1787,2826,-10}, {1787,2899,-10}, + {1787,2907,-10}, {1787,2995,-10}, {1787,3143,55}, {2302,1630,-30}, + {2302,1631,-30}, {2302,1645,-30}, {2302,1655,-30}, {2302,1662,-30}, + {2302,2794,-10}, {2302,2795,-10}, {2302,2809,-10}, {2302,2819,-10}, + {2302,2826,-10}, {2302,2899,-10}, {2302,2907,-10}, {2648,3902,-40}, + {2769,3902,-40}, {2794,3902,-15}, {2794,3951,-25}, {2794,4020,-10}, + {2794,4031,-10}, {2794,4034,-10}, {2794,4050,-10}, {2795,3902,-15}, + {2795,3951,-25}, {2795,4020,-10}, {2795,4031,-10}, {2795,4034,-10}, + {2795,4050,-10}, {2809,3902,-15}, {2809,3951,-25}, {2809,4020,-10}, + {2809,4031,-10}, {2809,4034,-10}, {2809,4050,-10}, {2819,3902,-15}, + {2819,3951,-25}, {2819,4020,-10}, {2819,4031,-10}, {2819,4034,-10}, + {2819,4050,-10}, {2826,3902,-15}, {2826,3951,-25}, {2826,4020,-10}, + {2826,4031,-10}, {2826,4034,-10}, {2826,4050,-10}, {2899,3902,-15}, + {2899,3951,-25}, {2899,4020,-10}, {2899,4031,-10}, {2899,4034,-10}, + {2899,4050,-10}, {2907,3902,-15}, {2907,3951,-25}, {2907,4020,-10}, + {2907,4031,-10}, {2907,4034,-10}, {2907,4050,-10}, {2995,3139,-95}, + {2995,3143,-95}, {3140,3140,-74}, {3143,1481,-15}, {3143,3143,-74}, + {3143,3148,-15}, {3143,3279,-74}, {3143,3317,-74}, {3143,3498,-74}, + {3143,3556,-37}, {3143,3902,-15}, {3148,1409,-65}, {3148,2995,-65}, + {3498,0,-37}, {3498,5,-37}, {3498,16,-37}, {3498,27,-37}, + {3498,33,-37}, {3498,43,-37}, {3498,48,-37}, {3498,658,-70}, + {3498,668,-70}, {3498,686,-70}, {3498,687,-70}, {3498,692,-70}, + {3902,1409,-37}, {3902,1630,-15}, {3902,1631,-15}, {3902,1645,-15}, + {3902,1655,-15}, {3902,1662,-15}, {3902,2794,-15}, {3902,2795,-15}, + {3902,2809,-15}, {3902,2819,-15}, {3902,2826,-15}, {3902,2899,-15}, + {3902,2907,-15}, {3902,2995,-37}, {3951,734,-10}, {3951,736,-10}, + {3951,758,-10}, {3951,775,-10}, {3951,1030,-10}, {3951,1111,-10}, + {3951,1173,-10}, {3951,1409,-37}, {3951,1630,-10}, {3951,1631,-10}, + {3951,1645,-10}, {3951,1655,-10}, {3951,1662,-10}, {3951,2794,-15}, + {3951,2795,-15}, {3951,2809,-15}, {3951,2819,-15}, {3951,2826,-15}, + {3951,2899,-15}, {3951,2907,-15}, {3951,2995,-37}, {4020,1630,-10}, + {4020,1631,-10}, {4020,1645,-10}, {4020,1655,-10}, {4020,1662,-10}, + {4031,1409,-37}, {4031,2995,-37}, {4034,1409,-37}, {4034,2995,-37}, + {4050,1409,-37}, {4050,2995,-37}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature times_bolditalic_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair helvetica_kerns[] = { + {0,64,-30}, {0,70,-30}, {0,203,-30}, {0,393,-30}, {0,396,-30}, + {0,404,-30}, {0,414,-30}, {0,419,-30}, {0,449,-30}, {0,455,-30}, + {0,474,-30}, {0,570,-120}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-70}, {0,668,-50}, {0,686,-100}, + {0,687,-100}, {0,692,-100}, {0,3816,-30}, {0,3817,-30}, + {0,3824,-30}, {0,3831,-30}, {0,3839,-30}, {0,3902,-40}, + {0,3951,-40}, {0,4031,-40}, {0,4034,-40}, {0,4050,-40}, {5,64,-30}, + {5,70,-30}, {5,203,-30}, {5,393,-30}, {5,396,-30}, {5,404,-30}, + {5,414,-30}, {5,419,-30}, {5,449,-30}, {5,455,-30}, {5,474,-30}, + {5,570,-120}, {5,603,-50}, {5,604,-50}, {5,609,-50}, {5,615,-50}, + {5,624,-50}, {5,658,-70}, {5,668,-50}, {5,686,-100}, {5,687,-100}, + {5,692,-100}, {5,3816,-30}, {5,3817,-30}, {5,3824,-30}, + {5,3831,-30}, {5,3839,-30}, {5,3902,-40}, {5,3951,-40}, + {5,4031,-40}, {5,4034,-40}, {5,4050,-40}, {16,64,-30}, {16,70,-30}, + {16,203,-30}, {16,393,-30}, {16,396,-30}, {16,404,-30}, + {16,414,-30}, {16,419,-30}, {16,449,-30}, {16,455,-30}, + {16,474,-30}, {16,570,-120}, {16,603,-50}, {16,604,-50}, + {16,609,-50}, {16,615,-50}, {16,624,-50}, {16,658,-70}, + {16,668,-50}, {16,686,-100}, {16,687,-100}, {16,692,-100}, + {16,3816,-30}, {16,3817,-30}, {16,3824,-30}, {16,3831,-30}, + {16,3839,-30}, {16,3902,-40}, {16,3951,-40}, {16,4031,-40}, + {16,4034,-40}, {16,4050,-40}, {27,64,-30}, {27,70,-30}, + {27,203,-30}, {27,393,-30}, {27,396,-30}, {27,404,-30}, + {27,414,-30}, {27,419,-30}, {27,449,-30}, {27,455,-30}, + {27,474,-30}, {27,570,-120}, {27,603,-50}, {27,604,-50}, + {27,609,-50}, {27,615,-50}, {27,624,-50}, {27,658,-70}, + {27,668,-50}, {27,686,-100}, {27,687,-100}, {27,692,-100}, + {27,3816,-30}, {27,3817,-30}, {27,3824,-30}, {27,3831,-30}, + {27,3839,-30}, {27,3902,-40}, {27,3951,-40}, {27,4031,-40}, + {27,4034,-40}, {27,4050,-40}, {33,64,-30}, {33,70,-30}, + {33,203,-30}, {33,393,-30}, {33,396,-30}, {33,404,-30}, + {33,414,-30}, {33,419,-30}, {33,449,-30}, {33,455,-30}, + {33,474,-30}, {33,570,-120}, {33,603,-50}, {33,604,-50}, + {33,609,-50}, {33,615,-50}, {33,624,-50}, {33,658,-70}, + {33,668,-50}, {33,686,-100}, {33,687,-100}, {33,692,-100}, + {33,3816,-30}, {33,3817,-30}, {33,3824,-30}, {33,3831,-30}, + {33,3839,-30}, {33,3902,-40}, {33,3951,-40}, {33,4031,-40}, + {33,4034,-40}, {33,4050,-40}, {43,64,-30}, {43,70,-30}, + {43,203,-30}, {43,393,-30}, {43,396,-30}, {43,404,-30}, + {43,414,-30}, {43,419,-30}, {43,449,-30}, {43,455,-30}, + {43,474,-30}, {43,570,-120}, {43,603,-50}, {43,604,-50}, + {43,609,-50}, {43,615,-50}, {43,624,-50}, {43,658,-70}, + {43,668,-50}, {43,686,-100}, {43,687,-100}, {43,692,-100}, + {43,3816,-30}, {43,3817,-30}, {43,3824,-30}, {43,3831,-30}, + {43,3839,-30}, {43,3902,-40}, {43,3951,-40}, {43,4031,-40}, + {43,4034,-40}, {43,4050,-40}, {48,64,-30}, {48,70,-30}, + {48,203,-30}, {48,393,-30}, {48,396,-30}, {48,404,-30}, + {48,414,-30}, {48,419,-30}, {48,449,-30}, {48,455,-30}, + {48,474,-30}, {48,570,-120}, {48,603,-50}, {48,604,-50}, + {48,609,-50}, {48,615,-50}, {48,624,-50}, {48,658,-70}, + {48,668,-50}, {48,686,-100}, {48,687,-100}, {48,692,-100}, + {48,3816,-30}, {48,3817,-30}, {48,3824,-30}, {48,3831,-30}, + {48,3839,-30}, {48,3902,-40}, {48,3951,-40}, {48,4031,-40}, + {48,4034,-40}, {48,4050,-40}, {51,603,-10}, {51,604,-10}, + {51,609,-10}, {51,615,-10}, {51,624,-10}, {51,1409,-20}, + {51,2995,-20}, {64,1409,-30}, {64,2995,-30}, {70,1409,-30}, + {70,2995,-30}, {93,0,-40}, {93,5,-40}, {93,16,-40}, {93,27,-40}, + {93,33,-40}, {93,43,-40}, {93,48,-40}, {93,658,-70}, {93,668,-40}, + {93,686,-90}, {93,687,-90}, {93,692,-90}, {93,1409,-70}, + {93,2995,-70}, {192,0,-80}, {192,5,-80}, {192,16,-80}, + {192,27,-80}, {192,33,-80}, {192,43,-80}, {192,48,-80}, + {192,734,-50}, {192,736,-50}, {192,758,-50}, {192,775,-50}, + {192,1030,-50}, {192,1111,-50}, {192,1173,-50}, {192,1409,-150}, + {192,1630,-30}, {192,1631,-30}, {192,1645,-30}, {192,1655,-30}, + {192,1662,-30}, {192,2794,-30}, {192,2795,-30}, {192,2809,-30}, + {192,2819,-30}, {192,2826,-30}, {192,2899,-30}, {192,2907,-30}, + {192,2995,-150}, {192,3148,-45}, {301,0,-20}, {301,5,-20}, + {301,16,-20}, {301,27,-20}, {301,33,-20}, {301,43,-20}, + {301,48,-20}, {301,734,-20}, {301,736,-20}, {301,758,-20}, + {301,775,-20}, {301,1030,-20}, {301,1111,-20}, {301,1173,-20}, + {301,1409,-30}, {301,2995,-30}, {301,3816,-20}, {301,3817,-20}, + {301,3824,-20}, {301,3831,-20}, {301,3839,-20}, {309,393,-50}, + {309,396,-50}, {309,404,-50}, {309,414,-50}, {309,419,-50}, + {309,449,-50}, {309,455,-50}, {309,1630,-40}, {309,1631,-40}, + {309,1645,-40}, {309,1655,-40}, {309,1662,-40}, {309,2794,-40}, + {309,2795,-40}, {309,2809,-40}, {309,2819,-40}, {309,2826,-40}, + {309,2899,-40}, {309,2907,-40}, {309,3816,-30}, {309,3817,-30}, + {309,3824,-30}, {309,3831,-30}, {309,3839,-30}, {309,4031,-50}, + {309,4034,-50}, {309,4050,-50}, {337,570,-110}, {337,658,-110}, + {337,668,-70}, {337,686,-140}, {337,687,-140}, {337,692,-140}, + {337,3139,-140}, {337,3143,-160}, {337,4031,-30}, {337,4034,-30}, + {337,4050,-30}, {356,570,-110}, {356,658,-110}, {356,668,-70}, + {356,686,-140}, {356,687,-140}, {356,692,-140}, {356,3139,-140}, + {356,3143,-160}, {356,4031,-30}, {356,4034,-30}, {356,4050,-30}, + {393,0,-20}, {393,5,-20}, {393,16,-20}, {393,27,-20}, {393,33,-20}, + {393,43,-20}, {393,48,-20}, {393,570,-40}, {393,658,-50}, + {393,668,-30}, {393,678,-60}, {393,686,-70}, {393,687,-70}, + {393,692,-70}, {393,1409,-40}, {393,2995,-40}, {396,0,-20}, + {396,5,-20}, {396,16,-20}, {396,27,-20}, {396,33,-20}, + {396,43,-20}, {396,48,-20}, {396,570,-40}, {396,658,-50}, + {396,668,-30}, {396,678,-60}, {396,686,-70}, {396,687,-70}, + {396,692,-70}, {396,1409,-40}, {396,2995,-40}, {404,0,-20}, + {404,5,-20}, {404,16,-20}, {404,27,-20}, {404,33,-20}, + {404,43,-20}, {404,48,-20}, {404,570,-40}, {404,658,-50}, + {404,668,-30}, {404,678,-60}, {404,686,-70}, {404,687,-70}, + {404,692,-70}, {404,1409,-40}, {404,2995,-40}, {414,0,-20}, + {414,5,-20}, {414,16,-20}, {414,27,-20}, {414,33,-20}, + {414,43,-20}, {414,48,-20}, {414,570,-40}, {414,658,-50}, + {414,668,-30}, {414,678,-60}, {414,686,-70}, {414,687,-70}, + {414,692,-70}, {414,1409,-40}, {414,2995,-40}, {419,0,-20}, + {419,5,-20}, {419,16,-20}, {419,27,-20}, {419,33,-20}, + {419,43,-20}, {419,48,-20}, {419,570,-40}, {419,658,-50}, + {419,668,-30}, {419,678,-60}, {419,686,-70}, {419,687,-70}, + {419,692,-70}, {419,1409,-40}, {419,2995,-40}, {449,0,-20}, + {449,5,-20}, {449,16,-20}, {449,27,-20}, {449,33,-20}, + {449,43,-20}, {449,48,-20}, {449,570,-40}, {449,658,-50}, + {449,668,-30}, {449,678,-60}, {449,686,-70}, {449,687,-70}, + {449,692,-70}, {449,1409,-40}, {449,2995,-40}, {455,0,-20}, + {455,5,-20}, {455,16,-20}, {455,27,-20}, {455,33,-20}, + {455,43,-20}, {455,48,-20}, {455,570,-40}, {455,658,-50}, + {455,668,-30}, {455,678,-60}, {455,686,-70}, {455,687,-70}, + {455,692,-70}, {455,1409,-40}, {455,2995,-40}, {459,0,-120}, + {459,5,-120}, {459,16,-120}, {459,27,-120}, {459,33,-120}, + {459,43,-120}, {459,48,-120}, {459,734,-40}, {459,736,-40}, + {459,758,-40}, {459,775,-40}, {459,1030,-40}, {459,1111,-40}, + {459,1173,-40}, {459,1409,-180}, {459,1630,-50}, {459,1631,-50}, + {459,1645,-50}, {459,1655,-50}, {459,1662,-50}, {459,2794,-50}, + {459,2795,-50}, {459,2809,-50}, {459,2819,-50}, {459,2826,-50}, + {459,2899,-50}, {459,2907,-50}, {459,2995,-180}, {474,603,-10}, + {474,604,-10}, {474,609,-10}, {474,615,-10}, {474,624,-10}, + {478,393,-20}, {478,396,-20}, {478,404,-20}, {478,414,-20}, + {478,419,-20}, {478,449,-20}, {478,455,-20}, {478,570,-30}, + {478,603,-40}, {478,604,-40}, {478,609,-40}, {478,615,-40}, + {478,624,-40}, {478,658,-50}, {478,668,-30}, {478,686,-50}, + {478,687,-50}, {478,692,-50}, {499,1409,-20}, {499,2995,-20}, + {543,1409,-20}, {543,2995,-20}, {570,0,-120}, {570,5,-120}, + {570,16,-120}, {570,27,-120}, {570,33,-120}, {570,43,-120}, + {570,48,-120}, {570,393,-40}, {570,396,-40}, {570,404,-40}, + {570,414,-40}, {570,419,-40}, {570,449,-40}, {570,455,-40}, + {570,734,-120}, {570,736,-120}, {570,758,-120}, {570,775,-120}, + {570,1030,-120}, {570,1111,-120}, {570,1173,-60}, {570,1402,-20}, + {570,1409,-120}, {570,1630,-120}, {570,1631,-120}, {570,1645,-120}, + {570,1655,-120}, {570,1662,-60}, {570,2126,-140}, {570,2794,-120}, + {570,2795,-120}, {570,2809,-120}, {570,2819,-120}, {570,2826,-120}, + {570,2899,-120}, {570,2907,-60}, {570,2995,-120}, {570,3148,-120}, + {570,3351,-20}, {570,3816,-120}, {570,3817,-120}, {570,3824,-120}, + {570,3831,-120}, {570,3839,-120}, {570,3951,-120}, {570,4031,-120}, + {570,4034,-120}, {570,4050,-60}, {603,0,-40}, {603,5,-40}, + {603,16,-40}, {603,27,-40}, {603,33,-40}, {603,43,-40}, + {603,48,-40}, {603,1409,-40}, {603,2995,-40}, {604,0,-40}, + {604,5,-40}, {604,16,-40}, {604,27,-40}, {604,33,-40}, + {604,43,-40}, {604,48,-40}, {604,1409,-40}, {604,2995,-40}, + {609,0,-40}, {609,5,-40}, {609,16,-40}, {609,27,-40}, {609,33,-40}, + {609,43,-40}, {609,48,-40}, {609,1409,-40}, {609,2995,-40}, + {615,0,-40}, {615,5,-40}, {615,16,-40}, {615,27,-40}, {615,33,-40}, + {615,43,-40}, {615,48,-40}, {615,1409,-40}, {615,2995,-40}, + {624,0,-40}, {624,5,-40}, {624,16,-40}, {624,27,-40}, {624,33,-40}, + {624,43,-40}, {624,48,-40}, {624,1409,-40}, {624,2995,-40}, + {658,0,-80}, {658,5,-80}, {658,16,-80}, {658,27,-80}, {658,33,-80}, + {658,43,-80}, {658,48,-80}, {658,203,-40}, {658,393,-40}, + {658,396,-40}, {658,404,-40}, {658,414,-40}, {658,419,-40}, + {658,449,-40}, {658,455,-40}, {658,734,-70}, {658,736,-70}, + {658,758,-70}, {658,775,-70}, {658,1030,-70}, {658,1111,-70}, + {658,1173,-70}, {658,1402,-40}, {658,1409,-125}, {658,1630,-80}, + {658,1631,-80}, {658,1645,-80}, {658,1655,-80}, {658,1662,-80}, + {658,2126,-80}, {658,2794,-80}, {658,2795,-80}, {658,2809,-80}, + {658,2819,-80}, {658,2826,-80}, {658,2899,-80}, {658,2907,-80}, + {658,2995,-125}, {658,3351,-40}, {658,3816,-70}, {658,3817,-70}, + {658,3824,-70}, {658,3831,-70}, {658,3839,-70}, {668,0,-50}, + {668,5,-50}, {668,16,-50}, {668,27,-50}, {668,33,-50}, + {668,43,-50}, {668,48,-50}, {668,393,-20}, {668,396,-20}, + {668,404,-20}, {668,414,-20}, {668,419,-20}, {668,449,-20}, + {668,455,-20}, {668,734,-40}, {668,736,-40}, {668,758,-40}, + {668,775,-40}, {668,1030,-40}, {668,1111,-40}, {668,1173,-40}, + {668,1409,-80}, {668,1630,-30}, {668,1631,-30}, {668,1645,-30}, + {668,1655,-30}, {668,1662,-30}, {668,2126,-40}, {668,2794,-30}, + {668,2795,-30}, {668,2809,-30}, {668,2819,-30}, {668,2826,-30}, + {668,2899,-30}, {668,2907,-30}, {668,2995,-80}, {668,3816,-30}, + {668,3817,-30}, {668,3824,-30}, {668,3831,-30}, {668,3839,-30}, + {668,4031,-20}, {668,4034,-20}, {668,4050,-20}, {686,0,-110}, + {686,5,-110}, {686,16,-110}, {686,27,-110}, {686,33,-110}, + {686,43,-110}, {686,48,-110}, {686,393,-85}, {686,396,-85}, + {686,404,-85}, {686,414,-85}, {686,419,-85}, {686,449,-85}, + {686,455,-85}, {686,734,-140}, {686,736,-140}, {686,758,-140}, + {686,775,-140}, {686,1030,-140}, {686,1111,-140}, {686,1173,-140}, + {686,1402,-60}, {686,1409,-140}, {686,1630,-140}, {686,1631,-140}, + {686,1645,-140}, {686,1655,-140}, {686,1662,-140}, {686,2126,-140}, + {686,2132,-20}, {686,2133,-20}, {686,2794,-140}, {686,2795,-140}, + {686,2809,-140}, {686,2819,-140}, {686,2826,-140}, {686,2899,-140}, + {686,2907,-140}, {686,2995,-140}, {686,3351,-60}, {686,3816,-110}, + {686,3817,-110}, {686,3824,-110}, {686,3831,-110}, {686,3839,-110}, + {687,0,-110}, {687,5,-110}, {687,16,-110}, {687,27,-110}, + {687,33,-110}, {687,43,-110}, {687,48,-110}, {687,393,-85}, + {687,396,-85}, {687,404,-85}, {687,414,-85}, {687,419,-85}, + {687,449,-85}, {687,455,-85}, {687,734,-140}, {687,736,-140}, + {687,758,-140}, {687,775,-140}, {687,1030,-140}, {687,1111,-140}, + {687,1173,-70}, {687,1402,-60}, {687,1409,-140}, {687,1630,-140}, + {687,1631,-140}, {687,1645,-140}, {687,1655,-140}, {687,1662,-140}, + {687,2126,-140}, {687,2132,-20}, {687,2133,-20}, {687,2794,-140}, + {687,2795,-140}, {687,2809,-140}, {687,2819,-140}, {687,2826,-140}, + {687,2899,-140}, {687,2907,-140}, {687,2995,-140}, {687,3351,-60}, + {687,3816,-110}, {687,3817,-110}, {687,3824,-110}, {687,3831,-110}, + {687,3839,-110}, {692,0,-110}, {692,5,-110}, {692,16,-110}, + {692,27,-110}, {692,33,-110}, {692,43,-110}, {692,48,-110}, + {692,393,-85}, {692,396,-85}, {692,404,-85}, {692,414,-85}, + {692,419,-85}, {692,449,-85}, {692,455,-85}, {692,734,-140}, + {692,736,-140}, {692,758,-140}, {692,775,-140}, {692,1030,-140}, + {692,1111,-140}, {692,1173,-70}, {692,1402,-60}, {692,1409,-140}, + {692,1630,-140}, {692,1631,-140}, {692,1645,-140}, {692,1655,-140}, + {692,1662,-140}, {692,2126,-140}, {692,2132,-20}, {692,2133,-20}, + {692,2794,-140}, {692,2795,-140}, {692,2809,-140}, {692,2819,-140}, + {692,2826,-140}, {692,2899,-140}, {692,2907,-140}, {692,2995,-140}, + {692,3351,-60}, {692,3816,-110}, {692,3817,-110}, {692,3824,-110}, + {692,3831,-110}, {692,3839,-110}, {734,3902,-20}, {734,3951,-20}, + {734,4031,-30}, {734,4034,-30}, {734,4050,-30}, {736,3902,-20}, + {736,3951,-20}, {736,4031,-30}, {736,4034,-30}, {736,4050,-30}, + {758,3902,-20}, {758,3951,-20}, {758,4031,-30}, {758,4034,-30}, + {758,4050,-30}, {775,3902,-20}, {775,3951,-20}, {775,4031,-30}, + {775,4034,-30}, {775,4050,-30}, {1030,3902,-20}, {1030,3951,-20}, + {1030,4031,-30}, {1030,4034,-30}, {1030,4050,-30}, {1111,3902,-20}, + {1111,3951,-20}, {1111,4031,-30}, {1111,4034,-30}, {1111,4050,-30}, + {1173,3902,-20}, {1173,3951,-20}, {1173,4031,-30}, {1173,4034,-30}, + {1173,4050,-30}, {1192,1192,-10}, {1192,1409,-40}, {1192,2416,-20}, + {1192,2501,-20}, {1192,2995,-40}, {1192,3816,-20}, {1192,3817,-20}, + {1192,3824,-20}, {1192,3831,-20}, {1192,3839,-20}, {1192,3902,-20}, + {1192,4031,-20}, {1192,4034,-20}, {1192,4050,-20}, {1312,1409,-15}, + {1312,2302,-20}, {1332,1409,-15}, {1332,2302,-20}, {1402,3498,-50}, + {1409,3139,-100}, {1409,3143,-100}, {1630,1409,-15}, + {1630,2995,-15}, {1630,3902,-30}, {1630,3951,-20}, {1630,4020,-30}, + {1630,4031,-20}, {1630,4034,-20}, {1630,4050,-20}, {1631,1409,-15}, + {1631,2995,-15}, {1631,3902,-30}, {1631,3951,-20}, {1631,4020,-30}, + {1631,4031,-20}, {1631,4034,-20}, {1631,4050,-20}, {1645,1409,-15}, + {1645,2995,-15}, {1645,3902,-30}, {1645,3951,-20}, {1645,4020,-30}, + {1645,4031,-20}, {1645,4034,-20}, {1645,4050,-20}, {1655,1409,-15}, + {1655,2995,-15}, {1655,3902,-30}, {1655,3951,-20}, {1655,4020,-30}, + {1655,4031,-20}, {1655,4034,-20}, {1655,4050,-20}, {1662,1409,-15}, + {1662,2995,-15}, {1662,3902,-30}, {1662,3951,-20}, {1662,4020,-30}, + {1662,4031,-20}, {1662,4034,-20}, {1662,4050,-20}, {1787,734,-30}, + {1787,736,-30}, {1787,758,-30}, {1787,775,-30}, {1787,1030,-30}, + {1787,1111,-30}, {1787,1173,-30}, {1787,1409,-30}, {1787,1608,-28}, + {1787,1630,-30}, {1787,1631,-30}, {1787,1645,-30}, {1787,1655,-30}, + {1787,1662,-30}, {1787,2794,-30}, {1787,2795,-30}, {1787,2809,-30}, + {1787,2819,-30}, {1787,2826,-30}, {1787,2899,-30}, {1787,2907,-30}, + {1787,2995,-30}, {1787,3139,60}, {1787,3143,50}, {1886,3148,-10}, + {1988,4031,-30}, {1988,4034,-30}, {1988,4050,-30}, {2302,1630,-20}, + {2302,1631,-20}, {2302,1645,-20}, {2302,1655,-20}, {2302,1662,-20}, + {2302,2794,-20}, {2302,2795,-20}, {2302,2809,-20}, {2302,2819,-20}, + {2302,2826,-20}, {2302,2899,-20}, {2302,2907,-20}, {2511,3816,-10}, + {2511,3817,-10}, {2511,3824,-10}, {2511,3831,-10}, {2511,3839,-10}, + {2511,4031,-15}, {2511,4034,-15}, {2511,4050,-15}, {2648,3816,-10}, + {2648,3817,-10}, {2648,3824,-10}, {2648,3831,-10}, {2648,3839,-10}, + {2648,3902,-20}, {2648,4031,-15}, {2648,4034,-15}, {2648,4050,-15}, + {2769,3816,-10}, {2769,3817,-10}, {2769,3824,-10}, {2769,3831,-10}, + {2769,3839,-10}, {2769,3902,-20}, {2769,4031,-15}, {2769,4034,-15}, + {2769,4050,-15}, {2794,1409,-40}, {2794,2995,-40}, {2794,3902,-15}, + {2794,3951,-15}, {2794,4020,-30}, {2794,4031,-30}, {2794,4034,-30}, + {2794,4050,-30}, {2795,1409,-40}, {2795,2995,-40}, {2795,3902,-15}, + {2795,3951,-15}, {2795,4020,-30}, {2795,4031,-30}, {2795,4034,-30}, + {2795,4050,-30}, {2809,1409,-40}, {2809,2995,-40}, {2809,3902,-15}, + {2809,3951,-15}, {2809,4020,-30}, {2809,4031,-30}, {2809,4034,-30}, + {2809,4050,-30}, {2819,1409,-40}, {2819,2995,-40}, {2819,3902,-15}, + {2819,3951,-15}, {2819,4020,-30}, {2819,4031,-30}, {2819,4034,-30}, + {2819,4050,-30}, {2826,1409,-40}, {2826,2995,-40}, {2826,3902,-15}, + {2826,3951,-15}, {2826,4020,-30}, {2826,4031,-30}, {2826,4034,-30}, + {2826,4050,-30}, {2899,734,-55}, {2899,736,-55}, {2899,758,-55}, + {2899,775,-55}, {2899,1030,-55}, {2899,1111,-55}, {2899,1173,-55}, + {2899,1192,-55}, {2899,1312,-55}, {2899,1332,-55}, {2899,1409,-95}, + {2899,1481,-55}, {2899,1630,-55}, {2899,1631,-55}, {2899,1645,-55}, + {2899,1655,-55}, {2899,1662,-55}, {2899,1787,-55}, {2899,1886,-55}, + {2899,1988,-55}, {2899,2132,-55}, {2899,2133,-55}, {2899,2140,-55}, + {2899,2196,-55}, {2899,2207,-55}, {2899,2274,-55}, {2899,2302,-55}, + {2899,2416,-55}, {2899,2501,-55}, {2899,2511,-55}, {2899,2648,-55}, + {2899,2769,-55}, {2899,2794,-55}, {2899,2795,-55}, {2899,2809,-55}, + {2899,2819,-55}, {2899,2826,-55}, {2899,2899,-55}, {2899,2907,-55}, + {2899,2921,-55}, {2899,2995,-95}, {2899,3083,-55}, {2899,3148,-55}, + {2899,3279,-55}, {2899,3317,-55}, {2899,3556,-55}, {2899,3816,-55}, + {2899,3817,-55}, {2899,3824,-55}, {2899,3831,-55}, {2899,3839,-55}, + {2899,3902,-70}, {2899,3951,-70}, {2899,4020,-85}, {2899,4031,-70}, + {2899,4034,-70}, {2899,4050,-70}, {2899,4132,-55}, {2899,4153,-55}, + {2907,1409,-40}, {2907,2995,-40}, {2907,3902,-15}, {2907,3951,-15}, + {2907,4020,-30}, {2907,4031,-30}, {2907,4034,-30}, {2907,4050,-30}, + {2921,1409,-35}, {2921,2995,-35}, {2921,4031,-30}, {2921,4034,-30}, + {2921,4050,-30}, {2995,3139,-100}, {2995,3143,-100}, + {2995,3498,-60}, {3139,3498,-40}, {3140,3140,-57}, {3143,1481,-50}, + {3143,3143,-57}, {3143,3148,-50}, {3143,3279,-50}, {3143,3317,-50}, + {3143,3498,-70}, {3148,734,-10}, {3148,736,-10}, {3148,758,-10}, + {3148,775,-10}, {3148,1030,-10}, {3148,1111,-10}, {3148,1173,-10}, + {3148,1402,30}, {3148,1409,-50}, {3148,2132,15}, {3148,2133,15}, + {3148,2140,15}, {3148,2196,15}, {3148,2207,15}, {3148,2302,15}, + {3148,2416,15}, {3148,2501,15}, {3148,2511,25}, {3148,2648,25}, + {3148,2769,25}, {3148,2921,30}, {3148,2995,-50}, {3148,3351,30}, + {3148,3556,40}, {3148,3816,15}, {3148,3817,15}, {3148,3824,15}, + {3148,3831,15}, {3148,3839,15}, {3148,3902,30}, {3148,4031,30}, + {3148,4034,30}, {3148,4050,30}, {3279,1409,-15}, {3279,2995,-15}, + {3279,3951,-30}, {3317,1409,-15}, {3317,2995,-15}, {3317,3951,-30}, + {3351,3498,-50}, {3498,570,-50}, {3498,658,-50}, {3498,668,-40}, + {3498,686,-90}, {3498,687,-90}, {3498,692,-90}, {3498,3135,-30}, + {3498,3140,-60}, {3902,734,-25}, {3902,736,-25}, {3902,758,-25}, + {3902,775,-25}, {3902,1030,-25}, {3902,1111,-25}, {3902,1173,-25}, + {3902,1409,-80}, {3902,1630,-25}, {3902,1631,-25}, {3902,1645,-25}, + {3902,1655,-25}, {3902,1662,-25}, {3902,2794,-25}, {3902,2795,-25}, + {3902,2809,-25}, {3902,2819,-25}, {3902,2826,-25}, {3902,2899,-25}, + {3902,2907,-25}, {3902,2995,-80}, {3951,734,-15}, {3951,736,-15}, + {3951,758,-15}, {3951,775,-15}, {3951,1030,-15}, {3951,1111,-15}, + {3951,1173,-15}, {3951,1409,-60}, {3951,1630,-10}, {3951,1631,-10}, + {3951,1645,-10}, {3951,1655,-10}, {3951,1662,-10}, {3951,2794,-10}, + {3951,2795,-10}, {3951,2809,-10}, {3951,2819,-10}, {3951,2826,-10}, + {3951,2899,-10}, {3951,2907,-10}, {3951,2995,-60}, {4020,1630,-30}, + {4020,1631,-30}, {4020,1645,-30}, {4020,1655,-30}, {4020,1662,-30}, + {4031,734,-20}, {4031,736,-20}, {4031,758,-20}, {4031,775,-20}, + {4031,1030,-20}, {4031,1111,-20}, {4031,1173,-20}, + {4031,1409,-100}, {4031,1630,-20}, {4031,1631,-20}, + {4031,1645,-20}, {4031,1655,-20}, {4031,1662,-20}, {4031,2794,-20}, + {4031,2795,-20}, {4031,2809,-20}, {4031,2819,-20}, {4031,2826,-20}, + {4031,2899,-20}, {4031,2907,-20}, {4031,2995,-100}, {4034,734,-20}, + {4034,736,-20}, {4034,758,-20}, {4034,775,-20}, {4034,1030,-20}, + {4034,1111,-20}, {4034,1173,-20}, {4034,1409,-100}, + {4034,1630,-20}, {4034,1631,-20}, {4034,1645,-20}, {4034,1655,-20}, + {4034,1662,-20}, {4034,2794,-20}, {4034,2795,-20}, {4034,2809,-20}, + {4034,2819,-20}, {4034,2826,-20}, {4034,2899,-20}, {4034,2907,-20}, + {4034,2995,-100}, {4050,734,-20}, {4050,736,-20}, {4050,758,-20}, + {4050,775,-20}, {4050,1030,-20}, {4050,1111,-20}, {4050,1173,-20}, + {4050,1409,-100}, {4050,1630,-20}, {4050,1631,-20}, + {4050,1645,-20}, {4050,1655,-20}, {4050,1662,-20}, {4050,2794,-20}, + {4050,2795,-20}, {4050,2809,-20}, {4050,2819,-20}, {4050,2826,-20}, + {4050,2899,-20}, {4050,2907,-20}, {4050,2995,-100}, + {4132,1630,-15}, {4132,1631,-15}, {4132,1645,-15}, {4132,1655,-15}, + {4132,1662,-15}, {4132,2794,-15}, {4132,2795,-15}, {4132,2809,-15}, + {4132,2819,-15}, {4132,2826,-15}, {4132,2899,-15}, {4132,2907,-15}, + {4153,1630,-15}, {4153,1631,-15}, {4153,1645,-15}, {4153,1655,-15}, + {4153,1662,-15}, {4153,2794,-15}, {4153,2795,-15}, {4153,2809,-15}, + {4153,2819,-15}, {4153,2826,-15}, {4153,2899,-15}, {4153,2907,-15}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature helvetica_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair helvetica_oblique_kerns[] = { + {0,64,-30}, {0,70,-30}, {0,203,-30}, {0,393,-30}, {0,396,-30}, + {0,404,-30}, {0,414,-30}, {0,419,-30}, {0,449,-30}, {0,455,-30}, + {0,474,-30}, {0,570,-120}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-70}, {0,668,-50}, {0,686,-100}, + {0,687,-100}, {0,692,-100}, {0,3816,-30}, {0,3817,-30}, + {0,3824,-30}, {0,3831,-30}, {0,3839,-30}, {0,3902,-40}, + {0,3951,-40}, {0,4031,-40}, {0,4034,-40}, {0,4050,-40}, {5,64,-30}, + {5,70,-30}, {5,203,-30}, {5,393,-30}, {5,396,-30}, {5,404,-30}, + {5,414,-30}, {5,419,-30}, {5,449,-30}, {5,455,-30}, {5,474,-30}, + {5,570,-120}, {5,603,-50}, {5,604,-50}, {5,609,-50}, {5,615,-50}, + {5,624,-50}, {5,658,-70}, {5,668,-50}, {5,686,-100}, {5,687,-100}, + {5,692,-100}, {5,3816,-30}, {5,3817,-30}, {5,3824,-30}, + {5,3831,-30}, {5,3839,-30}, {5,3902,-40}, {5,3951,-40}, + {5,4031,-40}, {5,4034,-40}, {5,4050,-40}, {16,64,-30}, {16,70,-30}, + {16,203,-30}, {16,393,-30}, {16,396,-30}, {16,404,-30}, + {16,414,-30}, {16,419,-30}, {16,449,-30}, {16,455,-30}, + {16,474,-30}, {16,570,-120}, {16,603,-50}, {16,604,-50}, + {16,609,-50}, {16,615,-50}, {16,624,-50}, {16,658,-70}, + {16,668,-50}, {16,686,-100}, {16,687,-100}, {16,692,-100}, + {16,3816,-30}, {16,3817,-30}, {16,3824,-30}, {16,3831,-30}, + {16,3839,-30}, {16,3902,-40}, {16,3951,-40}, {16,4031,-40}, + {16,4034,-40}, {16,4050,-40}, {27,64,-30}, {27,70,-30}, + {27,203,-30}, {27,393,-30}, {27,396,-30}, {27,404,-30}, + {27,414,-30}, {27,419,-30}, {27,449,-30}, {27,455,-30}, + {27,474,-30}, {27,570,-120}, {27,603,-50}, {27,604,-50}, + {27,609,-50}, {27,615,-50}, {27,624,-50}, {27,658,-70}, + {27,668,-50}, {27,686,-100}, {27,687,-100}, {27,692,-100}, + {27,3816,-30}, {27,3817,-30}, {27,3824,-30}, {27,3831,-30}, + {27,3839,-30}, {27,3902,-40}, {27,3951,-40}, {27,4031,-40}, + {27,4034,-40}, {27,4050,-40}, {33,64,-30}, {33,70,-30}, + {33,203,-30}, {33,393,-30}, {33,396,-30}, {33,404,-30}, + {33,414,-30}, {33,419,-30}, {33,449,-30}, {33,455,-30}, + {33,474,-30}, {33,570,-120}, {33,603,-50}, {33,604,-50}, + {33,609,-50}, {33,615,-50}, {33,624,-50}, {33,658,-70}, + {33,668,-50}, {33,686,-100}, {33,687,-100}, {33,692,-100}, + {33,3816,-30}, {33,3817,-30}, {33,3824,-30}, {33,3831,-30}, + {33,3839,-30}, {33,3902,-40}, {33,3951,-40}, {33,4031,-40}, + {33,4034,-40}, {33,4050,-40}, {43,64,-30}, {43,70,-30}, + {43,203,-30}, {43,393,-30}, {43,396,-30}, {43,404,-30}, + {43,414,-30}, {43,419,-30}, {43,449,-30}, {43,455,-30}, + {43,474,-30}, {43,570,-120}, {43,603,-50}, {43,604,-50}, + {43,609,-50}, {43,615,-50}, {43,624,-50}, {43,658,-70}, + {43,668,-50}, {43,686,-100}, {43,687,-100}, {43,692,-100}, + {43,3816,-30}, {43,3817,-30}, {43,3824,-30}, {43,3831,-30}, + {43,3839,-30}, {43,3902,-40}, {43,3951,-40}, {43,4031,-40}, + {43,4034,-40}, {43,4050,-40}, {48,64,-30}, {48,70,-30}, + {48,203,-30}, {48,393,-30}, {48,396,-30}, {48,404,-30}, + {48,414,-30}, {48,419,-30}, {48,449,-30}, {48,455,-30}, + {48,474,-30}, {48,570,-120}, {48,603,-50}, {48,604,-50}, + {48,609,-50}, {48,615,-50}, {48,624,-50}, {48,658,-70}, + {48,668,-50}, {48,686,-100}, {48,687,-100}, {48,692,-100}, + {48,3816,-30}, {48,3817,-30}, {48,3824,-30}, {48,3831,-30}, + {48,3839,-30}, {48,3902,-40}, {48,3951,-40}, {48,4031,-40}, + {48,4034,-40}, {48,4050,-40}, {51,603,-10}, {51,604,-10}, + {51,609,-10}, {51,615,-10}, {51,624,-10}, {51,1409,-20}, + {51,2995,-20}, {64,1409,-30}, {64,2995,-30}, {70,1409,-30}, + {70,2995,-30}, {93,0,-40}, {93,5,-40}, {93,16,-40}, {93,27,-40}, + {93,33,-40}, {93,43,-40}, {93,48,-40}, {93,658,-70}, {93,668,-40}, + {93,686,-90}, {93,687,-90}, {93,692,-90}, {93,1409,-70}, + {93,2995,-70}, {192,0,-80}, {192,5,-80}, {192,16,-80}, + {192,27,-80}, {192,33,-80}, {192,43,-80}, {192,48,-80}, + {192,734,-50}, {192,736,-50}, {192,758,-50}, {192,775,-50}, + {192,1030,-50}, {192,1111,-50}, {192,1173,-50}, {192,1409,-150}, + {192,1630,-30}, {192,1631,-30}, {192,1645,-30}, {192,1655,-30}, + {192,1662,-30}, {192,2794,-30}, {192,2795,-30}, {192,2809,-30}, + {192,2819,-30}, {192,2826,-30}, {192,2899,-30}, {192,2907,-30}, + {192,2995,-150}, {192,3148,-45}, {301,0,-20}, {301,5,-20}, + {301,16,-20}, {301,27,-20}, {301,33,-20}, {301,43,-20}, + {301,48,-20}, {301,734,-20}, {301,736,-20}, {301,758,-20}, + {301,775,-20}, {301,1030,-20}, {301,1111,-20}, {301,1173,-20}, + {301,1409,-30}, {301,2995,-30}, {301,3816,-20}, {301,3817,-20}, + {301,3824,-20}, {301,3831,-20}, {301,3839,-20}, {309,393,-50}, + {309,396,-50}, {309,404,-50}, {309,414,-50}, {309,419,-50}, + {309,449,-50}, {309,455,-50}, {309,1630,-40}, {309,1631,-40}, + {309,1645,-40}, {309,1655,-40}, {309,1662,-40}, {309,2794,-40}, + {309,2795,-40}, {309,2809,-40}, {309,2819,-40}, {309,2826,-40}, + {309,2899,-40}, {309,2907,-40}, {309,3816,-30}, {309,3817,-30}, + {309,3824,-30}, {309,3831,-30}, {309,3839,-30}, {309,4031,-50}, + {309,4034,-50}, {309,4050,-50}, {337,570,-110}, {337,658,-110}, + {337,668,-70}, {337,686,-140}, {337,687,-140}, {337,692,-140}, + {337,3139,-140}, {337,3143,-160}, {337,4031,-30}, {337,4034,-30}, + {337,4050,-30}, {356,570,-110}, {356,658,-110}, {356,668,-70}, + {356,686,-140}, {356,687,-140}, {356,692,-140}, {356,3139,-140}, + {356,3143,-160}, {356,4031,-30}, {356,4034,-30}, {356,4050,-30}, + {393,0,-20}, {393,5,-20}, {393,16,-20}, {393,27,-20}, {393,33,-20}, + {393,43,-20}, {393,48,-20}, {393,570,-40}, {393,658,-50}, + {393,668,-30}, {393,678,-60}, {393,686,-70}, {393,687,-70}, + {393,692,-70}, {393,1409,-40}, {393,2995,-40}, {396,0,-20}, + {396,5,-20}, {396,16,-20}, {396,27,-20}, {396,33,-20}, + {396,43,-20}, {396,48,-20}, {396,570,-40}, {396,658,-50}, + {396,668,-30}, {396,678,-60}, {396,686,-70}, {396,687,-70}, + {396,692,-70}, {396,1409,-40}, {396,2995,-40}, {404,0,-20}, + {404,5,-20}, {404,16,-20}, {404,27,-20}, {404,33,-20}, + {404,43,-20}, {404,48,-20}, {404,570,-40}, {404,658,-50}, + {404,668,-30}, {404,678,-60}, {404,686,-70}, {404,687,-70}, + {404,692,-70}, {404,1409,-40}, {404,2995,-40}, {414,0,-20}, + {414,5,-20}, {414,16,-20}, {414,27,-20}, {414,33,-20}, + {414,43,-20}, {414,48,-20}, {414,570,-40}, {414,658,-50}, + {414,668,-30}, {414,678,-60}, {414,686,-70}, {414,687,-70}, + {414,692,-70}, {414,1409,-40}, {414,2995,-40}, {419,0,-20}, + {419,5,-20}, {419,16,-20}, {419,27,-20}, {419,33,-20}, + {419,43,-20}, {419,48,-20}, {419,570,-40}, {419,658,-50}, + {419,668,-30}, {419,678,-60}, {419,686,-70}, {419,687,-70}, + {419,692,-70}, {419,1409,-40}, {419,2995,-40}, {449,0,-20}, + {449,5,-20}, {449,16,-20}, {449,27,-20}, {449,33,-20}, + {449,43,-20}, {449,48,-20}, {449,570,-40}, {449,658,-50}, + {449,668,-30}, {449,678,-60}, {449,686,-70}, {449,687,-70}, + {449,692,-70}, {449,1409,-40}, {449,2995,-40}, {455,0,-20}, + {455,5,-20}, {455,16,-20}, {455,27,-20}, {455,33,-20}, + {455,43,-20}, {455,48,-20}, {455,570,-40}, {455,658,-50}, + {455,668,-30}, {455,678,-60}, {455,686,-70}, {455,687,-70}, + {455,692,-70}, {455,1409,-40}, {455,2995,-40}, {459,0,-120}, + {459,5,-120}, {459,16,-120}, {459,27,-120}, {459,33,-120}, + {459,43,-120}, {459,48,-120}, {459,734,-40}, {459,736,-40}, + {459,758,-40}, {459,775,-40}, {459,1030,-40}, {459,1111,-40}, + {459,1173,-40}, {459,1409,-180}, {459,1630,-50}, {459,1631,-50}, + {459,1645,-50}, {459,1655,-50}, {459,1662,-50}, {459,2794,-50}, + {459,2795,-50}, {459,2809,-50}, {459,2819,-50}, {459,2826,-50}, + {459,2899,-50}, {459,2907,-50}, {459,2995,-180}, {474,603,-10}, + {474,604,-10}, {474,609,-10}, {474,615,-10}, {474,624,-10}, + {478,393,-20}, {478,396,-20}, {478,404,-20}, {478,414,-20}, + {478,419,-20}, {478,449,-20}, {478,455,-20}, {478,570,-30}, + {478,603,-40}, {478,604,-40}, {478,609,-40}, {478,615,-40}, + {478,624,-40}, {478,658,-50}, {478,668,-30}, {478,686,-50}, + {478,687,-50}, {478,692,-50}, {499,1409,-20}, {499,2995,-20}, + {543,1409,-20}, {543,2995,-20}, {570,0,-120}, {570,5,-120}, + {570,16,-120}, {570,27,-120}, {570,33,-120}, {570,43,-120}, + {570,48,-120}, {570,393,-40}, {570,396,-40}, {570,404,-40}, + {570,414,-40}, {570,419,-40}, {570,449,-40}, {570,455,-40}, + {570,734,-120}, {570,736,-120}, {570,758,-120}, {570,775,-120}, + {570,1030,-120}, {570,1111,-120}, {570,1173,-60}, {570,1402,-20}, + {570,1409,-120}, {570,1630,-120}, {570,1631,-120}, {570,1645,-120}, + {570,1655,-120}, {570,1662,-60}, {570,2126,-140}, {570,2794,-120}, + {570,2795,-120}, {570,2809,-120}, {570,2819,-120}, {570,2826,-120}, + {570,2899,-120}, {570,2907,-60}, {570,2995,-120}, {570,3148,-120}, + {570,3351,-20}, {570,3816,-120}, {570,3817,-120}, {570,3824,-120}, + {570,3831,-120}, {570,3839,-120}, {570,3951,-120}, {570,4031,-120}, + {570,4034,-120}, {570,4050,-60}, {603,0,-40}, {603,5,-40}, + {603,16,-40}, {603,27,-40}, {603,33,-40}, {603,43,-40}, + {603,48,-40}, {603,1409,-40}, {603,2995,-40}, {604,0,-40}, + {604,5,-40}, {604,16,-40}, {604,27,-40}, {604,33,-40}, + {604,43,-40}, {604,48,-40}, {604,1409,-40}, {604,2995,-40}, + {609,0,-40}, {609,5,-40}, {609,16,-40}, {609,27,-40}, {609,33,-40}, + {609,43,-40}, {609,48,-40}, {609,1409,-40}, {609,2995,-40}, + {615,0,-40}, {615,5,-40}, {615,16,-40}, {615,27,-40}, {615,33,-40}, + {615,43,-40}, {615,48,-40}, {615,1409,-40}, {615,2995,-40}, + {624,0,-40}, {624,5,-40}, {624,16,-40}, {624,27,-40}, {624,33,-40}, + {624,43,-40}, {624,48,-40}, {624,1409,-40}, {624,2995,-40}, + {658,0,-80}, {658,5,-80}, {658,16,-80}, {658,27,-80}, {658,33,-80}, + {658,43,-80}, {658,48,-80}, {658,203,-40}, {658,393,-40}, + {658,396,-40}, {658,404,-40}, {658,414,-40}, {658,419,-40}, + {658,449,-40}, {658,455,-40}, {658,734,-70}, {658,736,-70}, + {658,758,-70}, {658,775,-70}, {658,1030,-70}, {658,1111,-70}, + {658,1173,-70}, {658,1402,-40}, {658,1409,-125}, {658,1630,-80}, + {658,1631,-80}, {658,1645,-80}, {658,1655,-80}, {658,1662,-80}, + {658,2126,-80}, {658,2794,-80}, {658,2795,-80}, {658,2809,-80}, + {658,2819,-80}, {658,2826,-80}, {658,2899,-80}, {658,2907,-80}, + {658,2995,-125}, {658,3351,-40}, {658,3816,-70}, {658,3817,-70}, + {658,3824,-70}, {658,3831,-70}, {658,3839,-70}, {668,0,-50}, + {668,5,-50}, {668,16,-50}, {668,27,-50}, {668,33,-50}, + {668,43,-50}, {668,48,-50}, {668,393,-20}, {668,396,-20}, + {668,404,-20}, {668,414,-20}, {668,419,-20}, {668,449,-20}, + {668,455,-20}, {668,734,-40}, {668,736,-40}, {668,758,-40}, + {668,775,-40}, {668,1030,-40}, {668,1111,-40}, {668,1173,-40}, + {668,1409,-80}, {668,1630,-30}, {668,1631,-30}, {668,1645,-30}, + {668,1655,-30}, {668,1662,-30}, {668,2126,-40}, {668,2794,-30}, + {668,2795,-30}, {668,2809,-30}, {668,2819,-30}, {668,2826,-30}, + {668,2899,-30}, {668,2907,-30}, {668,2995,-80}, {668,3816,-30}, + {668,3817,-30}, {668,3824,-30}, {668,3831,-30}, {668,3839,-30}, + {668,4031,-20}, {668,4034,-20}, {668,4050,-20}, {686,0,-110}, + {686,5,-110}, {686,16,-110}, {686,27,-110}, {686,33,-110}, + {686,43,-110}, {686,48,-110}, {686,393,-85}, {686,396,-85}, + {686,404,-85}, {686,414,-85}, {686,419,-85}, {686,449,-85}, + {686,455,-85}, {686,734,-140}, {686,736,-140}, {686,758,-140}, + {686,775,-140}, {686,1030,-140}, {686,1111,-140}, {686,1173,-140}, + {686,1402,-60}, {686,1409,-140}, {686,1630,-140}, {686,1631,-140}, + {686,1645,-140}, {686,1655,-140}, {686,1662,-140}, {686,2126,-140}, + {686,2132,-20}, {686,2133,-20}, {686,2794,-140}, {686,2795,-140}, + {686,2809,-140}, {686,2819,-140}, {686,2826,-140}, {686,2899,-140}, + {686,2907,-140}, {686,2995,-140}, {686,3351,-60}, {686,3816,-110}, + {686,3817,-110}, {686,3824,-110}, {686,3831,-110}, {686,3839,-110}, + {687,0,-110}, {687,5,-110}, {687,16,-110}, {687,27,-110}, + {687,33,-110}, {687,43,-110}, {687,48,-110}, {687,393,-85}, + {687,396,-85}, {687,404,-85}, {687,414,-85}, {687,419,-85}, + {687,449,-85}, {687,455,-85}, {687,734,-140}, {687,736,-140}, + {687,758,-140}, {687,775,-140}, {687,1030,-140}, {687,1111,-140}, + {687,1173,-70}, {687,1402,-60}, {687,1409,-140}, {687,1630,-140}, + {687,1631,-140}, {687,1645,-140}, {687,1655,-140}, {687,1662,-140}, + {687,2126,-140}, {687,2132,-20}, {687,2133,-20}, {687,2794,-140}, + {687,2795,-140}, {687,2809,-140}, {687,2819,-140}, {687,2826,-140}, + {687,2899,-140}, {687,2907,-140}, {687,2995,-140}, {687,3351,-60}, + {687,3816,-110}, {687,3817,-110}, {687,3824,-110}, {687,3831,-110}, + {687,3839,-110}, {692,0,-110}, {692,5,-110}, {692,16,-110}, + {692,27,-110}, {692,33,-110}, {692,43,-110}, {692,48,-110}, + {692,393,-85}, {692,396,-85}, {692,404,-85}, {692,414,-85}, + {692,419,-85}, {692,449,-85}, {692,455,-85}, {692,734,-140}, + {692,736,-140}, {692,758,-140}, {692,775,-140}, {692,1030,-140}, + {692,1111,-140}, {692,1173,-70}, {692,1402,-60}, {692,1409,-140}, + {692,1630,-140}, {692,1631,-140}, {692,1645,-140}, {692,1655,-140}, + {692,1662,-140}, {692,2126,-140}, {692,2132,-20}, {692,2133,-20}, + {692,2794,-140}, {692,2795,-140}, {692,2809,-140}, {692,2819,-140}, + {692,2826,-140}, {692,2899,-140}, {692,2907,-140}, {692,2995,-140}, + {692,3351,-60}, {692,3816,-110}, {692,3817,-110}, {692,3824,-110}, + {692,3831,-110}, {692,3839,-110}, {734,3902,-20}, {734,3951,-20}, + {734,4031,-30}, {734,4034,-30}, {734,4050,-30}, {736,3902,-20}, + {736,3951,-20}, {736,4031,-30}, {736,4034,-30}, {736,4050,-30}, + {758,3902,-20}, {758,3951,-20}, {758,4031,-30}, {758,4034,-30}, + {758,4050,-30}, {775,3902,-20}, {775,3951,-20}, {775,4031,-30}, + {775,4034,-30}, {775,4050,-30}, {1030,3902,-20}, {1030,3951,-20}, + {1030,4031,-30}, {1030,4034,-30}, {1030,4050,-30}, {1111,3902,-20}, + {1111,3951,-20}, {1111,4031,-30}, {1111,4034,-30}, {1111,4050,-30}, + {1173,3902,-20}, {1173,3951,-20}, {1173,4031,-30}, {1173,4034,-30}, + {1173,4050,-30}, {1192,1192,-10}, {1192,1409,-40}, {1192,2416,-20}, + {1192,2501,-20}, {1192,2995,-40}, {1192,3816,-20}, {1192,3817,-20}, + {1192,3824,-20}, {1192,3831,-20}, {1192,3839,-20}, {1192,3902,-20}, + {1192,4031,-20}, {1192,4034,-20}, {1192,4050,-20}, {1312,1409,-15}, + {1312,2302,-20}, {1332,1409,-15}, {1332,2302,-20}, {1402,3498,-50}, + {1409,3139,-100}, {1409,3143,-100}, {1630,1409,-15}, + {1630,2995,-15}, {1630,3902,-30}, {1630,3951,-20}, {1630,4020,-30}, + {1630,4031,-20}, {1630,4034,-20}, {1630,4050,-20}, {1631,1409,-15}, + {1631,2995,-15}, {1631,3902,-30}, {1631,3951,-20}, {1631,4020,-30}, + {1631,4031,-20}, {1631,4034,-20}, {1631,4050,-20}, {1645,1409,-15}, + {1645,2995,-15}, {1645,3902,-30}, {1645,3951,-20}, {1645,4020,-30}, + {1645,4031,-20}, {1645,4034,-20}, {1645,4050,-20}, {1655,1409,-15}, + {1655,2995,-15}, {1655,3902,-30}, {1655,3951,-20}, {1655,4020,-30}, + {1655,4031,-20}, {1655,4034,-20}, {1655,4050,-20}, {1662,1409,-15}, + {1662,2995,-15}, {1662,3902,-30}, {1662,3951,-20}, {1662,4020,-30}, + {1662,4031,-20}, {1662,4034,-20}, {1662,4050,-20}, {1787,734,-30}, + {1787,736,-30}, {1787,758,-30}, {1787,775,-30}, {1787,1030,-30}, + {1787,1111,-30}, {1787,1173,-30}, {1787,1409,-30}, {1787,1608,-28}, + {1787,1630,-30}, {1787,1631,-30}, {1787,1645,-30}, {1787,1655,-30}, + {1787,1662,-30}, {1787,2794,-30}, {1787,2795,-30}, {1787,2809,-30}, + {1787,2819,-30}, {1787,2826,-30}, {1787,2899,-30}, {1787,2907,-30}, + {1787,2995,-30}, {1787,3139,60}, {1787,3143,50}, {1886,3148,-10}, + {1988,4031,-30}, {1988,4034,-30}, {1988,4050,-30}, {2302,1630,-20}, + {2302,1631,-20}, {2302,1645,-20}, {2302,1655,-20}, {2302,1662,-20}, + {2302,2794,-20}, {2302,2795,-20}, {2302,2809,-20}, {2302,2819,-20}, + {2302,2826,-20}, {2302,2899,-20}, {2302,2907,-20}, {2511,3816,-10}, + {2511,3817,-10}, {2511,3824,-10}, {2511,3831,-10}, {2511,3839,-10}, + {2511,4031,-15}, {2511,4034,-15}, {2511,4050,-15}, {2648,3816,-10}, + {2648,3817,-10}, {2648,3824,-10}, {2648,3831,-10}, {2648,3839,-10}, + {2648,3902,-20}, {2648,4031,-15}, {2648,4034,-15}, {2648,4050,-15}, + {2769,3816,-10}, {2769,3817,-10}, {2769,3824,-10}, {2769,3831,-10}, + {2769,3839,-10}, {2769,3902,-20}, {2769,4031,-15}, {2769,4034,-15}, + {2769,4050,-15}, {2794,1409,-40}, {2794,2995,-40}, {2794,3902,-15}, + {2794,3951,-15}, {2794,4020,-30}, {2794,4031,-30}, {2794,4034,-30}, + {2794,4050,-30}, {2795,1409,-40}, {2795,2995,-40}, {2795,3902,-15}, + {2795,3951,-15}, {2795,4020,-30}, {2795,4031,-30}, {2795,4034,-30}, + {2795,4050,-30}, {2809,1409,-40}, {2809,2995,-40}, {2809,3902,-15}, + {2809,3951,-15}, {2809,4020,-30}, {2809,4031,-30}, {2809,4034,-30}, + {2809,4050,-30}, {2819,1409,-40}, {2819,2995,-40}, {2819,3902,-15}, + {2819,3951,-15}, {2819,4020,-30}, {2819,4031,-30}, {2819,4034,-30}, + {2819,4050,-30}, {2826,1409,-40}, {2826,2995,-40}, {2826,3902,-15}, + {2826,3951,-15}, {2826,4020,-30}, {2826,4031,-30}, {2826,4034,-30}, + {2826,4050,-30}, {2899,734,-55}, {2899,736,-55}, {2899,758,-55}, + {2899,775,-55}, {2899,1030,-55}, {2899,1111,-55}, {2899,1173,-55}, + {2899,1192,-55}, {2899,1312,-55}, {2899,1332,-55}, {2899,1409,-95}, + {2899,1481,-55}, {2899,1630,-55}, {2899,1631,-55}, {2899,1645,-55}, + {2899,1655,-55}, {2899,1662,-55}, {2899,1787,-55}, {2899,1886,-55}, + {2899,1988,-55}, {2899,2132,-55}, {2899,2133,-55}, {2899,2140,-55}, + {2899,2196,-55}, {2899,2207,-55}, {2899,2274,-55}, {2899,2302,-55}, + {2899,2416,-55}, {2899,2501,-55}, {2899,2511,-55}, {2899,2648,-55}, + {2899,2769,-55}, {2899,2794,-55}, {2899,2795,-55}, {2899,2809,-55}, + {2899,2819,-55}, {2899,2826,-55}, {2899,2899,-55}, {2899,2907,-55}, + {2899,2921,-55}, {2899,2995,-95}, {2899,3083,-55}, {2899,3148,-55}, + {2899,3279,-55}, {2899,3317,-55}, {2899,3556,-55}, {2899,3816,-55}, + {2899,3817,-55}, {2899,3824,-55}, {2899,3831,-55}, {2899,3839,-55}, + {2899,3902,-70}, {2899,3951,-70}, {2899,4020,-85}, {2899,4031,-70}, + {2899,4034,-70}, {2899,4050,-70}, {2899,4132,-55}, {2899,4153,-55}, + {2907,1409,-40}, {2907,2995,-40}, {2907,3902,-15}, {2907,3951,-15}, + {2907,4020,-30}, {2907,4031,-30}, {2907,4034,-30}, {2907,4050,-30}, + {2921,1409,-35}, {2921,2995,-35}, {2921,4031,-30}, {2921,4034,-30}, + {2921,4050,-30}, {2995,3139,-100}, {2995,3143,-100}, + {2995,3498,-60}, {3139,3498,-40}, {3140,3140,-57}, {3143,1481,-50}, + {3143,3143,-57}, {3143,3148,-50}, {3143,3279,-50}, {3143,3317,-50}, + {3143,3498,-70}, {3148,734,-10}, {3148,736,-10}, {3148,758,-10}, + {3148,775,-10}, {3148,1030,-10}, {3148,1111,-10}, {3148,1173,-10}, + {3148,1402,30}, {3148,1409,-50}, {3148,2132,15}, {3148,2133,15}, + {3148,2140,15}, {3148,2196,15}, {3148,2207,15}, {3148,2302,15}, + {3148,2416,15}, {3148,2501,15}, {3148,2511,25}, {3148,2648,25}, + {3148,2769,25}, {3148,2921,30}, {3148,2995,-50}, {3148,3351,30}, + {3148,3556,40}, {3148,3816,15}, {3148,3817,15}, {3148,3824,15}, + {3148,3831,15}, {3148,3839,15}, {3148,3902,30}, {3148,4031,30}, + {3148,4034,30}, {3148,4050,30}, {3279,1409,-15}, {3279,2995,-15}, + {3279,3951,-30}, {3317,1409,-15}, {3317,2995,-15}, {3317,3951,-30}, + {3351,3498,-50}, {3498,570,-50}, {3498,658,-50}, {3498,668,-40}, + {3498,686,-90}, {3498,687,-90}, {3498,692,-90}, {3498,3135,-30}, + {3498,3140,-60}, {3902,734,-25}, {3902,736,-25}, {3902,758,-25}, + {3902,775,-25}, {3902,1030,-25}, {3902,1111,-25}, {3902,1173,-25}, + {3902,1409,-80}, {3902,1630,-25}, {3902,1631,-25}, {3902,1645,-25}, + {3902,1655,-25}, {3902,1662,-25}, {3902,2794,-25}, {3902,2795,-25}, + {3902,2809,-25}, {3902,2819,-25}, {3902,2826,-25}, {3902,2899,-25}, + {3902,2907,-25}, {3902,2995,-80}, {3951,734,-15}, {3951,736,-15}, + {3951,758,-15}, {3951,775,-15}, {3951,1030,-15}, {3951,1111,-15}, + {3951,1173,-15}, {3951,1409,-60}, {3951,1630,-10}, {3951,1631,-10}, + {3951,1645,-10}, {3951,1655,-10}, {3951,1662,-10}, {3951,2794,-10}, + {3951,2795,-10}, {3951,2809,-10}, {3951,2819,-10}, {3951,2826,-10}, + {3951,2899,-10}, {3951,2907,-10}, {3951,2995,-60}, {4020,1630,-30}, + {4020,1631,-30}, {4020,1645,-30}, {4020,1655,-30}, {4020,1662,-30}, + {4031,734,-20}, {4031,736,-20}, {4031,758,-20}, {4031,775,-20}, + {4031,1030,-20}, {4031,1111,-20}, {4031,1173,-20}, + {4031,1409,-100}, {4031,1630,-20}, {4031,1631,-20}, + {4031,1645,-20}, {4031,1655,-20}, {4031,1662,-20}, {4031,2794,-20}, + {4031,2795,-20}, {4031,2809,-20}, {4031,2819,-20}, {4031,2826,-20}, + {4031,2899,-20}, {4031,2907,-20}, {4031,2995,-100}, {4034,734,-20}, + {4034,736,-20}, {4034,758,-20}, {4034,775,-20}, {4034,1030,-20}, + {4034,1111,-20}, {4034,1173,-20}, {4034,1409,-100}, + {4034,1630,-20}, {4034,1631,-20}, {4034,1645,-20}, {4034,1655,-20}, + {4034,1662,-20}, {4034,2794,-20}, {4034,2795,-20}, {4034,2809,-20}, + {4034,2819,-20}, {4034,2826,-20}, {4034,2899,-20}, {4034,2907,-20}, + {4034,2995,-100}, {4050,734,-20}, {4050,736,-20}, {4050,758,-20}, + {4050,775,-20}, {4050,1030,-20}, {4050,1111,-20}, {4050,1173,-20}, + {4050,1409,-100}, {4050,1630,-20}, {4050,1631,-20}, + {4050,1645,-20}, {4050,1655,-20}, {4050,1662,-20}, {4050,2794,-20}, + {4050,2795,-20}, {4050,2809,-20}, {4050,2819,-20}, {4050,2826,-20}, + {4050,2899,-20}, {4050,2907,-20}, {4050,2995,-100}, + {4132,1630,-15}, {4132,1631,-15}, {4132,1645,-15}, {4132,1655,-15}, + {4132,1662,-15}, {4132,2794,-15}, {4132,2795,-15}, {4132,2809,-15}, + {4132,2819,-15}, {4132,2826,-15}, {4132,2899,-15}, {4132,2907,-15}, + {4153,1630,-15}, {4153,1631,-15}, {4153,1645,-15}, {4153,1655,-15}, + {4153,1662,-15}, {4153,2794,-15}, {4153,2795,-15}, {4153,2809,-15}, + {4153,2819,-15}, {4153,2826,-15}, {4153,2899,-15}, {4153,2907,-15}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature helvetica_oblique_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair helvetica_bold_kerns[] = { + {0,64,-40}, {0,70,-40}, {0,203,-50}, {0,393,-40}, {0,396,-40}, + {0,404,-40}, {0,414,-40}, {0,419,-40}, {0,449,-40}, {0,455,-40}, + {0,474,-40}, {0,570,-90}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-80}, {0,668,-60}, {0,686,-110}, + {0,687,-110}, {0,692,-110}, {0,3816,-30}, {0,3817,-30}, + {0,3824,-30}, {0,3831,-30}, {0,3839,-30}, {0,3902,-40}, + {0,3951,-30}, {0,4031,-30}, {0,4034,-30}, {0,4050,-30}, {5,64,-40}, + {5,70,-40}, {5,203,-50}, {5,393,-40}, {5,396,-40}, {5,404,-40}, + {5,414,-40}, {5,419,-40}, {5,449,-40}, {5,455,-40}, {5,474,-40}, + {5,570,-90}, {5,603,-50}, {5,604,-50}, {5,609,-50}, {5,615,-50}, + {5,624,-50}, {5,658,-80}, {5,668,-60}, {5,686,-110}, {5,687,-110}, + {5,692,-110}, {5,3816,-30}, {5,3817,-30}, {5,3824,-30}, + {5,3831,-30}, {5,3839,-30}, {5,3902,-40}, {5,3951,-30}, + {5,4031,-30}, {5,4034,-30}, {5,4050,-30}, {16,64,-40}, {16,70,-40}, + {16,203,-50}, {16,393,-40}, {16,396,-40}, {16,404,-40}, + {16,414,-40}, {16,419,-40}, {16,449,-40}, {16,455,-40}, + {16,474,-40}, {16,570,-90}, {16,603,-50}, {16,604,-50}, + {16,609,-50}, {16,615,-50}, {16,624,-50}, {16,658,-80}, + {16,668,-60}, {16,686,-110}, {16,687,-110}, {16,692,-110}, + {16,3816,-30}, {16,3817,-30}, {16,3824,-30}, {16,3831,-30}, + {16,3839,-30}, {16,3902,-40}, {16,3951,-30}, {16,4031,-30}, + {16,4034,-30}, {16,4050,-30}, {27,64,-40}, {27,70,-40}, + {27,203,-50}, {27,393,-40}, {27,396,-40}, {27,404,-40}, + {27,414,-40}, {27,419,-40}, {27,449,-40}, {27,455,-40}, + {27,474,-40}, {27,570,-90}, {27,603,-50}, {27,604,-50}, + {27,609,-50}, {27,615,-50}, {27,624,-50}, {27,658,-80}, + {27,668,-60}, {27,686,-110}, {27,687,-110}, {27,692,-110}, + {27,3816,-30}, {27,3817,-30}, {27,3824,-30}, {27,3831,-30}, + {27,3839,-30}, {27,3902,-40}, {27,3951,-30}, {27,4031,-30}, + {27,4034,-30}, {27,4050,-30}, {33,64,-40}, {33,70,-40}, + {33,203,-50}, {33,393,-40}, {33,396,-40}, {33,404,-40}, + {33,414,-40}, {33,419,-40}, {33,449,-40}, {33,455,-40}, + {33,474,-40}, {33,570,-90}, {33,603,-50}, {33,604,-50}, + {33,609,-50}, {33,615,-50}, {33,624,-50}, {33,658,-80}, + {33,668,-60}, {33,686,-110}, {33,687,-110}, {33,692,-110}, + {33,3816,-30}, {33,3817,-30}, {33,3824,-30}, {33,3831,-30}, + {33,3839,-30}, {33,3902,-40}, {33,3951,-30}, {33,4031,-30}, + {33,4034,-30}, {33,4050,-30}, {43,64,-40}, {43,70,-40}, + {43,203,-50}, {43,393,-40}, {43,396,-40}, {43,404,-40}, + {43,414,-40}, {43,419,-40}, {43,449,-40}, {43,455,-40}, + {43,474,-40}, {43,570,-90}, {43,603,-50}, {43,604,-50}, + {43,609,-50}, {43,615,-50}, {43,624,-50}, {43,658,-80}, + {43,668,-60}, {43,686,-110}, {43,687,-110}, {43,692,-110}, + {43,3816,-30}, {43,3817,-30}, {43,3824,-30}, {43,3831,-30}, + {43,3839,-30}, {43,3902,-40}, {43,3951,-30}, {43,4031,-30}, + {43,4034,-30}, {43,4050,-30}, {48,64,-40}, {48,70,-40}, + {48,203,-50}, {48,393,-40}, {48,396,-40}, {48,404,-40}, + {48,414,-40}, {48,419,-40}, {48,449,-40}, {48,455,-40}, + {48,474,-40}, {48,570,-90}, {48,603,-50}, {48,604,-50}, + {48,609,-50}, {48,615,-50}, {48,624,-50}, {48,658,-80}, + {48,668,-60}, {48,686,-110}, {48,687,-110}, {48,692,-110}, + {48,3816,-30}, {48,3817,-30}, {48,3824,-30}, {48,3831,-30}, + {48,3839,-30}, {48,3902,-40}, {48,3951,-30}, {48,4031,-30}, + {48,4034,-30}, {48,4050,-30}, {51,0,-30}, {51,5,-30}, {51,16,-30}, + {51,27,-30}, {51,33,-30}, {51,43,-30}, {51,48,-30}, {51,603,-10}, + {51,604,-10}, {51,609,-10}, {51,615,-10}, {51,624,-10}, {93,0,-40}, + {93,5,-40}, {93,16,-40}, {93,27,-40}, {93,33,-40}, {93,43,-40}, + {93,48,-40}, {93,658,-40}, {93,668,-40}, {93,686,-70}, + {93,687,-70}, {93,692,-70}, {93,1409,-30}, {93,2995,-30}, + {192,0,-80}, {192,5,-80}, {192,16,-80}, {192,27,-80}, {192,33,-80}, + {192,43,-80}, {192,48,-80}, {192,734,-20}, {192,736,-20}, + {192,758,-20}, {192,775,-20}, {192,1030,-20}, {192,1111,-20}, + {192,1173,-20}, {192,1409,-100}, {192,2995,-100}, {301,0,-20}, + {301,5,-20}, {301,16,-20}, {301,27,-20}, {301,33,-20}, + {301,43,-20}, {301,48,-20}, {301,1409,-20}, {301,2995,-20}, + {301,3816,-20}, {301,3817,-20}, {301,3824,-20}, {301,3831,-20}, + {301,3839,-20}, {309,393,-30}, {309,396,-30}, {309,404,-30}, + {309,414,-30}, {309,419,-30}, {309,449,-30}, {309,455,-30}, + {309,1630,-15}, {309,1631,-15}, {309,1645,-15}, {309,1655,-15}, + {309,1662,-15}, {309,2794,-35}, {309,2795,-35}, {309,2809,-35}, + {309,2819,-35}, {309,2826,-35}, {309,2899,-35}, {309,2907,-35}, + {309,3816,-30}, {309,3817,-30}, {309,3824,-30}, {309,3831,-30}, + {309,3839,-30}, {309,4031,-40}, {309,4034,-40}, {309,4050,-40}, + {337,570,-90}, {337,658,-110}, {337,668,-80}, {337,686,-120}, + {337,687,-120}, {337,692,-120}, {337,3139,-140}, {337,3143,-140}, + {337,4031,-30}, {337,4034,-30}, {337,4050,-30}, {356,570,-90}, + {356,658,-110}, {356,668,-80}, {356,686,-120}, {356,687,-120}, + {356,692,-120}, {356,3139,-140}, {356,3143,-140}, {356,4031,-30}, + {356,4034,-30}, {356,4050,-30}, {393,0,-50}, {393,5,-50}, + {393,16,-50}, {393,27,-50}, {393,33,-50}, {393,43,-50}, + {393,48,-50}, {393,570,-40}, {393,658,-50}, {393,668,-50}, + {393,678,-50}, {393,686,-70}, {393,687,-70}, {393,692,-70}, + {393,1409,-40}, {393,2995,-40}, {396,0,-50}, {396,5,-50}, + {396,16,-50}, {396,27,-50}, {396,33,-50}, {396,43,-50}, + {396,48,-50}, {396,570,-40}, {396,658,-50}, {396,668,-50}, + {396,678,-50}, {396,686,-70}, {396,687,-70}, {396,692,-70}, + {396,1409,-40}, {396,2995,-40}, {404,0,-50}, {404,5,-50}, + {404,16,-50}, {404,27,-50}, {404,33,-50}, {404,43,-50}, + {404,48,-50}, {404,570,-40}, {404,658,-50}, {404,668,-50}, + {404,678,-50}, {404,686,-70}, {404,687,-70}, {404,692,-70}, + {404,1409,-40}, {404,2995,-40}, {414,0,-50}, {414,5,-50}, + {414,16,-50}, {414,27,-50}, {414,33,-50}, {414,43,-50}, + {414,48,-50}, {414,570,-40}, {414,658,-50}, {414,668,-50}, + {414,678,-50}, {414,686,-70}, {414,687,-70}, {414,692,-70}, + {414,1409,-40}, {414,2995,-40}, {419,0,-50}, {419,5,-50}, + {419,16,-50}, {419,27,-50}, {419,33,-50}, {419,43,-50}, + {419,48,-50}, {419,570,-40}, {419,658,-50}, {419,668,-50}, + {419,678,-50}, {419,686,-70}, {419,687,-70}, {419,692,-70}, + {419,1409,-40}, {419,2995,-40}, {449,0,-50}, {449,5,-50}, + {449,16,-50}, {449,27,-50}, {449,33,-50}, {449,43,-50}, + {449,48,-50}, {449,570,-40}, {449,658,-50}, {449,668,-50}, + {449,678,-50}, {449,686,-70}, {449,687,-70}, {449,692,-70}, + {449,1409,-40}, {449,2995,-40}, {455,0,-50}, {455,5,-50}, + {455,16,-50}, {455,27,-50}, {455,33,-50}, {455,43,-50}, + {455,48,-50}, {455,570,-40}, {455,658,-50}, {455,668,-50}, + {455,678,-50}, {455,686,-70}, {455,687,-70}, {455,692,-70}, + {455,1409,-40}, {455,2995,-40}, {459,0,-100}, {459,5,-100}, + {459,16,-100}, {459,27,-100}, {459,33,-100}, {459,43,-100}, + {459,48,-100}, {459,734,-30}, {459,736,-30}, {459,758,-30}, + {459,775,-30}, {459,1030,-30}, {459,1111,-30}, {459,1173,-30}, + {459,1409,-120}, {459,1630,-30}, {459,1631,-30}, {459,1645,-30}, + {459,1655,-30}, {459,1662,-30}, {459,2794,-40}, {459,2795,-40}, + {459,2809,-40}, {459,2819,-40}, {459,2826,-40}, {459,2899,-40}, + {459,2907,-40}, {459,2995,-120}, {474,603,-10}, {474,604,-10}, + {474,609,-10}, {474,615,-10}, {474,624,-10}, {474,1409,20}, + {474,2995,20}, {478,393,-20}, {478,396,-20}, {478,404,-20}, + {478,414,-20}, {478,419,-20}, {478,449,-20}, {478,455,-20}, + {478,570,-20}, {478,603,-20}, {478,604,-20}, {478,609,-20}, + {478,615,-20}, {478,624,-20}, {478,658,-50}, {478,668,-40}, + {478,686,-50}, {478,687,-50}, {478,692,-50}, {570,0,-90}, + {570,5,-90}, {570,16,-90}, {570,27,-90}, {570,33,-90}, + {570,43,-90}, {570,48,-90}, {570,393,-40}, {570,396,-40}, + {570,404,-40}, {570,414,-40}, {570,419,-40}, {570,449,-40}, + {570,455,-40}, {570,734,-80}, {570,736,-80}, {570,758,-80}, + {570,775,-80}, {570,1030,-80}, {570,1111,-80}, {570,1173,-80}, + {570,1402,-40}, {570,1409,-80}, {570,1630,-60}, {570,1631,-60}, + {570,1645,-60}, {570,1655,-60}, {570,1662,-60}, {570,2126,-120}, + {570,2794,-80}, {570,2795,-80}, {570,2809,-80}, {570,2819,-80}, + {570,2826,-80}, {570,2899,-80}, {570,2907,-80}, {570,2995,-80}, + {570,3148,-80}, {570,3351,-40}, {570,3816,-90}, {570,3817,-90}, + {570,3824,-90}, {570,3831,-90}, {570,3839,-90}, {570,3951,-60}, + {570,4031,-60}, {570,4034,-60}, {570,4050,-60}, {603,0,-50}, + {603,5,-50}, {603,16,-50}, {603,27,-50}, {603,33,-50}, + {603,43,-50}, {603,48,-50}, {603,1409,-30}, {603,2995,-30}, + {604,0,-50}, {604,5,-50}, {604,16,-50}, {604,27,-50}, {604,33,-50}, + {604,43,-50}, {604,48,-50}, {604,1409,-30}, {604,2995,-30}, + {609,0,-50}, {609,5,-50}, {609,16,-50}, {609,27,-50}, {609,33,-50}, + {609,43,-50}, {609,48,-50}, {609,1409,-30}, {609,2995,-30}, + {615,0,-50}, {615,5,-50}, {615,16,-50}, {615,27,-50}, {615,33,-50}, + {615,43,-50}, {615,48,-50}, {615,1409,-30}, {615,2995,-30}, + {624,0,-50}, {624,5,-50}, {624,16,-50}, {624,27,-50}, {624,33,-50}, + {624,43,-50}, {624,48,-50}, {624,1409,-30}, {624,2995,-30}, + {658,0,-80}, {658,5,-80}, {658,16,-80}, {658,27,-80}, {658,33,-80}, + {658,43,-80}, {658,48,-80}, {658,203,-50}, {658,393,-50}, + {658,396,-50}, {658,404,-50}, {658,414,-50}, {658,419,-50}, + {658,449,-50}, {658,455,-50}, {658,734,-60}, {658,736,-60}, + {658,758,-60}, {658,775,-60}, {658,1030,-60}, {658,1111,-60}, + {658,1173,-60}, {658,1402,-40}, {658,1409,-120}, {658,1630,-50}, + {658,1631,-50}, {658,1645,-50}, {658,1655,-50}, {658,1662,-50}, + {658,2126,-80}, {658,2794,-90}, {658,2795,-90}, {658,2809,-90}, + {658,2819,-90}, {658,2826,-90}, {658,2899,-90}, {658,2907,-90}, + {658,2995,-120}, {658,3351,-40}, {658,3816,-60}, {658,3817,-60}, + {658,3824,-60}, {658,3831,-60}, {658,3839,-60}, {668,0,-60}, + {668,5,-60}, {668,16,-60}, {668,27,-60}, {668,33,-60}, + {668,43,-60}, {668,48,-60}, {668,393,-20}, {668,396,-20}, + {668,404,-20}, {668,414,-20}, {668,419,-20}, {668,449,-20}, + {668,455,-20}, {668,734,-40}, {668,736,-40}, {668,758,-40}, + {668,775,-40}, {668,1030,-40}, {668,1111,-40}, {668,1173,-40}, + {668,1402,-10}, {668,1409,-80}, {668,1630,-35}, {668,1631,-35}, + {668,1645,-35}, {668,1655,-35}, {668,1662,-35}, {668,2126,-40}, + {668,2794,-60}, {668,2795,-60}, {668,2809,-60}, {668,2819,-60}, + {668,2826,-60}, {668,2899,-60}, {668,2907,-60}, {668,2995,-80}, + {668,3351,-10}, {668,3816,-45}, {668,3817,-45}, {668,3824,-45}, + {668,3831,-45}, {668,3839,-45}, {668,4031,-20}, {668,4034,-20}, + {668,4050,-20}, {686,0,-110}, {686,5,-110}, {686,16,-110}, + {686,27,-110}, {686,33,-110}, {686,43,-110}, {686,48,-110}, + {686,393,-70}, {686,396,-70}, {686,404,-70}, {686,414,-70}, + {686,419,-70}, {686,449,-70}, {686,455,-70}, {686,734,-90}, + {686,736,-90}, {686,758,-90}, {686,775,-90}, {686,1030,-90}, + {686,1111,-90}, {686,1173,-90}, {686,1402,-50}, {686,1409,-100}, + {686,1630,-80}, {686,1631,-80}, {686,1645,-80}, {686,1655,-80}, + {686,1662,-80}, {686,2794,-100}, {686,2795,-100}, {686,2809,-100}, + {686,2819,-100}, {686,2826,-100}, {686,2899,-100}, {686,2907,-100}, + {686,2995,-100}, {686,3351,-50}, {686,3816,-100}, {686,3817,-100}, + {686,3824,-100}, {686,3831,-100}, {686,3839,-100}, {687,0,-110}, + {687,5,-110}, {687,16,-110}, {687,27,-110}, {687,33,-110}, + {687,43,-110}, {687,48,-110}, {687,393,-70}, {687,396,-70}, + {687,404,-70}, {687,414,-70}, {687,419,-70}, {687,449,-70}, + {687,455,-70}, {687,734,-90}, {687,736,-90}, {687,758,-90}, + {687,775,-90}, {687,1030,-90}, {687,1111,-90}, {687,1173,-90}, + {687,1402,-50}, {687,1409,-100}, {687,1630,-80}, {687,1631,-80}, + {687,1645,-80}, {687,1655,-80}, {687,1662,-80}, {687,2794,-100}, + {687,2795,-100}, {687,2809,-100}, {687,2819,-100}, {687,2826,-100}, + {687,2899,-100}, {687,2907,-100}, {687,2995,-100}, {687,3351,-50}, + {687,3816,-100}, {687,3817,-100}, {687,3824,-100}, {687,3831,-100}, + {687,3839,-100}, {692,0,-110}, {692,5,-110}, {692,16,-110}, + {692,27,-110}, {692,33,-110}, {692,43,-110}, {692,48,-110}, + {692,393,-70}, {692,396,-70}, {692,404,-70}, {692,414,-70}, + {692,419,-70}, {692,449,-70}, {692,455,-70}, {692,734,-90}, + {692,736,-90}, {692,758,-90}, {692,775,-90}, {692,1030,-90}, + {692,1111,-90}, {692,1173,-90}, {692,1402,-50}, {692,1409,-100}, + {692,1630,-80}, {692,1631,-80}, {692,1645,-80}, {692,1655,-80}, + {692,1662,-80}, {692,2794,-100}, {692,2795,-100}, {692,2809,-100}, + {692,2819,-100}, {692,2826,-100}, {692,2899,-100}, {692,2907,-100}, + {692,2995,-100}, {692,3351,-50}, {692,3816,-100}, {692,3817,-100}, + {692,3824,-100}, {692,3831,-100}, {692,3839,-100}, {734,1886,-10}, + {734,3902,-15}, {734,3951,-15}, {734,4031,-20}, {734,4034,-20}, + {734,4050,-20}, {736,1886,-10}, {736,3902,-15}, {736,3951,-15}, + {736,4031,-20}, {736,4034,-20}, {736,4050,-20}, {758,1886,-10}, + {758,3902,-15}, {758,3951,-15}, {758,4031,-20}, {758,4034,-20}, + {758,4050,-20}, {775,1886,-10}, {775,3902,-15}, {775,3951,-15}, + {775,4031,-20}, {775,4034,-20}, {775,4050,-20}, {1030,1886,-10}, + {1030,3902,-15}, {1030,3951,-15}, {1030,4031,-20}, {1030,4034,-20}, + {1030,4050,-20}, {1111,1886,-10}, {1111,3902,-15}, {1111,3951,-15}, + {1111,4031,-20}, {1111,4034,-20}, {1111,4050,-20}, {1173,1886,-10}, + {1173,3902,-15}, {1173,3951,-15}, {1173,4031,-20}, {1173,4034,-20}, + {1173,4050,-20}, {1192,2416,-10}, {1192,2501,-10}, {1192,3816,-20}, + {1192,3817,-20}, {1192,3824,-20}, {1192,3831,-20}, {1192,3839,-20}, + {1192,3902,-20}, {1192,4031,-20}, {1192,4034,-20}, {1192,4050,-20}, + {1312,1988,-10}, {1312,2302,-20}, {1312,2416,-20}, {1312,2501,-20}, + {1312,4031,-10}, {1312,4034,-10}, {1312,4050,-10}, {1332,1988,-10}, + {1332,2302,-20}, {1332,2416,-20}, {1332,2501,-20}, {1332,4031,-10}, + {1332,4034,-10}, {1332,4050,-10}, {1402,3498,-40}, + {1409,3139,-120}, {1409,3143,-120}, {1409,3498,-40}, + {1481,1481,-10}, {1481,3902,-15}, {1481,3951,-15}, {1481,4031,-15}, + {1481,4034,-15}, {1481,4050,-15}, {1630,1409,10}, {1630,2995,20}, + {1630,3902,-15}, {1630,3951,-15}, {1630,4020,-15}, {1630,4031,-15}, + {1630,4034,-15}, {1630,4050,-15}, {1631,1409,10}, {1631,2995,20}, + {1631,3902,-15}, {1631,3951,-15}, {1631,4020,-15}, {1631,4031,-15}, + {1631,4034,-15}, {1631,4050,-15}, {1645,1409,10}, {1645,2995,20}, + {1645,3902,-15}, {1645,3951,-15}, {1645,4020,-15}, {1645,4031,-15}, + {1645,4034,-15}, {1645,4050,-15}, {1655,1409,10}, {1655,2995,20}, + {1655,3902,-15}, {1655,3951,-15}, {1655,4020,-15}, {1655,4031,-15}, + {1655,4034,-15}, {1655,4050,-15}, {1662,1409,10}, {1662,2995,20}, + {1662,3902,-15}, {1662,3951,-15}, {1662,4020,-15}, {1662,4031,-15}, + {1662,4034,-15}, {1662,4050,-15}, {1787,1409,-10}, {1787,1630,-10}, + {1787,1631,-10}, {1787,1645,-10}, {1787,1655,-10}, {1787,1662,-10}, + {1787,2794,-20}, {1787,2795,-20}, {1787,2809,-20}, {1787,2819,-20}, + {1787,2826,-20}, {1787,2899,-20}, {1787,2907,-20}, {1787,2995,-10}, + {1787,3139,30}, {1787,3143,30}, {1886,1630,10}, {1886,1631,10}, + {1886,1645,10}, {1886,1655,10}, {1886,1662,10}, {1886,1886,-10}, + {1988,4031,-20}, {1988,4034,-20}, {1988,4050,-20}, {2302,2794,-15}, + {2302,2795,-15}, {2302,2809,-15}, {2302,2819,-15}, {2302,2826,-15}, + {2302,2899,-15}, {2302,2907,-15}, {2416,3951,-15}, {2416,4031,-15}, + {2416,4034,-15}, {2416,4050,-15}, {2501,3951,-15}, {2501,4031,-15}, + {2501,4034,-15}, {2501,4050,-15}, {2511,3816,-20}, {2511,3817,-20}, + {2511,3824,-20}, {2511,3831,-20}, {2511,3839,-20}, {2511,4031,-30}, + {2511,4034,-30}, {2511,4050,-30}, {2648,3816,-10}, {2648,3817,-10}, + {2648,3824,-10}, {2648,3831,-10}, {2648,3839,-10}, {2648,3902,-40}, + {2648,4031,-20}, {2648,4034,-20}, {2648,4050,-20}, {2769,3816,-10}, + {2769,3817,-10}, {2769,3824,-10}, {2769,3831,-10}, {2769,3839,-10}, + {2769,3902,-40}, {2769,4031,-20}, {2769,4034,-20}, {2769,4050,-20}, + {2794,3902,-20}, {2794,3951,-15}, {2794,4020,-30}, {2794,4031,-20}, + {2794,4034,-20}, {2794,4050,-20}, {2795,3902,-20}, {2795,3951,-15}, + {2795,4020,-30}, {2795,4031,-20}, {2795,4034,-20}, {2795,4050,-20}, + {2809,3902,-20}, {2809,3951,-15}, {2809,4020,-30}, {2809,4031,-20}, + {2809,4034,-20}, {2809,4050,-20}, {2819,3902,-20}, {2819,3951,-15}, + {2819,4020,-30}, {2819,4031,-20}, {2819,4034,-20}, {2819,4050,-20}, + {2826,3902,-20}, {2826,3951,-15}, {2826,4020,-30}, {2826,4031,-20}, + {2826,4034,-20}, {2826,4050,-20}, {2899,3902,-20}, {2899,3951,-15}, + {2899,4020,-30}, {2899,4031,-20}, {2899,4034,-20}, {2899,4050,-20}, + {2907,3902,-20}, {2907,3951,-15}, {2907,4020,-30}, {2907,4031,-20}, + {2907,4034,-20}, {2907,4050,-20}, {2921,4031,-15}, {2921,4034,-15}, + {2921,4050,-15}, {2995,3139,-120}, {2995,3143,-120}, + {2995,3498,-40}, {3139,3498,-80}, {3140,3140,-46}, {3143,1481,-80}, + {3143,2416,-20}, {3143,2501,-20}, {3143,3143,-46}, {3143,3148,-40}, + {3143,3279,-60}, {3143,3317,-60}, {3143,3498,-80}, {3143,3902,-20}, + {3148,1312,-20}, {3148,1332,-20}, {3148,1409,-60}, {3148,1481,-20}, + {3148,1886,-15}, {3148,2126,-20}, {3148,2794,-20}, {3148,2795,-20}, + {3148,2809,-20}, {3148,2819,-20}, {3148,2826,-20}, {3148,2899,-20}, + {3148,2907,-20}, {3148,2995,-60}, {3148,3083,-20}, {3148,3279,-15}, + {3148,3317,-15}, {3148,3556,20}, {3148,3902,10}, {3148,4031,10}, + {3148,4034,10}, {3148,4050,10}, {3279,3951,-15}, {3317,3951,-15}, + {3351,3498,-40}, {3498,570,-100}, {3498,658,-80}, {3498,668,-80}, + {3498,686,-120}, {3498,687,-120}, {3498,692,-120}, {3498,3135,-80}, + {3498,3140,-60}, {3902,734,-20}, {3902,736,-20}, {3902,758,-20}, + {3902,775,-20}, {3902,1030,-20}, {3902,1111,-20}, {3902,1173,-20}, + {3902,1409,-80}, {3902,2794,-30}, {3902,2795,-30}, {3902,2809,-30}, + {3902,2819,-30}, {3902,2826,-30}, {3902,2899,-30}, {3902,2907,-30}, + {3902,2995,-80}, {3951,1409,-40}, {3951,2794,-20}, {3951,2795,-20}, + {3951,2809,-20}, {3951,2819,-20}, {3951,2826,-20}, {3951,2899,-20}, + {3951,2907,-20}, {3951,2995,-40}, {4020,1630,-10}, {4020,1631,-10}, + {4020,1645,-10}, {4020,1655,-10}, {4020,1662,-10}, {4031,734,-30}, + {4031,736,-30}, {4031,758,-30}, {4031,775,-30}, {4031,1030,-30}, + {4031,1111,-30}, {4031,1173,-30}, {4031,1409,-80}, {4031,1630,-10}, + {4031,1631,-10}, {4031,1645,-10}, {4031,1655,-10}, {4031,1662,-10}, + {4031,2794,-25}, {4031,2795,-25}, {4031,2809,-25}, {4031,2819,-25}, + {4031,2826,-25}, {4031,2899,-25}, {4031,2907,-25}, {4031,2995,-80}, + {4034,734,-30}, {4034,736,-30}, {4034,758,-30}, {4034,775,-30}, + {4034,1030,-30}, {4034,1111,-30}, {4034,1173,-30}, {4034,1409,-80}, + {4034,1630,-10}, {4034,1631,-10}, {4034,1645,-10}, {4034,1655,-10}, + {4034,1662,-10}, {4034,2794,-25}, {4034,2795,-25}, {4034,2809,-25}, + {4034,2819,-25}, {4034,2826,-25}, {4034,2899,-25}, {4034,2907,-25}, + {4034,2995,-80}, {4050,734,-30}, {4050,736,-30}, {4050,758,-30}, + {4050,775,-30}, {4050,1030,-30}, {4050,1111,-30}, {4050,1173,-30}, + {4050,1409,-80}, {4050,1630,-10}, {4050,1631,-10}, {4050,1645,-10}, + {4050,1655,-10}, {4050,1662,-10}, {4050,2794,-25}, {4050,2795,-25}, + {4050,2809,-25}, {4050,2819,-25}, {4050,2826,-25}, {4050,2899,-25}, + {4050,2907,-25}, {4050,2995,-80}, {4132,1630,10}, {4132,1631,10}, + {4132,1645,10}, {4132,1655,10}, {4132,1662,10}, {4153,1630,10}, + {4153,1631,10}, {4153,1645,10}, {4153,1655,10}, {4153,1662,10}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature helvetica_bold_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair helvetica_boldoblique_kerns[] = { + {0,64,-40}, {0,70,-40}, {0,203,-50}, {0,393,-40}, {0,396,-40}, + {0,404,-40}, {0,414,-40}, {0,419,-40}, {0,449,-40}, {0,455,-40}, + {0,474,-40}, {0,570,-90}, {0,603,-50}, {0,604,-50}, {0,609,-50}, + {0,615,-50}, {0,624,-50}, {0,658,-80}, {0,668,-60}, {0,686,-110}, + {0,687,-110}, {0,692,-110}, {0,3816,-30}, {0,3817,-30}, + {0,3824,-30}, {0,3831,-30}, {0,3839,-30}, {0,3902,-40}, + {0,3951,-30}, {0,4031,-30}, {0,4034,-30}, {0,4050,-30}, {5,64,-40}, + {5,70,-40}, {5,203,-50}, {5,393,-40}, {5,396,-40}, {5,404,-40}, + {5,414,-40}, {5,419,-40}, {5,449,-40}, {5,455,-40}, {5,474,-40}, + {5,570,-90}, {5,603,-50}, {5,604,-50}, {5,609,-50}, {5,615,-50}, + {5,624,-50}, {5,658,-80}, {5,668,-60}, {5,686,-110}, {5,687,-110}, + {5,692,-110}, {5,3816,-30}, {5,3817,-30}, {5,3824,-30}, + {5,3831,-30}, {5,3839,-30}, {5,3902,-40}, {5,3951,-30}, + {5,4031,-30}, {5,4034,-30}, {5,4050,-30}, {16,64,-40}, {16,70,-40}, + {16,203,-50}, {16,393,-40}, {16,396,-40}, {16,404,-40}, + {16,414,-40}, {16,419,-40}, {16,449,-40}, {16,455,-40}, + {16,474,-40}, {16,570,-90}, {16,603,-50}, {16,604,-50}, + {16,609,-50}, {16,615,-50}, {16,624,-50}, {16,658,-80}, + {16,668,-60}, {16,686,-110}, {16,687,-110}, {16,692,-110}, + {16,3816,-30}, {16,3817,-30}, {16,3824,-30}, {16,3831,-30}, + {16,3839,-30}, {16,3902,-40}, {16,3951,-30}, {16,4031,-30}, + {16,4034,-30}, {16,4050,-30}, {27,64,-40}, {27,70,-40}, + {27,203,-50}, {27,393,-40}, {27,396,-40}, {27,404,-40}, + {27,414,-40}, {27,419,-40}, {27,449,-40}, {27,455,-40}, + {27,474,-40}, {27,570,-90}, {27,603,-50}, {27,604,-50}, + {27,609,-50}, {27,615,-50}, {27,624,-50}, {27,658,-80}, + {27,668,-60}, {27,686,-110}, {27,687,-110}, {27,692,-110}, + {27,3816,-30}, {27,3817,-30}, {27,3824,-30}, {27,3831,-30}, + {27,3839,-30}, {27,3902,-40}, {27,3951,-30}, {27,4031,-30}, + {27,4034,-30}, {27,4050,-30}, {33,64,-40}, {33,70,-40}, + {33,203,-50}, {33,393,-40}, {33,396,-40}, {33,404,-40}, + {33,414,-40}, {33,419,-40}, {33,449,-40}, {33,455,-40}, + {33,474,-40}, {33,570,-90}, {33,603,-50}, {33,604,-50}, + {33,609,-50}, {33,615,-50}, {33,624,-50}, {33,658,-80}, + {33,668,-60}, {33,686,-110}, {33,687,-110}, {33,692,-110}, + {33,3816,-30}, {33,3817,-30}, {33,3824,-30}, {33,3831,-30}, + {33,3839,-30}, {33,3902,-40}, {33,3951,-30}, {33,4031,-30}, + {33,4034,-30}, {33,4050,-30}, {43,64,-40}, {43,70,-40}, + {43,203,-50}, {43,393,-40}, {43,396,-40}, {43,404,-40}, + {43,414,-40}, {43,419,-40}, {43,449,-40}, {43,455,-40}, + {43,474,-40}, {43,570,-90}, {43,603,-50}, {43,604,-50}, + {43,609,-50}, {43,615,-50}, {43,624,-50}, {43,658,-80}, + {43,668,-60}, {43,686,-110}, {43,687,-110}, {43,692,-110}, + {43,3816,-30}, {43,3817,-30}, {43,3824,-30}, {43,3831,-30}, + {43,3839,-30}, {43,3902,-40}, {43,3951,-30}, {43,4031,-30}, + {43,4034,-30}, {43,4050,-30}, {48,64,-40}, {48,70,-40}, + {48,203,-50}, {48,393,-40}, {48,396,-40}, {48,404,-40}, + {48,414,-40}, {48,419,-40}, {48,449,-40}, {48,455,-40}, + {48,474,-40}, {48,570,-90}, {48,603,-50}, {48,604,-50}, + {48,609,-50}, {48,615,-50}, {48,624,-50}, {48,658,-80}, + {48,668,-60}, {48,686,-110}, {48,687,-110}, {48,692,-110}, + {48,3816,-30}, {48,3817,-30}, {48,3824,-30}, {48,3831,-30}, + {48,3839,-30}, {48,3902,-40}, {48,3951,-30}, {48,4031,-30}, + {48,4034,-30}, {48,4050,-30}, {51,0,-30}, {51,5,-30}, {51,16,-30}, + {51,27,-30}, {51,33,-30}, {51,43,-30}, {51,48,-30}, {51,603,-10}, + {51,604,-10}, {51,609,-10}, {51,615,-10}, {51,624,-10}, {93,0,-40}, + {93,5,-40}, {93,16,-40}, {93,27,-40}, {93,33,-40}, {93,43,-40}, + {93,48,-40}, {93,658,-40}, {93,668,-40}, {93,686,-70}, + {93,687,-70}, {93,692,-70}, {93,1409,-30}, {93,2995,-30}, + {192,0,-80}, {192,5,-80}, {192,16,-80}, {192,27,-80}, {192,33,-80}, + {192,43,-80}, {192,48,-80}, {192,734,-20}, {192,736,-20}, + {192,758,-20}, {192,775,-20}, {192,1030,-20}, {192,1111,-20}, + {192,1173,-20}, {192,1409,-100}, {192,2995,-100}, {301,0,-20}, + {301,5,-20}, {301,16,-20}, {301,27,-20}, {301,33,-20}, + {301,43,-20}, {301,48,-20}, {301,1409,-20}, {301,2995,-20}, + {301,3816,-20}, {301,3817,-20}, {301,3824,-20}, {301,3831,-20}, + {301,3839,-20}, {309,393,-30}, {309,396,-30}, {309,404,-30}, + {309,414,-30}, {309,419,-30}, {309,449,-30}, {309,455,-30}, + {309,1630,-15}, {309,1631,-15}, {309,1645,-15}, {309,1655,-15}, + {309,1662,-15}, {309,2794,-35}, {309,2795,-35}, {309,2809,-35}, + {309,2819,-35}, {309,2826,-35}, {309,2899,-35}, {309,2907,-35}, + {309,3816,-30}, {309,3817,-30}, {309,3824,-30}, {309,3831,-30}, + {309,3839,-30}, {309,4031,-40}, {309,4034,-40}, {309,4050,-40}, + {337,570,-90}, {337,658,-110}, {337,668,-80}, {337,686,-120}, + {337,687,-120}, {337,692,-120}, {337,3139,-140}, {337,3143,-140}, + {337,4031,-30}, {337,4034,-30}, {337,4050,-30}, {356,570,-90}, + {356,658,-110}, {356,668,-80}, {356,686,-120}, {356,687,-120}, + {356,692,-120}, {356,3139,-140}, {356,3143,-140}, {356,4031,-30}, + {356,4034,-30}, {356,4050,-30}, {393,0,-50}, {393,5,-50}, + {393,16,-50}, {393,27,-50}, {393,33,-50}, {393,43,-50}, + {393,48,-50}, {393,570,-40}, {393,658,-50}, {393,668,-50}, + {393,678,-50}, {393,686,-70}, {393,687,-70}, {393,692,-70}, + {393,1409,-40}, {393,2995,-40}, {396,0,-50}, {396,5,-50}, + {396,16,-50}, {396,27,-50}, {396,33,-50}, {396,43,-50}, + {396,48,-50}, {396,570,-40}, {396,658,-50}, {396,668,-50}, + {396,678,-50}, {396,686,-70}, {396,687,-70}, {396,692,-70}, + {396,1409,-40}, {396,2995,-40}, {404,0,-50}, {404,5,-50}, + {404,16,-50}, {404,27,-50}, {404,33,-50}, {404,43,-50}, + {404,48,-50}, {404,570,-40}, {404,658,-50}, {404,668,-50}, + {404,678,-50}, {404,686,-70}, {404,687,-70}, {404,692,-70}, + {404,1409,-40}, {404,2995,-40}, {414,0,-50}, {414,5,-50}, + {414,16,-50}, {414,27,-50}, {414,33,-50}, {414,43,-50}, + {414,48,-50}, {414,570,-40}, {414,658,-50}, {414,668,-50}, + {414,678,-50}, {414,686,-70}, {414,687,-70}, {414,692,-70}, + {414,1409,-40}, {414,2995,-40}, {419,0,-50}, {419,5,-50}, + {419,16,-50}, {419,27,-50}, {419,33,-50}, {419,43,-50}, + {419,48,-50}, {419,570,-40}, {419,658,-50}, {419,668,-50}, + {419,678,-50}, {419,686,-70}, {419,687,-70}, {419,692,-70}, + {419,1409,-40}, {419,2995,-40}, {449,0,-50}, {449,5,-50}, + {449,16,-50}, {449,27,-50}, {449,33,-50}, {449,43,-50}, + {449,48,-50}, {449,570,-40}, {449,658,-50}, {449,668,-50}, + {449,678,-50}, {449,686,-70}, {449,687,-70}, {449,692,-70}, + {449,1409,-40}, {449,2995,-40}, {455,0,-50}, {455,5,-50}, + {455,16,-50}, {455,27,-50}, {455,33,-50}, {455,43,-50}, + {455,48,-50}, {455,570,-40}, {455,658,-50}, {455,668,-50}, + {455,678,-50}, {455,686,-70}, {455,687,-70}, {455,692,-70}, + {455,1409,-40}, {455,2995,-40}, {459,0,-100}, {459,5,-100}, + {459,16,-100}, {459,27,-100}, {459,33,-100}, {459,43,-100}, + {459,48,-100}, {459,734,-30}, {459,736,-30}, {459,758,-30}, + {459,775,-30}, {459,1030,-30}, {459,1111,-30}, {459,1173,-30}, + {459,1409,-120}, {459,1630,-30}, {459,1631,-30}, {459,1645,-30}, + {459,1655,-30}, {459,1662,-30}, {459,2794,-40}, {459,2795,-40}, + {459,2809,-40}, {459,2819,-40}, {459,2826,-40}, {459,2899,-40}, + {459,2907,-40}, {459,2995,-120}, {474,603,-10}, {474,604,-10}, + {474,609,-10}, {474,615,-10}, {474,624,-10}, {474,1409,20}, + {474,2995,20}, {478,393,-20}, {478,396,-20}, {478,404,-20}, + {478,414,-20}, {478,419,-20}, {478,449,-20}, {478,455,-20}, + {478,570,-20}, {478,603,-20}, {478,604,-20}, {478,609,-20}, + {478,615,-20}, {478,624,-20}, {478,658,-50}, {478,668,-40}, + {478,686,-50}, {478,687,-50}, {478,692,-50}, {570,0,-90}, + {570,5,-90}, {570,16,-90}, {570,27,-90}, {570,33,-90}, + {570,43,-90}, {570,48,-90}, {570,393,-40}, {570,396,-40}, + {570,404,-40}, {570,414,-40}, {570,419,-40}, {570,449,-40}, + {570,455,-40}, {570,734,-80}, {570,736,-80}, {570,758,-80}, + {570,775,-80}, {570,1030,-80}, {570,1111,-80}, {570,1173,-80}, + {570,1402,-40}, {570,1409,-80}, {570,1630,-60}, {570,1631,-60}, + {570,1645,-60}, {570,1655,-60}, {570,1662,-60}, {570,2126,-120}, + {570,2794,-80}, {570,2795,-80}, {570,2809,-80}, {570,2819,-80}, + {570,2826,-80}, {570,2899,-80}, {570,2907,-80}, {570,2995,-80}, + {570,3148,-80}, {570,3351,-40}, {570,3816,-90}, {570,3817,-90}, + {570,3824,-90}, {570,3831,-90}, {570,3839,-90}, {570,3951,-60}, + {570,4031,-60}, {570,4034,-60}, {570,4050,-60}, {603,0,-50}, + {603,5,-50}, {603,16,-50}, {603,27,-50}, {603,33,-50}, + {603,43,-50}, {603,48,-50}, {603,1409,-30}, {603,2995,-30}, + {604,0,-50}, {604,5,-50}, {604,16,-50}, {604,27,-50}, {604,33,-50}, + {604,43,-50}, {604,48,-50}, {604,1409,-30}, {604,2995,-30}, + {609,0,-50}, {609,5,-50}, {609,16,-50}, {609,27,-50}, {609,33,-50}, + {609,43,-50}, {609,48,-50}, {609,1409,-30}, {609,2995,-30}, + {615,0,-50}, {615,5,-50}, {615,16,-50}, {615,27,-50}, {615,33,-50}, + {615,43,-50}, {615,48,-50}, {615,1409,-30}, {615,2995,-30}, + {624,0,-50}, {624,5,-50}, {624,16,-50}, {624,27,-50}, {624,33,-50}, + {624,43,-50}, {624,48,-50}, {624,1409,-30}, {624,2995,-30}, + {658,0,-80}, {658,5,-80}, {658,16,-80}, {658,27,-80}, {658,33,-80}, + {658,43,-80}, {658,48,-80}, {658,203,-50}, {658,393,-50}, + {658,396,-50}, {658,404,-50}, {658,414,-50}, {658,419,-50}, + {658,449,-50}, {658,455,-50}, {658,734,-60}, {658,736,-60}, + {658,758,-60}, {658,775,-60}, {658,1030,-60}, {658,1111,-60}, + {658,1173,-60}, {658,1402,-40}, {658,1409,-120}, {658,1630,-50}, + {658,1631,-50}, {658,1645,-50}, {658,1655,-50}, {658,1662,-50}, + {658,2126,-80}, {658,2794,-90}, {658,2795,-90}, {658,2809,-90}, + {658,2819,-90}, {658,2826,-90}, {658,2899,-90}, {658,2907,-90}, + {658,2995,-120}, {658,3351,-40}, {658,3816,-60}, {658,3817,-60}, + {658,3824,-60}, {658,3831,-60}, {658,3839,-60}, {668,0,-60}, + {668,5,-60}, {668,16,-60}, {668,27,-60}, {668,33,-60}, + {668,43,-60}, {668,48,-60}, {668,393,-20}, {668,396,-20}, + {668,404,-20}, {668,414,-20}, {668,419,-20}, {668,449,-20}, + {668,455,-20}, {668,734,-40}, {668,736,-40}, {668,758,-40}, + {668,775,-40}, {668,1030,-40}, {668,1111,-40}, {668,1173,-40}, + {668,1402,-10}, {668,1409,-80}, {668,1630,-35}, {668,1631,-35}, + {668,1645,-35}, {668,1655,-35}, {668,1662,-35}, {668,2126,-40}, + {668,2794,-60}, {668,2795,-60}, {668,2809,-60}, {668,2819,-60}, + {668,2826,-60}, {668,2899,-60}, {668,2907,-60}, {668,2995,-80}, + {668,3351,-10}, {668,3816,-45}, {668,3817,-45}, {668,3824,-45}, + {668,3831,-45}, {668,3839,-45}, {668,4031,-20}, {668,4034,-20}, + {668,4050,-20}, {686,0,-110}, {686,5,-110}, {686,16,-110}, + {686,27,-110}, {686,33,-110}, {686,43,-110}, {686,48,-110}, + {686,393,-70}, {686,396,-70}, {686,404,-70}, {686,414,-70}, + {686,419,-70}, {686,449,-70}, {686,455,-70}, {686,734,-90}, + {686,736,-90}, {686,758,-90}, {686,775,-90}, {686,1030,-90}, + {686,1111,-90}, {686,1173,-90}, {686,1402,-50}, {686,1409,-100}, + {686,1630,-80}, {686,1631,-80}, {686,1645,-80}, {686,1655,-80}, + {686,1662,-80}, {686,2794,-100}, {686,2795,-100}, {686,2809,-100}, + {686,2819,-100}, {686,2826,-100}, {686,2899,-100}, {686,2907,-100}, + {686,2995,-100}, {686,3351,-50}, {686,3816,-100}, {686,3817,-100}, + {686,3824,-100}, {686,3831,-100}, {686,3839,-100}, {687,0,-110}, + {687,5,-110}, {687,16,-110}, {687,27,-110}, {687,33,-110}, + {687,43,-110}, {687,48,-110}, {687,393,-70}, {687,396,-70}, + {687,404,-70}, {687,414,-70}, {687,419,-70}, {687,449,-70}, + {687,455,-70}, {687,734,-90}, {687,736,-90}, {687,758,-90}, + {687,775,-90}, {687,1030,-90}, {687,1111,-90}, {687,1173,-90}, + {687,1402,-50}, {687,1409,-100}, {687,1630,-80}, {687,1631,-80}, + {687,1645,-80}, {687,1655,-80}, {687,1662,-80}, {687,2794,-100}, + {687,2795,-100}, {687,2809,-100}, {687,2819,-100}, {687,2826,-100}, + {687,2899,-100}, {687,2907,-100}, {687,2995,-100}, {687,3351,-50}, + {687,3816,-100}, {687,3817,-100}, {687,3824,-100}, {687,3831,-100}, + {687,3839,-100}, {692,0,-110}, {692,5,-110}, {692,16,-110}, + {692,27,-110}, {692,33,-110}, {692,43,-110}, {692,48,-110}, + {692,393,-70}, {692,396,-70}, {692,404,-70}, {692,414,-70}, + {692,419,-70}, {692,449,-70}, {692,455,-70}, {692,734,-90}, + {692,736,-90}, {692,758,-90}, {692,775,-90}, {692,1030,-90}, + {692,1111,-90}, {692,1173,-90}, {692,1402,-50}, {692,1409,-100}, + {692,1630,-80}, {692,1631,-80}, {692,1645,-80}, {692,1655,-80}, + {692,1662,-80}, {692,2794,-100}, {692,2795,-100}, {692,2809,-100}, + {692,2819,-100}, {692,2826,-100}, {692,2899,-100}, {692,2907,-100}, + {692,2995,-100}, {692,3351,-50}, {692,3816,-100}, {692,3817,-100}, + {692,3824,-100}, {692,3831,-100}, {692,3839,-100}, {734,1886,-10}, + {734,3902,-15}, {734,3951,-15}, {734,4031,-20}, {734,4034,-20}, + {734,4050,-20}, {736,1886,-10}, {736,3902,-15}, {736,3951,-15}, + {736,4031,-20}, {736,4034,-20}, {736,4050,-20}, {758,1886,-10}, + {758,3902,-15}, {758,3951,-15}, {758,4031,-20}, {758,4034,-20}, + {758,4050,-20}, {775,1886,-10}, {775,3902,-15}, {775,3951,-15}, + {775,4031,-20}, {775,4034,-20}, {775,4050,-20}, {1030,1886,-10}, + {1030,3902,-15}, {1030,3951,-15}, {1030,4031,-20}, {1030,4034,-20}, + {1030,4050,-20}, {1111,1886,-10}, {1111,3902,-15}, {1111,3951,-15}, + {1111,4031,-20}, {1111,4034,-20}, {1111,4050,-20}, {1173,1886,-10}, + {1173,3902,-15}, {1173,3951,-15}, {1173,4031,-20}, {1173,4034,-20}, + {1173,4050,-20}, {1192,2416,-10}, {1192,2501,-10}, {1192,3816,-20}, + {1192,3817,-20}, {1192,3824,-20}, {1192,3831,-20}, {1192,3839,-20}, + {1192,3902,-20}, {1192,4031,-20}, {1192,4034,-20}, {1192,4050,-20}, + {1312,1988,-10}, {1312,2302,-20}, {1312,2416,-20}, {1312,2501,-20}, + {1312,4031,-10}, {1312,4034,-10}, {1312,4050,-10}, {1332,1988,-10}, + {1332,2302,-20}, {1332,2416,-20}, {1332,2501,-20}, {1332,4031,-10}, + {1332,4034,-10}, {1332,4050,-10}, {1402,3498,-40}, + {1409,3139,-120}, {1409,3143,-120}, {1409,3498,-40}, + {1481,1481,-10}, {1481,3902,-15}, {1481,3951,-15}, {1481,4031,-15}, + {1481,4034,-15}, {1481,4050,-15}, {1630,1409,10}, {1630,2995,20}, + {1630,3902,-15}, {1630,3951,-15}, {1630,4020,-15}, {1630,4031,-15}, + {1630,4034,-15}, {1630,4050,-15}, {1631,1409,10}, {1631,2995,20}, + {1631,3902,-15}, {1631,3951,-15}, {1631,4020,-15}, {1631,4031,-15}, + {1631,4034,-15}, {1631,4050,-15}, {1645,1409,10}, {1645,2995,20}, + {1645,3902,-15}, {1645,3951,-15}, {1645,4020,-15}, {1645,4031,-15}, + {1645,4034,-15}, {1645,4050,-15}, {1655,1409,10}, {1655,2995,20}, + {1655,3902,-15}, {1655,3951,-15}, {1655,4020,-15}, {1655,4031,-15}, + {1655,4034,-15}, {1655,4050,-15}, {1662,1409,10}, {1662,2995,20}, + {1662,3902,-15}, {1662,3951,-15}, {1662,4020,-15}, {1662,4031,-15}, + {1662,4034,-15}, {1662,4050,-15}, {1787,1409,-10}, {1787,1630,-10}, + {1787,1631,-10}, {1787,1645,-10}, {1787,1655,-10}, {1787,1662,-10}, + {1787,2794,-20}, {1787,2795,-20}, {1787,2809,-20}, {1787,2819,-20}, + {1787,2826,-20}, {1787,2899,-20}, {1787,2907,-20}, {1787,2995,-10}, + {1787,3139,30}, {1787,3143,30}, {1886,1630,10}, {1886,1631,10}, + {1886,1645,10}, {1886,1655,10}, {1886,1662,10}, {1886,1886,-10}, + {1988,4031,-20}, {1988,4034,-20}, {1988,4050,-20}, {2302,2794,-15}, + {2302,2795,-15}, {2302,2809,-15}, {2302,2819,-15}, {2302,2826,-15}, + {2302,2899,-15}, {2302,2907,-15}, {2416,3951,-15}, {2416,4031,-15}, + {2416,4034,-15}, {2416,4050,-15}, {2501,3951,-15}, {2501,4031,-15}, + {2501,4034,-15}, {2501,4050,-15}, {2511,3816,-20}, {2511,3817,-20}, + {2511,3824,-20}, {2511,3831,-20}, {2511,3839,-20}, {2511,4031,-30}, + {2511,4034,-30}, {2511,4050,-30}, {2648,3816,-10}, {2648,3817,-10}, + {2648,3824,-10}, {2648,3831,-10}, {2648,3839,-10}, {2648,3902,-40}, + {2648,4031,-20}, {2648,4034,-20}, {2648,4050,-20}, {2769,3816,-10}, + {2769,3817,-10}, {2769,3824,-10}, {2769,3831,-10}, {2769,3839,-10}, + {2769,3902,-40}, {2769,4031,-20}, {2769,4034,-20}, {2769,4050,-20}, + {2794,3902,-20}, {2794,3951,-15}, {2794,4020,-30}, {2794,4031,-20}, + {2794,4034,-20}, {2794,4050,-20}, {2795,3902,-20}, {2795,3951,-15}, + {2795,4020,-30}, {2795,4031,-20}, {2795,4034,-20}, {2795,4050,-20}, + {2809,3902,-20}, {2809,3951,-15}, {2809,4020,-30}, {2809,4031,-20}, + {2809,4034,-20}, {2809,4050,-20}, {2819,3902,-20}, {2819,3951,-15}, + {2819,4020,-30}, {2819,4031,-20}, {2819,4034,-20}, {2819,4050,-20}, + {2826,3902,-20}, {2826,3951,-15}, {2826,4020,-30}, {2826,4031,-20}, + {2826,4034,-20}, {2826,4050,-20}, {2899,3902,-20}, {2899,3951,-15}, + {2899,4020,-30}, {2899,4031,-20}, {2899,4034,-20}, {2899,4050,-20}, + {2907,3902,-20}, {2907,3951,-15}, {2907,4020,-30}, {2907,4031,-20}, + {2907,4034,-20}, {2907,4050,-20}, {2921,4031,-15}, {2921,4034,-15}, + {2921,4050,-15}, {2995,3139,-120}, {2995,3143,-120}, + {2995,3498,-40}, {3139,3498,-80}, {3140,3140,-46}, {3143,1481,-80}, + {3143,2416,-20}, {3143,2501,-20}, {3143,3143,-46}, {3143,3148,-40}, + {3143,3279,-60}, {3143,3317,-60}, {3143,3498,-80}, {3143,3902,-20}, + {3148,1312,-20}, {3148,1332,-20}, {3148,1409,-60}, {3148,1481,-20}, + {3148,1886,-15}, {3148,2126,-20}, {3148,2794,-20}, {3148,2795,-20}, + {3148,2809,-20}, {3148,2819,-20}, {3148,2826,-20}, {3148,2899,-20}, + {3148,2907,-20}, {3148,2995,-60}, {3148,3083,-20}, {3148,3279,-15}, + {3148,3317,-15}, {3148,3556,20}, {3148,3902,10}, {3148,4031,10}, + {3148,4034,10}, {3148,4050,10}, {3279,3951,-15}, {3317,3951,-15}, + {3351,3498,-40}, {3498,570,-100}, {3498,658,-80}, {3498,668,-80}, + {3498,686,-120}, {3498,687,-120}, {3498,692,-120}, {3498,3135,-80}, + {3498,3140,-60}, {3902,734,-20}, {3902,736,-20}, {3902,758,-20}, + {3902,775,-20}, {3902,1030,-20}, {3902,1111,-20}, {3902,1173,-20}, + {3902,1409,-80}, {3902,2794,-30}, {3902,2795,-30}, {3902,2809,-30}, + {3902,2819,-30}, {3902,2826,-30}, {3902,2899,-30}, {3902,2907,-30}, + {3902,2995,-80}, {3951,1409,-40}, {3951,2794,-20}, {3951,2795,-20}, + {3951,2809,-20}, {3951,2819,-20}, {3951,2826,-20}, {3951,2899,-20}, + {3951,2907,-20}, {3951,2995,-40}, {4020,1630,-10}, {4020,1631,-10}, + {4020,1645,-10}, {4020,1655,-10}, {4020,1662,-10}, {4031,734,-30}, + {4031,736,-30}, {4031,758,-30}, {4031,775,-30}, {4031,1030,-30}, + {4031,1111,-30}, {4031,1173,-30}, {4031,1409,-80}, {4031,1630,-10}, + {4031,1631,-10}, {4031,1645,-10}, {4031,1655,-10}, {4031,1662,-10}, + {4031,2794,-25}, {4031,2795,-25}, {4031,2809,-25}, {4031,2819,-25}, + {4031,2826,-25}, {4031,2899,-25}, {4031,2907,-25}, {4031,2995,-80}, + {4034,734,-30}, {4034,736,-30}, {4034,758,-30}, {4034,775,-30}, + {4034,1030,-30}, {4034,1111,-30}, {4034,1173,-30}, {4034,1409,-80}, + {4034,1630,-10}, {4034,1631,-10}, {4034,1645,-10}, {4034,1655,-10}, + {4034,1662,-10}, {4034,2794,-25}, {4034,2795,-25}, {4034,2809,-25}, + {4034,2819,-25}, {4034,2826,-25}, {4034,2899,-25}, {4034,2907,-25}, + {4034,2995,-80}, {4050,734,-30}, {4050,736,-30}, {4050,758,-30}, + {4050,775,-30}, {4050,1030,-30}, {4050,1111,-30}, {4050,1173,-30}, + {4050,1409,-80}, {4050,1630,-10}, {4050,1631,-10}, {4050,1645,-10}, + {4050,1655,-10}, {4050,1662,-10}, {4050,2794,-25}, {4050,2795,-25}, + {4050,2809,-25}, {4050,2819,-25}, {4050,2826,-25}, {4050,2899,-25}, + {4050,2907,-25}, {4050,2995,-80}, {4132,1630,10}, {4132,1631,10}, + {4132,1645,10}, {4132,1655,10}, {4132,1662,10}, {4153,1630,10}, + {4153,1631,10}, {4153,1645,10}, {4153,1655,10}, {4153,1662,10}, + {NOGLYPH,NOGLYPH,0} +}; +static const ligature helvetica_boldoblique_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair courier_kerns[] = { + + {NOGLYPH,NOGLYPH,0} +}; +static const ligature courier_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair courier_oblique_kerns[] = { + + {NOGLYPH,NOGLYPH,0} +}; +static const ligature courier_oblique_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair courier_bold_kerns[] = { + + {NOGLYPH,NOGLYPH,0} +}; +static const ligature courier_bold_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; +static const kern_pair courier_boldoblique_kerns[] = { + + {NOGLYPH,NOGLYPH,0} +}; +static const ligature courier_boldoblique_ligs[] = { + {1787,2132,1807}, {1787,2416,1850}, + {NOGLYPH,NOGLYPH,NOGLYPH} +}; + +static const struct ps_std_font_data { + char const *name; + kern_pair const *kerns; + ligature const *ligs; + int widths[lenof(ps_std_glyphs)-1]; +} ps_std_fonts[] = { + { "Times-Roman", + times_roman_kerns, times_roman_ligs, { + 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889, + 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, + 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778, + 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, + 889, 722, 722, 722, 722, 722, 722, 667, 611, 611, 611, 611, 722, + 333, 333, 333, 333, 611, 722, 889, 722, 722, 722, 722, 722, 722, + 556, 556, 722, 722, 722, 722, 722, 722, 611, 667, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 500, 278, 278, 278, 278, + 278, 500, 722, 500, 500, 500, 500, 500, 500, 389, 500, 500, 500, + 500, 500, 500, 500, 444, 333, 778, 469, 541, 500, 921, 278, 200, + 480, 480, 333, 333, 333, 200, 350, 333, 333, 500, 333, 278, 250, + 760, 500, 500, 500, 400, 333, 564, 500, 333, 278, 500, 1000, 1000, + 500, 564, 333, 333, 556, 500, 556, 500, 500, 167, 500, 333, 564, + 500, 500, 333, 333, 333, 333, 564, 564, 333, 564, 500, 564, 500, + 500, 333, 500, 750, 750, 300, 276, 310, 453, 333, 333, 833, 250, + 250, 1000, 564, 564, 444, 444, 408, 444, 444, 444, 333, 333, 333, + 180, 760, 333, 500, 278, 500, 500, 278, 250, 500, 500, 750, 300, + 333, 980, 500, 300, 500, 500, 500, + }}, + { "Times-Italic", + times_italic_kerns, times_italic_ligs, { + 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833, + 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, + 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722, + 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, + 889, 611, 611, 611, 611, 611, 611, 667, 611, 611, 611, 611, 722, + 333, 333, 333, 333, 556, 667, 944, 722, 722, 722, 722, 722, 722, + 500, 611, 722, 722, 722, 722, 556, 556, 556, 667, 500, 500, 500, + 500, 500, 500, 444, 444, 444, 444, 444, 500, 278, 278, 278, 278, + 278, 500, 667, 500, 500, 500, 500, 500, 500, 389, 500, 500, 500, + 500, 500, 444, 444, 389, 333, 778, 422, 541, 500, 920, 278, 275, + 400, 400, 389, 389, 333, 275, 350, 333, 333, 500, 333, 333, 250, + 760, 500, 500, 500, 400, 333, 675, 500, 333, 278, 500, 889, 889, + 500, 675, 333, 389, 500, 500, 500, 500, 500, 167, 500, 333, 675, + 500, 500, 333, 333, 333, 333, 675, 675, 333, 675, 500, 675, 500, + 500, 333, 500, 750, 750, 300, 276, 310, 523, 333, 333, 833, 250, + 250, 1000, 675, 675, 500, 500, 420, 556, 556, 556, 333, 333, 333, + 214, 760, 333, 500, 333, 500, 500, 278, 250, 500, 500, 750, 300, + 333, 980, 500, 300, 500, 500, 500, + }}, + { "Times-Bold", + times_bold_kerns, times_bold_ligs, { + 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944, + 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, + 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833, + 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, + 1000, 722, 722, 722, 722, 722, 722, 722, 667, 667, 667, 667, 722, + 389, 389, 389, 389, 667, 722, 1000, 778, 778, 778, 778, 778, 778, + 556, 611, 722, 722, 722, 722, 722, 722, 667, 722, 500, 500, 500, + 500, 500, 500, 444, 444, 444, 444, 444, 500, 278, 278, 278, 278, + 278, 556, 722, 500, 500, 500, 500, 500, 500, 389, 556, 556, 556, + 556, 556, 500, 500, 444, 333, 833, 581, 520, 500, 930, 278, 220, + 394, 394, 333, 333, 333, 220, 350, 333, 333, 500, 333, 333, 250, + 747, 500, 500, 500, 400, 333, 570, 500, 333, 278, 500, 1000, 1000, + 500, 570, 333, 333, 556, 500, 556, 500, 500, 167, 556, 333, 570, + 500, 500, 333, 333, 333, 333, 570, 570, 333, 570, 556, 570, 500, + 500, 333, 500, 750, 750, 300, 300, 330, 540, 333, 333, 1000, 250, + 250, 1000, 570, 570, 500, 500, 555, 500, 500, 500, 333, 333, 333, + 278, 747, 333, 500, 333, 500, 500, 278, 250, 500, 500, 750, 300, + 333, 1000, 500, 300, 500, 500, 500, + }}, + { "Times-BoldItalic", + times_bolditalic_kerns, times_bolditalic_ligs, { + 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889, + 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, + 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778, + 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, + 944, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 722, + 389, 389, 389, 389, 611, 722, 944, 722, 722, 722, 722, 722, 722, + 556, 611, 722, 722, 722, 722, 611, 611, 611, 722, 500, 500, 500, + 500, 500, 500, 444, 444, 444, 444, 444, 500, 278, 278, 278, 278, + 278, 556, 722, 500, 500, 500, 500, 500, 500, 389, 500, 556, 556, + 556, 556, 444, 444, 389, 333, 778, 570, 570, 500, 832, 278, 220, + 348, 348, 333, 333, 333, 220, 350, 333, 333, 500, 333, 333, 250, + 747, 500, 500, 500, 400, 333, 570, 500, 333, 278, 500, 1000, 1000, + 500, 570, 389, 389, 556, 500, 556, 500, 500, 167, 500, 333, 570, + 500, 500, 333, 333, 333, 333, 570, 606, 333, 606, 576, 570, 500, + 500, 333, 500, 750, 750, 300, 266, 300, 500, 333, 333, 833, 250, + 250, 1000, 570, 570, 500, 500, 555, 500, 500, 500, 333, 333, 333, + 278, 747, 333, 500, 333, 500, 500, 278, 250, 500, 500, 750, 300, + 333, 1000, 500, 300, 500, 500, 500, + }}, + { "Helvetica", + helvetica_kerns, helvetica_ligs, { + 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, + 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, + 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, + 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, + 1000, 667, 667, 667, 667, 667, 667, 722, 667, 667, 667, 667, 722, + 278, 278, 278, 278, 556, 722, 1000, 778, 778, 778, 778, 778, 778, + 667, 667, 722, 722, 722, 722, 667, 667, 611, 889, 556, 556, 556, + 556, 556, 556, 500, 556, 556, 556, 556, 556, 278, 278, 278, 278, + 222, 556, 944, 556, 556, 556, 556, 611, 556, 500, 556, 556, 556, + 556, 556, 500, 500, 500, 333, 667, 469, 584, 389, 1015, 278, 260, + 334, 334, 278, 278, 333, 260, 350, 333, 333, 556, 333, 278, 278, + 737, 556, 556, 556, 400, 333, 584, 556, 333, 278, 556, 1000, 1000, + 556, 584, 278, 333, 500, 556, 500, 556, 556, 167, 611, 333, 584, + 556, 556, 333, 333, 333, 333, 584, 584, 333, 584, 556, 584, 556, + 556, 333, 556, 834, 834, 333, 370, 365, 537, 333, 333, 889, 278, + 278, 1000, 584, 584, 556, 611, 355, 333, 333, 333, 222, 222, 222, + 191, 737, 333, 556, 278, 556, 556, 278, 278, 556, 556, 834, 333, + 333, 1000, 556, 333, 556, 556, 556, + }}, + { "Helvetica-Oblique", + helvetica_oblique_kerns, helvetica_oblique_ligs, { + 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, + 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, + 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, + 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, + 1000, 667, 667, 667, 667, 667, 667, 722, 667, 667, 667, 667, 722, + 278, 278, 278, 278, 556, 722, 1000, 778, 778, 778, 778, 778, 778, + 667, 667, 722, 722, 722, 722, 667, 667, 611, 889, 556, 556, 556, + 556, 556, 556, 500, 556, 556, 556, 556, 556, 278, 278, 278, 278, + 222, 556, 944, 556, 556, 556, 556, 611, 556, 500, 556, 556, 556, + 556, 556, 500, 500, 500, 333, 667, 469, 584, 389, 1015, 278, 260, + 334, 334, 278, 278, 333, 260, 350, 333, 333, 556, 333, 278, 278, + 737, 556, 556, 556, 400, 333, 584, 556, 333, 278, 556, 1000, 1000, + 556, 584, 278, 333, 500, 556, 500, 556, 556, 167, 611, 333, 584, + 556, 556, 333, 333, 333, 333, 584, 584, 333, 584, 556, 584, 556, + 556, 333, 556, 834, 834, 333, 370, 365, 537, 333, 333, 889, 278, + 278, 1000, 584, 584, 556, 611, 355, 333, 333, 333, 222, 222, 222, + 191, 737, 333, 556, 278, 556, 556, 278, 278, 556, 556, 834, 333, + 333, 1000, 556, 333, 556, 556, 556, + }}, + { "Helvetica-Bold", + helvetica_bold_kerns, helvetica_bold_ligs, { + 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, + 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, + 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, + 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, + 1000, 722, 722, 722, 722, 722, 722, 722, 667, 667, 667, 667, 722, + 278, 278, 278, 278, 611, 722, 1000, 778, 778, 778, 778, 778, 778, + 667, 667, 722, 722, 722, 722, 667, 667, 611, 889, 556, 556, 556, + 556, 556, 556, 556, 556, 556, 556, 556, 611, 278, 278, 278, 278, + 278, 611, 944, 611, 611, 611, 611, 611, 611, 556, 611, 611, 611, + 611, 611, 556, 556, 500, 333, 722, 584, 584, 389, 975, 278, 280, + 389, 389, 333, 333, 333, 280, 350, 333, 333, 556, 333, 333, 278, + 737, 556, 556, 556, 400, 333, 584, 556, 333, 278, 556, 1000, 1000, + 556, 584, 333, 333, 611, 556, 611, 556, 556, 167, 611, 333, 584, + 556, 556, 333, 333, 333, 333, 584, 584, 333, 584, 611, 584, 556, + 556, 333, 556, 834, 834, 333, 370, 365, 556, 333, 333, 889, 278, + 278, 1000, 584, 584, 611, 611, 474, 500, 500, 500, 278, 278, 278, + 238, 737, 333, 556, 333, 556, 556, 278, 278, 556, 556, 834, 333, + 333, 1000, 556, 333, 556, 556, 556, + }}, + { "Helvetica-BoldOblique", + helvetica_boldoblique_kerns, helvetica_boldoblique_ligs, { + 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, + 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, + 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, + 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, + 1000, 722, 722, 722, 722, 722, 722, 722, 667, 667, 667, 667, 722, + 278, 278, 278, 278, 611, 722, 1000, 778, 778, 778, 778, 778, 778, + 667, 667, 722, 722, 722, 722, 667, 667, 611, 889, 556, 556, 556, + 556, 556, 556, 556, 556, 556, 556, 556, 611, 278, 278, 278, 278, + 278, 611, 944, 611, 611, 611, 611, 611, 611, 556, 611, 611, 611, + 611, 611, 556, 556, 500, 333, 722, 584, 584, 389, 975, 278, 280, + 389, 389, 333, 333, 333, 280, 350, 333, 333, 556, 333, 333, 278, + 737, 556, 556, 556, 400, 333, 584, 556, 333, 278, 556, 1000, 1000, + 556, 584, 333, 333, 611, 556, 611, 556, 556, 167, 611, 333, 584, + 556, 556, 333, 333, 333, 333, 584, 584, 333, 584, 611, 584, 556, + 556, 333, 556, 834, 834, 333, 370, 365, 556, 333, 333, 889, 278, + 278, 1000, 584, 584, 611, 611, 474, 500, 500, 500, 278, 278, 278, + 238, 737, 333, 556, 333, 556, 556, 278, 278, 556, 556, 834, 333, + 333, 1000, 556, 333, 556, 556, 556, + }}, + { "Courier", + courier_kerns, courier_ligs, { + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, + }}, + { "Courier-Oblique", + courier_oblique_kerns, courier_oblique_ligs, { + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, + }}, + { "Courier-Bold", + courier_bold_kerns, courier_bold_ligs, { + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, + }}, + { "Courier-BoldOblique", + courier_boldoblique_kerns, courier_boldoblique_ligs, { + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 600, 600, 600, 600, 600, + }}, +}; + +void init_std_fonts(void) { + int i, j; + ligature const *lig; + kern_pair const *kern; + static int done = FALSE; + + if (done) return; + for (i = 0; i < (int)lenof(ps_std_fonts); i++) { + font_info *fi = snew(font_info); + fi->fontfile = NULL; + fi->name = ps_std_fonts[i].name; + fi->widths = newtree234(width_cmp); + for (j = 0; j < (int)lenof(fi->bmp); j++) + fi->bmp[j] = NOGLYPH; + for (j = 0; j < (int)lenof(ps_std_glyphs) - 1; j++) { + glyph_width *w = snew(glyph_width); + wchar_t ucs; + w->glyph = glyph_intern(ps_std_glyphs[j]); + w->width = ps_std_fonts[i].widths[j]; + add234(fi->widths, w); + ucs = ps_glyph_to_unicode(w->glyph); + assert(ucs != 0xFFFF); + fi->bmp[ucs] = w->glyph; + } + fi->kerns = newtree234(kern_cmp); + for (kern = ps_std_fonts[i].kerns; kern->left != NOGLYPH; kern++) + add234(fi->kerns, (void *)kern); + fi->ligs = newtree234(lig_cmp); + for (lig = ps_std_fonts[i].ligs; lig->left != NOGLYPH; lig++) + add234(fi->ligs, (void *)lig); + fi->next = all_fonts; + all_fonts = fi; + } + done = TRUE; +} + +const int *ps_std_font_widths(char const *fontname) +{ + int i; + + for (i = 0; i < (int)lenof(ps_std_fonts); i++) + if (!strcmp(ps_std_fonts[i].name, fontname)) + return ps_std_fonts[i].widths; + + return NULL; +} + +const kern_pair *ps_std_font_kerns(char const *fontname) +{ + int i; + + for (i = 0; i < (int)lenof(ps_std_fonts); i++) + if (!strcmp(ps_std_fonts[i].name, fontname)) + return ps_std_fonts[i].kerns; + + return NULL; +} diff --git a/app/tools/halibut/tree234.c b/app/tools/halibut/tree234.c new file mode 100644 index 0000000..26d188e --- /dev/null +++ b/app/tools/halibut/tree234.c @@ -0,0 +1,2197 @@ +/* + * tree234.c: reasonably generic counted 2-3-4 tree routines. + * + * This file is copyright 1999-2001 Simon Tatham. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> + +#include "tree234.h" + +#define smalloc malloc +#define sfree free + +#define snew(typ) ( (typ *) smalloc (sizeof (typ)) ) + +#ifdef TEST +#define LOG(x) (printf x) +#else +#define LOG(x) +#endif + +typedef struct node234_Tag node234; + +struct tree234_Tag { + node234 *root; + cmpfn234 cmp; +}; + +struct node234_Tag { + node234 *parent; + node234 *kids[4]; + int counts[4]; + void *elems[3]; +}; + +/* + * Create a 2-3-4 tree. + */ +tree234 *newtree234(cmpfn234 cmp) { + tree234 *ret = snew(tree234); + LOG(("created tree %p\n", ret)); + ret->root = NULL; + ret->cmp = cmp; + return ret; +} + +/* + * Free a 2-3-4 tree (not including freeing the elements). + */ +static void freenode234(node234 *n) { + if (!n) + return; + freenode234(n->kids[0]); + freenode234(n->kids[1]); + freenode234(n->kids[2]); + freenode234(n->kids[3]); + sfree(n); +} +void freetree234(tree234 *t) { + freenode234(t->root); + sfree(t); +} + +/* + * Internal function to count a node. + */ +static int countnode234(node234 *n) { + int count = 0; + int i; + if (!n) + return 0; + for (i = 0; i < 4; i++) + count += n->counts[i]; + for (i = 0; i < 3; i++) + if (n->elems[i]) + count++; + return count; +} + +/* + * Count the elements in a tree. + */ +int count234(tree234 *t) { + if (t->root) + return countnode234(t->root); + else + return 0; +} + +/* + * Propagate a node overflow up a tree until it stops. Returns 0 or + * 1, depending on whether the root had to be split or not. + */ +static int add234_insert(node234 *left, void *e, node234 *right, + node234 **root, node234 *n, int ki) { + int lcount, rcount; + /* + * We need to insert the new left/element/right set in n at + * child position ki. + */ + lcount = countnode234(left); + rcount = countnode234(right); + while (n) { + LOG((" at %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" need to insert %p/%d \"%s\" %p/%d at position %d\n", + left, lcount, e, right, rcount, ki)); + if (n->elems[1] == NULL) { + /* + * Insert in a 2-node; simple. + */ + if (ki == 0) { + LOG((" inserting on left of 2-node\n")); + n->kids[2] = n->kids[1]; n->counts[2] = n->counts[1]; + n->elems[1] = n->elems[0]; + n->kids[1] = right; n->counts[1] = rcount; + n->elems[0] = e; + n->kids[0] = left; n->counts[0] = lcount; + } else { /* ki == 1 */ + LOG((" inserting on right of 2-node\n")); + n->kids[2] = right; n->counts[2] = rcount; + n->elems[1] = e; + n->kids[1] = left; n->counts[1] = lcount; + } + if (n->kids[0]) n->kids[0]->parent = n; + if (n->kids[1]) n->kids[1]->parent = n; + if (n->kids[2]) n->kids[2]->parent = n; + LOG((" done\n")); + break; + } else if (n->elems[2] == NULL) { + /* + * Insert in a 3-node; simple. + */ + if (ki == 0) { + LOG((" inserting on left of 3-node\n")); + n->kids[3] = n->kids[2]; n->counts[3] = n->counts[2]; + n->elems[2] = n->elems[1]; + n->kids[2] = n->kids[1]; n->counts[2] = n->counts[1]; + n->elems[1] = n->elems[0]; + n->kids[1] = right; n->counts[1] = rcount; + n->elems[0] = e; + n->kids[0] = left; n->counts[0] = lcount; + } else if (ki == 1) { + LOG((" inserting in middle of 3-node\n")); + n->kids[3] = n->kids[2]; n->counts[3] = n->counts[2]; + n->elems[2] = n->elems[1]; + n->kids[2] = right; n->counts[2] = rcount; + n->elems[1] = e; + n->kids[1] = left; n->counts[1] = lcount; + } else { /* ki == 2 */ + LOG((" inserting on right of 3-node\n")); + n->kids[3] = right; n->counts[3] = rcount; + n->elems[2] = e; + n->kids[2] = left; n->counts[2] = lcount; + } + if (n->kids[0]) n->kids[0]->parent = n; + if (n->kids[1]) n->kids[1]->parent = n; + if (n->kids[2]) n->kids[2]->parent = n; + if (n->kids[3]) n->kids[3]->parent = n; + LOG((" done\n")); + break; + } else { + node234 *m = snew(node234); + m->parent = n->parent; + LOG((" splitting a 4-node; created new node %p\n", m)); + /* + * Insert in a 4-node; split into a 2-node and a + * 3-node, and move focus up a level. + * + * I don't think it matters which way round we put the + * 2 and the 3. For simplicity, we'll put the 3 first + * always. + */ + if (ki == 0) { + m->kids[0] = left; m->counts[0] = lcount; + m->elems[0] = e; + m->kids[1] = right; m->counts[1] = rcount; + m->elems[1] = n->elems[0]; + m->kids[2] = n->kids[1]; m->counts[2] = n->counts[1]; + e = n->elems[1]; + n->kids[0] = n->kids[2]; n->counts[0] = n->counts[2]; + n->elems[0] = n->elems[2]; + n->kids[1] = n->kids[3]; n->counts[1] = n->counts[3]; + } else if (ki == 1) { + m->kids[0] = n->kids[0]; m->counts[0] = n->counts[0]; + m->elems[0] = n->elems[0]; + m->kids[1] = left; m->counts[1] = lcount; + m->elems[1] = e; + m->kids[2] = right; m->counts[2] = rcount; + e = n->elems[1]; + n->kids[0] = n->kids[2]; n->counts[0] = n->counts[2]; + n->elems[0] = n->elems[2]; + n->kids[1] = n->kids[3]; n->counts[1] = n->counts[3]; + } else if (ki == 2) { + m->kids[0] = n->kids[0]; m->counts[0] = n->counts[0]; + m->elems[0] = n->elems[0]; + m->kids[1] = n->kids[1]; m->counts[1] = n->counts[1]; + m->elems[1] = n->elems[1]; + m->kids[2] = left; m->counts[2] = lcount; + /* e = e; */ + n->kids[0] = right; n->counts[0] = rcount; + n->elems[0] = n->elems[2]; + n->kids[1] = n->kids[3]; n->counts[1] = n->counts[3]; + } else { /* ki == 3 */ + m->kids[0] = n->kids[0]; m->counts[0] = n->counts[0]; + m->elems[0] = n->elems[0]; + m->kids[1] = n->kids[1]; m->counts[1] = n->counts[1]; + m->elems[1] = n->elems[1]; + m->kids[2] = n->kids[2]; m->counts[2] = n->counts[2]; + n->kids[0] = left; n->counts[0] = lcount; + n->elems[0] = e; + n->kids[1] = right; n->counts[1] = rcount; + e = n->elems[2]; + } + m->kids[3] = n->kids[3] = n->kids[2] = NULL; + m->counts[3] = n->counts[3] = n->counts[2] = 0; + m->elems[2] = n->elems[2] = n->elems[1] = NULL; + if (m->kids[0]) m->kids[0]->parent = m; + if (m->kids[1]) m->kids[1]->parent = m; + if (m->kids[2]) m->kids[2]->parent = m; + if (n->kids[0]) n->kids[0]->parent = n; + if (n->kids[1]) n->kids[1]->parent = n; + LOG((" left (%p): %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", m, + m->kids[0], m->counts[0], m->elems[0], + m->kids[1], m->counts[1], m->elems[1], + m->kids[2], m->counts[2])); + LOG((" right (%p): %p/%d \"%s\" %p/%d\n", n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1])); + left = m; lcount = countnode234(left); + right = n; rcount = countnode234(right); + } + if (n->parent) + ki = (n->parent->kids[0] == n ? 0 : + n->parent->kids[1] == n ? 1 : + n->parent->kids[2] == n ? 2 : 3); + n = n->parent; + } + + /* + * If we've come out of here by `break', n will still be + * non-NULL and all we need to do is go back up the tree + * updating counts. If we've come here because n is NULL, we + * need to create a new root for the tree because the old one + * has just split into two. */ + if (n) { + while (n->parent) { + int count = countnode234(n); + int childnum; + childnum = (n->parent->kids[0] == n ? 0 : + n->parent->kids[1] == n ? 1 : + n->parent->kids[2] == n ? 2 : 3); + n->parent->counts[childnum] = count; + n = n->parent; + } + return 0; /* root unchanged */ + } else { + LOG((" root is overloaded, split into two\n")); + (*root) = snew(node234); + (*root)->kids[0] = left; (*root)->counts[0] = lcount; + (*root)->elems[0] = e; + (*root)->kids[1] = right; (*root)->counts[1] = rcount; + (*root)->elems[1] = NULL; + (*root)->kids[2] = NULL; (*root)->counts[2] = 0; + (*root)->elems[2] = NULL; + (*root)->kids[3] = NULL; (*root)->counts[3] = 0; + (*root)->parent = NULL; + if ((*root)->kids[0]) (*root)->kids[0]->parent = (*root); + if ((*root)->kids[1]) (*root)->kids[1]->parent = (*root); + LOG((" new root is %p/%d \"%s\" %p/%d\n", + (*root)->kids[0], (*root)->counts[0], + (*root)->elems[0], + (*root)->kids[1], (*root)->counts[1])); + return 1; /* root moved */ + } +} + +/* + * Add an element e to a 2-3-4 tree t. Returns e on success, or if + * an existing element compares equal, returns that. + */ +static void *add234_internal(tree234 *t, void *e, int index) { + node234 *n; + int ki; + void *orig_e = e; + int c; + + LOG(("adding element \"%s\" to tree %p\n", e, t)); + if (t->root == NULL) { + t->root = snew(node234); + t->root->elems[1] = t->root->elems[2] = NULL; + t->root->kids[0] = t->root->kids[1] = NULL; + t->root->kids[2] = t->root->kids[3] = NULL; + t->root->counts[0] = t->root->counts[1] = 0; + t->root->counts[2] = t->root->counts[3] = 0; + t->root->parent = NULL; + t->root->elems[0] = e; + LOG((" created root %p\n", t->root)); + return orig_e; + } + + n = t->root; + while (n) { + LOG((" node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + if (index >= 0) { + if (!n->kids[0]) { + /* + * Leaf node. We want to insert at kid position + * equal to the index: + * + * 0 A 1 B 2 C 3 + */ + ki = index; + } else { + /* + * Internal node. We always descend through it (add + * always starts at the bottom, never in the + * middle). + */ + if (index <= n->counts[0]) { + ki = 0; + } else if (index -= n->counts[0] + 1, index <= n->counts[1]) { + ki = 1; + } else if (index -= n->counts[1] + 1, index <= n->counts[2]) { + ki = 2; + } else if (index -= n->counts[2] + 1, index <= n->counts[3]) { + ki = 3; + } else + return NULL; /* error: index out of range */ + } + } else { + if ((c = t->cmp(e, n->elems[0])) < 0) + ki = 0; + else if (c == 0) + return n->elems[0]; /* already exists */ + else if (n->elems[1] == NULL || (c = t->cmp(e, n->elems[1])) < 0) + ki = 1; + else if (c == 0) + return n->elems[1]; /* already exists */ + else if (n->elems[2] == NULL || (c = t->cmp(e, n->elems[2])) < 0) + ki = 2; + else if (c == 0) + return n->elems[2]; /* already exists */ + else + ki = 3; + } + LOG((" moving to child %d (%p)\n", ki, n->kids[ki])); + if (!n->kids[ki]) + break; + n = n->kids[ki]; + } + + add234_insert(NULL, e, NULL, &t->root, n, ki); + + return orig_e; +} + +void *add234(tree234 *t, void *e) { + if (!t->cmp) /* tree is unsorted */ + return NULL; + + return add234_internal(t, e, -1); +} +void *addpos234(tree234 *t, void *e, int index) { + if (index < 0 || /* index out of range */ + t->cmp) /* tree is sorted */ + return NULL; /* return failure */ + + return add234_internal(t, e, index); /* this checks the upper bound */ +} + +/* + * Look up the element at a given numeric index in a 2-3-4 tree. + * Returns NULL if the index is out of range. + */ +void *index234(tree234 *t, int index) { + node234 *n; + + if (!t->root) + return NULL; /* tree is empty */ + + if (index < 0 || index >= countnode234(t->root)) + return NULL; /* out of range */ + + n = t->root; + + while (n) { + if (index < n->counts[0]) + n = n->kids[0]; + else if (index -= n->counts[0] + 1, index < 0) + return n->elems[0]; + else if (index < n->counts[1]) + n = n->kids[1]; + else if (index -= n->counts[1] + 1, index < 0) + return n->elems[1]; + else if (index < n->counts[2]) + n = n->kids[2]; + else if (index -= n->counts[2] + 1, index < 0) + return n->elems[2]; + else + n = n->kids[3]; + } + + /* We shouldn't ever get here. I wonder how we did. */ + return NULL; +} + +/* + * Find an element e in a sorted 2-3-4 tree t. Returns NULL if not + * found. e is always passed as the first argument to cmp, so cmp + * can be an asymmetric function if desired. cmp can also be passed + * as NULL, in which case the compare function from the tree proper + * will be used. + */ +void *findrelpos234(tree234 *t, void *e, cmpfn234 cmp, + int relation, int *index) { + node234 *n; + void *ret; + int c; + int idx, ecount, kcount, cmpret; + + if (t->root == NULL) + return NULL; + + if (cmp == NULL) + cmp = t->cmp; + + n = t->root; + /* + * Attempt to find the element itself. + */ + idx = 0; + ecount = -1; + /* + * Prepare a fake `cmp' result if e is NULL. + */ + cmpret = 0; + if (e == NULL) { + assert(relation == REL234_LT || relation == REL234_GT); + if (relation == REL234_LT) + cmpret = +1; /* e is a max: always greater */ + else if (relation == REL234_GT) + cmpret = -1; /* e is a min: always smaller */ + } + while (1) { + for (kcount = 0; kcount < 4; kcount++) { + if (kcount >= 3 || n->elems[kcount] == NULL || + (c = cmpret ? cmpret : cmp(e, n->elems[kcount])) < 0) { + break; + } + if (n->kids[kcount]) idx += n->counts[kcount]; + if (c == 0) { + ecount = kcount; + break; + } + idx++; + } + if (ecount >= 0) + break; + if (n->kids[kcount]) + n = n->kids[kcount]; + else + break; + } + + if (ecount >= 0) { + /* + * We have found the element we're looking for. It's + * n->elems[ecount], at tree index idx. If our search + * relation is EQ, LE or GE we can now go home. + */ + if (relation != REL234_LT && relation != REL234_GT) { + if (index) *index = idx; + return n->elems[ecount]; + } + + /* + * Otherwise, we'll do an indexed lookup for the previous + * or next element. (It would be perfectly possible to + * implement these search types in a non-counted tree by + * going back up from where we are, but far more fiddly.) + */ + if (relation == REL234_LT) + idx--; + else + idx++; + } else { + /* + * We've found our way to the bottom of the tree and we + * know where we would insert this node if we wanted to: + * we'd put it in in place of the (empty) subtree + * n->kids[kcount], and it would have index idx + * + * But the actual element isn't there. So if our search + * relation is EQ, we're doomed. + */ + if (relation == REL234_EQ) + return NULL; + + /* + * Otherwise, we must do an index lookup for index idx-1 + * (if we're going left - LE or LT) or index idx (if we're + * going right - GE or GT). + */ + if (relation == REL234_LT || relation == REL234_LE) { + idx--; + } + } + + /* + * We know the index of the element we want; just call index234 + * to do the rest. This will return NULL if the index is out of + * bounds, which is exactly what we want. + */ + ret = index234(t, idx); + if (ret && index) *index = idx; + return ret; +} +void *find234(tree234 *t, void *e, cmpfn234 cmp) { + return findrelpos234(t, e, cmp, REL234_EQ, NULL); +} +void *findrel234(tree234 *t, void *e, cmpfn234 cmp, int relation) { + return findrelpos234(t, e, cmp, relation, NULL); +} +void *findpos234(tree234 *t, void *e, cmpfn234 cmp, int *index) { + return findrelpos234(t, e, cmp, REL234_EQ, index); +} + +/* + * Tree transformation used in delete and split: move a subtree + * right, from child ki of a node to the next child. Update k and + * index so that they still point to the same place in the + * transformed tree. Assumes the destination child is not full, and + * that the source child does have a subtree to spare. Can cope if + * the destination child is undersized. + * + * . C . . B . + * / \ -> / \ + * [more] a A b B c d D e [more] a A b c C d D e + * + * . C . . B . + * / \ -> / \ + * [more] a A b B c d [more] a A b c C d + */ +static void trans234_subtree_right(node234 *n, int ki, int *k, int *index) { + node234 *src, *dest; + int i, srclen, adjust; + + src = n->kids[ki]; + dest = n->kids[ki+1]; + + LOG((" trans234_subtree_right(%p, %d):\n", n, ki)); + LOG((" parent %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" src %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + src, + src->kids[0], src->counts[0], src->elems[0], + src->kids[1], src->counts[1], src->elems[1], + src->kids[2], src->counts[2], src->elems[2], + src->kids[3], src->counts[3])); + LOG((" dest %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + dest, + dest->kids[0], dest->counts[0], dest->elems[0], + dest->kids[1], dest->counts[1], dest->elems[1], + dest->kids[2], dest->counts[2], dest->elems[2], + dest->kids[3], dest->counts[3])); + /* + * Move over the rest of the destination node to make space. + */ + dest->kids[3] = dest->kids[2]; dest->counts[3] = dest->counts[2]; + dest->elems[2] = dest->elems[1]; + dest->kids[2] = dest->kids[1]; dest->counts[2] = dest->counts[1]; + dest->elems[1] = dest->elems[0]; + dest->kids[1] = dest->kids[0]; dest->counts[1] = dest->counts[0]; + + /* which element to move over */ + i = (src->elems[2] ? 2 : src->elems[1] ? 1 : 0); + + dest->elems[0] = n->elems[ki]; + n->elems[ki] = src->elems[i]; + src->elems[i] = NULL; + + dest->kids[0] = src->kids[i+1]; dest->counts[0] = src->counts[i+1]; + src->kids[i+1] = NULL; src->counts[i+1] = 0; + + if (dest->kids[0]) dest->kids[0]->parent = dest; + + adjust = dest->counts[0] + 1; + + n->counts[ki] -= adjust; + n->counts[ki+1] += adjust; + + srclen = n->counts[ki]; + + if (k) { + LOG((" before: k,index = %d,%d\n", (*k), (*index))); + if ((*k) == ki && (*index) > srclen) { + (*index) -= srclen + 1; + (*k)++; + } else if ((*k) == ki+1) { + (*index) += adjust; + } + LOG((" after: k,index = %d,%d\n", (*k), (*index))); + } + + LOG((" parent %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" src %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + src, + src->kids[0], src->counts[0], src->elems[0], + src->kids[1], src->counts[1], src->elems[1], + src->kids[2], src->counts[2], src->elems[2], + src->kids[3], src->counts[3])); + LOG((" dest %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + dest, + dest->kids[0], dest->counts[0], dest->elems[0], + dest->kids[1], dest->counts[1], dest->elems[1], + dest->kids[2], dest->counts[2], dest->elems[2], + dest->kids[3], dest->counts[3])); +} + +/* + * Tree transformation used in delete and split: move a subtree + * left, from child ki of a node to the previous child. Update k + * and index so that they still point to the same place in the + * transformed tree. Assumes the destination child is not full, and + * that the source child does have a subtree to spare. Can cope if + * the destination child is undersized. + * + * . B . . C . + * / \ -> / \ + * a A b c C d D e [more] a A b B c d D e [more] + * + * . A . . B . + * / \ -> / \ + * a b B c C d [more] a A b c C d [more] + */ +static void trans234_subtree_left(node234 *n, int ki, int *k, int *index) { + node234 *src, *dest; + int i, adjust; + + src = n->kids[ki]; + dest = n->kids[ki-1]; + + LOG((" trans234_subtree_left(%p, %d):\n", n, ki)); + LOG((" parent %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" dest %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + dest, + dest->kids[0], dest->counts[0], dest->elems[0], + dest->kids[1], dest->counts[1], dest->elems[1], + dest->kids[2], dest->counts[2], dest->elems[2], + dest->kids[3], dest->counts[3])); + LOG((" src %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + src, + src->kids[0], src->counts[0], src->elems[0], + src->kids[1], src->counts[1], src->elems[1], + src->kids[2], src->counts[2], src->elems[2], + src->kids[3], src->counts[3])); + + /* where in dest to put it */ + i = (dest->elems[1] ? 2 : dest->elems[0] ? 1 : 0); + dest->elems[i] = n->elems[ki-1]; + n->elems[ki-1] = src->elems[0]; + + dest->kids[i+1] = src->kids[0]; dest->counts[i+1] = src->counts[0]; + + if (dest->kids[i+1]) dest->kids[i+1]->parent = dest; + + /* + * Move over the rest of the source node. + */ + src->kids[0] = src->kids[1]; src->counts[0] = src->counts[1]; + src->elems[0] = src->elems[1]; + src->kids[1] = src->kids[2]; src->counts[1] = src->counts[2]; + src->elems[1] = src->elems[2]; + src->kids[2] = src->kids[3]; src->counts[2] = src->counts[3]; + src->elems[2] = NULL; + src->kids[3] = NULL; src->counts[3] = 0; + + adjust = dest->counts[i+1] + 1; + + n->counts[ki] -= adjust; + n->counts[ki-1] += adjust; + + if (k) { + LOG((" before: k,index = %d,%d\n", (*k), (*index))); + if ((*k) == ki) { + (*index) -= adjust; + if ((*index) < 0) { + (*index) += n->counts[ki-1] + 1; + (*k)--; + } + } + LOG((" after: k,index = %d,%d\n", (*k), (*index))); + } + + LOG((" parent %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" dest %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + dest, + dest->kids[0], dest->counts[0], dest->elems[0], + dest->kids[1], dest->counts[1], dest->elems[1], + dest->kids[2], dest->counts[2], dest->elems[2], + dest->kids[3], dest->counts[3])); + LOG((" src %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + src, + src->kids[0], src->counts[0], src->elems[0], + src->kids[1], src->counts[1], src->elems[1], + src->kids[2], src->counts[2], src->elems[2], + src->kids[3], src->counts[3])); +} + +/* + * Tree transformation used in delete and split: merge child nodes + * ki and ki+1 of a node. Update k and index so that they still + * point to the same place in the transformed tree. Assumes both + * children _are_ sufficiently small. + * + * . B . . + * / \ -> | + * a A b c C d a A b B c C d + * + * This routine can also cope with either child being undersized: + * + * . A . . + * / \ -> | + * a b B c a A b B c + * + * . A . . + * / \ -> | + * a b B c C d a A b B c C d + */ +static void trans234_subtree_merge(node234 *n, int ki, int *k, int *index) { + node234 *left, *right; + int i, leftlen, rightlen, lsize, rsize; + + left = n->kids[ki]; leftlen = n->counts[ki]; + right = n->kids[ki+1]; rightlen = n->counts[ki+1]; + + LOG((" trans234_subtree_merge(%p, %d):\n", n, ki)); + LOG((" parent %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" left %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + left, + left->kids[0], left->counts[0], left->elems[0], + left->kids[1], left->counts[1], left->elems[1], + left->kids[2], left->counts[2], left->elems[2], + left->kids[3], left->counts[3])); + LOG((" right %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + right, + right->kids[0], right->counts[0], right->elems[0], + right->kids[1], right->counts[1], right->elems[1], + right->kids[2], right->counts[2], right->elems[2], + right->kids[3], right->counts[3])); + + assert(!left->elems[2] && !right->elems[2]); /* neither is large! */ + lsize = (left->elems[1] ? 2 : left->elems[0] ? 1 : 0); + rsize = (right->elems[1] ? 2 : right->elems[0] ? 1 : 0); + + left->elems[lsize] = n->elems[ki]; + + for (i = 0; i < rsize+1; i++) { + left->kids[lsize+1+i] = right->kids[i]; + left->counts[lsize+1+i] = right->counts[i]; + if (left->kids[lsize+1+i]) + left->kids[lsize+1+i]->parent = left; + if (i < rsize) + left->elems[lsize+1+i] = right->elems[i]; + } + + n->counts[ki] += rightlen + 1; + + sfree(right); + + /* + * Move the rest of n up by one. + */ + for (i = ki+1; i < 3; i++) { + n->kids[i] = n->kids[i+1]; + n->counts[i] = n->counts[i+1]; + } + for (i = ki; i < 2; i++) { + n->elems[i] = n->elems[i+1]; + } + n->kids[3] = NULL; + n->counts[3] = 0; + n->elems[2] = NULL; + + if (k) { + LOG((" before: k,index = %d,%d\n", (*k), (*index))); + if ((*k) == ki+1) { + (*k)--; + (*index) += leftlen + 1; + } else if ((*k) > ki+1) { + (*k)--; + } + LOG((" after: k,index = %d,%d\n", (*k), (*index))); + } + + LOG((" parent %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" merged %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + left, + left->kids[0], left->counts[0], left->elems[0], + left->kids[1], left->counts[1], left->elems[1], + left->kids[2], left->counts[2], left->elems[2], + left->kids[3], left->counts[3])); + +} + +/* + * Delete an element e in a 2-3-4 tree. Does not free the element, + * merely removes all links to it from the tree nodes. + */ +static void *delpos234_internal(tree234 *t, int index) { + node234 *n; + void *retval; + int ki, i; + + retval = NULL; + + n = t->root; /* by assumption this is non-NULL */ + LOG(("deleting item %d from tree %p\n", index, t)); + while (1) { + node234 *sub; + + LOG((" node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d index=%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3], + index)); + if (index <= n->counts[0]) { + ki = 0; + } else if (index -= n->counts[0]+1, index <= n->counts[1]) { + ki = 1; + } else if (index -= n->counts[1]+1, index <= n->counts[2]) { + ki = 2; + } else if (index -= n->counts[2]+1, index <= n->counts[3]) { + ki = 3; + } else { + assert(0); /* can't happen */ + } + + if (!n->kids[0]) + break; /* n is a leaf node; we're here! */ + + /* + * Check to see if we've found our target element. If so, + * we must choose a new target (we'll use the old target's + * successor, which will be in a leaf), move it into the + * place of the old one, continue down to the leaf and + * delete the old copy of the new target. + */ + if (index == n->counts[ki]) { + node234 *m; + LOG((" found element in internal node, index %d\n", ki)); + assert(n->elems[ki]); /* must be a kid _before_ an element */ + ki++; index = 0; + for (m = n->kids[ki]; m->kids[0]; m = m->kids[0]) + continue; + LOG((" replacing with element \"%s\" from leaf node %p\n", + m->elems[0], m)); + retval = n->elems[ki-1]; + n->elems[ki-1] = m->elems[0]; + } + + /* + * Recurse down to subtree ki. If it has only one element, + * we have to do some transformation to start with. + */ + LOG((" moving to subtree %d\n", ki)); + sub = n->kids[ki]; + if (!sub->elems[1]) { + LOG((" subtree has only one element!\n")); + if (ki > 0 && n->kids[ki-1]->elems[1]) { + /* + * Child ki has only one element, but child + * ki-1 has two or more. So we need to move a + * subtree from ki-1 to ki. + */ + trans234_subtree_right(n, ki-1, &ki, &index); + } else if (ki < 3 && n->kids[ki+1] && + n->kids[ki+1]->elems[1]) { + /* + * Child ki has only one element, but ki+1 has + * two or more. Move a subtree from ki+1 to ki. + */ + trans234_subtree_left(n, ki+1, &ki, &index); + } else { + /* + * ki is small with only small neighbours. Pick a + * neighbour and merge with it. + */ + trans234_subtree_merge(n, ki>0 ? ki-1 : ki, &ki, &index); + sub = n->kids[ki]; + + if (!n->elems[0]) { + /* + * The root is empty and needs to be + * removed. + */ + LOG((" shifting root!\n")); + t->root = sub; + sub->parent = NULL; + sfree(n); + n = NULL; + } + } + } + + if (n) + n->counts[ki]--; + n = sub; + } + + /* + * Now n is a leaf node, and ki marks the element number we + * want to delete. We've already arranged for the leaf to be + * bigger than minimum size, so let's just go to it. + */ + assert(!n->kids[0]); + if (!retval) + retval = n->elems[ki]; + + for (i = ki; i < 2 && n->elems[i+1]; i++) + n->elems[i] = n->elems[i+1]; + n->elems[i] = NULL; + + /* + * It's just possible that we have reduced the leaf to zero + * size. This can only happen if it was the root - so destroy + * it and make the tree empty. + */ + if (!n->elems[0]) { + LOG((" removed last element in tree, destroying empty root\n")); + assert(n == t->root); + sfree(n); + t->root = NULL; + } + + return retval; /* finished! */ +} +void *delpos234(tree234 *t, int index) { + if (index < 0 || index >= countnode234(t->root)) + return NULL; + return delpos234_internal(t, index); +} +void *del234(tree234 *t, void *e) { + int index; + if (!findrelpos234(t, e, NULL, REL234_EQ, &index)) + return NULL; /* it wasn't in there anyway */ + return delpos234_internal(t, index); /* it's there; delete it. */ +} + +/* + * Join two subtrees together with a separator element between + * them, given their relative height. + * + * (Height<0 means the left tree is shorter, >0 means the right + * tree is shorter, =0 means (duh) they're equal.) + * + * It is assumed that any checks needed on the ordering criterion + * have _already_ been done. + * + * The value returned in `height' is 0 or 1 depending on whether the + * resulting tree is the same height as the original larger one, or + * one higher. + */ +static node234 *join234_internal(node234 *left, void *sep, + node234 *right, int *height) { + node234 *root, *node; + int relht = *height; + int ki; + + LOG((" join: joining %p \"%s\" %p, relative height is %d\n", + left, sep, right, relht)); + if (relht == 0) { + /* + * The trees are the same height. Create a new one-element + * root containing the separator and pointers to the two + * nodes. + */ + node234 *newroot; + newroot = snew(node234); + newroot->kids[0] = left; newroot->counts[0] = countnode234(left); + newroot->elems[0] = sep; + newroot->kids[1] = right; newroot->counts[1] = countnode234(right); + newroot->elems[1] = NULL; + newroot->kids[2] = NULL; newroot->counts[2] = 0; + newroot->elems[2] = NULL; + newroot->kids[3] = NULL; newroot->counts[3] = 0; + newroot->parent = NULL; + if (left) left->parent = newroot; + if (right) right->parent = newroot; + *height = 1; + LOG((" join: same height, brand new root\n")); + return newroot; + } + + /* + * This now works like the addition algorithm on the larger + * tree. We're replacing a single kid pointer with two kid + * pointers separated by an element; if that causes the node to + * overload, we split it in two, move a separator element up to + * the next node, and repeat. + */ + if (relht < 0) { + /* + * Left tree is shorter. Search down the right tree to find + * the pointer we're inserting at. + */ + node = root = right; + while (++relht < 0) { + node = node->kids[0]; + } + ki = 0; + right = node->kids[ki]; + } else { + /* + * Right tree is shorter; search down the left to find the + * pointer we're inserting at. + */ + node = root = left; + while (--relht > 0) { + if (node->elems[2]) + node = node->kids[3]; + else if (node->elems[1]) + node = node->kids[2]; + else + node = node->kids[1]; + } + if (node->elems[2]) + ki = 3; + else if (node->elems[1]) + ki = 2; + else + ki = 1; + left = node->kids[ki]; + } + + /* + * Now proceed as for addition. + */ + *height = add234_insert(left, sep, right, &root, node, ki); + + return root; +} +static int height234(tree234 *t) { + int level = 0; + node234 *n = t->root; + while (n) { + level++; + n = n->kids[0]; + } + return level; +} +tree234 *join234(tree234 *t1, tree234 *t2) { + int size2 = countnode234(t2->root); + if (size2 > 0) { + void *element; + int relht; + + if (t1->cmp) { + element = index234(t2, 0); + element = findrelpos234(t1, element, NULL, REL234_GE, NULL); + if (element) + return NULL; + } + + element = delpos234(t2, 0); + relht = height234(t1) - height234(t2); + t1->root = join234_internal(t1->root, element, t2->root, &relht); + t2->root = NULL; + } + return t1; +} +tree234 *join234r(tree234 *t1, tree234 *t2) { + int size1 = countnode234(t1->root); + if (size1 > 0) { + void *element; + int relht; + + if (t2->cmp) { + element = index234(t1, size1-1); + element = findrelpos234(t2, element, NULL, REL234_LE, NULL); + if (element) + return NULL; + } + + element = delpos234(t1, size1-1); + relht = height234(t1) - height234(t2); + t2->root = join234_internal(t1->root, element, t2->root, &relht); + t1->root = NULL; + } + return t2; +} + +/* + * Split out the first <index> elements in a tree and return a + * pointer to the root node. Leave the root node of the remainder + * in t. + */ +static node234 *split234_internal(tree234 *t, int index) { + node234 *halves[2], *n, *sib, *sub; + node234 *lparent, *rparent; + int ki, pki, i, half, lcount, rcount; + + n = t->root; + LOG(("splitting tree %p at point %d\n", t, index)); + + /* + * Easy special cases. After this we have also dealt completely + * with the empty-tree case and we can assume the root exists. + */ + if (index == 0) /* return nothing */ + return NULL; + if (index == countnode234(t->root)) { /* return the whole tree */ + node234 *ret = t->root; + t->root = NULL; + return ret; + } + + /* + * Search down the tree to find the split point. + */ + lparent = rparent = NULL; + while (n) { + LOG((" node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d index=%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3], + index)); + lcount = index; + rcount = countnode234(n) - lcount; + if (index <= n->counts[0]) { + ki = 0; + } else if (index -= n->counts[0]+1, index <= n->counts[1]) { + ki = 1; + } else if (index -= n->counts[1]+1, index <= n->counts[2]) { + ki = 2; + } else { + index -= n->counts[2]+1; + ki = 3; + } + + LOG((" splitting at subtree %d\n", ki)); + sub = n->kids[ki]; + + LOG((" splitting at child index %d\n", ki)); + + /* + * Split the node, put halves[0] on the right of the left + * one and halves[1] on the left of the right one, put the + * new node pointers in halves[0] and halves[1], and go up + * a level. + */ + sib = snew(node234); + for (i = 0; i < 3; i++) { + if (i+ki < 3 && n->elems[i+ki]) { + sib->elems[i] = n->elems[i+ki]; + sib->kids[i+1] = n->kids[i+ki+1]; + if (sib->kids[i+1]) sib->kids[i+1]->parent = sib; + sib->counts[i+1] = n->counts[i+ki+1]; + n->elems[i+ki] = NULL; + n->kids[i+ki+1] = NULL; + n->counts[i+ki+1] = 0; + } else { + sib->elems[i] = NULL; + sib->kids[i+1] = NULL; + sib->counts[i+1] = 0; + } + } + if (lparent) { + lparent->kids[pki] = n; + lparent->counts[pki] = lcount; + n->parent = lparent; + rparent->kids[0] = sib; + rparent->counts[0] = rcount; + sib->parent = rparent; + } else { + halves[0] = n; + n->parent = NULL; + halves[1] = sib; + sib->parent = NULL; + } + lparent = n; + rparent = sib; + pki = ki; + LOG((" left node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + LOG((" right node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + sib, + sib->kids[0], sib->counts[0], sib->elems[0], + sib->kids[1], sib->counts[1], sib->elems[1], + sib->kids[2], sib->counts[2], sib->elems[2], + sib->kids[3], sib->counts[3])); + + n = sub; + } + + /* + * We've come off the bottom here, so we've successfully split + * the tree into two equally high subtrees. The only problem is + * that some of the nodes down the fault line will be smaller + * than the minimum permitted size. (Since this is a 2-3-4 + * tree, that means they'll be zero-element one-child nodes.) + */ + LOG((" fell off bottom, lroot is %p, rroot is %p\n", + halves[0], halves[1])); + lparent->counts[pki] = rparent->counts[0] = 0; + lparent->kids[pki] = rparent->kids[0] = NULL; + + /* + * So now we go back down the tree from each of the two roots, + * fixing up undersize nodes. + */ + for (half = 0; half < 2; half++) { + /* + * Remove the root if it's undersize (it will contain only + * one child pointer, so just throw it away and replace it + * with its child). This might happen several times. + */ + while (halves[half] && !halves[half]->elems[0]) { + LOG((" root %p is undersize, throwing away\n", halves[half])); + halves[half] = halves[half]->kids[0]; + sfree(halves[half]->parent); + halves[half]->parent = NULL; + LOG((" new root is %p\n", halves[half])); + } + + n = halves[half]; + while (n) { + void (*toward)(node234 *n, int ki, int *k, int *index); + int ni, merge; + + /* + * Now we have a potentially undersize node on the + * right (if half==0) or left (if half==1). Sort it + * out, by merging with a neighbour or by transferring + * subtrees over. At this time we must also ensure that + * nodes are bigger than minimum, in case we need an + * element to merge two nodes below. + */ + LOG((" node %p: %p/%d \"%s\" %p/%d \"%s\" %p/%d \"%s\" %p/%d\n", + n, + n->kids[0], n->counts[0], n->elems[0], + n->kids[1], n->counts[1], n->elems[1], + n->kids[2], n->counts[2], n->elems[2], + n->kids[3], n->counts[3])); + if (half == 1) { + ki = 0; /* the kid we're interested in */ + ni = 1; /* the neighbour */ + merge = 0; /* for merge: leftmost of the two */ + toward = trans234_subtree_left; + } else { + ki = (n->kids[3] ? 3 : n->kids[2] ? 2 : 1); + ni = ki-1; + merge = ni; + toward = trans234_subtree_right; + } + + sub = n->kids[ki]; + if (sub && !sub->elems[1]) { + /* + * This node is undersized or minimum-size. If we + * can merge it with its neighbour, we do so; + * otherwise we must be able to transfer subtrees + * over to it until it is greater than minimum + * size. + */ + int undersized = (!sub->elems[0]); + LOG((" child %d is %ssize\n", ki, + undersized ? "under" : "minimum-")); + LOG((" neighbour is %s\n", + n->kids[ni]->elems[2] ? "large" : + n->kids[ni]->elems[1] ? "medium" : "small")); + if (!n->kids[ni]->elems[1] || + (undersized && !n->kids[ni]->elems[2])) { + /* + * Neighbour is small, or possibly neighbour is + * medium and we are undersize. + */ + trans234_subtree_merge(n, merge, NULL, NULL); + sub = n->kids[merge]; + if (!n->elems[0]) { + /* + * n is empty, and hence must have been the + * root and needs to be removed. + */ + assert(!n->parent); + LOG((" shifting root!\n")); + halves[half] = sub; + halves[half]->parent = NULL; + sfree(n); + } + } else { + /* Neighbour is big enough to move trees over. */ + toward(n, ni, NULL, NULL); + if (undersized) + toward(n, ni, NULL, NULL); + } + } + n = sub; + } + } + + t->root = halves[1]; + return halves[0]; +} +tree234 *splitpos234(tree234 *t, int index, int before) { + tree234 *ret; + node234 *n; + int count; + + count = countnode234(t->root); + if (index < 0 || index > count) + return NULL; /* error */ + ret = newtree234(t->cmp); + n = split234_internal(t, index); + if (before) { + /* We want to return the ones before the index. */ + ret->root = n; + } else { + /* + * We want to keep the ones before the index and return the + * ones after. + */ + ret->root = t->root; + t->root = n; + } + return ret; +} +tree234 *split234(tree234 *t, void *e, cmpfn234 cmp, int rel) { + int before; + int index; + + assert(rel != REL234_EQ); + + if (rel == REL234_GT || rel == REL234_GE) { + before = 1; + rel = (rel == REL234_GT ? REL234_LE : REL234_LT); + } else { + before = 0; + } + if (!findrelpos234(t, e, cmp, rel, &index)) + index = 0; + + return splitpos234(t, index+1, before); +} + +static node234 *copynode234(node234 *n, copyfn234 copyfn, void *copyfnstate) { + int i; + node234 *n2 = snew(node234); + + for (i = 0; i < 3; i++) { + if (n->elems[i] && copyfn) + n2->elems[i] = copyfn(copyfnstate, n->elems[i]); + else + n2->elems[i] = n->elems[i]; + } + + for (i = 0; i < 4; i++) { + if (n->kids[i]) { + n2->kids[i] = copynode234(n->kids[i], copyfn, copyfnstate); + n2->kids[i]->parent = n2; + } else { + n2->kids[i] = NULL; + } + n2->counts[i] = n->counts[i]; + } + + return n2; +} +tree234 *copytree234(tree234 *t, copyfn234 copyfn, void *copyfnstate) { + tree234 *t2; + + t2 = newtree234(t->cmp); + if (t->root) { + t2->root = copynode234(t->root, copyfn, copyfnstate); + t2->root->parent = NULL; + } else + t2->root = NULL; + + return t2; +} + +#ifdef TEST + +/* + * Test code for the 2-3-4 tree. This code maintains an alternative + * representation of the data in the tree, in an array (using the + * obvious and slow insert and delete functions). After each tree + * operation, the verify() function is called, which ensures all + * the tree properties are preserved: + * - node->child->parent always equals node + * - tree->root->parent always equals NULL + * - number of kids == 0 or number of elements + 1; + * - tree has the same depth everywhere + * - every node has at least one element + * - subtree element counts are accurate + * - any NULL kid pointer is accompanied by a zero count + * - in a sorted tree: ordering property between elements of a + * node and elements of its children is preserved + * and also ensures the list represented by the tree is the same + * list it should be. (This last check also doubly verifies the + * ordering properties, because the `same list it should be' is by + * definition correctly ordered. It also ensures all nodes are + * distinct, because the enum functions would get caught in a loop + * if not.) + */ + +#include <stdarg.h> + +#define srealloc realloc + +/* + * Error reporting function. + */ +void error(char *fmt, ...) { + va_list ap; + printf("ERROR: "); + va_start(ap, fmt); + vfprintf(stdout, fmt, ap); + va_end(ap); + printf("\n"); +} + +/* The array representation of the data. */ +void **array; +int arraylen, arraysize; +cmpfn234 cmp; + +/* The tree representation of the same data. */ +tree234 *tree; + +/* + * Routines to provide a diagnostic printout of a tree. Currently + * relies on every element in the tree being a one-character string + * :-) + */ +typedef struct { + char **levels; +} dispctx; + +int dispnode(node234 *n, int level, dispctx *ctx) { + if (level == 0) { + int xpos = strlen(ctx->levels[0]); + int len; + + if (n->elems[2]) + len = sprintf(ctx->levels[0]+xpos, " %s%s%s", + n->elems[0], n->elems[1], n->elems[2]); + else if (n->elems[1]) + len = sprintf(ctx->levels[0]+xpos, " %s%s", + n->elems[0], n->elems[1]); + else + len = sprintf(ctx->levels[0]+xpos, " %s", + n->elems[0]); + return xpos + 1 + (len-1) / 2; + } else { + int xpos[4], nkids; + int nodelen, mypos, myleft, x, i; + + xpos[0] = dispnode(n->kids[0], level-3, ctx); + xpos[1] = dispnode(n->kids[1], level-3, ctx); + nkids = 2; + if (n->kids[2]) { + xpos[2] = dispnode(n->kids[2], level-3, ctx); + nkids = 3; + } + if (n->kids[3]) { + xpos[3] = dispnode(n->kids[3], level-3, ctx); + nkids = 4; + } + + if (nkids == 4) + mypos = (xpos[1] + xpos[2]) / 2; + else if (nkids == 3) + mypos = xpos[1]; + else + mypos = (xpos[0] + xpos[1]) / 2; + nodelen = nkids * 2 - 1; + myleft = mypos - ((nodelen-1)/2); + assert(myleft >= xpos[0]); + assert(myleft + nodelen-1 <= xpos[nkids-1]); + + x = strlen(ctx->levels[level]); + while (x <= xpos[0] && x < myleft) + ctx->levels[level][x++] = ' '; + while (x < myleft) + ctx->levels[level][x++] = '_'; + if (nkids==4) + x += sprintf(ctx->levels[level]+x, ".%s.%s.%s.", + n->elems[0], n->elems[1], n->elems[2]); + else if (nkids==3) + x += sprintf(ctx->levels[level]+x, ".%s.%s.", + n->elems[0], n->elems[1]); + else + x += sprintf(ctx->levels[level]+x, ".%s.", + n->elems[0]); + while (x < xpos[nkids-1]) + ctx->levels[level][x++] = '_'; + ctx->levels[level][x] = '\0'; + + x = strlen(ctx->levels[level-1]); + for (i = 0; i < nkids; i++) { + int rpos, pos; + rpos = xpos[i]; + if (i > 0 && i < nkids-1) + pos = myleft + 2*i; + else + pos = rpos; + if (rpos < pos) + rpos++; + while (x < pos && x < rpos) + ctx->levels[level-1][x++] = ' '; + if (x == pos) + ctx->levels[level-1][x++] = '|'; + while (x < pos || x < rpos) + ctx->levels[level-1][x++] = '_'; + if (x == pos) + ctx->levels[level-1][x++] = '|'; + } + ctx->levels[level-1][x] = '\0'; + + x = strlen(ctx->levels[level-2]); + for (i = 0; i < nkids; i++) { + int rpos = xpos[i]; + + while (x < rpos) + ctx->levels[level-2][x++] = ' '; + ctx->levels[level-2][x++] = '|'; + } + ctx->levels[level-2][x] = '\0'; + + return mypos; + } +} + +void disptree(tree234 *t) { + dispctx ctx; + char *leveldata; + int width = count234(t); + int ht = height234(t) * 3 - 2; + int i; + + if (!t->root) { + printf("[empty tree]\n"); + } + + leveldata = smalloc(ht * (width+2)); + ctx.levels = smalloc(ht * sizeof(char *)); + for (i = 0; i < ht; i++) { + ctx.levels[i] = leveldata + i * (width+2); + ctx.levels[i][0] = '\0'; + } + + (void) dispnode(t->root, ht-1, &ctx); + + for (i = ht; i-- ;) + printf("%s\n", ctx.levels[i]); + + sfree(ctx.levels); + sfree(leveldata); +} + +typedef struct { + int treedepth; + int elemcount; +} chkctx; + +int chknode(chkctx *ctx, int level, node234 *node, + void *lowbound, void *highbound) { + int nkids, nelems; + int i; + int count; + + /* Count the non-NULL kids. */ + for (nkids = 0; nkids < 4 && node->kids[nkids]; nkids++); + /* Ensure no kids beyond the first NULL are non-NULL. */ + for (i = nkids; i < 4; i++) + if (node->kids[i]) { + error("node %p: nkids=%d but kids[%d] non-NULL", + node, nkids, i); + } else if (node->counts[i]) { + error("node %p: kids[%d] NULL but count[%d]=%d nonzero", + node, i, i, node->counts[i]); + } + + /* Count the non-NULL elements. */ + for (nelems = 0; nelems < 3 && node->elems[nelems]; nelems++); + /* Ensure no elements beyond the first NULL are non-NULL. */ + for (i = nelems; i < 3; i++) + if (node->elems[i]) { + error("node %p: nelems=%d but elems[%d] non-NULL", + node, nelems, i); + } + + if (nkids == 0) { + /* + * If nkids==0, this is a leaf node; verify that the tree + * depth is the same everywhere. + */ + if (ctx->treedepth < 0) + ctx->treedepth = level; /* we didn't know the depth yet */ + else if (ctx->treedepth != level) + error("node %p: leaf at depth %d, previously seen depth %d", + node, level, ctx->treedepth); + } else { + /* + * If nkids != 0, then it should be nelems+1, unless nelems + * is 0 in which case nkids should also be 0 (and so we + * shouldn't be in this condition at all). + */ + int shouldkids = (nelems ? nelems+1 : 0); + if (nkids != shouldkids) { + error("node %p: %d elems should mean %d kids but has %d", + node, nelems, shouldkids, nkids); + } + } + + /* + * nelems should be at least 1. + */ + if (nelems == 0) { + error("node %p: no elems", node, nkids); + } + + /* + * Add nelems to the running element count of the whole tree. + */ + ctx->elemcount += nelems; + + /* + * Check ordering property: all elements should be strictly > + * lowbound, strictly < highbound, and strictly < each other in + * sequence. (lowbound and highbound are NULL at edges of tree + * - both NULL at root node - and NULL is considered to be < + * everything and > everything. IYSWIM.) + */ + if (cmp) { + for (i = -1; i < nelems; i++) { + void *lower = (i == -1 ? lowbound : node->elems[i]); + void *higher = (i+1 == nelems ? highbound : node->elems[i+1]); + if (lower && higher && cmp(lower, higher) >= 0) { + error("node %p: kid comparison [%d=%s,%d=%s] failed", + node, i, lower, i+1, higher); + } + } + } + + /* + * Check parent pointers: all non-NULL kids should have a + * parent pointer coming back to this node. + */ + for (i = 0; i < nkids; i++) + if (node->kids[i]->parent != node) { + error("node %p kid %d: parent ptr is %p not %p", + node, i, node->kids[i]->parent, node); + } + + + /* + * Now (finally!) recurse into subtrees. + */ + count = nelems; + + for (i = 0; i < nkids; i++) { + void *lower = (i == 0 ? lowbound : node->elems[i-1]); + void *higher = (i >= nelems ? highbound : node->elems[i]); + int subcount = chknode(ctx, level+1, node->kids[i], lower, higher); + if (node->counts[i] != subcount) { + error("node %p kid %d: count says %d, subtree really has %d", + node, i, node->counts[i], subcount); + } + count += subcount; + } + + return count; +} + +void verifytree(tree234 *tree, void **array, int arraylen) { + chkctx ctx; + int i; + void *p; + + ctx.treedepth = -1; /* depth unknown yet */ + ctx.elemcount = 0; /* no elements seen yet */ + /* + * Verify validity of tree properties. + */ + if (tree->root) { + if (tree->root->parent != NULL) + error("root->parent is %p should be null", tree->root->parent); + chknode(&ctx, 0, tree->root, NULL, NULL); + } + printf("tree depth: %d\n", ctx.treedepth); + /* + * Enumerate the tree and ensure it matches up to the array. + */ + for (i = 0; NULL != (p = index234(tree, i)); i++) { + if (i >= arraylen) + error("tree contains more than %d elements", arraylen); + if (array[i] != p) + error("enum at position %d: array says %s, tree says %s", + i, array[i], p); + } + if (ctx.elemcount != i) { + error("tree really contains %d elements, enum gave %d", + ctx.elemcount, i); + } + if (i < arraylen) { + error("enum gave only %d elements, array has %d", i, arraylen); + } + i = count234(tree); + if (ctx.elemcount != i) { + error("tree really contains %d elements, count234 gave %d", + ctx.elemcount, i); + } +} +void verify(void) { verifytree(tree, array, arraylen); } + +void internal_addtest(void *elem, int index, void *realret) { + int i, j; + void *retval; + + if (arraysize < arraylen+1) { + arraysize = arraylen+1+256; + array = (array == NULL ? smalloc(arraysize*sizeof(*array)) : + srealloc(array, arraysize*sizeof(*array))); + } + + i = index; + /* now i points to the first element >= elem */ + retval = elem; /* expect elem returned (success) */ + for (j = arraylen; j > i; j--) + array[j] = array[j-1]; + array[i] = elem; /* add elem to array */ + arraylen++; + + if (realret != retval) { + error("add: retval was %p expected %p", realret, retval); + } + + verify(); +} + +void addtest(void *elem) { + int i; + void *realret; + + realret = add234(tree, elem); + + i = 0; + while (i < arraylen && cmp(elem, array[i]) > 0) + i++; + if (i < arraylen && !cmp(elem, array[i])) { + void *retval = array[i]; /* expect that returned not elem */ + if (realret != retval) { + error("add: retval was %p expected %p", realret, retval); + } + } else + internal_addtest(elem, i, realret); +} + +void addpostest(void *elem, int i) { + void *realret; + + realret = addpos234(tree, elem, i); + + internal_addtest(elem, i, realret); +} + +void delpostest(int i) { + int index = i; + void *elem = array[i], *ret; + + /* i points to the right element */ + while (i < arraylen-1) { + array[i] = array[i+1]; + i++; + } + arraylen--; /* delete elem from array */ + + if (tree->cmp) + ret = del234(tree, elem); + else + ret = delpos234(tree, index); + + if (ret != elem) { + error("del returned %p, expected %p", ret, elem); + } + + verify(); +} + +void deltest(void *elem) { + int i; + + i = 0; + while (i < arraylen && cmp(elem, array[i]) > 0) + i++; + if (i >= arraylen || cmp(elem, array[i]) != 0) + return; /* don't do it! */ + delpostest(i); +} + +/* A sample data set and test utility. Designed for pseudo-randomness, + * and yet repeatability. */ + +/* + * This random number generator uses the `portable implementation' + * given in ANSI C99 draft N869. It assumes `unsigned' is 32 bits; + * change it if not. + */ +int randomnumber(unsigned *seed) { + *seed *= 1103515245; + *seed += 12345; + return ((*seed) / 65536) % 32768; +} + +int mycmp(void *av, void *bv) { + char const *a = (char const *)av; + char const *b = (char const *)bv; + return strcmp(a, b); +} + +#define lenof(x) ( sizeof((x)) / sizeof(*(x)) ) + +char *strings[] = { + "0", "2", "3", "I", "K", "d", "H", "J", "Q", "N", "n", "q", "j", "i", + "7", "G", "F", "D", "b", "x", "g", "B", "e", "v", "V", "T", "f", "E", + "S", "8", "A", "k", "X", "p", "C", "R", "a", "o", "r", "O", "Z", "u", + "6", "1", "w", "L", "P", "M", "c", "U", "h", "9", "t", "5", "W", "Y", + "m", "s", "l", "4", +#if 0 + "a", "ab", "absque", "coram", "de", + "palam", "clam", "cum", "ex", "e", + "sine", "tenus", "pro", "prae", + "banana", "carrot", "cabbage", "broccoli", "onion", "zebra", + "penguin", "blancmange", "pangolin", "whale", "hedgehog", + "giraffe", "peanut", "bungee", "foo", "bar", "baz", "quux", + "murfl", "spoo", "breen", "flarn", "octothorpe", + "snail", "tiger", "elephant", "octopus", "warthog", "armadillo", + "aardvark", "wyvern", "dragon", "elf", "dwarf", "orc", "goblin", + "pixie", "basilisk", "warg", "ape", "lizard", "newt", "shopkeeper", + "wand", "ring", "amulet" +#endif +}; + +#define NSTR lenof(strings) + +void findtest(void) { + static const int rels[] = { + REL234_EQ, REL234_GE, REL234_LE, REL234_LT, REL234_GT + }; + static const char *const relnames[] = { + "EQ", "GE", "LE", "LT", "GT" + }; + int i, j, rel, index; + char *p, *ret, *realret, *realret2; + int lo, hi, mid, c; + + for (i = 0; i < (int)NSTR; i++) { + p = strings[i]; + for (j = 0; j < (int)(sizeof(rels)/sizeof(*rels)); j++) { + rel = rels[j]; + + lo = 0; hi = arraylen-1; + while (lo <= hi) { + mid = (lo + hi) / 2; + c = strcmp(p, array[mid]); + if (c < 0) + hi = mid-1; + else if (c > 0) + lo = mid+1; + else + break; + } + + if (c == 0) { + if (rel == REL234_LT) + ret = (mid > 0 ? array[--mid] : NULL); + else if (rel == REL234_GT) + ret = (mid < arraylen-1 ? array[++mid] : NULL); + else + ret = array[mid]; + } else { + assert(lo == hi+1); + if (rel == REL234_LT || rel == REL234_LE) { + mid = hi; + ret = (hi >= 0 ? array[hi] : NULL); + } else if (rel == REL234_GT || rel == REL234_GE) { + mid = lo; + ret = (lo < arraylen ? array[lo] : NULL); + } else + ret = NULL; + } + + realret = findrelpos234(tree, p, NULL, rel, &index); + if (realret != ret) { + error("find(\"%s\",%s) gave %s should be %s", + p, relnames[j], realret, ret); + } + if (realret && index != mid) { + error("find(\"%s\",%s) gave %d should be %d", + p, relnames[j], index, mid); + } + if (realret && rel == REL234_EQ) { + realret2 = index234(tree, index); + if (realret2 != realret) { + error("find(\"%s\",%s) gave %s(%d) but %d -> %s", + p, relnames[j], realret, index, index, realret2); + } + } +#if 0 + printf("find(\"%s\",%s) gave %s(%d)\n", p, relnames[j], + realret, index); +#endif + } + } + + realret = findrelpos234(tree, NULL, NULL, REL234_GT, &index); + if (arraylen && (realret != array[0] || index != 0)) { + error("find(NULL,GT) gave %s(%d) should be %s(0)", + realret, index, array[0]); + } else if (!arraylen && (realret != NULL)) { + error("find(NULL,GT) gave %s(%d) should be NULL", + realret, index); + } + + realret = findrelpos234(tree, NULL, NULL, REL234_LT, &index); + if (arraylen && (realret != array[arraylen-1] || index != arraylen-1)) { + error("find(NULL,LT) gave %s(%d) should be %s(0)", + realret, index, array[arraylen-1]); + } else if (!arraylen && (realret != NULL)) { + error("find(NULL,LT) gave %s(%d) should be NULL", + realret, index); + } +} + +void splittest(tree234 *tree, void **array, int arraylen) { + int i; + tree234 *tree3, *tree4; + for (i = 0; i <= arraylen; i++) { + tree3 = copytree234(tree, NULL, NULL); + tree4 = splitpos234(tree3, i, 0); + verifytree(tree3, array, i); + verifytree(tree4, array+i, arraylen-i); + join234(tree3, tree4); + freetree234(tree4); /* left empty by join */ + verifytree(tree3, array, arraylen); + freetree234(tree3); + } +} + +int main(void) { + int in[NSTR]; + int i, j, k; + int tworoot, tmplen; + unsigned seed = 0; + tree234 *tree2, *tree3, *tree4; + int c; + + setvbuf(stdout, NULL, _IOLBF, 0); + + for (i = 0; i < (int)NSTR; i++) in[i] = 0; + array = NULL; + arraylen = arraysize = 0; + tree = newtree234(mycmp); + cmp = mycmp; + + verify(); + for (i = 0; i < 10000; i++) { + j = randomnumber(&seed); + j %= NSTR; + printf("trial: %d\n", i); + if (in[j]) { + printf("deleting %s (%d)\n", strings[j], j); + deltest(strings[j]); + in[j] = 0; + } else { + printf("adding %s (%d)\n", strings[j], j); + addtest(strings[j]); + in[j] = 1; + } + disptree(tree); + findtest(); + } + + while (arraylen > 0) { + j = randomnumber(&seed); + j %= arraylen; + deltest(array[j]); + } + + freetree234(tree); + + /* + * Now try an unsorted tree. We don't really need to test + * delpos234 because we know del234 is based on it, so it's + * already been tested in the above sorted-tree code; but for + * completeness we'll use it to tear down our unsorted tree + * once we've built it. + */ + tree = newtree234(NULL); + cmp = NULL; + verify(); + for (i = 0; i < 1000; i++) { + printf("trial: %d\n", i); + j = randomnumber(&seed); + j %= NSTR; + k = randomnumber(&seed); + k %= count234(tree)+1; + printf("adding string %s at index %d\n", strings[j], k); + addpostest(strings[j], k); + } + + /* + * While we have this tree in its full form, we'll take a copy + * of it to use in split and join testing. + */ + tree2 = copytree234(tree, NULL, NULL); + verifytree(tree2, array, arraylen);/* check the copy is accurate */ + /* + * Split tests. Split the tree at every possible point and + * check the resulting subtrees. + */ + tworoot = (!tree2->root->elems[1]);/* see if it has a 2-root */ + splittest(tree2, array, arraylen); + /* + * Now do the split test again, but on a tree that has a 2-root + * (if the previous one didn't) or doesn't (if the previous one + * did). + */ + tmplen = arraylen; + while ((!tree2->root->elems[1]) == tworoot) { + delpos234(tree2, --tmplen); + } + printf("now trying splits on second tree\n"); + splittest(tree2, array, tmplen); + freetree234(tree2); + + /* + * Back to the main testing of uncounted trees. + */ + while (count234(tree) > 0) { + printf("cleanup: tree size %d\n", count234(tree)); + j = randomnumber(&seed); + j %= count234(tree); + printf("deleting string %s from index %d\n", (char *)array[j], j); + delpostest(j); + } + freetree234(tree); + + /* + * Finally, do some testing on split/join on _sorted_ trees. At + * the same time, we'll be testing split on very small trees. + */ + tree = newtree234(mycmp); + cmp = mycmp; + arraylen = 0; + for (i = 0; i < 17; i++) { + tree2 = copytree234(tree, NULL, NULL); + splittest(tree2, array, arraylen); + freetree234(tree2); + if (i < 16) + addtest(strings[i]); + } + freetree234(tree); + + /* + * Test silly cases of join: join(emptytree, emptytree), and + * also ensure join correctly spots when sorted trees fail the + * ordering constraint. + */ + tree = newtree234(mycmp); + tree2 = newtree234(mycmp); + tree3 = newtree234(mycmp); + tree4 = newtree234(mycmp); + assert(mycmp(strings[0], strings[1]) < 0); /* just in case :-) */ + add234(tree2, strings[1]); + add234(tree4, strings[0]); + array[0] = strings[0]; + array[1] = strings[1]; + verifytree(tree, array, 0); + verifytree(tree2, array+1, 1); + verifytree(tree3, array, 0); + verifytree(tree4, array, 1); + + /* + * So: + * - join(tree,tree3) should leave both tree and tree3 unchanged. + * - joinr(tree,tree2) should leave both tree and tree2 unchanged. + * - join(tree4,tree3) should leave both tree3 and tree4 unchanged. + * - join(tree, tree2) should move the element from tree2 to tree. + * - joinr(tree4, tree3) should move the element from tree4 to tree3. + * - join(tree,tree3) should return NULL and leave both unchanged. + * - join(tree3,tree) should work and create a bigger tree in tree3. + */ + assert(tree == join234(tree, tree3)); + verifytree(tree, array, 0); + verifytree(tree3, array, 0); + assert(tree2 == join234r(tree, tree2)); + verifytree(tree, array, 0); + verifytree(tree2, array+1, 1); + assert(tree4 == join234(tree4, tree3)); + verifytree(tree3, array, 0); + verifytree(tree4, array, 1); + assert(tree == join234(tree, tree2)); + verifytree(tree, array+1, 1); + verifytree(tree2, array, 0); + assert(tree3 == join234r(tree4, tree3)); + verifytree(tree3, array, 1); + verifytree(tree4, array, 0); + assert(NULL == join234(tree, tree3)); + verifytree(tree, array+1, 1); + verifytree(tree3, array, 1); + assert(tree3 == join234(tree3, tree)); + verifytree(tree3, array, 2); + verifytree(tree, array, 0); + + return 0; +} + +#endif + +#if 0 /* sorted list of strings might be useful */ +{ + "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", +} +#endif diff --git a/app/tools/halibut/tree234.h b/app/tools/halibut/tree234.h new file mode 100644 index 0000000..f75c8f7 --- /dev/null +++ b/app/tools/halibut/tree234.h @@ -0,0 +1,202 @@ +/* + * tree234.h: header defining functions in tree234.c. + * + * This file is copyright 1999-2001 Simon Tatham. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL SIMON TATHAM BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef TREE234_H +#define TREE234_H + +/* + * This typedef is opaque outside tree234.c itself. + */ +typedef struct tree234_Tag tree234; + +typedef int (*cmpfn234)(void *, void *); + +typedef void *(*copyfn234)(void *state, void *element); + +/* + * Create a 2-3-4 tree. If `cmp' is NULL, the tree is unsorted, and + * lookups by key will fail: you can only look things up by numeric + * index, and you have to use addpos234() and delpos234(). + */ +tree234 *newtree234(cmpfn234 cmp); + +/* + * Free a 2-3-4 tree (not including freeing the elements). + */ +void freetree234(tree234 *t); + +/* + * Add an element e to a sorted 2-3-4 tree t. Returns e on success, + * or if an existing element compares equal, returns that. + */ +void *add234(tree234 *t, void *e); + +/* + * Add an element e to an unsorted 2-3-4 tree t. Returns e on + * success, NULL on failure. (Failure should only occur if the + * index is out of range or the tree is sorted.) + * + * Index range can be from 0 to the tree's current element count, + * inclusive. + */ +void *addpos234(tree234 *t, void *e, int index); + +/* + * Look up the element at a given numeric index in a 2-3-4 tree. + * Returns NULL if the index is out of range. + * + * One obvious use for this function is in iterating over the whole + * of a tree (sorted or unsorted): + * + * for (i = 0; (p = index234(tree, i)) != NULL; i++) consume(p); + * + * or + * + * int maxcount = count234(tree); + * for (i = 0; i < maxcount; i++) { + * p = index234(tree, i); + * assert(p != NULL); + * consume(p); + * } + */ +void *index234(tree234 *t, int index); + +/* + * Find an element e in a sorted 2-3-4 tree t. Returns NULL if not + * found. e is always passed as the first argument to cmp, so cmp + * can be an asymmetric function if desired. cmp can also be passed + * as NULL, in which case the compare function from the tree proper + * will be used. + * + * Three of these functions are special cases of findrelpos234. The + * non-`pos' variants lack the `index' parameter: if the parameter + * is present and non-NULL, it must point to an integer variable + * which will be filled with the numeric index of the returned + * element. + * + * The non-`rel' variants lack the `relation' parameter. This + * parameter allows you to specify what relation the element you + * provide has to the element you're looking for. This parameter + * can be: + * + * REL234_EQ - find only an element that compares equal to e + * REL234_LT - find the greatest element that compares < e + * REL234_LE - find the greatest element that compares <= e + * REL234_GT - find the smallest element that compares > e + * REL234_GE - find the smallest element that compares >= e + * + * Non-`rel' variants assume REL234_EQ. + * + * If `rel' is REL234_GT or REL234_LT, the `e' parameter may be + * NULL. In this case, REL234_GT will return the smallest element + * in the tree, and REL234_LT will return the greatest. This gives + * an alternative means of iterating over a sorted tree, instead of + * using index234: + * + * // to loop forwards + * for (p = NULL; (p = findrel234(tree, p, NULL, REL234_GT)) != NULL ;) + * consume(p); + * + * // to loop backwards + * for (p = NULL; (p = findrel234(tree, p, NULL, REL234_LT)) != NULL ;) + * consume(p); + */ +enum { + REL234_EQ, REL234_LT, REL234_LE, REL234_GT, REL234_GE +}; +void *find234(tree234 *t, void *e, cmpfn234 cmp); +void *findrel234(tree234 *t, void *e, cmpfn234 cmp, int relation); +void *findpos234(tree234 *t, void *e, cmpfn234 cmp, int *index); +void *findrelpos234(tree234 *t, void *e, cmpfn234 cmp, int relation, + int *index); + +/* + * Delete an element e in a 2-3-4 tree. Does not free the element, + * merely removes all links to it from the tree nodes. + * + * delpos234 deletes the element at a particular tree index: it + * works on both sorted and unsorted trees. + * + * del234 deletes the element passed to it, so it only works on + * sorted trees. (It's equivalent to using findpos234 to determine + * the index of an element, and then passing that index to + * delpos234.) + * + * Both functions return a pointer to the element they delete, for + * the user to free or pass on elsewhere or whatever. If the index + * is out of range (delpos234) or the element is already not in the + * tree (del234) then they return NULL. + */ +void *del234(tree234 *t, void *e); +void *delpos234(tree234 *t, int index); + +/* + * Return the total element count of a tree234. + */ +int count234(tree234 *t); + +/* + * Split a tree234 into two valid tree234s. + * + * splitpos234 splits at a given index. If `before' is TRUE, the + * items at and after that index are left in t and the ones before + * are returned; if `before' is FALSE, the items before that index + * are left in t and the rest are returned. + * + * split234 splits at a given key. You can pass any of the + * relations used with findrel234, except for REL234_EQ. The items + * in the tree that satisfy the relation are returned; the + * remainder are left. + */ +tree234 *splitpos234(tree234 *t, int index, int before); +tree234 *split234(tree234 *t, void *e, cmpfn234 cmp, int rel); + +/* + * Join two tree234s together into a single one. + * + * All the elements in t1 are placed to the left of all the + * elements in t2. If the trees are sorted, there will be a test to + * ensure that this satisfies the ordering criterion, and NULL will + * be returned otherwise. If the trees are unsorted, there is no + * restriction on the use of join234. + * + * The tree returned is t1 (join234) or t2 (join234r), if the + * operation is successful. + */ +tree234 *join234(tree234 *t1, tree234 *t2); +tree234 *join234r(tree234 *t1, tree234 *t2); + +/* + * Make a complete copy of a tree234. Element pointers will be + * reused unless copyfn is non-NULL, in which case it will be used + * to copy each element. (copyfn takes two `void *' parameters; the + * first is private state and the second is the element. A simple + * copy routine probably won't need private state.) + */ +tree234 *copytree234(tree234 *t, copyfn234 copyfn, void *copyfnstate); + +#endif /* TREE234_H */ diff --git a/app/tools/halibut/ustring.c b/app/tools/halibut/ustring.c new file mode 100644 index 0000000..95477a5 --- /dev/null +++ b/app/tools/halibut/ustring.c @@ -0,0 +1,486 @@ +/* + * ustring.c: Unicode string routines + */ + +#include <wchar.h> +#include <stdlib.h> +#include <assert.h> +#include <time.h> +#include "halibut.h" + +wchar_t *ustrdup(wchar_t const *s) { + wchar_t *r; + if (s) { + r = snewn(1+ustrlen(s), wchar_t); + ustrcpy(r, s); + } else { + r = snew(wchar_t); + *r = 0; + } + return r; +} + +static char *ustrtoa_internal(wchar_t const *s, char *outbuf, int size, + int charset, int careful) { + int len, ret, err; + charset_state state = CHARSET_INIT_STATE; + + if (!s) { + *outbuf = '\0'; + return outbuf; + } + + len = ustrlen(s); + size--; /* leave room for terminating NUL */ + *outbuf = '\0'; + while (len > 0) { + err = 0; + ret = charset_from_unicode(&s, &len, outbuf, size, charset, &state, + (careful ? &err : NULL)); + if (err) + return NULL; + if (!ret) + return outbuf; + size -= ret; + outbuf += ret; + *outbuf = '\0'; + } + /* + * Clean up + */ + ret = charset_from_unicode(NULL, 0, outbuf, size, charset, &state, NULL); + size -= ret; + outbuf += ret; + *outbuf = '\0'; + return outbuf; +} + +char *ustrtoa(wchar_t const *s, char *outbuf, int size, int charset) { + return ustrtoa_internal(s, outbuf, size, charset, FALSE); +} + +char *ustrtoa_careful(wchar_t const *s, char *outbuf, int size, int charset) { + return ustrtoa_internal(s, outbuf, size, charset, TRUE); +} + +wchar_t *ustrfroma(char const *s, wchar_t *outbuf, int size, int charset) { + int len, ret; + charset_state state = CHARSET_INIT_STATE; + + if (!s) { + *outbuf = L'\0'; + return outbuf; + } + + len = strlen(s); + size--; /* allow for terminating NUL */ + *outbuf = L'\0'; + while (len > 0) { + ret = charset_to_unicode(&s, &len, outbuf, size, + charset, &state, NULL, 0); + if (!ret) + return outbuf; + outbuf += ret; + size -= ret; + *outbuf = L'\0'; + } + return outbuf; +} + +char *utoa_internal_dup(wchar_t const *s, int charset, int *lenp, int careful) +{ + char *outbuf; + int outpos, outlen, len, ret, err; + charset_state state = CHARSET_INIT_STATE; + + if (!s) { + return dupstr(""); + } + + len = ustrlen(s); + + outlen = len + 10; + outbuf = snewn(outlen, char); + + outpos = 0; + outbuf[outpos] = '\0'; + + while (len > 0) { + err = 0; + ret = charset_from_unicode(&s, &len, + outbuf + outpos, outlen - outpos - 1, + charset, &state, (careful ? &err : NULL)); + if (err) { + sfree(outbuf); + return NULL; + } + if (!ret) { + outlen = outlen * 3 / 2; + outbuf = sresize(outbuf, outlen, char); + } + outpos += ret; + outbuf[outpos] = '\0'; + } + /* + * Clean up + */ + outlen = outpos + 32; + outbuf = sresize(outbuf, outlen, char); + ret = charset_from_unicode(NULL, 0, + outbuf + outpos, outlen - outpos + 1, + charset, &state, NULL); + outpos += ret; + outbuf[outpos] = '\0'; + if (lenp) + *lenp = outpos; + return outbuf; +} + +char *utoa_dup(wchar_t const *s, int charset) +{ + return utoa_internal_dup(s, charset, NULL, FALSE); +} + +char *utoa_dup_len(wchar_t const *s, int charset, int *len) +{ + return utoa_internal_dup(s, charset, len, FALSE); +} + +char *utoa_careful_dup(wchar_t const *s, int charset) +{ + return utoa_internal_dup(s, charset, NULL, TRUE); +} + +wchar_t *ufroma_dup(char const *s, int charset) { + int len; + wchar_t *buf = NULL; + + len = strlen(s) + 1; + do { + buf = sresize(buf, len, wchar_t); + ustrfroma(s, buf, len, charset); + len = (3 * len) / 2 + 1; /* this guarantees a strict increase */ + } while (ustrlen(buf) >= len-1); + + buf = sresize(buf, ustrlen(buf)+1, wchar_t); + return buf; +} + +char *utoa_locale_dup(wchar_t const *s) +{ + /* + * This variant uses the C library locale. + */ + char *ret; + int len; + size_t siz; + + len = ustrlen(s); + + ret = snewn(1 + MB_CUR_MAX * len, char); + + siz = wcstombs(ret, s, len); + + if (siz) { + assert(siz <= (size_t)(MB_CUR_MAX * len)); + ret[siz] = '\0'; + ret = sresize(ret, siz+1, char); + return ret; + } + + /* + * If that failed, try a different strategy (which we will also + * attempt in the total absence of wcstombs). Retrieve the + * locale's charset from nl_langinfo or equivalent, and use + * normal utoa_dup. + */ + return utoa_dup(s, charset_from_locale()); +} + +wchar_t *ufroma_locale_dup(char const *s) +{ + /* + * This variant uses the C library locale. + */ + wchar_t *ret; + int len; + size_t siz; + + len = strlen(s); + + ret = snewn(1 + 2*len, wchar_t); /* be conservative */ + + siz = mbstowcs(ret, s, len); + + if (siz) { + assert(siz <= (size_t)(2 * len)); + ret[siz] = L'\0'; + ret = sresize(ret, siz+1, wchar_t); + return ret; + } + + /* + * If that failed, try a different strategy (which we will also + * attempt in the total absence of wcstombs). Retrieve the + * locale's charset from nl_langinfo or equivalent, and use + * normal ufroma_dup. + */ + return ufroma_dup(s, charset_from_locale()); +} + +int ustrlen(wchar_t const *s) { + int len = 0; + while (*s++) len++; + return len; +} + +wchar_t *uadv(wchar_t *s) { + return s + 1 + ustrlen(s); +} + +wchar_t *ustrcpy(wchar_t *dest, wchar_t const *source) { + wchar_t *ret = dest; + do { + *dest++ = *source; + } while (*source++); + return ret; +} + +wchar_t *ustrncpy(wchar_t *dest, wchar_t const *source, int n) { + wchar_t *ret = dest; + do { + *dest++ = *source; + if (*source) source++; + } while (n-- > 0); + return ret; +} + +int ustrcmp(wchar_t *lhs, wchar_t *rhs) { + if (!lhs && !rhs) return 0; + if (!lhs) return -1; + if (!rhs) return +1; + while (*lhs && *rhs && *lhs==*rhs) + lhs++, rhs++; + if (*lhs < *rhs) + return -1; + else if (*lhs > *rhs) + return 1; + return 0; +} + +wchar_t utolower(wchar_t c) { + if (c == L'\0') + return c; /* this property needed by ustricmp */ +#ifdef HAS_TOWLOWER + return towlower(c); +#else + if (c >= 'A' && c <= 'Z') + c += 'a'-'A'; + return c; +#endif +} + +int uisalpha(wchar_t c) { +#ifdef HAS_ISWALPHA + return iswalpha(c); +#else + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); +#endif +} + +int ustricmp(wchar_t const *lhs, wchar_t const *rhs) { + wchar_t lc, rc; + while ((lc = utolower(*lhs)) == (rc = utolower(*rhs)) && lc && rc) + lhs++, rhs++; + if (!lc && !rc) + return 0; + if (lc < rc) + return -1; + else + return 1; +} + +int ustrnicmp(wchar_t const *lhs, wchar_t const *rhs, int maxlen) { + wchar_t lc = 0, rc = 0; + while (maxlen-- > 0 && + (lc = utolower(*lhs)) == (rc = utolower(*rhs)) && lc && rc) + lhs++, rhs++; + if (lc < rc) + return -1; + else if (lc > rc) + return 1; + else + return 0; +} + +wchar_t *ustrlow(wchar_t *s) { + wchar_t *p = s; + while (*p) { + *p = utolower(*p); + p++; + } + return s; +} + +int utoi(wchar_t const *s) { + int sign = +1; + int n; + + if (*s == L'-') { + s++; + sign = -1; + } + + n = 0; + while (*s && *s >= L'0' && *s <= L'9') { + n *= 10; + n += (*s - '0'); + s++; + } + + return n; +} + +double utof(wchar_t const *s) +{ + char *cs = utoa_dup(s, CS_ASCII); + double ret = atof(cs); + sfree(cs); + return ret; +} + +int utob(wchar_t const *s) { + if (!ustricmp(s, L"yes") || !ustricmp(s, L"y") || + !ustricmp(s, L"true") || !ustricmp(s, L"t")) + return TRUE; + return FALSE; +} + +int uisdigit(wchar_t c) { + return c >= L'0' && c <= L'9'; +} + +#define USTRFTIME_DELTA 128 +static void ustrftime_internal(rdstring *rs, char formatchr, + const struct tm *timespec) +{ + /* + * strftime has the entertaining property that it returns 0 + * _either_ on out-of-space _or_ on successful generation of + * the empty string. Hence we must ensure our format can never + * generate the empty string. Somebody throw a custard pie at + * whoever was responsible for that. Please? + */ + +#ifdef HAS_WCSFTIME + wchar_t *buf = NULL; + wchar_t fmt[4]; + int size, ret; + + fmt[0] = L' '; + fmt[1] = L'%'; + /* Format chars are all ASCII, so conversion to Unicode is no problem */ + fmt[2] = formatchr; + fmt[3] = L'\0'; + + size = 0; + do { + size += USTRFTIME_DELTA; + buf = sresize(buf, size, wchar_t); + ret = (int) wcsftime(buf, size, fmt, timespec); + } while (ret == 0); + + rdadds(rs, buf+1); + sfree(buf); +#else + char *buf = NULL; + wchar_t *cvtbuf; + char fmt[4]; + int size, ret; + + fmt[0] = ' '; + fmt[1] = '%'; + fmt[2] = formatchr; + fmt[3] = '\0'; + + size = 0; + do { + size += USTRFTIME_DELTA; + buf = sresize(buf, size, char); + ret = (int) strftime(buf, size, fmt, timespec); + } while (ret == 0); + + cvtbuf = ufroma_locale_dup(buf+1); + rdadds(rs, cvtbuf); + sfree(cvtbuf); + sfree(buf); +#endif +} + +wchar_t *ustrftime(const wchar_t *wfmt, const struct tm *timespec) +{ + rdstring rs = { 0, 0, NULL }; + + if (!wfmt) + wfmt = L"%c"; + + while (*wfmt) { + if (wfmt[0] == L'%' && wfmt[1] == L'%') { + rdadd(&rs, L'%'); + wfmt += 2; + } else if (wfmt[0] == L'%' && wfmt[1]) { + ustrftime_internal(&rs, wfmt[1], timespec); + wfmt += 2; + } else { + rdadd(&rs, wfmt[0]); + wfmt++; + } + } + + return rdtrim(&rs); +} + +/* + * Determine whether a Unicode string can be translated into a + * given charset without any missing characters. + */ +int cvt_ok(int charset, const wchar_t *s) +{ + char buf[256]; + charset_state state = CHARSET_INIT_STATE; + int err, len = ustrlen(s); + + err = 0; + while (len > 0) { + (void)charset_from_unicode(&s, &len, buf, lenof(buf), + charset, &state, &err); + if (err) + return FALSE; + } + return TRUE; +} + +/* + * Wrapper around charset_from_localenc which accepts the charset + * name as a wide string (since that happens to be more useful). + * Also throws a Halibut error and falls back to CS_ASCII if the + * charset is unrecognised, meaning the rest of the program can + * rely on always getting a valid charset id back from this + * function. + */ +int charset_from_ustr(filepos *fpos, const wchar_t *name) +{ + char *csname; + int charset; + + csname = utoa_dup(name, CS_ASCII); + charset = charset_from_localenc(csname); + + if (charset == CS_NONE) { + charset = CS_ASCII; + error(err_charset, fpos, name); + } + + sfree(csname); + return charset; +} diff --git a/app/tools/halibut/version b/app/tools/halibut/version new file mode 100644 index 0000000..fc8b185 --- /dev/null +++ b/app/tools/halibut/version @@ -0,0 +1 @@ +-DVERSION="1.0" diff --git a/app/tools/halibut/version.c b/app/tools/halibut/version.c new file mode 100644 index 0000000..38fbca1 --- /dev/null +++ b/app/tools/halibut/version.c @@ -0,0 +1,13 @@ +/* + * version.c: version string + */ + +#include <stdio.h> + +#ifndef VERSION +#define VER "anonymous build (" __DATE__ " " __TIME__ ")" +#else +#define VER "version " VERSION +#endif + +const char *const version = VER; diff --git a/app/tools/halibut/wcwidth.c b/app/tools/halibut/wcwidth.c new file mode 100644 index 0000000..269359f --- /dev/null +++ b/app/tools/halibut/wcwidth.c @@ -0,0 +1,184 @@ +/* + * A wrapper around wcswidth() to have it ignore characters which + * are not represented in a particular output charset. + */ + +#include <assert.h> +#include <stdlib.h> +#include "halibut.h" + +#ifndef HAS_WCSWIDTH + +/* + * Markus Kuhn's public domain wcwidth() implementation, cribbed + * from + * + * http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + */ + +#define wcswidth mk_wcswidth + +struct interval { + int first; + int last; +}; + +/* auxiliary function for binary search in interval table */ +static int bisearch(wchar_t ucs, const struct interval *table, int max) { + int min = 0; + int mid; + + if (ucs < table[0].first || ucs > table[max].last) + return 0; + while (max >= min) { + mid = (min + max) / 2; + if (ucs > table[mid].last) + min = mid + 1; + else if (ucs < table[mid].first) + max = mid - 1; + else + return 1; + } + + return 0; +} + +int mk_wcwidth(wchar_t ucs) +{ + /* sorted list of non-overlapping intervals of non-spacing characters */ + /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ + static const struct interval combining[] = { + { 0x0300, 0x0357 }, { 0x035D, 0x036F }, { 0x0483, 0x0486 }, + { 0x0488, 0x0489 }, { 0x0591, 0x05A1 }, { 0x05A3, 0x05B9 }, + { 0x05BB, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C4 }, { 0x0600, 0x0603 }, { 0x0610, 0x0615 }, + { 0x064B, 0x0658 }, { 0x0670, 0x0670 }, { 0x06D6, 0x06E4 }, + { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, + { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, + { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, + { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, + { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, + { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, + { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, + { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, + { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, + { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, + { 0x0CCC, 0x0CCD }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, + { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, + { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, + { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, + { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, + { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, + { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x200B, 0x200F }, + { 0x202A, 0x202E }, { 0x2060, 0x2063 }, { 0x206A, 0x206F }, + { 0x20D0, 0x20EA }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, + { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, + { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x1D167, 0x1D169 }, + { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, + { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } + }; + + /* test for 8-bit control characters */ + if (ucs == 0) + return 0; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return -1; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, combining, + sizeof(combining) / sizeof(struct interval) - 1)) + return 0; + + /* if we arrive here, ucs is not a combining or C0/C1 control character */ + + return 1 + + (ucs >= 0x1100 && + (ucs <= 0x115f || /* Hangul Jamo init. consonants */ + ucs == 0x2329 || ucs == 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && + ucs != 0x303f) || /* CJK ... Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ + (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2fffd) || + (ucs >= 0x30000 && ucs <= 0x3fffd))); +} + + +int mk_wcswidth(const wchar_t *pwcs, size_t n) +{ + int w, width = 0; + + for (;*pwcs && n-- > 0; pwcs++) + if ((w = mk_wcwidth(*pwcs)) < 0) + return -1; + else + width += w; + + return width; +} + +#endif + +int ustrwid(wchar_t const *s, int charset) +{ + char buf[256]; + int wid, len = ustrlen(s); + charset_state state = CHARSET_INIT_STATE; + + wid = 0; + + while (len > 0) { + int err, ret; + wchar_t const *s_orig; + + err = 0; + s_orig = s; + ret = charset_from_unicode(&s, &len, buf, lenof(buf), + charset, &state, &err); + wid += wcswidth(s_orig, s - s_orig); + if (err) { + assert(len > 0 && *s); + s++; + len--; + } + } + + return wid; +} + +int strwid(char const *s, int charset) +{ + wchar_t buf[256]; + int wid, len = strlen(s); + charset_state state = CHARSET_INIT_STATE; + + wid = 0; + + while (len > 0) { + int ret; + + ret = charset_to_unicode(&s, &len, buf, lenof(buf), + charset, &state, NULL, 0); + + if (ret > 0) + wid += wcswidth(buf, ret); + } + + return wid; +} |