pax_global_header00006660000000000000000000000064141525121200014503gustar00rootroot0000000000000052 comment=359b08fd40045cfab1cbdbce1f289095bcab3184 sedlex-2.5/000077500000000000000000000000001415251212000126355ustar00rootroot00000000000000sedlex-2.5/.github/000077500000000000000000000000001415251212000141755ustar00rootroot00000000000000sedlex-2.5/.github/CODEOWNERS000066400000000000000000000002411415251212000155650ustar00rootroot00000000000000# These are the default owners for everything in the repo. They will # be requested for review when someone opens a pull request. * @alainfrisch @Drup @pmetzger sedlex-2.5/.github/workflows/000077500000000000000000000000001415251212000162325ustar00rootroot00000000000000sedlex-2.5/.github/workflows/ci.yml000066400000000000000000000006631415251212000173550ustar00rootroot00000000000000name: CI on: [push] jobs: build: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@v1 - name: Setup OCaml uses: avsm/setup-ocaml@master - name: Install locally run: opam install -y . - name: Build locally run: opam exec dune build - name: Run tests locally run: opam exec dune runtest sedlex-2.5/.gitignore000066400000000000000000000003241415251212000146240ustar00rootroot00000000000000*.annot *.cmo *.cma *.cmi *.a *.o *.cmx *.cmxs *.cmxa *.exe *.install *.merlin .*sw* _build libdoc src/syntax/ppx_sedlex src/generator/data/*.txt examples/complement examples/tokenizer examples/subtraction _opam sedlex-2.5/.merlin000066400000000000000000000001051415251212000141200ustar00rootroot00000000000000PKG compiler-libs ppx_tools ppx_tools.metaquot SRC src/** B src/** sedlex-2.5/.travis.yml000066400000000000000000000006571415251212000147560ustar00rootroot00000000000000language: c sudo: required install: test -e .travis.opam.sh || wget https://raw.githubusercontent.com/ocaml/ocaml-ci-scripts/master/.travis-opam.sh script: bash -ex .travis-opam.sh env: global: - PACKAGE=sedlex matrix: - OCAML_VERSION=4.04 - OCAML_VERSION=4.05 - OCAML_VERSION=4.06 - OCAML_VERSION=4.07 - OCAML_VERSION=4.08 - OCAML_VERSION=4.09 - OCAML_VERSION=4.10 - OCAML_VERSION=4.11 os: - linux - osx sedlex-2.5/CHANGES000066400000000000000000000045401415251212000136330ustar00rootroot000000000000002.5: * Fix exponential compilation time, thanks to @mnxn for reporting in #97 and @fangyi-zhou for fixing in #106 * Update unicode support for `14.0.0`. 2.4 * Update `dune` support to `2.8`, add auto-generated `opam` files. * Optimize generated code, thanks to @bobzhang * Update unicode version to 13.0.0 2.3 * Switch to ppxlib 2.2 * Support for OCaml 4.08 2.1 * GPR#78: Auto-generate unicode data 2.0 * GPR#70: Switch to dune, opam v2 * GPR#60: Breaking change: switch from int codepoints to Uchar.t codepoints * GPR#59: Track lexing position ------------------------------------------------------------------------------- 1.99.4 * GPR#47: Switch to ocaml-migrate-parsetree (contributed by Adrien Guatto) * GPR#42: Added 'Rep' (repeat operator) (contributed by jpathy) 1.99.3 * Update to work with 4.03 (4.02 still supported) 1.99.2 * First official release of sedlex 1.99.1 * Support for new Ast_mapper registration API, follow OCaml trunk after the inclusion of the extension_point branch 1.99 * First version of sedlex. The history below refers to ulex, the ancestor or sedlex implemented with Camlp4. ------------------------------------------------------------------------------- 1.1 * Generate (more) globally unique identifiers to avoid conflicts when open'ing another module processed by ulex (issue reported by Gerd Stolpmann) 1.0 * Update to the new Camlp4 and to ocamlbuild (release for OCaml 3.10 only), by Nicolas Pouillard. 0.8 * Really make it work with OCaml 3.09. * Support for Utf-16. 0.7 released May 24 2005 * Bug fixes * Update to OCaml 3.09 (currently CVS). Still works with OCaml 3.08. * MIT-like license (used to LGPL) 0.5 release Jul. 8 2004 * Document how to use a custom implementation for lex buffers * Update to OCaml 3.08 0.4 released Jan. 10 2004 * Bug fix (accept 1114111 as valid Unicode code point) * Add the rollback function 0.3 released Oct. 8 2003 * Bug fix * Add a new predefined class for ISO identifiers 0.2 released Sep. 22 2003 * Changed the names of predefined regexp * Fix max_code = 0x10ffff * Lexers that changes encoding on the fly * Documentation of the interface Ulexing 0.1 released Sep. 20 2003 * Initial release sedlex-2.5/LICENSE000066400000000000000000000021101415251212000136340ustar00rootroot00000000000000The MIT License (MIT) Copyright 2005, 2014 by Alain Frisch and LexiFi. 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. sedlex-2.5/Makefile000066400000000000000000000007231415251212000142770ustar00rootroot00000000000000# The package sedlex is released under the terms of an MIT-like license. # See the attached LICENSE file. # Copyright 2005, 2013 by Alain Frisch and LexiFi. INSTALL_ARGS := $(if $(PREFIX),--prefix $(PREFIX),) .PHONY: build install uninstall clean doc test all build: dune build @install install: dune install $(INSTALL_ARGS) uninstall: dune uninstall $(INSTALL_ARGS) clean: dune clean doc: dune build @doc test: dune build @runtest all: build test doc sedlex-2.5/README.md000066400000000000000000000165571415251212000141320ustar00rootroot00000000000000# sedlex [![Build Status](https://travis-ci.com/ocaml-community/sedlex.svg?branch=master)](https://travis-ci.com/ocaml-community/sedlex) Unicode-friendly lexer generator for OCaml. This package is licensed by LexiFi under the terms of the MIT license. sedlex was originally written by Alain Frisch and is now maintained as part of the ocaml-community repositories on github. ## API The API is documented [here](https://ocaml-community.github.io/sedlex). ## Overview sedlex is a lexer generator for OCaml, similar to ocamllex, but supporting Unicode. Contrary to ocamllex, lexer specifications for sedlex are embedded in regular OCaml source files. The lexers work with a new kind of "lexbuf", similar to ocamllex Lexing lexbufs, but designed to support Unicode, and abstracting from a specific encoding. A single lexer can work with arbitrary encodings of the input stream. sedlex is the successor of the ulex project. Contrary to ulex which was implemented as a Camlp4 syntax extension, sedlex is based on the new "-ppx" technology of OCaml, which allow rewriting OCaml parse trees through external rewriters. (And what a better name than "sed" for a rewriter?) As any -ppx rewriter, sedlex does not touch the concrete syntax of the language: lexer specifications are written in source file which comply with the standard grammar of OCaml programs. sedlex reuse the syntax for pattern matching in order to describe lexers (regular expressions are encoded within OCaml patterns). A nice consequence is that your editor (vi, emacs, ...) won't get confused (indentation, coloring) and you don't need to learn new priority rules. Moreover, sedlex is compatible with any front-end parsing technology: it works fine even if you use camlp4 or camlp5, with the standard or revised syntax. ## Lexer specifications sedlex adds a new kind of expression to OCaml: lexer definitions. The syntax for the new construction is: ```ocaml match%sedlex lexbuf with | R1 -> e1 ... | Rn -> en | _ -> def ``` or: ```ocaml [%sedlex match lexbuf with | R1 -> e1 ... | Rn -> en | _ -> def ] ``` (The first vertical bar is optional as in any OCaml pattern matching. Guard expressions are not allowed.) where: - lexbuf is an arbitrary lowercase identifier, which must refer to an existing value of type `Sedlexing.lexbuf`. - the Ri are regular expressions (see below); - the ei and def are OCaml expressions (called actions) of the same type (the type for the whole lexer definition). Unlike ocamllex, lexers work on stream of Unicode codepoints, not bytes. The actions can call functions from the Sedlexing module to extract (parts of) the matched lexeme, in the desired encoding. Regular expressions are syntactically OCaml patterns: - `"...."` (string constant): recognize the specified string - `'....'` (character constant) : recognize the specified character - `i` (integer constant) : recognize the specified codepoint - `'...' .. '...'`: character range - `i1 .. i2`: range between two codepoints - `R1 | R2` : alternation - `R, R2, ..., Rn` : concatenation - `Star R` : Kleene star (0 or more repetition) - `Plus R` : equivalent to `R, R*` - `Opt R` : equivalent to `("" | R)` - `Rep (R, n)` : equivalent to `R{n}` - `Rep (R, n .. m)` : equivalent to `R{n, m}` - `Chars "..."` : recognize any character in the string - `Compl R` : assume that R is a single-character length regexp (see below) and recognize the complement set - `Sub (R1,R2)` : assume that R is a single-character length regexp (see below) and recognize the set of items in `R1` but not in `R2` ("subtract") - `Intersect (R1,R2)` : assume that `R` is a single-character length regexp (see below) and recognize the set of items which are in both `R1` and `R2` - `lid` (lowercase identifier) : reference a named regexp (see below) A single-character length regexp is a regexp which does not contain (after expansion of references) concatenation, Star, Plus, Opt or string constants with a length different from one. Note: - The OCaml source is assumed to be encoded in Latin1 (for string and character literals). It is possible to define named regular expressions with the following construction, that can appear in place of a structure item: ```ocaml let lid = [%sedlex.regexp? R] ``` where lid is the regexp name to be defined and R its definition. The scope of the "lid" regular expression is the rest of the structure, after the definition. The same syntax can be used for local binding: ```ocaml let lid = [%sedlex.regexp? R] in body ``` The scope of "lid" is the body expression. ## Predefined regexps sedlex provides a set of predefined regexps: - any: any character - eof: the virtual end-of-file character - xml_letter, xml_digit, xml_extender, xml_base_char, xml_ideographic, xml_combining_char, xml_blank: as defined by the XML recommandation - tr8876_ident_char: characters names in identifiers from ISO TR8876 - cc, cf, cn, co, cs, ll, lm, lo, lt, lu, mc, me, mn, nd, nl, no, pc, pd, pe, pf, pi, po, ps, sc, sk, sm, so, zl, zp, zs: as defined by the Unicode standard (categories) - alphabetic, ascii_hex_digit, hex_digit, id_continue, id_start, lowercase, math, other_alphabetic, other_lowercase, other_math, other_uppercase, uppercase, white_space, xid_continue, xid_start: as defined by the Unicode standard (properties) ## Running a lexer See the interface of the Sedlexing module for a description of how to create lexbuf values (from strings, stream or channels encoded in Latin1, utf8 or utf16, or from integer arrays or streams representing Unicode code points). It is possible to work with a custom implementation for lex buffers. To do this, you just have to ensure that a module called Sedlexing is in scope of your lexer specifications, and that it defines at least the following functions: start, next, mark, backtrack. See the interface of the Sedlexing module for more information. ## Using sedlex The quick way: ``` opam install sedlex ``` Otherwise, the first thing to do is to compile and install sedlex. You need a recent version of OCaml and [dune](https://dune.build/). ``` make ``` ### With findlib If you have findlib, you can use it to install and use sedlex. The name of the findlib package is "sedlex". Installation (after "make"): ``` make install ``` Compilation of OCaml files with lexer specifications: ``` ocamlfind ocamlc -c -package sedlex.ppx my_file.ml ``` When linking, you must also include the sedlex package: ``` ocamlfind ocamlc -o my_prog -linkpkg -package sedlex.ppx my_file.cmo ``` There is also a sedlex.ppx subpackage containing the code of the ppx filter. This can be used to build custom drivers (combining several ppx transformations in a single process). ### Without findlib You can use sedlex without findlib. To compile, you need to run the source file through -ppx rewriter ppx_sedlex. Moreover, you need to link the application with the runtime support library for sedlex (sedlexing.cma / sedlexing.cmxa). ### With utop Once sedlex is installed as per above, simply type ``` #require "sedlex.ppx";; ``` ## Examples The `examples/` subdirectory contains several samples of sedlex in use. ## Contributors - Benus Becker: implementation of Utf16 - sghost: for Unicode 6.3 categories and properties - Peter Zotov: - improvements to the build system - switched parts of ppx_sedlex to using concrete syntax (with ppx_metaquot) - Steffen Smolka: port to dune sedlex-2.5/dune-project000066400000000000000000000014151415251212000151600ustar00rootroot00000000000000(lang dune 2.8) (version 2.5) (name sedlex) (source (github ocaml-community/sedlex)) (license MIT) (authors "Alain Frisch " "https://github.com/ocaml-community/sedlex/graphs/contributors") (maintainers "Alain Frisch ") (homepage "https://github.com/ocaml-community/sedlex") (generate_opam_files true) (package (name sedlex) (synopsis "An OCaml lexer generator for Unicode") (description "sedlex is a lexer generator for OCaml. It is similar to ocamllex, but supports Unicode. Unlike ocamllex, sedlex allows lexer specifications within regular OCaml source files. Lexing specific constructs are provided via a ppx syntax extension.") (depends (ocaml (>= 4.04)) dune (ppxlib (>= 0.18.0)) gen uchar)) sedlex-2.5/examples/000077500000000000000000000000001415251212000144535ustar00rootroot00000000000000sedlex-2.5/examples/complement.ml000066400000000000000000000006051415251212000171510ustar00rootroot00000000000000let ucase = [%sedlex.regexp? 'A'..'Z'] let lcase = [%sedlex.regexp? 'a'..'z'] let rec token buf = match%sedlex buf with | lcase -> print_char 'L';token buf | Compl (ucase | lcase) -> print_char '?'; token buf | ucase -> print_char 'U';token buf | eof -> print_endline "." | _ -> assert false let () = let lexbuf = Sedlexing.Latin1.from_string "Abc::DefG" in token lexbuf sedlex-2.5/examples/dune000066400000000000000000000012041415251212000153260ustar00rootroot00000000000000(executables (names tokenizer regressions complement subtraction repeat performance) (libraries sedlex sedlex_ppx) (preprocess (pps sedlex.ppx)) (flags :standard -w +39)) (rule (alias runtest) (deps (:< tokenizer.exe)) (action (run %{<}))) (rule (alias runtest) (deps (:< regressions.exe)) (action (run %{<}))) (rule (alias runtest) (deps (:< complement.exe)) (action (run %{<}))) (rule (alias runtest) (deps (:< subtraction.exe)) (action (run %{<}))) (rule (alias runtest) (deps (:< repeat.exe)) (action (run %{<}))) (rule (alias runtest) (deps (:< performance.exe)) (action (run %{<}))) sedlex-2.5/examples/performance.ml000066400000000000000000000010631415251212000173060ustar00rootroot00000000000000let rec token buf = match%sedlex buf with | any -> token buf | eof -> () | _ -> assert false let time f x = let rec acc f x = function | 0 -> f x | n -> f x|>ignore; acc f x (n-1) in let t = Sys.time() in let fx = acc f x 10 in Printf.printf "Execution time: %fs\n" (Sys.time() -. t); fx let () = let long_str = String.make 1000000 '\n' in let token_from _ = let lexbuf = Sedlexing.Latin1.from_string long_str in (* let () = Sedlexing.set_curr_p lexbuf Lexing.dummy_pos in *) token lexbuf in time token_from long_str sedlex-2.5/examples/regressions.ml000066400000000000000000000027521415251212000173560ustar00rootroot00000000000000(* This test that unicode_old.ml is a strict sub-set of * new unicode.ml. *) let test_versions = ("13.0.0","14.0.0") let regressions = [] let interval s e = Array.to_list (Array.init (e-s) (fun pos -> s + pos)) exception Found let test_exception name x = try let l = List.assoc name regressions in List.iter (fun (s,e) -> if s<=x && x<=e then raise Found) l with Not_found -> () let compare name old_l new_l = let code_points = List.fold_left (fun res (s,e) -> res@(interval s e)) [] old_l in let test x = try test_exception name x; List.iter (fun (s,e) -> if s<=x && x<=e then raise Found) new_l; false with Found -> true in List.iter (fun x -> if not (test x) then Printf.printf "Code point 0x%x missing in %s!\n" x name) code_points let test new_l (name, old_l) = (* Cn is for unassigned code points, which are allowed to be * used in future version. *) if name <> "cn" then compare name old_l (List.assoc name new_l) let () = if (Unicode_old.version,Sedlex_ppx.Unicode.version) <> test_versions then failwith (Printf.sprintf "Test written for versions: %s => %s\n%!" Unicode_old.version Sedlex_ppx.Unicode.version); Printf.printf "Testing Unicode regression: %s => %s\n%!" Unicode_old.version Sedlex_ppx.Unicode.version; List.iter (test Sedlex_ppx.Unicode.Categories.list) Unicode_old.Categories.list; List.iter (test Sedlex_ppx.Unicode.Properties.list) Unicode_old.Properties.list sedlex-2.5/examples/repeat.ml000066400000000000000000000011561415251212000162700ustar00rootroot00000000000000let rec token buf = match%sedlex buf with | white_space -> print_endline "\tWhitespace"; token buf | 'a', Rep(white_space, 1) -> print_endline "a\n\tWhitespace"; token buf | Rep("bc", 2) -> print_endline "bcbc"; token buf | Rep("d", 1 .. 1) -> print_endline "d"; token buf | Rep("ef", 1 .. 3) -> Printf.printf "%s\n" (Sedlexing.Utf8.lexeme buf); token buf | eof -> print_endline "\tEnd" | any -> print_endline "Other"; token buf | _ -> failwith "Internal failure: Reached impossible place" let () = let lexbuf = Sedlexing.Utf8.from_string "a bcbc d ef efef efefef" in token lexbuf sedlex-2.5/examples/subtraction.ml000066400000000000000000000010051415251212000173360ustar00rootroot00000000000000let rec token buf = match%sedlex buf with | white_space -> print_endline "\tWhitespace"; token buf | Sub (Chars "ab","b") -> print_endline "a"; token buf | (Chars "ab"|"c") -> print_endline "abc"; token buf | Intersect ("d", Chars "abd") -> print_endline "d"; token buf | eof -> print_endline "\tEnd" | any -> print_endline "Other"; token buf | _ -> failwith "Internal failure: Reached impossible place" let () = let lexbuf = Sedlexing.Utf8.from_string "a b c d e" in token lexbuf sedlex-2.5/examples/tokenizer.ml000066400000000000000000000013261415251212000170210ustar00rootroot00000000000000let digit = [%sedlex.regexp? '0'..'9'] let number = [%sedlex.regexp? Plus digit] let rec token buf = let letter = [%sedlex.regexp? 'a'..'z'|'A'..'Z'] in match%sedlex buf with | number -> Printf.printf "Number %s\n" (Sedlexing.Latin1.lexeme buf); token buf | letter, Star ('A'..'Z' | 'a'..'z' | digit) -> Printf.printf "Ident %s\n" (Sedlexing.Latin1.lexeme buf); token buf | Plus xml_blank -> token buf | Plus (Chars "+*-/") -> Printf.printf "Op %s\n" (Sedlexing.Latin1.lexeme buf); token buf | 128 .. 255 -> print_endline "Non ASCII" | eof -> print_endline "EOF" | _ -> failwith "Unexpected character" let () = let lexbuf = Sedlexing.Latin1.from_string "foobar A123Bfoo ++123Xbar/foo" in token lexbuf sedlex-2.5/examples/unicode_old.ml000066400000000000000000005764001415251212000173050ustar00rootroot00000000000000let version = "13.0.0" module Categories = struct let cc = [0x85, 0x85; 0x7f, 0x9f; 0x9, 0xd; 0x0, 0x1f] let cf = [0xad, 0xad; 0x600, 0x605; 0x61c, 0x61c; 0x6dd, 0x6dd; 0x70f, 0x70f; 0x8e2, 0x8e2; 0x180e, 0x180e; 0x200b, 0x200f; 0x200c, 0x200c; 0x200c, 0x200d; 0x200e, 0x200f; 0x202a, 0x202e; 0x2060, 0x2064; 0x2061, 0x2064; 0x2066, 0x2069; 0x2066, 0x206f; 0x206a, 0x206f; 0xfeff, 0xfeff; 0xfff9, 0xfffb; 0x110bd, 0x110bd; 0x110cd, 0x110cd; 0x13430, 0x13438; 0x1bca0, 0x1bca3; 0x1d173, 0x1d17a; 0xe0001, 0xe0001; 0xe0020, 0xe007f] let cn = [0x378, 0x379; 0x380, 0x383; 0x38b, 0x38b; 0x38d, 0x38d; 0x3a2, 0x3a2; 0x530, 0x530; 0x557, 0x558; 0x58b, 0x58c; 0x590, 0x590; 0x5c8, 0x5cf; 0x5eb, 0x5ee; 0x5f5, 0x5ff; 0x61d, 0x61d; 0x70e, 0x70e; 0x74b, 0x74c; 0x7b2, 0x7bf; 0x7fb, 0x7fc; 0x82e, 0x82f; 0x83f, 0x83f; 0x85c, 0x85d; 0x85f, 0x85f; 0x86b, 0x89f; 0x8b5, 0x8b5; 0x8c8, 0x8d2; 0x984, 0x984; 0x98d, 0x98e; 0x991, 0x992; 0x9a9, 0x9a9; 0x9b1, 0x9b1; 0x9b3, 0x9b5; 0x9ba, 0x9bb; 0x9c5, 0x9c6; 0x9c9, 0x9ca; 0x9cf, 0x9d6; 0x9d8, 0x9db; 0x9de, 0x9de; 0x9e4, 0x9e5; 0x9ff, 0xa00; 0xa04, 0xa04; 0xa0b, 0xa0e; 0xa11, 0xa12; 0xa29, 0xa29; 0xa31, 0xa31; 0xa34, 0xa34; 0xa37, 0xa37; 0xa3a, 0xa3b; 0xa3d, 0xa3d; 0xa43, 0xa46; 0xa49, 0xa4a; 0xa4e, 0xa50; 0xa52, 0xa58; 0xa5d, 0xa5d; 0xa5f, 0xa65; 0xa77, 0xa80; 0xa84, 0xa84; 0xa8e, 0xa8e; 0xa92, 0xa92; 0xaa9, 0xaa9; 0xab1, 0xab1; 0xab4, 0xab4; 0xaba, 0xabb; 0xac6, 0xac6; 0xaca, 0xaca; 0xace, 0xacf; 0xad1, 0xadf; 0xae4, 0xae5; 0xaf2, 0xaf8; 0xb00, 0xb00; 0xb04, 0xb04; 0xb0d, 0xb0e; 0xb11, 0xb12; 0xb29, 0xb29; 0xb31, 0xb31; 0xb34, 0xb34; 0xb3a, 0xb3b; 0xb45, 0xb46; 0xb49, 0xb4a; 0xb4e, 0xb54; 0xb58, 0xb5b; 0xb5e, 0xb5e; 0xb64, 0xb65; 0xb78, 0xb81; 0xb84, 0xb84; 0xb8b, 0xb8d; 0xb91, 0xb91; 0xb96, 0xb98; 0xb9b, 0xb9b; 0xb9d, 0xb9d; 0xba0, 0xba2; 0xba5, 0xba7; 0xbab, 0xbad; 0xbba, 0xbbd; 0xbc3, 0xbc5; 0xbc9, 0xbc9; 0xbce, 0xbcf; 0xbd1, 0xbd6; 0xbd8, 0xbe5; 0xbfb, 0xbff; 0xc0d, 0xc0d; 0xc11, 0xc11; 0xc29, 0xc29; 0xc3a, 0xc3c; 0xc45, 0xc45; 0xc49, 0xc49; 0xc4e, 0xc54; 0xc57, 0xc57; 0xc5b, 0xc5f; 0xc64, 0xc65; 0xc70, 0xc76; 0xc8d, 0xc8d; 0xc91, 0xc91; 0xca9, 0xca9; 0xcb4, 0xcb4; 0xcba, 0xcbb; 0xcc5, 0xcc5; 0xcc9, 0xcc9; 0xcce, 0xcd4; 0xcd7, 0xcdd; 0xcdf, 0xcdf; 0xce4, 0xce5; 0xcf0, 0xcf0; 0xcf3, 0xcff; 0xd0d, 0xd0d; 0xd11, 0xd11; 0xd45, 0xd45; 0xd49, 0xd49; 0xd50, 0xd53; 0xd64, 0xd65; 0xd80, 0xd80; 0xd84, 0xd84; 0xd97, 0xd99; 0xdb2, 0xdb2; 0xdbc, 0xdbc; 0xdbe, 0xdbf; 0xdc7, 0xdc9; 0xdcb, 0xdce; 0xdd5, 0xdd5; 0xdd7, 0xdd7; 0xde0, 0xde5; 0xdf0, 0xdf1; 0xdf5, 0xe00; 0xe3b, 0xe3e; 0xe5c, 0xe80; 0xe83, 0xe83; 0xe85, 0xe85; 0xe8b, 0xe8b; 0xea4, 0xea4; 0xea6, 0xea6; 0xebe, 0xebf; 0xec5, 0xec5; 0xec7, 0xec7; 0xece, 0xecf; 0xeda, 0xedb; 0xee0, 0xeff; 0xf48, 0xf48; 0xf6d, 0xf70; 0xf98, 0xf98; 0xfbd, 0xfbd; 0xfcd, 0xfcd; 0xfdb, 0xfff; 0x10c6, 0x10c6; 0x10c8, 0x10cc; 0x10ce, 0x10cf; 0x1249, 0x1249; 0x124e, 0x124f; 0x1257, 0x1257; 0x1259, 0x1259; 0x125e, 0x125f; 0x1289, 0x1289; 0x128e, 0x128f; 0x12b1, 0x12b1; 0x12b6, 0x12b7; 0x12bf, 0x12bf; 0x12c1, 0x12c1; 0x12c6, 0x12c7; 0x12d7, 0x12d7; 0x1311, 0x1311; 0x1316, 0x1317; 0x135b, 0x135c; 0x137d, 0x137f; 0x139a, 0x139f; 0x13f6, 0x13f7; 0x13fe, 0x13ff; 0x169d, 0x169f; 0x16f9, 0x16ff; 0x170d, 0x170d; 0x1715, 0x171f; 0x1737, 0x173f; 0x1754, 0x175f; 0x176d, 0x176d; 0x1771, 0x1771; 0x1774, 0x177f; 0x17de, 0x17df; 0x17ea, 0x17ef; 0x17fa, 0x17ff; 0x180f, 0x180f; 0x181a, 0x181f; 0x1879, 0x187f; 0x18ab, 0x18af; 0x18f6, 0x18ff; 0x191f, 0x191f; 0x192c, 0x192f; 0x193c, 0x193f; 0x1941, 0x1943; 0x196e, 0x196f; 0x1975, 0x197f; 0x19ac, 0x19af; 0x19ca, 0x19cf; 0x19db, 0x19dd; 0x1a1c, 0x1a1d; 0x1a5f, 0x1a5f; 0x1a7d, 0x1a7e; 0x1a8a, 0x1a8f; 0x1a9a, 0x1a9f; 0x1aae, 0x1aaf; 0x1ac1, 0x1aff; 0x1b4c, 0x1b4f; 0x1b7d, 0x1b7f; 0x1bf4, 0x1bfb; 0x1c38, 0x1c3a; 0x1c4a, 0x1c4c; 0x1c89, 0x1c8f; 0x1cbb, 0x1cbc; 0x1cc8, 0x1ccf; 0x1cfb, 0x1cff; 0x1dfa, 0x1dfa; 0x1f16, 0x1f17; 0x1f1e, 0x1f1f; 0x1f46, 0x1f47; 0x1f4e, 0x1f4f; 0x1f58, 0x1f58; 0x1f5a, 0x1f5a; 0x1f5c, 0x1f5c; 0x1f5e, 0x1f5e; 0x1f7e, 0x1f7f; 0x1fb5, 0x1fb5; 0x1fc5, 0x1fc5; 0x1fd4, 0x1fd5; 0x1fdc, 0x1fdc; 0x1ff0, 0x1ff1; 0x1ff5, 0x1ff5; 0x1fff, 0x1fff; 0x2065, 0x2065; 0x2072, 0x2073; 0x208f, 0x208f; 0x209d, 0x209f; 0x20c0, 0x20cf; 0x20f1, 0x20ff; 0x218c, 0x218f; 0x2427, 0x243f; 0x244b, 0x245f; 0x2b74, 0x2b75; 0x2b96, 0x2b96; 0x2c2f, 0x2c2f; 0x2c5f, 0x2c5f; 0x2cf4, 0x2cf8; 0x2d26, 0x2d26; 0x2d28, 0x2d2c; 0x2d2e, 0x2d2f; 0x2d68, 0x2d6e; 0x2d71, 0x2d7e; 0x2d97, 0x2d9f; 0x2da7, 0x2da7; 0x2daf, 0x2daf; 0x2db7, 0x2db7; 0x2dbf, 0x2dbf; 0x2dc7, 0x2dc7; 0x2dcf, 0x2dcf; 0x2dd7, 0x2dd7; 0x2ddf, 0x2ddf; 0x2e53, 0x2e7f; 0x2e9a, 0x2e9a; 0x2ef4, 0x2eff; 0x2fd6, 0x2fef; 0x2ffc, 0x2fff; 0x3040, 0x3040; 0x3097, 0x3098; 0x3100, 0x3104; 0x3130, 0x3130; 0x318f, 0x318f; 0x31e4, 0x31ef; 0x321f, 0x321f; 0x9ffd, 0x9fff; 0xa48d, 0xa48f; 0xa4c7, 0xa4cf; 0xa62c, 0xa63f; 0xa6f8, 0xa6ff; 0xa7c0, 0xa7c1; 0xa7cb, 0xa7f4; 0xa82d, 0xa82f; 0xa83a, 0xa83f; 0xa878, 0xa87f; 0xa8c6, 0xa8cd; 0xa8da, 0xa8df; 0xa954, 0xa95e; 0xa97d, 0xa97f; 0xa9ce, 0xa9ce; 0xa9da, 0xa9dd; 0xa9ff, 0xa9ff; 0xaa37, 0xaa3f; 0xaa4e, 0xaa4f; 0xaa5a, 0xaa5b; 0xaac3, 0xaada; 0xaaf7, 0xab00; 0xab07, 0xab08; 0xab0f, 0xab10; 0xab17, 0xab1f; 0xab27, 0xab27; 0xab2f, 0xab2f; 0xab6c, 0xab6f; 0xabee, 0xabef; 0xabfa, 0xabff; 0xd7a4, 0xd7af; 0xd7c7, 0xd7ca; 0xd7fc, 0xd7ff; 0xfa6e, 0xfa6f; 0xfada, 0xfaff; 0xfb07, 0xfb12; 0xfb18, 0xfb1c; 0xfb37, 0xfb37; 0xfb3d, 0xfb3d; 0xfb3f, 0xfb3f; 0xfb42, 0xfb42; 0xfb45, 0xfb45; 0xfbc2, 0xfbd2; 0xfd40, 0xfd4f; 0xfd90, 0xfd91; 0xfdc8, 0xfdef; 0xfdd0, 0xfdef; 0xfdfe, 0xfdff; 0xfe1a, 0xfe1f; 0xfe53, 0xfe53; 0xfe67, 0xfe67; 0xfe6c, 0xfe6f; 0xfe75, 0xfe75; 0xfefd, 0xfefe; 0xff00, 0xff00; 0xffbf, 0xffc1; 0xffc8, 0xffc9; 0xffd0, 0xffd1; 0xffd8, 0xffd9; 0xffdd, 0xffdf; 0xffe7, 0xffe7; 0xffef, 0xfff8; 0xfff0, 0xfff8; 0xfffe, 0xffff; 0x1000c, 0x1000c; 0x10027, 0x10027; 0x1003b, 0x1003b; 0x1003e, 0x1003e; 0x1004e, 0x1004f; 0x1005e, 0x1007f; 0x100fb, 0x100ff; 0x10103, 0x10106; 0x10134, 0x10136; 0x1018f, 0x1018f; 0x1019d, 0x1019f; 0x101a1, 0x101cf; 0x101fe, 0x1027f; 0x1029d, 0x1029f; 0x102d1, 0x102df; 0x102fc, 0x102ff; 0x10324, 0x1032c; 0x1034b, 0x1034f; 0x1037b, 0x1037f; 0x1039e, 0x1039e; 0x103c4, 0x103c7; 0x103d6, 0x103ff; 0x1049e, 0x1049f; 0x104aa, 0x104af; 0x104d4, 0x104d7; 0x104fc, 0x104ff; 0x10528, 0x1052f; 0x10564, 0x1056e; 0x10570, 0x105ff; 0x10737, 0x1073f; 0x10756, 0x1075f; 0x10768, 0x107ff; 0x10806, 0x10807; 0x10809, 0x10809; 0x10836, 0x10836; 0x10839, 0x1083b; 0x1083d, 0x1083e; 0x10856, 0x10856; 0x1089f, 0x108a6; 0x108b0, 0x108df; 0x108f3, 0x108f3; 0x108f6, 0x108fa; 0x1091c, 0x1091e; 0x1093a, 0x1093e; 0x10940, 0x1097f; 0x109b8, 0x109bb; 0x109d0, 0x109d1; 0x10a04, 0x10a04; 0x10a07, 0x10a0b; 0x10a14, 0x10a14; 0x10a18, 0x10a18; 0x10a36, 0x10a37; 0x10a3b, 0x10a3e; 0x10a49, 0x10a4f; 0x10a59, 0x10a5f; 0x10aa0, 0x10abf; 0x10ae7, 0x10aea; 0x10af7, 0x10aff; 0x10b36, 0x10b38; 0x10b56, 0x10b57; 0x10b73, 0x10b77; 0x10b92, 0x10b98; 0x10b9d, 0x10ba8; 0x10bb0, 0x10bff; 0x10c49, 0x10c7f; 0x10cb3, 0x10cbf; 0x10cf3, 0x10cf9; 0x10d28, 0x10d2f; 0x10d3a, 0x10e5f; 0x10e7f, 0x10e7f; 0x10eaa, 0x10eaa; 0x10eae, 0x10eaf; 0x10eb2, 0x10eff; 0x10f28, 0x10f2f; 0x10f5a, 0x10faf; 0x10fcc, 0x10fdf; 0x10ff7, 0x10fff; 0x1104e, 0x11051; 0x11070, 0x1107e; 0x110c2, 0x110cc; 0x110ce, 0x110cf; 0x110e9, 0x110ef; 0x110fa, 0x110ff; 0x11135, 0x11135; 0x11148, 0x1114f; 0x11177, 0x1117f; 0x111e0, 0x111e0; 0x111f5, 0x111ff; 0x11212, 0x11212; 0x1123f, 0x1127f; 0x11287, 0x11287; 0x11289, 0x11289; 0x1128e, 0x1128e; 0x1129e, 0x1129e; 0x112aa, 0x112af; 0x112eb, 0x112ef; 0x112fa, 0x112ff; 0x11304, 0x11304; 0x1130d, 0x1130e; 0x11311, 0x11312; 0x11329, 0x11329; 0x11331, 0x11331; 0x11334, 0x11334; 0x1133a, 0x1133a; 0x11345, 0x11346; 0x11349, 0x1134a; 0x1134e, 0x1134f; 0x11351, 0x11356; 0x11358, 0x1135c; 0x11364, 0x11365; 0x1136d, 0x1136f; 0x11375, 0x113ff; 0x1145c, 0x1145c; 0x11462, 0x1147f; 0x114c8, 0x114cf; 0x114da, 0x1157f; 0x115b6, 0x115b7; 0x115de, 0x115ff; 0x11645, 0x1164f; 0x1165a, 0x1165f; 0x1166d, 0x1167f; 0x116b9, 0x116bf; 0x116ca, 0x116ff; 0x1171b, 0x1171c; 0x1172c, 0x1172f; 0x11740, 0x117ff; 0x1183c, 0x1189f; 0x118f3, 0x118fe; 0x11907, 0x11908; 0x1190a, 0x1190b; 0x11914, 0x11914; 0x11917, 0x11917; 0x11936, 0x11936; 0x11939, 0x1193a; 0x11947, 0x1194f; 0x1195a, 0x1199f; 0x119a8, 0x119a9; 0x119d8, 0x119d9; 0x119e5, 0x119ff; 0x11a48, 0x11a4f; 0x11aa3, 0x11abf; 0x11af9, 0x11bff; 0x11c09, 0x11c09; 0x11c37, 0x11c37; 0x11c46, 0x11c4f; 0x11c6d, 0x11c6f; 0x11c90, 0x11c91; 0x11ca8, 0x11ca8; 0x11cb7, 0x11cff; 0x11d07, 0x11d07; 0x11d0a, 0x11d0a; 0x11d37, 0x11d39; 0x11d3b, 0x11d3b; 0x11d3e, 0x11d3e; 0x11d48, 0x11d4f; 0x11d5a, 0x11d5f; 0x11d66, 0x11d66; 0x11d69, 0x11d69; 0x11d8f, 0x11d8f; 0x11d92, 0x11d92; 0x11d99, 0x11d9f; 0x11daa, 0x11edf; 0x11ef9, 0x11faf; 0x11fb1, 0x11fbf; 0x11ff2, 0x11ffe; 0x1239a, 0x123ff; 0x1246f, 0x1246f; 0x12475, 0x1247f; 0x12544, 0x12fff; 0x1342f, 0x1342f; 0x13439, 0x143ff; 0x14647, 0x167ff; 0x16a39, 0x16a3f; 0x16a5f, 0x16a5f; 0x16a6a, 0x16a6d; 0x16a70, 0x16acf; 0x16aee, 0x16aef; 0x16af6, 0x16aff; 0x16b46, 0x16b4f; 0x16b5a, 0x16b5a; 0x16b62, 0x16b62; 0x16b78, 0x16b7c; 0x16b90, 0x16e3f; 0x16e9b, 0x16eff; 0x16f4b, 0x16f4e; 0x16f88, 0x16f8e; 0x16fa0, 0x16fdf; 0x16fe5, 0x16fef; 0x16ff2, 0x16fff; 0x187f8, 0x187ff; 0x18cd6, 0x18cff; 0x18d09, 0x1afff; 0x1b11f, 0x1b14f; 0x1b153, 0x1b163; 0x1b168, 0x1b16f; 0x1b2fc, 0x1bbff; 0x1bc6b, 0x1bc6f; 0x1bc7d, 0x1bc7f; 0x1bc89, 0x1bc8f; 0x1bc9a, 0x1bc9b; 0x1bca4, 0x1cfff; 0x1d0f6, 0x1d0ff; 0x1d127, 0x1d128; 0x1d1e9, 0x1d1ff; 0x1d246, 0x1d2df; 0x1d2f4, 0x1d2ff; 0x1d357, 0x1d35f; 0x1d379, 0x1d3ff; 0x1d455, 0x1d455; 0x1d49d, 0x1d49d; 0x1d4a0, 0x1d4a1; 0x1d4a3, 0x1d4a4; 0x1d4a7, 0x1d4a8; 0x1d4ad, 0x1d4ad; 0x1d4ba, 0x1d4ba; 0x1d4bc, 0x1d4bc; 0x1d4c4, 0x1d4c4; 0x1d506, 0x1d506; 0x1d50b, 0x1d50c; 0x1d515, 0x1d515; 0x1d51d, 0x1d51d; 0x1d53a, 0x1d53a; 0x1d53f, 0x1d53f; 0x1d545, 0x1d545; 0x1d547, 0x1d549; 0x1d551, 0x1d551; 0x1d6a6, 0x1d6a7; 0x1d7cc, 0x1d7cd; 0x1da8c, 0x1da9a; 0x1daa0, 0x1daa0; 0x1dab0, 0x1dfff; 0x1e007, 0x1e007; 0x1e019, 0x1e01a; 0x1e022, 0x1e022; 0x1e025, 0x1e025; 0x1e02b, 0x1e0ff; 0x1e12d, 0x1e12f; 0x1e13e, 0x1e13f; 0x1e14a, 0x1e14d; 0x1e150, 0x1e2bf; 0x1e2fa, 0x1e2fe; 0x1e300, 0x1e7ff; 0x1e8c5, 0x1e8c6; 0x1e8d7, 0x1e8ff; 0x1e94c, 0x1e94f; 0x1e95a, 0x1e95d; 0x1e960, 0x1ec70; 0x1ecb5, 0x1ed00; 0x1ed3e, 0x1edff; 0x1ee04, 0x1ee04; 0x1ee20, 0x1ee20; 0x1ee23, 0x1ee23; 0x1ee25, 0x1ee26; 0x1ee28, 0x1ee28; 0x1ee33, 0x1ee33; 0x1ee38, 0x1ee38; 0x1ee3a, 0x1ee3a; 0x1ee3c, 0x1ee41; 0x1ee43, 0x1ee46; 0x1ee48, 0x1ee48; 0x1ee4a, 0x1ee4a; 0x1ee4c, 0x1ee4c; 0x1ee50, 0x1ee50; 0x1ee53, 0x1ee53; 0x1ee55, 0x1ee56; 0x1ee58, 0x1ee58; 0x1ee5a, 0x1ee5a; 0x1ee5c, 0x1ee5c; 0x1ee5e, 0x1ee5e; 0x1ee60, 0x1ee60; 0x1ee63, 0x1ee63; 0x1ee65, 0x1ee66; 0x1ee6b, 0x1ee6b; 0x1ee73, 0x1ee73; 0x1ee78, 0x1ee78; 0x1ee7d, 0x1ee7d; 0x1ee7f, 0x1ee7f; 0x1ee8a, 0x1ee8a; 0x1ee9c, 0x1eea0; 0x1eea4, 0x1eea4; 0x1eeaa, 0x1eeaa; 0x1eebc, 0x1eeef; 0x1eef2, 0x1efff; 0x1f02c, 0x1f02f; 0x1f094, 0x1f09f; 0x1f0af, 0x1f0b0; 0x1f0c0, 0x1f0c0; 0x1f0d0, 0x1f0d0; 0x1f0f6, 0x1f0ff; 0x1f1ae, 0x1f1e5; 0x1f203, 0x1f20f; 0x1f23c, 0x1f23f; 0x1f249, 0x1f24f; 0x1f252, 0x1f25f; 0x1f266, 0x1f2ff; 0x1f6d8, 0x1f6df; 0x1f6ed, 0x1f6ef; 0x1f6fd, 0x1f6ff; 0x1f774, 0x1f77f; 0x1f7d9, 0x1f7df; 0x1f7ec, 0x1f7ff; 0x1f80c, 0x1f80f; 0x1f848, 0x1f84f; 0x1f85a, 0x1f85f; 0x1f888, 0x1f88f; 0x1f8ae, 0x1f8af; 0x1f8b2, 0x1f8ff; 0x1f979, 0x1f979; 0x1f9cc, 0x1f9cc; 0x1fa54, 0x1fa5f; 0x1fa6e, 0x1fa6f; 0x1fa75, 0x1fa77; 0x1fa7b, 0x1fa7f; 0x1fa87, 0x1fa8f; 0x1faa9, 0x1faaf; 0x1fab7, 0x1fabf; 0x1fac3, 0x1facf; 0x1fad7, 0x1faff; 0x1fb93, 0x1fb93; 0x1fbcb, 0x1fbef; 0x1fbfa, 0x1ffff; 0x1fffe, 0x1ffff; 0x2a6de, 0x2a6ff; 0x2b735, 0x2b73f; 0x2b81e, 0x2b81f; 0x2cea2, 0x2ceaf; 0x2ebe1, 0x2f7ff; 0x2fa1e, 0x2ffff; 0x2fffe, 0x2ffff; 0x3134b, 0xe0000; 0x3fffe, 0x3ffff; 0x4fffe, 0x4ffff; 0x5fffe, 0x5ffff; 0x6fffe, 0x6ffff; 0x7fffe, 0x7ffff; 0x8fffe, 0x8ffff; 0x9fffe, 0x9ffff; 0xafffe, 0xaffff; 0xbfffe, 0xbffff; 0xcfffe, 0xcffff; 0xdfffe, 0xdffff; 0xe0000, 0xe0000; 0xe0002, 0xe001f; 0xe0080, 0xe00ff; 0x10fffe, 0x10ffff; 0xffffe, 0xfffff; 0xefffe, 0xeffff; 0xe01f0, 0xeffff; 0xe01f0, 0xe0fff] let co = [0x100000, 0x10fffd; 0xf0000, 0xffffd; 0xe000, 0xf8ff] let cs = [0xd800, 0xdfff] let ll = [0x61, 0x7a; 0xb5, 0xb5; 0xdf, 0xf6; 0xf8, 0xff; 0x101, 0x101; 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 0x109, 0x109; 0x10b, 0x10b; 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 0x113, 0x113; 0x115, 0x115; 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 0x11d, 0x11d; 0x11f, 0x11f; 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 0x127, 0x127; 0x129, 0x129; 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 0x131, 0x131; 0x133, 0x133; 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 0x13c, 0x13c; 0x13e, 0x13e; 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 0x146, 0x146; 0x148, 0x149; 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 0x151, 0x151; 0x153, 0x153; 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 0x15b, 0x15b; 0x15d, 0x15d; 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 0x165, 0x165; 0x167, 0x167; 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 0x16f, 0x16f; 0x171, 0x171; 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 0x17a, 0x17a; 0x17c, 0x17c; 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 0x188, 0x188; 0x18c, 0x18d; 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 0x19e, 0x19e; 0x1a1, 0x1a1; 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 0x1aa, 0x1ab; 0x1ad, 0x1ad; 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 0x1b9, 0x1ba; 0x1bd, 0x1bf; 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 0x1ce, 0x1ce; 0x1d0, 0x1d0; 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 0x1d8, 0x1d8; 0x1da, 0x1da; 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 0x1e3, 0x1e3; 0x1e5, 0x1e5; 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 0x1ed, 0x1ed; 0x1ef, 0x1f0; 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 0x1fb, 0x1fb; 0x1fd, 0x1fd; 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 0x205, 0x205; 0x207, 0x207; 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 0x20f, 0x20f; 0x211, 0x211; 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 0x219, 0x219; 0x21b, 0x21b; 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 0x223, 0x223; 0x225, 0x225; 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 0x22d, 0x22d; 0x22f, 0x22f; 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 0x23f, 0x240; 0x242, 0x242; 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 0x24d, 0x24d; 0x24f, 0x293; 0x295, 0x2af; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37b, 0x37d; 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 0x10d0, 0x10fa; 0x10fd, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1d00, 0x1d2b; 0x1d6b, 0x1d77; 0x1d79, 0x1d9a; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 0x1e05, 0x1e05; 0x1e07, 0x1e07; 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 0x1e23, 0x1e23; 0x1e25, 0x1e25; 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 0x1e37, 0x1e37; 0x1e39, 0x1e39; 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 0x1e41, 0x1e41; 0x1e43, 0x1e43; 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 0x1e55, 0x1e55; 0x1e57, 0x1e57; 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 0x1e73, 0x1e73; 0x1e75, 0x1e75; 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 0x1e87, 0x1e87; 0x1e89, 0x1e89; 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 0x1e91, 0x1e91; 0x1e93, 0x1e93; 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 0x1efd, 0x1efd; 0x1eff, 0x1f07; 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 0x1f40, 0x1f45; 0x1f50, 0x1f57; 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 0x210a, 0x210a; 0x210e, 0x210f; 0x2113, 0x2113; 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 0x2146, 0x2149; 0x214e, 0x214e; 0x2184, 0x2184; 0x2c30, 0x2c5e; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 0x2c76, 0x2c7b; 0x2c81, 0x2c81; 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 0x2c93, 0x2c93; 0x2c95, 0x2c95; 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 0xa647, 0xa647; 0xa649, 0xa649; 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 0xa651, 0xa651; 0xa653, 0xa653; 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 0xa65b, 0xa65b; 0xa65d, 0xa65d; 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 0xa665, 0xa665; 0xa667, 0xa667; 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 0xa681, 0xa681; 0xa683, 0xa683; 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 0xa68b, 0xa68b; 0xa68d, 0xa68d; 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 0xa695, 0xa695; 0xa697, 0xa697; 0xa699, 0xa699; 0xa69b, 0xa69b; 0xa723, 0xa723; 0xa725, 0xa725; 0xa727, 0xa727; 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 0xa72f, 0xa731; 0xa733, 0xa733; 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 0xa73b, 0xa73b; 0xa73d, 0xa73d; 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 0xa745, 0xa745; 0xa747, 0xa747; 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 0xa74f, 0xa74f; 0xa751, 0xa751; 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 0xa759, 0xa759; 0xa75b, 0xa75b; 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 0xa763, 0xa763; 0xa765, 0xa765; 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 0xa76d, 0xa76d; 0xa76f, 0xa76f; 0xa771, 0xa778; 0xa77a, 0xa77a; 0xa77c, 0xa77c; 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 0xa785, 0xa785; 0xa787, 0xa787; 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 0xa793, 0xa795; 0xa797, 0xa797; 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 0xa7bf, 0xa7bf; 0xa7c3, 0xa7c3; 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 0xa7f6, 0xa7f6; 0xa7fa, 0xa7fa; 0xab30, 0xab5a; 0xab60, 0xab68; 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 0x10428, 0x1044f; 0x104d8, 0x104fb; 0x10cc0, 0x10cf2; 0x118c0, 0x118df; 0x16e60, 0x16e7f; 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 0x1d770, 0x1d788; 0x1e922, 0x1e943; 0x1d7cb, 0x1d7cb; 0x1d7c4, 0x1d7c9; 0x1d7aa, 0x1d7c2; 0x1d78a, 0x1d78f] let lm = [0x2b0, 0x2b8; 0x2b0, 0x2c1; 0x2b2, 0x2b2; 0x2c0, 0x2c1; 0x2c6, 0x2d1; 0x2d0, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x374, 0x374; 0x37a, 0x37a; 0x559, 0x559; 0x640, 0x640; 0x6e5, 0x6e6; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 0x971, 0x971; 0xe46, 0xe46; 0xec6, 0xec6; 0x10fc, 0x10fc; 0x17d7, 0x17d7; 0x1843, 0x1843; 0x1aa7, 0x1aa7; 0x1c78, 0x1c7d; 0x1c7b, 0x1c7b; 0x1d2c, 0x1d6a; 0x1d62, 0x1d62; 0x1d78, 0x1d78; 0x1d9b, 0x1dbf; 0x1da4, 0x1da4; 0x1da8, 0x1da8; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2c7c, 0x2c7c; 0x2c7c, 0x2c7d; 0x2d6f, 0x2d6f; 0x2e2f, 0x2e2f; 0x3005, 0x3005; 0x3031, 0x3035; 0x303b, 0x303b; 0x309d, 0x309e; 0x30fc, 0x30fc; 0x30fc, 0x30fe; 0xa015, 0xa015; 0xa4f8, 0xa4fd; 0xa60c, 0xa60c; 0xa67f, 0xa67f; 0xa69c, 0xa69d; 0xa717, 0xa71f; 0xa770, 0xa770; 0xa788, 0xa788; 0xa7f8, 0xa7f9; 0xa9cf, 0xa9cf; 0xa9e6, 0xa9e6; 0xaa70, 0xaa70; 0xaadd, 0xaadd; 0xaaf3, 0xaaf4; 0xab5c, 0xab5f; 0xab69, 0xab69; 0xff70, 0xff70; 0xff9e, 0xff9f; 0x16b40, 0x16b43; 0x16b42, 0x16b43; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x1e94b, 0x1e94b; 0x1e13c, 0x1e13d; 0x1e137, 0x1e13d] let lo = [0xaa, 0xaa; 0xba, 0xba; 0x1bb, 0x1bb; 0x1c0, 0x1c3; 0x294, 0x294; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x641, 0x64a; 0x66e, 0x66f; 0x671, 0x6d3; 0x673, 0x673; 0x6d5, 0x6d5; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x800, 0x815; 0x840, 0x858; 0x860, 0x86a; 0x8a0, 0x8b4; 0x8b6, 0x8c7; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcde, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe32; 0xe32, 0xe33; 0xe40, 0xe44; 0xe40, 0xe45; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb2; 0xeb2, 0xeb3; 0xebd, 0xebd; 0xec0, 0xec4; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x1100, 0x1248; 0x115f, 0x1160; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16f1, 0x16f8; 0x1700, 0x170c; 0x170e, 0x1711; 0x1720, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17a3, 0x17a4; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1844, 0x1878; 0x1880, 0x1884; 0x1887, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x19b5, 0x19b7; 0x19ba, 0x19ba; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1b05, 0x1b33; 0x1b45, 0x1b4b; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x2135, 0x2138; 0x2d30, 0x2d67; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3006, 0x3006; 0x303c, 0x303c; 0x3041, 0x3096; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x3164, 0x3164; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9ffc; 0xa000, 0xa014; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa500, 0xa60b; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa66e, 0xa66e; 0xa6a0, 0xa6e5; 0xa78f, 0xa78f; 0xa7f7, 0xa7f7; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9e0, 0xa9e4; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaab9; 0xaab9, 0xaabd; 0xaabb, 0xaabc; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa0e, 0xfa0f; 0xfa11, 0xfa11; 0xfa13, 0xfa14; 0xfa1f, 0xfa1f; 0xfa21, 0xfa21; 0xfa23, 0xfa24; 0xfa27, 0xfa29; 0xfa70, 0xfad9; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfbd3, 0xfd3d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe76, 0xfefc; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff66, 0xff6f; 0xff71, 0xff9d; 0xffa0, 0xffa0; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10342, 0x10349; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x10450, 0x1049d; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10d00, 0x10d23; 0x10d22, 0x10d23; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x1135d; 0x1135d, 0x11361; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11800, 0x1182b; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ac0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12480, 0x12543; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b11e; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1e100, 0x1e12c; 0x1e14e, 0x1e14e; 0x1e2c0, 0x1e2eb; 0x1e800, 0x1e8c4; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6dd; 0x2a700, 0x2b734; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0; 0x2b820, 0x2cea1; 0x2b740, 0x2b81d] let lt = [0x1c5, 0x1c5; 0x1c8, 0x1c8; 0x1cb, 0x1cb; 0x1f2, 0x1f2; 0x1f88, 0x1f8f; 0x1ffc, 0x1ffc; 0x1fcc, 0x1fcc; 0x1fbc, 0x1fbc; 0x1fa8, 0x1faf; 0x1f98, 0x1f9f] let lu = [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x13a0, 0x13f5; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 0x2145, 0x2145; 0x2183, 0x2183; 0x2c00, 0x2c2e; 0x2c60, 0x2c60; 0x2c62, 0x2c64; 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 0x2c84, 0x2c84; 0x2c86, 0x2c86; 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 0x2cac, 0x2cac; 0x2cae, 0x2cae; 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 0x2cf2, 0x2cf2; 0xa640, 0xa640; 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 0xa648, 0xa648; 0xa64a, 0xa64a; 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 0xa652, 0xa652; 0xa654, 0xa654; 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 0xa65c, 0xa65c; 0xa65e, 0xa65e; 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 0xa666, 0xa666; 0xa668, 0xa668; 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 0xa682, 0xa682; 0xa684, 0xa684; 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 0xa68c, 0xa68c; 0xa68e, 0xa68e; 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 0xa696, 0xa696; 0xa698, 0xa698; 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 0xa726, 0xa726; 0xa728, 0xa728; 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 0xa732, 0xa732; 0xa734, 0xa734; 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 0xa73c, 0xa73c; 0xa73e, 0xa73e; 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 0xa746, 0xa746; 0xa748, 0xa748; 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 0xa750, 0xa750; 0xa752, 0xa752; 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 0xa75a, 0xa75a; 0xa75c, 0xa75c; 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 0xa764, 0xa764; 0xa766, 0xa766; 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 0xa76e, 0xa76e; 0xa779, 0xa779; 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 0xa782, 0xa782; 0xa784, 0xa784; 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 0xa790, 0xa790; 0xa792, 0xa792; 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 0xa79c, 0xa79c; 0xa79e, 0xa79e; 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 0xa7c9, 0xa7c9; 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 0x104b0, 0x104d3; 0x10c80, 0x10cb2; 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1e900, 0x1e921; 0x1d7ca, 0x1d7ca; 0x1d790, 0x1d7a8] let mc = [0x903, 0x903; 0x93b, 0x93b; 0x93e, 0x940; 0x949, 0x94c; 0x94e, 0x94f; 0x982, 0x983; 0x9be, 0x9be; 0x9be, 0x9c0; 0x9bf, 0x9c0; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9d7, 0x9d7; 0xa03, 0xa03; 0xa3e, 0xa40; 0xa83, 0xa83; 0xabe, 0xac0; 0xac9, 0xac9; 0xacb, 0xacc; 0xb02, 0xb03; 0xb3e, 0xb3e; 0xb40, 0xb40; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb57, 0xb57; 0xbbe, 0xbbe; 0xbbe, 0xbbf; 0xbbf, 0xbbf; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd7, 0xbd7; 0xc01, 0xc03; 0xc41, 0xc44; 0xc82, 0xc83; 0xcbe, 0xcbe; 0xcc0, 0xcc1; 0xcc0, 0xcc4; 0xcc2, 0xcc2; 0xcc3, 0xcc4; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xcd5, 0xcd6; 0xd02, 0xd03; 0xd3e, 0xd3e; 0xd3e, 0xd40; 0xd3f, 0xd40; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd57, 0xd57; 0xd82, 0xd83; 0xdcf, 0xdcf; 0xdcf, 0xdd1; 0xdd0, 0xdd1; 0xdd8, 0xdde; 0xdd8, 0xddf; 0xddf, 0xddf; 0xdf2, 0xdf3; 0xf3e, 0xf3f; 0xf7f, 0xf7f; 0x102b, 0x102c; 0x1031, 0x1031; 0x1038, 0x1038; 0x103b, 0x103c; 0x1056, 0x1057; 0x1062, 0x1064; 0x1063, 0x1064; 0x1067, 0x106d; 0x1069, 0x106d; 0x1083, 0x1084; 0x1087, 0x108c; 0x108f, 0x108f; 0x109a, 0x109b; 0x109a, 0x109c; 0x17b6, 0x17b6; 0x17be, 0x17c5; 0x17c7, 0x17c8; 0x1923, 0x1926; 0x1929, 0x192b; 0x1930, 0x1931; 0x1933, 0x1938; 0x1a19, 0x1a1a; 0x1a55, 0x1a55; 0x1a57, 0x1a57; 0x1a61, 0x1a61; 0x1a63, 0x1a64; 0x1a6d, 0x1a72; 0x1b04, 0x1b04; 0x1b35, 0x1b35; 0x1b3b, 0x1b3b; 0x1b3d, 0x1b41; 0x1b43, 0x1b43; 0x1b43, 0x1b44; 0x1b44, 0x1b44; 0x1b82, 0x1b82; 0x1ba1, 0x1ba1; 0x1ba6, 0x1ba7; 0x1baa, 0x1baa; 0x1be7, 0x1be7; 0x1bea, 0x1bec; 0x1bee, 0x1bee; 0x1bf2, 0x1bf3; 0x1c24, 0x1c2b; 0x1c34, 0x1c35; 0x1ce1, 0x1ce1; 0x1cf7, 0x1cf7; 0x302e, 0x302f; 0xa823, 0xa824; 0xa827, 0xa827; 0xa880, 0xa881; 0xa8b4, 0xa8c3; 0xa952, 0xa952; 0xa952, 0xa953; 0xa953, 0xa953; 0xa983, 0xa983; 0xa9b4, 0xa9b5; 0xa9ba, 0xa9bb; 0xa9be, 0xa9bf; 0xa9be, 0xa9c0; 0xa9c0, 0xa9c0; 0xaa2f, 0xaa30; 0xaa33, 0xaa34; 0xaa4d, 0xaa4d; 0xaa7b, 0xaa7b; 0xaa7d, 0xaa7d; 0xaaeb, 0xaaeb; 0xaaee, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabe4; 0xabe6, 0xabe7; 0xabe9, 0xabea; 0xabec, 0xabec; 0x11000, 0x11000; 0x11002, 0x11002; 0x11082, 0x11082; 0x110b0, 0x110b2; 0x110b7, 0x110b8; 0x1112c, 0x1112c; 0x11145, 0x11146; 0x11182, 0x11182; 0x111b3, 0x111b5; 0x111bf, 0x111bf; 0x111bf, 0x111c0; 0x111c0, 0x111c0; 0x111ce, 0x111ce; 0x1122c, 0x1122e; 0x11232, 0x11233; 0x11235, 0x11235; 0x112e0, 0x112e2; 0x11302, 0x11303; 0x1133e, 0x1133e; 0x1133e, 0x1133f; 0x1133f, 0x1133f; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x1134b, 0x1134d; 0x1134d, 0x1134d; 0x11357, 0x11357; 0x11362, 0x11363; 0x11435, 0x11437; 0x11440, 0x11441; 0x11445, 0x11445; 0x114b0, 0x114b0; 0x114b0, 0x114b2; 0x114b1, 0x114b2; 0x114b9, 0x114b9; 0x114bb, 0x114bc; 0x114bb, 0x114be; 0x114bd, 0x114bd; 0x114be, 0x114be; 0x114c1, 0x114c1; 0x115af, 0x115af; 0x115af, 0x115b1; 0x115b0, 0x115b1; 0x115b8, 0x115bb; 0x115be, 0x115be; 0x11630, 0x11632; 0x1163b, 0x1163c; 0x1163e, 0x1163e; 0x116ac, 0x116ac; 0x116ae, 0x116af; 0x116b6, 0x116b6; 0x11720, 0x11721; 0x11726, 0x11726; 0x1182c, 0x1182e; 0x11838, 0x11838; 0x11930, 0x11930; 0x11930, 0x11935; 0x11931, 0x11935; 0x11937, 0x11938; 0x1193d, 0x1193d; 0x11940, 0x11940; 0x11942, 0x11942; 0x119d1, 0x119d3; 0x119dc, 0x119df; 0x119e4, 0x119e4; 0x11a39, 0x11a39; 0x11a57, 0x11a58; 0x11a97, 0x11a97; 0x11c2f, 0x11c2f; 0x11c3e, 0x11c3e; 0x11ca9, 0x11ca9; 0x11cb1, 0x11cb1; 0x11cb4, 0x11cb4; 0x11d8a, 0x11d8e; 0x11d93, 0x11d94; 0x11d96, 0x11d96; 0x11ef5, 0x11ef6; 0x16f51, 0x16f87; 0x16ff0, 0x16ff1; 0x1d165, 0x1d165; 0x1d165, 0x1d166; 0x1d166, 0x1d166; 0x1d16d, 0x1d16d; 0x1d16d, 0x1d172; 0x1d16e, 0x1d172] let me = [0xa670, 0xa672; 0x20e2, 0x20e4; 0x20dd, 0x20e0; 0x1abe, 0x1abe; 0x488, 0x489] let mn = [0x300, 0x34e; 0x300, 0x36f; 0x345, 0x345; 0x34f, 0x34f; 0x350, 0x357; 0x35d, 0x362; 0x483, 0x487; 0x591, 0x5a1; 0x591, 0x5bd; 0x5a3, 0x5bd; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c4; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x652; 0x64b, 0x657; 0x64b, 0x65f; 0x657, 0x658; 0x659, 0x65f; 0x670, 0x670; 0x6d6, 0x6dc; 0x6df, 0x6e0; 0x6df, 0x6e4; 0x6e1, 0x6e4; 0x6e7, 0x6e8; 0x6ea, 0x6ec; 0x6ea, 0x6ed; 0x6ed, 0x6ed; 0x711, 0x711; 0x730, 0x73f; 0x730, 0x74a; 0x7a6, 0x7b0; 0x7eb, 0x7f3; 0x7fd, 0x7fd; 0x816, 0x817; 0x816, 0x819; 0x818, 0x819; 0x81b, 0x823; 0x825, 0x827; 0x829, 0x82c; 0x829, 0x82d; 0x859, 0x85b; 0x8d3, 0x8e1; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8e3, 0x8fe; 0x8e3, 0x902; 0x8f0, 0x902; 0x93a, 0x93a; 0x93c, 0x93c; 0x941, 0x948; 0x94d, 0x94d; 0x951, 0x954; 0x951, 0x957; 0x955, 0x957; 0x962, 0x963; 0x981, 0x981; 0x9bc, 0x9bc; 0x9c1, 0x9c4; 0x9cd, 0x9cd; 0x9e2, 0x9e3; 0x9fe, 0x9fe; 0xa01, 0xa02; 0xa3c, 0xa3c; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa4b, 0xa4d; 0xa4d, 0xa4d; 0xa51, 0xa51; 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa82; 0xabc, 0xabc; 0xac1, 0xac5; 0xac7, 0xac8; 0xacd, 0xacd; 0xae2, 0xae3; 0xafa, 0xafc; 0xafa, 0xaff; 0xafd, 0xaff; 0xb01, 0xb01; 0xb3c, 0xb3c; 0xb3f, 0xb3f; 0xb41, 0xb44; 0xb4d, 0xb4d; 0xb55, 0xb55; 0xb55, 0xb56; 0xb56, 0xb56; 0xb62, 0xb63; 0xb82, 0xb82; 0xbc0, 0xbc0; 0xbcd, 0xbcd; 0xc00, 0xc00; 0xc04, 0xc04; 0xc3e, 0xc40; 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc4a, 0xc4d; 0xc4d, 0xc4d; 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc81; 0xcbc, 0xcbc; 0xcbf, 0xcbf; 0xcc6, 0xcc6; 0xccc, 0xccc; 0xccc, 0xccd; 0xccd, 0xccd; 0xce2, 0xce3; 0xd00, 0xd01; 0xd3b, 0xd3c; 0xd41, 0xd44; 0xd4d, 0xd4d; 0xd62, 0xd63; 0xd81, 0xd81; 0xdca, 0xdca; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xe31, 0xe31; 0xe34, 0xe3a; 0xe3a, 0xe3a; 0xe47, 0xe4c; 0xe47, 0xe4e; 0xe4d, 0xe4d; 0xe4e, 0xe4e; 0xeb1, 0xeb1; 0xeb4, 0xeb9; 0xeb4, 0xebc; 0xeba, 0xeba; 0xebb, 0xebc; 0xec8, 0xecc; 0xec8, 0xecd; 0xecd, 0xecd; 0xf18, 0xf19; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 0xf71, 0xf7e; 0xf77, 0xf77; 0xf79, 0xf79; 0xf80, 0xf81; 0xf80, 0xf84; 0xf82, 0xf84; 0xf84, 0xf84; 0xf86, 0xf87; 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x102d, 0x1030; 0x1032, 0x1036; 0x1032, 0x1037; 0x1037, 0x1037; 0x1039, 0x103a; 0x103d, 0x103e; 0x1058, 0x1059; 0x105e, 0x1060; 0x1071, 0x1074; 0x1082, 0x1082; 0x1085, 0x1086; 0x108d, 0x108d; 0x109d, 0x109d; 0x135d, 0x135f; 0x1712, 0x1713; 0x1712, 0x1714; 0x1714, 0x1714; 0x1732, 0x1733; 0x1732, 0x1734; 0x1734, 0x1734; 0x1752, 0x1753; 0x1772, 0x1773; 0x17b4, 0x17b5; 0x17b7, 0x17bd; 0x17c6, 0x17c6; 0x17c9, 0x17d3; 0x17d2, 0x17d2; 0x17dd, 0x17dd; 0x180b, 0x180d; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x1922; 0x1927, 0x1928; 0x1932, 0x1932; 0x1939, 0x193b; 0x1a17, 0x1a18; 0x1a1b, 0x1a1b; 0x1a56, 0x1a56; 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a62, 0x1a62; 0x1a65, 0x1a6c; 0x1a73, 0x1a74; 0x1a73, 0x1a7c; 0x1a75, 0x1a7c; 0x1a7f, 0x1a7f; 0x1ab0, 0x1abd; 0x1abf, 0x1ac0; 0x1b00, 0x1b03; 0x1b34, 0x1b34; 0x1b36, 0x1b3a; 0x1b3c, 0x1b3c; 0x1b42, 0x1b42; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 0x1ba2, 0x1ba5; 0x1ba8, 0x1ba9; 0x1bab, 0x1bab; 0x1bab, 0x1bad; 0x1bac, 0x1bad; 0x1be6, 0x1be6; 0x1be8, 0x1be9; 0x1bed, 0x1bed; 0x1bef, 0x1bf1; 0x1c2c, 0x1c33; 0x1c36, 0x1c36; 0x1c36, 0x1c37; 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce2, 0x1ce8; 0x1ced, 0x1ced; 0x1cf4, 0x1cf4; 0x1cf8, 0x1cf9; 0x1dc0, 0x1df9; 0x1dc4, 0x1dcf; 0x1de7, 0x1df4; 0x1df5, 0x1df9; 0x1dfb, 0x1dff; 0x1dfd, 0x1dff; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20e5, 0x20f0; 0x20eb, 0x20ef; 0x2cef, 0x2cf1; 0x2d7f, 0x2d7f; 0x2de0, 0x2dff; 0x302a, 0x302d; 0x3099, 0x309a; 0xa66f, 0xa66f; 0xa674, 0xa67b; 0xa674, 0xa67d; 0xa67c, 0xa67d; 0xa69e, 0xa69f; 0xa6f0, 0xa6f1; 0xa802, 0xa802; 0xa806, 0xa806; 0xa80b, 0xa80b; 0xa825, 0xa826; 0xa82c, 0xa82c; 0xa8c4, 0xa8c4; 0xa8c4, 0xa8c5; 0xa8c5, 0xa8c5; 0xa8e0, 0xa8f1; 0xa8ff, 0xa8ff; 0xa926, 0xa92a; 0xa926, 0xa92d; 0xa92b, 0xa92d; 0xa947, 0xa951; 0xa980, 0xa982; 0xa9b3, 0xa9b3; 0xa9b6, 0xa9b9; 0xa9bc, 0xa9bd; 0xa9e5, 0xa9e5; 0xaa29, 0xaa2e; 0xaa31, 0xaa32; 0xaa35, 0xaa36; 0xaa43, 0xaa43; 0xaa4c, 0xaa4c; 0xaa7c, 0xaa7c; 0xaab0, 0xaab0; 0xaab2, 0xaab4; 0xaab7, 0xaab8; 0xaabe, 0xaabe; 0xaabe, 0xaabf; 0xaabf, 0xaabf; 0xaac1, 0xaac1; 0xaaec, 0xaaed; 0xaaf6, 0xaaf6; 0xabe5, 0xabe5; 0xabe8, 0xabe8; 0xabed, 0xabed; 0xfb1e, 0xfb1e; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0x101fd, 0x101fd; 0x102e0, 0x102e0; 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10ae5, 0x10ae6; 0x10d24, 0x10d27; 0x10eab, 0x10eac; 0x10f46, 0x10f50; 0x11001, 0x11001; 0x11038, 0x11045; 0x11038, 0x11046; 0x11046, 0x11046; 0x1107f, 0x1107f; 0x1107f, 0x11081; 0x110b3, 0x110b6; 0x110b9, 0x110b9; 0x110b9, 0x110ba; 0x11100, 0x11102; 0x11127, 0x1112b; 0x1112d, 0x11132; 0x1112d, 0x11134; 0x11133, 0x11134; 0x11173, 0x11173; 0x11180, 0x11181; 0x111b6, 0x111be; 0x111c9, 0x111cc; 0x111ca, 0x111cc; 0x111cf, 0x111cf; 0x1122f, 0x11231; 0x11234, 0x11234; 0x11236, 0x11236; 0x11236, 0x11237; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x112df, 0x112df; 0x112e3, 0x112e8; 0x112e3, 0x112ea; 0x112e9, 0x112ea; 0x112ea, 0x112ea; 0x11300, 0x11301; 0x1133b, 0x1133c; 0x1133c, 0x1133c; 0x11340, 0x11340; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11438, 0x1143f; 0x11442, 0x11442; 0x11442, 0x11444; 0x11443, 0x11444; 0x11446, 0x11446; 0x1145e, 0x1145e; 0x114b3, 0x114b8; 0x114ba, 0x114ba; 0x114bf, 0x114c0; 0x114c2, 0x114c2; 0x114c2, 0x114c3; 0x115b2, 0x115b5; 0x115bc, 0x115bd; 0x115bf, 0x115bf; 0x115bf, 0x115c0; 0x115dc, 0x115dd; 0x11633, 0x1163a; 0x1163d, 0x1163d; 0x1163f, 0x1163f; 0x1163f, 0x11640; 0x11640, 0x11640; 0x116ab, 0x116ab; 0x116ad, 0x116ad; 0x116b0, 0x116b5; 0x116b7, 0x116b7; 0x1171d, 0x1171f; 0x11722, 0x11725; 0x11727, 0x1172a; 0x11727, 0x1172b; 0x1172b, 0x1172b; 0x1182f, 0x11837; 0x11839, 0x11839; 0x11839, 0x1183a; 0x1193b, 0x1193c; 0x1193e, 0x1193e; 0x11943, 0x11943; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119e0, 0x119e0; 0x11a01, 0x11a0a; 0x11a33, 0x11a38; 0x11a34, 0x11a34; 0x11a35, 0x11a38; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 0x11a51, 0x11a56; 0x11a59, 0x11a5b; 0x11a8a, 0x11a96; 0x11a98, 0x11a98; 0x11a98, 0x11a99; 0x11a99, 0x11a99; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3f, 0x11c3f; 0x11c92, 0x11ca7; 0x11caa, 0x11cb0; 0x11cb2, 0x11cb3; 0x11cb5, 0x11cb6; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d3f, 0x11d45; 0x11d42, 0x11d42; 0x11d43, 0x11d43; 0x11d44, 0x11d45; 0x11d47, 0x11d47; 0x11d90, 0x11d91; 0x11d95, 0x11d95; 0x11d97, 0x11d97; 0x11ef3, 0x11ef4; 0x16af0, 0x16af4; 0x16b30, 0x16b36; 0x16f4f, 0x16f4f; 0x16f8f, 0x16f92; 0x16fe4, 0x16fe4; 0x1bc9d, 0x1bc9e; 0x1bc9e, 0x1bc9e; 0x1d167, 0x1d169; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e130, 0x1e136; 0x1e2ec, 0x1e2ef; 0x1e8d0, 0x1e8d6; 0x1e944, 0x1e946; 0x1e944, 0x1e94a; 0xe0100, 0xe01ef; 0x1e948, 0x1e94a; 0x1e947, 0x1e947] let nd = [0x30, 0x39; 0x660, 0x669; 0x6f0, 0x6f9; 0x7c0, 0x7c9; 0x966, 0x96f; 0x9e6, 0x9ef; 0xa66, 0xa6f; 0xae6, 0xaef; 0xb66, 0xb6f; 0xbe6, 0xbef; 0xc66, 0xc6f; 0xce6, 0xcef; 0xd66, 0xd6f; 0xde6, 0xdef; 0xe50, 0xe59; 0xed0, 0xed9; 0xf20, 0xf29; 0x1040, 0x1049; 0x1090, 0x1099; 0x17e0, 0x17e9; 0x1810, 0x1819; 0x1946, 0x194f; 0x19d0, 0x19d9; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 0x1b50, 0x1b59; 0x1bb0, 0x1bb9; 0x1c40, 0x1c49; 0x1c50, 0x1c59; 0xa620, 0xa629; 0xa8d0, 0xa8d9; 0xa900, 0xa909; 0xa9d0, 0xa9d9; 0xa9f0, 0xa9f9; 0xaa50, 0xaa59; 0xabf0, 0xabf9; 0xff10, 0xff19; 0x104a0, 0x104a9; 0x10d30, 0x10d39; 0x11066, 0x1106f; 0x110f0, 0x110f9; 0x11136, 0x1113f; 0x111d0, 0x111d9; 0x112f0, 0x112f9; 0x11450, 0x11459; 0x114d0, 0x114d9; 0x11650, 0x11659; 0x116c0, 0x116c9; 0x11730, 0x11739; 0x118e0, 0x118e9; 0x11950, 0x11959; 0x11c50, 0x11c59; 0x11d50, 0x11d59; 0x11da0, 0x11da9; 0x16a60, 0x16a69; 0x16b50, 0x16b59; 0x1d7ce, 0x1d7ff; 0x1e140, 0x1e149; 0x1e2f0, 0x1e2f9; 0x1e950, 0x1e959; 0x1fbf0, 0x1fbf9] let nl = [0x16ee, 0x16f0; 0x2160, 0x216f; 0x2160, 0x217f; 0x2160, 0x2182; 0x2170, 0x217f; 0x2185, 0x2188; 0x3007, 0x3007; 0x3021, 0x3029; 0x3038, 0x303a; 0xa6e6, 0xa6ef; 0x12400, 0x1246e; 0x103d1, 0x103d5; 0x1034a, 0x1034a; 0x10341, 0x10341; 0x10140, 0x10174] let no = [0xb2, 0xb3; 0xb9, 0xb9; 0xbc, 0xbe; 0x9f4, 0x9f9; 0xb72, 0xb77; 0xbf0, 0xbf2; 0xc78, 0xc7e; 0xd58, 0xd5e; 0xd70, 0xd78; 0xf2a, 0xf33; 0x1369, 0x1371; 0x1369, 0x137c; 0x17f0, 0x17f9; 0x19da, 0x19da; 0x2070, 0x2070; 0x2074, 0x2079; 0x2080, 0x2089; 0x2150, 0x215f; 0x2189, 0x2189; 0x2460, 0x249b; 0x24ea, 0x24ff; 0x2776, 0x2793; 0x2cfd, 0x2cfd; 0x3192, 0x3195; 0x3220, 0x3229; 0x3248, 0x324f; 0x3251, 0x325f; 0x3280, 0x3289; 0x32b1, 0x32bf; 0xa830, 0xa835; 0x10107, 0x10133; 0x10175, 0x10178; 0x1018a, 0x1018b; 0x102e1, 0x102fb; 0x10320, 0x10323; 0x10858, 0x1085f; 0x10879, 0x1087f; 0x108a7, 0x108af; 0x108fb, 0x108ff; 0x10916, 0x1091b; 0x109bc, 0x109bd; 0x109c0, 0x109cf; 0x109d2, 0x109ff; 0x10a40, 0x10a48; 0x10a7d, 0x10a7e; 0x10a9d, 0x10a9f; 0x10aeb, 0x10aef; 0x10b58, 0x10b5f; 0x10b78, 0x10b7f; 0x10ba9, 0x10baf; 0x10cfa, 0x10cff; 0x10e60, 0x10e7e; 0x10f1d, 0x10f26; 0x10f51, 0x10f54; 0x10fc5, 0x10fcb; 0x11052, 0x11065; 0x111e1, 0x111f4; 0x1173a, 0x1173b; 0x118ea, 0x118f2; 0x11c5a, 0x11c6c; 0x11fc0, 0x11fd4; 0x16b5b, 0x16b61; 0x16e80, 0x16e96; 0x1d2e0, 0x1d2f3; 0x1d360, 0x1d378; 0x1e8c7, 0x1e8cf; 0x1ec71, 0x1ecab; 0x1ecad, 0x1ecaf; 0x1ecb1, 0x1ecb4; 0x1ed01, 0x1ed2d; 0x1f100, 0x1f10c; 0x1ed2f, 0x1ed3d] let pc = [0x5f, 0x5f; 0x203f, 0x2040; 0x2040, 0x2040; 0x2054, 0x2054; 0xfe33, 0xfe34; 0xff3f, 0xff3f; 0xfe4d, 0xfe4f] let pd = [0x2d, 0x2d; 0x58a, 0x58a; 0x5be, 0x5be; 0x1400, 0x1400; 0x1806, 0x1806; 0x2010, 0x2011; 0x2010, 0x2015; 0x2e17, 0x2e17; 0x2e1a, 0x2e1a; 0x2e3a, 0x2e3b; 0x2e40, 0x2e40; 0x301c, 0x301c; 0x3030, 0x3030; 0x30a0, 0x30a0; 0xfe31, 0xfe32; 0x10ead, 0x10ead; 0xff0d, 0xff0d; 0xfe63, 0xfe63; 0xfe58, 0xfe58] let pe = [0x29, 0x29; 0x5d, 0x5d; 0x7d, 0x7d; 0xf3b, 0xf3b; 0xf3d, 0xf3d; 0x169c, 0x169c; 0x2046, 0x2046; 0x207e, 0x207e; 0x208e, 0x208e; 0x2309, 0x2309; 0x230b, 0x230b; 0x232a, 0x232a; 0x2769, 0x2769; 0x276b, 0x276b; 0x276d, 0x276d; 0x276f, 0x276f; 0x2771, 0x2771; 0x2773, 0x2773; 0x2775, 0x2775; 0x27c6, 0x27c6; 0x27e7, 0x27e7; 0x27e9, 0x27e9; 0x27eb, 0x27eb; 0x27ed, 0x27ed; 0x27ef, 0x27ef; 0x2984, 0x2984; 0x2986, 0x2986; 0x2988, 0x2988; 0x298a, 0x298a; 0x298c, 0x298c; 0x298e, 0x298e; 0x2990, 0x2990; 0x2992, 0x2992; 0x2994, 0x2994; 0x2996, 0x2996; 0x2998, 0x2998; 0x29d9, 0x29d9; 0x29db, 0x29db; 0x29fd, 0x29fd; 0x2e23, 0x2e23; 0x2e25, 0x2e25; 0x2e27, 0x2e27; 0x2e29, 0x2e29; 0x3009, 0x3009; 0x300b, 0x300b; 0x300d, 0x300d; 0x300f, 0x300f; 0x3011, 0x3011; 0x3015, 0x3015; 0x3017, 0x3017; 0x3019, 0x3019; 0x301b, 0x301b; 0x301e, 0x301f; 0xfd3e, 0xfd3e; 0xfe18, 0xfe18; 0xfe36, 0xfe36; 0xfe38, 0xfe38; 0xfe3a, 0xfe3a; 0xfe3c, 0xfe3c; 0xfe3e, 0xfe3e; 0xfe40, 0xfe40; 0xfe42, 0xfe42; 0xfe44, 0xfe44; 0xfe48, 0xfe48; 0xfe5a, 0xfe5a; 0xfe5c, 0xfe5c; 0xfe5e, 0xfe5e; 0xff09, 0xff09; 0xff3d, 0xff3d; 0xff5d, 0xff5d; 0xff63, 0xff63; 0xff60, 0xff60] let pf = [0xbb, 0xbb; 0x2019, 0x2019; 0x201d, 0x201d; 0x203a, 0x203a; 0x2e03, 0x2e03; 0x2e21, 0x2e21; 0x2e1d, 0x2e1d; 0x2e0d, 0x2e0d; 0x2e0a, 0x2e0a; 0x2e05, 0x2e05] let pi = [0xab, 0xab; 0x2018, 0x2018; 0x201b, 0x201c; 0x201f, 0x201f; 0x2039, 0x2039; 0x2e02, 0x2e02; 0x2e04, 0x2e04; 0x2e09, 0x2e09; 0x2e0c, 0x2e0c; 0x2e1c, 0x2e1c; 0x2e20, 0x2e20] let po = [0x21, 0x21; 0x21, 0x23; 0x22, 0x22; 0x25, 0x27; 0x27, 0x27; 0x2a, 0x2a; 0x2c, 0x2c; 0x2e, 0x2e; 0x2e, 0x2f; 0x3a, 0x3a; 0x3a, 0x3b; 0x3f, 0x3f; 0x3f, 0x40; 0x5c, 0x5c; 0xa1, 0xa1; 0xa7, 0xa7; 0xb6, 0xb6; 0xb6, 0xb7; 0xb7, 0xb7; 0xbf, 0xbf; 0x37e, 0x37e; 0x387, 0x387; 0x55a, 0x55f; 0x55f, 0x55f; 0x589, 0x589; 0x5c0, 0x5c0; 0x5c3, 0x5c3; 0x5c6, 0x5c6; 0x5f3, 0x5f4; 0x5f4, 0x5f4; 0x609, 0x60a; 0x60c, 0x60c; 0x60c, 0x60d; 0x61b, 0x61b; 0x61e, 0x61f; 0x66a, 0x66d; 0x6d4, 0x6d4; 0x700, 0x702; 0x700, 0x70a; 0x700, 0x70d; 0x70c, 0x70c; 0x7f7, 0x7f9; 0x7f8, 0x7f9; 0x7f9, 0x7f9; 0x830, 0x83e; 0x837, 0x837; 0x839, 0x839; 0x83d, 0x83e; 0x85e, 0x85e; 0x964, 0x965; 0x970, 0x970; 0x9fd, 0x9fd; 0xa76, 0xa76; 0xaf0, 0xaf0; 0xc77, 0xc77; 0xc84, 0xc84; 0xdf4, 0xdf4; 0xe4f, 0xe4f; 0xe5a, 0xe5b; 0xf04, 0xf12; 0xf08, 0xf08; 0xf0d, 0xf12; 0xf14, 0xf14; 0xf85, 0xf85; 0xfd0, 0xfd4; 0xfd9, 0xfda; 0x104a, 0x104b; 0x104a, 0x104f; 0x10fb, 0x10fb; 0x1360, 0x1368; 0x1361, 0x1368; 0x1362, 0x1362; 0x1367, 0x1368; 0x166e, 0x166e; 0x16eb, 0x16ed; 0x1735, 0x1736; 0x17d4, 0x17d6; 0x17d8, 0x17da; 0x17da, 0x17da; 0x1800, 0x1805; 0x1802, 0x1805; 0x1803, 0x1803; 0x1807, 0x180a; 0x1808, 0x1809; 0x1809, 0x1809; 0x180a, 0x180a; 0x1944, 0x1945; 0x1a1e, 0x1a1f; 0x1aa0, 0x1aa6; 0x1aa8, 0x1aab; 0x1aa8, 0x1aad; 0x1b5a, 0x1b5b; 0x1b5a, 0x1b60; 0x1b5d, 0x1b5f; 0x1b5e, 0x1b5f; 0x1bfc, 0x1bff; 0x1c3b, 0x1c3c; 0x1c3b, 0x1c3f; 0x1c7e, 0x1c7f; 0x1cc0, 0x1cc7; 0x1cd3, 0x1cd3; 0x2016, 0x2016; 0x2016, 0x2017; 0x2020, 0x2027; 0x2024, 0x2024; 0x2027, 0x2027; 0x2030, 0x2038; 0x2032, 0x2034; 0x203b, 0x203e; 0x203c, 0x203d; 0x2041, 0x2043; 0x2047, 0x2049; 0x2047, 0x2051; 0x2053, 0x2053; 0x2055, 0x205e; 0x2cf9, 0x2cfc; 0x2cfe, 0x2cff; 0x2d70, 0x2d70; 0x2e00, 0x2e01; 0x2e06, 0x2e08; 0x2e0b, 0x2e0b; 0x2e0e, 0x2e16; 0x2e18, 0x2e19; 0x2e1b, 0x2e1b; 0x2e1e, 0x2e1f; 0x2e2a, 0x2e2e; 0x2e2e, 0x2e2e; 0x2e30, 0x2e39; 0x2e3c, 0x2e3c; 0x2e3c, 0x2e3f; 0x2e41, 0x2e41; 0x2e43, 0x2e4f; 0x2e4c, 0x2e4c; 0x2e4e, 0x2e4f; 0x2e52, 0x2e52; 0x3001, 0x3002; 0x3001, 0x3003; 0x3002, 0x3002; 0x303d, 0x303d; 0x30fb, 0x30fb; 0xa4fe, 0xa4ff; 0xa4ff, 0xa4ff; 0xa60d, 0xa60f; 0xa60e, 0xa60f; 0xa673, 0xa673; 0xa67e, 0xa67e; 0xa6f2, 0xa6f7; 0xa6f3, 0xa6f3; 0xa6f3, 0xa6f7; 0xa6f7, 0xa6f7; 0xa874, 0xa877; 0xa876, 0xa877; 0xa8ce, 0xa8cf; 0xa8f8, 0xa8fa; 0xa8fc, 0xa8fc; 0xa92e, 0xa92e; 0xa92e, 0xa92f; 0xa92f, 0xa92f; 0xa95f, 0xa95f; 0xa9c1, 0xa9cd; 0xa9c7, 0xa9c9; 0xa9c8, 0xa9c9; 0xa9de, 0xa9df; 0xaa5c, 0xaa5f; 0xaa5d, 0xaa5f; 0xaade, 0xaadf; 0xaadf, 0xaadf; 0xaaf0, 0xaaf1; 0xabeb, 0xabeb; 0xfe10, 0xfe16; 0xfe13, 0xfe13; 0xfe19, 0xfe19; 0xfe30, 0xfe30; 0xfe45, 0xfe46; 0xfe49, 0xfe4c; 0xfe50, 0xfe52; 0xfe52, 0xfe52; 0xfe54, 0xfe57; 0xfe55, 0xfe55; 0xfe56, 0xfe57; 0xfe5f, 0xfe61; 0xfe61, 0xfe61; 0xfe68, 0xfe68; 0xfe6a, 0xfe6b; 0xff01, 0xff01; 0xff01, 0xff03; 0xff02, 0xff02; 0xff05, 0xff07; 0xff07, 0xff07; 0xff0a, 0xff0a; 0xff0c, 0xff0c; 0xff0e, 0xff0e; 0xff0e, 0xff0f; 0xff1a, 0xff1a; 0xff1a, 0xff1b; 0xff1f, 0xff1f; 0xff1f, 0xff20; 0xff3c, 0xff3c; 0xff61, 0xff61; 0xff64, 0xff64; 0xff64, 0xff65; 0xff65, 0xff65; 0x10100, 0x10102; 0x1039f, 0x1039f; 0x103d0, 0x103d0; 0x1056f, 0x1056f; 0x10857, 0x10857; 0x1091f, 0x1091f; 0x1093f, 0x1093f; 0x10a50, 0x10a58; 0x10a56, 0x10a57; 0x10a7f, 0x10a7f; 0x10af0, 0x10af5; 0x10af0, 0x10af6; 0x10b39, 0x10b3f; 0x10b3a, 0x10b3f; 0x10b99, 0x10b9c; 0x10f55, 0x10f59; 0x11047, 0x11048; 0x11047, 0x1104d; 0x110bb, 0x110bc; 0x110be, 0x110c1; 0x11140, 0x11143; 0x11141, 0x11143; 0x11174, 0x11175; 0x111c5, 0x111c6; 0x111c5, 0x111c8; 0x111cd, 0x111cd; 0x111db, 0x111db; 0x111dd, 0x111df; 0x111de, 0x111df; 0x11238, 0x11239; 0x11238, 0x1123c; 0x11238, 0x1123d; 0x1123b, 0x1123c; 0x112a9, 0x112a9; 0x1144b, 0x1144c; 0x1144b, 0x1144d; 0x1144b, 0x1144f; 0x1145a, 0x1145b; 0x1145d, 0x1145d; 0x114c6, 0x114c6; 0x115c1, 0x115d7; 0x115c2, 0x115c3; 0x115c2, 0x115c5; 0x115c6, 0x115c8; 0x115c9, 0x115d7; 0x11641, 0x11642; 0x11641, 0x11643; 0x11660, 0x1166c; 0x1173c, 0x1173e; 0x1183b, 0x1183b; 0x11944, 0x11944; 0x11944, 0x11946; 0x11946, 0x11946; 0x119e2, 0x119e2; 0x11a3f, 0x11a46; 0x11a42, 0x11a43; 0x11a9a, 0x11a9c; 0x11a9b, 0x11a9c; 0x11a9e, 0x11aa2; 0x11aa1, 0x11aa2; 0x11c41, 0x11c42; 0x11c41, 0x11c43; 0x11c41, 0x11c45; 0x11c70, 0x11c71; 0x11c71, 0x11c71; 0x11ef7, 0x11ef8; 0x11fff, 0x11fff; 0x12470, 0x12474; 0x16a6e, 0x16a6f; 0x16af5, 0x16af5; 0x16b37, 0x16b38; 0x16b37, 0x16b39; 0x16b37, 0x16b3b; 0x16b44, 0x16b44; 0x16e97, 0x16e98; 0x16e97, 0x16e9a; 0x16e98, 0x16e98; 0x16fe2, 0x16fe2; 0x1e95e, 0x1e95f; 0x1da88, 0x1da88; 0x1da87, 0x1da8b; 0x1da87, 0x1da8a; 0x1bc9f, 0x1bc9f] let ps = [0x28, 0x28; 0x5b, 0x5b; 0x7b, 0x7b; 0xf3a, 0xf3a; 0xf3c, 0xf3c; 0x169b, 0x169b; 0x201a, 0x201a; 0x201e, 0x201e; 0x2045, 0x2045; 0x207d, 0x207d; 0x208d, 0x208d; 0x2308, 0x2308; 0x230a, 0x230a; 0x2329, 0x2329; 0x2768, 0x2768; 0x276a, 0x276a; 0x276c, 0x276c; 0x276e, 0x276e; 0x2770, 0x2770; 0x2772, 0x2772; 0x2774, 0x2774; 0x27c5, 0x27c5; 0x27e6, 0x27e6; 0x27e8, 0x27e8; 0x27ea, 0x27ea; 0x27ec, 0x27ec; 0x27ee, 0x27ee; 0x2983, 0x2983; 0x2985, 0x2985; 0x2987, 0x2987; 0x2989, 0x2989; 0x298b, 0x298b; 0x298d, 0x298d; 0x298f, 0x298f; 0x2991, 0x2991; 0x2993, 0x2993; 0x2995, 0x2995; 0x2997, 0x2997; 0x29d8, 0x29d8; 0x29da, 0x29da; 0x29fc, 0x29fc; 0x2e22, 0x2e22; 0x2e24, 0x2e24; 0x2e26, 0x2e26; 0x2e28, 0x2e28; 0x2e42, 0x2e42; 0x3008, 0x3008; 0x300a, 0x300a; 0x300c, 0x300c; 0x300e, 0x300e; 0x3010, 0x3010; 0x3014, 0x3014; 0x3016, 0x3016; 0x3018, 0x3018; 0x301a, 0x301a; 0x301d, 0x301d; 0xfd3f, 0xfd3f; 0xfe17, 0xfe17; 0xfe35, 0xfe35; 0xfe37, 0xfe37; 0xfe39, 0xfe39; 0xfe3b, 0xfe3b; 0xfe3d, 0xfe3d; 0xfe3f, 0xfe3f; 0xfe41, 0xfe41; 0xfe43, 0xfe43; 0xfe47, 0xfe47; 0xfe59, 0xfe59; 0xfe5b, 0xfe5b; 0xfe5d, 0xfe5d; 0xff62, 0xff62; 0xff5f, 0xff5f; 0xff5b, 0xff5b; 0xff3b, 0xff3b; 0xff08, 0xff08] let sc = [0x24, 0x24; 0xa2, 0xa5; 0x58f, 0x58f; 0x60b, 0x60b; 0x7fe, 0x7ff; 0x9f2, 0x9f3; 0x9fb, 0x9fb; 0xaf1, 0xaf1; 0xbf9, 0xbf9; 0xe3f, 0xe3f; 0x17db, 0x17db; 0x20a0, 0x20bf; 0xa838, 0xa838; 0xfdfc, 0xfdfc; 0xfe69, 0xfe69; 0xff04, 0xff04; 0xffe0, 0xffe1; 0xffe5, 0xffe6; 0x11fdd, 0x11fe0; 0x1e2ff, 0x1e2ff; 0x1ecb0, 0x1ecb0] let sk = [0x5e, 0x5e; 0x60, 0x60; 0xa8, 0xa8; 0xaf, 0xaf; 0xb4, 0xb4; 0xb8, 0xb8; 0x2c2, 0x2c5; 0x2d2, 0x2df; 0x2e5, 0x2eb; 0x2ed, 0x2ed; 0x2ef, 0x2ff; 0x375, 0x375; 0x384, 0x385; 0x1fbd, 0x1fbd; 0x1fbf, 0x1fc1; 0x1fcd, 0x1fcf; 0x1fdd, 0x1fdf; 0x1fed, 0x1fef; 0x1ffd, 0x1ffe; 0x309b, 0x309c; 0xa700, 0xa716; 0xa720, 0xa721; 0xa789, 0xa78a; 0xab5b, 0xab5b; 0xab6a, 0xab6b; 0x1f3fb, 0x1f3ff; 0xffe3, 0xffe3; 0xff40, 0xff40; 0xff3e, 0xff3e; 0xfbb2, 0xfbc1] let sm = [0x2b, 0x2b; 0x3c, 0x3e; 0x7c, 0x7c; 0x7e, 0x7e; 0xac, 0xac; 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3f6, 0x3f6; 0x606, 0x608; 0x2044, 0x2044; 0x2052, 0x2052; 0x207a, 0x207c; 0x207b, 0x207b; 0x208a, 0x208c; 0x208b, 0x208b; 0x2118, 0x2118; 0x2140, 0x2144; 0x214b, 0x214b; 0x2190, 0x2194; 0x219a, 0x219b; 0x21a0, 0x21a0; 0x21a3, 0x21a3; 0x21a6, 0x21a6; 0x21ae, 0x21ae; 0x21ce, 0x21cf; 0x21d2, 0x21d2; 0x21d4, 0x21d4; 0x21f4, 0x22ff; 0x2212, 0x2212; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b3; 0x23dc, 0x23e1; 0x25b7, 0x25b7; 0x25c1, 0x25c1; 0x25f8, 0x25ff; 0x266f, 0x266f; 0x27c0, 0x27c4; 0x27c7, 0x27e5; 0x27f0, 0x27ff; 0x2900, 0x2982; 0x2999, 0x29d7; 0x29dc, 0x29fb; 0x29fe, 0x2aff; 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 0xfe62, 0xfe62; 0xfe64, 0xfe66; 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff5c, 0xff5c; 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x1d6c1, 0x1d6c1; 0x1d6db, 0x1d6db; 0x1d6fb, 0x1d6fb; 0x1d715, 0x1d715; 0x1d735, 0x1d735; 0x1d74f, 0x1d74f; 0x1d76f, 0x1d76f; 0x1d789, 0x1d789; 0x1d7a9, 0x1d7a9; 0x1eef0, 0x1eef1; 0x1d7c3, 0x1d7c3] let so = [0xa6, 0xa6; 0xa9, 0xa9; 0xae, 0xae; 0xb0, 0xb0; 0x482, 0x482; 0x58d, 0x58e; 0x60e, 0x60f; 0x6de, 0x6de; 0x6e9, 0x6e9; 0x6fd, 0x6fe; 0x7f6, 0x7f6; 0x9fa, 0x9fa; 0xb70, 0xb70; 0xbf3, 0xbf8; 0xbfa, 0xbfa; 0xc7f, 0xc7f; 0xd4f, 0xd4f; 0xd79, 0xd79; 0xf01, 0xf03; 0xf13, 0xf13; 0xf15, 0xf17; 0xf1a, 0xf1f; 0xf34, 0xf34; 0xf36, 0xf36; 0xf38, 0xf38; 0xfbe, 0xfc5; 0xfc7, 0xfcc; 0xfce, 0xfcf; 0xfd5, 0xfd8; 0x109e, 0x109f; 0x1390, 0x1399; 0x166d, 0x166d; 0x1940, 0x1940; 0x19de, 0x19ff; 0x1b61, 0x1b6a; 0x1b74, 0x1b7c; 0x2100, 0x2101; 0x2103, 0x2106; 0x2108, 0x2109; 0x2114, 0x2114; 0x2116, 0x2117; 0x211e, 0x2123; 0x2125, 0x2125; 0x2127, 0x2127; 0x2129, 0x2129; 0x212e, 0x212e; 0x213a, 0x213b; 0x214a, 0x214a; 0x214c, 0x214d; 0x214f, 0x214f; 0x218a, 0x218b; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 0x21a4, 0x21a5; 0x21a7, 0x21a7; 0x21a7, 0x21ad; 0x21a9, 0x21ad; 0x21af, 0x21cd; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21db; 0x21d5, 0x21f3; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 0x2300, 0x2307; 0x230c, 0x231f; 0x2322, 0x2328; 0x232b, 0x237b; 0x237d, 0x239a; 0x23b4, 0x23b5; 0x23b4, 0x23db; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23e2, 0x23e2; 0x23e2, 0x2426; 0x2440, 0x244a; 0x249c, 0x24e9; 0x24b6, 0x24cf; 0x24b6, 0x24e9; 0x24d0, 0x24e9; 0x2500, 0x25b6; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25b8, 0x25c0; 0x25bc, 0x25c0; 0x25c2, 0x25f7; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x2600, 0x266e; 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 0x2670, 0x2767; 0x2794, 0x27bf; 0x2800, 0x28ff; 0x2b00, 0x2b2f; 0x2b45, 0x2b46; 0x2b4d, 0x2b73; 0x2b76, 0x2b95; 0x2b97, 0x2bff; 0x2ce5, 0x2cea; 0x2e50, 0x2e51; 0x2e80, 0x2e99; 0x2e9b, 0x2ef3; 0x2f00, 0x2fd5; 0x2ff0, 0x2ff1; 0x2ff0, 0x2ffb; 0x2ff2, 0x2ff3; 0x2ff4, 0x2ffb; 0x3004, 0x3004; 0x3012, 0x3013; 0x3020, 0x3020; 0x3036, 0x3037; 0x303e, 0x303f; 0x3190, 0x3191; 0x3196, 0x319f; 0x31c0, 0x31e3; 0x3200, 0x321e; 0x322a, 0x3247; 0x3250, 0x3250; 0x3260, 0x327f; 0x328a, 0x32b0; 0x32c0, 0x33ff; 0x4dc0, 0x4dff; 0xa490, 0xa4c6; 0xa828, 0xa82b; 0xa836, 0xa837; 0xa839, 0xa839; 0xaa77, 0xaa79; 0xfdfd, 0xfdfd; 0xffe4, 0xffe4; 0xffe8, 0xffe8; 0xffed, 0xffee; 0xfffc, 0xfffd; 0x10137, 0x1013f; 0x10179, 0x10189; 0x1018c, 0x1018e; 0x10190, 0x1019c; 0x101a0, 0x101a0; 0x101d0, 0x101fc; 0x10877, 0x10878; 0x10ac8, 0x10ac8; 0x1173f, 0x1173f; 0x11fd5, 0x11fdc; 0x11fe1, 0x11ff1; 0x16b3c, 0x16b3f; 0x16b45, 0x16b45; 0x1bc9c, 0x1bc9c; 0x1d000, 0x1d0f5; 0x1d100, 0x1d126; 0x1d129, 0x1d164; 0x1d16a, 0x1d16c; 0x1d183, 0x1d184; 0x1d18c, 0x1d1a9; 0x1d1ae, 0x1d1e8; 0x1d200, 0x1d241; 0x1d245, 0x1d245; 0x1d300, 0x1d356; 0x1d800, 0x1d9ff; 0x1da37, 0x1da3a; 0x1da6d, 0x1da74; 0x1da76, 0x1da83; 0x1da85, 0x1da86; 0x1e14f, 0x1e14f; 0x1ecac, 0x1ecac; 0x1ed2e, 0x1ed2e; 0x1f000, 0x1f02b; 0x1f030, 0x1f093; 0x1f0a0, 0x1f0ae; 0x1f0b1, 0x1f0bf; 0x1f0c1, 0x1f0cf; 0x1f0d1, 0x1f0f5; 0x1f10d, 0x1f1ad; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189; 0x1f1e6, 0x1f1ff; 0x1f1e6, 0x1f202; 0x1f210, 0x1f23b; 0x1f240, 0x1f248; 0x1f250, 0x1f251; 0x1f260, 0x1f265; 0x1f300, 0x1f3fa; 0x1f400, 0x1f6d7; 0x1f6e0, 0x1f6ec; 0x1f6f0, 0x1f6fc; 0x1f700, 0x1f773; 0x1f780, 0x1f7d8; 0x1f7e0, 0x1f7eb; 0x1f800, 0x1f80b; 0x1f810, 0x1f847; 0x1f850, 0x1f859; 0x1f860, 0x1f887; 0x1f890, 0x1f8ad; 0x1f8b0, 0x1f8b1; 0x1f900, 0x1f978; 0x1f97a, 0x1f9cb; 0x1f9cd, 0x1fa53; 0x1fa60, 0x1fa6d; 0x1fa70, 0x1fa74; 0x1fa78, 0x1fa7a; 0x1fa80, 0x1fa86; 0x1fa90, 0x1faa8; 0x1fab0, 0x1fab6; 0x1fac0, 0x1fac2; 0x1fb94, 0x1fbca; 0x1fb00, 0x1fb92; 0x1fad0, 0x1fad6] let zl = [0x2028, 0x2028] let zp = [0x2029, 0x2029] let zs = [0x20, 0x20; 0xa0, 0xa0; 0x1680, 0x1680; 0x2000, 0x200a; 0x202f, 0x202f; 0x3000, 0x3000; 0x205f, 0x205f] let list = [ ("cc", cc); ("cf", cf); ("cn", cn); ("co", co); ("cs", cs); ("ll", ll); ("lm", lm); ("lo", lo); ("lt", lt); ("lu", lu); ("mc", mc); ("me", me); ("mn", mn); ("nd", nd); ("nl", nl); ("no", no); ("pc", pc); ("pd", pd); ("pe", pe); ("pf", pf); ("pi", pi); ("po", po); ("ps", ps); ("sc", sc); ("sk", sk); ("sm", sm); ("so", so); ("zl", zl); ("zp", zp); ("zs", zs) ] end module Properties = struct let alphabetic = [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x345, 0x345; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x64b, 0x657; 0x659, 0x65f; 0x66e, 0x66f; 0x670, 0x670; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6d6, 0x6dc; 0x6e1, 0x6e4; 0x6e5, 0x6e6; 0x6e7, 0x6e8; 0x6ed, 0x6ed; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x711, 0x711; 0x712, 0x72f; 0x730, 0x73f; 0x74d, 0x7a5; 0x7a6, 0x7b0; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x816, 0x817; 0x81a, 0x81a; 0x81b, 0x823; 0x824, 0x824; 0x825, 0x827; 0x828, 0x828; 0x829, 0x82c; 0x840, 0x858; 0x860, 0x86a; 0x8a0, 0x8b4; 0x8b6, 0x8c7; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8f0, 0x902; 0x903, 0x903; 0x904, 0x939; 0x93a, 0x93a; 0x93b, 0x93b; 0x93d, 0x93d; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94e, 0x94f; 0x950, 0x950; 0x955, 0x957; 0x958, 0x961; 0x962, 0x963; 0x971, 0x971; 0x972, 0x980; 0x981, 0x981; 0x982, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9e2, 0x9e3; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa01, 0xa02; 0xa03, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa51, 0xa51; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa70, 0xa71; 0xa72, 0xa74; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xad0, 0xad0; 0xae0, 0xae1; 0xae2, 0xae3; 0xaf9, 0xaf9; 0xafa, 0xafc; 0xb01, 0xb01; 0xb02, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb56, 0xb56; 0xb57, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb62, 0xb63; 0xb71, 0xb71; 0xb82, 0xb82; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xc00, 0xc00; 0xc01, 0xc03; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc60, 0xc61; 0xc62, 0xc63; 0xc80, 0xc80; 0xc81, 0xc81; 0xc82, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccc; 0xcd5, 0xcd6; 0xcde, 0xcde; 0xce0, 0xce1; 0xce2, 0xce3; 0xcf1, 0xcf2; 0xd00, 0xd01; 0xd02, 0xd03; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd57, 0xd57; 0xd5f, 0xd61; 0xd62, 0xd63; 0xd7a, 0xd7f; 0xd81, 0xd81; 0xd82, 0xd83; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 0xe01, 0xe30; 0xe31, 0xe31; 0xe32, 0xe33; 0xe34, 0xe3a; 0xe40, 0xe45; 0xe46, 0xe46; 0xe4d, 0xe4d; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb1, 0xeb1; 0xeb2, 0xeb3; 0xeb4, 0xeb9; 0xebb, 0xebc; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xecd, 0xecd; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf81; 0xf88, 0xf8c; 0xf8d, 0xf97; 0xf99, 0xfbc; 0x1000, 0x102a; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1036; 0x1038, 0x1038; 0x103b, 0x103c; 0x103d, 0x103e; 0x103f, 0x103f; 0x1050, 0x1055; 0x1056, 0x1057; 0x1058, 0x1059; 0x105a, 0x105d; 0x105e, 0x1060; 0x1061, 0x1061; 0x1062, 0x1064; 0x1065, 0x1066; 0x1067, 0x106d; 0x106e, 0x1070; 0x1071, 0x1074; 0x1075, 0x1081; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108e, 0x108e; 0x108f, 0x108f; 0x109a, 0x109c; 0x109d, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x170c; 0x170e, 0x1711; 0x1712, 0x1713; 0x1720, 0x1731; 0x1732, 0x1733; 0x1740, 0x1751; 0x1752, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18a9, 0x18a9; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a20, 0x1a54; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a74; 0x1aa7, 0x1aa7; 0x1abf, 0x1ac0; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b05, 0x1b33; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b43; 0x1b45, 0x1b4b; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1b83, 0x1ba0; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1bac, 0x1bad; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1c00, 0x1c23; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c36; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1de7, 0x1df4; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x24b6, 0x24e9; 0x2c00, 0x2c2e; 0x2c30, 0x2c5e; 0x2c60, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x2e2f, 0x2e2f; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9ffc; 0xa000, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa674, 0xa67b; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa69e, 0xa69f; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7bf; 0xa7c2, 0xa7ca; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa802, 0xa802; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80b, 0xa80b; 0xa80c, 0xa822; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa840, 0xa873; 0xa880, 0xa881; 0xa882, 0xa8b3; 0xa8b4, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa8ff, 0xa8ff; 0xa90a, 0xa925; 0xa926, 0xa92a; 0xa930, 0xa946; 0xa947, 0xa951; 0xa952, 0xa952; 0xa960, 0xa97c; 0xa980, 0xa982; 0xa983, 0xa983; 0xa984, 0xa9b2; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9bf; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e5, 0xa9e5; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa40, 0xaa42; 0xaa43, 0xaa43; 0xaa44, 0xaa4b; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaa7e, 0xaaaf; 0xaab0, 0xaab0; 0xaab1, 0xaab1; 0xaab2, 0xaab4; 0xaab5, 0xaab6; 0xaab7, 0xaab8; 0xaab9, 0xaabd; 0xaabe, 0xaabe; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xaaf5, 0xaaf5; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1e, 0xfb1e; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10376, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d24, 0x10d27; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11003, 0x11037; 0x11038, 0x11045; 0x11082, 0x11082; 0x11083, 0x110af; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110d0, 0x110e8; 0x11100, 0x11102; 0x11103, 0x11126; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11132; 0x11144, 0x11144; 0x11145, 0x11146; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11180, 0x11181; 0x11182, 0x11182; 0x11183, 0x111b2; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111bf; 0x111c1, 0x111c4; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112e8; 0x11300, 0x11301; 0x11302, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11361; 0x11362, 0x11363; 0x11400, 0x11434; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11443, 0x11444; 0x11445, 0x11445; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115d8, 0x115db; 0x115dc, 0x115dd; 0x11600, 0x1162f; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x11640, 0x11640; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172a; 0x11800, 0x1182b; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193f, 0x1193f; 0x11940, 0x11940; 0x11941, 0x11941; 0x11942, 0x11942; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x119e4, 0x119e4; 0x11a00, 0x11a00; 0x11a01, 0x11a0a; 0x11a0b, 0x11a32; 0x11a35, 0x11a38; 0x11a39, 0x11a39; 0x11a3a, 0x11a3a; 0x11a3b, 0x11a3e; 0x11a50, 0x11a50; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a5c, 0x11a89; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11a9d, 0x11a9d; 0x11ac0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 0x11d46, 0x11d46; 0x11d47, 0x11d47; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f4f; 0x16f50, 0x16f50; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b11e; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9e, 0x1bc9e; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e2c0, 0x1e2eb; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e947, 0x1e947; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189; 0x20000, 0x2a6dd; 0x2a700, 0x2b734; 0x2b740, 0x2b81d; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0; 0x2b820, 0x2cea1] let ascii_hex_digit = [0x61, 0x66; 0x41, 0x46; 0x30, 0x39] let hex_digit = [0x30, 0x39; 0x41, 0x46; 0x61, 0x66; 0xff10, 0xff19; 0xff21, 0xff26; 0xff41, 0xff46] let id_continue = [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x300, 0x36f; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x387, 0x387; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x64b, 0x65f; 0x660, 0x669; 0x66e, 0x66f; 0x670, 0x670; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6d6, 0x6dc; 0x6df, 0x6e4; 0x6e5, 0x6e6; 0x6e7, 0x6e8; 0x6ea, 0x6ed; 0x6ee, 0x6ef; 0x6f0, 0x6f9; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x711, 0x711; 0x712, 0x72f; 0x730, 0x74a; 0x74d, 0x7a5; 0x7a6, 0x7b0; 0x7b1, 0x7b1; 0x7c0, 0x7c9; 0x7ca, 0x7ea; 0x7eb, 0x7f3; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x815; 0x816, 0x819; 0x81a, 0x81a; 0x81b, 0x823; 0x824, 0x824; 0x825, 0x827; 0x828, 0x828; 0x829, 0x82d; 0x840, 0x858; 0x859, 0x85b; 0x860, 0x86a; 0x8a0, 0x8b4; 0x8b6, 0x8c7; 0x8d3, 0x8e1; 0x8e3, 0x902; 0x903, 0x903; 0x904, 0x939; 0x93a, 0x93a; 0x93b, 0x93b; 0x93c, 0x93c; 0x93d, 0x93d; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94d, 0x94d; 0x94e, 0x94f; 0x950, 0x950; 0x951, 0x957; 0x958, 0x961; 0x962, 0x963; 0x966, 0x96f; 0x971, 0x971; 0x972, 0x980; 0x981, 0x981; 0x982, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9bc; 0x9bd, 0x9bd; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9cd, 0x9cd; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9e2, 0x9e3; 0x9e6, 0x9ef; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa02; 0xa03, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa3c, 0xa3c; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa6f; 0xa70, 0xa71; 0xa72, 0xa74; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabc, 0xabc; 0xabd, 0xabd; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xacd, 0xacd; 0xad0, 0xad0; 0xae0, 0xae1; 0xae2, 0xae3; 0xae6, 0xaef; 0xaf9, 0xaf9; 0xafa, 0xaff; 0xb01, 0xb01; 0xb02, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb3c; 0xb3d, 0xb3d; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb4d, 0xb4d; 0xb55, 0xb56; 0xb57, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb62, 0xb63; 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb82; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbcd, 0xbcd; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc00; 0xc01, 0xc03; 0xc04, 0xc04; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc60, 0xc61; 0xc62, 0xc63; 0xc66, 0xc6f; 0xc80, 0xc80; 0xc81, 0xc81; 0xc82, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbc, 0xcbc; 0xcbd, 0xcbd; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccd; 0xcd5, 0xcd6; 0xcde, 0xcde; 0xce0, 0xce1; 0xce2, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf2; 0xd00, 0xd01; 0xd02, 0xd03; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3b, 0xd3c; 0xd3d, 0xd3d; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd4d, 0xd4d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd57, 0xd57; 0xd5f, 0xd61; 0xd62, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd81; 0xd82, 0xd83; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 0xe01, 0xe30; 0xe31, 0xe31; 0xe32, 0xe33; 0xe34, 0xe3a; 0xe40, 0xe45; 0xe46, 0xe46; 0xe47, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb1, 0xeb1; 0xeb2, 0xeb3; 0xeb4, 0xebc; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xec8, 0xecd; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 0xf3e, 0xf3f; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf84; 0xf86, 0xf87; 0xf88, 0xf8c; 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x1000, 0x102a; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1037; 0x1038, 0x1038; 0x1039, 0x103a; 0x103b, 0x103c; 0x103d, 0x103e; 0x103f, 0x103f; 0x1040, 0x1049; 0x1050, 0x1055; 0x1056, 0x1057; 0x1058, 0x1059; 0x105a, 0x105d; 0x105e, 0x1060; 0x1061, 0x1061; 0x1062, 0x1064; 0x1065, 0x1066; 0x1067, 0x106d; 0x106e, 0x1070; 0x1071, 0x1074; 0x1075, 0x1081; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108e, 0x108e; 0x108f, 0x108f; 0x1090, 0x1099; 0x109a, 0x109c; 0x109d, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x170c; 0x170e, 0x1711; 0x1712, 0x1714; 0x1720, 0x1731; 0x1732, 0x1734; 0x1740, 0x1751; 0x1752, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b4, 0x17b5; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x17c9, 0x17d3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x17dd, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x1810, 0x1819; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18a9, 0x18a9; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1939, 0x193b; 0x1946, 0x194f; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x19d0, 0x19d9; 0x19da, 0x19da; 0x1a00, 0x1a16; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a20, 0x1a54; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a7c; 0x1a7f, 0x1a7f; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1ac0; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b05, 0x1b33; 0x1b34, 0x1b34; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b44; 0x1b45, 0x1b4b; 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1b83, 0x1ba0; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1baa, 0x1baa; 0x1bab, 0x1bad; 0x1bae, 0x1baf; 0x1bb0, 0x1bb9; 0x1bba, 0x1be5; 0x1be6, 0x1be6; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1bf2, 0x1bf3; 0x1c00, 0x1c23; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c37; 0x1c40, 0x1c49; 0x1c4d, 0x1c4f; 0x1c50, 0x1c59; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce1, 0x1ce1; 0x1ce2, 0x1ce8; 0x1ce9, 0x1cec; 0x1ced, 0x1ced; 0x1cee, 0x1cf3; 0x1cf4, 0x1cf4; 0x1cf5, 0x1cf6; 0x1cf7, 0x1cf7; 0x1cf8, 0x1cf9; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1dc0, 0x1df9; 0x1dfb, 0x1dff; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c2e; 0x2c30, 0x2c5e; 0x2c60, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cef, 0x2cf1; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d7f, 0x2d7f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x302a, 0x302d; 0x302e, 0x302f; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x3099, 0x309a; 0x309b, 0x309c; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9ffc; 0xa000, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa620, 0xa629; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa66f, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa69e, 0xa69f; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa6f0, 0xa6f1; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7bf; 0xa7c2, 0xa7ca; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa802, 0xa802; 0xa803, 0xa805; 0xa806, 0xa806; 0xa807, 0xa80a; 0xa80b, 0xa80b; 0xa80c, 0xa822; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa82c, 0xa82c; 0xa840, 0xa873; 0xa880, 0xa881; 0xa882, 0xa8b3; 0xa8b4, 0xa8c3; 0xa8c4, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f1; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa8ff, 0xa8ff; 0xa900, 0xa909; 0xa90a, 0xa925; 0xa926, 0xa92d; 0xa930, 0xa946; 0xa947, 0xa951; 0xa952, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa982; 0xa983, 0xa983; 0xa984, 0xa9b2; 0xa9b3, 0xa9b3; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9c0; 0xa9cf, 0xa9cf; 0xa9d0, 0xa9d9; 0xa9e0, 0xa9e4; 0xa9e5, 0xa9e5; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9f0, 0xa9f9; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa40, 0xaa42; 0xaa43, 0xaa43; 0xaa44, 0xaa4b; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa50, 0xaa59; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaa7e, 0xaaaf; 0xaab0, 0xaab0; 0xaab1, 0xaab1; 0xaab2, 0xaab4; 0xaab5, 0xaab6; 0xaab7, 0xaab8; 0xaab9, 0xaabd; 0xaabe, 0xaabf; 0xaac0, 0xaac0; 0xaac1, 0xaac1; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xaaf5, 0xaaf5; 0xaaf6, 0xaaf6; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xabec, 0xabec; 0xabed, 0xabed; 0xabf0, 0xabf9; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1e, 0xfb1e; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff10, 0xff19; 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10376, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10ae5, 0x10ae6; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d24, 0x10d27; 0x10d30, 0x10d39; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f46, 0x10f50; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11003, 0x11037; 0x11038, 0x11046; 0x11066, 0x1106f; 0x1107f, 0x11081; 0x11082, 0x11082; 0x11083, 0x110af; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110b9, 0x110ba; 0x110d0, 0x110e8; 0x110f0, 0x110f9; 0x11100, 0x11102; 0x11103, 0x11126; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11144; 0x11145, 0x11146; 0x11147, 0x11147; 0x11150, 0x11172; 0x11173, 0x11173; 0x11176, 0x11176; 0x11180, 0x11181; 0x11182, 0x11182; 0x11183, 0x111b2; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111c0; 0x111c1, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x111d0, 0x111d9; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11235, 0x11235; 0x11236, 0x11237; 0x1123e, 0x1123e; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112ea; 0x112f0, 0x112f9; 0x11300, 0x11301; 0x11302, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x1133c; 0x1133d, 0x1133d; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11361; 0x11362, 0x11363; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11400, 0x11434; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11442, 0x11444; 0x11445, 0x11445; 0x11446, 0x11446; 0x11447, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x1145e; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x114c2, 0x114c3; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x114d0, 0x114d9; 0x11580, 0x115ae; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115bf, 0x115c0; 0x115d8, 0x115db; 0x115dc, 0x115dd; 0x11600, 0x1162f; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x1163f, 0x11640; 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116aa; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x116b6, 0x116b6; 0x116b7, 0x116b7; 0x116b8, 0x116b8; 0x116c0, 0x116c9; 0x11700, 0x1171a; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172b; 0x11730, 0x11739; 0x11800, 0x1182b; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x11839, 0x1183a; 0x118a0, 0x118df; 0x118e0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193d, 0x1193d; 0x1193e, 0x1193e; 0x1193f, 0x1193f; 0x11940, 0x11940; 0x11941, 0x11941; 0x11942, 0x11942; 0x11943, 0x11943; 0x11950, 0x11959; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e0, 0x119e0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x119e4, 0x119e4; 0x11a00, 0x11a00; 0x11a01, 0x11a0a; 0x11a0b, 0x11a32; 0x11a33, 0x11a38; 0x11a39, 0x11a39; 0x11a3a, 0x11a3a; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 0x11a50, 0x11a50; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a5c, 0x11a89; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11a98, 0x11a99; 0x11a9d, 0x11a9d; 0x11ac0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c3f, 0x11c3f; 0x11c40, 0x11c40; 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d45; 0x11d46, 0x11d46; 0x11d47, 0x11d47; 0x11d50, 0x11d59; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11d97, 0x11d97; 0x11d98, 0x11d98; 0x11da0, 0x11da9; 0x11ee0, 0x11ef2; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b2f; 0x16b30, 0x16b36; 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f4f; 0x16f50, 0x16f50; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16fe4, 0x16fe4; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b11e; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1d165, 0x1d166; 0x1d167, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e100, 0x1e12c; 0x1e130, 0x1e136; 0x1e137, 0x1e13d; 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e2c0, 0x1e2eb; 0x1e2ec, 0x1e2ef; 0x1e2f0, 0x1e2f9; 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e943; 0x1e944, 0x1e94a; 0x1e94b, 0x1e94b; 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 0x20000, 0x2a6dd; 0x2a700, 0x2b734; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0xe0100, 0xe01ef; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0] let id_start = [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x66e, 0x66f; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x8a0, 0x8b4; 0x8b6, 0x8c7; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 0x971, 0x971; 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcde, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe33; 0xe40, 0xe45; 0xe46, 0xe46; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb3; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x170c; 0x170e, 0x1711; 0x1720, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4b; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c2e; 0x2c30, 0x2c5e; 0x2c60, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x309b, 0x309c; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9ffc; 0xa000, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7bf; 0xa7c2, 0xa7ca; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11800, 0x1182b; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ac0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b11e; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e2c0, 0x1e2eb; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6dd; 0x2a700, 0x2b734; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x30000, 0x3134a; 0x2f800, 0x2fa1d] let lowercase = [0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xdf, 0xf6; 0xf8, 0xff; 0x101, 0x101; 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 0x109, 0x109; 0x10b, 0x10b; 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 0x113, 0x113; 0x115, 0x115; 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 0x11d, 0x11d; 0x11f, 0x11f; 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 0x127, 0x127; 0x129, 0x129; 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 0x131, 0x131; 0x133, 0x133; 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 0x13c, 0x13c; 0x13e, 0x13e; 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 0x146, 0x146; 0x148, 0x149; 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 0x151, 0x151; 0x153, 0x153; 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 0x15b, 0x15b; 0x15d, 0x15d; 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 0x165, 0x165; 0x167, 0x167; 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 0x16f, 0x16f; 0x171, 0x171; 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 0x17a, 0x17a; 0x17c, 0x17c; 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 0x188, 0x188; 0x18c, 0x18d; 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 0x19e, 0x19e; 0x1a1, 0x1a1; 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 0x1aa, 0x1ab; 0x1ad, 0x1ad; 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 0x1b9, 0x1ba; 0x1bd, 0x1bf; 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 0x1ce, 0x1ce; 0x1d0, 0x1d0; 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 0x1d8, 0x1d8; 0x1da, 0x1da; 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 0x1e3, 0x1e3; 0x1e5, 0x1e5; 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 0x1ed, 0x1ed; 0x1ef, 0x1f0; 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 0x1fb, 0x1fb; 0x1fd, 0x1fd; 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 0x205, 0x205; 0x207, 0x207; 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 0x20f, 0x20f; 0x211, 0x211; 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 0x219, 0x219; 0x21b, 0x21b; 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 0x223, 0x223; 0x225, 0x225; 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 0x22d, 0x22d; 0x22f, 0x22f; 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 0x23f, 0x240; 0x242, 0x242; 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 0x24d, 0x24d; 0x24f, 0x293; 0x295, 0x2af; 0x2b0, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 0x345, 0x345; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 0x10d0, 0x10fa; 0x10fd, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 0x1e05, 0x1e05; 0x1e07, 0x1e07; 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 0x1e23, 0x1e23; 0x1e25, 0x1e25; 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 0x1e37, 0x1e37; 0x1e39, 0x1e39; 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 0x1e41, 0x1e41; 0x1e43, 0x1e43; 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 0x1e55, 0x1e55; 0x1e57, 0x1e57; 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 0x1e73, 0x1e73; 0x1e75, 0x1e75; 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 0x1e87, 0x1e87; 0x1e89, 0x1e89; 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 0x1e91, 0x1e91; 0x1e93, 0x1e93; 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 0x1efd, 0x1efd; 0x1eff, 0x1f07; 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 0x1f40, 0x1f45; 0x1f50, 0x1f57; 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x210a, 0x210a; 0x210e, 0x210f; 0x2113, 0x2113; 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 0x2146, 0x2149; 0x214e, 0x214e; 0x2170, 0x217f; 0x2184, 0x2184; 0x24d0, 0x24e9; 0x2c30, 0x2c5e; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 0x2c76, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c81, 0x2c81; 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 0x2c93, 0x2c93; 0x2c95, 0x2c95; 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 0xa647, 0xa647; 0xa649, 0xa649; 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 0xa651, 0xa651; 0xa653, 0xa653; 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 0xa65b, 0xa65b; 0xa65d, 0xa65d; 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 0xa665, 0xa665; 0xa667, 0xa667; 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 0xa681, 0xa681; 0xa683, 0xa683; 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 0xa68b, 0xa68b; 0xa68d, 0xa68d; 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 0xa695, 0xa695; 0xa697, 0xa697; 0xa699, 0xa699; 0xa69b, 0xa69b; 0xa69c, 0xa69d; 0xa723, 0xa723; 0xa725, 0xa725; 0xa727, 0xa727; 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 0xa72f, 0xa731; 0xa733, 0xa733; 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 0xa73b, 0xa73b; 0xa73d, 0xa73d; 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 0xa745, 0xa745; 0xa747, 0xa747; 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 0xa74f, 0xa74f; 0xa751, 0xa751; 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 0xa759, 0xa759; 0xa75b, 0xa75b; 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 0xa763, 0xa763; 0xa765, 0xa765; 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 0xa76d, 0xa76d; 0xa76f, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa778; 0xa77a, 0xa77a; 0xa77c, 0xa77c; 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 0xa785, 0xa785; 0xa787, 0xa787; 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 0xa793, 0xa795; 0xa797, 0xa797; 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 0xa7bf, 0xa7bf; 0xa7c3, 0xa7c3; 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 0xa7f6, 0xa7f6; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 0x10428, 0x1044f; 0x104d8, 0x104fb; 0x10cc0, 0x10cf2; 0x118c0, 0x118df; 0x16e60, 0x16e7f; 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 0x1d770, 0x1d788; 0x1e922, 0x1e943; 0x1d7cb, 0x1d7cb; 0x1d7c4, 0x1d7c9; 0x1d7aa, 0x1d7c2; 0x1d78a, 0x1d78f] let math = [0x2b, 0x2b; 0x3c, 0x3e; 0x5e, 0x5e; 0x7c, 0x7c; 0x7e, 0x7e; 0xac, 0xac; 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3d0, 0x3d2; 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f5; 0x3f6, 0x3f6; 0x606, 0x608; 0x2016, 0x2016; 0x2032, 0x2034; 0x2040, 0x2040; 0x2044, 0x2044; 0x2052, 0x2052; 0x2061, 0x2064; 0x207a, 0x207c; 0x207d, 0x207d; 0x207e, 0x207e; 0x208a, 0x208c; 0x208d, 0x208d; 0x208e, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20eb, 0x20ef; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2128, 0x2128; 0x2129, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 0x2133, 0x2134; 0x2135, 0x2138; 0x213c, 0x213f; 0x2140, 0x2144; 0x2145, 0x2149; 0x214b, 0x214b; 0x2190, 0x2194; 0x2195, 0x2199; 0x219a, 0x219b; 0x219c, 0x219f; 0x21a0, 0x21a0; 0x21a1, 0x21a2; 0x21a3, 0x21a3; 0x21a4, 0x21a5; 0x21a6, 0x21a6; 0x21a7, 0x21a7; 0x21a9, 0x21ad; 0x21ae, 0x21ae; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21cd; 0x21ce, 0x21cf; 0x21d0, 0x21d1; 0x21d2, 0x21d2; 0x21d3, 0x21d3; 0x21d4, 0x21d4; 0x21d5, 0x21db; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 0x21f4, 0x22ff; 0x2308, 0x2308; 0x2309, 0x2309; 0x230a, 0x230a; 0x230b, 0x230b; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b3; 0x23b4, 0x23b5; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23dc, 0x23e1; 0x23e2, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25b7, 0x25b7; 0x25bc, 0x25c0; 0x25c1, 0x25c1; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x25f8, 0x25ff; 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 0x266f, 0x266f; 0x27c0, 0x27c4; 0x27c5, 0x27c5; 0x27c6, 0x27c6; 0x27c7, 0x27e5; 0x27e6, 0x27e6; 0x27e7, 0x27e7; 0x27e8, 0x27e8; 0x27e9, 0x27e9; 0x27ea, 0x27ea; 0x27eb, 0x27eb; 0x27ec, 0x27ec; 0x27ed, 0x27ed; 0x27ee, 0x27ee; 0x27ef, 0x27ef; 0x27f0, 0x27ff; 0x2900, 0x2982; 0x2983, 0x2983; 0x2984, 0x2984; 0x2985, 0x2985; 0x2986, 0x2986; 0x2987, 0x2987; 0x2988, 0x2988; 0x2989, 0x2989; 0x298a, 0x298a; 0x298b, 0x298b; 0x298c, 0x298c; 0x298d, 0x298d; 0x298e, 0x298e; 0x298f, 0x298f; 0x2990, 0x2990; 0x2991, 0x2991; 0x2992, 0x2992; 0x2993, 0x2993; 0x2994, 0x2994; 0x2995, 0x2995; 0x2996, 0x2996; 0x2997, 0x2997; 0x2998, 0x2998; 0x2999, 0x29d7; 0x29d8, 0x29d8; 0x29d9, 0x29d9; 0x29da, 0x29da; 0x29db, 0x29db; 0x29dc, 0x29fb; 0x29fc, 0x29fc; 0x29fd, 0x29fd; 0x29fe, 0x2aff; 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 0xfe61, 0xfe61; 0xfe62, 0xfe62; 0xfe63, 0xfe63; 0xfe64, 0xfe66; 0xfe68, 0xfe68; 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 0xff5c, 0xff5c; 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c1, 0x1d6c1; 0x1d6c2, 0x1d6da; 0x1d6db, 0x1d6db; 0x1d6dc, 0x1d6fa; 0x1d6fb, 0x1d6fb; 0x1d6fc, 0x1d714; 0x1d715, 0x1d715; 0x1d716, 0x1d734; 0x1d735, 0x1d735; 0x1d736, 0x1d74e; 0x1d74f, 0x1d74f; 0x1d750, 0x1d76e; 0x1d76f, 0x1d76f; 0x1d770, 0x1d788; 0x1d789, 0x1d789; 0x1d78a, 0x1d7a8; 0x1d7a9, 0x1d7a9; 0x1d7aa, 0x1d7c2; 0x1d7c3, 0x1d7c3; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1eef0, 0x1eef1; 0x1eeab, 0x1eebb; 0x1eea5, 0x1eea9; 0x1eea1, 0x1eea3; 0x1ee8b, 0x1ee9b] let other_alphabetic = [0x345, 0x345; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x657; 0x659, 0x65f; 0x670, 0x670; 0x6d6, 0x6dc; 0x6e1, 0x6e4; 0x6e7, 0x6e8; 0x6ed, 0x6ed; 0x711, 0x711; 0x730, 0x73f; 0x7a6, 0x7b0; 0x816, 0x817; 0x81b, 0x823; 0x825, 0x827; 0x829, 0x82c; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8f0, 0x902; 0x903, 0x903; 0x93a, 0x93a; 0x93b, 0x93b; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94e, 0x94f; 0x955, 0x957; 0x962, 0x963; 0x981, 0x981; 0x982, 0x983; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9d7, 0x9d7; 0x9e2, 0x9e3; 0xa01, 0xa02; 0xa03, 0xa03; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa51, 0xa51; 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xae2, 0xae3; 0xafa, 0xafc; 0xb01, 0xb01; 0xb02, 0xb03; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb56, 0xb56; 0xb57, 0xb57; 0xb62, 0xb63; 0xb82, 0xb82; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd7, 0xbd7; 0xc00, 0xc00; 0xc01, 0xc03; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc81; 0xc82, 0xc83; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccc; 0xcd5, 0xcd6; 0xce2, 0xce3; 0xd00, 0xd01; 0xd02, 0xd03; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd57, 0xd57; 0xd62, 0xd63; 0xd81, 0xd81; 0xd82, 0xd83; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 0xe31, 0xe31; 0xe34, 0xe3a; 0xe4d, 0xe4d; 0xeb1, 0xeb1; 0xeb4, 0xeb9; 0xebb, 0xebc; 0xecd, 0xecd; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf81; 0xf8d, 0xf97; 0xf99, 0xfbc; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1036; 0x1038, 0x1038; 0x103b, 0x103c; 0x103d, 0x103e; 0x1056, 0x1057; 0x1058, 0x1059; 0x105e, 0x1060; 0x1062, 0x1064; 0x1067, 0x106d; 0x1071, 0x1074; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108f, 0x108f; 0x109a, 0x109c; 0x109d, 0x109d; 0x1712, 0x1713; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a74; 0x1abf, 0x1ac0; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b43; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1bac, 0x1bad; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c36; 0x1de7, 0x1df4; 0x24b6, 0x24e9; 0x2de0, 0x2dff; 0xa674, 0xa67b; 0xa69e, 0xa69f; 0xa802, 0xa802; 0xa80b, 0xa80b; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa880, 0xa881; 0xa8b4, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8ff, 0xa8ff; 0xa926, 0xa92a; 0xa947, 0xa951; 0xa952, 0xa952; 0xa980, 0xa982; 0xa983, 0xa983; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9bf; 0xa9e5, 0xa9e5; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa43, 0xaa43; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaab0, 0xaab0; 0xaab2, 0xaab4; 0xaab7, 0xaab8; 0xaabe, 0xaabe; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xfb1e, 0xfb1e; 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10d24, 0x10d27; 0x10eab, 0x10eac; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11038, 0x11045; 0x11082, 0x11082; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x11100, 0x11102; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11132; 0x11145, 0x11146; 0x11180, 0x11181; 0x11182, 0x11182; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111bf; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112e8; 0x11300, 0x11301; 0x11302, 0x11303; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x11357, 0x11357; 0x11362, 0x11363; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11443, 0x11444; 0x11445, 0x11445; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115dc, 0x115dd; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x11640, 0x11640; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172a; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x11940, 0x11940; 0x11942, 0x11942; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e4, 0x119e4; 0x11a01, 0x11a0a; 0x11a35, 0x11a38; 0x11a39, 0x11a39; 0x11a3b, 0x11a3e; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 0x11d47, 0x11d47; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x16f4f, 0x16f4f; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16ff0, 0x16ff1; 0x1bc9e, 0x1bc9e; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1f170, 0x1f189; 0x1f150, 0x1f169; 0x1f130, 0x1f149; 0x1e947, 0x1e947; 0x1e026, 0x1e02a] let other_lowercase = [0xaa, 0xaa; 0xba, 0xba; 0x2b0, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 0x345, 0x345; 0x37a, 0x37a; 0x1d2c, 0x1d6a; 0x1d78, 0x1d78; 0x1d9b, 0x1dbf; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2170, 0x217f; 0x24d0, 0x24e9; 0xab5c, 0xab5f; 0xa7f8, 0xa7f9; 0xa770, 0xa770; 0xa69c, 0xa69d; 0x2c7c, 0x2c7d] let other_math = [0x5e, 0x5e; 0x3d0, 0x3d2; 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f5; 0x2016, 0x2016; 0x2032, 0x2034; 0x2040, 0x2040; 0x2061, 0x2064; 0x207d, 0x207d; 0x207e, 0x207e; 0x208d, 0x208d; 0x208e, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20eb, 0x20ef; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2128, 0x2128; 0x2129, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 0x2133, 0x2134; 0x2135, 0x2138; 0x213c, 0x213f; 0x2145, 0x2149; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 0x21a4, 0x21a5; 0x21a7, 0x21a7; 0x21a9, 0x21ad; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21db; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 0x2308, 0x2308; 0x2309, 0x2309; 0x230a, 0x230a; 0x230b, 0x230b; 0x23b4, 0x23b5; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23e2, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25bc, 0x25c0; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 0x27c5, 0x27c5; 0x27c6, 0x27c6; 0x27e6, 0x27e6; 0x27e7, 0x27e7; 0x27e8, 0x27e8; 0x27e9, 0x27e9; 0x27ea, 0x27ea; 0x27eb, 0x27eb; 0x27ec, 0x27ec; 0x27ed, 0x27ed; 0x27ee, 0x27ee; 0x27ef, 0x27ef; 0x2983, 0x2983; 0x2984, 0x2984; 0x2985, 0x2985; 0x2986, 0x2986; 0x2987, 0x2987; 0x2988, 0x2988; 0x2989, 0x2989; 0x298a, 0x298a; 0x298b, 0x298b; 0x298c, 0x298c; 0x298d, 0x298d; 0x298e, 0x298e; 0x298f, 0x298f; 0x2990, 0x2990; 0x2991, 0x2991; 0x2992, 0x2992; 0x2993, 0x2993; 0x2994, 0x2994; 0x2995, 0x2995; 0x2996, 0x2996; 0x2997, 0x2997; 0x2998, 0x2998; 0x29d8, 0x29d8; 0x29d9, 0x29d9; 0x29da, 0x29da; 0x29db, 0x29db; 0x29fc, 0x29fc; 0x29fd, 0x29fd; 0xfe61, 0xfe61; 0xfe63, 0xfe63; 0xfe68, 0xfe68; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb] let other_uppercase = [0x1f170, 0x1f189; 0x1f150, 0x1f169; 0x1f130, 0x1f149; 0x24b6, 0x24cf; 0x2160, 0x216f] let uppercase = [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x13a0, 0x13f5; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 0x2145, 0x2145; 0x2160, 0x216f; 0x2183, 0x2183; 0x24b6, 0x24cf; 0x2c00, 0x2c2e; 0x2c60, 0x2c60; 0x2c62, 0x2c64; 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 0x2c84, 0x2c84; 0x2c86, 0x2c86; 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 0x2cac, 0x2cac; 0x2cae, 0x2cae; 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 0x2cf2, 0x2cf2; 0xa640, 0xa640; 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 0xa648, 0xa648; 0xa64a, 0xa64a; 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 0xa652, 0xa652; 0xa654, 0xa654; 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 0xa65c, 0xa65c; 0xa65e, 0xa65e; 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 0xa666, 0xa666; 0xa668, 0xa668; 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 0xa682, 0xa682; 0xa684, 0xa684; 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 0xa68c, 0xa68c; 0xa68e, 0xa68e; 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 0xa696, 0xa696; 0xa698, 0xa698; 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 0xa726, 0xa726; 0xa728, 0xa728; 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 0xa732, 0xa732; 0xa734, 0xa734; 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 0xa73c, 0xa73c; 0xa73e, 0xa73e; 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 0xa746, 0xa746; 0xa748, 0xa748; 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 0xa750, 0xa750; 0xa752, 0xa752; 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 0xa75a, 0xa75a; 0xa75c, 0xa75c; 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 0xa764, 0xa764; 0xa766, 0xa766; 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 0xa76e, 0xa76e; 0xa779, 0xa779; 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 0xa782, 0xa782; 0xa784, 0xa784; 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 0xa790, 0xa790; 0xa792, 0xa792; 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 0xa79c, 0xa79c; 0xa79e, 0xa79e; 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 0xa7c9, 0xa7c9; 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 0x104b0, 0x104d3; 0x10c80, 0x10cb2; 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1d790, 0x1d7a8; 0x1d7ca, 0x1d7ca; 0x1e900, 0x1e921; 0x1f170, 0x1f189; 0x1f150, 0x1f169; 0x1f130, 0x1f149] let white_space = [0x9, 0xd; 0x20, 0x20; 0x85, 0x85; 0xa0, 0xa0; 0x1680, 0x1680; 0x2000, 0x200a; 0x2028, 0x2028; 0x2029, 0x2029; 0x202f, 0x202f; 0x205f, 0x205f; 0x3000, 0x3000] let xid_continue = [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x300, 0x36f; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x387, 0x387; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x64b, 0x65f; 0x660, 0x669; 0x66e, 0x66f; 0x670, 0x670; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6d6, 0x6dc; 0x6df, 0x6e4; 0x6e5, 0x6e6; 0x6e7, 0x6e8; 0x6ea, 0x6ed; 0x6ee, 0x6ef; 0x6f0, 0x6f9; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x711, 0x711; 0x712, 0x72f; 0x730, 0x74a; 0x74d, 0x7a5; 0x7a6, 0x7b0; 0x7b1, 0x7b1; 0x7c0, 0x7c9; 0x7ca, 0x7ea; 0x7eb, 0x7f3; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x815; 0x816, 0x819; 0x81a, 0x81a; 0x81b, 0x823; 0x824, 0x824; 0x825, 0x827; 0x828, 0x828; 0x829, 0x82d; 0x840, 0x858; 0x859, 0x85b; 0x860, 0x86a; 0x8a0, 0x8b4; 0x8b6, 0x8c7; 0x8d3, 0x8e1; 0x8e3, 0x902; 0x903, 0x903; 0x904, 0x939; 0x93a, 0x93a; 0x93b, 0x93b; 0x93c, 0x93c; 0x93d, 0x93d; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94d, 0x94d; 0x94e, 0x94f; 0x950, 0x950; 0x951, 0x957; 0x958, 0x961; 0x962, 0x963; 0x966, 0x96f; 0x971, 0x971; 0x972, 0x980; 0x981, 0x981; 0x982, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9bc; 0x9bd, 0x9bd; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9cd, 0x9cd; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9e2, 0x9e3; 0x9e6, 0x9ef; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa02; 0xa03, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa3c, 0xa3c; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa6f; 0xa70, 0xa71; 0xa72, 0xa74; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabc, 0xabc; 0xabd, 0xabd; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xacd, 0xacd; 0xad0, 0xad0; 0xae0, 0xae1; 0xae2, 0xae3; 0xae6, 0xaef; 0xaf9, 0xaf9; 0xafa, 0xaff; 0xb01, 0xb01; 0xb02, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb3c; 0xb3d, 0xb3d; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb4d, 0xb4d; 0xb55, 0xb56; 0xb57, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb62, 0xb63; 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb82; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbcd, 0xbcd; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc00; 0xc01, 0xc03; 0xc04, 0xc04; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc60, 0xc61; 0xc62, 0xc63; 0xc66, 0xc6f; 0xc80, 0xc80; 0xc81, 0xc81; 0xc82, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbc, 0xcbc; 0xcbd, 0xcbd; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccd; 0xcd5, 0xcd6; 0xcde, 0xcde; 0xce0, 0xce1; 0xce2, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf2; 0xd00, 0xd01; 0xd02, 0xd03; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3b, 0xd3c; 0xd3d, 0xd3d; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd4d, 0xd4d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd57, 0xd57; 0xd5f, 0xd61; 0xd62, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd81; 0xd82, 0xd83; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 0xe01, 0xe30; 0xe31, 0xe31; 0xe32, 0xe33; 0xe34, 0xe3a; 0xe40, 0xe45; 0xe46, 0xe46; 0xe47, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb1, 0xeb1; 0xeb2, 0xeb3; 0xeb4, 0xebc; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xec8, 0xecd; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 0xf3e, 0xf3f; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf84; 0xf86, 0xf87; 0xf88, 0xf8c; 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x1000, 0x102a; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1037; 0x1038, 0x1038; 0x1039, 0x103a; 0x103b, 0x103c; 0x103d, 0x103e; 0x103f, 0x103f; 0x1040, 0x1049; 0x1050, 0x1055; 0x1056, 0x1057; 0x1058, 0x1059; 0x105a, 0x105d; 0x105e, 0x1060; 0x1061, 0x1061; 0x1062, 0x1064; 0x1065, 0x1066; 0x1067, 0x106d; 0x106e, 0x1070; 0x1071, 0x1074; 0x1075, 0x1081; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108e, 0x108e; 0x108f, 0x108f; 0x1090, 0x1099; 0x109a, 0x109c; 0x109d, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x170c; 0x170e, 0x1711; 0x1712, 0x1714; 0x1720, 0x1731; 0x1732, 0x1734; 0x1740, 0x1751; 0x1752, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b4, 0x17b5; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x17c9, 0x17d3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x17dd, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x1810, 0x1819; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18a9, 0x18a9; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1939, 0x193b; 0x1946, 0x194f; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x19d0, 0x19d9; 0x19da, 0x19da; 0x1a00, 0x1a16; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a20, 0x1a54; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a7c; 0x1a7f, 0x1a7f; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1ac0; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b05, 0x1b33; 0x1b34, 0x1b34; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b44; 0x1b45, 0x1b4b; 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1b83, 0x1ba0; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1baa, 0x1baa; 0x1bab, 0x1bad; 0x1bae, 0x1baf; 0x1bb0, 0x1bb9; 0x1bba, 0x1be5; 0x1be6, 0x1be6; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1bf2, 0x1bf3; 0x1c00, 0x1c23; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c37; 0x1c40, 0x1c49; 0x1c4d, 0x1c4f; 0x1c50, 0x1c59; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce1, 0x1ce1; 0x1ce2, 0x1ce8; 0x1ce9, 0x1cec; 0x1ced, 0x1ced; 0x1cee, 0x1cf3; 0x1cf4, 0x1cf4; 0x1cf5, 0x1cf6; 0x1cf7, 0x1cf7; 0x1cf8, 0x1cf9; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1dc0, 0x1df9; 0x1dfb, 0x1dff; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c2e; 0x2c30, 0x2c5e; 0x2c60, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cef, 0x2cf1; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d7f, 0x2d7f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x302a, 0x302d; 0x302e, 0x302f; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x3099, 0x309a; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9ffc; 0xa000, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa620, 0xa629; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa66f, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa69e, 0xa69f; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa6f0, 0xa6f1; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7bf; 0xa7c2, 0xa7ca; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa802, 0xa802; 0xa803, 0xa805; 0xa806, 0xa806; 0xa807, 0xa80a; 0xa80b, 0xa80b; 0xa80c, 0xa822; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa82c, 0xa82c; 0xa840, 0xa873; 0xa880, 0xa881; 0xa882, 0xa8b3; 0xa8b4, 0xa8c3; 0xa8c4, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f1; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa8ff, 0xa8ff; 0xa900, 0xa909; 0xa90a, 0xa925; 0xa926, 0xa92d; 0xa930, 0xa946; 0xa947, 0xa951; 0xa952, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa982; 0xa983, 0xa983; 0xa984, 0xa9b2; 0xa9b3, 0xa9b3; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9c0; 0xa9cf, 0xa9cf; 0xa9d0, 0xa9d9; 0xa9e0, 0xa9e4; 0xa9e5, 0xa9e5; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9f0, 0xa9f9; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa40, 0xaa42; 0xaa43, 0xaa43; 0xaa44, 0xaa4b; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa50, 0xaa59; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaa7e, 0xaaaf; 0xaab0, 0xaab0; 0xaab1, 0xaab1; 0xaab2, 0xaab4; 0xaab5, 0xaab6; 0xaab7, 0xaab8; 0xaab9, 0xaabd; 0xaabe, 0xaabf; 0xaac0, 0xaac0; 0xaac1, 0xaac1; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xaaf5, 0xaaf5; 0xaaf6, 0xaaf6; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xabec, 0xabec; 0xabed, 0xabed; 0xabf0, 0xabf9; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1e, 0xfb1e; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff10, 0xff19; 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10376, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10ae5, 0x10ae6; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d24, 0x10d27; 0x10d30, 0x10d39; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f46, 0x10f50; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11003, 0x11037; 0x11038, 0x11046; 0x11066, 0x1106f; 0x1107f, 0x11081; 0x11082, 0x11082; 0x11083, 0x110af; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110b9, 0x110ba; 0x110d0, 0x110e8; 0x110f0, 0x110f9; 0x11100, 0x11102; 0x11103, 0x11126; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11144; 0x11145, 0x11146; 0x11147, 0x11147; 0x11150, 0x11172; 0x11173, 0x11173; 0x11176, 0x11176; 0x11180, 0x11181; 0x11182, 0x11182; 0x11183, 0x111b2; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111c0; 0x111c1, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x111d0, 0x111d9; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11235, 0x11235; 0x11236, 0x11237; 0x1123e, 0x1123e; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112ea; 0x112f0, 0x112f9; 0x11300, 0x11301; 0x11302, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x1133c; 0x1133d, 0x1133d; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11361; 0x11362, 0x11363; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11400, 0x11434; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11442, 0x11444; 0x11445, 0x11445; 0x11446, 0x11446; 0x11447, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x1145e; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x114c2, 0x114c3; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x114d0, 0x114d9; 0x11580, 0x115ae; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115bf, 0x115c0; 0x115d8, 0x115db; 0x115dc, 0x115dd; 0x11600, 0x1162f; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x1163f, 0x11640; 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116aa; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x116b6, 0x116b6; 0x116b7, 0x116b7; 0x116b8, 0x116b8; 0x116c0, 0x116c9; 0x11700, 0x1171a; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172b; 0x11730, 0x11739; 0x11800, 0x1182b; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x11839, 0x1183a; 0x118a0, 0x118df; 0x118e0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193d, 0x1193d; 0x1193e, 0x1193e; 0x1193f, 0x1193f; 0x11940, 0x11940; 0x11941, 0x11941; 0x11942, 0x11942; 0x11943, 0x11943; 0x11950, 0x11959; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e0, 0x119e0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x119e4, 0x119e4; 0x11a00, 0x11a00; 0x11a01, 0x11a0a; 0x11a0b, 0x11a32; 0x11a33, 0x11a38; 0x11a39, 0x11a39; 0x11a3a, 0x11a3a; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 0x11a50, 0x11a50; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a5c, 0x11a89; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11a98, 0x11a99; 0x11a9d, 0x11a9d; 0x11ac0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c3f, 0x11c3f; 0x11c40, 0x11c40; 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d45; 0x11d46, 0x11d46; 0x11d47, 0x11d47; 0x11d50, 0x11d59; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11d97, 0x11d97; 0x11d98, 0x11d98; 0x11da0, 0x11da9; 0x11ee0, 0x11ef2; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b2f; 0x16b30, 0x16b36; 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f4f; 0x16f50, 0x16f50; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16fe4, 0x16fe4; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b11e; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1d165, 0x1d166; 0x1d167, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e100, 0x1e12c; 0x1e130, 0x1e136; 0x1e137, 0x1e13d; 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e2c0, 0x1e2eb; 0x1e2ec, 0x1e2ef; 0x1e2f0, 0x1e2f9; 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e943; 0x1e944, 0x1e94a; 0x1e94b, 0x1e94b; 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 0x20000, 0x2a6dd; 0x2a700, 0x2b734; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0xe0100, 0xe01ef; 0x30000, 0x3134a; 0x2f800, 0x2fa1d] let xid_start = [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x66e, 0x66f; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x8a0, 0x8b4; 0x8b6, 0x8c7; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 0x971, 0x971; 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcde, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe32; 0xe40, 0xe45; 0xe46, 0xe46; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb2; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x170c; 0x170e, 0x1711; 0x1720, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4b; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c2e; 0x2c30, 0x2c5e; 0x2c60, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9ffc; 0xa000, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7bf; 0xa7c2, 0xa7ca; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11800, 0x1182b; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ac0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b11e; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e2c0, 0x1e2eb; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6dd; 0x2a700, 0x2b734; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0; 0x2b820, 0x2cea1; 0x2b740, 0x2b81d] let list = [ ("alphabetic", alphabetic); ("ascii_hex_digit", ascii_hex_digit); ("hex_digit", hex_digit); ("id_continue", id_continue); ("id_start", id_start); ("lowercase", lowercase); ("math", math); ("other_alphabetic", other_alphabetic); ("other_lowercase", other_lowercase); ("other_math", other_math); ("other_uppercase", other_uppercase); ("uppercase", uppercase); ("white_space", white_space); ("xid_continue", xid_continue); ("xid_start", xid_start) ] end sedlex-2.5/sedlex.opam000066400000000000000000000021431415251212000147770ustar00rootroot00000000000000# This file is generated by dune, edit dune-project instead opam-version: "2.0" version: "2.5" synopsis: "An OCaml lexer generator for Unicode" description: """ sedlex is a lexer generator for OCaml. It is similar to ocamllex, but supports Unicode. Unlike ocamllex, sedlex allows lexer specifications within regular OCaml source files. Lexing specific constructs are provided via a ppx syntax extension.""" maintainer: ["Alain Frisch "] authors: [ "Alain Frisch " "https://github.com/ocaml-community/sedlex/graphs/contributors" ] license: "MIT" homepage: "https://github.com/ocaml-community/sedlex" bug-reports: "https://github.com/ocaml-community/sedlex/issues" depends: [ "ocaml" {>= "4.04"} "dune" {>= "2.8"} "ppxlib" {>= "0.18.0"} "gen" "uchar" "odoc" {with-doc} ] build: [ ["dune" "subst"] {dev} [ "dune" "build" "-p" name "-j" jobs "@install" "@runtest" {with-test} "@doc" {with-doc} ] ] dev-repo: "git+https://github.com/ocaml-community/sedlex.git" doc: "https://ocaml-community.github.io/sedlex/index.html" sedlex-2.5/sedlex.opam.template000066400000000000000000000000731415251212000166110ustar00rootroot00000000000000doc: "https://ocaml-community.github.io/sedlex/index.html" sedlex-2.5/src/000077500000000000000000000000001415251212000134245ustar00rootroot00000000000000sedlex-2.5/src/generator/000077500000000000000000000000001415251212000154125ustar00rootroot00000000000000sedlex-2.5/src/generator/README.md000066400000000000000000000026251415251212000166760ustar00rootroot00000000000000# Unicode specification extraction The file `src/syntax/unicode.ml` is generated using the data available at [unicode.org](https://www.unicode.org/Public/). The rule with `targets unicode.ml` at `src/syntax/dune` is the main entry point for this process. It specifies how `unicode.ml` should be generated when running `dune @build` and triggers: * download of data files at `src/generator/data` * build of `src/generator/gen_unicode.exe` * generation `unicode.ml` and places a copy in the source tree and a copy in the build tree The rule is ignored when using the `--ignore-promoted-rules` option. This option is also implied when using `-p`/`--for-release-of-packages` which is used for production build so production build do not download the text data and re-generate `unicode.ml`. However, each development build re-generates a `unicode.ml` file which is placed into the source tree and, thus, can be easily commited when it is updated. See: [dune documentation](https://dune.readthedocs.io/en/latest/dune-files.html#modes) for more information. ## Update to new Unicode versions To update the supported version, update the URL at `src/generator/data/base_url`. Make sure to not include a trailing new line so that it is properly read in `src/generator/data/dune`. Finally, place a copy of the old `unicode.ml` at `examples/unicode_old.ml` and update `test_versions` and `regressions` in `examples/regressions.ml`. sedlex-2.5/src/generator/data/000077500000000000000000000000001415251212000163235ustar00rootroot00000000000000sedlex-2.5/src/generator/data/base_url000066400000000000000000000000451415251212000200410ustar00rootroot00000000000000https://www.unicode.org/Public/14.0.0sedlex-2.5/src/generator/data/dune000066400000000000000000000007511415251212000172040ustar00rootroot00000000000000(rule (targets DerivedCoreProperties.txt) (deps base_url) (action (run curl -L -s %{read:base_url}/ucd/DerivedCoreProperties.txt -o DerivedCoreProperties.txt))) (rule (targets DerivedGeneralCategory.txt) (deps base_url) (action (run curl -L -s %{read:base_url}/ucd/extracted/DerivedGeneralCategory.txt -o DerivedGeneralCategory.txt))) (rule (targets PropList.txt) (deps base_url) (action (run curl -L -s %{read:base_url}/ucd/PropList.txt -o PropList.txt))) sedlex-2.5/src/generator/dune000066400000000000000000000002501415251212000162650ustar00rootroot00000000000000(executable (name gen_unicode) (libraries str)) (rule (targets gen_unicode.ml) (deps gen_unicode.ml.inc) (action (run cp gen_unicode.ml.inc gen_unicode.ml))) sedlex-2.5/src/generator/gen_unicode.ml.inc000066400000000000000000000111341415251212000207730ustar00rootroot00000000000000(* This file generates unicode data from * the files exported at https://www.unicode.org/Public/ * and stored at src/generator/data. *) let target = Sys.argv.(1) let categories = Hashtbl.create 1024 let labels = Hashtbl.create 1024 (* Categories and Properties that we're keeping. *) let keepers = ["cc"; "cf"; "cn"; "co"; "cs"; "ll"; "lm"; "lo"; "lt"; "lu"; "mc"; "me"; "mn"; "nd"; "nl"; "no"; "pc"; "pd"; "pe"; "pf"; "pi"; "po"; "ps"; "sc"; "sk"; "sm"; "so"; "zl"; "zp"; "zs"; "alphabetic"; "ascii_hex_digit"; "hex_digit"; "id_continue"; "id_start"; "lowercase"; "math"; "other_alphabetic"; "other_lowercase"; "other_math"; "other_uppercase"; "uppercase"; "white_space"; "xid_continue"; "xid_start"] let prop_interval_rex = Str.regexp "^\\([0-9a-fA-F]+\\)\\.\\.\\([0-9a-fA-F]+\\)[ ]*;[ ]+\\([a-zA-Z_]+\\)[ ]+#[ ]+\\([a-zA-Z][a-zA-Z&]\\)" let prop_single_rex = Str.regexp "^\\([0-9a-fA-F]+\\)[ ]*;[ ]+\\([a-zA-Z_]+\\)[ ]+#[ ]+\\([a-zA-Z][a-zA-Z&]\\)" let derived_interval_rex = Str.regexp "^\\([0-9a-fA-F]+\\)\\.\\.\\([0-9a-fA-F]+\\)[ ]*;[ ]+\\([a-zA-Z_]+\\)" let derived_single_rex = Str.regexp "^\\([0-9a-fA-F]+\\)[ ]*;[ ]+\\([a-zA-Z_]+\\)" let add_entry hashtbl (b,e) name = let mk s = int_of_string (Printf.sprintf "0x%s" s) in let interval = (mk b, mk e) in let label = String.lowercase_ascii name in if List.mem label keepers then Hashtbl.add hashtbl label interval let match_interval s = if (Str.string_match prop_interval_rex s 0) then let interval = Str.matched_group 1 s, Str.matched_group 2 s in add_entry labels interval (Str.matched_group 3 s); add_entry categories interval (Str.matched_group 4 s) let match_single s = if (Str.string_match prop_single_rex s 0) then let interval = Str.matched_group 1 s, Str.matched_group 1 s in add_entry labels interval (Str.matched_group 2 s); add_entry categories interval (Str.matched_group 3 s) let match_derived_interval s = if (Str.string_match derived_interval_rex s 0) then let interval = Str.matched_group 1 s, Str.matched_group 2 s in add_entry categories interval (Str.matched_group 3 s) let match_derived_single s = if (Str.string_match derived_single_rex s 0) then let interval = Str.matched_group 1 s, Str.matched_group 1 s in add_entry categories interval (Str.matched_group 2 s) let split list n = let rec aux acc rem = match acc, rem with | [], el::rem -> aux [[el]] rem | l::acc, el::rem when List.length l = n -> aux ([el]::(List.rev l)::acc) rem | l::acc, el::rem -> aux ((el::l)::acc) rem | _, [] -> List.rev acc in aux [] list let print_elements ch hashtbl = let cats = List.sort_uniq compare (Hashtbl.fold (fun cat _ l -> cat::l) hashtbl []) in let len = List.length cats in List.iter (fun c -> let entries = List.map (fun (b,e) -> Printf.sprintf "0x%x, 0x%x" b e) (List.sort_uniq compare (Hashtbl.find_all hashtbl c)) in let entries = List.map (String.concat "; ") (split entries 5) in let entries = String.concat ";\n " entries in Printf.fprintf ch " let %s =\n [%s]\n\n" c entries) cats; Printf.fprintf ch " let list = [\n"; List.iteri (fun pos c -> Printf.fprintf ch " (%S, %s)%s\n" c c (if pos == len - 1 then "" else ";")) cats; Printf.fprintf ch " ]\n\n" let files = [ ("PropList.txt", [match_interval; match_single]); ("DerivedCoreProperties.txt", [match_interval; match_single]); ("DerivedGeneralCategory.txt", [match_derived_interval; match_derived_single]) ] let read_version fname = let version_rex = Str.regexp "^# PropList-\\([0-9]+\\.[0-9]+\\.[0-9]+\\)\\.txt" in let ch = open_in_bin fname in let s = input_line ch in close_in ch; ignore(Str.string_match version_rex s 0); Str.matched_group 1 s let () = let base_dir = Filename.concat (Filename.dirname Sys.executable_name) "data" in let version = read_version (Filename.concat base_dir "PropList.txt") in List.iter (fun (fname, fns) -> let ch = open_in_bin (Filename.concat base_dir fname) in try while true do let ret = input_line ch in List.iter (fun fn -> fn ret) fns done with End_of_file -> close_in ch) files; let ch = open_out_bin target in Printf.fprintf ch "let version = %S\n\n" version; Printf.fprintf ch "module Categories = struct\n\n"; print_elements ch categories; Printf.fprintf ch "end\n\n"; Printf.fprintf ch "module Properties = struct\n\n"; print_elements ch labels; Printf.fprintf ch "end\n"; close_out ch sedlex-2.5/src/lib/000077500000000000000000000000001415251212000141725ustar00rootroot00000000000000sedlex-2.5/src/lib/dune000066400000000000000000000002011415251212000150410ustar00rootroot00000000000000(library (name sedlex) (public_name sedlex) (wrapped false) (libraries gen uchar) (flags :standard -w +A-4-9 -safe-string)) sedlex-2.5/src/lib/sedlexing.ml000066400000000000000000000365511415251212000165200ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) exception InvalidCodepoint of int exception MalFormed let gen_of_channel chan = let f () = try Some (input_char chan) with End_of_file -> None in f let (>>=) o f = match o with | Some x -> f x | None -> None (* For legacy purposes. *) let gen_of_stream stream = let f () = try Some (Stream.next stream) with Stream.Failure -> None in f (* Absolute position from the beginning of the stream *) type apos = int type lexbuf = { refill: (Uchar.t array -> int -> int -> int); mutable buf: Uchar.t array; mutable len: int; (* Number of meaningful char in buffer *) mutable offset: apos; (* Position of the first char in buffer in the input stream *) mutable pos: int; (* pos is the index in the buffer *) mutable curr_bol: int; (* bol is the index in the input stream but not buffer *) mutable curr_line: int; (* start from 1, if it is 0, we would not track postion info for you *) mutable start_pos: int; (* First char we need to keep visible *) mutable start_bol: int; mutable start_line: int; mutable marked_pos: int; mutable marked_bol: int; mutable marked_line: int; mutable marked_val: int; mutable filename: string; mutable finished: bool; } let chunk_size = 512 let empty_lexbuf = { refill = (fun _ _ _ -> assert false); buf = [| |]; len = 0; offset = 0; pos = 0; curr_bol = 0; curr_line = 0; start_pos = 0; start_bol = 0; start_line = 0; marked_pos = 0; marked_bol = 0; marked_line = 0; marked_val = 0; filename = ""; finished = false; } let create f = { empty_lexbuf with refill = f; buf = Array.make chunk_size (Uchar.of_int 0); curr_line = 1; } let set_position lexbuf position = lexbuf.offset <- position.Lexing.pos_cnum - lexbuf.pos; lexbuf.curr_bol <- position.Lexing.pos_bol; lexbuf.curr_line <- position.Lexing.pos_lnum let set_filename lexbuf fname = lexbuf.filename <- fname let fill_buf_from_gen f gen buf pos len = let rec aux i = if i >= len then len else match gen () with | Some c -> buf.(pos + i) <- f c ; aux (i+1) | None -> i in aux 0 let from_gen s = create (fill_buf_from_gen (fun id -> id) s) let from_stream s = from_gen @@ gen_of_stream s let from_int_array a = let len = Array.length a in { empty_lexbuf with buf = Array.init len (fun i -> Uchar.of_int a.(i)); len = len; finished = true; } let from_uchar_array a = let len = Array.length a in { empty_lexbuf with buf = Array.init len (fun i -> a.(i)); len = len; finished = true; } let refill lexbuf = if lexbuf.len + chunk_size > Array.length lexbuf.buf then begin let s = lexbuf.start_pos in let ls = lexbuf.len - s in if ls + chunk_size <= Array.length lexbuf.buf then Array.blit lexbuf.buf s lexbuf.buf 0 ls else begin let newlen = (Array.length lexbuf.buf + chunk_size) * 2 in let newbuf = Array.make newlen (Uchar.of_int 0) in Array.blit lexbuf.buf s newbuf 0 ls; lexbuf.buf <- newbuf end; lexbuf.len <- ls; lexbuf.offset <- lexbuf.offset + s; lexbuf.pos <- lexbuf.pos - s; lexbuf.marked_pos <- lexbuf.marked_pos - s; lexbuf.start_pos <- 0 end; let n = lexbuf.refill lexbuf.buf lexbuf.pos chunk_size in if n = 0 then lexbuf.finished <- true else lexbuf.len <- lexbuf.len + n let new_line lexbuf = if lexbuf.curr_line != 0 then lexbuf.curr_line <- lexbuf.curr_line + 1; lexbuf.curr_bol <- lexbuf.pos + lexbuf.offset let next lexbuf = if (not lexbuf.finished) && (lexbuf.pos = lexbuf.len) then refill lexbuf; if lexbuf.finished && (lexbuf.pos = lexbuf.len) then None else begin let ret = lexbuf.buf.(lexbuf.pos) in lexbuf.pos <- lexbuf.pos + 1; if ret = (Uchar.of_int 10) then new_line lexbuf; Some ret end let __private__next_int lexbuf : int = if (not lexbuf.finished) && (lexbuf.pos = lexbuf.len) then refill lexbuf; if lexbuf.finished && (lexbuf.pos = lexbuf.len) then -1 else begin let ret = lexbuf.buf.(lexbuf.pos) in lexbuf.pos <- lexbuf.pos + 1; if ret = (Uchar.of_int 10) then new_line lexbuf; Uchar.to_int ret end let mark lexbuf i = lexbuf.marked_pos <- lexbuf.pos; lexbuf.marked_bol <- lexbuf.curr_bol; lexbuf.marked_line <- lexbuf.curr_line; lexbuf.marked_val <- i let start lexbuf = lexbuf.start_pos <- lexbuf.pos; lexbuf.start_bol <- lexbuf.curr_bol; lexbuf.start_line <- lexbuf.curr_line; mark lexbuf (-1) let backtrack lexbuf = lexbuf.pos <- lexbuf.marked_pos; lexbuf.curr_bol <- lexbuf.marked_bol; lexbuf.curr_line <- lexbuf.marked_line; lexbuf.marked_val let rollback lexbuf = lexbuf.pos <- lexbuf.start_pos; lexbuf.curr_bol <- lexbuf.start_bol; lexbuf.curr_line <- lexbuf.start_line let lexeme_start lexbuf = lexbuf.start_pos + lexbuf.offset let lexeme_end lexbuf = lexbuf.pos + lexbuf.offset let loc lexbuf = (lexbuf.start_pos + lexbuf.offset, lexbuf.pos + lexbuf.offset) let lexeme_length lexbuf = lexbuf.pos - lexbuf.start_pos let sub_lexeme lexbuf pos len = Array.sub lexbuf.buf (lexbuf.start_pos + pos) len let lexeme lexbuf = Array.sub lexbuf.buf (lexbuf.start_pos) (lexbuf.pos - lexbuf.start_pos) let lexeme_char lexbuf pos = lexbuf.buf.(lexbuf.start_pos + pos) let lexing_positions lexbuf = let start_p = { Lexing.pos_fname = lexbuf.filename; pos_lnum = lexbuf.start_line; pos_cnum = lexbuf.start_pos + lexbuf.offset; pos_bol = lexbuf.start_bol; } and curr_p = { Lexing.pos_fname = lexbuf.filename; pos_lnum = lexbuf.curr_line; pos_cnum = lexbuf.pos + lexbuf.offset; pos_bol = lexbuf.curr_bol; } in (start_p, curr_p) let with_tokenizer lexer' lexbuf = let lexer () = let token = lexer' lexbuf in let (start_p, curr_p) = lexing_positions lexbuf in (token, start_p, curr_p) in lexer module Latin1 = struct let from_gen s = create (fill_buf_from_gen Uchar.of_char s) let from_stream s = from_gen @@ gen_of_stream s let from_string s = let len = String.length s in { empty_lexbuf with buf = Array.init len (fun i -> Uchar.of_char s.[i]); len = len; finished = true; } let from_channel ic = from_gen (gen_of_channel ic) let to_latin1 c = if Uchar.is_char c then Uchar.to_char c else raise (InvalidCodepoint (Uchar.to_int c)) let lexeme_char lexbuf pos = to_latin1 (lexeme_char lexbuf pos) let sub_lexeme lexbuf pos len = let s = Bytes.create len in for i = 0 to len - 1 do Bytes.set s i (to_latin1 lexbuf.buf.(lexbuf.start_pos + pos + i)) done; Bytes.to_string s let lexeme lexbuf = sub_lexeme lexbuf 0 (lexbuf.pos - lexbuf.start_pos) end module Utf8 = struct module Helper = struct (* http://www.faqs.org/rfcs/rfc3629.html *) let width = Array.make 256 (-1) let () = for i = 0 to 127 do width.(i) <- 1 done; for i = 192 to 223 do width.(i) <- 2 done; for i = 224 to 239 do width.(i) <- 3 done; for i = 240 to 247 do width.(i) <- 4 done let next s i = match s.[i] with | '\000'..'\127' as c -> Char.code c | '\192'..'\223' as c -> let n1 = Char.code c in let n2 = Char.code s.[i+1] in if (n2 lsr 6 != 0b10) then raise MalFormed; ((n1 land 0x1f) lsl 6) lor (n2 land 0x3f) | '\224'..'\239' as c -> let n1 = Char.code c in let n2 = Char.code s.[i+1] in let n3 = Char.code s.[i+2] in if (n2 lsr 6 != 0b10) || (n3 lsr 6 != 0b10) then raise MalFormed; let p = ((n1 land 0x0f) lsl 12) lor ((n2 land 0x3f) lsl 6) lor (n3 land 0x3f) in if (p >= 0xd800) && (p <= 0xdf00) then raise MalFormed; p | '\240'..'\247' as c -> let n1 = Char.code c in let n2 = Char.code s.[i+1] in let n3 = Char.code s.[i+2] in let n4 = Char.code s.[i+3] in if (n2 lsr 6 != 0b10) || (n3 lsr 6 != 0b10) || (n4 lsr 6 != 0b10) then raise MalFormed; ((n1 land 0x07) lsl 18) lor ((n2 land 0x3f) lsl 12) lor ((n3 land 0x3f) lsl 6) lor (n4 land 0x3f) | _ -> raise MalFormed let from_gen s = Gen.next s >>= function | '\000'..'\127' as c -> Some (Uchar.of_char c) | '\192'..'\223' as c -> let n1 = Char.code c in Gen.next s >>= fun c2 -> let n2 = Char.code c2 in if (n2 lsr 6 != 0b10) then raise MalFormed; Some (Uchar.of_int (((n1 land 0x1f) lsl 6) lor (n2 land 0x3f))) | '\224'..'\239' as c -> let n1 = Char.code c in Gen.next s >>= fun c2 -> let n2 = Char.code c2 in Gen.next s >>= fun c3 -> let n3 = Char.code c3 in if (n2 lsr 6 != 0b10) || (n3 lsr 6 != 0b10) then raise MalFormed; Some (Uchar.of_int (((n1 land 0x0f) lsl 12) lor ((n2 land 0x3f) lsl 6) lor (n3 land 0x3f))) | '\240'..'\247' as c -> let n1 = Char.code c in Gen.next s >>= fun c2 -> let n2 = Char.code c2 in Gen.next s >>= fun c3 -> let n3 = Char.code c3 in Gen.next s >>= fun c4 -> let n4 = Char.code c4 in if (n2 lsr 6 != 0b10) || (n3 lsr 6 != 0b10) || (n4 lsr 6 != 0b10) then raise MalFormed; Some (Uchar.of_int (((n1 land 0x07) lsl 18) lor ((n2 land 0x3f) lsl 12) lor ((n3 land 0x3f) lsl 6) lor (n4 land 0x3f))) | _ -> raise MalFormed let compute_len s pos bytes = let rec aux n i = if i >= pos + bytes then if i = pos + bytes then n else raise MalFormed else let w = width.(Char.code s.[i]) in if w > 0 then aux (succ n) (i + w) else raise MalFormed in aux 0 pos let rec blit_to_int s spos a apos n = if n > 0 then begin a.(apos) <- next s spos; blit_to_int s (spos + width.(Char.code s.[spos])) a (succ apos) (pred n) end let to_int_array s pos bytes = let n = compute_len s pos bytes in let a = Array.make n 0 in blit_to_int s pos a 0 n; a (**************************) let store b p = if p <= 0x7f then Buffer.add_char b (Char.chr p) else if p <= 0x7ff then ( Buffer.add_char b (Char.chr (0xc0 lor (p lsr 6))); Buffer.add_char b (Char.chr (0x80 lor (p land 0x3f))) ) else if p <= 0xffff then ( if (p >= 0xd800 && p < 0xe000) then raise MalFormed; Buffer.add_char b (Char.chr (0xe0 lor (p lsr 12))); Buffer.add_char b (Char.chr (0x80 lor ((p lsr 6) land 0x3f))); Buffer.add_char b (Char.chr (0x80 lor (p land 0x3f))) ) else if p <= 0x10ffff then ( Buffer.add_char b (Char.chr (0xf0 lor (p lsr 18))); Buffer.add_char b (Char.chr (0x80 lor ((p lsr 12) land 0x3f))); Buffer.add_char b (Char.chr (0x80 lor ((p lsr 6) land 0x3f))); Buffer.add_char b (Char.chr (0x80 lor (p land 0x3f))) ) else raise MalFormed let from_uchar_array a apos len = let b = Buffer.create (len * 4) in let rec aux apos len = if len > 0 then (store b (Uchar.to_int a.(apos)); aux (succ apos) (pred len)) else Buffer.contents b in aux apos len let gen_from_char_gen s = (fun () -> from_gen s) end let from_channel ic = from_gen (Helper.gen_from_char_gen (gen_of_channel ic)) let from_gen s = create (fill_buf_from_gen (fun id -> id) (Helper.gen_from_char_gen s)) let from_stream s = from_gen @@ gen_of_stream s let from_string s = from_int_array (Helper.to_int_array s 0 (String.length s)) let sub_lexeme lexbuf pos len = Helper.from_uchar_array lexbuf.buf (lexbuf.start_pos + pos) len let lexeme lexbuf = sub_lexeme lexbuf 0 (lexbuf.pos - lexbuf.start_pos) end module Utf16 = struct type byte_order = Little_endian | Big_endian module Helper = struct (* http://www.ietf.org/rfc/rfc2781.txt *) let number_of_char_pair bo c1 c2 = match bo with | Little_endian -> ((Char.code c2) lsl 8) + (Char.code c1) | Big_endian -> ((Char.code c1) lsl 8) + (Char.code c2) let char_pair_of_number bo num = match bo with | Little_endian -> (Char.chr (num land 0xFF), Char.chr ((num lsr 8) land 0xFF )) | Big_endian -> (Char.chr ((num lsr 8) land 0xFF), Char.chr (num land 0xFF)) let next_in_gen bo s = Gen.next s >>= fun c1 -> Gen.next s >>= fun c2 -> Some (number_of_char_pair bo c1 c2) let from_gen bo s w1 = if w1 = 0xfffe then raise (InvalidCodepoint w1); if w1 < 0xd800 || 0xdfff < w1 then Some (Uchar.of_int w1) else if w1 <= 0xdbff then next_in_gen bo s >>= fun w2 -> if w2 < 0xdc00 || w2 > 0xdfff then raise MalFormed; let upper10 = (w1 land 0x3ff) lsl 10 and lower10 = w2 land 0x3ff in Some (Uchar.of_int (0x10000 + upper10 + lower10)) else raise MalFormed let gen_from_char_gen opt_bo s = let bo = ref opt_bo in fun () -> Gen.next s >>= fun c1 -> Gen.next s >>= fun c2 -> let o = match !bo with | Some o -> o | None -> let o = match (Char.code c1, Char.code c2) with | (0xff,0xfe) -> Little_endian | _ -> Big_endian in bo := Some o; o in from_gen o s (number_of_char_pair o c1 c2) let compute_len opt_bo str pos bytes = let s = gen_from_char_gen opt_bo (Gen.init ~limit:(bytes - pos) (fun i -> (str.[i + pos]))) in let l = ref 0 in Gen.iter (fun _ -> incr l) s ; !l let blit_to_int opt_bo s spos a apos bytes = let s = gen_from_char_gen opt_bo (Gen.init ~limit:(bytes - spos) (fun i -> (s.[i + spos]))) in let p = ref apos in Gen.iter (fun x -> a.(!p) <- x ; incr p) s let to_uchar_array opt_bo s pos bytes = let len = compute_len opt_bo s pos bytes in let a = Array.make len (Uchar.of_int 0) in blit_to_int opt_bo s pos a 0 bytes ; a let store bo buf code = if code < 0x10000 then ( let (c1,c2) = char_pair_of_number bo code in Buffer.add_char buf c1; Buffer.add_char buf c2 ) else ( let u' = code - 0x10000 in let w1 = 0xd800 + (u' lsr 10) and w2 = 0xdc00 + (u' land 0x3ff) in let (c1,c2) = char_pair_of_number bo w1 and (c3,c4) = char_pair_of_number bo w2 in Buffer.add_char buf c1; Buffer.add_char buf c2; Buffer.add_char buf c3; Buffer.add_char buf c4 ) let from_uchar_array bo a apos len bom = let b = Buffer.create (len * 4 + 2) in (* +2 for the BOM *) if bom then store bo b 0xfeff ; (* first, store the BOM *) let rec aux apos len = if len > 0 then (store bo b (Uchar.to_int a.(apos)); aux (succ apos) (pred len)) else Buffer.contents b in aux apos len end let from_gen s opt_bo = from_gen (Helper.gen_from_char_gen opt_bo s) let from_stream s = from_gen @@ gen_of_stream s let from_channel ic opt_bo = from_gen (gen_of_channel ic) opt_bo let from_string s opt_bo = let a = Helper.to_uchar_array opt_bo s 0 (String.length s) in from_uchar_array a let sub_lexeme lb pos len bo bom = Helper.from_uchar_array bo lb.buf (lb.start_pos + pos) len bom let lexeme lb bo bom = sub_lexeme lb 0 (lb.pos - lb.start_pos) bo bom end sedlex-2.5/src/lib/sedlexing.mli000066400000000000000000000267331415251212000166720ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) (** Runtime support for lexers generated by [sedlex]. *) (** This module is roughly equivalent to the module Lexing from the OCaml standard library, except that its lexbuffers handle Unicode code points (OCaml type: {!Uchar.t} in the range [0..0x10ffff]) instead of bytes (OCaml type: [char]). It is possible to have sedlex-generated lexers work on a custom implementation for lex buffers. To do this, define a module [L] which implements the [start], [next], [mark] and [backtrack] functions (See the Internal Interface section below for a specification). They need not work on a type named [lexbuf]: you can use the type name you want. Then, just do in your sedlex-processed source, bind this module to the name [Sedlexing] (for instance, with a local module definition: [let module Sedlexing = L in ...]. Of course, you'll probably want to define functions like [lexeme] to be used in the lexers semantic actions. *) type lexbuf (** The type of lexer buffers. A lexer buffer is the argument passed to the scanning functions defined by the generated lexers. The lexer buffer holds the internal information for the scanners, including the code points of the token currently scanned, its position from the beginning of the input stream, and the current position of the lexer. *) exception InvalidCodepoint of int (** Raised by some functions to signal that some code point is not compatible with a specified encoding. *) exception MalFormed (** Raised by functions in the [Utf8] and [Utf16] modules to report strings which do not comply to the encoding. *) (** {6 Creating generic lexbufs} *) val create: (Uchar.t array -> int -> int -> int) -> lexbuf (** Create a generic lexer buffer. When the lexer needs more characters, it will call the given function, giving it an array of Uchars [a], a position [pos] and a code point count [n]. The function should put [n] code points or less in [a], starting at position [pos], and return the number of characters provided. A return value of 0 means end of input. *) val set_position: lexbuf -> Lexing.position -> unit (** set the initial tracked input position for [lexbuf]. If set to [Lexing.dummy_pos], Sedlexing will not track position information for you. *) val set_filename: lexbuf -> string -> unit (** [set_filename lexbuf file] sets the filename to [file] in [lexbuf]. It also sets the {!Lexing.pos_fname} field in returned {!Lexing.position} records. *) val from_gen: Uchar.t Gen.t -> lexbuf (** Create a lexbuf from a stream of Unicode code points. *) val from_stream: Uchar.t Stream.t -> lexbuf [@@ocaml.deprecated "Use [Sedlexing.from_gen] instead."] (** Create a lexbuf from a stream of Unicode code points. *) val from_int_array: int array -> lexbuf (** Create a lexbuf from an array of Unicode code points. *) val from_uchar_array: Uchar.t array -> lexbuf (** Create a lexbuf from an array of Unicode code points. *) (** {6 Interface for lexers semantic actions} *) (** The following functions can be called from the semantic actions of lexer definitions. They give access to the character string matched by the regular expression associated with the semantic action. *) val lexeme_start: lexbuf -> int (** [Sedlexing.lexeme_start lexbuf] returns the offset in the input stream of the first code point of the matched string. The first code point of the stream has offset 0. *) val lexeme_end: lexbuf -> int (** [Sedlexing.lexeme_end lexbuf] returns the offset in the input stream of the character following the last code point of the matched string. The first character of the stream has offset 0. *) val loc: lexbuf -> int * int (** [Sedlexing.loc lexbuf] returns the pair [(Sedlexing.lexeme_start lexbuf,Sedlexing.lexeme_end lexbuf)]. *) val lexeme_length: lexbuf -> int (** [Sedlexing.lexeme_length lexbuf] returns the difference [(Sedlexing.lexeme_end lexbuf) - (Sedlexing.lexeme_start lexbuf)], that is, the length (in code points) of the matched string. *) val lexing_positions : lexbuf -> Lexing.position*Lexing.position (** [Sedlexing.lexing_positions lexbuf] returns the start and end positions of the current token, using a record of type [Lexing.position]. This is intended for consumption by parsers like those generated by [Menhir]. *) val new_line: lexbuf -> unit (** [Sedlexing.new_line lexbuf] increments the line count and sets the beginning of line to the current position, as though a newline character had been encountered in the input. *) val lexeme: lexbuf -> Uchar.t array (** [Sedlexing.lexeme lexbuf] returns the string matched by the regular expression as an array of Unicode code point. *) val lexeme_char: lexbuf -> int -> Uchar.t (** [Sedlexing.lexeme_char lexbuf pos] returns code point number [pos] in the matched string. *) val sub_lexeme: lexbuf -> int -> int -> Uchar.t array (** [Sedlexing.sub_lexeme lexbuf pos len] returns a substring of the string matched by the regular expression as an array of Unicode code point. *) val rollback: lexbuf -> unit (** [Sedlexing.rollback lexbuf] puts [lexbuf] back in its configuration before the last lexeme was matched. It is then possible to use another lexer to parse the same characters again. The other functions above in this section should not be used in the semantic action after a call to [Sedlexing.rollback]. *) (** {6 Internal interface} *) (** These functions are used internally by the lexers. They could be used to write lexers by hand, or with a lexer generator different from [sedlex]. The lexer buffers have a unique internal slot that can store an integer. They also store a "backtrack" position. *) val start: lexbuf -> unit (** [start t] informs the lexer buffer that any code points until the current position can be discarded. The current position become the "start" position as returned by [Sedlexing.lexeme_start]. Moreover, the internal slot is set to [-1] and the backtrack position is set to the current position. *) val next: lexbuf -> Uchar.t option (** [next lexbuf] extracts the next code point from the lexer buffer and increments to current position. If the input stream is exhausted, the function returns [None]. If a ['\n'] is encountered, the tracked line number is incremented. *) val __private__next_int : lexbuf -> int (** [__private__next_int lexbuf] extracts the next code point from the lexer buffer and increments to current position. If the input stream is exhausted, the function returns -1. If a ['\n'] is encountered, the tracked line number is incremented. This is a private API, it should not be used by code using this module's API and can be removed at any time. *) val mark: lexbuf -> int -> unit (** [mark lexbuf i] stores the integer [i] in the internal slot. The backtrack position is set to the current position. *) val backtrack: lexbuf -> int (** [backtrack lexbuf] returns the value stored in the internal slot of the buffer, and performs backtracking (the current position is set to the value of the backtrack position). *) val with_tokenizer: (lexbuf -> 'token) -> lexbuf -> (unit -> 'token * Lexing.position * Lexing.position) (** [with_tokenizer tokenizer lexbuf] given a lexer and a lexbuf, returns a generator of tokens annotated with positions. This generator can be used with the Menir parser generator's incremental API. *) (** {6 Support for common encodings} *) module Latin1: sig val from_gen: char Gen.t -> lexbuf (** Create a lexbuf from a Latin1 encoded stream (ie a stream of Unicode code points in the range [0..255]) *) val from_stream: char Stream.t -> lexbuf [@@ocaml.deprecated "Use [Sedlexing.Latin1.from_gen] instead."] (** Create a lexbuf from a Latin1 encoded stream (ie a stream of Unicode code points in the range [0..255]) *) val from_channel: in_channel -> lexbuf (** Create a lexbuf from a Latin1 encoded input channel. The client is responsible for closing the channel. *) val from_string: string -> lexbuf (** Create a lexbuf from a Latin1 encoded string. *) val lexeme: lexbuf -> string (** As [Sedlexing.lexeme] with a result encoded in Latin1. This function throws an exception [InvalidCodepoint] if it is not possible to encode the result in Latin1. *) val sub_lexeme: lexbuf -> int -> int -> string (** As [Sedlexing.sub_lexeme] with a result encoded in Latin1. This function throws an exception [InvalidCodepoint] if it is not possible to encode the result in Latin1. *) val lexeme_char: lexbuf -> int -> char (** As [Sedlexing.lexeme_char] with a result encoded in Latin1. This function throws an exception [InvalidCodepoint] if it is not possible to encode the result in Latin1. *) end module Utf8: sig val from_gen: char Gen.t -> lexbuf (** Create a lexbuf from a UTF-8 encoded stream. *) val from_stream: char Stream.t -> lexbuf [@@ocaml.deprecated "Use [Sedlexing.Utf8.from_gen] instead."] (** Create a lexbuf from a UTF-8 encoded stream. *) val from_channel: in_channel -> lexbuf (** Create a lexbuf from a UTF-8 encoded input channel. *) val from_string: string -> lexbuf (** Create a lexbuf from a UTF-8 encoded string. *) val lexeme: lexbuf -> string (** As [Sedlexing.lexeme] with a result encoded in UTF-8. *) val sub_lexeme: lexbuf -> int -> int -> string (** As [Sedlexing.sub_lexeme] with a result encoded in UTF-8. *) end module Utf16: sig type byte_order = Little_endian | Big_endian val from_gen: char Gen.t -> byte_order option -> lexbuf (** [Utf16.from_gen s opt_bo] creates a lexbuf from an UTF-16 encoded stream. If [opt_bo] matches with [None] the function expects a BOM (Byte Order Mark), and takes the byte order as [Utf16.Big_endian] if it cannot find one. When [opt_bo] matches with [Some bo], [bo] is taken as byte order. In this case a leading BOM is kept in the stream - the lexer has to ignore it and a `wrong' BOM ([0xfffe]) will raise Utf16.InvalidCodepoint. *) val from_stream: char Stream.t -> byte_order option -> lexbuf [@@ocaml.deprecated "Use [Sedlexing.Utf16.from_gen] instead."] (** Works as [Utf16.from_gen] with a [stream]. *) val from_channel: in_channel -> byte_order option-> lexbuf (** Works as [Utf16.from_gen] with an [in_channel]. *) val from_string: string -> byte_order option -> lexbuf (** Works as [Utf16.from_gen] with a [string]. *) val lexeme: lexbuf -> byte_order -> bool -> string (** [utf16_lexeme lb bo bom] as [Sedlexing.lexeme] with a result encoded in UTF-16 in byte_order [bo] and starting with a BOM if [bom = true]. *) val sub_lexeme: lexbuf -> int -> int -> byte_order -> bool -> string (** [sub_lexeme lb pos len bo bom] as [Sedlexing.sub_lexeme] with a result encoded in UTF-16 with byte order [bo] and starting with a BOM if [bom=true] *) end sedlex-2.5/src/syntax/000077500000000000000000000000001415251212000147525ustar00rootroot00000000000000sedlex-2.5/src/syntax/dune000066400000000000000000000007241415251212000156330ustar00rootroot00000000000000(library (name sedlex_ppx) (public_name sedlex.ppx) (kind ppx_rewriter) (libraries ppxlib sedlex) (ppx_runtime_libraries sedlex) (preprocess (pps ppxlib.metaquot)) (flags (:standard -w -9))) (rule (targets unicode.ml) (mode promote-until-clean) (deps (:gen ../generator/gen_unicode.exe) ../generator/data/DerivedCoreProperties.txt ../generator/data/DerivedGeneralCategory.txt ../generator/data/PropList.txt) (action (run %{gen} %{targets}))) sedlex-2.5/src/syntax/ppx_sedlex.ml000066400000000000000000000364161415251212000174710ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) open Ppxlib open Ast_builder.Default (* let ocaml_version = Versions.ocaml_408 *) module Cset = Sedlex_cset (* Decision tree for partitions *) let default_loc = Location.none let lident_loc ~loc s = { loc; txt= lident s } type decision_tree = | Lte of int * decision_tree * decision_tree | Table of int * int array | Return of int let rec simplify_decision_tree ( x : decision_tree) = match x with | Table _ | Return _ -> x | Lte (_, (Return a as l), Return b) when a = b -> l | Lte (i, l, r) -> let l = simplify_decision_tree l in let r = simplify_decision_tree r in match l, r with | Return a, Return b when a = b -> l | _ -> Lte (i, l,r) let decision l = let l = List.map (fun (a, b, i) -> (a, b, Return i)) l in let rec merge2 = function | (a1, b1, d1) :: (a2, b2, d2) :: rest -> let x = if b1 + 1 = a2 then d2 else Lte (a2 - 1, Return (-1), d2) in (a1, b2, Lte (b1, d1, x)) :: merge2 rest | rest -> rest in let rec aux = function | [(a, b, d)] -> Lte (a - 1, Return (-1), Lte (b, d, Return (-1))) | [] -> Return (-1) | l -> aux (merge2 l) in aux l let limit = 8192 let decision_table l = let rec aux m accu = function | ((a, b, i) as x)::rem when b < limit && i < 255-> aux (min a m) (x :: accu) rem | rem -> m, accu, rem in let (min, table, rest) = aux max_int [] l in match table with | [] -> decision l | [(min, max, i)] -> Lte (min - 1, Return (-1), (Lte (max, Return i, decision rest))) | (_, max, _) :: _ -> let arr = Array.make (max - min + 1) 0 in let set (a, b, i) = for j = a to b do arr.(j - min) <- i + 1 done in List.iter set table; Lte (min - 1, Return (-1), Lte (max, Table (min, arr), decision rest)) let rec simplify min max = function | Lte (i,yes,no) -> if i >= max then simplify min max yes else if i < min then simplify min max no else Lte (i, simplify min i yes, simplify (i+1) max no) | x -> x let segments_of_partition p = let seg = ref [] in Array.iteri (fun i c -> List.iter (fun (a, b) -> seg := (a, b, i) :: !seg) c) p; List.sort (fun (a1,_,_) (a2,_,_) -> compare a1 a2) !seg let decision_table p = simplify (-1) (Cset.max_code) (decision_table (segments_of_partition p)) (* Helpers to build AST *) let appfun s l = let loc = default_loc in eapply ~loc (evar ~loc s) l let glb_value name def = let loc = default_loc in pstr_value ~loc Nonrecursive [value_binding ~loc ~pat:(pvar ~loc name) ~expr:def] (* Named regexps *) module StringMap = Map.Make(struct type t = string let compare = compare end) let builtin_regexps = List.fold_left (fun acc (n, c) -> StringMap.add n (Sedlex.chars c) acc) StringMap.empty ([ "any", Cset.any; "eof", Cset.eof; "xml_letter", Cset.letter; "xml_digit", Cset.digit; "xml_extender", Cset.extender; "xml_base_char", Cset.base_char; "xml_ideographic", Cset.ideographic; "xml_combining_char", Cset.combining_char; "xml_blank", Cset.blank; "tr8876_ident_char", Cset.tr8876_ident_char] @ Unicode.Categories.list @ Unicode.Properties.list) (* Tables (indexed mapping: codepoint -> next state) *) let tables = Hashtbl.create 31 let table_counter = ref 0 let get_tables () = Hashtbl.fold (fun key x accu -> (x, key) :: accu) tables [] let table_name x = try Hashtbl.find tables x with Not_found -> incr table_counter; let s = Printf.sprintf "__sedlex_table_%i" !table_counter in Hashtbl.add tables x s; s let table (name, v) = let n = Array.length v in let s = Bytes.create n in for i = 0 to n - 1 do Bytes.set s i (Char.chr v.(i)) done; glb_value name (estring ~loc:default_loc (Bytes.to_string s)) (* Partition (function: codepoint -> next state) *) let partitions = Hashtbl.create 31 let partition_counter = ref 0 let get_partitions () = Hashtbl.fold (fun key x accu -> (x, key) :: accu) partitions [] let partition_name x = try Hashtbl.find partitions x with Not_found -> incr partition_counter; let s = Printf.sprintf "__sedlex_partition_%i" !partition_counter in Hashtbl.add partitions x s; s (* We duplicate the body for the EOF (-1) case rather than creating an interior utility function. *) let partition (name, p) = let loc = default_loc in let rec gen_tree = function | Lte (i, yes, no) -> [%expr if c <= [%e eint ~loc i] then [%e gen_tree yes] else [%e gen_tree no]] | Return i -> eint ~loc:default_loc i | Table (offset, t) -> let c = if offset = 0 then [%expr c] else [%expr c - [%e eint ~loc offset]] in [%expr Char.code (String.unsafe_get [%e evar ~loc (table_name t)] [%e c]) - 1] in let body = gen_tree (simplify_decision_tree (decision_table p)) in glb_value name [%expr fun c -> [%e body] ] (* Code generation for the automata *) let best_final final = let fin = ref None in for i = Array.length final - 1 downto 0 do if final.(i) then fin := Some i done; !fin let state_fun state = Printf.sprintf "__sedlex_state_%i" state let call_state lexbuf auto state = let (trans, final) = auto.(state) in if Array.length trans = 0 then match best_final final with | Some i -> eint ~loc:default_loc i | None -> assert false else appfun (state_fun state) [evar ~loc:default_loc lexbuf] let gen_state lexbuf auto i (trans, final) = let loc = default_loc in let partition = Array.map fst trans in let cases = Array.mapi (fun i (_, j) -> case ~lhs:(pint ~loc i) ~guard:None ~rhs:(call_state lexbuf auto j)) trans in let cases = Array.to_list cases in let body () = pexp_match ~loc (appfun (partition_name partition) [[%expr Sedlexing.__private__next_int [%e evar ~loc lexbuf]]]) (cases @ [case ~lhs:[%pat? _] ~guard:None ~rhs:[%expr Sedlexing.backtrack [%e evar ~loc lexbuf]]]) in let ret body = [ value_binding ~loc ~pat:(pvar ~loc (state_fun i)) ~expr:(pexp_function ~loc [case ~lhs:(pvar ~loc lexbuf) ~guard:None ~rhs:body]) ] in match best_final final with | None -> ret (body ()) | Some _ when Array.length trans = 0 -> [] | Some i -> ret [%expr Sedlexing.mark [%e evar ~loc lexbuf] [%e eint ~loc i]; [%e body ()]] let gen_recflag auto = (* The generated function is not recursive if the transitions end in states with no further transitions. *) try Array.iter (fun (trans_i, _) -> Array.iter (fun (_, j) -> let (trans_j, _) = auto.(j) in if Array.length trans_j > 0 then raise Exit) trans_i) auto; Nonrecursive with Exit -> Recursive let gen_definition lexbuf l error = let loc = default_loc in let brs = Array.of_list l in let auto = Sedlex.compile (Array.map fst brs) in let cases = Array.to_list (Array.mapi (fun i (_, e) -> case ~lhs:(pint ~loc i) ~guard:None ~rhs:e) brs) in let states = Array.mapi (gen_state lexbuf auto) auto in let states = List.flatten (Array.to_list states) in pexp_let ~loc (gen_recflag auto) states (pexp_sequence ~loc [%expr Sedlexing.start [%e evar ~loc lexbuf]] (pexp_match ~loc (appfun (state_fun 0) [evar ~loc lexbuf]) (cases @ [case ~lhs:(ppat_any ~loc) ~guard:None ~rhs:error]) ) ) (* Lexer specification parser *) let codepoint i = if i < 0 || i > Cset.max_code then failwith (Printf.sprintf "Invalid Unicode code point: %i" i); i let regexp_for_char c = Sedlex.chars (Cset.singleton (Char.code c)) let regexp_for_string s = let rec aux n = if n = String.length s then Sedlex.eps else Sedlex.seq (regexp_for_char s.[n]) (aux (succ n)) in aux 0 let err loc s = raise (Location.Error (Location.Error.createf ~loc "Sedlex: %s" s)) let rec repeat r = function | 0, 0 -> Sedlex.eps | 0, m -> Sedlex.alt Sedlex.eps (Sedlex.seq r (repeat r (0, m - 1))) | n, m -> Sedlex.seq r (repeat r (n - 1, m - 1)) let regexp_of_pattern env = let rec char_pair_op func name p tuple = (* Construct something like Sub(a,b) *) match tuple with | Some {ppat_desc=Ppat_tuple (p0 :: p1 :: [])} -> begin match func (aux p0) (aux p1) with | Some r -> r | None -> err p.ppat_loc @@ "the "^name^" operator can only applied to single-character length regexps" end | _ -> err p.ppat_loc @@ "the "^name^" operator requires two arguments, like "^name^"(a,b)" and aux p = (* interpret one pattern node *) match p.ppat_desc with | Ppat_or (p1, p2) -> Sedlex.alt (aux p1) (aux p2) | Ppat_tuple (p :: pl) -> List.fold_left (fun r p -> Sedlex.seq r (aux p)) (aux p) pl | Ppat_construct ({txt = Lident "Star"}, Some p) -> Sedlex.rep (aux p) | Ppat_construct ({txt = Lident "Plus"}, Some p) -> Sedlex.plus (aux p) | Ppat_construct ({txt = Lident "Rep"}, Some {ppat_desc=Ppat_tuple[p0; {ppat_desc=Ppat_constant (i1 as i2)|Ppat_interval(i1, i2)}]}) -> begin match i1, i2 with | Pconst_integer(i1,_), Pconst_integer(i2,_) -> let i1 = int_of_string i1 in let i2 = int_of_string i2 in if 0 <= i1 && i1 <= i2 then repeat (aux p0) (i1, i2) else err p.ppat_loc "Invalid range for Rep operator" | _ -> err p.ppat_loc "Rep must take an integer constant or interval" end | Ppat_construct ({txt = Lident "Rep"}, _) -> err p.ppat_loc "the Rep operator takes 2 arguments" | Ppat_construct ({txt = Lident "Opt"}, Some p) -> Sedlex.alt Sedlex.eps (aux p) | Ppat_construct ({txt = Lident "Compl"}, arg) -> begin match arg with | Some p0 -> begin match Sedlex.compl (aux p0) with | Some r -> r | None -> err p.ppat_loc "the Compl operator can only applied to a single-character length regexp" end | _ -> err p.ppat_loc "the Compl operator requires an argument" end | Ppat_construct ({ txt = Lident "Sub" }, arg) -> char_pair_op Sedlex.subtract "Sub" p arg | Ppat_construct ({ txt = Lident "Intersect" }, arg) -> char_pair_op Sedlex.intersection "Intersect" p arg | Ppat_construct ({txt = Lident "Chars"}, arg) -> let const = match arg with | Some {ppat_desc=Ppat_constant const} -> Some (const) | _ -> None in begin match const with | Some (Pconst_string(s,_, _))-> let c = ref Cset.empty in for i = 0 to String.length s - 1 do c := Cset.union !c (Cset.singleton (Char.code s.[i])) done; Sedlex.chars !c | _ -> err p.ppat_loc "the Chars operator requires a string argument" end | Ppat_interval (i_start, i_end) -> begin match i_start, i_end with | Pconst_char c1, Pconst_char c2 -> Sedlex.chars (Cset.interval (Char.code c1) (Char.code c2)) | Pconst_integer(i1,_), Pconst_integer(i2,_) -> Sedlex.chars (Cset.interval (codepoint (int_of_string i1)) (codepoint (int_of_string i2))) | _ -> err p.ppat_loc "this pattern is not a valid interval regexp" end | Ppat_constant (const) -> begin match const with | Pconst_string (s, _, _) -> regexp_for_string s | Pconst_char c -> regexp_for_char c | Pconst_integer(i,_) -> Sedlex.chars (Cset.singleton (codepoint (int_of_string i))) | _ -> err p.ppat_loc "this pattern is not a valid regexp" end | Ppat_var {txt=x} -> begin try StringMap.find x env with Not_found -> err p.ppat_loc (Printf.sprintf "unbound regexp %s" x) end | _ -> err p.ppat_loc "this pattern is not a valid regexp" in aux let previous = ref [] let regexps = ref [] let should_set_cookies = ref false let mapper = object(this) inherit Ast_traverse.map as super val env = builtin_regexps method define_regexp name p = {< env = StringMap.add name (regexp_of_pattern env p) env >} method! expression e = match e with | [%expr [%sedlex [%e? {pexp_desc=Pexp_match (lexbuf, cases)}]]] -> let lexbuf = match lexbuf with | {pexp_desc=Pexp_ident{txt=Lident lexbuf}} -> lexbuf | _ -> err lexbuf.pexp_loc "the matched expression must be a single identifier" in let cases = List.rev cases in let error = match List.hd cases with | {pc_lhs = [%pat? _]; pc_rhs = e; pc_guard = None} -> super # expression e | {pc_lhs = p} -> err p.ppat_loc "the last branch must be a catch-all error case" in let cases = List.rev (List.tl cases) in let cases = List.map (function | {pc_lhs = p; pc_rhs = e; pc_guard = None} -> regexp_of_pattern env p, super # expression e | {pc_guard = Some e} -> err e.pexp_loc "'when' guards are not supported" ) cases in gen_definition lexbuf cases error | [%expr let [%p? {ppat_desc=Ppat_var{txt=name}}] = [%sedlex.regexp? [%p? p]] in [%e? body]] -> (this # define_regexp name p) # expression body | [%expr [%sedlex [%e? _]]] -> err e.pexp_loc "the %sedlex extension is only recognized on match expressions" | _ -> super # expression e val toplevel = true method structure_with_regexps l = let mapper = ref this in let regexps = ref [] in let l = List.concat (List.map (function | [%stri let [%p? {ppat_desc=Ppat_var{txt=name}}] = [%sedlex.regexp? [%p? p]]] as i -> regexps := i :: !regexps; mapper := !mapper # define_regexp name p; [] | i -> [ !mapper # structure_item i ] ) l) in (l, List.rev !regexps) method! structure l = if toplevel then let sub = {< toplevel = false >} in let l, regexps' = sub # structure_with_regexps (!previous @ l) in let parts = List.map partition (get_partitions ()) in let tables = List.map table (get_tables ()) in regexps := regexps'; should_set_cookies := true; tables @ parts @ l else fst (this # structure_with_regexps l) end let pre_handler cookies = previous := match Driver.Cookies.get cookies "sedlex.regexps" Ast_pattern.__ with | Some {pexp_desc = Pexp_extension (_, PStr l)} -> l | Some _ -> assert false | None -> [] let post_handler cookies = if !should_set_cookies then let loc = default_loc in Driver.Cookies.set cookies "sedlex.regexps" (pexp_extension ~loc ( {loc; txt="regexps"}, PStr !regexps)) let extensions = [Extension.declare "sedlex" Extension.Context.expression Ast_pattern.(single_expr_payload __) (fun ~loc:_ ~path:_ expr -> mapper # expression expr); ] let () = Driver.Cookies.add_handler pre_handler; Driver.Cookies.add_post_handler post_handler; Driver.register_transformation "sedlex" ~impl:(mapper # structure) sedlex-2.5/src/syntax/sedlex.ml000066400000000000000000000071771415251212000166040ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) module Cset = Sedlex_cset (* NFA *) type node = { id : int; mutable eps : node list; mutable trans : (Cset.t * node) list; } (* Compilation regexp -> NFA *) type regexp = node -> node let cur_id = ref 0 let new_node () = incr cur_id; { id = !cur_id; eps = []; trans = [] } let seq r1 r2 succ = r1 (r2 succ) let is_chars final = function | {eps = []; trans = [c, f]} when f == final -> Some c | _ -> None let chars c succ = let n = new_node () in n.trans <- [c,succ]; n let alt r1 r2 succ = let nr1 = r1 succ and nr2 = r2 succ in match is_chars succ nr1, is_chars succ nr2 with | Some c1, Some c2 -> chars (Cset.union c1 c2) succ | _ -> let n = new_node () in n.eps <- [nr1; nr2]; n let rep r succ = let n = new_node () in n.eps <- [r n; succ]; n let plus r succ = let n = new_node () in let nr = r n in n.eps <- [nr; succ]; nr let eps succ = succ (* eps for epsilon *) let compl r = let n = new_node () in match is_chars n (r n) with | Some c -> Some (chars (Cset.difference Cset.any c)) | _ -> None let pair_op f r0 r1 = (* Construct subtract or intersection *) let n = new_node () in let to_chars r = is_chars n (r n) in match to_chars r0, to_chars r1 with | Some c0, Some c1 -> Some (chars (f c0 c1)) | _ -> None let subtract = pair_op Cset.difference let intersection = pair_op Cset.intersection let compile_re re = let final = new_node () in (re final, final) (* Determinization *) type state = node list (* A state of the DFA corresponds to a set of nodes in the NFA. *) let rec add_node state node = if List.memq node state then state else add_nodes (node::state) node.eps and add_nodes state nodes = List.fold_left add_node state nodes let transition (state : state) = (* Merge transition with the same target *) let rec norm = function | (c1, n1)::((c2, n2)::q as l) -> if n1 == n2 then norm ((Cset.union c1 c2, n1)::q) else (c1, n1)::(norm l) | l -> l in let t = List.concat (List.map (fun n -> n.trans) state) in let t = norm (List.sort (fun (_, n1) (_, n2) -> n1.id - n2.id) t) in (* Split char sets so as to make them disjoint *) let split (all, t) (c0, n0) = let t = (Cset.difference c0 all, [n0]) :: List.map (fun (c, ns) -> (Cset.intersection c c0, n0::ns)) t @ List.map (fun (c, ns) -> (Cset.difference c c0, ns)) t in Cset.union all c0, List.filter (fun (c, _) -> not (Cset.is_empty c)) t in let (_,t) = List.fold_left split (Cset.empty,[]) t in (* Epsilon closure of targets *) let t = List.map (fun (c, ns) -> (c, add_nodes [] ns)) t in (* Canonical ordering *) let t = Array.of_list t in Array.sort (fun (c1, _) (c2, _) -> compare c1 c2) t; t let compile rs = let rs = Array.map compile_re rs in let counter = ref 0 in let states = Hashtbl.create 31 in let states_def = Hashtbl.create 31 in let rec aux state = try Hashtbl.find states state with Not_found -> let i = !counter in incr counter; Hashtbl.add states state i; let trans = transition state in let trans = Array.map (fun (p, t) -> (p, aux t)) trans in let finals = Array.map (fun (_, f) -> List.memq f state) rs in Hashtbl.add states_def i (trans, finals); i in let init = ref [] in Array.iter (fun (i,_) -> init := add_node !init i) rs; let i = aux !init in assert(i = 0); Array.init !counter (Hashtbl.find states_def) sedlex-2.5/src/syntax/sedlex.mli000066400000000000000000000020361415251212000167420ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) type regexp val chars: Sedlex_cset.t -> regexp val seq: regexp -> regexp -> regexp val alt: regexp -> regexp -> regexp val rep: regexp -> regexp val plus: regexp -> regexp val eps: regexp val compl: regexp -> regexp option (* If the argument is a single [chars] regexp, returns a regexp which matches the complement set. Otherwise returns [None]. *) val subtract: regexp -> regexp -> regexp option (* If each argument is a single [chars] regexp, returns a regexp which matches the set (arg1 - arg2). Otherwise returns [None]. *) val intersection: regexp -> regexp -> regexp option (* If each argument is a single [chars] regexp, returns a regexp which matches the intersection set. Otherwise returns [None]. *) val compile: regexp array -> ((Sedlex_cset.t * int) array * bool array) array sedlex-2.5/src/syntax/sedlex_cset.ml000066400000000000000000000252641415251212000176170ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) (* Character sets are represented as lists of intervals. The intervals must be non-overlapping and not collapsable, and the list must be ordered in increasing order. *) type t = (int * int) list let max_code = 0x10ffff (* must be < max_int *) let min_code = -1 let empty = [] let singleton i = [i,i] let is_empty = function [] -> true | _ -> false let interval i j = if i <= j then [i,j] else [j,i] let eof = singleton (-1) let any = interval 0 max_code let rec union c1 c2 = match c1,c2 with | [], _ -> c2 | _, [] -> c1 | ((i1, j1) as s1)::r1, (i2, j2)::r2 -> if (i1 <= i2) then if j1 + 1 < i2 then s1::(union r1 c2) else if (j1 < j2) then union r1 ((i1, j2)::r2) else union c1 r2 else union c2 c1 let complement c = let rec aux start = function | [] -> if start <= max_code then [start,max_code] else [] | (i, j)::l -> (start, i-1)::(aux (succ j) l) in match c with | (-1,j)::l -> aux (succ j) l | l -> aux (-1) l let intersection c1 c2 = complement (union (complement c1) (complement c2)) let difference c1 c2 = complement (union (complement c1) c2) (* Unicode classes from XML *) let base_char = [ 0x0041,0x005A; 0x0061,0x007A; 0x00C0,0x00D6; 0x00D8,0x00F6; 0x00F8,0x00FF; 0x0100,0x0131; 0x0134,0x013E; 0x0141,0x0148; 0x014A,0x017E; 0x0180,0x01C3; 0x01CD,0x01F0; 0x01F4,0x01F5; 0x01FA,0x0217; 0x0250,0x02A8; 0x02BB,0x02C1; 0x0386,0x0386; 0x0388,0x038A; 0x038C,0x038C; 0x038E,0x03A1; 0x03A3,0x03CE; 0x03D0,0x03D6; 0x03DA,0x03DA; 0x03DC,0x03DC; 0x03DE,0x03DE; 0x03E0,0x03E0; 0x03E2,0x03F3; 0x0401,0x040C; 0x040E,0x044F; 0x0451,0x045C; 0x045E,0x0481; 0x0490,0x04C4; 0x04C7,0x04C8; 0x04CB,0x04CC; 0x04D0,0x04EB; 0x04EE,0x04F5; 0x04F8,0x04F9; 0x0531,0x0556; 0x0559,0x0559; 0x0561,0x0586; 0x05D0,0x05EA; 0x05F0,0x05F2; 0x0621,0x063A; 0x0641,0x064A; 0x0671,0x06B7; 0x06BA,0x06BE; 0x06C0,0x06CE; 0x06D0,0x06D3; 0x06D5,0x06D5; 0x06E5,0x06E6; 0x0905,0x0939; 0x093D,0x093D; 0x0958,0x0961; 0x0985,0x098C; 0x098F,0x0990; 0x0993,0x09A8; 0x09AA,0x09B0; 0x09B2,0x09B2; 0x09B6,0x09B9; 0x09DC,0x09DD; 0x09DF,0x09E1; 0x09F0,0x09F1; 0x0A05,0x0A0A; 0x0A0F,0x0A10; 0x0A13,0x0A28; 0x0A2A,0x0A30; 0x0A32,0x0A33; 0x0A35,0x0A36; 0x0A38,0x0A39; 0x0A59,0x0A5C; 0x0A5E,0x0A5E; 0x0A72,0x0A74; 0x0A85,0x0A8B; 0x0A8D,0x0A8D; 0x0A8F,0x0A91; 0x0A93,0x0AA8; 0x0AAA,0x0AB0; 0x0AB2,0x0AB3; 0x0AB5,0x0AB9; 0x0ABD,0x0ABD; 0x0AE0,0x0AE0; 0x0B05,0x0B0C; 0x0B0F,0x0B10; 0x0B13,0x0B28; 0x0B2A,0x0B30; 0x0B32,0x0B33; 0x0B36,0x0B39; 0x0B3D,0x0B3D; 0x0B5C,0x0B5D; 0x0B5F,0x0B61; 0x0B85,0x0B8A; 0x0B8E,0x0B90; 0x0B92,0x0B95; 0x0B99,0x0B9A; 0x0B9C,0x0B9C; 0x0B9E,0x0B9F; 0x0BA3,0x0BA4; 0x0BA8,0x0BAA; 0x0BAE,0x0BB5; 0x0BB7,0x0BB9; 0x0C05,0x0C0C; 0x0C0E,0x0C10; 0x0C12,0x0C28; 0x0C2A,0x0C33; 0x0C35,0x0C39; 0x0C60,0x0C61; 0x0C85,0x0C8C; 0x0C8E,0x0C90; 0x0C92,0x0CA8; 0x0CAA,0x0CB3; 0x0CB5,0x0CB9; 0x0CDE,0x0CDE; 0x0CE0,0x0CE1; 0x0D05,0x0D0C; 0x0D0E,0x0D10; 0x0D12,0x0D28; 0x0D2A,0x0D39; 0x0D60,0x0D61; 0x0E01,0x0E2E; 0x0E30,0x0E30; 0x0E32,0x0E33; 0x0E40,0x0E45; 0x0E81,0x0E82; 0x0E84,0x0E84; 0x0E87,0x0E88; 0x0E8A,0x0E8A; 0x0E8D,0x0E8D; 0x0E94,0x0E97; 0x0E99,0x0E9F; 0x0EA1,0x0EA3; 0x0EA5,0x0EA5; 0x0EA7,0x0EA7; 0x0EAA,0x0EAB; 0x0EAD,0x0EAE; 0x0EB0,0x0EB0; 0x0EB2,0x0EB3; 0x0EBD,0x0EBD; 0x0EC0,0x0EC4; 0x0F40,0x0F47; 0x0F49,0x0F69; 0x10A0,0x10C5; 0x10D0,0x10F6; 0x1100,0x1100; 0x1102,0x1103; 0x1105,0x1107; 0x1109,0x1109; 0x110B,0x110C; 0x110E,0x1112; 0x113C,0x113C; 0x113E,0x113E; 0x1140,0x1140; 0x114C,0x114C; 0x114E,0x114E; 0x1150,0x1150; 0x1154,0x1155; 0x1159,0x1159; 0x115F,0x1161; 0x1163,0x1163; 0x1165,0x1165; 0x1167,0x1167; 0x1169,0x1169; 0x116D,0x116E; 0x1172,0x1173; 0x1175,0x1175; 0x119E,0x119E; 0x11A8,0x11A8; 0x11AB,0x11AB; 0x11AE,0x11AF; 0x11B7,0x11B8; 0x11BA,0x11BA; 0x11BC,0x11C2; 0x11EB,0x11EB; 0x11F0,0x11F0; 0x11F9,0x11F9; 0x1E00,0x1E9B; 0x1EA0,0x1EF9; 0x1F00,0x1F15; 0x1F18,0x1F1D; 0x1F20,0x1F45; 0x1F48,0x1F4D; 0x1F50,0x1F57; 0x1F59,0x1F59; 0x1F5B,0x1F5B; 0x1F5D,0x1F5D; 0x1F5F,0x1F7D; 0x1F80,0x1FB4; 0x1FB6,0x1FBC; 0x1FBE,0x1FBE; 0x1FC2,0x1FC4; 0x1FC6,0x1FCC; 0x1FD0,0x1FD3; 0x1FD6,0x1FDB; 0x1FE0,0x1FEC; 0x1FF2,0x1FF4; 0x1FF6,0x1FFC; 0x2126,0x2126; 0x212A,0x212B; 0x212E,0x212E; 0x2180,0x2182; 0x3041,0x3094; 0x30A1,0x30FA; 0x3105,0x312C; 0xAC00,0xD7A3 ] let ideographic = [ 0x3007,0x3007; 0x3021,0x3029; 0x4E00,0x9FA5 ] let combining_char = [ 0x0300,0x0345; 0x0360,0x0361; 0x0483,0x0486; 0x0591,0x05A1; 0x05A3,0x05B9; 0x05BB,0x05BD; 0x05BF,0x05BF; 0x05C1,0x05C2; 0x05C4,0x05C4; 0x064B,0x0652; 0x0670,0x0670; 0x06D6,0x06DC; 0x06DD,0x06DF; 0x06E0,0x06E4; 0x06E7,0x06E8; 0x06EA,0x06ED; 0x0901,0x0903; 0x093C,0x093C; 0x093E,0x094C; 0x094D,0x094D; 0x0951,0x0954; 0x0962,0x0963; 0x0981,0x0983; 0x09BC,0x09BC; 0x09BE,0x09BE; 0x09BF,0x09BF; 0x09C0,0x09C4; 0x09C7,0x09C8; 0x09CB,0x09CD; 0x09D7,0x09D7; 0x09E2,0x09E3; 0x0A02,0x0A02; 0x0A3C,0x0A3C; 0x0A3E,0x0A3E; 0x0A3F,0x0A3F; 0x0A40,0x0A42; 0x0A47,0x0A48; 0x0A4B,0x0A4D; 0x0A70,0x0A71; 0x0A81,0x0A83; 0x0ABC,0x0ABC; 0x0ABE,0x0AC5; 0x0AC7,0x0AC9; 0x0ACB,0x0ACD; 0x0B01,0x0B03; 0x0B3C,0x0B3C; 0x0B3E,0x0B43; 0x0B47,0x0B48; 0x0B4B,0x0B4D; 0x0B56,0x0B57; 0x0B82,0x0B83; 0x0BBE,0x0BC2; 0x0BC6,0x0BC8; 0x0BCA,0x0BCD; 0x0BD7,0x0BD7; 0x0C01,0x0C03; 0x0C3E,0x0C44; 0x0C46,0x0C48; 0x0C4A,0x0C4D; 0x0C55,0x0C56; 0x0C82,0x0C83; 0x0CBE,0x0CC4; 0x0CC6,0x0CC8; 0x0CCA,0x0CCD; 0x0CD5,0x0CD6; 0x0D02,0x0D03; 0x0D3E,0x0D43; 0x0D46,0x0D48; 0x0D4A,0x0D4D; 0x0D57,0x0D57; 0x0E31,0x0E31; 0x0E34,0x0E3A; 0x0E47,0x0E4E; 0x0EB1,0x0EB1; 0x0EB4,0x0EB9; 0x0EBB,0x0EBC; 0x0EC8,0x0ECD; 0x0F18,0x0F19; 0x0F35,0x0F35; 0x0F37,0x0F37; 0x0F39,0x0F39; 0x0F3E,0x0F3E; 0x0F3F,0x0F3F; 0x0F71,0x0F84; 0x0F86,0x0F8B; 0x0F90,0x0F95; 0x0F97,0x0F97; 0x0F99,0x0FAD; 0x0FB1,0x0FB7; 0x0FB9,0x0FB9; 0x20D0,0x20DC; 0x20E1,0x20E1; 0x302A,0x302F; 0x3099,0x3099; 0x309A,0x309A ] let digit = [ 0x0030,0x0039; 0x0660,0x0669; 0x06F0,0x06F9; 0x0966,0x096F; 0x09E6,0x09EF; 0x0A66,0x0A6F; 0x0AE6,0x0AEF; 0x0B66,0x0B6F; 0x0BE7,0x0BEF; 0x0C66,0x0C6F; 0x0CE6,0x0CEF; 0x0D66,0x0D6F; 0x0E50,0x0E59; 0x0ED0,0x0ED9; 0x0F20,0x0F29 ] let extender = [ 0x00B7,0x00B7; 0x02D0,0x02D1; 0x0387,0x0387; 0x0640,0x0640; 0x0E46,0x0E46; 0x0EC6,0x0EC6; 0x3005,0x3005; 0x3031,0x3035; 0x309D,0x309E; 0x30FC,0x30FE ] let blank = [ 0x0009,0x000A; 0x000D,0x000D; 0x0020,0x0020 ] let letter = union base_char ideographic (* Letters to be used in identifiers, as specified by ISO .... Data provided by John M. Skaller *) let tr8876_ident_char = [ (* ASCII *) (0x0041,0x005a); (0x0061,0x007a); (* Latin *) (0x00c0,0x00d6); (0x00d8,0x00f6); (0x00f8,0x01f5); (0x01fa,0x0217); (0x0250,0x02a8); (* Greek *) (0x0384,0x0384); (0x0388,0x038a); (0x038c,0x038c); (0x038e,0x03a1); (0x03a3,0x03ce); (0x03d0,0x03d6); (0x03da,0x03da); (0x03dc,0x03dc); (0x03de,0x03de); (0x03e0,0x03e0); (0x03e2,0x03f3); (* Cyrillic *) (0x0401,0x040d); (0x040f,0x044f); (0x0451,0x045c); (0x045e,0x0481); (0x0490,0x04c4); (0x04c7,0x04c4); (0x04cb,0x04cc); (0x04d0,0x04eb); (0x04ee,0x04f5); (0x04f8,0x04f9); (* Armenian *) (0x0531,0x0556); (0x0561,0x0587); (0x04d0,0x04eb); (* Hebrew *) (0x05d0,0x05ea); (0x05f0,0x05f4); (* Arabic *) (0x0621,0x063a); (0x0640,0x0652); (0x0670,0x06b7); (0x06ba,0x06be); (0x06c0,0x06ce); (0x06e5,0x06e7); (* Devanagari *) (0x0905,0x0939); (0x0958,0x0962); (* Bengali *) (0x0985,0x098c); (0x098f,0x0990); (0x0993,0x09a8); (0x09aa,0x09b0); (0x09b2,0x09b2); (0x09b6,0x09b9); (0x09dc,0x09dd); (0x09df,0x09e1); (0x09f0,0x09f1); (* Gurmukhi *) (0x0a05,0x0a0a); (0x0a0f,0x0a10); (0x0a13,0x0a28); (0x0a2a,0x0a30); (0x0a32,0x0a33); (0x0a35,0x0a36); (0x0a38,0x0a39); (0x0a59,0x0a5c); (0x0a5e,0x0a5e); (* Gunjarati *) (0x0a85,0x0a8b); (0x0a8d,0x0a8d); (0x0a8f,0x0a91); (0x0a93,0x0aa8); (0x0aaa,0x0ab0); (0x0ab2,0x0ab3); (0x0ab5,0x0ab9); (0x0ae0,0x0ae0); (* Oriya *) (0x0b05,0x0b0c); (0x0b0f,0x0b10); (0x0b13,0x0b28); (0x0b2a,0x0b30); (0x0b32,0x0b33); (0x0b36,0x0b39); (0x0b5c,0x0b5d); (0x0b5f,0x0b61); (* Tamil *) (0x0b85,0x0b8a); (0x0b8e,0x0b90); (0x0b92,0x0b95); (0x0b99,0x0b9a); (0x0b9c,0x0b9c); (0x0b9e,0x0b9f); (0x0ba3,0x0ba4); (0x0ba8,0x0baa); (0x0bae,0x0bb5); (0x0bb7,0x0bb9); (* Telugu *) (0x0c05,0x0c0c); (0x0c0e,0x0c10); (0x0c12,0x0c28); (0x0c2a,0x0c33); (0x0c35,0x0c39); (0x0c60,0x0c61); (* Kannada *) (0x0c85,0x0c8c); (0x0c8e,0x0c90); (0x0c92,0x0ca8); (0x0caa,0x0cb3); (0x0cb5,0x0cb9); (0x0ce0,0x0ce1); (* Malayam *) (0x0d05,0x0d0c); (0x0d0e,0x0d10); (0x0d12,0x0d28); (0x0d2a,0x0d39); (0x0d60,0x0d61); (* Thai *) (0x0e01,0x0e30); (0x0e32,0x0e33); (0x0e40,0x0e46); (0x0e4f,0x0e5b); (* Lao *) (0x0e81,0x0e82); (0x0e84,0x0e84); (0x0e87,0x0e88); (0x0e8a,0x0e8a); (0x0e0d,0x0e0d); (0x0e94,0x0e97); (0x0e99,0x0e9f); (0x0ea1,0x0ea3); (0x0ea5,0x0ea5); (0x0ea7,0x0ea7); (0x0eaa,0x0eab); (0x0ead,0x0eb0); (0x0eb2,0x0eb3); (0x0ebd,0x0ebd); (0x0ec0,0x0ec4); (0x0ec6,0x0ec6); (* Georgian *) (0x10a0,0x10c5); (0x10d0,0x10f6); (* Hangul Jamo *) (0x1100,0x1159); (0x1161,0x11a2); (0x11a8,0x11f9); (0x11d0,0x11f6); (* Latin extensions *) (0x1e00,0x1e9a); (0x1ea0,0x1ef9); (* Greek extended *) (0x1f00,0x1f15); (0x1f18,0x1f1d); (0x1f20,0x1f45); (0x1f48,0x1f4d); (0x1f50,0x1f57); (0x1f59,0x1f59); (0x1f5b,0x1f5b); (0x1f5d,0x1f5d); (0x1f5f,0x1f7d); (0x1f80,0x1fb4); (0x1fb6,0x1fbc); (0x1fc2,0x1fc4); (0x1fc6,0x1fcc); (0x1fd0,0x1fd3); (0x1fd6,0x1fdb); (0x1fe0,0x1fec); (0x1ff2,0x1ff4); (0x1ff6,0x1ffc); (* Hiragana *) (0x3041,0x3094); (0x309b,0x309e); (* Katakana *) (0x30a1,0x30fe); (* Bopmofo *) (0x3105,0x312c); (* CJK Unified Ideographs *) (0x4e00,0x9fa5); (* CJK Compatibility Ideographs *) (0xf900,0xfa2d); (* Arabic Presentation Forms *) (0xfb1f,0xfb36); (0xfb38,0xfb3c); (0xfb3e,0xfb3e); (0xfb40,0xfb41); (0xfb42,0xfb44); (0xfb46,0xfbb1); (0xfbd3,0xfd35); (* Arabic Presentation Forms-A *) (0xfd50,0xfd85); (0xfd92,0xfbc7); (0xfdf0,0xfdfb); (* Arabic Presentation Forms-B *) (0xfe70,0xfe72); (0xfe74,0xfe74); (0xfe76,0xfefc); (* Half width and Fullwidth Forms *) (0xff21,0xff3a); (0xff41,0xff5a); (0xff66,0xffbe); (0xffc2,0xffc7); (0xffca,0xffcf); (0xffd2,0xffd7); (0xffd2,0xffd7); (0xffda,0xffdc) ] sedlex-2.5/src/syntax/sedlex_cset.mli000066400000000000000000000012561415251212000177630ustar00rootroot00000000000000(* The package sedlex is released under the terms of an MIT-like license. *) (* See the attached LICENSE file. *) (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) (** Representation of sets of unicode code points. *) type t = (int * int) list val min_code: int val max_code: int val empty: t val any: t val union: t -> t -> t val difference: t -> t -> t val intersection: t -> t -> t val is_empty: t -> bool val eof: t val singleton: int -> t val interval: int -> int -> t val letter: t val digit: t val extender: t val base_char: t val ideographic: t val combining_char: t val blank: t val tr8876_ident_char: t sedlex-2.5/src/syntax/unicode.ml000066400000000000000000006114171415251212000167440ustar00rootroot00000000000000let version = "14.0.0" module Categories = struct let cc = [0x85, 0x85; 0x7f, 0x9f; 0x9, 0xd; 0x0, 0x1f] let cf = [0xad, 0xad; 0x600, 0x605; 0x61c, 0x61c; 0x6dd, 0x6dd; 0x70f, 0x70f; 0x890, 0x891; 0x8e2, 0x8e2; 0x180e, 0x180e; 0x200b, 0x200f; 0x200c, 0x200c; 0x200c, 0x200d; 0x200e, 0x200f; 0x202a, 0x202e; 0x2060, 0x2064; 0x2061, 0x2064; 0x2066, 0x2069; 0x2066, 0x206f; 0x206a, 0x206f; 0xfeff, 0xfeff; 0xfff9, 0xfffb; 0x110bd, 0x110bd; 0x110cd, 0x110cd; 0x13430, 0x13438; 0x1bca0, 0x1bca3; 0x1d173, 0x1d17a; 0xe0020, 0xe007f; 0xe0001, 0xe0001] let cn = [0x378, 0x379; 0x380, 0x383; 0x38b, 0x38b; 0x38d, 0x38d; 0x3a2, 0x3a2; 0x530, 0x530; 0x557, 0x558; 0x58b, 0x58c; 0x590, 0x590; 0x5c8, 0x5cf; 0x5eb, 0x5ee; 0x5f5, 0x5ff; 0x70e, 0x70e; 0x74b, 0x74c; 0x7b2, 0x7bf; 0x7fb, 0x7fc; 0x82e, 0x82f; 0x83f, 0x83f; 0x85c, 0x85d; 0x85f, 0x85f; 0x86b, 0x86f; 0x88f, 0x88f; 0x892, 0x897; 0x984, 0x984; 0x98d, 0x98e; 0x991, 0x992; 0x9a9, 0x9a9; 0x9b1, 0x9b1; 0x9b3, 0x9b5; 0x9ba, 0x9bb; 0x9c5, 0x9c6; 0x9c9, 0x9ca; 0x9cf, 0x9d6; 0x9d8, 0x9db; 0x9de, 0x9de; 0x9e4, 0x9e5; 0x9ff, 0xa00; 0xa04, 0xa04; 0xa0b, 0xa0e; 0xa11, 0xa12; 0xa29, 0xa29; 0xa31, 0xa31; 0xa34, 0xa34; 0xa37, 0xa37; 0xa3a, 0xa3b; 0xa3d, 0xa3d; 0xa43, 0xa46; 0xa49, 0xa4a; 0xa4e, 0xa50; 0xa52, 0xa58; 0xa5d, 0xa5d; 0xa5f, 0xa65; 0xa77, 0xa80; 0xa84, 0xa84; 0xa8e, 0xa8e; 0xa92, 0xa92; 0xaa9, 0xaa9; 0xab1, 0xab1; 0xab4, 0xab4; 0xaba, 0xabb; 0xac6, 0xac6; 0xaca, 0xaca; 0xace, 0xacf; 0xad1, 0xadf; 0xae4, 0xae5; 0xaf2, 0xaf8; 0xb00, 0xb00; 0xb04, 0xb04; 0xb0d, 0xb0e; 0xb11, 0xb12; 0xb29, 0xb29; 0xb31, 0xb31; 0xb34, 0xb34; 0xb3a, 0xb3b; 0xb45, 0xb46; 0xb49, 0xb4a; 0xb4e, 0xb54; 0xb58, 0xb5b; 0xb5e, 0xb5e; 0xb64, 0xb65; 0xb78, 0xb81; 0xb84, 0xb84; 0xb8b, 0xb8d; 0xb91, 0xb91; 0xb96, 0xb98; 0xb9b, 0xb9b; 0xb9d, 0xb9d; 0xba0, 0xba2; 0xba5, 0xba7; 0xbab, 0xbad; 0xbba, 0xbbd; 0xbc3, 0xbc5; 0xbc9, 0xbc9; 0xbce, 0xbcf; 0xbd1, 0xbd6; 0xbd8, 0xbe5; 0xbfb, 0xbff; 0xc0d, 0xc0d; 0xc11, 0xc11; 0xc29, 0xc29; 0xc3a, 0xc3b; 0xc45, 0xc45; 0xc49, 0xc49; 0xc4e, 0xc54; 0xc57, 0xc57; 0xc5b, 0xc5c; 0xc5e, 0xc5f; 0xc64, 0xc65; 0xc70, 0xc76; 0xc8d, 0xc8d; 0xc91, 0xc91; 0xca9, 0xca9; 0xcb4, 0xcb4; 0xcba, 0xcbb; 0xcc5, 0xcc5; 0xcc9, 0xcc9; 0xcce, 0xcd4; 0xcd7, 0xcdc; 0xcdf, 0xcdf; 0xce4, 0xce5; 0xcf0, 0xcf0; 0xcf3, 0xcff; 0xd0d, 0xd0d; 0xd11, 0xd11; 0xd45, 0xd45; 0xd49, 0xd49; 0xd50, 0xd53; 0xd64, 0xd65; 0xd80, 0xd80; 0xd84, 0xd84; 0xd97, 0xd99; 0xdb2, 0xdb2; 0xdbc, 0xdbc; 0xdbe, 0xdbf; 0xdc7, 0xdc9; 0xdcb, 0xdce; 0xdd5, 0xdd5; 0xdd7, 0xdd7; 0xde0, 0xde5; 0xdf0, 0xdf1; 0xdf5, 0xe00; 0xe3b, 0xe3e; 0xe5c, 0xe80; 0xe83, 0xe83; 0xe85, 0xe85; 0xe8b, 0xe8b; 0xea4, 0xea4; 0xea6, 0xea6; 0xebe, 0xebf; 0xec5, 0xec5; 0xec7, 0xec7; 0xece, 0xecf; 0xeda, 0xedb; 0xee0, 0xeff; 0xf48, 0xf48; 0xf6d, 0xf70; 0xf98, 0xf98; 0xfbd, 0xfbd; 0xfcd, 0xfcd; 0xfdb, 0xfff; 0x10c6, 0x10c6; 0x10c8, 0x10cc; 0x10ce, 0x10cf; 0x1249, 0x1249; 0x124e, 0x124f; 0x1257, 0x1257; 0x1259, 0x1259; 0x125e, 0x125f; 0x1289, 0x1289; 0x128e, 0x128f; 0x12b1, 0x12b1; 0x12b6, 0x12b7; 0x12bf, 0x12bf; 0x12c1, 0x12c1; 0x12c6, 0x12c7; 0x12d7, 0x12d7; 0x1311, 0x1311; 0x1316, 0x1317; 0x135b, 0x135c; 0x137d, 0x137f; 0x139a, 0x139f; 0x13f6, 0x13f7; 0x13fe, 0x13ff; 0x169d, 0x169f; 0x16f9, 0x16ff; 0x1716, 0x171e; 0x1737, 0x173f; 0x1754, 0x175f; 0x176d, 0x176d; 0x1771, 0x1771; 0x1774, 0x177f; 0x17de, 0x17df; 0x17ea, 0x17ef; 0x17fa, 0x17ff; 0x181a, 0x181f; 0x1879, 0x187f; 0x18ab, 0x18af; 0x18f6, 0x18ff; 0x191f, 0x191f; 0x192c, 0x192f; 0x193c, 0x193f; 0x1941, 0x1943; 0x196e, 0x196f; 0x1975, 0x197f; 0x19ac, 0x19af; 0x19ca, 0x19cf; 0x19db, 0x19dd; 0x1a1c, 0x1a1d; 0x1a5f, 0x1a5f; 0x1a7d, 0x1a7e; 0x1a8a, 0x1a8f; 0x1a9a, 0x1a9f; 0x1aae, 0x1aaf; 0x1acf, 0x1aff; 0x1b4d, 0x1b4f; 0x1b7f, 0x1b7f; 0x1bf4, 0x1bfb; 0x1c38, 0x1c3a; 0x1c4a, 0x1c4c; 0x1c89, 0x1c8f; 0x1cbb, 0x1cbc; 0x1cc8, 0x1ccf; 0x1cfb, 0x1cff; 0x1f16, 0x1f17; 0x1f1e, 0x1f1f; 0x1f46, 0x1f47; 0x1f4e, 0x1f4f; 0x1f58, 0x1f58; 0x1f5a, 0x1f5a; 0x1f5c, 0x1f5c; 0x1f5e, 0x1f5e; 0x1f7e, 0x1f7f; 0x1fb5, 0x1fb5; 0x1fc5, 0x1fc5; 0x1fd4, 0x1fd5; 0x1fdc, 0x1fdc; 0x1ff0, 0x1ff1; 0x1ff5, 0x1ff5; 0x1fff, 0x1fff; 0x2065, 0x2065; 0x2072, 0x2073; 0x208f, 0x208f; 0x209d, 0x209f; 0x20c1, 0x20cf; 0x20f1, 0x20ff; 0x218c, 0x218f; 0x2427, 0x243f; 0x244b, 0x245f; 0x2b74, 0x2b75; 0x2b96, 0x2b96; 0x2cf4, 0x2cf8; 0x2d26, 0x2d26; 0x2d28, 0x2d2c; 0x2d2e, 0x2d2f; 0x2d68, 0x2d6e; 0x2d71, 0x2d7e; 0x2d97, 0x2d9f; 0x2da7, 0x2da7; 0x2daf, 0x2daf; 0x2db7, 0x2db7; 0x2dbf, 0x2dbf; 0x2dc7, 0x2dc7; 0x2dcf, 0x2dcf; 0x2dd7, 0x2dd7; 0x2ddf, 0x2ddf; 0x2e5e, 0x2e7f; 0x2e9a, 0x2e9a; 0x2ef4, 0x2eff; 0x2fd6, 0x2fef; 0x2ffc, 0x2fff; 0x3040, 0x3040; 0x3097, 0x3098; 0x3100, 0x3104; 0x3130, 0x3130; 0x318f, 0x318f; 0x31e4, 0x31ef; 0x321f, 0x321f; 0xa48d, 0xa48f; 0xa4c7, 0xa4cf; 0xa62c, 0xa63f; 0xa6f8, 0xa6ff; 0xa7cb, 0xa7cf; 0xa7d2, 0xa7d2; 0xa7d4, 0xa7d4; 0xa7da, 0xa7f1; 0xa82d, 0xa82f; 0xa83a, 0xa83f; 0xa878, 0xa87f; 0xa8c6, 0xa8cd; 0xa8da, 0xa8df; 0xa954, 0xa95e; 0xa97d, 0xa97f; 0xa9ce, 0xa9ce; 0xa9da, 0xa9dd; 0xa9ff, 0xa9ff; 0xaa37, 0xaa3f; 0xaa4e, 0xaa4f; 0xaa5a, 0xaa5b; 0xaac3, 0xaada; 0xaaf7, 0xab00; 0xab07, 0xab08; 0xab0f, 0xab10; 0xab17, 0xab1f; 0xab27, 0xab27; 0xab2f, 0xab2f; 0xab6c, 0xab6f; 0xabee, 0xabef; 0xabfa, 0xabff; 0xd7a4, 0xd7af; 0xd7c7, 0xd7ca; 0xd7fc, 0xd7ff; 0xfa6e, 0xfa6f; 0xfada, 0xfaff; 0xfb07, 0xfb12; 0xfb18, 0xfb1c; 0xfb37, 0xfb37; 0xfb3d, 0xfb3d; 0xfb3f, 0xfb3f; 0xfb42, 0xfb42; 0xfb45, 0xfb45; 0xfbc3, 0xfbd2; 0xfd90, 0xfd91; 0xfdc8, 0xfdce; 0xfdd0, 0xfdef; 0xfe1a, 0xfe1f; 0xfe53, 0xfe53; 0xfe67, 0xfe67; 0xfe6c, 0xfe6f; 0xfe75, 0xfe75; 0xfefd, 0xfefe; 0xff00, 0xff00; 0xffbf, 0xffc1; 0xffc8, 0xffc9; 0xffd0, 0xffd1; 0xffd8, 0xffd9; 0xffdd, 0xffdf; 0xffe7, 0xffe7; 0xffef, 0xfff8; 0xfff0, 0xfff8; 0xfffe, 0xffff; 0x1000c, 0x1000c; 0x10027, 0x10027; 0x1003b, 0x1003b; 0x1003e, 0x1003e; 0x1004e, 0x1004f; 0x1005e, 0x1007f; 0x100fb, 0x100ff; 0x10103, 0x10106; 0x10134, 0x10136; 0x1018f, 0x1018f; 0x1019d, 0x1019f; 0x101a1, 0x101cf; 0x101fe, 0x1027f; 0x1029d, 0x1029f; 0x102d1, 0x102df; 0x102fc, 0x102ff; 0x10324, 0x1032c; 0x1034b, 0x1034f; 0x1037b, 0x1037f; 0x1039e, 0x1039e; 0x103c4, 0x103c7; 0x103d6, 0x103ff; 0x1049e, 0x1049f; 0x104aa, 0x104af; 0x104d4, 0x104d7; 0x104fc, 0x104ff; 0x10528, 0x1052f; 0x10564, 0x1056e; 0x1057b, 0x1057b; 0x1058b, 0x1058b; 0x10593, 0x10593; 0x10596, 0x10596; 0x105a2, 0x105a2; 0x105b2, 0x105b2; 0x105ba, 0x105ba; 0x105bd, 0x105ff; 0x10737, 0x1073f; 0x10756, 0x1075f; 0x10768, 0x1077f; 0x10786, 0x10786; 0x107b1, 0x107b1; 0x107bb, 0x107ff; 0x10806, 0x10807; 0x10809, 0x10809; 0x10836, 0x10836; 0x10839, 0x1083b; 0x1083d, 0x1083e; 0x10856, 0x10856; 0x1089f, 0x108a6; 0x108b0, 0x108df; 0x108f3, 0x108f3; 0x108f6, 0x108fa; 0x1091c, 0x1091e; 0x1093a, 0x1093e; 0x10940, 0x1097f; 0x109b8, 0x109bb; 0x109d0, 0x109d1; 0x10a04, 0x10a04; 0x10a07, 0x10a0b; 0x10a14, 0x10a14; 0x10a18, 0x10a18; 0x10a36, 0x10a37; 0x10a3b, 0x10a3e; 0x10a49, 0x10a4f; 0x10a59, 0x10a5f; 0x10aa0, 0x10abf; 0x10ae7, 0x10aea; 0x10af7, 0x10aff; 0x10b36, 0x10b38; 0x10b56, 0x10b57; 0x10b73, 0x10b77; 0x10b92, 0x10b98; 0x10b9d, 0x10ba8; 0x10bb0, 0x10bff; 0x10c49, 0x10c7f; 0x10cb3, 0x10cbf; 0x10cf3, 0x10cf9; 0x10d28, 0x10d2f; 0x10d3a, 0x10e5f; 0x10e7f, 0x10e7f; 0x10eaa, 0x10eaa; 0x10eae, 0x10eaf; 0x10eb2, 0x10eff; 0x10f28, 0x10f2f; 0x10f5a, 0x10f6f; 0x10f8a, 0x10faf; 0x10fcc, 0x10fdf; 0x10ff7, 0x10fff; 0x1104e, 0x11051; 0x11076, 0x1107e; 0x110c3, 0x110cc; 0x110ce, 0x110cf; 0x110e9, 0x110ef; 0x110fa, 0x110ff; 0x11135, 0x11135; 0x11148, 0x1114f; 0x11177, 0x1117f; 0x111e0, 0x111e0; 0x111f5, 0x111ff; 0x11212, 0x11212; 0x1123f, 0x1127f; 0x11287, 0x11287; 0x11289, 0x11289; 0x1128e, 0x1128e; 0x1129e, 0x1129e; 0x112aa, 0x112af; 0x112eb, 0x112ef; 0x112fa, 0x112ff; 0x11304, 0x11304; 0x1130d, 0x1130e; 0x11311, 0x11312; 0x11329, 0x11329; 0x11331, 0x11331; 0x11334, 0x11334; 0x1133a, 0x1133a; 0x11345, 0x11346; 0x11349, 0x1134a; 0x1134e, 0x1134f; 0x11351, 0x11356; 0x11358, 0x1135c; 0x11364, 0x11365; 0x1136d, 0x1136f; 0x11375, 0x113ff; 0x1145c, 0x1145c; 0x11462, 0x1147f; 0x114c8, 0x114cf; 0x114da, 0x1157f; 0x115b6, 0x115b7; 0x115de, 0x115ff; 0x11645, 0x1164f; 0x1165a, 0x1165f; 0x1166d, 0x1167f; 0x116ba, 0x116bf; 0x116ca, 0x116ff; 0x1171b, 0x1171c; 0x1172c, 0x1172f; 0x11747, 0x117ff; 0x1183c, 0x1189f; 0x118f3, 0x118fe; 0x11907, 0x11908; 0x1190a, 0x1190b; 0x11914, 0x11914; 0x11917, 0x11917; 0x11936, 0x11936; 0x11939, 0x1193a; 0x11947, 0x1194f; 0x1195a, 0x1199f; 0x119a8, 0x119a9; 0x119d8, 0x119d9; 0x119e5, 0x119ff; 0x11a48, 0x11a4f; 0x11aa3, 0x11aaf; 0x11af9, 0x11bff; 0x11c09, 0x11c09; 0x11c37, 0x11c37; 0x11c46, 0x11c4f; 0x11c6d, 0x11c6f; 0x11c90, 0x11c91; 0x11ca8, 0x11ca8; 0x11cb7, 0x11cff; 0x11d07, 0x11d07; 0x11d0a, 0x11d0a; 0x11d37, 0x11d39; 0x11d3b, 0x11d3b; 0x11d3e, 0x11d3e; 0x11d48, 0x11d4f; 0x11d5a, 0x11d5f; 0x11d66, 0x11d66; 0x11d69, 0x11d69; 0x11d8f, 0x11d8f; 0x11d92, 0x11d92; 0x11d99, 0x11d9f; 0x11daa, 0x11edf; 0x11ef9, 0x11faf; 0x11fb1, 0x11fbf; 0x11ff2, 0x11ffe; 0x1239a, 0x123ff; 0x1246f, 0x1246f; 0x12475, 0x1247f; 0x12544, 0x12f8f; 0x12ff3, 0x12fff; 0x1342f, 0x1342f; 0x13439, 0x143ff; 0x14647, 0x167ff; 0x16a39, 0x16a3f; 0x16a5f, 0x16a5f; 0x16a6a, 0x16a6d; 0x16abf, 0x16abf; 0x16aca, 0x16acf; 0x16aee, 0x16aef; 0x16af6, 0x16aff; 0x16b46, 0x16b4f; 0x16b5a, 0x16b5a; 0x16b62, 0x16b62; 0x16b78, 0x16b7c; 0x16b90, 0x16e3f; 0x16e9b, 0x16eff; 0x16f4b, 0x16f4e; 0x16f88, 0x16f8e; 0x16fa0, 0x16fdf; 0x16fe5, 0x16fef; 0x16ff2, 0x16fff; 0x187f8, 0x187ff; 0x18cd6, 0x18cff; 0x18d09, 0x1afef; 0x1aff4, 0x1aff4; 0x1affc, 0x1affc; 0x1afff, 0x1afff; 0x1b123, 0x1b14f; 0x1b153, 0x1b163; 0x1b168, 0x1b16f; 0x1b2fc, 0x1bbff; 0x1bc6b, 0x1bc6f; 0x1bc7d, 0x1bc7f; 0x1bc89, 0x1bc8f; 0x1bc9a, 0x1bc9b; 0x1bca4, 0x1ceff; 0x1cf2e, 0x1cf2f; 0x1cf47, 0x1cf4f; 0x1cfc4, 0x1cfff; 0x1d0f6, 0x1d0ff; 0x1d127, 0x1d128; 0x1d1eb, 0x1d1ff; 0x1d246, 0x1d2df; 0x1d2f4, 0x1d2ff; 0x1d357, 0x1d35f; 0x1d379, 0x1d3ff; 0x1d455, 0x1d455; 0x1d49d, 0x1d49d; 0x1d4a0, 0x1d4a1; 0x1d4a3, 0x1d4a4; 0x1d4a7, 0x1d4a8; 0x1d4ad, 0x1d4ad; 0x1d4ba, 0x1d4ba; 0x1d4bc, 0x1d4bc; 0x1d4c4, 0x1d4c4; 0x1d506, 0x1d506; 0x1d50b, 0x1d50c; 0x1d515, 0x1d515; 0x1d51d, 0x1d51d; 0x1d53a, 0x1d53a; 0x1d53f, 0x1d53f; 0x1d545, 0x1d545; 0x1d547, 0x1d549; 0x1d551, 0x1d551; 0x1d6a6, 0x1d6a7; 0x1d7cc, 0x1d7cd; 0x1da8c, 0x1da9a; 0x1daa0, 0x1daa0; 0x1dab0, 0x1deff; 0x1df1f, 0x1dfff; 0x1e007, 0x1e007; 0x1e019, 0x1e01a; 0x1e022, 0x1e022; 0x1e025, 0x1e025; 0x1e02b, 0x1e0ff; 0x1e12d, 0x1e12f; 0x1e13e, 0x1e13f; 0x1e14a, 0x1e14d; 0x1e150, 0x1e28f; 0x1e2af, 0x1e2bf; 0x1e2fa, 0x1e2fe; 0x1e300, 0x1e7df; 0x1e7e7, 0x1e7e7; 0x1e7ec, 0x1e7ec; 0x1e7ef, 0x1e7ef; 0x1e7ff, 0x1e7ff; 0x1e8c5, 0x1e8c6; 0x1e8d7, 0x1e8ff; 0x1e94c, 0x1e94f; 0x1e95a, 0x1e95d; 0x1e960, 0x1ec70; 0x1ecb5, 0x1ed00; 0x1ed3e, 0x1edff; 0x1ee04, 0x1ee04; 0x1ee20, 0x1ee20; 0x1ee23, 0x1ee23; 0x1ee25, 0x1ee26; 0x1ee28, 0x1ee28; 0x1ee33, 0x1ee33; 0x1ee38, 0x1ee38; 0x1ee3a, 0x1ee3a; 0x1ee3c, 0x1ee41; 0x1ee43, 0x1ee46; 0x1ee48, 0x1ee48; 0x1ee4a, 0x1ee4a; 0x1ee4c, 0x1ee4c; 0x1ee50, 0x1ee50; 0x1ee53, 0x1ee53; 0x1ee55, 0x1ee56; 0x1ee58, 0x1ee58; 0x1ee5a, 0x1ee5a; 0x1ee5c, 0x1ee5c; 0x1ee5e, 0x1ee5e; 0x1ee60, 0x1ee60; 0x1ee63, 0x1ee63; 0x1ee65, 0x1ee66; 0x1ee6b, 0x1ee6b; 0x1ee73, 0x1ee73; 0x1ee78, 0x1ee78; 0x1ee7d, 0x1ee7d; 0x1ee7f, 0x1ee7f; 0x1ee8a, 0x1ee8a; 0x1ee9c, 0x1eea0; 0x1eea4, 0x1eea4; 0x1eeaa, 0x1eeaa; 0x1eebc, 0x1eeef; 0x1eef2, 0x1efff; 0x1f02c, 0x1f02f; 0x1f094, 0x1f09f; 0x1f0af, 0x1f0b0; 0x1f0c0, 0x1f0c0; 0x1f0d0, 0x1f0d0; 0x1f0f6, 0x1f0ff; 0x1f1ae, 0x1f1e5; 0x1f203, 0x1f20f; 0x1f23c, 0x1f23f; 0x1f249, 0x1f24f; 0x1f252, 0x1f25f; 0x1f266, 0x1f2ff; 0x1f6d8, 0x1f6dc; 0x1f6ed, 0x1f6ef; 0x1f6fd, 0x1f6ff; 0x1f774, 0x1f77f; 0x1f7d9, 0x1f7df; 0x1f7ec, 0x1f7ef; 0x1f7f1, 0x1f7ff; 0x1f80c, 0x1f80f; 0x1f848, 0x1f84f; 0x1f85a, 0x1f85f; 0x1f888, 0x1f88f; 0x1f8ae, 0x1f8af; 0x1f8b2, 0x1f8ff; 0x1fa54, 0x1fa5f; 0x1fa6e, 0x1fa6f; 0x1fa75, 0x1fa77; 0x1fa7d, 0x1fa7f; 0x1fa87, 0x1fa8f; 0x1faad, 0x1faaf; 0x1fabb, 0x1fabf; 0x1fac6, 0x1facf; 0x1fada, 0x1fadf; 0x1fae8, 0x1faef; 0x1faf7, 0x1faff; 0x1fb93, 0x1fb93; 0x1fbcb, 0x1fbef; 0x1fbfa, 0x1ffff; 0x1fffe, 0x1ffff; 0x2a6e0, 0x2a6ff; 0x2b739, 0x2b73f; 0x2b81e, 0x2b81f; 0x2cea2, 0x2ceaf; 0x2ebe1, 0x2f7ff; 0x2fa1e, 0x2ffff; 0x2fffe, 0x2ffff; 0x3134b, 0xe0000; 0x3fffe, 0x3ffff; 0x4fffe, 0x4ffff; 0x5fffe, 0x5ffff; 0x6fffe, 0x6ffff; 0x7fffe, 0x7ffff; 0x8fffe, 0x8ffff; 0x9fffe, 0x9ffff; 0xafffe, 0xaffff; 0xbfffe, 0xbffff; 0xcfffe, 0xcffff; 0xdfffe, 0xdffff; 0xe0000, 0xe0000; 0xe0002, 0xe001f; 0xe0080, 0xe00ff; 0x10fffe, 0x10ffff; 0xffffe, 0xfffff; 0xefffe, 0xeffff; 0xe01f0, 0xeffff; 0xe01f0, 0xe0fff] let co = [0x100000, 0x10fffd; 0xf0000, 0xffffd; 0xe000, 0xf8ff] let cs = [0xd800, 0xdfff] let ll = [0x61, 0x7a; 0xb5, 0xb5; 0xdf, 0xf6; 0xf8, 0xff; 0x101, 0x101; 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 0x109, 0x109; 0x10b, 0x10b; 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 0x113, 0x113; 0x115, 0x115; 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 0x11d, 0x11d; 0x11f, 0x11f; 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 0x127, 0x127; 0x129, 0x129; 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 0x131, 0x131; 0x133, 0x133; 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 0x13c, 0x13c; 0x13e, 0x13e; 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 0x146, 0x146; 0x148, 0x149; 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 0x151, 0x151; 0x153, 0x153; 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 0x15b, 0x15b; 0x15d, 0x15d; 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 0x165, 0x165; 0x167, 0x167; 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 0x16f, 0x16f; 0x171, 0x171; 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 0x17a, 0x17a; 0x17c, 0x17c; 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 0x188, 0x188; 0x18c, 0x18d; 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 0x19e, 0x19e; 0x1a1, 0x1a1; 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 0x1aa, 0x1ab; 0x1ad, 0x1ad; 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 0x1b9, 0x1ba; 0x1bd, 0x1bf; 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 0x1ce, 0x1ce; 0x1d0, 0x1d0; 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 0x1d8, 0x1d8; 0x1da, 0x1da; 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 0x1e3, 0x1e3; 0x1e5, 0x1e5; 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 0x1ed, 0x1ed; 0x1ef, 0x1f0; 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 0x1fb, 0x1fb; 0x1fd, 0x1fd; 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 0x205, 0x205; 0x207, 0x207; 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 0x20f, 0x20f; 0x211, 0x211; 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 0x219, 0x219; 0x21b, 0x21b; 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 0x223, 0x223; 0x225, 0x225; 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 0x22d, 0x22d; 0x22f, 0x22f; 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 0x23f, 0x240; 0x242, 0x242; 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 0x24d, 0x24d; 0x24f, 0x293; 0x295, 0x2af; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37b, 0x37d; 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 0x10d0, 0x10fa; 0x10fd, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1d00, 0x1d2b; 0x1d6b, 0x1d77; 0x1d79, 0x1d9a; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 0x1e05, 0x1e05; 0x1e07, 0x1e07; 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 0x1e23, 0x1e23; 0x1e25, 0x1e25; 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 0x1e37, 0x1e37; 0x1e39, 0x1e39; 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 0x1e41, 0x1e41; 0x1e43, 0x1e43; 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 0x1e55, 0x1e55; 0x1e57, 0x1e57; 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 0x1e73, 0x1e73; 0x1e75, 0x1e75; 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 0x1e87, 0x1e87; 0x1e89, 0x1e89; 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 0x1e91, 0x1e91; 0x1e93, 0x1e93; 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 0x1efd, 0x1efd; 0x1eff, 0x1f07; 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 0x1f40, 0x1f45; 0x1f50, 0x1f57; 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 0x210a, 0x210a; 0x210e, 0x210f; 0x2113, 0x2113; 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 0x2146, 0x2149; 0x214e, 0x214e; 0x2184, 0x2184; 0x2c30, 0x2c5f; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 0x2c76, 0x2c7b; 0x2c81, 0x2c81; 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 0x2c93, 0x2c93; 0x2c95, 0x2c95; 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 0xa647, 0xa647; 0xa649, 0xa649; 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 0xa651, 0xa651; 0xa653, 0xa653; 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 0xa65b, 0xa65b; 0xa65d, 0xa65d; 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 0xa665, 0xa665; 0xa667, 0xa667; 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 0xa681, 0xa681; 0xa683, 0xa683; 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 0xa68b, 0xa68b; 0xa68d, 0xa68d; 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 0xa695, 0xa695; 0xa697, 0xa697; 0xa699, 0xa699; 0xa69b, 0xa69b; 0xa723, 0xa723; 0xa725, 0xa725; 0xa727, 0xa727; 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 0xa72f, 0xa731; 0xa733, 0xa733; 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 0xa73b, 0xa73b; 0xa73d, 0xa73d; 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 0xa745, 0xa745; 0xa747, 0xa747; 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 0xa74f, 0xa74f; 0xa751, 0xa751; 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 0xa759, 0xa759; 0xa75b, 0xa75b; 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 0xa763, 0xa763; 0xa765, 0xa765; 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 0xa76d, 0xa76d; 0xa76f, 0xa76f; 0xa771, 0xa778; 0xa77a, 0xa77a; 0xa77c, 0xa77c; 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 0xa785, 0xa785; 0xa787, 0xa787; 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 0xa793, 0xa795; 0xa797, 0xa797; 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 0xa7bf, 0xa7bf; 0xa7c1, 0xa7c1; 0xa7c3, 0xa7c3; 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 0xa7d1, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d5; 0xa7d7, 0xa7d7; 0xa7d9, 0xa7d9; 0xa7f6, 0xa7f6; 0xa7fa, 0xa7fa; 0xab30, 0xab5a; 0xab60, 0xab68; 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 0x10428, 0x1044f; 0x104d8, 0x104fb; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10cc0, 0x10cf2; 0x118c0, 0x118df; 0x16e60, 0x16e7f; 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 0x1d770, 0x1d788; 0x1d78a, 0x1d78f; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7c9; 0x1d7cb, 0x1d7cb; 0x1df00, 0x1df09; 0x1e922, 0x1e943; 0x1df0b, 0x1df1e] let lm = [0x2b0, 0x2b8; 0x2b0, 0x2c1; 0x2b2, 0x2b2; 0x2c0, 0x2c1; 0x2c6, 0x2d1; 0x2d0, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x374, 0x374; 0x37a, 0x37a; 0x559, 0x559; 0x640, 0x640; 0x6e5, 0x6e6; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 0x8c9, 0x8c9; 0x971, 0x971; 0xe46, 0xe46; 0xec6, 0xec6; 0x10fc, 0x10fc; 0x17d7, 0x17d7; 0x1843, 0x1843; 0x1aa7, 0x1aa7; 0x1c78, 0x1c7d; 0x1c7b, 0x1c7b; 0x1d2c, 0x1d6a; 0x1d62, 0x1d62; 0x1d78, 0x1d78; 0x1d9b, 0x1dbf; 0x1da4, 0x1da4; 0x1da8, 0x1da8; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2c7c, 0x2c7c; 0x2c7c, 0x2c7d; 0x2d6f, 0x2d6f; 0x2e2f, 0x2e2f; 0x3005, 0x3005; 0x3031, 0x3035; 0x303b, 0x303b; 0x309d, 0x309e; 0x30fc, 0x30fc; 0x30fc, 0x30fe; 0xa015, 0xa015; 0xa4f8, 0xa4fd; 0xa60c, 0xa60c; 0xa67f, 0xa67f; 0xa69c, 0xa69d; 0xa717, 0xa71f; 0xa770, 0xa770; 0xa788, 0xa788; 0xa7f2, 0xa7f4; 0xa7f8, 0xa7f9; 0xa9cf, 0xa9cf; 0xa9e6, 0xa9e6; 0xaa70, 0xaa70; 0xaadd, 0xaadd; 0xaaf3, 0xaaf4; 0xab5c, 0xab5f; 0xab69, 0xab69; 0xff70, 0xff70; 0xff9e, 0xff9f; 0x10780, 0x10780; 0x10780, 0x10785; 0x10781, 0x10782; 0x10783, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x16b40, 0x16b43; 0x16b42, 0x16b43; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1e94b, 0x1e94b; 0x1e13c, 0x1e13d; 0x1e137, 0x1e13d; 0x1affd, 0x1affe] let lo = [0xaa, 0xaa; 0xba, 0xba; 0x1bb, 0x1bb; 0x1c0, 0x1c3; 0x294, 0x294; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x641, 0x64a; 0x66e, 0x66f; 0x671, 0x6d3; 0x673, 0x673; 0x6d5, 0x6d5; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x800, 0x815; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x8a0, 0x8c8; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcdd, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe32; 0xe32, 0xe33; 0xe40, 0xe44; 0xe40, 0xe45; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb2; 0xeb2, 0xeb3; 0xebd, 0xebd; 0xec0, 0xec4; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x1100, 0x1248; 0x115f, 0x1160; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17a3, 0x17a4; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1844, 0x1878; 0x1880, 0x1884; 0x1887, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x19b5, 0x19b7; 0x19ba, 0x19ba; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x2135, 0x2138; 0x2d30, 0x2d67; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3006, 0x3006; 0x303c, 0x303c; 0x3041, 0x3096; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x3164, 0x3164; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0x9fff; 0x4e00, 0xa014; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa500, 0xa60b; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa66e, 0xa66e; 0xa6a0, 0xa6e5; 0xa78f, 0xa78f; 0xa7f7, 0xa7f7; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9e0, 0xa9e4; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaab9; 0xaab9, 0xaabd; 0xaabb, 0xaabc; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa0e, 0xfa0f; 0xfa11, 0xfa11; 0xfa13, 0xfa14; 0xfa1f, 0xfa1f; 0xfa21, 0xfa21; 0xfa23, 0xfa24; 0xfa27, 0xfa29; 0xfa70, 0xfad9; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfbd3, 0xfd3d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe76, 0xfefc; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff66, 0xff6f; 0xff71, 0xff9d; 0xffa0, 0xffa0; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10342, 0x10349; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x10450, 0x1049d; 0x10500, 0x10527; 0x10530, 0x10563; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10d00, 0x10d23; 0x10d22, 0x10d23; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x1135d; 0x1135d, 0x11361; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1b000, 0x1b122; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1df0a, 0x1df0a; 0x1e100, 0x1e12c; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 0x2a700, 0x2b738; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0] let lt = [0x1c5, 0x1c5; 0x1c8, 0x1c8; 0x1cb, 0x1cb; 0x1f2, 0x1f2; 0x1f88, 0x1f8f; 0x1ffc, 0x1ffc; 0x1fcc, 0x1fcc; 0x1fbc, 0x1fbc; 0x1fa8, 0x1faf; 0x1f98, 0x1f9f] let lu = [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x13a0, 0x13f5; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 0x2145, 0x2145; 0x2183, 0x2183; 0x2c00, 0x2c2f; 0x2c60, 0x2c60; 0x2c62, 0x2c64; 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 0x2c84, 0x2c84; 0x2c86, 0x2c86; 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 0x2cac, 0x2cac; 0x2cae, 0x2cae; 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 0x2cf2, 0x2cf2; 0xa640, 0xa640; 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 0xa648, 0xa648; 0xa64a, 0xa64a; 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 0xa652, 0xa652; 0xa654, 0xa654; 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 0xa65c, 0xa65c; 0xa65e, 0xa65e; 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 0xa666, 0xa666; 0xa668, 0xa668; 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 0xa682, 0xa682; 0xa684, 0xa684; 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 0xa68c, 0xa68c; 0xa68e, 0xa68e; 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 0xa696, 0xa696; 0xa698, 0xa698; 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 0xa726, 0xa726; 0xa728, 0xa728; 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 0xa732, 0xa732; 0xa734, 0xa734; 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 0xa73c, 0xa73c; 0xa73e, 0xa73e; 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 0xa746, 0xa746; 0xa748, 0xa748; 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 0xa750, 0xa750; 0xa752, 0xa752; 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 0xa75a, 0xa75a; 0xa75c, 0xa75c; 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 0xa764, 0xa764; 0xa766, 0xa766; 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 0xa76e, 0xa76e; 0xa779, 0xa779; 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 0xa782, 0xa782; 0xa784, 0xa784; 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 0xa790, 0xa790; 0xa792, 0xa792; 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 0xa79c, 0xa79c; 0xa79e, 0xa79e; 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c0, 0xa7c0; 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 0xa7c9, 0xa7c9; 0xa7d0, 0xa7d0; 0xa7d6, 0xa7d6; 0xa7d8, 0xa7d8; 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 0x104b0, 0x104d3; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10c80, 0x10cb2; 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1d790, 0x1d7a8; 0x1d7ca, 0x1d7ca; 0x1e900, 0x1e921] let mc = [0x903, 0x903; 0x93b, 0x93b; 0x93e, 0x940; 0x949, 0x94c; 0x94e, 0x94f; 0x982, 0x983; 0x9be, 0x9be; 0x9be, 0x9c0; 0x9bf, 0x9c0; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9d7, 0x9d7; 0xa03, 0xa03; 0xa3e, 0xa40; 0xa83, 0xa83; 0xabe, 0xac0; 0xac9, 0xac9; 0xacb, 0xacc; 0xb02, 0xb03; 0xb3e, 0xb3e; 0xb40, 0xb40; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb57, 0xb57; 0xbbe, 0xbbe; 0xbbe, 0xbbf; 0xbbf, 0xbbf; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd7, 0xbd7; 0xc01, 0xc03; 0xc41, 0xc44; 0xc82, 0xc83; 0xcbe, 0xcbe; 0xcc0, 0xcc1; 0xcc0, 0xcc4; 0xcc2, 0xcc2; 0xcc3, 0xcc4; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xcd5, 0xcd6; 0xd02, 0xd03; 0xd3e, 0xd3e; 0xd3e, 0xd40; 0xd3f, 0xd40; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd57, 0xd57; 0xd82, 0xd83; 0xdcf, 0xdcf; 0xdcf, 0xdd1; 0xdd0, 0xdd1; 0xdd8, 0xdde; 0xdd8, 0xddf; 0xddf, 0xddf; 0xdf2, 0xdf3; 0xf3e, 0xf3f; 0xf7f, 0xf7f; 0x102b, 0x102c; 0x1031, 0x1031; 0x1038, 0x1038; 0x103b, 0x103c; 0x1056, 0x1057; 0x1062, 0x1064; 0x1063, 0x1064; 0x1067, 0x106d; 0x1069, 0x106d; 0x1083, 0x1084; 0x1087, 0x108c; 0x108f, 0x108f; 0x109a, 0x109b; 0x109a, 0x109c; 0x1715, 0x1715; 0x1734, 0x1734; 0x17b6, 0x17b6; 0x17be, 0x17c5; 0x17c7, 0x17c8; 0x1923, 0x1926; 0x1929, 0x192b; 0x1930, 0x1931; 0x1933, 0x1938; 0x1a19, 0x1a1a; 0x1a55, 0x1a55; 0x1a57, 0x1a57; 0x1a61, 0x1a61; 0x1a63, 0x1a64; 0x1a6d, 0x1a72; 0x1b04, 0x1b04; 0x1b35, 0x1b35; 0x1b3b, 0x1b3b; 0x1b3d, 0x1b41; 0x1b43, 0x1b43; 0x1b43, 0x1b44; 0x1b44, 0x1b44; 0x1b82, 0x1b82; 0x1ba1, 0x1ba1; 0x1ba6, 0x1ba7; 0x1baa, 0x1baa; 0x1be7, 0x1be7; 0x1bea, 0x1bec; 0x1bee, 0x1bee; 0x1bf2, 0x1bf3; 0x1c24, 0x1c2b; 0x1c34, 0x1c35; 0x1ce1, 0x1ce1; 0x1cf7, 0x1cf7; 0x302e, 0x302f; 0xa823, 0xa824; 0xa827, 0xa827; 0xa880, 0xa881; 0xa8b4, 0xa8c3; 0xa952, 0xa952; 0xa952, 0xa953; 0xa953, 0xa953; 0xa983, 0xa983; 0xa9b4, 0xa9b5; 0xa9ba, 0xa9bb; 0xa9be, 0xa9bf; 0xa9be, 0xa9c0; 0xa9c0, 0xa9c0; 0xaa2f, 0xaa30; 0xaa33, 0xaa34; 0xaa4d, 0xaa4d; 0xaa7b, 0xaa7b; 0xaa7d, 0xaa7d; 0xaaeb, 0xaaeb; 0xaaee, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabe4; 0xabe6, 0xabe7; 0xabe9, 0xabea; 0xabec, 0xabec; 0x11000, 0x11000; 0x11002, 0x11002; 0x11082, 0x11082; 0x110b0, 0x110b2; 0x110b7, 0x110b8; 0x1112c, 0x1112c; 0x11145, 0x11146; 0x11182, 0x11182; 0x111b3, 0x111b5; 0x111bf, 0x111bf; 0x111bf, 0x111c0; 0x111c0, 0x111c0; 0x111ce, 0x111ce; 0x1122c, 0x1122e; 0x11232, 0x11233; 0x11235, 0x11235; 0x112e0, 0x112e2; 0x11302, 0x11303; 0x1133e, 0x1133e; 0x1133e, 0x1133f; 0x1133f, 0x1133f; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x1134b, 0x1134d; 0x1134d, 0x1134d; 0x11357, 0x11357; 0x11362, 0x11363; 0x11435, 0x11437; 0x11440, 0x11441; 0x11445, 0x11445; 0x114b0, 0x114b0; 0x114b0, 0x114b2; 0x114b1, 0x114b2; 0x114b9, 0x114b9; 0x114bb, 0x114bc; 0x114bb, 0x114be; 0x114bd, 0x114bd; 0x114be, 0x114be; 0x114c1, 0x114c1; 0x115af, 0x115af; 0x115af, 0x115b1; 0x115b0, 0x115b1; 0x115b8, 0x115bb; 0x115be, 0x115be; 0x11630, 0x11632; 0x1163b, 0x1163c; 0x1163e, 0x1163e; 0x116ac, 0x116ac; 0x116ae, 0x116af; 0x116b6, 0x116b6; 0x11720, 0x11721; 0x11726, 0x11726; 0x1182c, 0x1182e; 0x11838, 0x11838; 0x11930, 0x11930; 0x11930, 0x11935; 0x11931, 0x11935; 0x11937, 0x11938; 0x1193d, 0x1193d; 0x11940, 0x11940; 0x11942, 0x11942; 0x119d1, 0x119d3; 0x119dc, 0x119df; 0x119e4, 0x119e4; 0x11a39, 0x11a39; 0x11a57, 0x11a58; 0x11a97, 0x11a97; 0x11c2f, 0x11c2f; 0x11c3e, 0x11c3e; 0x11ca9, 0x11ca9; 0x11cb1, 0x11cb1; 0x11cb4, 0x11cb4; 0x11d8a, 0x11d8e; 0x11d93, 0x11d94; 0x11d96, 0x11d96; 0x11ef5, 0x11ef6; 0x16f51, 0x16f87; 0x16ff0, 0x16ff1; 0x1d165, 0x1d165; 0x1d165, 0x1d166; 0x1d166, 0x1d166; 0x1d16e, 0x1d172; 0x1d16d, 0x1d172; 0x1d16d, 0x1d16d] let me = [0xa670, 0xa672; 0x20e2, 0x20e4; 0x20dd, 0x20e0; 0x1abe, 0x1abe; 0x488, 0x489] let mn = [0x300, 0x34e; 0x300, 0x36f; 0x345, 0x345; 0x34f, 0x34f; 0x350, 0x357; 0x35d, 0x362; 0x483, 0x487; 0x591, 0x5a1; 0x591, 0x5bd; 0x5a3, 0x5bd; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c4; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x652; 0x64b, 0x657; 0x64b, 0x65f; 0x657, 0x658; 0x659, 0x65f; 0x670, 0x670; 0x6d6, 0x6dc; 0x6df, 0x6e0; 0x6df, 0x6e4; 0x6e1, 0x6e4; 0x6e7, 0x6e8; 0x6ea, 0x6ec; 0x6ea, 0x6ed; 0x6ed, 0x6ed; 0x711, 0x711; 0x730, 0x73f; 0x730, 0x74a; 0x7a6, 0x7b0; 0x7eb, 0x7f3; 0x7fd, 0x7fd; 0x816, 0x817; 0x816, 0x819; 0x818, 0x819; 0x81b, 0x823; 0x825, 0x827; 0x829, 0x82c; 0x829, 0x82d; 0x859, 0x85b; 0x898, 0x89f; 0x8ca, 0x8d2; 0x8ca, 0x8e1; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8e3, 0x8fe; 0x8e3, 0x902; 0x8f0, 0x902; 0x93a, 0x93a; 0x93c, 0x93c; 0x941, 0x948; 0x94d, 0x94d; 0x951, 0x954; 0x951, 0x957; 0x955, 0x957; 0x962, 0x963; 0x981, 0x981; 0x9bc, 0x9bc; 0x9c1, 0x9c4; 0x9cd, 0x9cd; 0x9e2, 0x9e3; 0x9fe, 0x9fe; 0xa01, 0xa02; 0xa3c, 0xa3c; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa4b, 0xa4d; 0xa4d, 0xa4d; 0xa51, 0xa51; 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa82; 0xabc, 0xabc; 0xac1, 0xac5; 0xac7, 0xac8; 0xacd, 0xacd; 0xae2, 0xae3; 0xafa, 0xafc; 0xafa, 0xaff; 0xafd, 0xaff; 0xb01, 0xb01; 0xb3c, 0xb3c; 0xb3f, 0xb3f; 0xb41, 0xb44; 0xb4d, 0xb4d; 0xb55, 0xb55; 0xb55, 0xb56; 0xb56, 0xb56; 0xb62, 0xb63; 0xb82, 0xb82; 0xbc0, 0xbc0; 0xbcd, 0xbcd; 0xc00, 0xc00; 0xc04, 0xc04; 0xc3c, 0xc3c; 0xc3e, 0xc40; 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc4a, 0xc4d; 0xc4d, 0xc4d; 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc81; 0xcbc, 0xcbc; 0xcbf, 0xcbf; 0xcc6, 0xcc6; 0xccc, 0xccc; 0xccc, 0xccd; 0xccd, 0xccd; 0xce2, 0xce3; 0xd00, 0xd01; 0xd3b, 0xd3c; 0xd41, 0xd44; 0xd4d, 0xd4d; 0xd62, 0xd63; 0xd81, 0xd81; 0xdca, 0xdca; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xe31, 0xe31; 0xe34, 0xe3a; 0xe3a, 0xe3a; 0xe47, 0xe4c; 0xe47, 0xe4e; 0xe4d, 0xe4d; 0xe4e, 0xe4e; 0xeb1, 0xeb1; 0xeb4, 0xeb9; 0xeb4, 0xebc; 0xeba, 0xeba; 0xebb, 0xebc; 0xec8, 0xecc; 0xec8, 0xecd; 0xecd, 0xecd; 0xf18, 0xf19; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 0xf71, 0xf7e; 0xf77, 0xf77; 0xf79, 0xf79; 0xf80, 0xf81; 0xf80, 0xf84; 0xf82, 0xf84; 0xf84, 0xf84; 0xf86, 0xf87; 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x102d, 0x1030; 0x1032, 0x1036; 0x1032, 0x1037; 0x1037, 0x1037; 0x1039, 0x103a; 0x103d, 0x103e; 0x1058, 0x1059; 0x105e, 0x1060; 0x1071, 0x1074; 0x1082, 0x1082; 0x1085, 0x1086; 0x108d, 0x108d; 0x109d, 0x109d; 0x135d, 0x135f; 0x1712, 0x1713; 0x1712, 0x1714; 0x1714, 0x1714; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 0x17b4, 0x17b5; 0x17b7, 0x17bd; 0x17c6, 0x17c6; 0x17c9, 0x17d3; 0x17d2, 0x17d2; 0x17dd, 0x17dd; 0x180b, 0x180d; 0x180f, 0x180f; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x1922; 0x1927, 0x1928; 0x1932, 0x1932; 0x1939, 0x193b; 0x1a17, 0x1a18; 0x1a1b, 0x1a1b; 0x1a56, 0x1a56; 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a62, 0x1a62; 0x1a65, 0x1a6c; 0x1a73, 0x1a74; 0x1a73, 0x1a7c; 0x1a75, 0x1a7c; 0x1a7f, 0x1a7f; 0x1ab0, 0x1abd; 0x1abf, 0x1ac0; 0x1abf, 0x1ace; 0x1ac1, 0x1acb; 0x1acc, 0x1ace; 0x1b00, 0x1b03; 0x1b34, 0x1b34; 0x1b36, 0x1b3a; 0x1b3c, 0x1b3c; 0x1b42, 0x1b42; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 0x1ba2, 0x1ba5; 0x1ba8, 0x1ba9; 0x1bab, 0x1bab; 0x1bab, 0x1bad; 0x1bac, 0x1bad; 0x1be6, 0x1be6; 0x1be8, 0x1be9; 0x1bed, 0x1bed; 0x1bef, 0x1bf1; 0x1c2c, 0x1c33; 0x1c36, 0x1c36; 0x1c36, 0x1c37; 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce2, 0x1ce8; 0x1ced, 0x1ced; 0x1cf4, 0x1cf4; 0x1cf8, 0x1cf9; 0x1dc0, 0x1dff; 0x1dc4, 0x1dcf; 0x1de7, 0x1df4; 0x1df5, 0x1dff; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20e5, 0x20f0; 0x20eb, 0x20ef; 0x2cef, 0x2cf1; 0x2d7f, 0x2d7f; 0x2de0, 0x2dff; 0x302a, 0x302d; 0x3099, 0x309a; 0xa66f, 0xa66f; 0xa674, 0xa67b; 0xa674, 0xa67d; 0xa67c, 0xa67d; 0xa69e, 0xa69f; 0xa6f0, 0xa6f1; 0xa802, 0xa802; 0xa806, 0xa806; 0xa80b, 0xa80b; 0xa825, 0xa826; 0xa82c, 0xa82c; 0xa8c4, 0xa8c4; 0xa8c4, 0xa8c5; 0xa8c5, 0xa8c5; 0xa8e0, 0xa8f1; 0xa8ff, 0xa8ff; 0xa926, 0xa92a; 0xa926, 0xa92d; 0xa92b, 0xa92d; 0xa947, 0xa951; 0xa980, 0xa982; 0xa9b3, 0xa9b3; 0xa9b6, 0xa9b9; 0xa9bc, 0xa9bd; 0xa9e5, 0xa9e5; 0xaa29, 0xaa2e; 0xaa31, 0xaa32; 0xaa35, 0xaa36; 0xaa43, 0xaa43; 0xaa4c, 0xaa4c; 0xaa7c, 0xaa7c; 0xaab0, 0xaab0; 0xaab2, 0xaab4; 0xaab7, 0xaab8; 0xaabe, 0xaabe; 0xaabe, 0xaabf; 0xaabf, 0xaabf; 0xaac1, 0xaac1; 0xaaec, 0xaaed; 0xaaf6, 0xaaf6; 0xabe5, 0xabe5; 0xabe8, 0xabe8; 0xabed, 0xabed; 0xfb1e, 0xfb1e; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0x101fd, 0x101fd; 0x102e0, 0x102e0; 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10ae5, 0x10ae6; 0x10d24, 0x10d27; 0x10eab, 0x10eac; 0x10f46, 0x10f50; 0x10f82, 0x10f85; 0x11001, 0x11001; 0x11038, 0x11045; 0x11038, 0x11046; 0x11046, 0x11046; 0x11070, 0x11070; 0x11073, 0x11074; 0x1107f, 0x1107f; 0x1107f, 0x11081; 0x110b3, 0x110b6; 0x110b9, 0x110b9; 0x110b9, 0x110ba; 0x110c2, 0x110c2; 0x11100, 0x11102; 0x11127, 0x1112b; 0x1112d, 0x11132; 0x1112d, 0x11134; 0x11133, 0x11134; 0x11173, 0x11173; 0x11180, 0x11181; 0x111b6, 0x111be; 0x111c9, 0x111cc; 0x111ca, 0x111cc; 0x111cf, 0x111cf; 0x1122f, 0x11231; 0x11234, 0x11234; 0x11236, 0x11236; 0x11236, 0x11237; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x112df, 0x112df; 0x112e3, 0x112e8; 0x112e3, 0x112ea; 0x112e9, 0x112ea; 0x112ea, 0x112ea; 0x11300, 0x11301; 0x1133b, 0x1133c; 0x1133c, 0x1133c; 0x11340, 0x11340; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11438, 0x1143f; 0x11442, 0x11442; 0x11442, 0x11444; 0x11443, 0x11444; 0x11446, 0x11446; 0x1145e, 0x1145e; 0x114b3, 0x114b8; 0x114ba, 0x114ba; 0x114bf, 0x114c0; 0x114c2, 0x114c2; 0x114c2, 0x114c3; 0x115b2, 0x115b5; 0x115bc, 0x115bd; 0x115bf, 0x115bf; 0x115bf, 0x115c0; 0x115dc, 0x115dd; 0x11633, 0x1163a; 0x1163d, 0x1163d; 0x1163f, 0x1163f; 0x1163f, 0x11640; 0x11640, 0x11640; 0x116ab, 0x116ab; 0x116ad, 0x116ad; 0x116b0, 0x116b5; 0x116b7, 0x116b7; 0x1171d, 0x1171f; 0x11722, 0x11725; 0x11727, 0x1172a; 0x11727, 0x1172b; 0x1172b, 0x1172b; 0x1182f, 0x11837; 0x11839, 0x11839; 0x11839, 0x1183a; 0x1193b, 0x1193c; 0x1193e, 0x1193e; 0x11943, 0x11943; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119e0, 0x119e0; 0x11a01, 0x11a0a; 0x11a33, 0x11a38; 0x11a34, 0x11a34; 0x11a35, 0x11a38; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 0x11a51, 0x11a56; 0x11a59, 0x11a5b; 0x11a8a, 0x11a96; 0x11a98, 0x11a98; 0x11a98, 0x11a99; 0x11a99, 0x11a99; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3f, 0x11c3f; 0x11c92, 0x11ca7; 0x11caa, 0x11cb0; 0x11cb2, 0x11cb3; 0x11cb5, 0x11cb6; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d3f, 0x11d45; 0x11d42, 0x11d42; 0x11d43, 0x11d43; 0x11d44, 0x11d45; 0x11d47, 0x11d47; 0x11d90, 0x11d91; 0x11d95, 0x11d95; 0x11d97, 0x11d97; 0x11ef3, 0x11ef4; 0x16af0, 0x16af4; 0x16b30, 0x16b36; 0x16f4f, 0x16f4f; 0x16f8f, 0x16f92; 0x16fe4, 0x16fe4; 0x1bc9d, 0x1bc9e; 0x1bc9e, 0x1bc9e; 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 0x1d167, 0x1d169; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e130, 0x1e136; 0x1e2ae, 0x1e2ae; 0x1e2ec, 0x1e2ef; 0x1e8d0, 0x1e8d6; 0x1e944, 0x1e946; 0x1e944, 0x1e94a; 0xe0100, 0xe01ef; 0x1e948, 0x1e94a; 0x1e947, 0x1e947] let nd = [0x30, 0x39; 0x660, 0x669; 0x6f0, 0x6f9; 0x7c0, 0x7c9; 0x966, 0x96f; 0x9e6, 0x9ef; 0xa66, 0xa6f; 0xae6, 0xaef; 0xb66, 0xb6f; 0xbe6, 0xbef; 0xc66, 0xc6f; 0xce6, 0xcef; 0xd66, 0xd6f; 0xde6, 0xdef; 0xe50, 0xe59; 0xed0, 0xed9; 0xf20, 0xf29; 0x1040, 0x1049; 0x1090, 0x1099; 0x17e0, 0x17e9; 0x1810, 0x1819; 0x1946, 0x194f; 0x19d0, 0x19d9; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 0x1b50, 0x1b59; 0x1bb0, 0x1bb9; 0x1c40, 0x1c49; 0x1c50, 0x1c59; 0xa620, 0xa629; 0xa8d0, 0xa8d9; 0xa900, 0xa909; 0xa9d0, 0xa9d9; 0xa9f0, 0xa9f9; 0xaa50, 0xaa59; 0xabf0, 0xabf9; 0xff10, 0xff19; 0x104a0, 0x104a9; 0x10d30, 0x10d39; 0x11066, 0x1106f; 0x110f0, 0x110f9; 0x11136, 0x1113f; 0x111d0, 0x111d9; 0x112f0, 0x112f9; 0x11450, 0x11459; 0x114d0, 0x114d9; 0x11650, 0x11659; 0x116c0, 0x116c9; 0x11730, 0x11739; 0x118e0, 0x118e9; 0x11950, 0x11959; 0x11c50, 0x11c59; 0x11d50, 0x11d59; 0x11da0, 0x11da9; 0x16a60, 0x16a69; 0x16ac0, 0x16ac9; 0x16b50, 0x16b59; 0x1d7ce, 0x1d7ff; 0x1e140, 0x1e149; 0x1e2f0, 0x1e2f9; 0x1fbf0, 0x1fbf9; 0x1e950, 0x1e959] let nl = [0x16ee, 0x16f0; 0x2160, 0x216f; 0x2160, 0x217f; 0x2160, 0x2182; 0x2170, 0x217f; 0x2185, 0x2188; 0x3007, 0x3007; 0x3021, 0x3029; 0x3038, 0x303a; 0xa6e6, 0xa6ef; 0x12400, 0x1246e; 0x103d1, 0x103d5; 0x1034a, 0x1034a; 0x10341, 0x10341; 0x10140, 0x10174] let no = [0xb2, 0xb3; 0xb9, 0xb9; 0xbc, 0xbe; 0x9f4, 0x9f9; 0xb72, 0xb77; 0xbf0, 0xbf2; 0xc78, 0xc7e; 0xd58, 0xd5e; 0xd70, 0xd78; 0xf2a, 0xf33; 0x1369, 0x1371; 0x1369, 0x137c; 0x17f0, 0x17f9; 0x19da, 0x19da; 0x2070, 0x2070; 0x2074, 0x2079; 0x2080, 0x2089; 0x2150, 0x215f; 0x2189, 0x2189; 0x2460, 0x249b; 0x24ea, 0x24ff; 0x2776, 0x2793; 0x2cfd, 0x2cfd; 0x3192, 0x3195; 0x3220, 0x3229; 0x3248, 0x324f; 0x3251, 0x325f; 0x3280, 0x3289; 0x32b1, 0x32bf; 0xa830, 0xa835; 0x10107, 0x10133; 0x10175, 0x10178; 0x1018a, 0x1018b; 0x102e1, 0x102fb; 0x10320, 0x10323; 0x10858, 0x1085f; 0x10879, 0x1087f; 0x108a7, 0x108af; 0x108fb, 0x108ff; 0x10916, 0x1091b; 0x109bc, 0x109bd; 0x109c0, 0x109cf; 0x109d2, 0x109ff; 0x10a40, 0x10a48; 0x10a7d, 0x10a7e; 0x10a9d, 0x10a9f; 0x10aeb, 0x10aef; 0x10b58, 0x10b5f; 0x10b78, 0x10b7f; 0x10ba9, 0x10baf; 0x10cfa, 0x10cff; 0x10e60, 0x10e7e; 0x10f1d, 0x10f26; 0x10f51, 0x10f54; 0x10fc5, 0x10fcb; 0x11052, 0x11065; 0x111e1, 0x111f4; 0x1173a, 0x1173b; 0x118ea, 0x118f2; 0x11c5a, 0x11c6c; 0x11fc0, 0x11fd4; 0x16b5b, 0x16b61; 0x16e80, 0x16e96; 0x1d2e0, 0x1d2f3; 0x1d360, 0x1d378; 0x1e8c7, 0x1e8cf; 0x1ec71, 0x1ecab; 0x1ecad, 0x1ecaf; 0x1ecb1, 0x1ecb4; 0x1ed01, 0x1ed2d; 0x1f100, 0x1f10c; 0x1ed2f, 0x1ed3d] let pc = [0x5f, 0x5f; 0x203f, 0x2040; 0x2040, 0x2040; 0x2054, 0x2054; 0xfe33, 0xfe34; 0xff3f, 0xff3f; 0xfe4d, 0xfe4f] let pd = [0x2d, 0x2d; 0x58a, 0x58a; 0x5be, 0x5be; 0x1400, 0x1400; 0x1806, 0x1806; 0x2010, 0x2011; 0x2010, 0x2015; 0x2e17, 0x2e17; 0x2e1a, 0x2e1a; 0x2e3a, 0x2e3b; 0x2e40, 0x2e40; 0x2e5d, 0x2e5d; 0x301c, 0x301c; 0x3030, 0x3030; 0x30a0, 0x30a0; 0x10ead, 0x10ead; 0xff0d, 0xff0d; 0xfe63, 0xfe63; 0xfe58, 0xfe58; 0xfe31, 0xfe32] let pe = [0x29, 0x29; 0x5d, 0x5d; 0x7d, 0x7d; 0xf3b, 0xf3b; 0xf3d, 0xf3d; 0x169c, 0x169c; 0x2046, 0x2046; 0x207e, 0x207e; 0x208e, 0x208e; 0x2309, 0x2309; 0x230b, 0x230b; 0x232a, 0x232a; 0x2769, 0x2769; 0x276b, 0x276b; 0x276d, 0x276d; 0x276f, 0x276f; 0x2771, 0x2771; 0x2773, 0x2773; 0x2775, 0x2775; 0x27c6, 0x27c6; 0x27e7, 0x27e7; 0x27e9, 0x27e9; 0x27eb, 0x27eb; 0x27ed, 0x27ed; 0x27ef, 0x27ef; 0x2984, 0x2984; 0x2986, 0x2986; 0x2988, 0x2988; 0x298a, 0x298a; 0x298c, 0x298c; 0x298e, 0x298e; 0x2990, 0x2990; 0x2992, 0x2992; 0x2994, 0x2994; 0x2996, 0x2996; 0x2998, 0x2998; 0x29d9, 0x29d9; 0x29db, 0x29db; 0x29fd, 0x29fd; 0x2e23, 0x2e23; 0x2e25, 0x2e25; 0x2e27, 0x2e27; 0x2e29, 0x2e29; 0x2e56, 0x2e56; 0x2e58, 0x2e58; 0x2e5a, 0x2e5a; 0x2e5c, 0x2e5c; 0x3009, 0x3009; 0x300b, 0x300b; 0x300d, 0x300d; 0x300f, 0x300f; 0x3011, 0x3011; 0x3015, 0x3015; 0x3017, 0x3017; 0x3019, 0x3019; 0x301b, 0x301b; 0x301e, 0x301f; 0xfd3e, 0xfd3e; 0xfe18, 0xfe18; 0xfe36, 0xfe36; 0xfe38, 0xfe38; 0xfe3a, 0xfe3a; 0xfe3c, 0xfe3c; 0xfe3e, 0xfe3e; 0xfe40, 0xfe40; 0xfe42, 0xfe42; 0xfe44, 0xfe44; 0xfe48, 0xfe48; 0xfe5a, 0xfe5a; 0xfe5c, 0xfe5c; 0xfe5e, 0xfe5e; 0xff09, 0xff09; 0xff3d, 0xff3d; 0xff5d, 0xff5d; 0xff60, 0xff60; 0xff63, 0xff63] let pf = [0xbb, 0xbb; 0x2019, 0x2019; 0x201d, 0x201d; 0x203a, 0x203a; 0x2e03, 0x2e03; 0x2e21, 0x2e21; 0x2e1d, 0x2e1d; 0x2e0d, 0x2e0d; 0x2e0a, 0x2e0a; 0x2e05, 0x2e05] let pi = [0xab, 0xab; 0x2018, 0x2018; 0x201b, 0x201c; 0x201f, 0x201f; 0x2039, 0x2039; 0x2e02, 0x2e02; 0x2e04, 0x2e04; 0x2e09, 0x2e09; 0x2e0c, 0x2e0c; 0x2e1c, 0x2e1c; 0x2e20, 0x2e20] let po = [0x21, 0x21; 0x21, 0x23; 0x22, 0x22; 0x25, 0x27; 0x27, 0x27; 0x2a, 0x2a; 0x2c, 0x2c; 0x2e, 0x2e; 0x2e, 0x2f; 0x3a, 0x3a; 0x3a, 0x3b; 0x3f, 0x3f; 0x3f, 0x40; 0x5c, 0x5c; 0xa1, 0xa1; 0xa7, 0xa7; 0xb6, 0xb6; 0xb6, 0xb7; 0xb7, 0xb7; 0xbf, 0xbf; 0x37e, 0x37e; 0x387, 0x387; 0x55a, 0x55f; 0x55f, 0x55f; 0x589, 0x589; 0x5c0, 0x5c0; 0x5c3, 0x5c3; 0x5c6, 0x5c6; 0x5f3, 0x5f4; 0x5f4, 0x5f4; 0x609, 0x60a; 0x60c, 0x60c; 0x60c, 0x60d; 0x61b, 0x61b; 0x61d, 0x61f; 0x66a, 0x66d; 0x6d4, 0x6d4; 0x700, 0x702; 0x700, 0x70a; 0x700, 0x70d; 0x70c, 0x70c; 0x7f7, 0x7f9; 0x7f8, 0x7f9; 0x7f9, 0x7f9; 0x830, 0x83e; 0x837, 0x837; 0x839, 0x839; 0x83d, 0x83e; 0x85e, 0x85e; 0x964, 0x965; 0x970, 0x970; 0x9fd, 0x9fd; 0xa76, 0xa76; 0xaf0, 0xaf0; 0xc77, 0xc77; 0xc84, 0xc84; 0xdf4, 0xdf4; 0xe4f, 0xe4f; 0xe5a, 0xe5b; 0xf04, 0xf12; 0xf08, 0xf08; 0xf0d, 0xf12; 0xf14, 0xf14; 0xf85, 0xf85; 0xfd0, 0xfd4; 0xfd9, 0xfda; 0x104a, 0x104b; 0x104a, 0x104f; 0x10fb, 0x10fb; 0x1360, 0x1368; 0x1361, 0x1368; 0x1362, 0x1362; 0x1367, 0x1368; 0x166e, 0x166e; 0x16eb, 0x16ed; 0x1735, 0x1736; 0x17d4, 0x17d6; 0x17d8, 0x17da; 0x17da, 0x17da; 0x1800, 0x1805; 0x1802, 0x1805; 0x1803, 0x1803; 0x1807, 0x180a; 0x1808, 0x1809; 0x1809, 0x1809; 0x180a, 0x180a; 0x1944, 0x1945; 0x1a1e, 0x1a1f; 0x1aa0, 0x1aa6; 0x1aa8, 0x1aab; 0x1aa8, 0x1aad; 0x1b5a, 0x1b5b; 0x1b5a, 0x1b60; 0x1b5d, 0x1b5f; 0x1b5e, 0x1b5f; 0x1b7d, 0x1b7e; 0x1bfc, 0x1bff; 0x1c3b, 0x1c3c; 0x1c3b, 0x1c3f; 0x1c7e, 0x1c7f; 0x1cc0, 0x1cc7; 0x1cd3, 0x1cd3; 0x2016, 0x2016; 0x2016, 0x2017; 0x2020, 0x2027; 0x2024, 0x2024; 0x2027, 0x2027; 0x2030, 0x2038; 0x2032, 0x2034; 0x203b, 0x203e; 0x203c, 0x203d; 0x2041, 0x2043; 0x2047, 0x2049; 0x2047, 0x2051; 0x2053, 0x2053; 0x2055, 0x205e; 0x2cf9, 0x2cfc; 0x2cfe, 0x2cff; 0x2d70, 0x2d70; 0x2e00, 0x2e01; 0x2e06, 0x2e08; 0x2e0b, 0x2e0b; 0x2e0e, 0x2e16; 0x2e18, 0x2e19; 0x2e1b, 0x2e1b; 0x2e1e, 0x2e1f; 0x2e2a, 0x2e2e; 0x2e2e, 0x2e2e; 0x2e30, 0x2e39; 0x2e3c, 0x2e3c; 0x2e3c, 0x2e3f; 0x2e41, 0x2e41; 0x2e43, 0x2e4f; 0x2e4c, 0x2e4c; 0x2e4e, 0x2e4f; 0x2e52, 0x2e54; 0x2e53, 0x2e54; 0x3001, 0x3002; 0x3001, 0x3003; 0x3002, 0x3002; 0x303d, 0x303d; 0x30fb, 0x30fb; 0xa4fe, 0xa4ff; 0xa4ff, 0xa4ff; 0xa60d, 0xa60f; 0xa60e, 0xa60f; 0xa673, 0xa673; 0xa67e, 0xa67e; 0xa6f2, 0xa6f7; 0xa6f3, 0xa6f3; 0xa6f3, 0xa6f7; 0xa6f7, 0xa6f7; 0xa874, 0xa877; 0xa876, 0xa877; 0xa8ce, 0xa8cf; 0xa8f8, 0xa8fa; 0xa8fc, 0xa8fc; 0xa92e, 0xa92e; 0xa92e, 0xa92f; 0xa92f, 0xa92f; 0xa95f, 0xa95f; 0xa9c1, 0xa9cd; 0xa9c7, 0xa9c9; 0xa9c8, 0xa9c9; 0xa9de, 0xa9df; 0xaa5c, 0xaa5f; 0xaa5d, 0xaa5f; 0xaade, 0xaadf; 0xaadf, 0xaadf; 0xaaf0, 0xaaf1; 0xabeb, 0xabeb; 0xfe10, 0xfe16; 0xfe13, 0xfe13; 0xfe19, 0xfe19; 0xfe30, 0xfe30; 0xfe45, 0xfe46; 0xfe49, 0xfe4c; 0xfe50, 0xfe52; 0xfe52, 0xfe52; 0xfe54, 0xfe57; 0xfe55, 0xfe55; 0xfe56, 0xfe57; 0xfe5f, 0xfe61; 0xfe61, 0xfe61; 0xfe68, 0xfe68; 0xfe6a, 0xfe6b; 0xff01, 0xff01; 0xff01, 0xff03; 0xff02, 0xff02; 0xff05, 0xff07; 0xff07, 0xff07; 0xff0a, 0xff0a; 0xff0c, 0xff0c; 0xff0e, 0xff0e; 0xff0e, 0xff0f; 0xff1a, 0xff1a; 0xff1a, 0xff1b; 0xff1f, 0xff1f; 0xff1f, 0xff20; 0xff3c, 0xff3c; 0xff61, 0xff61; 0xff64, 0xff64; 0xff64, 0xff65; 0xff65, 0xff65; 0x10100, 0x10102; 0x1039f, 0x1039f; 0x103d0, 0x103d0; 0x1056f, 0x1056f; 0x10857, 0x10857; 0x1091f, 0x1091f; 0x1093f, 0x1093f; 0x10a50, 0x10a58; 0x10a56, 0x10a57; 0x10a7f, 0x10a7f; 0x10af0, 0x10af5; 0x10af0, 0x10af6; 0x10b39, 0x10b3f; 0x10b3a, 0x10b3f; 0x10b99, 0x10b9c; 0x10f55, 0x10f59; 0x10f86, 0x10f89; 0x11047, 0x11048; 0x11047, 0x1104d; 0x110bb, 0x110bc; 0x110be, 0x110c1; 0x11140, 0x11143; 0x11141, 0x11143; 0x11174, 0x11175; 0x111c5, 0x111c6; 0x111c5, 0x111c8; 0x111cd, 0x111cd; 0x111db, 0x111db; 0x111dd, 0x111df; 0x111de, 0x111df; 0x11238, 0x11239; 0x11238, 0x1123c; 0x11238, 0x1123d; 0x1123b, 0x1123c; 0x112a9, 0x112a9; 0x1144b, 0x1144c; 0x1144b, 0x1144d; 0x1144b, 0x1144f; 0x1145a, 0x1145b; 0x1145d, 0x1145d; 0x114c6, 0x114c6; 0x115c1, 0x115d7; 0x115c2, 0x115c3; 0x115c2, 0x115c5; 0x115c6, 0x115c8; 0x115c9, 0x115d7; 0x11641, 0x11642; 0x11641, 0x11643; 0x11660, 0x1166c; 0x116b9, 0x116b9; 0x1173c, 0x1173e; 0x1183b, 0x1183b; 0x11944, 0x11944; 0x11944, 0x11946; 0x11946, 0x11946; 0x119e2, 0x119e2; 0x11a3f, 0x11a46; 0x11a42, 0x11a43; 0x11a9a, 0x11a9c; 0x11a9b, 0x11a9c; 0x11a9e, 0x11aa2; 0x11aa1, 0x11aa2; 0x11c41, 0x11c42; 0x11c41, 0x11c43; 0x11c41, 0x11c45; 0x11c70, 0x11c71; 0x11c71, 0x11c71; 0x11ef7, 0x11ef8; 0x11fff, 0x11fff; 0x12470, 0x12474; 0x12ff1, 0x12ff2; 0x16a6e, 0x16a6f; 0x16af5, 0x16af5; 0x16b37, 0x16b38; 0x16b37, 0x16b39; 0x16b37, 0x16b3b; 0x16b44, 0x16b44; 0x16e97, 0x16e98; 0x16e97, 0x16e9a; 0x16e98, 0x16e98; 0x16fe2, 0x16fe2; 0x1e95e, 0x1e95f; 0x1da88, 0x1da88; 0x1da87, 0x1da8b; 0x1da87, 0x1da8a; 0x1bc9f, 0x1bc9f] let ps = [0x28, 0x28; 0x5b, 0x5b; 0x7b, 0x7b; 0xf3a, 0xf3a; 0xf3c, 0xf3c; 0x169b, 0x169b; 0x201a, 0x201a; 0x201e, 0x201e; 0x2045, 0x2045; 0x207d, 0x207d; 0x208d, 0x208d; 0x2308, 0x2308; 0x230a, 0x230a; 0x2329, 0x2329; 0x2768, 0x2768; 0x276a, 0x276a; 0x276c, 0x276c; 0x276e, 0x276e; 0x2770, 0x2770; 0x2772, 0x2772; 0x2774, 0x2774; 0x27c5, 0x27c5; 0x27e6, 0x27e6; 0x27e8, 0x27e8; 0x27ea, 0x27ea; 0x27ec, 0x27ec; 0x27ee, 0x27ee; 0x2983, 0x2983; 0x2985, 0x2985; 0x2987, 0x2987; 0x2989, 0x2989; 0x298b, 0x298b; 0x298d, 0x298d; 0x298f, 0x298f; 0x2991, 0x2991; 0x2993, 0x2993; 0x2995, 0x2995; 0x2997, 0x2997; 0x29d8, 0x29d8; 0x29da, 0x29da; 0x29fc, 0x29fc; 0x2e22, 0x2e22; 0x2e24, 0x2e24; 0x2e26, 0x2e26; 0x2e28, 0x2e28; 0x2e42, 0x2e42; 0x2e55, 0x2e55; 0x2e57, 0x2e57; 0x2e59, 0x2e59; 0x2e5b, 0x2e5b; 0x3008, 0x3008; 0x300a, 0x300a; 0x300c, 0x300c; 0x300e, 0x300e; 0x3010, 0x3010; 0x3014, 0x3014; 0x3016, 0x3016; 0x3018, 0x3018; 0x301a, 0x301a; 0x301d, 0x301d; 0xfd3f, 0xfd3f; 0xfe17, 0xfe17; 0xfe35, 0xfe35; 0xfe37, 0xfe37; 0xfe39, 0xfe39; 0xfe3b, 0xfe3b; 0xfe3d, 0xfe3d; 0xfe3f, 0xfe3f; 0xfe41, 0xfe41; 0xfe43, 0xfe43; 0xfe47, 0xfe47; 0xfe59, 0xfe59; 0xfe5b, 0xfe5b; 0xfe5d, 0xfe5d; 0xff08, 0xff08; 0xff62, 0xff62; 0xff5f, 0xff5f; 0xff5b, 0xff5b; 0xff3b, 0xff3b] let sc = [0x24, 0x24; 0xa2, 0xa5; 0x58f, 0x58f; 0x60b, 0x60b; 0x7fe, 0x7ff; 0x9f2, 0x9f3; 0x9fb, 0x9fb; 0xaf1, 0xaf1; 0xbf9, 0xbf9; 0xe3f, 0xe3f; 0x17db, 0x17db; 0x20a0, 0x20c0; 0xa838, 0xa838; 0xfdfc, 0xfdfc; 0xfe69, 0xfe69; 0xff04, 0xff04; 0xffe0, 0xffe1; 0xffe5, 0xffe6; 0x11fdd, 0x11fe0; 0x1e2ff, 0x1e2ff; 0x1ecb0, 0x1ecb0] let sk = [0x5e, 0x5e; 0x60, 0x60; 0xa8, 0xa8; 0xaf, 0xaf; 0xb4, 0xb4; 0xb8, 0xb8; 0x2c2, 0x2c5; 0x2d2, 0x2df; 0x2e5, 0x2eb; 0x2ed, 0x2ed; 0x2ef, 0x2ff; 0x375, 0x375; 0x384, 0x385; 0x888, 0x888; 0x1fbd, 0x1fbd; 0x1fbf, 0x1fc1; 0x1fcd, 0x1fcf; 0x1fdd, 0x1fdf; 0x1fed, 0x1fef; 0x1ffd, 0x1ffe; 0x309b, 0x309c; 0xa700, 0xa716; 0xa720, 0xa721; 0xa789, 0xa78a; 0xab5b, 0xab5b; 0xab6a, 0xab6b; 0xfbb2, 0xfbc2; 0xff3e, 0xff3e; 0xff40, 0xff40; 0xffe3, 0xffe3; 0x1f3fb, 0x1f3ff] let sm = [0x2b, 0x2b; 0x3c, 0x3e; 0x7c, 0x7c; 0x7e, 0x7e; 0xac, 0xac; 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3f6, 0x3f6; 0x606, 0x608; 0x2044, 0x2044; 0x2052, 0x2052; 0x207a, 0x207c; 0x207b, 0x207b; 0x208a, 0x208c; 0x208b, 0x208b; 0x2118, 0x2118; 0x2140, 0x2144; 0x214b, 0x214b; 0x2190, 0x2194; 0x219a, 0x219b; 0x21a0, 0x21a0; 0x21a3, 0x21a3; 0x21a6, 0x21a6; 0x21ae, 0x21ae; 0x21ce, 0x21cf; 0x21d2, 0x21d2; 0x21d4, 0x21d4; 0x21f4, 0x22ff; 0x2212, 0x2212; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b3; 0x23dc, 0x23e1; 0x25b7, 0x25b7; 0x25c1, 0x25c1; 0x25f8, 0x25ff; 0x266f, 0x266f; 0x27c0, 0x27c4; 0x27c7, 0x27e5; 0x27f0, 0x27ff; 0x2900, 0x2982; 0x2999, 0x29d7; 0x29dc, 0x29fb; 0x29fe, 0x2aff; 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 0xfe62, 0xfe62; 0xfe64, 0xfe66; 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff5c, 0xff5c; 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x1d6c1, 0x1d6c1; 0x1d6db, 0x1d6db; 0x1d6fb, 0x1d6fb; 0x1d715, 0x1d715; 0x1d735, 0x1d735; 0x1d74f, 0x1d74f; 0x1d76f, 0x1d76f; 0x1d789, 0x1d789; 0x1d7a9, 0x1d7a9; 0x1eef0, 0x1eef1; 0x1d7c3, 0x1d7c3] let so = [0xa6, 0xa6; 0xa9, 0xa9; 0xae, 0xae; 0xb0, 0xb0; 0x482, 0x482; 0x58d, 0x58e; 0x60e, 0x60f; 0x6de, 0x6de; 0x6e9, 0x6e9; 0x6fd, 0x6fe; 0x7f6, 0x7f6; 0x9fa, 0x9fa; 0xb70, 0xb70; 0xbf3, 0xbf8; 0xbfa, 0xbfa; 0xc7f, 0xc7f; 0xd4f, 0xd4f; 0xd79, 0xd79; 0xf01, 0xf03; 0xf13, 0xf13; 0xf15, 0xf17; 0xf1a, 0xf1f; 0xf34, 0xf34; 0xf36, 0xf36; 0xf38, 0xf38; 0xfbe, 0xfc5; 0xfc7, 0xfcc; 0xfce, 0xfcf; 0xfd5, 0xfd8; 0x109e, 0x109f; 0x1390, 0x1399; 0x166d, 0x166d; 0x1940, 0x1940; 0x19de, 0x19ff; 0x1b61, 0x1b6a; 0x1b74, 0x1b7c; 0x2100, 0x2101; 0x2103, 0x2106; 0x2108, 0x2109; 0x2114, 0x2114; 0x2116, 0x2117; 0x211e, 0x2123; 0x2125, 0x2125; 0x2127, 0x2127; 0x2129, 0x2129; 0x212e, 0x212e; 0x213a, 0x213b; 0x214a, 0x214a; 0x214c, 0x214d; 0x214f, 0x214f; 0x218a, 0x218b; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 0x21a4, 0x21a5; 0x21a7, 0x21a7; 0x21a7, 0x21ad; 0x21a9, 0x21ad; 0x21af, 0x21cd; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21db; 0x21d5, 0x21f3; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 0x2300, 0x2307; 0x230c, 0x231f; 0x2322, 0x2328; 0x232b, 0x237b; 0x237d, 0x239a; 0x23b4, 0x23b5; 0x23b4, 0x23db; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23e2, 0x23e2; 0x23e2, 0x2426; 0x2440, 0x244a; 0x249c, 0x24e9; 0x24b6, 0x24cf; 0x24b6, 0x24e9; 0x24d0, 0x24e9; 0x2500, 0x25b6; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25b8, 0x25c0; 0x25bc, 0x25c0; 0x25c2, 0x25f7; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x2600, 0x266e; 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 0x2670, 0x2767; 0x2794, 0x27bf; 0x2800, 0x28ff; 0x2b00, 0x2b2f; 0x2b45, 0x2b46; 0x2b4d, 0x2b73; 0x2b76, 0x2b95; 0x2b97, 0x2bff; 0x2ce5, 0x2cea; 0x2e50, 0x2e51; 0x2e80, 0x2e99; 0x2e9b, 0x2ef3; 0x2f00, 0x2fd5; 0x2ff0, 0x2ff1; 0x2ff0, 0x2ffb; 0x2ff2, 0x2ff3; 0x2ff4, 0x2ffb; 0x3004, 0x3004; 0x3012, 0x3013; 0x3020, 0x3020; 0x3036, 0x3037; 0x303e, 0x303f; 0x3190, 0x3191; 0x3196, 0x319f; 0x31c0, 0x31e3; 0x3200, 0x321e; 0x322a, 0x3247; 0x3250, 0x3250; 0x3260, 0x327f; 0x328a, 0x32b0; 0x32c0, 0x33ff; 0x4dc0, 0x4dff; 0xa490, 0xa4c6; 0xa828, 0xa82b; 0xa836, 0xa837; 0xa839, 0xa839; 0xaa77, 0xaa79; 0xfd40, 0xfd4f; 0xfdcf, 0xfdcf; 0xfdfd, 0xfdff; 0xffe4, 0xffe4; 0xffe8, 0xffe8; 0xffed, 0xffee; 0xfffc, 0xfffd; 0x10137, 0x1013f; 0x10179, 0x10189; 0x1018c, 0x1018e; 0x10190, 0x1019c; 0x101a0, 0x101a0; 0x101d0, 0x101fc; 0x10877, 0x10878; 0x10ac8, 0x10ac8; 0x1173f, 0x1173f; 0x11fd5, 0x11fdc; 0x11fe1, 0x11ff1; 0x16b3c, 0x16b3f; 0x16b45, 0x16b45; 0x1bc9c, 0x1bc9c; 0x1cf50, 0x1cfc3; 0x1d000, 0x1d0f5; 0x1d100, 0x1d126; 0x1d129, 0x1d164; 0x1d16a, 0x1d16c; 0x1d183, 0x1d184; 0x1d18c, 0x1d1a9; 0x1d1ae, 0x1d1ea; 0x1d200, 0x1d241; 0x1d245, 0x1d245; 0x1d300, 0x1d356; 0x1d800, 0x1d9ff; 0x1da37, 0x1da3a; 0x1da6d, 0x1da74; 0x1da76, 0x1da83; 0x1da85, 0x1da86; 0x1e14f, 0x1e14f; 0x1ecac, 0x1ecac; 0x1ed2e, 0x1ed2e; 0x1f000, 0x1f02b; 0x1f030, 0x1f093; 0x1f0a0, 0x1f0ae; 0x1f0b1, 0x1f0bf; 0x1f0c1, 0x1f0cf; 0x1f0d1, 0x1f0f5; 0x1f10d, 0x1f1ad; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189; 0x1f1e6, 0x1f1ff; 0x1f1e6, 0x1f202; 0x1f210, 0x1f23b; 0x1f240, 0x1f248; 0x1f250, 0x1f251; 0x1f260, 0x1f265; 0x1f300, 0x1f3fa; 0x1f400, 0x1f6d7; 0x1f6dd, 0x1f6ec; 0x1f6f0, 0x1f6fc; 0x1f700, 0x1f773; 0x1f780, 0x1f7d8; 0x1f7e0, 0x1f7eb; 0x1f7f0, 0x1f7f0; 0x1f800, 0x1f80b; 0x1f810, 0x1f847; 0x1f850, 0x1f859; 0x1f860, 0x1f887; 0x1f890, 0x1f8ad; 0x1f8b0, 0x1f8b1; 0x1f900, 0x1fa53; 0x1fa60, 0x1fa6d; 0x1fa70, 0x1fa74; 0x1fa78, 0x1fa7c; 0x1fa80, 0x1fa86; 0x1fa90, 0x1faac; 0x1fab0, 0x1faba; 0x1fac0, 0x1fac5; 0x1fad0, 0x1fad9; 0x1fae0, 0x1fae7; 0x1faf0, 0x1faf6; 0x1fb94, 0x1fbca; 0x1fb00, 0x1fb92] let zl = [0x2028, 0x2028] let zp = [0x2029, 0x2029] let zs = [0x20, 0x20; 0xa0, 0xa0; 0x1680, 0x1680; 0x2000, 0x200a; 0x202f, 0x202f; 0x3000, 0x3000; 0x205f, 0x205f] let list = [ ("cc", cc); ("cf", cf); ("cn", cn); ("co", co); ("cs", cs); ("ll", ll); ("lm", lm); ("lo", lo); ("lt", lt); ("lu", lu); ("mc", mc); ("me", me); ("mn", mn); ("nd", nd); ("nl", nl); ("no", no); ("pc", pc); ("pd", pd); ("pe", pe); ("pf", pf); ("pi", pi); ("po", po); ("ps", ps); ("sc", sc); ("sk", sk); ("sm", sm); ("so", so); ("zl", zl); ("zp", zp); ("zs", zs) ] end module Properties = struct let alphabetic = [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x345, 0x345; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x64b, 0x657; 0x659, 0x65f; 0x66e, 0x66f; 0x670, 0x670; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6d6, 0x6dc; 0x6e1, 0x6e4; 0x6e5, 0x6e6; 0x6e7, 0x6e8; 0x6ed, 0x6ed; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x711, 0x711; 0x712, 0x72f; 0x730, 0x73f; 0x74d, 0x7a5; 0x7a6, 0x7b0; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x816, 0x817; 0x81a, 0x81a; 0x81b, 0x823; 0x824, 0x824; 0x825, 0x827; 0x828, 0x828; 0x829, 0x82c; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x8a0, 0x8c8; 0x8c9, 0x8c9; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8f0, 0x902; 0x903, 0x903; 0x904, 0x939; 0x93a, 0x93a; 0x93b, 0x93b; 0x93d, 0x93d; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94e, 0x94f; 0x950, 0x950; 0x955, 0x957; 0x958, 0x961; 0x962, 0x963; 0x971, 0x971; 0x972, 0x980; 0x981, 0x981; 0x982, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9e2, 0x9e3; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa01, 0xa02; 0xa03, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa51, 0xa51; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa70, 0xa71; 0xa72, 0xa74; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xad0, 0xad0; 0xae0, 0xae1; 0xae2, 0xae3; 0xaf9, 0xaf9; 0xafa, 0xafc; 0xb01, 0xb01; 0xb02, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb56, 0xb56; 0xb57, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb62, 0xb63; 0xb71, 0xb71; 0xb82, 0xb82; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xc00, 0xc00; 0xc01, 0xc03; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc62, 0xc63; 0xc80, 0xc80; 0xc81, 0xc81; 0xc82, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccc; 0xcd5, 0xcd6; 0xcdd, 0xcde; 0xce0, 0xce1; 0xce2, 0xce3; 0xcf1, 0xcf2; 0xd00, 0xd01; 0xd02, 0xd03; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd57, 0xd57; 0xd5f, 0xd61; 0xd62, 0xd63; 0xd7a, 0xd7f; 0xd81, 0xd81; 0xd82, 0xd83; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 0xe01, 0xe30; 0xe31, 0xe31; 0xe32, 0xe33; 0xe34, 0xe3a; 0xe40, 0xe45; 0xe46, 0xe46; 0xe4d, 0xe4d; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb1, 0xeb1; 0xeb2, 0xeb3; 0xeb4, 0xeb9; 0xebb, 0xebc; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xecd, 0xecd; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf81; 0xf88, 0xf8c; 0xf8d, 0xf97; 0xf99, 0xfbc; 0x1000, 0x102a; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1036; 0x1038, 0x1038; 0x103b, 0x103c; 0x103d, 0x103e; 0x103f, 0x103f; 0x1050, 0x1055; 0x1056, 0x1057; 0x1058, 0x1059; 0x105a, 0x105d; 0x105e, 0x1060; 0x1061, 0x1061; 0x1062, 0x1064; 0x1065, 0x1066; 0x1067, 0x106d; 0x106e, 0x1070; 0x1071, 0x1074; 0x1075, 0x1081; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108e, 0x108e; 0x108f, 0x108f; 0x109a, 0x109c; 0x109d, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x1712, 0x1713; 0x171f, 0x1731; 0x1732, 0x1733; 0x1740, 0x1751; 0x1752, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18a9, 0x18a9; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a20, 0x1a54; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a74; 0x1aa7, 0x1aa7; 0x1abf, 0x1ac0; 0x1acc, 0x1ace; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b05, 0x1b33; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b43; 0x1b45, 0x1b4c; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1b83, 0x1ba0; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1bac, 0x1bad; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1c00, 0x1c23; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c36; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1de7, 0x1df4; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x24b6, 0x24e9; 0x2c00, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x2e2f, 0x2e2f; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa674, 0xa67b; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa69e, 0xa69f; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7ca; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d9; 0xa7f2, 0xa7f4; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa802, 0xa802; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80b, 0xa80b; 0xa80c, 0xa822; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa840, 0xa873; 0xa880, 0xa881; 0xa882, 0xa8b3; 0xa8b4, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa8ff, 0xa8ff; 0xa90a, 0xa925; 0xa926, 0xa92a; 0xa930, 0xa946; 0xa947, 0xa951; 0xa952, 0xa952; 0xa960, 0xa97c; 0xa980, 0xa982; 0xa983, 0xa983; 0xa984, 0xa9b2; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9bf; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e5, 0xa9e5; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa40, 0xaa42; 0xaa43, 0xaa43; 0xaa44, 0xaa4b; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaa7e, 0xaaaf; 0xaab0, 0xaab0; 0xaab1, 0xaab1; 0xaab2, 0xaab4; 0xaab5, 0xaab6; 0xaab7, 0xaab8; 0xaab9, 0xaabd; 0xaabe, 0xaabe; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xaaf5, 0xaaf5; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1e, 0xfb1e; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10376, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d24, 0x10d27; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11003, 0x11037; 0x11038, 0x11045; 0x11071, 0x11072; 0x11073, 0x11074; 0x11075, 0x11075; 0x11082, 0x11082; 0x11083, 0x110af; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110c2, 0x110c2; 0x110d0, 0x110e8; 0x11100, 0x11102; 0x11103, 0x11126; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11132; 0x11144, 0x11144; 0x11145, 0x11146; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11180, 0x11181; 0x11182, 0x11182; 0x11183, 0x111b2; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111bf; 0x111c1, 0x111c4; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112e8; 0x11300, 0x11301; 0x11302, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11361; 0x11362, 0x11363; 0x11400, 0x11434; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11443, 0x11444; 0x11445, 0x11445; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115d8, 0x115db; 0x115dc, 0x115dd; 0x11600, 0x1162f; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x11640, 0x11640; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172a; 0x11740, 0x11746; 0x11800, 0x1182b; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193f, 0x1193f; 0x11940, 0x11940; 0x11941, 0x11941; 0x11942, 0x11942; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x119e4, 0x119e4; 0x11a00, 0x11a00; 0x11a01, 0x11a0a; 0x11a0b, 0x11a32; 0x11a35, 0x11a38; 0x11a39, 0x11a39; 0x11a3a, 0x11a3a; 0x11a3b, 0x11a3e; 0x11a50, 0x11a50; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a5c, 0x11a89; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 0x11d46, 0x11d46; 0x11d47, 0x11d47; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f4f; 0x16f50, 0x16f50; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9e, 0x1bc9e; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df09; 0x1df0a, 0x1df0a; 0x1df0b, 0x1df1e; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e947, 0x1e947; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189; 0x20000, 0x2a6df; 0x2a700, 0x2b738; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x30000, 0x3134a; 0x2f800, 0x2fa1d] let ascii_hex_digit = [0x61, 0x66; 0x41, 0x46; 0x30, 0x39] let hex_digit = [0x30, 0x39; 0x41, 0x46; 0x61, 0x66; 0xff10, 0xff19; 0xff21, 0xff26; 0xff41, 0xff46] let id_continue = [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x300, 0x36f; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x387, 0x387; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x64b, 0x65f; 0x660, 0x669; 0x66e, 0x66f; 0x670, 0x670; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6d6, 0x6dc; 0x6df, 0x6e4; 0x6e5, 0x6e6; 0x6e7, 0x6e8; 0x6ea, 0x6ed; 0x6ee, 0x6ef; 0x6f0, 0x6f9; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x711, 0x711; 0x712, 0x72f; 0x730, 0x74a; 0x74d, 0x7a5; 0x7a6, 0x7b0; 0x7b1, 0x7b1; 0x7c0, 0x7c9; 0x7ca, 0x7ea; 0x7eb, 0x7f3; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x815; 0x816, 0x819; 0x81a, 0x81a; 0x81b, 0x823; 0x824, 0x824; 0x825, 0x827; 0x828, 0x828; 0x829, 0x82d; 0x840, 0x858; 0x859, 0x85b; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x898, 0x89f; 0x8a0, 0x8c8; 0x8c9, 0x8c9; 0x8ca, 0x8e1; 0x8e3, 0x902; 0x903, 0x903; 0x904, 0x939; 0x93a, 0x93a; 0x93b, 0x93b; 0x93c, 0x93c; 0x93d, 0x93d; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94d, 0x94d; 0x94e, 0x94f; 0x950, 0x950; 0x951, 0x957; 0x958, 0x961; 0x962, 0x963; 0x966, 0x96f; 0x971, 0x971; 0x972, 0x980; 0x981, 0x981; 0x982, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9bc; 0x9bd, 0x9bd; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9cd, 0x9cd; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9e2, 0x9e3; 0x9e6, 0x9ef; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa02; 0xa03, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa3c, 0xa3c; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa6f; 0xa70, 0xa71; 0xa72, 0xa74; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabc, 0xabc; 0xabd, 0xabd; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xacd, 0xacd; 0xad0, 0xad0; 0xae0, 0xae1; 0xae2, 0xae3; 0xae6, 0xaef; 0xaf9, 0xaf9; 0xafa, 0xaff; 0xb01, 0xb01; 0xb02, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb3c; 0xb3d, 0xb3d; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb4d, 0xb4d; 0xb55, 0xb56; 0xb57, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb62, 0xb63; 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb82; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbcd, 0xbcd; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc00; 0xc01, 0xc03; 0xc04, 0xc04; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3c, 0xc3c; 0xc3d, 0xc3d; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc62, 0xc63; 0xc66, 0xc6f; 0xc80, 0xc80; 0xc81, 0xc81; 0xc82, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbc, 0xcbc; 0xcbd, 0xcbd; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccd; 0xcd5, 0xcd6; 0xcdd, 0xcde; 0xce0, 0xce1; 0xce2, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf2; 0xd00, 0xd01; 0xd02, 0xd03; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3b, 0xd3c; 0xd3d, 0xd3d; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd4d, 0xd4d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd57, 0xd57; 0xd5f, 0xd61; 0xd62, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd81; 0xd82, 0xd83; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 0xe01, 0xe30; 0xe31, 0xe31; 0xe32, 0xe33; 0xe34, 0xe3a; 0xe40, 0xe45; 0xe46, 0xe46; 0xe47, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb1, 0xeb1; 0xeb2, 0xeb3; 0xeb4, 0xebc; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xec8, 0xecd; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 0xf3e, 0xf3f; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf84; 0xf86, 0xf87; 0xf88, 0xf8c; 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x1000, 0x102a; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1037; 0x1038, 0x1038; 0x1039, 0x103a; 0x103b, 0x103c; 0x103d, 0x103e; 0x103f, 0x103f; 0x1040, 0x1049; 0x1050, 0x1055; 0x1056, 0x1057; 0x1058, 0x1059; 0x105a, 0x105d; 0x105e, 0x1060; 0x1061, 0x1061; 0x1062, 0x1064; 0x1065, 0x1066; 0x1067, 0x106d; 0x106e, 0x1070; 0x1071, 0x1074; 0x1075, 0x1081; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108e, 0x108e; 0x108f, 0x108f; 0x1090, 0x1099; 0x109a, 0x109c; 0x109d, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x1712, 0x1714; 0x1715, 0x1715; 0x171f, 0x1731; 0x1732, 0x1733; 0x1734, 0x1734; 0x1740, 0x1751; 0x1752, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b4, 0x17b5; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x17c9, 0x17d3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x17dd, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x180f, 0x180f; 0x1810, 0x1819; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18a9, 0x18a9; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1939, 0x193b; 0x1946, 0x194f; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x19d0, 0x19d9; 0x19da, 0x19da; 0x1a00, 0x1a16; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a20, 0x1a54; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a7c; 0x1a7f, 0x1a7f; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1ace; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b05, 0x1b33; 0x1b34, 0x1b34; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b44; 0x1b45, 0x1b4c; 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1b83, 0x1ba0; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1baa, 0x1baa; 0x1bab, 0x1bad; 0x1bae, 0x1baf; 0x1bb0, 0x1bb9; 0x1bba, 0x1be5; 0x1be6, 0x1be6; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1bf2, 0x1bf3; 0x1c00, 0x1c23; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c37; 0x1c40, 0x1c49; 0x1c4d, 0x1c4f; 0x1c50, 0x1c59; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce1, 0x1ce1; 0x1ce2, 0x1ce8; 0x1ce9, 0x1cec; 0x1ced, 0x1ced; 0x1cee, 0x1cf3; 0x1cf4, 0x1cf4; 0x1cf5, 0x1cf6; 0x1cf7, 0x1cf7; 0x1cf8, 0x1cf9; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1dc0, 0x1dff; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cef, 0x2cf1; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d7f, 0x2d7f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x302a, 0x302d; 0x302e, 0x302f; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x3099, 0x309a; 0x309b, 0x309c; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa620, 0xa629; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa66f, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa69e, 0xa69f; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa6f0, 0xa6f1; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7ca; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d9; 0xa7f2, 0xa7f4; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa802, 0xa802; 0xa803, 0xa805; 0xa806, 0xa806; 0xa807, 0xa80a; 0xa80b, 0xa80b; 0xa80c, 0xa822; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa82c, 0xa82c; 0xa840, 0xa873; 0xa880, 0xa881; 0xa882, 0xa8b3; 0xa8b4, 0xa8c3; 0xa8c4, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f1; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa8ff, 0xa8ff; 0xa900, 0xa909; 0xa90a, 0xa925; 0xa926, 0xa92d; 0xa930, 0xa946; 0xa947, 0xa951; 0xa952, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa982; 0xa983, 0xa983; 0xa984, 0xa9b2; 0xa9b3, 0xa9b3; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9c0; 0xa9cf, 0xa9cf; 0xa9d0, 0xa9d9; 0xa9e0, 0xa9e4; 0xa9e5, 0xa9e5; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9f0, 0xa9f9; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa40, 0xaa42; 0xaa43, 0xaa43; 0xaa44, 0xaa4b; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa50, 0xaa59; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaa7e, 0xaaaf; 0xaab0, 0xaab0; 0xaab1, 0xaab1; 0xaab2, 0xaab4; 0xaab5, 0xaab6; 0xaab7, 0xaab8; 0xaab9, 0xaabd; 0xaabe, 0xaabf; 0xaac0, 0xaac0; 0xaac1, 0xaac1; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xaaf5, 0xaaf5; 0xaaf6, 0xaaf6; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xabec, 0xabec; 0xabed, 0xabed; 0xabf0, 0xabf9; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1e, 0xfb1e; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff10, 0xff19; 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10376, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10ae5, 0x10ae6; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d24, 0x10d27; 0x10d30, 0x10d39; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f46, 0x10f50; 0x10f70, 0x10f81; 0x10f82, 0x10f85; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11003, 0x11037; 0x11038, 0x11046; 0x11066, 0x1106f; 0x11070, 0x11070; 0x11071, 0x11072; 0x11073, 0x11074; 0x11075, 0x11075; 0x1107f, 0x11081; 0x11082, 0x11082; 0x11083, 0x110af; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110b9, 0x110ba; 0x110c2, 0x110c2; 0x110d0, 0x110e8; 0x110f0, 0x110f9; 0x11100, 0x11102; 0x11103, 0x11126; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11144; 0x11145, 0x11146; 0x11147, 0x11147; 0x11150, 0x11172; 0x11173, 0x11173; 0x11176, 0x11176; 0x11180, 0x11181; 0x11182, 0x11182; 0x11183, 0x111b2; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111c0; 0x111c1, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x111d0, 0x111d9; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11235, 0x11235; 0x11236, 0x11237; 0x1123e, 0x1123e; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112ea; 0x112f0, 0x112f9; 0x11300, 0x11301; 0x11302, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x1133c; 0x1133d, 0x1133d; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11361; 0x11362, 0x11363; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11400, 0x11434; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11442, 0x11444; 0x11445, 0x11445; 0x11446, 0x11446; 0x11447, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x1145e; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x114c2, 0x114c3; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x114d0, 0x114d9; 0x11580, 0x115ae; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115bf, 0x115c0; 0x115d8, 0x115db; 0x115dc, 0x115dd; 0x11600, 0x1162f; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x1163f, 0x11640; 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116aa; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x116b6, 0x116b6; 0x116b7, 0x116b7; 0x116b8, 0x116b8; 0x116c0, 0x116c9; 0x11700, 0x1171a; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172b; 0x11730, 0x11739; 0x11740, 0x11746; 0x11800, 0x1182b; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x11839, 0x1183a; 0x118a0, 0x118df; 0x118e0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193d, 0x1193d; 0x1193e, 0x1193e; 0x1193f, 0x1193f; 0x11940, 0x11940; 0x11941, 0x11941; 0x11942, 0x11942; 0x11943, 0x11943; 0x11950, 0x11959; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e0, 0x119e0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x119e4, 0x119e4; 0x11a00, 0x11a00; 0x11a01, 0x11a0a; 0x11a0b, 0x11a32; 0x11a33, 0x11a38; 0x11a39, 0x11a39; 0x11a3a, 0x11a3a; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 0x11a50, 0x11a50; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a5c, 0x11a89; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11a98, 0x11a99; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c3f, 0x11c3f; 0x11c40, 0x11c40; 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d45; 0x11d46, 0x11d46; 0x11d47, 0x11d47; 0x11d50, 0x11d59; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11d97, 0x11d97; 0x11d98, 0x11d98; 0x11da0, 0x11da9; 0x11ee0, 0x11ef2; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 0x16a70, 0x16abe; 0x16ac0, 0x16ac9; 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b2f; 0x16b30, 0x16b36; 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f4f; 0x16f50, 0x16f50; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16fe4, 0x16fe4; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 0x1d165, 0x1d166; 0x1d167, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1df00, 0x1df09; 0x1df0a, 0x1df0a; 0x1df0b, 0x1df1e; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e100, 0x1e12c; 0x1e130, 0x1e136; 0x1e137, 0x1e13d; 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2ae, 0x1e2ae; 0x1e2c0, 0x1e2eb; 0x1e2ec, 0x1e2ef; 0x1e2f0, 0x1e2f9; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e943; 0x1e944, 0x1e94a; 0x1e94b, 0x1e94b; 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 0x20000, 0x2a6df; 0x2a700, 0x2b738; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0xe0100, 0xe01ef] let id_start = [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x66e, 0x66f; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x8a0, 0x8c8; 0x8c9, 0x8c9; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 0x971, 0x971; 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcdd, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe33; 0xe40, 0xe45; 0xe46, 0xe46; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb3; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x309b, 0x309c; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7ca; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d9; 0xa7f2, 0xa7f4; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df09; 0x1df0a, 0x1df0a; 0x1df0b, 0x1df1e; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 0x2a700, 0x2b738; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x30000, 0x3134a; 0x2f800, 0x2fa1d] let lowercase = [0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xdf, 0xf6; 0xf8, 0xff; 0x101, 0x101; 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 0x109, 0x109; 0x10b, 0x10b; 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 0x113, 0x113; 0x115, 0x115; 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 0x11d, 0x11d; 0x11f, 0x11f; 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 0x127, 0x127; 0x129, 0x129; 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 0x131, 0x131; 0x133, 0x133; 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 0x13c, 0x13c; 0x13e, 0x13e; 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 0x146, 0x146; 0x148, 0x149; 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 0x151, 0x151; 0x153, 0x153; 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 0x15b, 0x15b; 0x15d, 0x15d; 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 0x165, 0x165; 0x167, 0x167; 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 0x16f, 0x16f; 0x171, 0x171; 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 0x17a, 0x17a; 0x17c, 0x17c; 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 0x188, 0x188; 0x18c, 0x18d; 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 0x19e, 0x19e; 0x1a1, 0x1a1; 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 0x1aa, 0x1ab; 0x1ad, 0x1ad; 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 0x1b9, 0x1ba; 0x1bd, 0x1bf; 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 0x1ce, 0x1ce; 0x1d0, 0x1d0; 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 0x1d8, 0x1d8; 0x1da, 0x1da; 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 0x1e3, 0x1e3; 0x1e5, 0x1e5; 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 0x1ed, 0x1ed; 0x1ef, 0x1f0; 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 0x1fb, 0x1fb; 0x1fd, 0x1fd; 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 0x205, 0x205; 0x207, 0x207; 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 0x20f, 0x20f; 0x211, 0x211; 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 0x219, 0x219; 0x21b, 0x21b; 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 0x223, 0x223; 0x225, 0x225; 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 0x22d, 0x22d; 0x22f, 0x22f; 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 0x23f, 0x240; 0x242, 0x242; 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 0x24d, 0x24d; 0x24f, 0x293; 0x295, 0x2af; 0x2b0, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 0x345, 0x345; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37a, 0x37a; 0x37b, 0x37d; 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 0x10d0, 0x10fa; 0x10fd, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 0x1e05, 0x1e05; 0x1e07, 0x1e07; 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 0x1e23, 0x1e23; 0x1e25, 0x1e25; 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 0x1e37, 0x1e37; 0x1e39, 0x1e39; 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 0x1e41, 0x1e41; 0x1e43, 0x1e43; 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 0x1e55, 0x1e55; 0x1e57, 0x1e57; 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 0x1e73, 0x1e73; 0x1e75, 0x1e75; 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 0x1e87, 0x1e87; 0x1e89, 0x1e89; 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 0x1e91, 0x1e91; 0x1e93, 0x1e93; 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 0x1efd, 0x1efd; 0x1eff, 0x1f07; 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 0x1f40, 0x1f45; 0x1f50, 0x1f57; 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x210a, 0x210a; 0x210e, 0x210f; 0x2113, 0x2113; 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 0x2146, 0x2149; 0x214e, 0x214e; 0x2170, 0x217f; 0x2184, 0x2184; 0x24d0, 0x24e9; 0x2c30, 0x2c5f; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 0x2c76, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c81, 0x2c81; 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 0x2c93, 0x2c93; 0x2c95, 0x2c95; 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 0xa647, 0xa647; 0xa649, 0xa649; 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 0xa651, 0xa651; 0xa653, 0xa653; 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 0xa65b, 0xa65b; 0xa65d, 0xa65d; 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 0xa665, 0xa665; 0xa667, 0xa667; 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 0xa681, 0xa681; 0xa683, 0xa683; 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 0xa68b, 0xa68b; 0xa68d, 0xa68d; 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 0xa695, 0xa695; 0xa697, 0xa697; 0xa699, 0xa699; 0xa69b, 0xa69b; 0xa69c, 0xa69d; 0xa723, 0xa723; 0xa725, 0xa725; 0xa727, 0xa727; 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 0xa72f, 0xa731; 0xa733, 0xa733; 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 0xa73b, 0xa73b; 0xa73d, 0xa73d; 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 0xa745, 0xa745; 0xa747, 0xa747; 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 0xa74f, 0xa74f; 0xa751, 0xa751; 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 0xa759, 0xa759; 0xa75b, 0xa75b; 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 0xa763, 0xa763; 0xa765, 0xa765; 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 0xa76d, 0xa76d; 0xa76f, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa778; 0xa77a, 0xa77a; 0xa77c, 0xa77c; 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 0xa785, 0xa785; 0xa787, 0xa787; 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 0xa793, 0xa795; 0xa797, 0xa797; 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 0xa7bf, 0xa7bf; 0xa7c1, 0xa7c1; 0xa7c3, 0xa7c3; 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 0xa7d1, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d5; 0xa7d7, 0xa7d7; 0xa7d9, 0xa7d9; 0xa7f6, 0xa7f6; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 0x10428, 0x1044f; 0x104d8, 0x104fb; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10780, 0x10780; 0x10783, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10cc0, 0x10cf2; 0x118c0, 0x118df; 0x16e60, 0x16e7f; 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 0x1d770, 0x1d788; 0x1d78a, 0x1d78f; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7c9; 0x1d7cb, 0x1d7cb; 0x1df00, 0x1df09; 0x1df0b, 0x1df1e; 0x1e922, 0x1e943] let math = [0x2b, 0x2b; 0x3c, 0x3e; 0x5e, 0x5e; 0x7c, 0x7c; 0x7e, 0x7e; 0xac, 0xac; 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3d0, 0x3d2; 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f5; 0x3f6, 0x3f6; 0x606, 0x608; 0x2016, 0x2016; 0x2032, 0x2034; 0x2040, 0x2040; 0x2044, 0x2044; 0x2052, 0x2052; 0x2061, 0x2064; 0x207a, 0x207c; 0x207d, 0x207d; 0x207e, 0x207e; 0x208a, 0x208c; 0x208d, 0x208d; 0x208e, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20eb, 0x20ef; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2128, 0x2128; 0x2129, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 0x2133, 0x2134; 0x2135, 0x2138; 0x213c, 0x213f; 0x2140, 0x2144; 0x2145, 0x2149; 0x214b, 0x214b; 0x2190, 0x2194; 0x2195, 0x2199; 0x219a, 0x219b; 0x219c, 0x219f; 0x21a0, 0x21a0; 0x21a1, 0x21a2; 0x21a3, 0x21a3; 0x21a4, 0x21a5; 0x21a6, 0x21a6; 0x21a7, 0x21a7; 0x21a9, 0x21ad; 0x21ae, 0x21ae; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21cd; 0x21ce, 0x21cf; 0x21d0, 0x21d1; 0x21d2, 0x21d2; 0x21d3, 0x21d3; 0x21d4, 0x21d4; 0x21d5, 0x21db; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 0x21f4, 0x22ff; 0x2308, 0x2308; 0x2309, 0x2309; 0x230a, 0x230a; 0x230b, 0x230b; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b3; 0x23b4, 0x23b5; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23dc, 0x23e1; 0x23e2, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25b7, 0x25b7; 0x25bc, 0x25c0; 0x25c1, 0x25c1; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x25f8, 0x25ff; 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 0x266f, 0x266f; 0x27c0, 0x27c4; 0x27c5, 0x27c5; 0x27c6, 0x27c6; 0x27c7, 0x27e5; 0x27e6, 0x27e6; 0x27e7, 0x27e7; 0x27e8, 0x27e8; 0x27e9, 0x27e9; 0x27ea, 0x27ea; 0x27eb, 0x27eb; 0x27ec, 0x27ec; 0x27ed, 0x27ed; 0x27ee, 0x27ee; 0x27ef, 0x27ef; 0x27f0, 0x27ff; 0x2900, 0x2982; 0x2983, 0x2983; 0x2984, 0x2984; 0x2985, 0x2985; 0x2986, 0x2986; 0x2987, 0x2987; 0x2988, 0x2988; 0x2989, 0x2989; 0x298a, 0x298a; 0x298b, 0x298b; 0x298c, 0x298c; 0x298d, 0x298d; 0x298e, 0x298e; 0x298f, 0x298f; 0x2990, 0x2990; 0x2991, 0x2991; 0x2992, 0x2992; 0x2993, 0x2993; 0x2994, 0x2994; 0x2995, 0x2995; 0x2996, 0x2996; 0x2997, 0x2997; 0x2998, 0x2998; 0x2999, 0x29d7; 0x29d8, 0x29d8; 0x29d9, 0x29d9; 0x29da, 0x29da; 0x29db, 0x29db; 0x29dc, 0x29fb; 0x29fc, 0x29fc; 0x29fd, 0x29fd; 0x29fe, 0x2aff; 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 0xfe61, 0xfe61; 0xfe62, 0xfe62; 0xfe63, 0xfe63; 0xfe64, 0xfe66; 0xfe68, 0xfe68; 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 0xff5c, 0xff5c; 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c1, 0x1d6c1; 0x1d6c2, 0x1d6da; 0x1d6db, 0x1d6db; 0x1d6dc, 0x1d6fa; 0x1d6fb, 0x1d6fb; 0x1d6fc, 0x1d714; 0x1d715, 0x1d715; 0x1d716, 0x1d734; 0x1d735, 0x1d735; 0x1d736, 0x1d74e; 0x1d74f, 0x1d74f; 0x1d750, 0x1d76e; 0x1d76f, 0x1d76f; 0x1d770, 0x1d788; 0x1d789, 0x1d789; 0x1d78a, 0x1d7a8; 0x1d7a9, 0x1d7a9; 0x1d7aa, 0x1d7c2; 0x1d7c3, 0x1d7c3; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1eef0, 0x1eef1; 0x1eeab, 0x1eebb; 0x1eea5, 0x1eea9; 0x1eea1, 0x1eea3; 0x1ee8b, 0x1ee9b] let other_alphabetic = [0x345, 0x345; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x657; 0x659, 0x65f; 0x670, 0x670; 0x6d6, 0x6dc; 0x6e1, 0x6e4; 0x6e7, 0x6e8; 0x6ed, 0x6ed; 0x711, 0x711; 0x730, 0x73f; 0x7a6, 0x7b0; 0x816, 0x817; 0x81b, 0x823; 0x825, 0x827; 0x829, 0x82c; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8f0, 0x902; 0x903, 0x903; 0x93a, 0x93a; 0x93b, 0x93b; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94e, 0x94f; 0x955, 0x957; 0x962, 0x963; 0x981, 0x981; 0x982, 0x983; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9d7, 0x9d7; 0x9e2, 0x9e3; 0xa01, 0xa02; 0xa03, 0xa03; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa51, 0xa51; 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xae2, 0xae3; 0xafa, 0xafc; 0xb01, 0xb01; 0xb02, 0xb03; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb56, 0xb56; 0xb57, 0xb57; 0xb62, 0xb63; 0xb82, 0xb82; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd7, 0xbd7; 0xc00, 0xc00; 0xc01, 0xc03; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc81; 0xc82, 0xc83; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccc; 0xcd5, 0xcd6; 0xce2, 0xce3; 0xd00, 0xd01; 0xd02, 0xd03; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd57, 0xd57; 0xd62, 0xd63; 0xd81, 0xd81; 0xd82, 0xd83; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 0xe31, 0xe31; 0xe34, 0xe3a; 0xe4d, 0xe4d; 0xeb1, 0xeb1; 0xeb4, 0xeb9; 0xebb, 0xebc; 0xecd, 0xecd; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf81; 0xf8d, 0xf97; 0xf99, 0xfbc; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1036; 0x1038, 0x1038; 0x103b, 0x103c; 0x103d, 0x103e; 0x1056, 0x1057; 0x1058, 0x1059; 0x105e, 0x1060; 0x1062, 0x1064; 0x1067, 0x106d; 0x1071, 0x1074; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108f, 0x108f; 0x109a, 0x109c; 0x109d, 0x109d; 0x1712, 0x1713; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a74; 0x1abf, 0x1ac0; 0x1acc, 0x1ace; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b43; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1bac, 0x1bad; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c36; 0x1de7, 0x1df4; 0x24b6, 0x24e9; 0x2de0, 0x2dff; 0xa674, 0xa67b; 0xa69e, 0xa69f; 0xa802, 0xa802; 0xa80b, 0xa80b; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa880, 0xa881; 0xa8b4, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8ff, 0xa8ff; 0xa926, 0xa92a; 0xa947, 0xa951; 0xa952, 0xa952; 0xa980, 0xa982; 0xa983, 0xa983; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9bf; 0xa9e5, 0xa9e5; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa43, 0xaa43; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaab0, 0xaab0; 0xaab2, 0xaab4; 0xaab7, 0xaab8; 0xaabe, 0xaabe; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xfb1e, 0xfb1e; 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10d24, 0x10d27; 0x10eab, 0x10eac; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11038, 0x11045; 0x11073, 0x11074; 0x11082, 0x11082; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110c2, 0x110c2; 0x11100, 0x11102; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11132; 0x11145, 0x11146; 0x11180, 0x11181; 0x11182, 0x11182; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111bf; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112e8; 0x11300, 0x11301; 0x11302, 0x11303; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x11357, 0x11357; 0x11362, 0x11363; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11443, 0x11444; 0x11445, 0x11445; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115dc, 0x115dd; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x11640, 0x11640; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172a; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x11940, 0x11940; 0x11942, 0x11942; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e4, 0x119e4; 0x11a01, 0x11a0a; 0x11a35, 0x11a38; 0x11a39, 0x11a39; 0x11a3b, 0x11a3e; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 0x11d47, 0x11d47; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x16f4f, 0x16f4f; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16ff0, 0x16ff1; 0x1bc9e, 0x1bc9e; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e947, 0x1e947; 0x1f170, 0x1f189; 0x1f150, 0x1f169; 0x1f130, 0x1f149] let other_lowercase = [0xaa, 0xaa; 0xba, 0xba; 0x2b0, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 0x345, 0x345; 0x37a, 0x37a; 0x1d2c, 0x1d6a; 0x1d78, 0x1d78; 0x1d9b, 0x1dbf; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2170, 0x217f; 0x24d0, 0x24e9; 0x2c7c, 0x2c7d; 0xa69c, 0xa69d; 0xa770, 0xa770; 0xa7f8, 0xa7f9; 0xab5c, 0xab5f; 0x107b2, 0x107ba; 0x10787, 0x107b0; 0x10783, 0x10785; 0x10780, 0x10780] let other_math = [0x5e, 0x5e; 0x3d0, 0x3d2; 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f5; 0x2016, 0x2016; 0x2032, 0x2034; 0x2040, 0x2040; 0x2061, 0x2064; 0x207d, 0x207d; 0x207e, 0x207e; 0x208d, 0x208d; 0x208e, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20eb, 0x20ef; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2128, 0x2128; 0x2129, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 0x2133, 0x2134; 0x2135, 0x2138; 0x213c, 0x213f; 0x2145, 0x2149; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 0x21a4, 0x21a5; 0x21a7, 0x21a7; 0x21a9, 0x21ad; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21db; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 0x2308, 0x2308; 0x2309, 0x2309; 0x230a, 0x230a; 0x230b, 0x230b; 0x23b4, 0x23b5; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23e2, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25bc, 0x25c0; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 0x27c5, 0x27c5; 0x27c6, 0x27c6; 0x27e6, 0x27e6; 0x27e7, 0x27e7; 0x27e8, 0x27e8; 0x27e9, 0x27e9; 0x27ea, 0x27ea; 0x27eb, 0x27eb; 0x27ec, 0x27ec; 0x27ed, 0x27ed; 0x27ee, 0x27ee; 0x27ef, 0x27ef; 0x2983, 0x2983; 0x2984, 0x2984; 0x2985, 0x2985; 0x2986, 0x2986; 0x2987, 0x2987; 0x2988, 0x2988; 0x2989, 0x2989; 0x298a, 0x298a; 0x298b, 0x298b; 0x298c, 0x298c; 0x298d, 0x298d; 0x298e, 0x298e; 0x298f, 0x298f; 0x2990, 0x2990; 0x2991, 0x2991; 0x2992, 0x2992; 0x2993, 0x2993; 0x2994, 0x2994; 0x2995, 0x2995; 0x2996, 0x2996; 0x2997, 0x2997; 0x2998, 0x2998; 0x29d8, 0x29d8; 0x29d9, 0x29d9; 0x29da, 0x29da; 0x29db, 0x29db; 0x29fc, 0x29fc; 0x29fd, 0x29fd; 0xfe61, 0xfe61; 0xfe63, 0xfe63; 0xfe68, 0xfe68; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb] let other_uppercase = [0x1f170, 0x1f189; 0x1f150, 0x1f169; 0x1f130, 0x1f149; 0x24b6, 0x24cf; 0x2160, 0x216f] let uppercase = [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x13a0, 0x13f5; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 0x2145, 0x2145; 0x2160, 0x216f; 0x2183, 0x2183; 0x24b6, 0x24cf; 0x2c00, 0x2c2f; 0x2c60, 0x2c60; 0x2c62, 0x2c64; 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 0x2c84, 0x2c84; 0x2c86, 0x2c86; 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 0x2cac, 0x2cac; 0x2cae, 0x2cae; 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 0x2cf2, 0x2cf2; 0xa640, 0xa640; 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 0xa648, 0xa648; 0xa64a, 0xa64a; 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 0xa652, 0xa652; 0xa654, 0xa654; 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 0xa65c, 0xa65c; 0xa65e, 0xa65e; 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 0xa666, 0xa666; 0xa668, 0xa668; 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 0xa682, 0xa682; 0xa684, 0xa684; 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 0xa68c, 0xa68c; 0xa68e, 0xa68e; 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 0xa696, 0xa696; 0xa698, 0xa698; 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 0xa726, 0xa726; 0xa728, 0xa728; 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 0xa732, 0xa732; 0xa734, 0xa734; 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 0xa73c, 0xa73c; 0xa73e, 0xa73e; 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 0xa746, 0xa746; 0xa748, 0xa748; 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 0xa750, 0xa750; 0xa752, 0xa752; 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 0xa75a, 0xa75a; 0xa75c, 0xa75c; 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 0xa764, 0xa764; 0xa766, 0xa766; 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 0xa76e, 0xa76e; 0xa779, 0xa779; 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 0xa782, 0xa782; 0xa784, 0xa784; 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 0xa790, 0xa790; 0xa792, 0xa792; 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 0xa79c, 0xa79c; 0xa79e, 0xa79e; 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c0, 0xa7c0; 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 0xa7c9, 0xa7c9; 0xa7d0, 0xa7d0; 0xa7d6, 0xa7d6; 0xa7d8, 0xa7d8; 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 0x104b0, 0x104d3; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10c80, 0x10cb2; 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1d790, 0x1d7a8; 0x1d7ca, 0x1d7ca; 0x1e900, 0x1e921; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189] let white_space = [0x9, 0xd; 0x20, 0x20; 0x85, 0x85; 0xa0, 0xa0; 0x1680, 0x1680; 0x2000, 0x200a; 0x2028, 0x2028; 0x2029, 0x2029; 0x202f, 0x202f; 0x205f, 0x205f; 0x3000, 0x3000] let xid_continue = [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x300, 0x36f; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x387, 0x387; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x64b, 0x65f; 0x660, 0x669; 0x66e, 0x66f; 0x670, 0x670; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6d6, 0x6dc; 0x6df, 0x6e4; 0x6e5, 0x6e6; 0x6e7, 0x6e8; 0x6ea, 0x6ed; 0x6ee, 0x6ef; 0x6f0, 0x6f9; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x711, 0x711; 0x712, 0x72f; 0x730, 0x74a; 0x74d, 0x7a5; 0x7a6, 0x7b0; 0x7b1, 0x7b1; 0x7c0, 0x7c9; 0x7ca, 0x7ea; 0x7eb, 0x7f3; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x815; 0x816, 0x819; 0x81a, 0x81a; 0x81b, 0x823; 0x824, 0x824; 0x825, 0x827; 0x828, 0x828; 0x829, 0x82d; 0x840, 0x858; 0x859, 0x85b; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x898, 0x89f; 0x8a0, 0x8c8; 0x8c9, 0x8c9; 0x8ca, 0x8e1; 0x8e3, 0x902; 0x903, 0x903; 0x904, 0x939; 0x93a, 0x93a; 0x93b, 0x93b; 0x93c, 0x93c; 0x93d, 0x93d; 0x93e, 0x940; 0x941, 0x948; 0x949, 0x94c; 0x94d, 0x94d; 0x94e, 0x94f; 0x950, 0x950; 0x951, 0x957; 0x958, 0x961; 0x962, 0x963; 0x966, 0x96f; 0x971, 0x971; 0x972, 0x980; 0x981, 0x981; 0x982, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9bc; 0x9bd, 0x9bd; 0x9be, 0x9c0; 0x9c1, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9cd, 0x9cd; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9e2, 0x9e3; 0x9e6, 0x9ef; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa02; 0xa03, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa3c, 0xa3c; 0xa3e, 0xa40; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa6f; 0xa70, 0xa71; 0xa72, 0xa74; 0xa75, 0xa75; 0xa81, 0xa82; 0xa83, 0xa83; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabc, 0xabc; 0xabd, 0xabd; 0xabe, 0xac0; 0xac1, 0xac5; 0xac7, 0xac8; 0xac9, 0xac9; 0xacb, 0xacc; 0xacd, 0xacd; 0xad0, 0xad0; 0xae0, 0xae1; 0xae2, 0xae3; 0xae6, 0xaef; 0xaf9, 0xaf9; 0xafa, 0xaff; 0xb01, 0xb01; 0xb02, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb3c; 0xb3d, 0xb3d; 0xb3e, 0xb3e; 0xb3f, 0xb3f; 0xb40, 0xb40; 0xb41, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb4d, 0xb4d; 0xb55, 0xb56; 0xb57, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb62, 0xb63; 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb82; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbbf; 0xbc0, 0xbc0; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbcd, 0xbcd; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc00; 0xc01, 0xc03; 0xc04, 0xc04; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3c, 0xc3c; 0xc3d, 0xc3d; 0xc3e, 0xc40; 0xc41, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc62, 0xc63; 0xc66, 0xc6f; 0xc80, 0xc80; 0xc81, 0xc81; 0xc82, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbc, 0xcbc; 0xcbd, 0xcbd; 0xcbe, 0xcbe; 0xcbf, 0xcbf; 0xcc0, 0xcc4; 0xcc6, 0xcc6; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xccc, 0xccd; 0xcd5, 0xcd6; 0xcdd, 0xcde; 0xce0, 0xce1; 0xce2, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf2; 0xd00, 0xd01; 0xd02, 0xd03; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3b, 0xd3c; 0xd3d, 0xd3d; 0xd3e, 0xd40; 0xd41, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd4d, 0xd4d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd57, 0xd57; 0xd5f, 0xd61; 0xd62, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd81; 0xd82, 0xd83; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 0xdcf, 0xdd1; 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 0xe01, 0xe30; 0xe31, 0xe31; 0xe32, 0xe33; 0xe34, 0xe3a; 0xe40, 0xe45; 0xe46, 0xe46; 0xe47, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb1, 0xeb1; 0xeb2, 0xeb3; 0xeb4, 0xebc; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xec8, 0xecd; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 0xf3e, 0xf3f; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf7e; 0xf7f, 0xf7f; 0xf80, 0xf84; 0xf86, 0xf87; 0xf88, 0xf8c; 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x1000, 0x102a; 0x102b, 0x102c; 0x102d, 0x1030; 0x1031, 0x1031; 0x1032, 0x1037; 0x1038, 0x1038; 0x1039, 0x103a; 0x103b, 0x103c; 0x103d, 0x103e; 0x103f, 0x103f; 0x1040, 0x1049; 0x1050, 0x1055; 0x1056, 0x1057; 0x1058, 0x1059; 0x105a, 0x105d; 0x105e, 0x1060; 0x1061, 0x1061; 0x1062, 0x1064; 0x1065, 0x1066; 0x1067, 0x106d; 0x106e, 0x1070; 0x1071, 0x1074; 0x1075, 0x1081; 0x1082, 0x1082; 0x1083, 0x1084; 0x1085, 0x1086; 0x1087, 0x108c; 0x108d, 0x108d; 0x108e, 0x108e; 0x108f, 0x108f; 0x1090, 0x1099; 0x109a, 0x109c; 0x109d, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x1712, 0x1714; 0x1715, 0x1715; 0x171f, 0x1731; 0x1732, 0x1733; 0x1734, 0x1734; 0x1740, 0x1751; 0x1752, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b4, 0x17b5; 0x17b6, 0x17b6; 0x17b7, 0x17bd; 0x17be, 0x17c5; 0x17c6, 0x17c6; 0x17c7, 0x17c8; 0x17c9, 0x17d3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x17dd, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x180f, 0x180f; 0x1810, 0x1819; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18a9, 0x18a9; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x1922; 0x1923, 0x1926; 0x1927, 0x1928; 0x1929, 0x192b; 0x1930, 0x1931; 0x1932, 0x1932; 0x1933, 0x1938; 0x1939, 0x193b; 0x1946, 0x194f; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x19d0, 0x19d9; 0x19da, 0x19da; 0x1a00, 0x1a16; 0x1a17, 0x1a18; 0x1a19, 0x1a1a; 0x1a1b, 0x1a1b; 0x1a20, 0x1a54; 0x1a55, 0x1a55; 0x1a56, 0x1a56; 0x1a57, 0x1a57; 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a61, 0x1a61; 0x1a62, 0x1a62; 0x1a63, 0x1a64; 0x1a65, 0x1a6c; 0x1a6d, 0x1a72; 0x1a73, 0x1a7c; 0x1a7f, 0x1a7f; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1ace; 0x1b00, 0x1b03; 0x1b04, 0x1b04; 0x1b05, 0x1b33; 0x1b34, 0x1b34; 0x1b35, 0x1b35; 0x1b36, 0x1b3a; 0x1b3b, 0x1b3b; 0x1b3c, 0x1b3c; 0x1b3d, 0x1b41; 0x1b42, 0x1b42; 0x1b43, 0x1b44; 0x1b45, 0x1b4c; 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 0x1b82, 0x1b82; 0x1b83, 0x1ba0; 0x1ba1, 0x1ba1; 0x1ba2, 0x1ba5; 0x1ba6, 0x1ba7; 0x1ba8, 0x1ba9; 0x1baa, 0x1baa; 0x1bab, 0x1bad; 0x1bae, 0x1baf; 0x1bb0, 0x1bb9; 0x1bba, 0x1be5; 0x1be6, 0x1be6; 0x1be7, 0x1be7; 0x1be8, 0x1be9; 0x1bea, 0x1bec; 0x1bed, 0x1bed; 0x1bee, 0x1bee; 0x1bef, 0x1bf1; 0x1bf2, 0x1bf3; 0x1c00, 0x1c23; 0x1c24, 0x1c2b; 0x1c2c, 0x1c33; 0x1c34, 0x1c35; 0x1c36, 0x1c37; 0x1c40, 0x1c49; 0x1c4d, 0x1c4f; 0x1c50, 0x1c59; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce1, 0x1ce1; 0x1ce2, 0x1ce8; 0x1ce9, 0x1cec; 0x1ced, 0x1ced; 0x1cee, 0x1cf3; 0x1cf4, 0x1cf4; 0x1cf5, 0x1cf6; 0x1cf7, 0x1cf7; 0x1cf8, 0x1cf9; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1dc0, 0x1dff; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cef, 0x2cf1; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d7f, 0x2d7f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x302a, 0x302d; 0x302e, 0x302f; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x3099, 0x309a; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa620, 0xa629; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa66f, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa69e, 0xa69f; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa6f0, 0xa6f1; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7ca; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d9; 0xa7f2, 0xa7f4; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa802, 0xa802; 0xa803, 0xa805; 0xa806, 0xa806; 0xa807, 0xa80a; 0xa80b, 0xa80b; 0xa80c, 0xa822; 0xa823, 0xa824; 0xa825, 0xa826; 0xa827, 0xa827; 0xa82c, 0xa82c; 0xa840, 0xa873; 0xa880, 0xa881; 0xa882, 0xa8b3; 0xa8b4, 0xa8c3; 0xa8c4, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f1; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa8ff, 0xa8ff; 0xa900, 0xa909; 0xa90a, 0xa925; 0xa926, 0xa92d; 0xa930, 0xa946; 0xa947, 0xa951; 0xa952, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa982; 0xa983, 0xa983; 0xa984, 0xa9b2; 0xa9b3, 0xa9b3; 0xa9b4, 0xa9b5; 0xa9b6, 0xa9b9; 0xa9ba, 0xa9bb; 0xa9bc, 0xa9bd; 0xa9be, 0xa9c0; 0xa9cf, 0xa9cf; 0xa9d0, 0xa9d9; 0xa9e0, 0xa9e4; 0xa9e5, 0xa9e5; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9f0, 0xa9f9; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa29, 0xaa2e; 0xaa2f, 0xaa30; 0xaa31, 0xaa32; 0xaa33, 0xaa34; 0xaa35, 0xaa36; 0xaa40, 0xaa42; 0xaa43, 0xaa43; 0xaa44, 0xaa4b; 0xaa4c, 0xaa4c; 0xaa4d, 0xaa4d; 0xaa50, 0xaa59; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7b, 0xaa7b; 0xaa7c, 0xaa7c; 0xaa7d, 0xaa7d; 0xaa7e, 0xaaaf; 0xaab0, 0xaab0; 0xaab1, 0xaab1; 0xaab2, 0xaab4; 0xaab5, 0xaab6; 0xaab7, 0xaab8; 0xaab9, 0xaabd; 0xaabe, 0xaabf; 0xaac0, 0xaac0; 0xaac1, 0xaac1; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaeb, 0xaaeb; 0xaaec, 0xaaed; 0xaaee, 0xaaef; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xaaf5, 0xaaf5; 0xaaf6, 0xaaf6; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xabe3, 0xabe4; 0xabe5, 0xabe5; 0xabe6, 0xabe7; 0xabe8, 0xabe8; 0xabe9, 0xabea; 0xabec, 0xabec; 0xabed, 0xabed; 0xabf0, 0xabf9; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1e, 0xfb1e; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff10, 0xff19; 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xff9e, 0xff9f; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10376, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10ae5, 0x10ae6; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d24, 0x10d27; 0x10d30, 0x10d39; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f46, 0x10f50; 0x10f70, 0x10f81; 0x10f82, 0x10f85; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11000; 0x11001, 0x11001; 0x11002, 0x11002; 0x11003, 0x11037; 0x11038, 0x11046; 0x11066, 0x1106f; 0x11070, 0x11070; 0x11071, 0x11072; 0x11073, 0x11074; 0x11075, 0x11075; 0x1107f, 0x11081; 0x11082, 0x11082; 0x11083, 0x110af; 0x110b0, 0x110b2; 0x110b3, 0x110b6; 0x110b7, 0x110b8; 0x110b9, 0x110ba; 0x110c2, 0x110c2; 0x110d0, 0x110e8; 0x110f0, 0x110f9; 0x11100, 0x11102; 0x11103, 0x11126; 0x11127, 0x1112b; 0x1112c, 0x1112c; 0x1112d, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11144; 0x11145, 0x11146; 0x11147, 0x11147; 0x11150, 0x11172; 0x11173, 0x11173; 0x11176, 0x11176; 0x11180, 0x11181; 0x11182, 0x11182; 0x11183, 0x111b2; 0x111b3, 0x111b5; 0x111b6, 0x111be; 0x111bf, 0x111c0; 0x111c1, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111ce; 0x111cf, 0x111cf; 0x111d0, 0x111d9; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1122c, 0x1122e; 0x1122f, 0x11231; 0x11232, 0x11233; 0x11234, 0x11234; 0x11235, 0x11235; 0x11236, 0x11237; 0x1123e, 0x1123e; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x112df, 0x112df; 0x112e0, 0x112e2; 0x112e3, 0x112ea; 0x112f0, 0x112f9; 0x11300, 0x11301; 0x11302, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x1133c; 0x1133d, 0x1133d; 0x1133e, 0x1133f; 0x11340, 0x11340; 0x11341, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11361; 0x11362, 0x11363; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11400, 0x11434; 0x11435, 0x11437; 0x11438, 0x1143f; 0x11440, 0x11441; 0x11442, 0x11444; 0x11445, 0x11445; 0x11446, 0x11446; 0x11447, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x1145e; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114b0, 0x114b2; 0x114b3, 0x114b8; 0x114b9, 0x114b9; 0x114ba, 0x114ba; 0x114bb, 0x114be; 0x114bf, 0x114c0; 0x114c1, 0x114c1; 0x114c2, 0x114c3; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x114d0, 0x114d9; 0x11580, 0x115ae; 0x115af, 0x115b1; 0x115b2, 0x115b5; 0x115b8, 0x115bb; 0x115bc, 0x115bd; 0x115be, 0x115be; 0x115bf, 0x115c0; 0x115d8, 0x115db; 0x115dc, 0x115dd; 0x11600, 0x1162f; 0x11630, 0x11632; 0x11633, 0x1163a; 0x1163b, 0x1163c; 0x1163d, 0x1163d; 0x1163e, 0x1163e; 0x1163f, 0x11640; 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116aa; 0x116ab, 0x116ab; 0x116ac, 0x116ac; 0x116ad, 0x116ad; 0x116ae, 0x116af; 0x116b0, 0x116b5; 0x116b6, 0x116b6; 0x116b7, 0x116b7; 0x116b8, 0x116b8; 0x116c0, 0x116c9; 0x11700, 0x1171a; 0x1171d, 0x1171f; 0x11720, 0x11721; 0x11722, 0x11725; 0x11726, 0x11726; 0x11727, 0x1172b; 0x11730, 0x11739; 0x11740, 0x11746; 0x11800, 0x1182b; 0x1182c, 0x1182e; 0x1182f, 0x11837; 0x11838, 0x11838; 0x11839, 0x1183a; 0x118a0, 0x118df; 0x118e0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193d, 0x1193d; 0x1193e, 0x1193e; 0x1193f, 0x1193f; 0x11940, 0x11940; 0x11941, 0x11941; 0x11942, 0x11942; 0x11943, 0x11943; 0x11950, 0x11959; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119d1, 0x119d3; 0x119d4, 0x119d7; 0x119da, 0x119db; 0x119dc, 0x119df; 0x119e0, 0x119e0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x119e4, 0x119e4; 0x11a00, 0x11a00; 0x11a01, 0x11a0a; 0x11a0b, 0x11a32; 0x11a33, 0x11a38; 0x11a39, 0x11a39; 0x11a3a, 0x11a3a; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 0x11a50, 0x11a50; 0x11a51, 0x11a56; 0x11a57, 0x11a58; 0x11a59, 0x11a5b; 0x11a5c, 0x11a89; 0x11a8a, 0x11a96; 0x11a97, 0x11a97; 0x11a98, 0x11a99; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c2f, 0x11c2f; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 0x11c3e, 0x11c3e; 0x11c3f, 0x11c3f; 0x11c40, 0x11c40; 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11ca9; 0x11caa, 0x11cb0; 0x11cb1, 0x11cb1; 0x11cb2, 0x11cb3; 0x11cb4, 0x11cb4; 0x11cb5, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d45; 0x11d46, 0x11d46; 0x11d47, 0x11d47; 0x11d50, 0x11d59; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d94; 0x11d95, 0x11d95; 0x11d96, 0x11d96; 0x11d97, 0x11d97; 0x11d98, 0x11d98; 0x11da0, 0x11da9; 0x11ee0, 0x11ef2; 0x11ef3, 0x11ef4; 0x11ef5, 0x11ef6; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 0x16a70, 0x16abe; 0x16ac0, 0x16ac9; 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b2f; 0x16b30, 0x16b36; 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f4f; 0x16f50, 0x16f50; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16fe4, 0x16fe4; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 0x1d165, 0x1d166; 0x1d167, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1df00, 0x1df09; 0x1df0a, 0x1df0a; 0x1df0b, 0x1df1e; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e100, 0x1e12c; 0x1e130, 0x1e136; 0x1e137, 0x1e13d; 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2ae, 0x1e2ae; 0x1e2c0, 0x1e2eb; 0x1e2ec, 0x1e2ef; 0x1e2f0, 0x1e2f9; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e943; 0x1e944, 0x1e94a; 0x1e94b, 0x1e94b; 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 0x20000, 0x2a6df; 0x2a700, 0x2b738; 0x2b740, 0x2b81d; 0xe0100, 0xe01ef; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0; 0x2b820, 0x2cea1] let xid_start = [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x1ba; 0x1bb, 0x1bb; 0x1bc, 0x1bf; 0x1c0, 0x1c3; 0x1c4, 0x293; 0x294, 0x294; 0x295, 0x2af; 0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x373; 0x374, 0x374; 0x376, 0x377; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x640, 0x640; 0x641, 0x64a; 0x66e, 0x66f; 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x8a0, 0x8c8; 0x8c9, 0x8c9; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 0x971, 0x971; 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcdd, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe32; 0xe40, 0xe45; 0xe46, 0xe46; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb2; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x10fc; 0x10fd, 0x10ff; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f0; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1842; 0x1843, 0x1843; 0x1844, 0x1878; 0x1880, 0x1884; 0x1885, 0x1886; 0x1887, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c77; 0x1c78, 0x1c7d; 0x1c80, 0x1c88; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 0x1d00, 0x1d2b; 0x1d2c, 0x1d6a; 0x1d6b, 0x1d77; 0x1d78, 0x1d78; 0x1d79, 0x1d9a; 0x1d9b, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x2118; 0x2119, 0x211d; 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212e, 0x212e; 0x212f, 0x2134; 0x2135, 0x2138; 0x2139, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2182; 0x2183, 0x2184; 0x2185, 0x2188; 0x2c00, 0x2c7b; 0x2c7c, 0x2c7d; 0x2c7e, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3005; 0x3006, 0x3006; 0x3007, 0x3007; 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303a; 0x303b, 0x303b; 0x303c, 0x303c; 0x3041, 0x3096; 0x309d, 0x309e; 0x309f, 0x309f; 0x30a1, 0x30fa; 0x30fc, 0x30fe; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa015, 0xa015; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 0xa4f8, 0xa4fd; 0xa500, 0xa60b; 0xa60c, 0xa60c; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66d; 0xa66e, 0xa66e; 0xa67f, 0xa67f; 0xa680, 0xa69b; 0xa69c, 0xa69d; 0xa6a0, 0xa6e5; 0xa6e6, 0xa6ef; 0xa717, 0xa71f; 0xa722, 0xa76f; 0xa770, 0xa770; 0xa771, 0xa787; 0xa788, 0xa788; 0xa78b, 0xa78e; 0xa78f, 0xa78f; 0xa790, 0xa7ca; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d9; 0xa7f2, 0xa7f4; 0xa7f5, 0xa7f6; 0xa7f7, 0xa7f7; 0xa7f8, 0xa7f9; 0xa7fa, 0xa7fa; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e6, 0xa9e6; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa70, 0xaa70; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadc; 0xaadd, 0xaadd; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xaaf3, 0xaaf4; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab5f; 0xab60, 0xab68; 0xab69, 0xab69; 0xab70, 0xabbf; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff6f; 0xff70, 0xff70; 0xff71, 0xff9d; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x10340; 0x10341, 0x10341; 0x10342, 0x10349; 0x1034a, 0x1034a; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1044f; 0x10450, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342e; 0x14400, 0x14646; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18d00, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b150, 0x1b152; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df09; 0x1df0a, 0x1df0a; 0x1df0b, 0x1df1e; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 0x2a700, 0x2b738; 0x30000, 0x3134a; 0x2f800, 0x2fa1d; 0x2ceb0, 0x2ebe0; 0x2b820, 0x2cea1; 0x2b740, 0x2b81d] let list = [ ("alphabetic", alphabetic); ("ascii_hex_digit", ascii_hex_digit); ("hex_digit", hex_digit); ("id_continue", id_continue); ("id_start", id_start); ("lowercase", lowercase); ("math", math); ("other_alphabetic", other_alphabetic); ("other_lowercase", other_lowercase); ("other_math", other_math); ("other_uppercase", other_uppercase); ("uppercase", uppercase); ("white_space", white_space); ("xid_continue", xid_continue); ("xid_start", xid_start) ] end sedlex-2.5/src/syntax/unicode.mli000066400000000000000000000030641415251212000171060ustar00rootroot00000000000000(* Version is automatically generated from unicode data at * src/generator/data *) val version : string module Categories : sig val cc : Sedlex_cset.t val cf : Sedlex_cset.t val cn : Sedlex_cset.t val co : Sedlex_cset.t val cs : Sedlex_cset.t val ll : Sedlex_cset.t val lm : Sedlex_cset.t val lo : Sedlex_cset.t val lt : Sedlex_cset.t val lu : Sedlex_cset.t val mc : Sedlex_cset.t val me : Sedlex_cset.t val mn : Sedlex_cset.t val nd : Sedlex_cset.t val nl : Sedlex_cset.t val no : Sedlex_cset.t val pc : Sedlex_cset.t val pd : Sedlex_cset.t val pe : Sedlex_cset.t val pf : Sedlex_cset.t val pi : Sedlex_cset.t val po : Sedlex_cset.t val ps : Sedlex_cset.t val sc : Sedlex_cset.t val sk : Sedlex_cset.t val sm : Sedlex_cset.t val so : Sedlex_cset.t val zl : Sedlex_cset.t val zp : Sedlex_cset.t val zs : Sedlex_cset.t val list : (string * Sedlex_cset.t) list end module Properties : sig val alphabetic : Sedlex_cset.t val ascii_hex_digit : Sedlex_cset.t val hex_digit : Sedlex_cset.t val id_continue : Sedlex_cset.t val id_start : Sedlex_cset.t val lowercase : Sedlex_cset.t val math : Sedlex_cset.t val other_alphabetic : Sedlex_cset.t val other_lowercase : Sedlex_cset.t val other_math : Sedlex_cset.t val other_uppercase : Sedlex_cset.t val uppercase : Sedlex_cset.t val white_space : Sedlex_cset.t val xid_continue : Sedlex_cset.t val xid_start : Sedlex_cset.t val list : (string * Sedlex_cset.t) list end