Dalamud/lib/srell3_009/single-header/srell.hpp

18361 lines
704 KiB
C++

/*****************************************************************************
**
** SRELL (std::regex-like library) version 3.009
**
** Copyright (c) 2012-2022, Nozomu Katoo. All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**
** 1. Redistributions of source code must retain the above copyright notice,
** this list of conditions and the following disclaimer.
**
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
** IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**
******************************************************************************
**/
#ifndef SRELL_REGEX_TEMPLATE_LIBRARY
#define SRELL_REGEX_TEMPLATE_LIBRARY
#include <stdexcept>
#include <climits>
#include <cwchar>
#include <string>
#include <locale>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cstddef>
#include <utility>
#include <vector>
#include <iterator>
#include <memory>
#include <algorithm>
#ifdef __cpp_unicode_characters
#ifndef SRELL_CPP11_CHAR1632_ENABLED
#define SRELL_CPP11_CHAR1632_ENABLED
#endif
#endif
#ifdef __cpp_initializer_lists
#include <initializer_list>
#ifndef SRELL_CPP11_INITIALIZER_LIST_ENABLED
#define SRELL_CPP11_INITIALIZER_LIST_ENABLED
#endif
#endif
#ifdef __cpp_rvalue_references
#ifndef SRELL_CPP11_MOVE_ENABLED
#define SRELL_CPP11_MOVE_ENABLED
#endif
#endif
#ifdef SRELL_CPP11_MOVE_ENABLED
#if defined(_MSC_VER) && _MSC_VER < 1900
#define SRELL_NOEXCEPT
#else
#define SRELL_NOEXCEPT noexcept
#endif
#endif
#ifdef __cpp_char8_t
#ifndef SRELL_CPP20_CHAR8_ENABLED
#ifdef __cpp_lib_char8_t
#define SRELL_CPP20_CHAR8_ENABLED 2
#else
#define SRELL_CPP20_CHAR8_ENABLED 1
#endif
#endif
#endif
// The following SRELL_NO_* macros would be useful when wanting to
// reduce the size of a binary by turning off some feature(s).
#ifdef SRELL_NO_UNICODE_DATA
// Prevents Unicode data used for icase (case-insensitive) matching
// from being output into a resulting binary. In this case only the
// ASCII characters are case-folded when icase matching is performed
// (i.e., [A-Z] -> [a-z] only).
#define SRELL_NO_UNICODE_ICASE
// Disables the Unicode property (\p{...} and \P{...}) and prevents
// Unicode property data from being output into a resulting binary.
#define SRELL_NO_UNICODE_PROPERTY
#endif
// Prevents icase matching specific functions into a resulting binary.
// In this case the icase flag is ignored and icase matching becomes
// unavailable.
#ifdef SRELL_NO_ICASE
#ifndef SRELL_NO_UNICODE_ICASE
#define SRELL_NO_UNICODE_ICASE
#endif
#endif
// This macro might be removed in the future.
#ifdef SRELL_V1_COMPATIBLE
#ifndef SRELL_NO_UNICODE_PROPERTY
#define SRELL_NO_UNICODE_PROPERTY
#endif
#define SRELL_NO_NAMEDCAPTURE
#define SRELL_NO_SINGLELINE
#define SRELL_FIXEDWIDTHLOOKBEHIND
#endif
namespace srell
{
// ["regex_constants.h" ...
namespace regex_constants
{
enum syntax_option_type
{
icase = 1 << 0,
nosubs = 1 << 1,
optimize = 1 << 2,
collate = 1 << 3,
ECMAScript = 1 << 4,
basic = 1 << 5,
extended = 1 << 6,
awk = 1 << 7,
grep = 1 << 8,
egrep = 1 << 9,
multiline = 1 << 10,
// SRELL's extension.
dotall = 1 << 11 // singleline.
};
inline syntax_option_type operator&(const syntax_option_type left, const syntax_option_type right)
{
return static_cast<syntax_option_type>(static_cast<int>(left) & static_cast<int>(right));
}
inline syntax_option_type operator|(const syntax_option_type left, const syntax_option_type right)
{
return static_cast<syntax_option_type>(static_cast<int>(left) | static_cast<int>(right));
}
inline syntax_option_type operator^(const syntax_option_type left, const syntax_option_type right)
{
return static_cast<syntax_option_type>(static_cast<int>(left) ^ static_cast<int>(right));
}
inline syntax_option_type operator~(const syntax_option_type b)
{
return static_cast<syntax_option_type>(~static_cast<int>(b));
}
inline syntax_option_type &operator&=(syntax_option_type &left, const syntax_option_type right)
{
left = left & right;
return left;
}
inline syntax_option_type &operator|=(syntax_option_type &left, const syntax_option_type right)
{
left = left | right;
return left;
}
inline syntax_option_type &operator^=(syntax_option_type &left, const syntax_option_type right)
{
left = left ^ right;
return left;
}
}
// namespace regex_constants
namespace regex_constants
{
enum match_flag_type
{
match_default = 0,
match_not_bol = 1 << 0,
match_not_eol = 1 << 1,
match_not_bow = 1 << 2,
match_not_eow = 1 << 3,
match_any = 1 << 4,
match_not_null = 1 << 5,
match_continuous = 1 << 6,
match_prev_avail = 1 << 7,
format_default = 0,
format_sed = 1 << 8,
format_no_copy = 1 << 9,
format_first_only = 1 << 10,
// For internal use.
match_match_ = 1 << 11
};
inline match_flag_type operator&(const match_flag_type left, const match_flag_type right)
{
return static_cast<match_flag_type>(static_cast<int>(left) & static_cast<int>(right));
}
inline match_flag_type operator|(const match_flag_type left, const match_flag_type right)
{
return static_cast<match_flag_type>(static_cast<int>(left) | static_cast<int>(right));
}
inline match_flag_type operator^(const match_flag_type left, const match_flag_type right)
{
return static_cast<match_flag_type>(static_cast<int>(left) ^ static_cast<int>(right));
}
inline match_flag_type operator~(const match_flag_type b)
{
return static_cast<match_flag_type>(~static_cast<int>(b));
}
inline match_flag_type &operator&=(match_flag_type &left, const match_flag_type right)
{
left = left & right;
return left;
}
inline match_flag_type &operator|=(match_flag_type &left, const match_flag_type right)
{
left = left | right;
return left;
}
inline match_flag_type &operator^=(match_flag_type &left, const match_flag_type right)
{
left = left ^ right;
return left;
}
}
// namespace regex_constants
// 28.5, regex constants:
namespace regex_constants
{
typedef int error_type;
static const error_type error_collate = 100;
static const error_type error_ctype = 101;
static const error_type error_escape = 102;
static const error_type error_backref = 103;
static const error_type error_brack = 104;
static const error_type error_paren = 105;
static const error_type error_brace = 106;
static const error_type error_badbrace = 107;
static const error_type error_range = 108;
static const error_type error_space = 109;
static const error_type error_badrepeat = 110;
static const error_type error_complexity = 111;
static const error_type error_stack = 112;
// SRELL's extension.
static const error_type error_utf8 = 113;
#if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
static const error_type error_lookbehind = 200;
#endif
static const error_type error_internal = 999;
}
// namespace regex_constants
// ... "regex_constants.h"]
// ["regex_error.hpp" ...
// 28.6, class regex_error:
class regex_error : public std::runtime_error
{
public:
explicit regex_error(const regex_constants::error_type ecode)
: std::runtime_error("regex_error") // added for error C2512.
, ecode_(ecode)
{
}
regex_constants::error_type code() const
{
return ecode_;
}
private:
regex_constants::error_type ecode_;
};
// ... "regex_error.hpp"]
// ["rei_type.h" ...
namespace regex_internal
{
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef char32_t uchar32;
#elif defined(UINT_MAX) && UINT_MAX >= 0xFFFFFFFF
typedef unsigned int uchar32;
#elif defined(ULONG_MAX) && ULONG_MAX >= 0xFFFFFFFF
typedef unsigned long uchar32;
#else
#error could not find a suitable type for 32-bit Unicode integer values.
#endif // defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef uchar32 uint_l32; // uint_least32.
} // regex_internal
// ... "rei_type.h"]
// ["rei_constants.h" ...
namespace regex_internal
{
enum re_state_type
{
st_character, // 0x00
st_character_class, // 0x01
st_epsilon, // 0x02
st_check_counter, // 0x03
// st_increment_counter, // 0x04
st_decrement_counter, // 0x04
st_save_and_reset_counter, // 0x05
st_restore_counter, // 0x06
st_roundbracket_open, // 0x07
st_roundbracket_pop, // 0x08
st_roundbracket_close, // 0x09
st_repeat_in_push, // 0x0a
st_repeat_in_pop, // 0x0b
st_check_0_width_repeat, // 0x0c
st_backreference, // 0x0d
st_lookaround_open, // 0x0e
// st_lookaround_pop, // 0x10
st_bol, // 0x0f
st_eol, // 0x10
st_boundary, // 0x11
st_success, // 0x12
#if !defined(SRELLDBG_NO_NEXTPOS_OPT)
st_move_nextpos, // 0x13
#endif
st_lookaround_close = st_success,
st_zero_width_boundary = st_lookaround_open,
};
// re_state_type
namespace constants
{
static const uchar32 unicode_max_codepoint = 0x10ffff;
static const uchar32 invalid_u32value = static_cast<uchar32>(-1);
static const uchar32 max_u32value = static_cast<uchar32>(-2);
static const uchar32 asc_icase = 0x20;
static const uchar32 ccstr_empty = static_cast<uchar32>(-3);
}
// constants
namespace meta_char
{
static const uchar32 mc_exclam = 0x21; // '!'
static const uchar32 mc_dollar = 0x24; // '$'
static const uchar32 mc_rbraop = 0x28; // '('
static const uchar32 mc_rbracl = 0x29; // ')'
static const uchar32 mc_astrsk = 0x2a; // '*'
static const uchar32 mc_plus = 0x2b; // '+'
static const uchar32 mc_comma = 0x2c; // ','
static const uchar32 mc_minus = 0x2d; // '-'
static const uchar32 mc_period = 0x2e; // '.'
static const uchar32 mc_colon = 0x3a; // ':'
static const uchar32 mc_lt = 0x3c; // '<'
static const uchar32 mc_eq = 0x3d; // '='
static const uchar32 mc_gt = 0x3e; // '>'
static const uchar32 mc_query = 0x3f; // '?'
static const uchar32 mc_sbraop = 0x5b; // '['
static const uchar32 mc_escape = 0x5c; // '\\'
static const uchar32 mc_sbracl = 0x5d; // ']'
static const uchar32 mc_caret = 0x5e; // '^'
static const uchar32 mc_cbraop = 0x7b; // '{'
static const uchar32 mc_bar = 0x7c; // '|'
static const uchar32 mc_cbracl = 0x7d; // '}'
}
// meta_char
namespace char_ctrl
{
static const uchar32 cc_nul = 0x00; // '\0' //0x00:NUL
static const uchar32 cc_bs = 0x08; // '\b' //0x08:BS
static const uchar32 cc_htab = 0x09; // '\t' //0x09:HT
static const uchar32 cc_nl = 0x0a; // '\n' //0x0a:LF
static const uchar32 cc_vtab = 0x0b; // '\v' //0x0b:VT
static const uchar32 cc_ff = 0x0c; // '\f' //0x0c:FF
static const uchar32 cc_cr = 0x0d; // '\r' //0x0d:CR
}
// char_ctrl
namespace char_alnum
{
static const uchar32 ch_0 = 0x30; // '0'
static const uchar32 ch_1 = 0x31; // '1'
static const uchar32 ch_7 = 0x37; // '7'
static const uchar32 ch_8 = 0x38; // '8'
static const uchar32 ch_9 = 0x39; // '9'
static const uchar32 ch_A = 0x41; // 'A'
static const uchar32 ch_B = 0x42; // 'B'
static const uchar32 ch_D = 0x44; // 'D'
static const uchar32 ch_F = 0x46; // 'F'
static const uchar32 ch_P = 0x50; // 'P'
static const uchar32 ch_S = 0x53; // 'S'
static const uchar32 ch_W = 0x57; // 'W'
static const uchar32 ch_Z = 0x5a; // 'Z'
static const uchar32 ch_a = 0x61; // 'a'
static const uchar32 ch_b = 0x62; // 'b'
static const uchar32 ch_c = 0x63; // 'c'
static const uchar32 ch_d = 0x64; // 'd'
static const uchar32 ch_f = 0x66; // 'f'
static const uchar32 ch_k = 0x6b; // 'k'
static const uchar32 ch_n = 0x6e; // 'n'
static const uchar32 ch_p = 0x70; // 'p'
static const uchar32 ch_r = 0x72; // 'r'
static const uchar32 ch_s = 0x73; // 's'
static const uchar32 ch_t = 0x74; // 't'
static const uchar32 ch_u = 0x75; // 'u'
static const uchar32 ch_v = 0x76; // 'v'
static const uchar32 ch_w = 0x77; // 'w'
static const uchar32 ch_x = 0x78; // 'x'
static const uchar32 ch_z = 0x7a; // 'z'
}
// char_alnum
namespace char_other
{
static const uchar32 co_sp = 0x20; // ' '
static const uchar32 co_amp = 0x26; // '&'
static const uchar32 co_apos = 0x27; // '\''
static const uchar32 co_slash = 0x2f; // '/'
static const uchar32 co_ll = 0x5f; // '_'
static const uchar32 co_grav = 0x60; // '`'
}
// char_other
}
// namespace regex_internal
// ... "rei_constants.h"]
// ["rei_utf_traits.hpp" ...
namespace regex_internal
{
template <typename charT>
struct utf_traits_core
{
public:
static const std::size_t maxseqlen = 1;
static const int utftype = 0;
static const std::size_t bitsetsize = 0x100;
static const uchar32 bitsetmask = 0xff;
static const uchar32 cumask = 0xff;
// *iter
template <typename ForwardIterator>
static uchar32 codepoint(ForwardIterator begin, const ForwardIterator /* end */)
{
return static_cast<uchar32>(*begin);
// Caller is responsible for begin != end.
}
// *iter++
template <typename ForwardIterator>
static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator /* end */)
{
return static_cast<uchar32>(*begin++);
// Caller is responsible for begin != end.
}
// iter2 = iter; return *--iter2;
template <typename BidirectionalIterator>
static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator /* begin */)
{
return static_cast<uchar32>(*--cur);
}
// *--iter
template <typename BidirectionalIterator>
static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator /* begin */)
{
return static_cast<uchar32>(*--cur);
// Caller is responsible for cur != begin.
}
#if !defined(SRELLDBG_NO_BMH)
template <typename charT2>
static bool is_trailing(const charT2 /* cu */)
{
return false;
}
#endif // !defined(SRELLDBG_NO_BMH)
static uchar32 to_codeunits(charT out[maxseqlen], uchar32 cp)
{
out[0] = static_cast<charT>(cp);
return 1;
}
static uchar32 firstcodeunit(const uchar32 cp)
{
return cp;
}
template <typename ForwardIterator>
static bool seek_charboundary(ForwardIterator &begin, const ForwardIterator end)
{
return begin != end;
}
}; // utf_traits_core
// common and utf-32.
template <typename charT>
struct utf_traits : public utf_traits_core<charT>
{
static const int utftype = 32;
static const std::size_t bitsetsize = 0x10000;
static const uchar32 bitsetmask = 0xffff;
static const uchar32 cumask = 0x1fffff;
}; // utf_traits
// utf-8 specific.
template <typename charT>
struct utf8_traits : public utf_traits_core<charT>
{
public:
// utf-8 specific.
static const std::size_t maxseqlen = 4;
static const int utftype = 8;
template <typename ForwardIterator>
static uchar32 codepoint(ForwardIterator begin, const ForwardIterator end)
{
// return codepoint_inc(begin, end);
uchar32 codepoint = static_cast<uchar32>(*begin & 0xff);
if ((codepoint & 0x80) == 0) // 1 octet.
return codepoint;
if (++begin != end && (codepoint >= 0xc0 && codepoint <= 0xf7) && (*begin & 0xc0) == 0x80)
{
codepoint = static_cast<uchar32>((codepoint << 6) | (*begin & 0x3f));
if ((codepoint & 0x800) == 0) // 2 octets.
return static_cast<uchar32>(codepoint & 0x7ff);
if (++begin != end && (*begin & 0xc0) == 0x80)
{
codepoint = static_cast<uchar32>((codepoint << 6) | (*begin & 0x3f));
if ((codepoint & 0x10000) == 0) // 3 octets.
return static_cast<uchar32>(codepoint & 0xffff);
if (++begin != end && (*begin & 0xc0) == 0x80) // 4 octets.
{
codepoint = static_cast<uchar32>((codepoint << 6) | (*begin & 0x3f));
return static_cast<uchar32>(codepoint & 0x1fffff);
}
}
}
// else // 80-bf, f8-ff: invalid.
return regex_internal::constants::invalid_u32value;
}
template <typename ForwardIterator>
static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator end)
{
uchar32 codepoint = static_cast<uchar32>(*begin++ & 0xff);
if ((codepoint & 0x80) == 0) // 1 octet.
return codepoint;
// Expects transformation to (codepoint - 0xc0) <= 0x37 by optimisation.
// 0xF7 instead of 0xF4 is for consistency with reverse iterators.
if (begin != end && (codepoint >= 0xc0 && codepoint <= 0xf7) && (*begin & 0xc0) == 0x80)
// if (begin != end && (0x7f00 & (1 << ((codepoint >> 3) & 0xf))) && (*begin & 0xc0) == 0x80) // c0, c8, d0, d8, e0, e8, f0.
{
codepoint = static_cast<uchar32>((codepoint << 6) | (*begin++ & 0x3f));
// 11 ?aaa aabb bbbb
if ((codepoint & 0x800) == 0) // 2 octets.
return static_cast<uchar32>(codepoint & 0x7ff);
// c080-c1bf: invalid. 00-7F.
// c280-dfbf: valid. 080-7FF.
// 11 1aaa aabb bbbb
if (begin != end && (*begin & 0xc0) == 0x80)
{
codepoint = static_cast<uchar32>((codepoint << 6) | (*begin++ & 0x3f));
// 111? aaaa bbbb bbcc cccc
if ((codepoint & 0x10000) == 0) // 3 octets.
return static_cast<uchar32>(codepoint & 0xffff);
// e08080-e09fbf: invalid. 000-7FF.
// e0a080-efbfbf: valid. 0800-FFFF.
// 1111 0aaa bbbb bbcc cccc
if (begin != end && (*begin & 0xc0) == 0x80) // 4 octets.
{
codepoint = static_cast<uchar32>((codepoint << 6) | (*begin++ & 0x3f));
// f0808080-f08fbfbf: invalid. 0000-FFFF.
// f0908080-f3bfbfbf: valid. 10000-FFFFF.
// f4808080-f48fbfbf: valid. 100000-10FFFF.
// f4908080-f4bfbfbf: invalid. 110000-13FFFF.
// f5808080-f7bfbfbf: invalid. 140000-1FFFFF.
// 11 110a aabb bbbb cccc ccdd dddd
return static_cast<uchar32>(codepoint & 0x1fffff);
}
}
}
// else // 80-bf, f8-ff: invalid.
return regex_internal::constants::invalid_u32value;
}
template <typename BidirectionalIterator>
static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator begin)
{
uchar32 codepoint = static_cast<uchar32>(*--cur);
if ((codepoint & 0x80) == 0)
return static_cast<uchar32>(codepoint & 0xff);
if ((codepoint & 0x40) == 0 && cur != begin)
{
codepoint = static_cast<uchar32>((codepoint & 0x3f) | (*--cur << 6));
if ((codepoint & 0x3800) == 0x3000) // 2 octets.
return static_cast<uchar32>(codepoint & 0x7ff);
if ((codepoint & 0x3000) == 0x2000 && cur != begin)
{
codepoint = static_cast<uchar32>((codepoint & 0xfff) | (*--cur << 12));
if ((codepoint & 0xf0000) == 0xe0000) // 3 octets.
return static_cast<uchar32>(codepoint & 0xffff);
if ((codepoint & 0xc0000) == 0x80000 && cur != begin)
{
if ((*--cur & 0xf8) == 0xf0) // 4 octets.
return static_cast<uchar32>((codepoint & 0x3ffff) | ((*cur & 7) << 18));
}
}
}
return regex_internal::constants::invalid_u32value;
}
template <typename BidirectionalIterator>
static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator begin)
{
uchar32 codepoint = static_cast<uchar32>(*--cur);
if ((codepoint & 0x80) == 0)
return static_cast<uchar32>(codepoint & 0xff);
if ((codepoint & 0x40) == 0 && cur != begin)
{
codepoint = static_cast<uchar32>((codepoint & 0x3f) | (*--cur << 6));
// 11 0bbb bbaa aaaa?
if ((codepoint & 0x3800) == 0x3000) // 2 octets.
// if ((*cur & 0xe0) == 0xc0)
return static_cast<uchar32>(codepoint & 0x7ff);
// 10 bbbb bbaa aaaa?
if ((codepoint & 0x3000) == 0x2000 && cur != begin) // [\x80-\xbf]{2}.
// if ((*cur & 0xc0) == 0x80 && cur != begin)
{
codepoint = static_cast<uchar32>((codepoint & 0xfff) | (*--cur << 12));
// 1110 cccc bbbb bbaa aaaa?
if ((codepoint & 0xf0000) == 0xe0000) // 3 octets.
// if ((*cur & 0xf0) == 0xe0)
return static_cast<uchar32>(codepoint & 0xffff);
// 10cc cccc bbbb bbaa aaaa?
if ((codepoint & 0xc0000) == 0x80000 && cur != begin) // [\x80-\xbf]{3}.
// if ((*cur & 0xc0) == 0x80 && cur != begin)
{
if ((*--cur & 0xf8) == 0xf0) // 4 octets.
return static_cast<uchar32>((codepoint & 0x3ffff) | ((*cur & 7) << 18));
// d ddcc cccc bbbb bbaa aaaa
//else // [\0-\xef\xf8-\xff][\x80-\xbf]{3}.
// Sequences [\xc0-\xdf][\x80-\xbf] and [\xe0-\xef][\x80-\xbf]{2} are valid.
// To give a chance to them, rewinds cur.
++cur;
}
//else // [\0-\x7f\xc0-\xdf\xf0-\xff][\x80-\xbf]{2}.
++cur; // Sequence [\xc0-\xdf][\x80-\xbf] is valid. Rewinds to give a chance to it.
}
//else // [\0-\x7f\xe0-\xff][\x80-\xbf].
++cur; // Rewinds to give a chance to [\0-\x7f].
}
//else // [\xc0-\xff].
return regex_internal::constants::invalid_u32value;
}
#if !defined(SRELLDBG_NO_BMH)
template <typename charT2>
static bool is_trailing(const charT2 cu)
{
return (cu & 0xc0) == 0x80;
}
#endif // !defined(SRELLDBG_NO_BMH)
static uchar32 to_codeunits(charT out[maxseqlen], uchar32 cp)
{
if (cp < 0x80)
{
out[0] = static_cast<charT>(cp);
return 1;
}
else if (cp < 0x800)
{
out[0] = static_cast<charT>(((cp >> 6) & 0x1f) | 0xc0);
out[1] = static_cast<charT>((cp & 0x3f) | 0x80);
return 2;
}
else if (cp < 0x10000)
{
out[0] = static_cast<charT>(((cp >> 12) & 0x0f) | 0xe0);
out[1] = static_cast<charT>(((cp >> 6) & 0x3f) | 0x80);
out[2] = static_cast<charT>((cp & 0x3f) | 0x80);
return 3;
}
// else // if (cp < 0x110000)
{
out[0] = static_cast<charT>(((cp >> 18) & 0x07) | 0xf0);
out[1] = static_cast<charT>(((cp >> 12) & 0x3f) | 0x80);
out[2] = static_cast<charT>(((cp >> 6) & 0x3f) | 0x80);
out[3] = static_cast<charT>((cp & 0x3f) | 0x80);
return 4;
}
}
static uchar32 firstcodeunit(const uchar32 cp)
{
if (cp < 0x80)
return cp;
if (cp < 0x800)
return static_cast<uchar32>(((cp >> 6) & 0x1f) | 0xc0);
if (cp < 0x10000)
return static_cast<uchar32>(((cp >> 12) & 0x0f) | 0xe0);
return static_cast<uchar32>(((cp >> 18) & 0x07) | 0xf0);
}
template <typename ForwardIterator>
static bool seek_charboundary(ForwardIterator &begin, const ForwardIterator end)
{
for (; begin != end; ++begin)
{
// if ((*begin & 0xc0) != 0x80 && (*begin & 0xf8) != 0xf8) // 00-7f, c0-f7.
if ((*begin & 0xc0) != 0x80) // 00-7f, c0-ff.
return true;
}
return false;
}
}; // utf8_traits
// utf-16 specific.
template <typename charT>
struct utf16_traits : public utf_traits_core<charT>
{
public:
// utf-16 specific.
static const std::size_t maxseqlen = 2;
static const int utftype = 16;
static const std::size_t bitsetsize = 0x10000;
static const uchar32 bitsetmask = 0xffff;
static const uchar32 cumask = 0xffff;
template <typename ForwardIterator>
static uchar32 codepoint(ForwardIterator begin, const ForwardIterator end)
{
const uchar32 codeunit = *begin;
if ((codeunit & 0xdc00) != 0xd800)
return static_cast<uchar32>(codeunit & 0xffff);
if (++begin != end && (*begin & 0xdc00) == 0xdc00)
return static_cast<uchar32>((((codeunit & 0x3ff) << 10) | (*begin & 0x3ff)) + 0x10000);
return static_cast<uchar32>(codeunit & 0xffff);
}
template <typename ForwardIterator>
static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator end)
{
const uchar32 codeunit = *begin++;
if ((codeunit & 0xdc00) != 0xd800)
return static_cast<uchar32>(codeunit & 0xffff);
if (begin != end && (*begin & 0xdc00) == 0xdc00)
return static_cast<uchar32>((((codeunit & 0x3ff) << 10) | (*begin++ & 0x3ff)) + 0x10000);
return static_cast<uchar32>(codeunit & 0xffff);
}
template <typename BidirectionalIterator>
static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator begin)
{
const uchar32 codeunit = *--cur;
if ((codeunit & 0xdc00) != 0xdc00 || cur == begin)
return static_cast<uchar32>(codeunit & 0xffff);
if ((*--cur & 0xdc00) == 0xd800)
return static_cast<uchar32>((((*cur & 0x3ff) << 10) | (codeunit & 0x3ff)) + 0x10000);
return static_cast<uchar32>(codeunit & 0xffff);
}
template <typename BidirectionalIterator>
static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator begin)
{
const uchar32 codeunit = *--cur;
if ((codeunit & 0xdc00) != 0xdc00 || cur == begin)
return static_cast<uchar32>(codeunit & 0xffff);
if ((*--cur & 0xdc00) == 0xd800)
return static_cast<uchar32>((((*cur & 0x3ff) << 10) | (codeunit & 0x3ff)) + 0x10000);
//else // (codeunit & 0xdc00) == 0xdc00 && (*cur & 0xdc00) != 0xd800
++cur;
return static_cast<uchar32>(codeunit & 0xffff);
}
#if !defined(SRELLDBG_NO_BMH)
template <typename charT2>
static bool is_trailing(const charT2 cu)
{
return (cu & 0xdc00) == 0xdc00;
}
#endif // !defined(SRELLDBG_NO_BMH)
static uchar32 to_codeunits(charT out[maxseqlen], uchar32 cp)
{
if (cp < 0x10000)
{
out[0] = static_cast<charT>(cp);
return 1;
}
// else // if (cp < 0x110000)
{
cp -= 0x10000;
out[0] = static_cast<charT>(((cp >> 10) & 0x3ff) | 0xd800);
out[1] = static_cast<charT>((cp & 0x3ff) | 0xdc00);
return 2;
}
}
static uchar32 firstcodeunit(const uchar32 cp)
{
if (cp < 0x10000)
return cp;
return static_cast<uchar32>((cp >> 10) + 0xd7c0);
// aaaaa bbbbcccc ddddeeee -> AA AAbb bbcc/cc dddd eeee where AAAA = aaaaa - 1.
}
template <typename ForwardIterator>
static bool seek_charboundary(ForwardIterator &begin, const ForwardIterator end)
{
for (; begin != end; ++begin)
{
if ((*begin & 0xdc00) != 0xdc00)
return true;
}
return false;
}
}; // utf16_traits
// specialisation for char.
template <>
struct utf_traits<char> : public utf_traits_core<char>
{
public:
template <typename ForwardIterator>
static uchar32 codepoint(ForwardIterator begin, const ForwardIterator /* end */)
{
return static_cast<uchar32>(static_cast<unsigned char>(*begin));
}
template <typename ForwardIterator>
static uchar32 codepoint_inc(ForwardIterator &begin, const ForwardIterator /* end */)
{
return static_cast<uchar32>(static_cast<unsigned char>(*begin++));
}
template <typename BidirectionalIterator>
static uchar32 prevcodepoint(BidirectionalIterator cur, const BidirectionalIterator /* begin */)
{
return static_cast<uchar32>(static_cast<unsigned char>(*--cur));
}
template <typename BidirectionalIterator>
static uchar32 dec_codepoint(BidirectionalIterator &cur, const BidirectionalIterator /* begin */)
{
return static_cast<uchar32>(static_cast<unsigned char>(*--cur));
}
#if !defined(SRELLDBG_NO_BMH)
#endif // !defined(SRELLDBG_NO_BMH)
}; // utf_traits<char>
// specialisation for signed char.
template <>
struct utf_traits<signed char> : public utf_traits<char>
{
};
// (signed) short, (signed) int, (signed) long, (signed) long long, ...
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
template <>
struct utf_traits<char16_t> : public utf16_traits<char16_t>
{
};
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED)
template <>
struct utf_traits<char8_t> : public utf8_traits<char8_t>
{
};
#endif
} // regex_internal
// ... "rei_utf_traits.hpp"]
// ["regex_traits.hpp" ...
// 28.7, class template regex_traits:
template <class charT>
struct regex_traits
{
public:
typedef charT char_type;
typedef std::basic_string<char_type> string_type;
typedef std::locale locale_type;
// typedef bitmask_type char_class_type;
typedef int char_class_type;
typedef regex_internal::utf_traits<charT> utf_traits;
public:
// regex_traits();
static std::size_t length(const char_type *p)
{
return std::char_traits<charT>::length(p);
}
charT translate(const charT c) const
{
return c;
}
charT translate_nocase(const charT c) const
{
return c;
}
template <class ForwardIterator>
string_type transform(ForwardIterator first, ForwardIterator last) const
{
return string_type(first, last);
}
template <class ForwardIterator>
string_type transform_primary(ForwardIterator first, ForwardIterator last) const
{
return string_type(first, last);
}
template <class ForwardIterator>
string_type lookup_collatename(ForwardIterator first, ForwardIterator last) const
{
return string_type(first, last);
}
template <class ForwardIterator>
char_class_type lookup_classname(ForwardIterator /* first */, ForwardIterator /* last */, bool /* icase */ = false) const
{
return static_cast<char_class_type>(0);
}
bool isctype(const charT /* c */, const char_class_type /* f */) const
{
return false;
}
int value(const charT /* ch */, const int /* radix */) const
{
return -1;
}
locale_type imbue(const locale_type /* l */)
{
return locale_type();
}
locale_type getloc() const
{
return locale_type();
}
}; // regex_traits
template <class charT>
struct u8regex_traits : public regex_traits<charT>
{
typedef regex_internal::utf8_traits<charT> utf_traits;
};
template <class charT>
struct u16regex_traits : public regex_traits<charT>
{
typedef regex_internal::utf16_traits<charT> utf_traits;
};
// ... "regex_traits.hpp"]
// ["rei_memory.hpp" ...
namespace regex_internal
{
/*
* Similar to std::basic_string, except for:
* a. only allocates memory, does not initialise it.
* b. uses realloc() to avoid moving data as much as possible when
* resizing an allocated buffer.
*/
template <typename ElemT>
class simple_array
{
public:
typedef ElemT value_type;
typedef std::size_t size_type;
typedef ElemT &reference;
typedef const ElemT &const_reference;
typedef ElemT *pointer;
typedef const ElemT *const_pointer;
static const size_type npos = static_cast<size_type>(-1);
public:
simple_array()
: buffer_(NULL)
, size_(0)
, capacity_(0)
{
}
simple_array(const size_type initsize)
: buffer_(NULL)
, size_(0)
, capacity_(0)
{
if (initsize)
{
buffer_ = static_cast<pointer>(std::malloc(initsize * sizeof (ElemT)));
if (buffer_ != NULL)
size_ = capacity_ = initsize;
else
throw std::bad_alloc();
}
}
simple_array(const simple_array &right, size_type pos, size_type len = npos)
: buffer_(NULL)
, size_(0)
, capacity_(0)
{
if (pos > right.size_)
pos = right.size_;
{
const size_type len2 = right.size_ - pos;
if (len > len2)
len = len2;
}
if (len)
{
buffer_ = static_cast<pointer>(std::malloc(len * sizeof (ElemT)));
if (buffer_ != NULL)
{
for (capacity_ = len; size_ < capacity_;)
buffer_[size_++] = right[pos++];
}
else
{
throw std::bad_alloc();
}
}
}
simple_array(const simple_array &right)
: buffer_(NULL)
, size_(0)
, capacity_(0)
{
operator=(right);
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
simple_array(simple_array &&right) SRELL_NOEXCEPT
: buffer_(right.buffer_)
, size_(right.size_)
, capacity_(right.capacity_)
{
right.size_ = 0;
right.capacity_ = 0;
right.buffer_ = NULL;
}
#endif
simple_array &operator=(const simple_array &right)
{
if (this != &right)
{
resize(right.size_);
for (size_type i = 0; i < right.size_; ++i)
buffer_[i] = right.buffer_[i];
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
simple_array &operator=(simple_array &&right) SRELL_NOEXCEPT
{
if (this != &right)
{
if (this->buffer_ != NULL)
std::free(this->buffer_);
this->size_ = right.size_;
this->capacity_ = right.capacity_;
this->buffer_ = right.buffer_;
right.size_ = 0;
right.capacity_ = 0;
right.buffer_ = NULL;
}
return *this;
}
#endif
~simple_array()
{
if (buffer_ != NULL)
std::free(buffer_);
}
size_type size() const
{
return size_;
}
void clear()
{
size_ = 0;
}
void resize(const size_type newsize)
{
if (newsize > capacity_)
reserve(newsize);
size_ = newsize;
}
void resize(const size_type newsize, const ElemT &type)
{
size_type oldsize = size_;
resize(newsize);
for (; oldsize < size_; ++oldsize)
buffer_[oldsize] = type;
}
reference operator[](const size_type pos)
{
return buffer_[pos];
}
const_reference operator[](const size_type pos) const
{
return buffer_[pos];
}
void push_back(const_reference n)
{
const size_type oldsize = size_;
if (++size_ > capacity_)
reserve(size_);
buffer_[oldsize] = n;
}
const_reference back() const
{
return buffer_[size_ - 1];
}
reference back()
{
return buffer_[size_ - 1];
}
void pop_back()
{
--size_;
}
simple_array &operator+=(const simple_array &right)
{
return append(right);
}
simple_array &append(const size_type size, const ElemT &type)
{
resize(size_ + size, type);
return *this;
}
simple_array &append(const simple_array &right)
{
size_type oldsize = size_;
resize(size_ + right.size_);
for (size_type i = 0; i < right.size_; ++i, ++oldsize)
buffer_[oldsize] = right.buffer_[i];
return *this;
}
simple_array &append(const simple_array &right, size_type pos, size_type len /* = npos */)
{
{
const size_type len2 = right.size_ - pos;
if (len > len2)
len = len2;
}
size_type oldsize = size_;
resize(size_ + len);
len += pos; // end.
for (; pos < len; ++oldsize, ++pos)
buffer_[oldsize] = right.buffer_[pos];
return *this;
}
// For rei_char_class class.
void erase(const size_type pos)
{
if (pos < size_)
{
std::memmove(buffer_ + pos, buffer_ + pos + 1, (size_ - pos - 1) * sizeof (ElemT));
--size_;
}
}
// For rei_compiler class.
void insert(const size_type pos, const ElemT &type)
{
move_forward(pos, 1);
buffer_[pos] = type;
}
void insert(size_type pos, const simple_array &right)
{
move_forward(pos, right.size_);
for (size_type i = 0; i < right.size_; ++i, ++pos)
buffer_[pos] = right.buffer_[i];
}
void insert(size_type destpos, const simple_array &right, size_type srcpos, size_type srclen = npos)
{
{
const size_type len2 = right.size_ - srcpos;
if (srclen > len2)
srclen = len2;
}
move_forward(destpos, srclen);
srclen += srcpos; // srcend.
for (; srcpos < srclen; ++destpos, ++srcpos)
buffer_[destpos] = right.buffer_[srcpos];
}
simple_array &replace(size_type pos, size_type count, const simple_array &right)
{
if (count < right.size_)
move_forward(pos + count, right.size_ - count);
else if (count > right.size_)
{
const pointer base = buffer_ + pos;
std::memmove(base + right.size_, base + count, (size_ - pos - count) * sizeof (ElemT));
size_ -= count - right.size_;
}
for (size_type i = 0; i < right.size_; ++pos, ++i)
buffer_[pos] = right[i];
return *this;
}
size_type find(const value_type c, size_type pos = 0) const
{
for (; pos <= size_; ++pos)
if (buffer_[pos] == c)
return pos;
return npos;
}
const_pointer data() const
{
return buffer_;
}
int compare(size_type pos, const size_type count1, const_pointer p, const size_type count2) const
{
size_type count = count1 <= count2 ? count1 : count2;
for (; count; ++pos, ++p, --count)
{
const value_type &v = buffer_[pos];
if (v != *p)
return v < *p ? -1 : 1;
}
return count1 == count2 ? 0 : (count1 < count2 ? -1 : 1);
}
size_type max_size() const
{
return maxsize_;
}
void swap(simple_array &right)
{
if (this != &right)
{
const pointer tmpbuffer = this->buffer_;
const size_type tmpsize = this->size_;
const size_type tmpcapacity = this->capacity_;
this->buffer_ = right.buffer_;
this->size_ = right.size_;
this->capacity_ = right.capacity_;
right.buffer_ = tmpbuffer;
right.size_ = tmpsize;
right.capacity_ = tmpcapacity;
}
}
private:
void reserve(const size_type newsize)
{
// if (newsize > capacity_)
{
if (newsize <= maxsize_)
{
// capacity_ = newsize + (newsize >> 1); // newsize * 1.5.
capacity_ = ((newsize >> 8) + 1) << 8; // Round up to a multiple of 256.
if (capacity_ > maxsize_)
capacity_ = maxsize_;
const size_type newsize_in_byte = capacity_ * sizeof (ElemT);
const pointer oldbuffer = buffer_;
buffer_ = static_cast<pointer>(std::realloc(buffer_, newsize_in_byte));
if (buffer_ != NULL)
return;
// Even if realloc() failed, already-existing buffer remains valid.
std::free(oldbuffer);
// buffer_ = NULL;
size_ = capacity_ = 0;
}
throw std::bad_alloc();
}
}
void move_forward(const size_type pos, const size_type count)
{
const size_type oldsize = size_;
resize(size_ + count);
if (pos < oldsize)
{
const pointer base = buffer_ + pos;
std::memmove(base + count, base, (oldsize - pos) * sizeof (ElemT));
}
}
private:
pointer buffer_;
size_type size_;
size_type capacity_;
// static const size_type maxsize_ = (npos - sizeof (simple_array)) / sizeof (ElemT);
static const size_type maxsize_ = (npos - sizeof (pointer) - sizeof (size_type) * 2) / sizeof (ElemT) / 2;
};
// simple_array
} // namespace regex_internal
// ... "rei_memory.hpp"]
// ["rei_bitset.hpp" ...
namespace regex_internal
{
// Always uses a heap instead of the stack.
template <const std::size_t Bits>
class bitset
{
private:
typedef unsigned long array_type;
public:
bitset()
: buffer_(static_cast<array_type *>(std::malloc(size_in_byte_)))
{
if (buffer_ != NULL)
{
reset();
return;
}
throw std::bad_alloc();
}
bitset(const bitset &right)
: buffer_(static_cast<array_type *>(std::malloc(size_in_byte_)))
{
if (buffer_ != NULL)
{
operator=(right);
return;
}
throw std::bad_alloc();
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
bitset(bitset &&right) SRELL_NOEXCEPT
: buffer_(right.buffer_)
{
right.buffer_ = NULL;
}
#endif
bitset &operator=(const bitset &right)
{
if (this != &right)
{
// for (std::size_t i = 0; i < arraylength_; ++i)
// buffer_[i] = right.buffer_[i];
std::memcpy(buffer_, right.buffer_, size_in_byte_);
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
bitset &operator=(bitset &&right) SRELL_NOEXCEPT
{
if (this != &right)
{
if (this->buffer_ != NULL)
std::free(this->buffer_);
this->buffer_ = right.buffer_;
right.buffer_ = NULL;
}
return *this;
}
#endif
~bitset()
{
if (buffer_ != NULL)
std::free(buffer_);
}
bitset &reset()
{
std::memset(buffer_, 0, size_in_byte_);
return *this;
}
bitset &reset(const std::size_t bit)
{
buffer_[bit / bits_per_elem_] &= ~(1 << (bit & bitmask_));
return *this;
}
bitset &set(const std::size_t bit)
{
buffer_[bit / bits_per_elem_] |= (1 << (bit & bitmask_));
return *this;
}
#if 0
void set_range(const std::size_t firstbit, const std::size_t lastbit)
{
const std::size_t lastelemidx = lastbit / bits_per_elem_;
std::size_t firstelemidx = firstbit / bits_per_elem_;
const array_type lastelemmask = ~(allbits1_ << ((lastbit & bitmask_) + 1));
array_type ormask = allbits1_ << (firstbit & bitmask_);
if (firstelemidx < lastelemidx)
{
buffer_[firstelemidx] |= ormask;
ormask = allbits1_;
for (++firstelemidx; firstelemidx < lastelemidx; ++firstelemidx)
buffer_[firstelemidx] |= ormask;
}
ormask &= lastelemmask;
buffer_[lastelemidx] |= ormask;
}
#endif
bool test(const std::size_t bit) const
{
return (buffer_[bit / bits_per_elem_] & (1 << (bit & bitmask_))) != 0;
}
bool operator[](const std::size_t bit) const
{
return (buffer_[bit / bits_per_elem_] & (1 << (bit & bitmask_))) != 0;
}
bitset<Bits> &flip()
{
for (std::size_t i = 0; i < arraylength_; ++i)
buffer_[i] = ~buffer_[i];
return *this;
}
void swap(bitset &right)
{
if (this != &right)
{
array_type *const tmpbuffer = this->buffer_;
this->buffer_ = right.buffer_;
right.buffer_ = tmpbuffer;
}
}
private:
#if defined(__cpp_constexpr)
static constexpr std::size_t pow2leN(const std::size_t n, const std::size_t p2)
{
return ((p2 << 1) == 0 || (p2 << 1) > n) ? p2 : pow2leN(n, p2 << 1);
}
static const std::size_t bits_per_elem_ = pow2leN(CHAR_BIT * sizeof (array_type), 8);
#else
static const std::size_t bpe_tmp_ = CHAR_BIT * sizeof (array_type);
static const std::size_t bits_per_elem_ = bpe_tmp_ >= 64 ? 64 : (bpe_tmp_ >= 32 ? 32 : (bpe_tmp_ >= 16 ? 16 : 8));
#endif
static const std::size_t bitmask_ = bits_per_elem_ - 1;
static const std::size_t arraylength_ = (Bits + bitmask_) / bits_per_elem_;
static const std::size_t size_in_byte_ = arraylength_ * sizeof (array_type);
static const array_type allbits1_ = ~static_cast<array_type>(0);
array_type *buffer_;
};
} // namespace regex_internal
// ... "rei_bitset.hpp"]
// ["rei_ucf.hpp" ...
namespace regex_internal
{
#if !defined(SRELL_NO_UNICODE_ICASE)
// ["srell_ucfdata2.hpp" ...
// CaseFolding-14.0.0.txt
// Date: 2021-03-08, 19:35:41 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
template <typename T2, typename T3>
struct unicode_casefolding
{
static const T2 ucf_maxcodepoint = 0x1E921;
static const T3 ucf_deltatablesize = 0x1900;
static const T2 rev_maxcodepoint = 0x1E943;
static const T3 rev_indextablesize = 0x1B00;
static const T3 rev_charsettablesize = 4303; // 1 + 1424 * 2 + 1454
static const T3 rev_maxset = 4;
static const T2 eos = 0;
static const T2 ucf_deltatable[];
static const T3 ucf_segmenttable[];
static const T3 rev_indextable[];
static const T3 rev_segmenttable[];
static const T2 rev_charsettable[];
static const T2 *ucf_deltatable_ptr()
{
return ucf_deltatable;
}
static const T3 *ucf_segmenttable_ptr()
{
return ucf_segmenttable;
}
static const T3 *rev_indextable_ptr()
{
return rev_indextable;
}
static const T3 *rev_segmenttable_ptr()
{
return rev_segmenttable;
}
static const T2 *rev_charsettable_ptr()
{
return rev_charsettable;
}
};
template <typename T2, typename T3>
const T2 unicode_casefolding<T2, T3>::ucf_deltatable[] =
{
// For common (0)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+00xx (256)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+01xx (512)
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, static_cast<T2>(-121), 1, 0, 1, 0, 1, 0, static_cast<T2>(-268),
0, 210, 1, 0, 1, 0, 206, 1, 0, 205, 205, 1, 0, 0, 79, 202,
203, 1, 0, 205, 207, 0, 211, 209, 1, 0, 0, 0, 211, 213, 0, 214,
1, 0, 1, 0, 1, 0, 218, 1, 0, 218, 0, 0, 1, 0, 218, 1,
0, 217, 217, 1, 0, 1, 0, 219, 1, 0, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 0, 1,
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 2, 1, 0, 1, 0, static_cast<T2>(-97), static_cast<T2>(-56), 1, 0, 1, 0, 1, 0, 1, 0,
// For u+02xx (768)
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
static_cast<T2>(-130), 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10795, 1, 0, static_cast<T2>(-163), 10792, 0,
0, 1, 0, static_cast<T2>(-195), 69, 71, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+03xx (1024)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116,
0, 0, 0, 0, 0, 0, 38, 0, 37, 37, 37, 0, 64, 0, 63, 63,
0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
static_cast<T2>(-30), static_cast<T2>(-25), 0, 0, 0, static_cast<T2>(-15), static_cast<T2>(-22), 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
static_cast<T2>(-54), static_cast<T2>(-48), 0, 0, static_cast<T2>(-60), static_cast<T2>(-64), 0, 1, 0, static_cast<T2>(-7), 1, 0, 0, static_cast<T2>(-130), static_cast<T2>(-130), static_cast<T2>(-130),
// For u+04xx (1280)
80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
15, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
// For u+05xx (1536)
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+10xx (1792)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264,
7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264,
7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, 0, 0, 0, 0, 0, 7264, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+13xx (2048)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), 0, 0,
// For u+1Cxx (2304)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
static_cast<T2>(-6222), static_cast<T2>(-6221), static_cast<T2>(-6212), static_cast<T2>(-6210), static_cast<T2>(-6210), static_cast<T2>(-6211), static_cast<T2>(-6204), static_cast<T2>(-6180), 35267, 0, 0, 0, 0, 0, 0, 0,
static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008),
static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008),
static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008), 0, 0, static_cast<T2>(-3008), static_cast<T2>(-3008), static_cast<T2>(-3008),
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+1Exx (2560)
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, static_cast<T2>(-58), 0, 0, static_cast<T2>(-7615), 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
// For u+1Fxx (2816)
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), 0, static_cast<T2>(-8), 0, static_cast<T2>(-8), 0, static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-8),
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-74), static_cast<T2>(-74), static_cast<T2>(-9), 0, static_cast<T2>(-7173), 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-86), static_cast<T2>(-86), static_cast<T2>(-86), static_cast<T2>(-86), static_cast<T2>(-9), 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-100), static_cast<T2>(-100), 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-8), static_cast<T2>(-8), static_cast<T2>(-112), static_cast<T2>(-112), static_cast<T2>(-7), 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-128), static_cast<T2>(-128), static_cast<T2>(-126), static_cast<T2>(-126), static_cast<T2>(-9), 0, 0, 0,
// For u+21xx (3072)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, static_cast<T2>(-7517), 0, 0, 0, static_cast<T2>(-8383), static_cast<T2>(-8262), 0, 0, 0, 0,
0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+24xx (3328)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+2Cxx (3584)
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, static_cast<T2>(-10743), static_cast<T2>(-3814), static_cast<T2>(-10727), 0, 0, 1, 0, 1, 0, 1, 0, static_cast<T2>(-10780), static_cast<T2>(-10749), static_cast<T2>(-10783),
static_cast<T2>(-10782), 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, static_cast<T2>(-10815), static_cast<T2>(-10815),
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+A6xx (3840)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+A7xx (4096)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, static_cast<T2>(-35332), 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, static_cast<T2>(-42280), 0, 0,
1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, static_cast<T2>(-42308), static_cast<T2>(-42319), static_cast<T2>(-42315), static_cast<T2>(-42305), static_cast<T2>(-42308), 0,
static_cast<T2>(-42258), static_cast<T2>(-42282), static_cast<T2>(-42261), 928, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1, 0, 1, 0, static_cast<T2>(-48), static_cast<T2>(-42307), static_cast<T2>(-35384), 1, 0, 1, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+ABxx (4352)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864), static_cast<T2>(-38864),
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+FFxx (4608)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+104xx (4864)
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+105xx (5120)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39,
39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39,
39, 39, 39, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+10Cxx (5376)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+118xx (5632)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+16Exx (5888)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+1E9xx (6144)
34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
template <typename T2, typename T3>
const T3 unicode_casefolding<T2, T3>::ucf_segmenttable[] =
{
256, 512, 768, 1024, 1280, 1536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1792, 0, 0, 2048, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 0, 2560, 2816,
0, 3072, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 3584, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 3840, 4096, 0, 0, 0, 4352, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4608,
0, 0, 0, 0, 4864, 5120, 0, 0, 0, 0, 0, 0, 5376, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 5632, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5888, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 6144
};
template <typename T2, typename T3>
const T3 unicode_casefolding<T2, T3>::rev_indextable[] =
{
// For common (0)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+00xx (256)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 35, 38, 41, 44,
47, 50, 53, 56, 60, 63, 66, 69, 72, 75, 78, 0, 0, 0, 0, 0,
0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 35, 38, 41, 44,
47, 50, 53, 56, 60, 63, 66, 69, 72, 75, 78, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85, 88, 91, 94, 97, 100, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131,
134, 137, 140, 143, 146, 149, 152, 0, 155, 158, 161, 164, 167, 170, 173, 1924,
85, 88, 91, 94, 97, 100, 104, 107, 110, 113, 116, 119, 122, 125, 128, 131,
134, 137, 140, 143, 146, 149, 152, 0, 155, 158, 161, 164, 167, 170, 173, 350,
// For u+21xx (512)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 785, 0, 0, 0, 31, 100, 0, 0, 0, 0,
0, 0, 2359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2359, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2362, 2365, 2368, 2371, 2374, 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407,
2362, 2365, 2368, 2371, 2374, 2377, 2380, 2383, 2386, 2389, 2392, 2395, 2398, 2401, 2404, 2407,
0, 0, 0, 2410, 2410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+01xx (768)
176, 176, 179, 179, 182, 182, 185, 185, 188, 188, 191, 191, 194, 194, 197, 197,
200, 200, 203, 203, 206, 206, 209, 209, 212, 212, 215, 215, 218, 218, 221, 221,
224, 224, 227, 227, 230, 230, 233, 233, 236, 236, 239, 239, 242, 242, 245, 245,
0, 0, 248, 248, 251, 251, 254, 254, 0, 257, 257, 260, 260, 263, 263, 266,
266, 269, 269, 272, 272, 275, 275, 278, 278, 0, 281, 281, 284, 284, 287, 287,
290, 290, 293, 293, 296, 296, 299, 299, 302, 302, 305, 305, 308, 308, 311, 311,
314, 314, 317, 317, 320, 320, 323, 323, 326, 326, 329, 329, 332, 332, 335, 335,
338, 338, 341, 341, 344, 344, 347, 347, 350, 353, 353, 356, 356, 359, 359, 56,
651, 362, 365, 365, 368, 368, 371, 374, 374, 377, 380, 383, 383, 0, 386, 389,
392, 395, 395, 398, 401, 540, 404, 407, 410, 410, 642, 0, 413, 416, 606, 419,
422, 422, 425, 425, 428, 428, 431, 434, 434, 437, 0, 0, 440, 440, 443, 446,
446, 449, 452, 455, 455, 458, 458, 461, 464, 464, 0, 0, 467, 467, 0, 543,
0, 0, 0, 0, 470, 470, 470, 474, 474, 474, 478, 478, 478, 482, 482, 485,
485, 488, 488, 491, 491, 494, 494, 497, 497, 500, 500, 503, 503, 386, 506, 506,
509, 509, 512, 512, 515, 515, 518, 518, 521, 521, 524, 524, 527, 527, 530, 530,
0, 533, 533, 533, 537, 537, 540, 543, 546, 546, 549, 549, 552, 552, 555, 555,
// For u+03xx (1024)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
680, 680, 683, 683, 0, 0, 686, 686, 0, 0, 0, 843, 846, 849, 0, 689,
0, 0, 0, 0, 0, 0, 692, 0, 695, 698, 701, 0, 704, 0, 707, 710,
0, 713, 716, 720, 723, 726, 730, 733, 736, 675, 741, 745, 81, 748, 751, 754,
757, 761, 0, 765, 769, 772, 775, 779, 782, 785, 789, 792, 692, 695, 698, 701,
0, 713, 716, 720, 723, 726, 730, 733, 736, 675, 741, 745, 81, 748, 751, 754,
757, 761, 765, 765, 769, 772, 775, 779, 782, 785, 789, 792, 704, 707, 710, 795,
716, 736, 0, 0, 0, 775, 757, 795, 798, 798, 801, 801, 804, 804, 807, 807,
810, 810, 813, 813, 816, 816, 819, 819, 822, 822, 825, 825, 828, 828, 831, 831,
741, 761, 837, 689, 736, 726, 0, 834, 834, 837, 840, 840, 0, 843, 846, 849,
// For u+02xx (1280)
558, 558, 561, 561, 564, 564, 567, 567, 570, 570, 573, 573, 576, 576, 579, 579,
582, 582, 585, 585, 588, 588, 591, 591, 594, 594, 597, 597, 600, 600, 603, 603,
606, 0, 609, 609, 612, 612, 615, 615, 618, 618, 621, 621, 624, 624, 627, 627,
630, 630, 633, 633, 0, 0, 0, 0, 0, 0, 636, 639, 639, 642, 645, 2674,
2677, 648, 648, 651, 654, 657, 660, 660, 663, 663, 666, 666, 669, 669, 672, 672,
2662, 2656, 2665, 362, 371, 0, 377, 380, 0, 389, 0, 392, 3130, 0, 0, 0,
398, 3133, 0, 401, 0, 3088, 3127, 0, 407, 404, 3139, 2638, 3136, 0, 0, 413,
0, 2659, 416, 0, 0, 419, 0, 0, 0, 0, 0, 0, 0, 2644, 0, 0,
431, 0, 3181, 437, 0, 0, 0, 3145, 443, 654, 449, 452, 657, 0, 0, 0,
0, 0, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3148, 3142, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+2Cxx (1536)
2491, 2494, 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536,
2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584,
2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632,
2491, 2494, 2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536,
2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584,
2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632,
2635, 2635, 2638, 2641, 2644, 636, 645, 2647, 2647, 2650, 2650, 2653, 2653, 2656, 2659, 2662,
2665, 0, 2668, 2668, 0, 2671, 2671, 0, 0, 0, 0, 0, 0, 0, 2674, 2677,
2680, 2680, 2683, 2683, 2686, 2686, 2689, 2689, 2692, 2692, 2695, 2695, 2698, 2698, 2701, 2701,
2704, 2704, 2707, 2707, 2710, 2710, 2713, 2713, 2716, 2716, 2719, 2719, 2722, 2722, 2725, 2725,
2728, 2728, 2731, 2731, 2734, 2734, 2737, 2737, 2740, 2740, 2743, 2743, 2746, 2746, 2749, 2749,
2752, 2752, 2755, 2755, 2758, 2758, 2761, 2761, 2764, 2764, 2767, 2767, 2770, 2770, 2773, 2773,
2776, 2776, 2779, 2779, 2782, 2782, 2785, 2785, 2788, 2788, 2791, 2791, 2794, 2794, 2797, 2797,
2800, 2800, 2803, 2803, 2806, 2806, 2809, 2809, 2812, 2812, 2815, 2815, 2818, 2818, 2821, 2821,
2824, 2824, 2827, 2827, 0, 0, 0, 0, 0, 0, 0, 2830, 2830, 2833, 2833, 0,
0, 0, 2836, 2836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+1Fxx (1792)
2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092, 2071, 2074, 2077, 2080, 2083, 2086, 2089, 2092,
2095, 2098, 2101, 2104, 2107, 2110, 0, 0, 2095, 2098, 2101, 2104, 2107, 2110, 0, 0,
2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134, 2113, 2116, 2119, 2122, 2125, 2128, 2131, 2134,
2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158, 2137, 2140, 2143, 2146, 2149, 2152, 2155, 2158,
2161, 2164, 2167, 2170, 2173, 2176, 0, 0, 2161, 2164, 2167, 2170, 2173, 2176, 0, 0,
0, 2179, 0, 2182, 0, 2185, 0, 2188, 0, 2179, 0, 2182, 0, 2185, 0, 2188,
2191, 2194, 2197, 2200, 2203, 2206, 2209, 2212, 2191, 2194, 2197, 2200, 2203, 2206, 2209, 2212,
2293, 2296, 2302, 2305, 2308, 2311, 2323, 2326, 2344, 2347, 2335, 2338, 2350, 2353, 0, 0,
2215, 2218, 2221, 2224, 2227, 2230, 2233, 2236, 2215, 2218, 2221, 2224, 2227, 2230, 2233, 2236,
2239, 2242, 2245, 2248, 2251, 2254, 2257, 2260, 2239, 2242, 2245, 2248, 2251, 2254, 2257, 2260,
2263, 2266, 2269, 2272, 2275, 2278, 2281, 2284, 2263, 2266, 2269, 2272, 2275, 2278, 2281, 2284,
2287, 2290, 0, 2299, 0, 0, 0, 0, 2287, 2290, 2293, 2296, 2299, 0, 675, 0,
0, 0, 0, 2314, 0, 0, 0, 0, 2302, 2305, 2308, 2311, 2314, 0, 0, 0,
2317, 2320, 0, 0, 0, 0, 0, 0, 2317, 2320, 2323, 2326, 0, 0, 0, 0,
2329, 2332, 0, 0, 0, 2341, 0, 0, 2329, 2332, 2335, 2338, 2341, 0, 0, 0,
0, 0, 0, 2356, 0, 0, 0, 0, 2344, 2347, 2350, 2353, 2356, 0, 0, 0,
// For u+04xx (2048)
852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897,
900, 903, 906, 910, 913, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 948,
951, 954, 958, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000,
900, 903, 906, 910, 913, 917, 920, 923, 926, 929, 932, 935, 938, 941, 944, 948,
951, 954, 958, 963, 966, 969, 972, 975, 978, 981, 984, 988, 991, 994, 997, 1000,
852, 855, 858, 861, 864, 867, 870, 873, 876, 879, 882, 885, 888, 891, 894, 897,
1003, 1003, 1006, 1006, 1010, 1010, 1013, 1013, 1016, 1016, 1019, 1019, 1022, 1022, 1025, 1025,
1028, 1028, 1031, 1031, 1034, 1034, 1037, 1037, 1040, 1040, 1043, 1043, 1046, 1046, 1049, 1049,
1052, 1052, 0, 0, 0, 0, 0, 0, 0, 0, 1055, 1055, 1058, 1058, 1061, 1061,
1064, 1064, 1067, 1067, 1070, 1070, 1073, 1073, 1076, 1076, 1079, 1079, 1082, 1082, 1085, 1085,
1088, 1088, 1091, 1091, 1094, 1094, 1097, 1097, 1100, 1100, 1103, 1103, 1106, 1106, 1109, 1109,
1112, 1112, 1115, 1115, 1118, 1118, 1121, 1121, 1124, 1124, 1127, 1127, 1130, 1130, 1133, 1133,
1136, 1139, 1139, 1142, 1142, 1145, 1145, 1148, 1148, 1151, 1151, 1154, 1154, 1157, 1157, 1136,
1160, 1160, 1163, 1163, 1166, 1166, 1169, 1169, 1172, 1172, 1175, 1175, 1178, 1178, 1181, 1181,
1184, 1184, 1187, 1187, 1190, 1190, 1193, 1193, 1196, 1196, 1199, 1199, 1202, 1202, 1205, 1205,
1208, 1208, 1211, 1211, 1214, 1214, 1217, 1217, 1220, 1220, 1223, 1223, 1226, 1226, 1229, 1229,
// For u+1Cxx (2304)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
906, 913, 944, 954, 958, 958, 984, 1006, 1556, 0, 0, 0, 0, 0, 0, 0,
1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605,
1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653,
1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 0, 0, 1689, 1692, 1695,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+05xx (2560)
1232, 1232, 1235, 1235, 1238, 1238, 1241, 1241, 1244, 1244, 1247, 1247, 1250, 1250, 1253, 1253,
1256, 1256, 1259, 1259, 1262, 1262, 1265, 1265, 1268, 1268, 1271, 1271, 1274, 1274, 1277, 1277,
1280, 1280, 1283, 1283, 1286, 1286, 1289, 1289, 1292, 1292, 1295, 1295, 1298, 1298, 1301, 1301,
0, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346,
1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394,
1397, 1400, 1403, 1406, 1409, 1412, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1340, 1343, 1346,
1349, 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394,
1397, 1400, 1403, 1406, 1409, 1412, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+2Dxx (2816)
1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463,
1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511,
1514, 1517, 1520, 1523, 1526, 1529, 0, 1532, 0, 0, 0, 0, 0, 1535, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+10xx (3072)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1418, 1421, 1424, 1427, 1430, 1433, 1436, 1439, 1442, 1445, 1448, 1451, 1454, 1457, 1460, 1463,
1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511,
1514, 1517, 1520, 1523, 1526, 1529, 0, 1532, 0, 0, 0, 0, 0, 1535, 0, 0,
1560, 1563, 1566, 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602, 1605,
1608, 1611, 1614, 1617, 1620, 1623, 1626, 1629, 1632, 1635, 1638, 1641, 1644, 1647, 1650, 1653,
1656, 1659, 1662, 1665, 1668, 1671, 1674, 1677, 1680, 1683, 1686, 0, 0, 1689, 1692, 1695,
// For u+13xx (3328)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3205, 3208, 3211, 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250,
3253, 3256, 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298,
3301, 3304, 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, 3331, 3334, 3337, 3340, 3343, 3346,
3349, 3352, 3355, 3358, 3361, 3364, 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394,
3397, 3400, 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, 3439, 3442,
1538, 1541, 1544, 1547, 1550, 1553, 0, 0, 1538, 1541, 1544, 1547, 1550, 1553, 0, 0,
// For u+A6xx (3584)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2839, 2839, 2842, 2842, 2845, 2845, 2848, 2848, 2851, 2851, 1556, 1556, 2854, 2854, 2857, 2857,
2860, 2860, 2863, 2863, 2866, 2866, 2869, 2869, 2872, 2872, 2875, 2875, 2878, 2878, 2881, 2881,
2884, 2884, 2887, 2887, 2890, 2890, 2893, 2893, 2896, 2896, 2899, 2899, 2902, 2902, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2905, 2905, 2908, 2908, 2911, 2911, 2914, 2914, 2917, 2917, 2920, 2920, 2923, 2923, 2926, 2926,
2929, 2929, 2932, 2932, 2935, 2935, 2938, 2938, 2941, 2941, 2944, 2944, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+1Exx (3840)
1698, 1698, 1701, 1701, 1704, 1704, 1707, 1707, 1710, 1710, 1713, 1713, 1716, 1716, 1719, 1719,
1722, 1722, 1725, 1725, 1728, 1728, 1731, 1731, 1734, 1734, 1737, 1737, 1740, 1740, 1743, 1743,
1746, 1746, 1749, 1749, 1752, 1752, 1755, 1755, 1758, 1758, 1761, 1761, 1764, 1764, 1767, 1767,
1770, 1770, 1773, 1773, 1776, 1776, 1779, 1779, 1782, 1782, 1785, 1785, 1788, 1788, 1791, 1791,
1794, 1794, 1797, 1797, 1800, 1800, 1803, 1803, 1806, 1806, 1809, 1809, 1812, 1812, 1815, 1815,
1818, 1818, 1821, 1821, 1824, 1824, 1827, 1827, 1830, 1830, 1833, 1833, 1836, 1836, 1839, 1839,
1842, 1842, 1846, 1846, 1849, 1849, 1852, 1852, 1855, 1855, 1858, 1858, 1861, 1861, 1864, 1864,
1867, 1867, 1870, 1870, 1873, 1873, 1876, 1876, 1879, 1879, 1882, 1882, 1885, 1885, 1888, 1888,
1891, 1891, 1894, 1894, 1897, 1897, 1900, 1900, 1903, 1903, 1906, 1906, 1909, 1909, 1912, 1912,
1915, 1915, 1918, 1918, 1921, 1921, 0, 0, 0, 0, 0, 1842, 0, 0, 1924, 0,
1927, 1927, 1930, 1930, 1933, 1933, 1936, 1936, 1939, 1939, 1942, 1942, 1945, 1945, 1948, 1948,
1951, 1951, 1954, 1954, 1957, 1957, 1960, 1960, 1963, 1963, 1966, 1966, 1969, 1969, 1972, 1972,
1975, 1975, 1978, 1978, 1981, 1981, 1984, 1984, 1987, 1987, 1990, 1990, 1993, 1993, 1996, 1996,
1999, 1999, 2002, 2002, 2005, 2005, 2008, 2008, 2011, 2011, 2014, 2014, 2017, 2017, 2020, 2020,
2023, 2023, 2026, 2026, 2029, 2029, 2032, 2032, 2035, 2035, 2038, 2038, 2041, 2041, 2044, 2044,
2047, 2047, 2050, 2050, 2053, 2053, 2056, 2056, 2059, 2059, 2062, 2062, 2065, 2065, 2068, 2068,
// For u+24xx (4096)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 2413, 2416, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440,
2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488,
2413, 2416, 2419, 2422, 2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458,
2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+1Dxx (4352)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3067, 0, 0, 0, 2641, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3184, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+A7xx (4608)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 2947, 2947, 2950, 2950, 2953, 2953, 2956, 2956, 2959, 2959, 2962, 2962, 2965, 2965,
0, 0, 2968, 2968, 2971, 2971, 2974, 2974, 2977, 2977, 2980, 2980, 2983, 2983, 2986, 2986,
2989, 2989, 2992, 2992, 2995, 2995, 2998, 2998, 3001, 3001, 3004, 3004, 3007, 3007, 3010, 3010,
3013, 3013, 3016, 3016, 3019, 3019, 3022, 3022, 3025, 3025, 3028, 3028, 3031, 3031, 3034, 3034,
3037, 3037, 3040, 3040, 3043, 3043, 3046, 3046, 3049, 3049, 3052, 3052, 3055, 3055, 3058, 3058,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3061, 3061, 3064, 3064, 3067, 3070, 3070,
3073, 3073, 3076, 3076, 3079, 3079, 3082, 3082, 0, 0, 0, 3085, 3085, 3088, 0, 0,
3091, 3091, 3094, 3094, 3178, 0, 3097, 3097, 3100, 3100, 3103, 3103, 3106, 3106, 3109, 3109,
3112, 3112, 3115, 3115, 3118, 3118, 3121, 3121, 3124, 3124, 3127, 3130, 3133, 3136, 3139, 0,
3142, 3145, 3148, 3151, 3154, 3154, 3157, 3157, 3160, 3160, 3163, 3163, 3166, 3166, 3169, 3169,
3172, 3172, 3175, 3175, 3178, 3181, 3184, 3187, 3187, 3190, 3190, 0, 0, 0, 0, 0,
3193, 3193, 0, 0, 0, 0, 3196, 3196, 3199, 3199, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3202, 3202, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+ABxx (4864)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 3151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3205, 3208, 3211, 3214, 3217, 3220, 3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250,
3253, 3256, 3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292, 3295, 3298,
3301, 3304, 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328, 3331, 3334, 3337, 3340, 3343, 3346,
3349, 3352, 3355, 3358, 3361, 3364, 3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394,
3397, 3400, 3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436, 3439, 3442,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+FFxx (5120)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 3445, 3448, 3451, 3454, 3457, 3460, 3463, 3466, 3469, 3472, 3475, 3478, 3481, 3484, 3487,
3490, 3493, 3496, 3499, 3502, 3505, 3508, 3511, 3514, 3517, 3520, 0, 0, 0, 0, 0,
0, 3445, 3448, 3451, 3454, 3457, 3460, 3463, 3466, 3469, 3472, 3475, 3478, 3481, 3484, 3487,
3490, 3493, 3496, 3499, 3502, 3505, 3508, 3511, 3514, 3517, 3520, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+104xx (5376)
3523, 3526, 3529, 3532, 3535, 3538, 3541, 3544, 3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568,
3571, 3574, 3577, 3580, 3583, 3586, 3589, 3592, 3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616,
3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640, 3523, 3526, 3529, 3532, 3535, 3538, 3541, 3544,
3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568, 3571, 3574, 3577, 3580, 3583, 3586, 3589, 3592,
3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616, 3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3643, 3646, 3649, 3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688,
3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736,
3739, 3742, 3745, 3748, 0, 0, 0, 0, 3643, 3646, 3649, 3652, 3655, 3658, 3661, 3664,
3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688, 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712,
3715, 3718, 3721, 3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 0, 0, 0, 0,
// For u+105xx (5632)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3751, 3754, 3757, 3760, 3763, 3766, 3769, 3772, 3775, 3778, 3781, 0, 3784, 3787, 3790, 3793,
3796, 3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820, 3823, 3826, 0, 3829, 3832, 3835, 3838,
3841, 3844, 3847, 0, 3850, 3853, 0, 3751, 3754, 3757, 3760, 3763, 3766, 3769, 3772, 3775,
3778, 3781, 0, 3784, 3787, 3790, 3793, 3796, 3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820,
3823, 3826, 0, 3829, 3832, 3835, 3838, 3841, 3844, 3847, 0, 3850, 3853, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+10Cxx (5888)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3856, 3859, 3862, 3865, 3868, 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901,
3904, 3907, 3910, 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, 3943, 3946, 3949,
3952, 3955, 3958, 3961, 3964, 3967, 3970, 3973, 3976, 3979, 3982, 3985, 3988, 3991, 3994, 3997,
4000, 4003, 4006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3856, 3859, 3862, 3865, 3868, 3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901,
3904, 3907, 3910, 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940, 3943, 3946, 3949,
3952, 3955, 3958, 3961, 3964, 3967, 3970, 3973, 3976, 3979, 3982, 3985, 3988, 3991, 3994, 3997,
4000, 4003, 4006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+118xx (6144)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4009, 4012, 4015, 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, 4051, 4054,
4057, 4060, 4063, 4066, 4069, 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, 4096, 4099, 4102,
4009, 4012, 4015, 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048, 4051, 4054,
4057, 4060, 4063, 4066, 4069, 4072, 4075, 4078, 4081, 4084, 4087, 4090, 4093, 4096, 4099, 4102,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+16Exx (6400)
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4105, 4108, 4111, 4114, 4117, 4120, 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150,
4153, 4156, 4159, 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, 4195, 4198,
4105, 4108, 4111, 4114, 4117, 4120, 4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150,
4153, 4156, 4159, 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192, 4195, 4198,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// For u+1E9xx (6656)
4201, 4204, 4207, 4210, 4213, 4216, 4219, 4222, 4225, 4228, 4231, 4234, 4237, 4240, 4243, 4246,
4249, 4252, 4255, 4258, 4261, 4264, 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, 4291, 4294,
4297, 4300, 4201, 4204, 4207, 4210, 4213, 4216, 4219, 4222, 4225, 4228, 4231, 4234, 4237, 4240,
4243, 4246, 4249, 4252, 4255, 4258, 4261, 4264, 4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288,
4291, 4294, 4297, 4300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
template <typename T2, typename T3>
const T3 unicode_casefolding<T2, T3>::rev_segmenttable[] =
{
256, 768, 1280, 1024, 2048, 2560, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3072, 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, 0, 2304, 4352, 3840, 1792,
0, 512, 0, 0, 4096, 0, 0, 0, 0, 0, 0, 0, 1536, 2816, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 3584, 4608, 0, 0, 0, 4864, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5120,
0, 0, 0, 0, 5376, 5632, 0, 0, 0, 0, 0, 0, 5888, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 6144, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6400, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 6656
};
template <typename T2, typename T3>
const T2 unicode_casefolding<T2, T3>::rev_charsettable[] =
{
eos, // 0
0x0061, 0x0041, eos,
0x0062, 0x0042, eos,
0x0063, 0x0043, eos,
0x0064, 0x0044, eos, // 10
0x0065, 0x0045, eos,
0x0066, 0x0046, eos,
0x0067, 0x0047, eos,
0x0068, 0x0048, eos, // 22
0x0069, 0x0049, eos,
0x006A, 0x004A, eos,
0x006B, 0x004B, 0x212A, eos, // 31
0x006C, 0x004C, eos,
0x006D, 0x004D, eos,
0x006E, 0x004E, eos, // 41
0x006F, 0x004F, eos,
0x0070, 0x0050, eos,
0x0071, 0x0051, eos, // 50
0x0072, 0x0052, eos,
0x0073, 0x0053, 0x017F, eos,
0x0074, 0x0054, eos, // 60
0x0075, 0x0055, eos,
0x0076, 0x0056, eos,
0x0077, 0x0057, eos,
0x0078, 0x0058, eos, // 72
0x0079, 0x0059, eos,
0x007A, 0x005A, eos,
0x03BC, 0x00B5, 0x039C, eos, // 81
0x00E0, 0x00C0, eos,
0x00E1, 0x00C1, eos,
0x00E2, 0x00C2, eos, // 91
0x00E3, 0x00C3, eos,
0x00E4, 0x00C4, eos,
0x00E5, 0x00C5, 0x212B, eos, // 100
0x00E6, 0x00C6, eos,
0x00E7, 0x00C7, eos,
0x00E8, 0x00C8, eos, // 110
0x00E9, 0x00C9, eos,
0x00EA, 0x00CA, eos,
0x00EB, 0x00CB, eos,
0x00EC, 0x00CC, eos, // 122
0x00ED, 0x00CD, eos,
0x00EE, 0x00CE, eos,
0x00EF, 0x00CF, eos, // 131
0x00F0, 0x00D0, eos,
0x00F1, 0x00D1, eos,
0x00F2, 0x00D2, eos, // 140
0x00F3, 0x00D3, eos,
0x00F4, 0x00D4, eos,
0x00F5, 0x00D5, eos,
0x00F6, 0x00D6, eos, // 152
0x00F8, 0x00D8, eos,
0x00F9, 0x00D9, eos,
0x00FA, 0x00DA, eos, // 161
0x00FB, 0x00DB, eos,
0x00FC, 0x00DC, eos,
0x00FD, 0x00DD, eos, // 170
0x00FE, 0x00DE, eos,
0x0101, 0x0100, eos,
0x0103, 0x0102, eos,
0x0105, 0x0104, eos, // 182
0x0107, 0x0106, eos,
0x0109, 0x0108, eos,
0x010B, 0x010A, eos, // 191
0x010D, 0x010C, eos,
0x010F, 0x010E, eos,
0x0111, 0x0110, eos, // 200
0x0113, 0x0112, eos,
0x0115, 0x0114, eos,
0x0117, 0x0116, eos,
0x0119, 0x0118, eos, // 212
0x011B, 0x011A, eos,
0x011D, 0x011C, eos,
0x011F, 0x011E, eos, // 221
0x0121, 0x0120, eos,
0x0123, 0x0122, eos,
0x0125, 0x0124, eos, // 230
0x0127, 0x0126, eos,
0x0129, 0x0128, eos,
0x012B, 0x012A, eos,
0x012D, 0x012C, eos, // 242
0x012F, 0x012E, eos,
0x0133, 0x0132, eos,
0x0135, 0x0134, eos, // 251
0x0137, 0x0136, eos,
0x013A, 0x0139, eos,
0x013C, 0x013B, eos, // 260
0x013E, 0x013D, eos,
0x0140, 0x013F, eos,
0x0142, 0x0141, eos,
0x0144, 0x0143, eos, // 272
0x0146, 0x0145, eos,
0x0148, 0x0147, eos,
0x014B, 0x014A, eos, // 281
0x014D, 0x014C, eos,
0x014F, 0x014E, eos,
0x0151, 0x0150, eos, // 290
0x0153, 0x0152, eos,
0x0155, 0x0154, eos,
0x0157, 0x0156, eos,
0x0159, 0x0158, eos, // 302
0x015B, 0x015A, eos,
0x015D, 0x015C, eos,
0x015F, 0x015E, eos, // 311
0x0161, 0x0160, eos,
0x0163, 0x0162, eos,
0x0165, 0x0164, eos, // 320
0x0167, 0x0166, eos,
0x0169, 0x0168, eos,
0x016B, 0x016A, eos,
0x016D, 0x016C, eos, // 332
0x016F, 0x016E, eos,
0x0171, 0x0170, eos,
0x0173, 0x0172, eos, // 341
0x0175, 0x0174, eos,
0x0177, 0x0176, eos,
0x00FF, 0x0178, eos, // 350
0x017A, 0x0179, eos,
0x017C, 0x017B, eos,
0x017E, 0x017D, eos,
0x0253, 0x0181, eos, // 362
0x0183, 0x0182, eos,
0x0185, 0x0184, eos,
0x0254, 0x0186, eos, // 371
0x0188, 0x0187, eos,
0x0256, 0x0189, eos,
0x0257, 0x018A, eos, // 380
0x018C, 0x018B, eos,
0x01DD, 0x018E, eos,
0x0259, 0x018F, eos,
0x025B, 0x0190, eos, // 392
0x0192, 0x0191, eos,
0x0260, 0x0193, eos,
0x0263, 0x0194, eos, // 401
0x0269, 0x0196, eos,
0x0268, 0x0197, eos,
0x0199, 0x0198, eos, // 410
0x026F, 0x019C, eos,
0x0272, 0x019D, eos,
0x0275, 0x019F, eos,
0x01A1, 0x01A0, eos, // 422
0x01A3, 0x01A2, eos,
0x01A5, 0x01A4, eos,
0x0280, 0x01A6, eos, // 431
0x01A8, 0x01A7, eos,
0x0283, 0x01A9, eos,
0x01AD, 0x01AC, eos, // 440
0x0288, 0x01AE, eos,
0x01B0, 0x01AF, eos,
0x028A, 0x01B1, eos,
0x028B, 0x01B2, eos, // 452
0x01B4, 0x01B3, eos,
0x01B6, 0x01B5, eos,
0x0292, 0x01B7, eos, // 461
0x01B9, 0x01B8, eos,
0x01BD, 0x01BC, eos,
0x01C6, 0x01C4, 0x01C5, eos, // 470
0x01C9, 0x01C7, 0x01C8, eos,
0x01CC, 0x01CA, 0x01CB, eos,
0x01CE, 0x01CD, eos, // 482
0x01D0, 0x01CF, eos,
0x01D2, 0x01D1, eos,
0x01D4, 0x01D3, eos, // 491
0x01D6, 0x01D5, eos,
0x01D8, 0x01D7, eos,
0x01DA, 0x01D9, eos, // 500
0x01DC, 0x01DB, eos,
0x01DF, 0x01DE, eos,
0x01E1, 0x01E0, eos,
0x01E3, 0x01E2, eos, // 512
0x01E5, 0x01E4, eos,
0x01E7, 0x01E6, eos,
0x01E9, 0x01E8, eos, // 521
0x01EB, 0x01EA, eos,
0x01ED, 0x01EC, eos,
0x01EF, 0x01EE, eos, // 530
0x01F3, 0x01F1, 0x01F2, eos,
0x01F5, 0x01F4, eos,
0x0195, 0x01F6, eos, // 540
0x01BF, 0x01F7, eos,
0x01F9, 0x01F8, eos,
0x01FB, 0x01FA, eos,
0x01FD, 0x01FC, eos, // 552
0x01FF, 0x01FE, eos,
0x0201, 0x0200, eos,
0x0203, 0x0202, eos, // 561
0x0205, 0x0204, eos,
0x0207, 0x0206, eos,
0x0209, 0x0208, eos, // 570
0x020B, 0x020A, eos,
0x020D, 0x020C, eos,
0x020F, 0x020E, eos,
0x0211, 0x0210, eos, // 582
0x0213, 0x0212, eos,
0x0215, 0x0214, eos,
0x0217, 0x0216, eos, // 591
0x0219, 0x0218, eos,
0x021B, 0x021A, eos,
0x021D, 0x021C, eos, // 600
0x021F, 0x021E, eos,
0x019E, 0x0220, eos,
0x0223, 0x0222, eos,
0x0225, 0x0224, eos, // 612
0x0227, 0x0226, eos,
0x0229, 0x0228, eos,
0x022B, 0x022A, eos, // 621
0x022D, 0x022C, eos,
0x022F, 0x022E, eos,
0x0231, 0x0230, eos, // 630
0x0233, 0x0232, eos,
0x2C65, 0x023A, eos,
0x023C, 0x023B, eos,
0x019A, 0x023D, eos, // 642
0x2C66, 0x023E, eos,
0x0242, 0x0241, eos,
0x0180, 0x0243, eos, // 651
0x0289, 0x0244, eos,
0x028C, 0x0245, eos,
0x0247, 0x0246, eos, // 660
0x0249, 0x0248, eos,
0x024B, 0x024A, eos,
0x024D, 0x024C, eos,
0x024F, 0x024E, eos, // 672
0x03B9, 0x0345, 0x0399, 0x1FBE, eos,
0x0371, 0x0370, eos, // 680
0x0373, 0x0372, eos,
0x0377, 0x0376, eos,
0x03F3, 0x037F, eos,
0x03AC, 0x0386, eos, // 692
0x03AD, 0x0388, eos,
0x03AE, 0x0389, eos,
0x03AF, 0x038A, eos, // 701
0x03CC, 0x038C, eos,
0x03CD, 0x038E, eos,
0x03CE, 0x038F, eos, // 710
0x03B1, 0x0391, eos,
0x03B2, 0x0392, 0x03D0, eos,
0x03B3, 0x0393, eos, // 720
0x03B4, 0x0394, eos,
0x03B5, 0x0395, 0x03F5, eos,
0x03B6, 0x0396, eos, // 730
0x03B7, 0x0397, eos,
0x03B8, 0x0398, 0x03D1, 0x03F4, eos,
0x03BA, 0x039A, 0x03F0, eos, // 741
0x03BB, 0x039B, eos,
0x03BD, 0x039D, eos,
0x03BE, 0x039E, eos, // 751
0x03BF, 0x039F, eos,
0x03C0, 0x03A0, 0x03D6, eos,
0x03C1, 0x03A1, 0x03F1, eos, // 761
0x03C3, 0x03A3, 0x03C2, eos,
0x03C4, 0x03A4, eos,
0x03C5, 0x03A5, eos, // 772
0x03C6, 0x03A6, 0x03D5, eos,
0x03C7, 0x03A7, eos,
0x03C8, 0x03A8, eos, // 782
0x03C9, 0x03A9, 0x2126, eos,
0x03CA, 0x03AA, eos,
0x03CB, 0x03AB, eos, // 792
0x03D7, 0x03CF, eos,
0x03D9, 0x03D8, eos,
0x03DB, 0x03DA, eos, // 801
0x03DD, 0x03DC, eos,
0x03DF, 0x03DE, eos,
0x03E1, 0x03E0, eos, // 810
0x03E3, 0x03E2, eos,
0x03E5, 0x03E4, eos,
0x03E7, 0x03E6, eos,
0x03E9, 0x03E8, eos, // 822
0x03EB, 0x03EA, eos,
0x03ED, 0x03EC, eos,
0x03EF, 0x03EE, eos, // 831
0x03F8, 0x03F7, eos,
0x03F2, 0x03F9, eos,
0x03FB, 0x03FA, eos, // 840
0x037B, 0x03FD, eos,
0x037C, 0x03FE, eos,
0x037D, 0x03FF, eos,
0x0450, 0x0400, eos, // 852
0x0451, 0x0401, eos,
0x0452, 0x0402, eos,
0x0453, 0x0403, eos, // 861
0x0454, 0x0404, eos,
0x0455, 0x0405, eos,
0x0456, 0x0406, eos, // 870
0x0457, 0x0407, eos,
0x0458, 0x0408, eos,
0x0459, 0x0409, eos,
0x045A, 0x040A, eos, // 882
0x045B, 0x040B, eos,
0x045C, 0x040C, eos,
0x045D, 0x040D, eos, // 891
0x045E, 0x040E, eos,
0x045F, 0x040F, eos,
0x0430, 0x0410, eos, // 900
0x0431, 0x0411, eos,
0x0432, 0x0412, 0x1C80, eos,
0x0433, 0x0413, eos, // 910
0x0434, 0x0414, 0x1C81, eos,
0x0435, 0x0415, eos,
0x0436, 0x0416, eos, // 920
0x0437, 0x0417, eos,
0x0438, 0x0418, eos,
0x0439, 0x0419, eos,
0x043A, 0x041A, eos, // 932
0x043B, 0x041B, eos,
0x043C, 0x041C, eos,
0x043D, 0x041D, eos, // 941
0x043E, 0x041E, 0x1C82, eos,
0x043F, 0x041F, eos,
0x0440, 0x0420, eos, // 951
0x0441, 0x0421, 0x1C83, eos,
0x0442, 0x0422, 0x1C84, 0x1C85, eos,
0x0443, 0x0423, eos, // 963
0x0444, 0x0424, eos,
0x0445, 0x0425, eos,
0x0446, 0x0426, eos, // 972
0x0447, 0x0427, eos,
0x0448, 0x0428, eos,
0x0449, 0x0429, eos, // 981
0x044A, 0x042A, 0x1C86, eos,
0x044B, 0x042B, eos,
0x044C, 0x042C, eos, // 991
0x044D, 0x042D, eos,
0x044E, 0x042E, eos,
0x044F, 0x042F, eos, // 1000
0x0461, 0x0460, eos,
0x0463, 0x0462, 0x1C87, eos,
0x0465, 0x0464, eos, // 1010
0x0467, 0x0466, eos,
0x0469, 0x0468, eos,
0x046B, 0x046A, eos,
0x046D, 0x046C, eos, // 1022
0x046F, 0x046E, eos,
0x0471, 0x0470, eos,
0x0473, 0x0472, eos, // 1031
0x0475, 0x0474, eos,
0x0477, 0x0476, eos,
0x0479, 0x0478, eos, // 1040
0x047B, 0x047A, eos,
0x047D, 0x047C, eos,
0x047F, 0x047E, eos,
0x0481, 0x0480, eos, // 1052
0x048B, 0x048A, eos,
0x048D, 0x048C, eos,
0x048F, 0x048E, eos, // 1061
0x0491, 0x0490, eos,
0x0493, 0x0492, eos,
0x0495, 0x0494, eos, // 1070
0x0497, 0x0496, eos,
0x0499, 0x0498, eos,
0x049B, 0x049A, eos,
0x049D, 0x049C, eos, // 1082
0x049F, 0x049E, eos,
0x04A1, 0x04A0, eos,
0x04A3, 0x04A2, eos, // 1091
0x04A5, 0x04A4, eos,
0x04A7, 0x04A6, eos,
0x04A9, 0x04A8, eos, // 1100
0x04AB, 0x04AA, eos,
0x04AD, 0x04AC, eos,
0x04AF, 0x04AE, eos,
0x04B1, 0x04B0, eos, // 1112
0x04B3, 0x04B2, eos,
0x04B5, 0x04B4, eos,
0x04B7, 0x04B6, eos, // 1121
0x04B9, 0x04B8, eos,
0x04BB, 0x04BA, eos,
0x04BD, 0x04BC, eos, // 1130
0x04BF, 0x04BE, eos,
0x04CF, 0x04C0, eos,
0x04C2, 0x04C1, eos,
0x04C4, 0x04C3, eos, // 1142
0x04C6, 0x04C5, eos,
0x04C8, 0x04C7, eos,
0x04CA, 0x04C9, eos, // 1151
0x04CC, 0x04CB, eos,
0x04CE, 0x04CD, eos,
0x04D1, 0x04D0, eos, // 1160
0x04D3, 0x04D2, eos,
0x04D5, 0x04D4, eos,
0x04D7, 0x04D6, eos,
0x04D9, 0x04D8, eos, // 1172
0x04DB, 0x04DA, eos,
0x04DD, 0x04DC, eos,
0x04DF, 0x04DE, eos, // 1181
0x04E1, 0x04E0, eos,
0x04E3, 0x04E2, eos,
0x04E5, 0x04E4, eos, // 1190
0x04E7, 0x04E6, eos,
0x04E9, 0x04E8, eos,
0x04EB, 0x04EA, eos,
0x04ED, 0x04EC, eos, // 1202
0x04EF, 0x04EE, eos,
0x04F1, 0x04F0, eos,
0x04F3, 0x04F2, eos, // 1211
0x04F5, 0x04F4, eos,
0x04F7, 0x04F6, eos,
0x04F9, 0x04F8, eos, // 1220
0x04FB, 0x04FA, eos,
0x04FD, 0x04FC, eos,
0x04FF, 0x04FE, eos,
0x0501, 0x0500, eos, // 1232
0x0503, 0x0502, eos,
0x0505, 0x0504, eos,
0x0507, 0x0506, eos, // 1241
0x0509, 0x0508, eos,
0x050B, 0x050A, eos,
0x050D, 0x050C, eos, // 1250
0x050F, 0x050E, eos,
0x0511, 0x0510, eos,
0x0513, 0x0512, eos,
0x0515, 0x0514, eos, // 1262
0x0517, 0x0516, eos,
0x0519, 0x0518, eos,
0x051B, 0x051A, eos, // 1271
0x051D, 0x051C, eos,
0x051F, 0x051E, eos,
0x0521, 0x0520, eos, // 1280
0x0523, 0x0522, eos,
0x0525, 0x0524, eos,
0x0527, 0x0526, eos,
0x0529, 0x0528, eos, // 1292
0x052B, 0x052A, eos,
0x052D, 0x052C, eos,
0x052F, 0x052E, eos, // 1301
0x0561, 0x0531, eos,
0x0562, 0x0532, eos,
0x0563, 0x0533, eos, // 1310
0x0564, 0x0534, eos,
0x0565, 0x0535, eos,
0x0566, 0x0536, eos,
0x0567, 0x0537, eos, // 1322
0x0568, 0x0538, eos,
0x0569, 0x0539, eos,
0x056A, 0x053A, eos, // 1331
0x056B, 0x053B, eos,
0x056C, 0x053C, eos,
0x056D, 0x053D, eos, // 1340
0x056E, 0x053E, eos,
0x056F, 0x053F, eos,
0x0570, 0x0540, eos,
0x0571, 0x0541, eos, // 1352
0x0572, 0x0542, eos,
0x0573, 0x0543, eos,
0x0574, 0x0544, eos, // 1361
0x0575, 0x0545, eos,
0x0576, 0x0546, eos,
0x0577, 0x0547, eos, // 1370
0x0578, 0x0548, eos,
0x0579, 0x0549, eos,
0x057A, 0x054A, eos,
0x057B, 0x054B, eos, // 1382
0x057C, 0x054C, eos,
0x057D, 0x054D, eos,
0x057E, 0x054E, eos, // 1391
0x057F, 0x054F, eos,
0x0580, 0x0550, eos,
0x0581, 0x0551, eos, // 1400
0x0582, 0x0552, eos,
0x0583, 0x0553, eos,
0x0584, 0x0554, eos,
0x0585, 0x0555, eos, // 1412
0x0586, 0x0556, eos,
0x2D00, 0x10A0, eos,
0x2D01, 0x10A1, eos, // 1421
0x2D02, 0x10A2, eos,
0x2D03, 0x10A3, eos,
0x2D04, 0x10A4, eos, // 1430
0x2D05, 0x10A5, eos,
0x2D06, 0x10A6, eos,
0x2D07, 0x10A7, eos,
0x2D08, 0x10A8, eos, // 1442
0x2D09, 0x10A9, eos,
0x2D0A, 0x10AA, eos,
0x2D0B, 0x10AB, eos, // 1451
0x2D0C, 0x10AC, eos,
0x2D0D, 0x10AD, eos,
0x2D0E, 0x10AE, eos, // 1460
0x2D0F, 0x10AF, eos,
0x2D10, 0x10B0, eos,
0x2D11, 0x10B1, eos,
0x2D12, 0x10B2, eos, // 1472
0x2D13, 0x10B3, eos,
0x2D14, 0x10B4, eos,
0x2D15, 0x10B5, eos, // 1481
0x2D16, 0x10B6, eos,
0x2D17, 0x10B7, eos,
0x2D18, 0x10B8, eos, // 1490
0x2D19, 0x10B9, eos,
0x2D1A, 0x10BA, eos,
0x2D1B, 0x10BB, eos,
0x2D1C, 0x10BC, eos, // 1502
0x2D1D, 0x10BD, eos,
0x2D1E, 0x10BE, eos,
0x2D1F, 0x10BF, eos, // 1511
0x2D20, 0x10C0, eos,
0x2D21, 0x10C1, eos,
0x2D22, 0x10C2, eos, // 1520
0x2D23, 0x10C3, eos,
0x2D24, 0x10C4, eos,
0x2D25, 0x10C5, eos,
0x2D27, 0x10C7, eos, // 1532
0x2D2D, 0x10CD, eos,
0x13F0, 0x13F8, eos,
0x13F1, 0x13F9, eos, // 1541
0x13F2, 0x13FA, eos,
0x13F3, 0x13FB, eos,
0x13F4, 0x13FC, eos, // 1550
0x13F5, 0x13FD, eos,
0xA64B, 0x1C88, 0xA64A, eos,
0x10D0, 0x1C90, eos, // 1560
0x10D1, 0x1C91, eos,
0x10D2, 0x1C92, eos,
0x10D3, 0x1C93, eos,
0x10D4, 0x1C94, eos, // 1572
0x10D5, 0x1C95, eos,
0x10D6, 0x1C96, eos,
0x10D7, 0x1C97, eos, // 1581
0x10D8, 0x1C98, eos,
0x10D9, 0x1C99, eos,
0x10DA, 0x1C9A, eos, // 1590
0x10DB, 0x1C9B, eos,
0x10DC, 0x1C9C, eos,
0x10DD, 0x1C9D, eos,
0x10DE, 0x1C9E, eos, // 1602
0x10DF, 0x1C9F, eos,
0x10E0, 0x1CA0, eos,
0x10E1, 0x1CA1, eos, // 1611
0x10E2, 0x1CA2, eos,
0x10E3, 0x1CA3, eos,
0x10E4, 0x1CA4, eos, // 1620
0x10E5, 0x1CA5, eos,
0x10E6, 0x1CA6, eos,
0x10E7, 0x1CA7, eos,
0x10E8, 0x1CA8, eos, // 1632
0x10E9, 0x1CA9, eos,
0x10EA, 0x1CAA, eos,
0x10EB, 0x1CAB, eos, // 1641
0x10EC, 0x1CAC, eos,
0x10ED, 0x1CAD, eos,
0x10EE, 0x1CAE, eos, // 1650
0x10EF, 0x1CAF, eos,
0x10F0, 0x1CB0, eos,
0x10F1, 0x1CB1, eos,
0x10F2, 0x1CB2, eos, // 1662
0x10F3, 0x1CB3, eos,
0x10F4, 0x1CB4, eos,
0x10F5, 0x1CB5, eos, // 1671
0x10F6, 0x1CB6, eos,
0x10F7, 0x1CB7, eos,
0x10F8, 0x1CB8, eos, // 1680
0x10F9, 0x1CB9, eos,
0x10FA, 0x1CBA, eos,
0x10FD, 0x1CBD, eos,
0x10FE, 0x1CBE, eos, // 1692
0x10FF, 0x1CBF, eos,
0x1E01, 0x1E00, eos,
0x1E03, 0x1E02, eos, // 1701
0x1E05, 0x1E04, eos,
0x1E07, 0x1E06, eos,
0x1E09, 0x1E08, eos, // 1710
0x1E0B, 0x1E0A, eos,
0x1E0D, 0x1E0C, eos,
0x1E0F, 0x1E0E, eos,
0x1E11, 0x1E10, eos, // 1722
0x1E13, 0x1E12, eos,
0x1E15, 0x1E14, eos,
0x1E17, 0x1E16, eos, // 1731
0x1E19, 0x1E18, eos,
0x1E1B, 0x1E1A, eos,
0x1E1D, 0x1E1C, eos, // 1740
0x1E1F, 0x1E1E, eos,
0x1E21, 0x1E20, eos,
0x1E23, 0x1E22, eos,
0x1E25, 0x1E24, eos, // 1752
0x1E27, 0x1E26, eos,
0x1E29, 0x1E28, eos,
0x1E2B, 0x1E2A, eos, // 1761
0x1E2D, 0x1E2C, eos,
0x1E2F, 0x1E2E, eos,
0x1E31, 0x1E30, eos, // 1770
0x1E33, 0x1E32, eos,
0x1E35, 0x1E34, eos,
0x1E37, 0x1E36, eos,
0x1E39, 0x1E38, eos, // 1782
0x1E3B, 0x1E3A, eos,
0x1E3D, 0x1E3C, eos,
0x1E3F, 0x1E3E, eos, // 1791
0x1E41, 0x1E40, eos,
0x1E43, 0x1E42, eos,
0x1E45, 0x1E44, eos, // 1800
0x1E47, 0x1E46, eos,
0x1E49, 0x1E48, eos,
0x1E4B, 0x1E4A, eos,
0x1E4D, 0x1E4C, eos, // 1812
0x1E4F, 0x1E4E, eos,
0x1E51, 0x1E50, eos,
0x1E53, 0x1E52, eos, // 1821
0x1E55, 0x1E54, eos,
0x1E57, 0x1E56, eos,
0x1E59, 0x1E58, eos, // 1830
0x1E5B, 0x1E5A, eos,
0x1E5D, 0x1E5C, eos,
0x1E5F, 0x1E5E, eos,
0x1E61, 0x1E60, 0x1E9B, eos, // 1842
0x1E63, 0x1E62, eos,
0x1E65, 0x1E64, eos,
0x1E67, 0x1E66, eos, // 1852
0x1E69, 0x1E68, eos,
0x1E6B, 0x1E6A, eos,
0x1E6D, 0x1E6C, eos, // 1861
0x1E6F, 0x1E6E, eos,
0x1E71, 0x1E70, eos,
0x1E73, 0x1E72, eos, // 1870
0x1E75, 0x1E74, eos,
0x1E77, 0x1E76, eos,
0x1E79, 0x1E78, eos,
0x1E7B, 0x1E7A, eos, // 1882
0x1E7D, 0x1E7C, eos,
0x1E7F, 0x1E7E, eos,
0x1E81, 0x1E80, eos, // 1891
0x1E83, 0x1E82, eos,
0x1E85, 0x1E84, eos,
0x1E87, 0x1E86, eos, // 1900
0x1E89, 0x1E88, eos,
0x1E8B, 0x1E8A, eos,
0x1E8D, 0x1E8C, eos,
0x1E8F, 0x1E8E, eos, // 1912
0x1E91, 0x1E90, eos,
0x1E93, 0x1E92, eos,
0x1E95, 0x1E94, eos, // 1921
0x00DF, 0x1E9E, eos,
0x1EA1, 0x1EA0, eos,
0x1EA3, 0x1EA2, eos, // 1930
0x1EA5, 0x1EA4, eos,
0x1EA7, 0x1EA6, eos,
0x1EA9, 0x1EA8, eos,
0x1EAB, 0x1EAA, eos, // 1942
0x1EAD, 0x1EAC, eos,
0x1EAF, 0x1EAE, eos,
0x1EB1, 0x1EB0, eos, // 1951
0x1EB3, 0x1EB2, eos,
0x1EB5, 0x1EB4, eos,
0x1EB7, 0x1EB6, eos, // 1960
0x1EB9, 0x1EB8, eos,
0x1EBB, 0x1EBA, eos,
0x1EBD, 0x1EBC, eos,
0x1EBF, 0x1EBE, eos, // 1972
0x1EC1, 0x1EC0, eos,
0x1EC3, 0x1EC2, eos,
0x1EC5, 0x1EC4, eos, // 1981
0x1EC7, 0x1EC6, eos,
0x1EC9, 0x1EC8, eos,
0x1ECB, 0x1ECA, eos, // 1990
0x1ECD, 0x1ECC, eos,
0x1ECF, 0x1ECE, eos,
0x1ED1, 0x1ED0, eos,
0x1ED3, 0x1ED2, eos, // 2002
0x1ED5, 0x1ED4, eos,
0x1ED7, 0x1ED6, eos,
0x1ED9, 0x1ED8, eos, // 2011
0x1EDB, 0x1EDA, eos,
0x1EDD, 0x1EDC, eos,
0x1EDF, 0x1EDE, eos, // 2020
0x1EE1, 0x1EE0, eos,
0x1EE3, 0x1EE2, eos,
0x1EE5, 0x1EE4, eos,
0x1EE7, 0x1EE6, eos, // 2032
0x1EE9, 0x1EE8, eos,
0x1EEB, 0x1EEA, eos,
0x1EED, 0x1EEC, eos, // 2041
0x1EEF, 0x1EEE, eos,
0x1EF1, 0x1EF0, eos,
0x1EF3, 0x1EF2, eos, // 2050
0x1EF5, 0x1EF4, eos,
0x1EF7, 0x1EF6, eos,
0x1EF9, 0x1EF8, eos,
0x1EFB, 0x1EFA, eos, // 2062
0x1EFD, 0x1EFC, eos,
0x1EFF, 0x1EFE, eos,
0x1F00, 0x1F08, eos, // 2071
0x1F01, 0x1F09, eos,
0x1F02, 0x1F0A, eos,
0x1F03, 0x1F0B, eos, // 2080
0x1F04, 0x1F0C, eos,
0x1F05, 0x1F0D, eos,
0x1F06, 0x1F0E, eos,
0x1F07, 0x1F0F, eos, // 2092
0x1F10, 0x1F18, eos,
0x1F11, 0x1F19, eos,
0x1F12, 0x1F1A, eos, // 2101
0x1F13, 0x1F1B, eos,
0x1F14, 0x1F1C, eos,
0x1F15, 0x1F1D, eos, // 2110
0x1F20, 0x1F28, eos,
0x1F21, 0x1F29, eos,
0x1F22, 0x1F2A, eos,
0x1F23, 0x1F2B, eos, // 2122
0x1F24, 0x1F2C, eos,
0x1F25, 0x1F2D, eos,
0x1F26, 0x1F2E, eos, // 2131
0x1F27, 0x1F2F, eos,
0x1F30, 0x1F38, eos,
0x1F31, 0x1F39, eos, // 2140
0x1F32, 0x1F3A, eos,
0x1F33, 0x1F3B, eos,
0x1F34, 0x1F3C, eos,
0x1F35, 0x1F3D, eos, // 2152
0x1F36, 0x1F3E, eos,
0x1F37, 0x1F3F, eos,
0x1F40, 0x1F48, eos, // 2161
0x1F41, 0x1F49, eos,
0x1F42, 0x1F4A, eos,
0x1F43, 0x1F4B, eos, // 2170
0x1F44, 0x1F4C, eos,
0x1F45, 0x1F4D, eos,
0x1F51, 0x1F59, eos,
0x1F53, 0x1F5B, eos, // 2182
0x1F55, 0x1F5D, eos,
0x1F57, 0x1F5F, eos,
0x1F60, 0x1F68, eos, // 2191
0x1F61, 0x1F69, eos,
0x1F62, 0x1F6A, eos,
0x1F63, 0x1F6B, eos, // 2200
0x1F64, 0x1F6C, eos,
0x1F65, 0x1F6D, eos,
0x1F66, 0x1F6E, eos,
0x1F67, 0x1F6F, eos, // 2212
0x1F80, 0x1F88, eos,
0x1F81, 0x1F89, eos,
0x1F82, 0x1F8A, eos, // 2221
0x1F83, 0x1F8B, eos,
0x1F84, 0x1F8C, eos,
0x1F85, 0x1F8D, eos, // 2230
0x1F86, 0x1F8E, eos,
0x1F87, 0x1F8F, eos,
0x1F90, 0x1F98, eos,
0x1F91, 0x1F99, eos, // 2242
0x1F92, 0x1F9A, eos,
0x1F93, 0x1F9B, eos,
0x1F94, 0x1F9C, eos, // 2251
0x1F95, 0x1F9D, eos,
0x1F96, 0x1F9E, eos,
0x1F97, 0x1F9F, eos, // 2260
0x1FA0, 0x1FA8, eos,
0x1FA1, 0x1FA9, eos,
0x1FA2, 0x1FAA, eos,
0x1FA3, 0x1FAB, eos, // 2272
0x1FA4, 0x1FAC, eos,
0x1FA5, 0x1FAD, eos,
0x1FA6, 0x1FAE, eos, // 2281
0x1FA7, 0x1FAF, eos,
0x1FB0, 0x1FB8, eos,
0x1FB1, 0x1FB9, eos, // 2290
0x1F70, 0x1FBA, eos,
0x1F71, 0x1FBB, eos,
0x1FB3, 0x1FBC, eos,
0x1F72, 0x1FC8, eos, // 2302
0x1F73, 0x1FC9, eos,
0x1F74, 0x1FCA, eos,
0x1F75, 0x1FCB, eos, // 2311
0x1FC3, 0x1FCC, eos,
0x1FD0, 0x1FD8, eos,
0x1FD1, 0x1FD9, eos, // 2320
0x1F76, 0x1FDA, eos,
0x1F77, 0x1FDB, eos,
0x1FE0, 0x1FE8, eos,
0x1FE1, 0x1FE9, eos, // 2332
0x1F7A, 0x1FEA, eos,
0x1F7B, 0x1FEB, eos,
0x1FE5, 0x1FEC, eos, // 2341
0x1F78, 0x1FF8, eos,
0x1F79, 0x1FF9, eos,
0x1F7C, 0x1FFA, eos, // 2350
0x1F7D, 0x1FFB, eos,
0x1FF3, 0x1FFC, eos,
0x214E, 0x2132, eos,
0x2170, 0x2160, eos, // 2362
0x2171, 0x2161, eos,
0x2172, 0x2162, eos,
0x2173, 0x2163, eos, // 2371
0x2174, 0x2164, eos,
0x2175, 0x2165, eos,
0x2176, 0x2166, eos, // 2380
0x2177, 0x2167, eos,
0x2178, 0x2168, eos,
0x2179, 0x2169, eos,
0x217A, 0x216A, eos, // 2392
0x217B, 0x216B, eos,
0x217C, 0x216C, eos,
0x217D, 0x216D, eos, // 2401
0x217E, 0x216E, eos,
0x217F, 0x216F, eos,
0x2184, 0x2183, eos, // 2410
0x24D0, 0x24B6, eos,
0x24D1, 0x24B7, eos,
0x24D2, 0x24B8, eos,
0x24D3, 0x24B9, eos, // 2422
0x24D4, 0x24BA, eos,
0x24D5, 0x24BB, eos,
0x24D6, 0x24BC, eos, // 2431
0x24D7, 0x24BD, eos,
0x24D8, 0x24BE, eos,
0x24D9, 0x24BF, eos, // 2440
0x24DA, 0x24C0, eos,
0x24DB, 0x24C1, eos,
0x24DC, 0x24C2, eos,
0x24DD, 0x24C3, eos, // 2452
0x24DE, 0x24C4, eos,
0x24DF, 0x24C5, eos,
0x24E0, 0x24C6, eos, // 2461
0x24E1, 0x24C7, eos,
0x24E2, 0x24C8, eos,
0x24E3, 0x24C9, eos, // 2470
0x24E4, 0x24CA, eos,
0x24E5, 0x24CB, eos,
0x24E6, 0x24CC, eos,
0x24E7, 0x24CD, eos, // 2482
0x24E8, 0x24CE, eos,
0x24E9, 0x24CF, eos,
0x2C30, 0x2C00, eos, // 2491
0x2C31, 0x2C01, eos,
0x2C32, 0x2C02, eos,
0x2C33, 0x2C03, eos, // 2500
0x2C34, 0x2C04, eos,
0x2C35, 0x2C05, eos,
0x2C36, 0x2C06, eos,
0x2C37, 0x2C07, eos, // 2512
0x2C38, 0x2C08, eos,
0x2C39, 0x2C09, eos,
0x2C3A, 0x2C0A, eos, // 2521
0x2C3B, 0x2C0B, eos,
0x2C3C, 0x2C0C, eos,
0x2C3D, 0x2C0D, eos, // 2530
0x2C3E, 0x2C0E, eos,
0x2C3F, 0x2C0F, eos,
0x2C40, 0x2C10, eos,
0x2C41, 0x2C11, eos, // 2542
0x2C42, 0x2C12, eos,
0x2C43, 0x2C13, eos,
0x2C44, 0x2C14, eos, // 2551
0x2C45, 0x2C15, eos,
0x2C46, 0x2C16, eos,
0x2C47, 0x2C17, eos, // 2560
0x2C48, 0x2C18, eos,
0x2C49, 0x2C19, eos,
0x2C4A, 0x2C1A, eos,
0x2C4B, 0x2C1B, eos, // 2572
0x2C4C, 0x2C1C, eos,
0x2C4D, 0x2C1D, eos,
0x2C4E, 0x2C1E, eos, // 2581
0x2C4F, 0x2C1F, eos,
0x2C50, 0x2C20, eos,
0x2C51, 0x2C21, eos, // 2590
0x2C52, 0x2C22, eos,
0x2C53, 0x2C23, eos,
0x2C54, 0x2C24, eos,
0x2C55, 0x2C25, eos, // 2602
0x2C56, 0x2C26, eos,
0x2C57, 0x2C27, eos,
0x2C58, 0x2C28, eos, // 2611
0x2C59, 0x2C29, eos,
0x2C5A, 0x2C2A, eos,
0x2C5B, 0x2C2B, eos, // 2620
0x2C5C, 0x2C2C, eos,
0x2C5D, 0x2C2D, eos,
0x2C5E, 0x2C2E, eos,
0x2C5F, 0x2C2F, eos, // 2632
0x2C61, 0x2C60, eos,
0x026B, 0x2C62, eos,
0x1D7D, 0x2C63, eos, // 2641
0x027D, 0x2C64, eos,
0x2C68, 0x2C67, eos,
0x2C6A, 0x2C69, eos, // 2650
0x2C6C, 0x2C6B, eos,
0x0251, 0x2C6D, eos,
0x0271, 0x2C6E, eos,
0x0250, 0x2C6F, eos, // 2662
0x0252, 0x2C70, eos,
0x2C73, 0x2C72, eos,
0x2C76, 0x2C75, eos, // 2671
0x023F, 0x2C7E, eos,
0x0240, 0x2C7F, eos,
0x2C81, 0x2C80, eos, // 2680
0x2C83, 0x2C82, eos,
0x2C85, 0x2C84, eos,
0x2C87, 0x2C86, eos,
0x2C89, 0x2C88, eos, // 2692
0x2C8B, 0x2C8A, eos,
0x2C8D, 0x2C8C, eos,
0x2C8F, 0x2C8E, eos, // 2701
0x2C91, 0x2C90, eos,
0x2C93, 0x2C92, eos,
0x2C95, 0x2C94, eos, // 2710
0x2C97, 0x2C96, eos,
0x2C99, 0x2C98, eos,
0x2C9B, 0x2C9A, eos,
0x2C9D, 0x2C9C, eos, // 2722
0x2C9F, 0x2C9E, eos,
0x2CA1, 0x2CA0, eos,
0x2CA3, 0x2CA2, eos, // 2731
0x2CA5, 0x2CA4, eos,
0x2CA7, 0x2CA6, eos,
0x2CA9, 0x2CA8, eos, // 2740
0x2CAB, 0x2CAA, eos,
0x2CAD, 0x2CAC, eos,
0x2CAF, 0x2CAE, eos,
0x2CB1, 0x2CB0, eos, // 2752
0x2CB3, 0x2CB2, eos,
0x2CB5, 0x2CB4, eos,
0x2CB7, 0x2CB6, eos, // 2761
0x2CB9, 0x2CB8, eos,
0x2CBB, 0x2CBA, eos,
0x2CBD, 0x2CBC, eos, // 2770
0x2CBF, 0x2CBE, eos,
0x2CC1, 0x2CC0, eos,
0x2CC3, 0x2CC2, eos,
0x2CC5, 0x2CC4, eos, // 2782
0x2CC7, 0x2CC6, eos,
0x2CC9, 0x2CC8, eos,
0x2CCB, 0x2CCA, eos, // 2791
0x2CCD, 0x2CCC, eos,
0x2CCF, 0x2CCE, eos,
0x2CD1, 0x2CD0, eos, // 2800
0x2CD3, 0x2CD2, eos,
0x2CD5, 0x2CD4, eos,
0x2CD7, 0x2CD6, eos,
0x2CD9, 0x2CD8, eos, // 2812
0x2CDB, 0x2CDA, eos,
0x2CDD, 0x2CDC, eos,
0x2CDF, 0x2CDE, eos, // 2821
0x2CE1, 0x2CE0, eos,
0x2CE3, 0x2CE2, eos,
0x2CEC, 0x2CEB, eos, // 2830
0x2CEE, 0x2CED, eos,
0x2CF3, 0x2CF2, eos,
0xA641, 0xA640, eos,
0xA643, 0xA642, eos, // 2842
0xA645, 0xA644, eos,
0xA647, 0xA646, eos,
0xA649, 0xA648, eos, // 2851
0xA64D, 0xA64C, eos,
0xA64F, 0xA64E, eos,
0xA651, 0xA650, eos, // 2860
0xA653, 0xA652, eos,
0xA655, 0xA654, eos,
0xA657, 0xA656, eos,
0xA659, 0xA658, eos, // 2872
0xA65B, 0xA65A, eos,
0xA65D, 0xA65C, eos,
0xA65F, 0xA65E, eos, // 2881
0xA661, 0xA660, eos,
0xA663, 0xA662, eos,
0xA665, 0xA664, eos, // 2890
0xA667, 0xA666, eos,
0xA669, 0xA668, eos,
0xA66B, 0xA66A, eos,
0xA66D, 0xA66C, eos, // 2902
0xA681, 0xA680, eos,
0xA683, 0xA682, eos,
0xA685, 0xA684, eos, // 2911
0xA687, 0xA686, eos,
0xA689, 0xA688, eos,
0xA68B, 0xA68A, eos, // 2920
0xA68D, 0xA68C, eos,
0xA68F, 0xA68E, eos,
0xA691, 0xA690, eos,
0xA693, 0xA692, eos, // 2932
0xA695, 0xA694, eos,
0xA697, 0xA696, eos,
0xA699, 0xA698, eos, // 2941
0xA69B, 0xA69A, eos,
0xA723, 0xA722, eos,
0xA725, 0xA724, eos, // 2950
0xA727, 0xA726, eos,
0xA729, 0xA728, eos,
0xA72B, 0xA72A, eos,
0xA72D, 0xA72C, eos, // 2962
0xA72F, 0xA72E, eos,
0xA733, 0xA732, eos,
0xA735, 0xA734, eos, // 2971
0xA737, 0xA736, eos,
0xA739, 0xA738, eos,
0xA73B, 0xA73A, eos, // 2980
0xA73D, 0xA73C, eos,
0xA73F, 0xA73E, eos,
0xA741, 0xA740, eos,
0xA743, 0xA742, eos, // 2992
0xA745, 0xA744, eos,
0xA747, 0xA746, eos,
0xA749, 0xA748, eos, // 3001
0xA74B, 0xA74A, eos,
0xA74D, 0xA74C, eos,
0xA74F, 0xA74E, eos, // 3010
0xA751, 0xA750, eos,
0xA753, 0xA752, eos,
0xA755, 0xA754, eos,
0xA757, 0xA756, eos, // 3022
0xA759, 0xA758, eos,
0xA75B, 0xA75A, eos,
0xA75D, 0xA75C, eos, // 3031
0xA75F, 0xA75E, eos,
0xA761, 0xA760, eos,
0xA763, 0xA762, eos, // 3040
0xA765, 0xA764, eos,
0xA767, 0xA766, eos,
0xA769, 0xA768, eos,
0xA76B, 0xA76A, eos, // 3052
0xA76D, 0xA76C, eos,
0xA76F, 0xA76E, eos,
0xA77A, 0xA779, eos, // 3061
0xA77C, 0xA77B, eos,
0x1D79, 0xA77D, eos,
0xA77F, 0xA77E, eos, // 3070
0xA781, 0xA780, eos,
0xA783, 0xA782, eos,
0xA785, 0xA784, eos,
0xA787, 0xA786, eos, // 3082
0xA78C, 0xA78B, eos,
0x0265, 0xA78D, eos,
0xA791, 0xA790, eos, // 3091
0xA793, 0xA792, eos,
0xA797, 0xA796, eos,
0xA799, 0xA798, eos, // 3100
0xA79B, 0xA79A, eos,
0xA79D, 0xA79C, eos,
0xA79F, 0xA79E, eos,
0xA7A1, 0xA7A0, eos, // 3112
0xA7A3, 0xA7A2, eos,
0xA7A5, 0xA7A4, eos,
0xA7A7, 0xA7A6, eos, // 3121
0xA7A9, 0xA7A8, eos,
0x0266, 0xA7AA, eos,
0x025C, 0xA7AB, eos, // 3130
0x0261, 0xA7AC, eos,
0x026C, 0xA7AD, eos,
0x026A, 0xA7AE, eos,
0x029E, 0xA7B0, eos, // 3142
0x0287, 0xA7B1, eos,
0x029D, 0xA7B2, eos,
0xAB53, 0xA7B3, eos, // 3151
0xA7B5, 0xA7B4, eos,
0xA7B7, 0xA7B6, eos,
0xA7B9, 0xA7B8, eos, // 3160
0xA7BB, 0xA7BA, eos,
0xA7BD, 0xA7BC, eos,
0xA7BF, 0xA7BE, eos,
0xA7C1, 0xA7C0, eos, // 3172
0xA7C3, 0xA7C2, eos,
0xA794, 0xA7C4, eos,
0x0282, 0xA7C5, eos, // 3181
0x1D8E, 0xA7C6, eos,
0xA7C8, 0xA7C7, eos,
0xA7CA, 0xA7C9, eos, // 3190
0xA7D1, 0xA7D0, eos,
0xA7D7, 0xA7D6, eos,
0xA7D9, 0xA7D8, eos,
0xA7F6, 0xA7F5, eos, // 3202
0x13A0, 0xAB70, eos,
0x13A1, 0xAB71, eos,
0x13A2, 0xAB72, eos, // 3211
0x13A3, 0xAB73, eos,
0x13A4, 0xAB74, eos,
0x13A5, 0xAB75, eos, // 3220
0x13A6, 0xAB76, eos,
0x13A7, 0xAB77, eos,
0x13A8, 0xAB78, eos,
0x13A9, 0xAB79, eos, // 3232
0x13AA, 0xAB7A, eos,
0x13AB, 0xAB7B, eos,
0x13AC, 0xAB7C, eos, // 3241
0x13AD, 0xAB7D, eos,
0x13AE, 0xAB7E, eos,
0x13AF, 0xAB7F, eos, // 3250
0x13B0, 0xAB80, eos,
0x13B1, 0xAB81, eos,
0x13B2, 0xAB82, eos,
0x13B3, 0xAB83, eos, // 3262
0x13B4, 0xAB84, eos,
0x13B5, 0xAB85, eos,
0x13B6, 0xAB86, eos, // 3271
0x13B7, 0xAB87, eos,
0x13B8, 0xAB88, eos,
0x13B9, 0xAB89, eos, // 3280
0x13BA, 0xAB8A, eos,
0x13BB, 0xAB8B, eos,
0x13BC, 0xAB8C, eos,
0x13BD, 0xAB8D, eos, // 3292
0x13BE, 0xAB8E, eos,
0x13BF, 0xAB8F, eos,
0x13C0, 0xAB90, eos, // 3301
0x13C1, 0xAB91, eos,
0x13C2, 0xAB92, eos,
0x13C3, 0xAB93, eos, // 3310
0x13C4, 0xAB94, eos,
0x13C5, 0xAB95, eos,
0x13C6, 0xAB96, eos,
0x13C7, 0xAB97, eos, // 3322
0x13C8, 0xAB98, eos,
0x13C9, 0xAB99, eos,
0x13CA, 0xAB9A, eos, // 3331
0x13CB, 0xAB9B, eos,
0x13CC, 0xAB9C, eos,
0x13CD, 0xAB9D, eos, // 3340
0x13CE, 0xAB9E, eos,
0x13CF, 0xAB9F, eos,
0x13D0, 0xABA0, eos,
0x13D1, 0xABA1, eos, // 3352
0x13D2, 0xABA2, eos,
0x13D3, 0xABA3, eos,
0x13D4, 0xABA4, eos, // 3361
0x13D5, 0xABA5, eos,
0x13D6, 0xABA6, eos,
0x13D7, 0xABA7, eos, // 3370
0x13D8, 0xABA8, eos,
0x13D9, 0xABA9, eos,
0x13DA, 0xABAA, eos,
0x13DB, 0xABAB, eos, // 3382
0x13DC, 0xABAC, eos,
0x13DD, 0xABAD, eos,
0x13DE, 0xABAE, eos, // 3391
0x13DF, 0xABAF, eos,
0x13E0, 0xABB0, eos,
0x13E1, 0xABB1, eos, // 3400
0x13E2, 0xABB2, eos,
0x13E3, 0xABB3, eos,
0x13E4, 0xABB4, eos,
0x13E5, 0xABB5, eos, // 3412
0x13E6, 0xABB6, eos,
0x13E7, 0xABB7, eos,
0x13E8, 0xABB8, eos, // 3421
0x13E9, 0xABB9, eos,
0x13EA, 0xABBA, eos,
0x13EB, 0xABBB, eos, // 3430
0x13EC, 0xABBC, eos,
0x13ED, 0xABBD, eos,
0x13EE, 0xABBE, eos,
0x13EF, 0xABBF, eos, // 3442
0xFF41, 0xFF21, eos,
0xFF42, 0xFF22, eos,
0xFF43, 0xFF23, eos, // 3451
0xFF44, 0xFF24, eos,
0xFF45, 0xFF25, eos,
0xFF46, 0xFF26, eos, // 3460
0xFF47, 0xFF27, eos,
0xFF48, 0xFF28, eos,
0xFF49, 0xFF29, eos,
0xFF4A, 0xFF2A, eos, // 3472
0xFF4B, 0xFF2B, eos,
0xFF4C, 0xFF2C, eos,
0xFF4D, 0xFF2D, eos, // 3481
0xFF4E, 0xFF2E, eos,
0xFF4F, 0xFF2F, eos,
0xFF50, 0xFF30, eos, // 3490
0xFF51, 0xFF31, eos,
0xFF52, 0xFF32, eos,
0xFF53, 0xFF33, eos,
0xFF54, 0xFF34, eos, // 3502
0xFF55, 0xFF35, eos,
0xFF56, 0xFF36, eos,
0xFF57, 0xFF37, eos, // 3511
0xFF58, 0xFF38, eos,
0xFF59, 0xFF39, eos,
0xFF5A, 0xFF3A, eos, // 3520
0x10428, 0x10400, eos,
0x10429, 0x10401, eos,
0x1042A, 0x10402, eos,
0x1042B, 0x10403, eos, // 3532
0x1042C, 0x10404, eos,
0x1042D, 0x10405, eos,
0x1042E, 0x10406, eos, // 3541
0x1042F, 0x10407, eos,
0x10430, 0x10408, eos,
0x10431, 0x10409, eos, // 3550
0x10432, 0x1040A, eos,
0x10433, 0x1040B, eos,
0x10434, 0x1040C, eos,
0x10435, 0x1040D, eos, // 3562
0x10436, 0x1040E, eos,
0x10437, 0x1040F, eos,
0x10438, 0x10410, eos, // 3571
0x10439, 0x10411, eos,
0x1043A, 0x10412, eos,
0x1043B, 0x10413, eos, // 3580
0x1043C, 0x10414, eos,
0x1043D, 0x10415, eos,
0x1043E, 0x10416, eos,
0x1043F, 0x10417, eos, // 3592
0x10440, 0x10418, eos,
0x10441, 0x10419, eos,
0x10442, 0x1041A, eos, // 3601
0x10443, 0x1041B, eos,
0x10444, 0x1041C, eos,
0x10445, 0x1041D, eos, // 3610
0x10446, 0x1041E, eos,
0x10447, 0x1041F, eos,
0x10448, 0x10420, eos,
0x10449, 0x10421, eos, // 3622
0x1044A, 0x10422, eos,
0x1044B, 0x10423, eos,
0x1044C, 0x10424, eos, // 3631
0x1044D, 0x10425, eos,
0x1044E, 0x10426, eos,
0x1044F, 0x10427, eos, // 3640
0x104D8, 0x104B0, eos,
0x104D9, 0x104B1, eos,
0x104DA, 0x104B2, eos,
0x104DB, 0x104B3, eos, // 3652
0x104DC, 0x104B4, eos,
0x104DD, 0x104B5, eos,
0x104DE, 0x104B6, eos, // 3661
0x104DF, 0x104B7, eos,
0x104E0, 0x104B8, eos,
0x104E1, 0x104B9, eos, // 3670
0x104E2, 0x104BA, eos,
0x104E3, 0x104BB, eos,
0x104E4, 0x104BC, eos,
0x104E5, 0x104BD, eos, // 3682
0x104E6, 0x104BE, eos,
0x104E7, 0x104BF, eos,
0x104E8, 0x104C0, eos, // 3691
0x104E9, 0x104C1, eos,
0x104EA, 0x104C2, eos,
0x104EB, 0x104C3, eos, // 3700
0x104EC, 0x104C4, eos,
0x104ED, 0x104C5, eos,
0x104EE, 0x104C6, eos,
0x104EF, 0x104C7, eos, // 3712
0x104F0, 0x104C8, eos,
0x104F1, 0x104C9, eos,
0x104F2, 0x104CA, eos, // 3721
0x104F3, 0x104CB, eos,
0x104F4, 0x104CC, eos,
0x104F5, 0x104CD, eos, // 3730
0x104F6, 0x104CE, eos,
0x104F7, 0x104CF, eos,
0x104F8, 0x104D0, eos,
0x104F9, 0x104D1, eos, // 3742
0x104FA, 0x104D2, eos,
0x104FB, 0x104D3, eos,
0x10597, 0x10570, eos, // 3751
0x10598, 0x10571, eos,
0x10599, 0x10572, eos,
0x1059A, 0x10573, eos, // 3760
0x1059B, 0x10574, eos,
0x1059C, 0x10575, eos,
0x1059D, 0x10576, eos,
0x1059E, 0x10577, eos, // 3772
0x1059F, 0x10578, eos,
0x105A0, 0x10579, eos,
0x105A1, 0x1057A, eos, // 3781
0x105A3, 0x1057C, eos,
0x105A4, 0x1057D, eos,
0x105A5, 0x1057E, eos, // 3790
0x105A6, 0x1057F, eos,
0x105A7, 0x10580, eos,
0x105A8, 0x10581, eos,
0x105A9, 0x10582, eos, // 3802
0x105AA, 0x10583, eos,
0x105AB, 0x10584, eos,
0x105AC, 0x10585, eos, // 3811
0x105AD, 0x10586, eos,
0x105AE, 0x10587, eos,
0x105AF, 0x10588, eos, // 3820
0x105B0, 0x10589, eos,
0x105B1, 0x1058A, eos,
0x105B3, 0x1058C, eos,
0x105B4, 0x1058D, eos, // 3832
0x105B5, 0x1058E, eos,
0x105B6, 0x1058F, eos,
0x105B7, 0x10590, eos, // 3841
0x105B8, 0x10591, eos,
0x105B9, 0x10592, eos,
0x105BB, 0x10594, eos, // 3850
0x105BC, 0x10595, eos,
0x10CC0, 0x10C80, eos,
0x10CC1, 0x10C81, eos,
0x10CC2, 0x10C82, eos, // 3862
0x10CC3, 0x10C83, eos,
0x10CC4, 0x10C84, eos,
0x10CC5, 0x10C85, eos, // 3871
0x10CC6, 0x10C86, eos,
0x10CC7, 0x10C87, eos,
0x10CC8, 0x10C88, eos, // 3880
0x10CC9, 0x10C89, eos,
0x10CCA, 0x10C8A, eos,
0x10CCB, 0x10C8B, eos,
0x10CCC, 0x10C8C, eos, // 3892
0x10CCD, 0x10C8D, eos,
0x10CCE, 0x10C8E, eos,
0x10CCF, 0x10C8F, eos, // 3901
0x10CD0, 0x10C90, eos,
0x10CD1, 0x10C91, eos,
0x10CD2, 0x10C92, eos, // 3910
0x10CD3, 0x10C93, eos,
0x10CD4, 0x10C94, eos,
0x10CD5, 0x10C95, eos,
0x10CD6, 0x10C96, eos, // 3922
0x10CD7, 0x10C97, eos,
0x10CD8, 0x10C98, eos,
0x10CD9, 0x10C99, eos, // 3931
0x10CDA, 0x10C9A, eos,
0x10CDB, 0x10C9B, eos,
0x10CDC, 0x10C9C, eos, // 3940
0x10CDD, 0x10C9D, eos,
0x10CDE, 0x10C9E, eos,
0x10CDF, 0x10C9F, eos,
0x10CE0, 0x10CA0, eos, // 3952
0x10CE1, 0x10CA1, eos,
0x10CE2, 0x10CA2, eos,
0x10CE3, 0x10CA3, eos, // 3961
0x10CE4, 0x10CA4, eos,
0x10CE5, 0x10CA5, eos,
0x10CE6, 0x10CA6, eos, // 3970
0x10CE7, 0x10CA7, eos,
0x10CE8, 0x10CA8, eos,
0x10CE9, 0x10CA9, eos,
0x10CEA, 0x10CAA, eos, // 3982
0x10CEB, 0x10CAB, eos,
0x10CEC, 0x10CAC, eos,
0x10CED, 0x10CAD, eos, // 3991
0x10CEE, 0x10CAE, eos,
0x10CEF, 0x10CAF, eos,
0x10CF0, 0x10CB0, eos, // 4000
0x10CF1, 0x10CB1, eos,
0x10CF2, 0x10CB2, eos,
0x118C0, 0x118A0, eos,
0x118C1, 0x118A1, eos, // 4012
0x118C2, 0x118A2, eos,
0x118C3, 0x118A3, eos,
0x118C4, 0x118A4, eos, // 4021
0x118C5, 0x118A5, eos,
0x118C6, 0x118A6, eos,
0x118C7, 0x118A7, eos, // 4030
0x118C8, 0x118A8, eos,
0x118C9, 0x118A9, eos,
0x118CA, 0x118AA, eos,
0x118CB, 0x118AB, eos, // 4042
0x118CC, 0x118AC, eos,
0x118CD, 0x118AD, eos,
0x118CE, 0x118AE, eos, // 4051
0x118CF, 0x118AF, eos,
0x118D0, 0x118B0, eos,
0x118D1, 0x118B1, eos, // 4060
0x118D2, 0x118B2, eos,
0x118D3, 0x118B3, eos,
0x118D4, 0x118B4, eos,
0x118D5, 0x118B5, eos, // 4072
0x118D6, 0x118B6, eos,
0x118D7, 0x118B7, eos,
0x118D8, 0x118B8, eos, // 4081
0x118D9, 0x118B9, eos,
0x118DA, 0x118BA, eos,
0x118DB, 0x118BB, eos, // 4090
0x118DC, 0x118BC, eos,
0x118DD, 0x118BD, eos,
0x118DE, 0x118BE, eos,
0x118DF, 0x118BF, eos, // 4102
0x16E60, 0x16E40, eos,
0x16E61, 0x16E41, eos,
0x16E62, 0x16E42, eos, // 4111
0x16E63, 0x16E43, eos,
0x16E64, 0x16E44, eos,
0x16E65, 0x16E45, eos, // 4120
0x16E66, 0x16E46, eos,
0x16E67, 0x16E47, eos,
0x16E68, 0x16E48, eos,
0x16E69, 0x16E49, eos, // 4132
0x16E6A, 0x16E4A, eos,
0x16E6B, 0x16E4B, eos,
0x16E6C, 0x16E4C, eos, // 4141
0x16E6D, 0x16E4D, eos,
0x16E6E, 0x16E4E, eos,
0x16E6F, 0x16E4F, eos, // 4150
0x16E70, 0x16E50, eos,
0x16E71, 0x16E51, eos,
0x16E72, 0x16E52, eos,
0x16E73, 0x16E53, eos, // 4162
0x16E74, 0x16E54, eos,
0x16E75, 0x16E55, eos,
0x16E76, 0x16E56, eos, // 4171
0x16E77, 0x16E57, eos,
0x16E78, 0x16E58, eos,
0x16E79, 0x16E59, eos, // 4180
0x16E7A, 0x16E5A, eos,
0x16E7B, 0x16E5B, eos,
0x16E7C, 0x16E5C, eos,
0x16E7D, 0x16E5D, eos, // 4192
0x16E7E, 0x16E5E, eos,
0x16E7F, 0x16E5F, eos,
0x1E922, 0x1E900, eos, // 4201
0x1E923, 0x1E901, eos,
0x1E924, 0x1E902, eos,
0x1E925, 0x1E903, eos, // 4210
0x1E926, 0x1E904, eos,
0x1E927, 0x1E905, eos,
0x1E928, 0x1E906, eos,
0x1E929, 0x1E907, eos, // 4222
0x1E92A, 0x1E908, eos,
0x1E92B, 0x1E909, eos,
0x1E92C, 0x1E90A, eos, // 4231
0x1E92D, 0x1E90B, eos,
0x1E92E, 0x1E90C, eos,
0x1E92F, 0x1E90D, eos, // 4240
0x1E930, 0x1E90E, eos,
0x1E931, 0x1E90F, eos,
0x1E932, 0x1E910, eos,
0x1E933, 0x1E911, eos, // 4252
0x1E934, 0x1E912, eos,
0x1E935, 0x1E913, eos,
0x1E936, 0x1E914, eos, // 4261
0x1E937, 0x1E915, eos,
0x1E938, 0x1E916, eos,
0x1E939, 0x1E917, eos, // 4270
0x1E93A, 0x1E918, eos,
0x1E93B, 0x1E919, eos,
0x1E93C, 0x1E91A, eos,
0x1E93D, 0x1E91B, eos, // 4282
0x1E93E, 0x1E91C, eos,
0x1E93F, 0x1E91D, eos,
0x1E940, 0x1E91E, eos, // 4291
0x1E941, 0x1E91F, eos,
0x1E942, 0x1E920, eos,
0x1E943, 0x1E921, eos // 4300
};
#define SRELL_UCFDATA_VERSION 200
// ... "srell_ucfdata2.hpp"]
namespace ucf_internal
{
typedef unicode_casefolding<uchar32, uchar32> ucf_data;
} // namespace ucf_internal
#endif // !defined(SRELL_NO_UNICODE_ICASE)
class unicode_case_folding
{
public:
#if !defined(SRELL_NO_UNICODE_ICASE)
static const uchar32 rev_maxset = ucf_internal::ucf_data::rev_maxset;
#else
static const uchar32 rev_maxset = 2;
#endif
static uchar32 do_casefolding(const uchar32 cp)
{
#if !defined(SRELL_NO_UNICODE_ICASE)
if (cp <= ucf_internal::ucf_data::ucf_maxcodepoint)
return cp + ucf_internal::ucf_data::ucf_deltatable[ucf_internal::ucf_data::ucf_segmenttable[cp >> 8] + (cp & 0xff)];
#else
if (cp >= char_alnum::ch_A && cp <= char_alnum::ch_Z) // 'A' && 'Z'
return static_cast<uchar32>(cp - char_alnum::ch_A + char_alnum::ch_a); // - 'A' + 'a'
#endif
return cp;
}
static uchar32 casefoldedcharset(uchar32 out[rev_maxset], const uchar32 cp)
{
#if !defined(SRELL_NO_UNICODE_ICASE)
uchar32 count = 0;
if (cp <= ucf_internal::ucf_data::rev_maxcodepoint)
{
const uchar32 offset_of_charset = ucf_internal::ucf_data::rev_indextable[ucf_internal::ucf_data::rev_segmenttable[cp >> 8] + (cp & 0xff)];
const uchar32 *ptr = &ucf_internal::ucf_data::rev_charsettable[offset_of_charset];
for (; *ptr != cfcharset_eos_ && count < rev_maxset; ++ptr, ++count)
out[count] = *ptr;
}
if (count == 0)
out[count++] = cp;
return count;
#else
// const uchar32 nocase = static_cast<uchar32>(cp & ~0x20);
const uchar32 nocase = static_cast<uchar32>(cp | constants::asc_icase);
out[0] = cp;
// if (nocase >= char_alnum::ch_A && nocase <= char_alnum::ch_Z)
if (nocase >= char_alnum::ch_a && nocase <= char_alnum::ch_z)
{
out[1] = static_cast<uchar32>(cp ^ constants::asc_icase);
return 2;
}
return 1;
#endif
}
unicode_case_folding &operator=(const unicode_case_folding &)
{
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
unicode_case_folding &operator=(unicode_case_folding &&) SRELL_NOEXCEPT
{
return *this;
}
#endif
void swap(unicode_case_folding & /* right */)
{
}
private:
#if !defined(SRELL_NO_UNICODE_ICASE)
static const uchar32 cfcharset_eos_ = ucf_internal::ucf_data::eos;
#endif
public: // For debug.
void print_tables() const;
};
// unicode_case_folding
} // namespace regex_internal
// ... "rei_ucf.hpp"]
// ["rei_up.hpp" ...
namespace regex_internal
{
#if !defined(SRELL_NO_UNICODE_PROPERTY)
// ["srell_updata.hpp" ...
// UnicodeData.txt
//
// PropList-14.0.0.txt
// Date: 2021-08-12, 23:13:05 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
//
// DerivedCoreProperties-14.0.0.txt
// Date: 2021-08-12, 23:12:53 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
//
// emoji-data-14.0.0.txt
// Date: 2021-08-26, 17:22:22 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
//
// DerivedNormalizationProps-14.0.0.txt
// Date: 2021-06-04, 02:19:20 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
//
// Scripts-14.0.0.txt
// Date: 2021-07-10, 00:35:31 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
//
// ScriptExtensions-14.0.0.txt
// Date: 2021-06-04, 02:19:38 GMT
// © 2021 Unicode®, Inc.
// Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
// For terms of use, see http://www.unicode.org/terms_of_use.html
//
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
struct unicode_property_data
{
static const T1 unknown = 0;
static const T1 gc_Other = 1; // #1
static const T1 gc_Control = 2; // #2
static const T1 gc_Format = 3; // #3
static const T1 gc_Unassigned = 4; // #4
static const T1 gc_Private_Use = 5; // #5
static const T1 gc_Surrogate = 6; // #6
static const T1 gc_Letter = 7; // #7
static const T1 gc_Cased_Letter = 8; // #8
static const T1 gc_Lowercase_Letter = 9; // #9
static const T1 gc_Titlecase_Letter = 10; // #10
static const T1 gc_Uppercase_Letter = 11; // #11
static const T1 gc_Modifier_Letter = 12; // #12
static const T1 gc_Other_Letter = 13; // #13
static const T1 gc_Mark = 14; // #14
static const T1 gc_Spacing_Mark = 15; // #15
static const T1 gc_Enclosing_Mark = 16; // #16
static const T1 gc_Nonspacing_Mark = 17; // #17
static const T1 gc_Number = 18; // #18
static const T1 gc_Decimal_Number = 19; // #19
static const T1 gc_Letter_Number = 20; // #20
static const T1 gc_Other_Number = 21; // #21
static const T1 gc_Punctuation = 22; // #22
static const T1 gc_Connector_Punctuation = 23; // #23
static const T1 gc_Dash_Punctuation = 24; // #24
static const T1 gc_Close_Punctuation = 25; // #25
static const T1 gc_Final_Punctuation = 26; // #26
static const T1 gc_Initial_Punctuation = 27; // #27
static const T1 gc_Other_Punctuation = 28; // #28
static const T1 gc_Open_Punctuation = 29; // #29
static const T1 gc_Symbol = 30; // #30
static const T1 gc_Currency_Symbol = 31; // #31
static const T1 gc_Modifier_Symbol = 32; // #32
static const T1 gc_Math_Symbol = 33; // #33
static const T1 gc_Other_Symbol = 34; // #34
static const T1 gc_Separator = 35; // #35
static const T1 gc_Line_Separator = 36; // #36
static const T1 gc_Paragraph_Separator = 37; // #37
static const T1 gc_Space_Separator = 38; // #38
static const T1 bp_ASCII = 39; // #39
static const T1 bp_ASCII_Hex_Digit = 40; // #40
static const T1 bp_Alphabetic = 41; // #41
static const T1 bp_Any = 42; // #42
static const T1 bp_Assigned = 43; // #43
static const T1 bp_Bidi_Control = 44; // #44
static const T1 bp_Bidi_Mirrored = 45; // #45
static const T1 bp_Case_Ignorable = 46; // #46
static const T1 bp_Cased = 47; // #47
static const T1 bp_Changes_When_Casefolded = 48; // #48
static const T1 bp_Changes_When_Casemapped = 49; // #49
static const T1 bp_Changes_When_Lowercased = 50; // #50
static const T1 bp_Changes_When_NFKC_Casefolded = 51; // #51
static const T1 bp_Changes_When_Titlecased = 52; // #52
static const T1 bp_Changes_When_Uppercased = 53; // #53
static const T1 bp_Dash = 54; // #54
static const T1 bp_Default_Ignorable_Code_Point = 55; // #55
static const T1 bp_Deprecated = 56; // #56
static const T1 bp_Diacritic = 57; // #57
static const T1 bp_Emoji = 58; // #58
static const T1 bp_Emoji_Component = 59; // #59
static const T1 bp_Emoji_Modifier = 60; // #60
static const T1 bp_Emoji_Modifier_Base = 61; // #61
static const T1 bp_Emoji_Presentation = 62; // #62
static const T1 bp_Extended_Pictographic = 63; // #63
static const T1 bp_Extender = 64; // #64
static const T1 bp_Grapheme_Base = 65; // #65
static const T1 bp_Grapheme_Extend = 66; // #66
static const T1 bp_Hex_Digit = 67; // #67
static const T1 bp_IDS_Binary_Operator = 68; // #68
static const T1 bp_IDS_Trinary_Operator = 69; // #69
static const T1 bp_ID_Continue = 70; // #70
static const T1 bp_ID_Start = 71; // #71
static const T1 bp_Ideographic = 72; // #72
static const T1 bp_Join_Control = 73; // #73
static const T1 bp_Logical_Order_Exception = 74; // #74
static const T1 bp_Lowercase = 75; // #75
static const T1 bp_Math = 76; // #76
static const T1 bp_Noncharacter_Code_Point = 77; // #77
static const T1 bp_Pattern_Syntax = 78; // #78
static const T1 bp_Pattern_White_Space = 79; // #79
static const T1 bp_Quotation_Mark = 80; // #80
static const T1 bp_Radical = 81; // #81
static const T1 bp_Regional_Indicator = 82; // #82
static const T1 bp_Sentence_Terminal = 83; // #83
static const T1 bp_Soft_Dotted = 84; // #84
static const T1 bp_Terminal_Punctuation = 85; // #85
static const T1 bp_Unified_Ideograph = 86; // #86
static const T1 bp_Uppercase = 87; // #87
static const T1 bp_Variation_Selector = 88; // #88
static const T1 bp_White_Space = 89; // #89
static const T1 bp_XID_Continue = 90; // #90
static const T1 bp_XID_Start = 91; // #91
static const T1 sc_Adlam = 92; // #92
static const T1 sc_Ahom = 93; // #93
static const T1 sc_Anatolian_Hieroglyphs = 94; // #94
static const T1 sc_Arabic = 95; // #95
static const T1 sc_Armenian = 96; // #96
static const T1 sc_Avestan = 97; // #97
static const T1 sc_Balinese = 98; // #98
static const T1 sc_Bamum = 99; // #99
static const T1 sc_Bassa_Vah = 100; // #100
static const T1 sc_Batak = 101; // #101
static const T1 sc_Bengali = 102; // #102
static const T1 sc_Bhaiksuki = 103; // #103
static const T1 sc_Bopomofo = 104; // #104
static const T1 sc_Brahmi = 105; // #105
static const T1 sc_Braille = 106; // #106
static const T1 sc_Buginese = 107; // #107
static const T1 sc_Buhid = 108; // #108
static const T1 sc_Canadian_Aboriginal = 109; // #109
static const T1 sc_Carian = 110; // #110
static const T1 sc_Caucasian_Albanian = 111; // #111
static const T1 sc_Chakma = 112; // #112
static const T1 sc_Cham = 113; // #113
static const T1 sc_Cherokee = 114; // #114
static const T1 sc_Chorasmian = 115; // #115
static const T1 sc_Common = 116; // #116
static const T1 sc_Coptic = 117; // #117
static const T1 sc_Cypro_Minoan = 118; // #118
static const T1 sc_Cuneiform = 119; // #119
static const T1 sc_Cypriot = 120; // #120
static const T1 sc_Cyrillic = 121; // #121
static const T1 sc_Deseret = 122; // #122
static const T1 sc_Devanagari = 123; // #123
static const T1 sc_Dives_Akuru = 124; // #124
static const T1 sc_Dogra = 125; // #125
static const T1 sc_Duployan = 126; // #126
static const T1 sc_Egyptian_Hieroglyphs = 127; // #127
static const T1 sc_Elbasan = 128; // #128
static const T1 sc_Elymaic = 129; // #129
static const T1 sc_Ethiopic = 130; // #130
static const T1 sc_Georgian = 131; // #131
static const T1 sc_Glagolitic = 132; // #132
static const T1 sc_Gothic = 133; // #133
static const T1 sc_Grantha = 134; // #134
static const T1 sc_Greek = 135; // #135
static const T1 sc_Gujarati = 136; // #136
static const T1 sc_Gunjala_Gondi = 137; // #137
static const T1 sc_Gurmukhi = 138; // #138
static const T1 sc_Han = 139; // #139
static const T1 sc_Hangul = 140; // #140
static const T1 sc_Hanifi_Rohingya = 141; // #141
static const T1 sc_Hanunoo = 142; // #142
static const T1 sc_Hatran = 143; // #143
static const T1 sc_Hebrew = 144; // #144
static const T1 sc_Hiragana = 145; // #145
static const T1 sc_Imperial_Aramaic = 146; // #146
static const T1 sc_Inherited = 147; // #147
static const T1 sc_Inscriptional_Pahlavi = 148; // #148
static const T1 sc_Inscriptional_Parthian = 149; // #149
static const T1 sc_Javanese = 150; // #150
static const T1 sc_Kaithi = 151; // #151
static const T1 sc_Kannada = 152; // #152
static const T1 sc_Katakana = 153; // #153
static const T1 sc_Kayah_Li = 154; // #154
static const T1 sc_Kharoshthi = 155; // #155
static const T1 sc_Khitan_Small_Script = 156; // #156
static const T1 sc_Khmer = 157; // #157
static const T1 sc_Khojki = 158; // #158
static const T1 sc_Khudawadi = 159; // #159
static const T1 sc_Lao = 160; // #160
static const T1 sc_Latin = 161; // #161
static const T1 sc_Lepcha = 162; // #162
static const T1 sc_Limbu = 163; // #163
static const T1 sc_Linear_A = 164; // #164
static const T1 sc_Linear_B = 165; // #165
static const T1 sc_Lisu = 166; // #166
static const T1 sc_Lycian = 167; // #167
static const T1 sc_Lydian = 168; // #168
static const T1 sc_Mahajani = 169; // #169
static const T1 sc_Makasar = 170; // #170
static const T1 sc_Malayalam = 171; // #171
static const T1 sc_Mandaic = 172; // #172
static const T1 sc_Manichaean = 173; // #173
static const T1 sc_Marchen = 174; // #174
static const T1 sc_Masaram_Gondi = 175; // #175
static const T1 sc_Medefaidrin = 176; // #176
static const T1 sc_Meetei_Mayek = 177; // #177
static const T1 sc_Mende_Kikakui = 178; // #178
static const T1 sc_Meroitic_Cursive = 179; // #179
static const T1 sc_Meroitic_Hieroglyphs = 180; // #180
static const T1 sc_Miao = 181; // #181
static const T1 sc_Modi = 182; // #182
static const T1 sc_Mongolian = 183; // #183
static const T1 sc_Mro = 184; // #184
static const T1 sc_Multani = 185; // #185
static const T1 sc_Myanmar = 186; // #186
static const T1 sc_Nabataean = 187; // #187
static const T1 sc_Nandinagari = 188; // #188
static const T1 sc_New_Tai_Lue = 189; // #189
static const T1 sc_Newa = 190; // #190
static const T1 sc_Nko = 191; // #191
static const T1 sc_Nushu = 192; // #192
static const T1 sc_Nyiakeng_Puachue_Hmong = 193; // #193
static const T1 sc_Ogham = 194; // #194
static const T1 sc_Ol_Chiki = 195; // #195
static const T1 sc_Old_Hungarian = 196; // #196
static const T1 sc_Old_Italic = 197; // #197
static const T1 sc_Old_North_Arabian = 198; // #198
static const T1 sc_Old_Permic = 199; // #199
static const T1 sc_Old_Persian = 200; // #200
static const T1 sc_Old_Sogdian = 201; // #201
static const T1 sc_Old_South_Arabian = 202; // #202
static const T1 sc_Old_Turkic = 203; // #203
static const T1 sc_Old_Uyghur = 204; // #204
static const T1 sc_Oriya = 205; // #205
static const T1 sc_Osage = 206; // #206
static const T1 sc_Osmanya = 207; // #207
static const T1 sc_Pahawh_Hmong = 208; // #208
static const T1 sc_Palmyrene = 209; // #209
static const T1 sc_Pau_Cin_Hau = 210; // #210
static const T1 sc_Phags_Pa = 211; // #211
static const T1 sc_Phoenician = 212; // #212
static const T1 sc_Psalter_Pahlavi = 213; // #213
static const T1 sc_Rejang = 214; // #214
static const T1 sc_Runic = 215; // #215
static const T1 sc_Samaritan = 216; // #216
static const T1 sc_Saurashtra = 217; // #217
static const T1 sc_Sharada = 218; // #218
static const T1 sc_Shavian = 219; // #219
static const T1 sc_Siddham = 220; // #220
static const T1 sc_SignWriting = 221; // #221
static const T1 sc_Sinhala = 222; // #222
static const T1 sc_Sogdian = 223; // #223
static const T1 sc_Sora_Sompeng = 224; // #224
static const T1 sc_Soyombo = 225; // #225
static const T1 sc_Sundanese = 226; // #226
static const T1 sc_Syloti_Nagri = 227; // #227
static const T1 sc_Syriac = 228; // #228
static const T1 sc_Tagalog = 229; // #229
static const T1 sc_Tagbanwa = 230; // #230
static const T1 sc_Tai_Le = 231; // #231
static const T1 sc_Tai_Tham = 232; // #232
static const T1 sc_Tai_Viet = 233; // #233
static const T1 sc_Takri = 234; // #234
static const T1 sc_Tamil = 235; // #235
static const T1 sc_Tangsa = 236; // #236
static const T1 sc_Tangut = 237; // #237
static const T1 sc_Telugu = 238; // #238
static const T1 sc_Thaana = 239; // #239
static const T1 sc_Thai = 240; // #240
static const T1 sc_Tibetan = 241; // #241
static const T1 sc_Tifinagh = 242; // #242
static const T1 sc_Tirhuta = 243; // #243
static const T1 sc_Toto = 244; // #244
static const T1 sc_Ugaritic = 245; // #245
static const T1 sc_Vai = 246; // #246
static const T1 sc_Vithkuqi = 247; // #247
static const T1 sc_Wancho = 248; // #248
static const T1 sc_Warang_Citi = 249; // #249
static const T1 sc_Yezidi = 250; // #250
static const T1 sc_Yi = 251; // #251
static const T1 sc_Zanabazar_Square = 252; // #252
static const T1 scx_Adlam = 253; // #253
static const T1 scx_Ahom = 254; // #93
static const T1 scx_Anatolian_Hieroglyphs = 255; // #94
static const T1 scx_Arabic = 256; // #254
static const T1 scx_Armenian = 257; // #96
static const T1 scx_Avestan = 258; // #97
static const T1 scx_Balinese = 259; // #98
static const T1 scx_Bamum = 260; // #99
static const T1 scx_Bassa_Vah = 261; // #100
static const T1 scx_Batak = 262; // #101
static const T1 scx_Bengali = 263; // #255
static const T1 scx_Bhaiksuki = 264; // #103
static const T1 scx_Bopomofo = 265; // #256
static const T1 scx_Brahmi = 266; // #105
static const T1 scx_Braille = 267; // #106
static const T1 scx_Buginese = 268; // #257
static const T1 scx_Buhid = 269; // #258
static const T1 scx_Canadian_Aboriginal = 270; // #109
static const T1 scx_Carian = 271; // #110
static const T1 scx_Caucasian_Albanian = 272; // #111
static const T1 scx_Chakma = 273; // #259
static const T1 scx_Cham = 274; // #113
static const T1 scx_Cherokee = 275; // #114
static const T1 scx_Chorasmian = 276; // #115
static const T1 scx_Common = 277; // #260
static const T1 scx_Coptic = 278; // #261
static const T1 scx_Cypro_Minoan = 279; // #262
static const T1 scx_Cuneiform = 280; // #119
static const T1 scx_Cypriot = 281; // #263
static const T1 scx_Cyrillic = 282; // #264
static const T1 scx_Deseret = 283; // #122
static const T1 scx_Devanagari = 284; // #265
static const T1 scx_Dives_Akuru = 285; // #124
static const T1 scx_Dogra = 286; // #266
static const T1 scx_Duployan = 287; // #267
static const T1 scx_Egyptian_Hieroglyphs = 288; // #127
static const T1 scx_Elbasan = 289; // #128
static const T1 scx_Elymaic = 290; // #129
static const T1 scx_Ethiopic = 291; // #130
static const T1 scx_Georgian = 292; // #268
static const T1 scx_Glagolitic = 293; // #269
static const T1 scx_Gothic = 294; // #133
static const T1 scx_Grantha = 295; // #270
static const T1 scx_Greek = 296; // #271
static const T1 scx_Gujarati = 297; // #272
static const T1 scx_Gunjala_Gondi = 298; // #273
static const T1 scx_Gurmukhi = 299; // #274
static const T1 scx_Han = 300; // #275
static const T1 scx_Hangul = 301; // #276
static const T1 scx_Hanifi_Rohingya = 302; // #277
static const T1 scx_Hanunoo = 303; // #278
static const T1 scx_Hatran = 304; // #143
static const T1 scx_Hebrew = 305; // #144
static const T1 scx_Hiragana = 306; // #279
static const T1 scx_Imperial_Aramaic = 307; // #146
static const T1 scx_Inherited = 308; // #280
static const T1 scx_Inscriptional_Pahlavi = 309; // #148
static const T1 scx_Inscriptional_Parthian = 310; // #149
static const T1 scx_Javanese = 311; // #281
static const T1 scx_Kaithi = 312; // #282
static const T1 scx_Kannada = 313; // #283
static const T1 scx_Katakana = 314; // #284
static const T1 scx_Kayah_Li = 315; // #285
static const T1 scx_Kharoshthi = 316; // #155
static const T1 scx_Khitan_Small_Script = 317; // #156
static const T1 scx_Khmer = 318; // #157
static const T1 scx_Khojki = 319; // #286
static const T1 scx_Khudawadi = 320; // #287
static const T1 scx_Lao = 321; // #160
static const T1 scx_Latin = 322; // #288
static const T1 scx_Lepcha = 323; // #162
static const T1 scx_Limbu = 324; // #289
static const T1 scx_Linear_A = 325; // #290
static const T1 scx_Linear_B = 326; // #291
static const T1 scx_Lisu = 327; // #166
static const T1 scx_Lycian = 328; // #167
static const T1 scx_Lydian = 329; // #168
static const T1 scx_Mahajani = 330; // #292
static const T1 scx_Makasar = 331; // #170
static const T1 scx_Malayalam = 332; // #293
static const T1 scx_Mandaic = 333; // #294
static const T1 scx_Manichaean = 334; // #295
static const T1 scx_Marchen = 335; // #174
static const T1 scx_Masaram_Gondi = 336; // #296
static const T1 scx_Medefaidrin = 337; // #176
static const T1 scx_Meetei_Mayek = 338; // #177
static const T1 scx_Mende_Kikakui = 339; // #178
static const T1 scx_Meroitic_Cursive = 340; // #179
static const T1 scx_Meroitic_Hieroglyphs = 341; // #180
static const T1 scx_Miao = 342; // #181
static const T1 scx_Modi = 343; // #297
static const T1 scx_Mongolian = 344; // #298
static const T1 scx_Mro = 345; // #184
static const T1 scx_Multani = 346; // #299
static const T1 scx_Myanmar = 347; // #300
static const T1 scx_Nabataean = 348; // #187
static const T1 scx_Nandinagari = 349; // #301
static const T1 scx_New_Tai_Lue = 350; // #189
static const T1 scx_Newa = 351; // #190
static const T1 scx_Nko = 352; // #302
static const T1 scx_Nushu = 353; // #192
static const T1 scx_Nyiakeng_Puachue_Hmong = 354; // #193
static const T1 scx_Ogham = 355; // #194
static const T1 scx_Ol_Chiki = 356; // #195
static const T1 scx_Old_Hungarian = 357; // #196
static const T1 scx_Old_Italic = 358; // #197
static const T1 scx_Old_North_Arabian = 359; // #198
static const T1 scx_Old_Permic = 360; // #303
static const T1 scx_Old_Persian = 361; // #200
static const T1 scx_Old_Sogdian = 362; // #201
static const T1 scx_Old_South_Arabian = 363; // #202
static const T1 scx_Old_Turkic = 364; // #203
static const T1 scx_Old_Uyghur = 365; // #304
static const T1 scx_Oriya = 366; // #305
static const T1 scx_Osage = 367; // #206
static const T1 scx_Osmanya = 368; // #207
static const T1 scx_Pahawh_Hmong = 369; // #208
static const T1 scx_Palmyrene = 370; // #209
static const T1 scx_Pau_Cin_Hau = 371; // #210
static const T1 scx_Phags_Pa = 372; // #306
static const T1 scx_Phoenician = 373; // #212
static const T1 scx_Psalter_Pahlavi = 374; // #307
static const T1 scx_Rejang = 375; // #214
static const T1 scx_Runic = 376; // #215
static const T1 scx_Samaritan = 377; // #216
static const T1 scx_Saurashtra = 378; // #217
static const T1 scx_Sharada = 379; // #308
static const T1 scx_Shavian = 380; // #219
static const T1 scx_Siddham = 381; // #220
static const T1 scx_SignWriting = 382; // #221
static const T1 scx_Sinhala = 383; // #309
static const T1 scx_Sogdian = 384; // #310
static const T1 scx_Sora_Sompeng = 385; // #224
static const T1 scx_Soyombo = 386; // #225
static const T1 scx_Sundanese = 387; // #226
static const T1 scx_Syloti_Nagri = 388; // #311
static const T1 scx_Syriac = 389; // #312
static const T1 scx_Tagalog = 390; // #313
static const T1 scx_Tagbanwa = 391; // #314
static const T1 scx_Tai_Le = 392; // #315
static const T1 scx_Tai_Tham = 393; // #232
static const T1 scx_Tai_Viet = 394; // #233
static const T1 scx_Takri = 395; // #316
static const T1 scx_Tamil = 396; // #317
static const T1 scx_Tangsa = 397; // #236
static const T1 scx_Tangut = 398; // #237
static const T1 scx_Telugu = 399; // #318
static const T1 scx_Thaana = 400; // #319
static const T1 scx_Thai = 401; // #240
static const T1 scx_Tibetan = 402; // #241
static const T1 scx_Tifinagh = 403; // #242
static const T1 scx_Tirhuta = 404; // #320
static const T1 scx_Toto = 405; // #244
static const T1 scx_Ugaritic = 406; // #245
static const T1 scx_Vai = 407; // #246
static const T1 scx_Vithkuqi = 408; // #247
static const T1 scx_Wancho = 409; // #248
static const T1 scx_Warang_Citi = 410; // #249
static const T1 scx_Yezidi = 411; // #321
static const T1 scx_Yi = 412; // #322
static const T1 scx_Zanabazar_Square = 413; // #252
static const T1 last_property_number = 322;
struct ptype
{
static const T2 unknown = 0;
static const T2 binary = 1;
static const T2 general_category = 2;
static const T2 script = 3;
static const T2 script_extensions = 4;
};
static const T3 propertynametable[];
static const T4 rangetable[];
static const T5 rangenumbertable[];
static const T6 positiontable[];
static const T3 *propertyname_table()
{
return propertynametable;
}
static const T4 *ranges()
{
return rangetable;
}
static const T5 *rangenumber_table()
{
return rangenumbertable;
}
static const T6 *position_table()
{
return positiontable;
}
};
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
const T3 unicode_property_data<T1, T2, T3, T4, T5, T6>::propertynametable[] =
{
"*", // #0:unknown
"*", // #1:binary
"General_Category:gc", // #2
"Script:sc", // #3
"Script_Extensions:scx", // #4
""
};
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
const T4 unicode_property_data<T1, T2, T3, T4, T5, T6>::rangetable[] =
{
// #1 (0+725): gc=Other:C
// Cc:2 + Cf:21 + Cn:698 + Co:3 + Cs:1
// #2 (0+2): gc=Control:Cc:cntrl
0x0000, 0x001F, 0x007F, 0x009F,
// #3 (2+21): gc=Format:Cf
0x00AD, 0x00AD, 0x0600, 0x0605, 0x061C, 0x061C, 0x06DD, 0x06DD,
0x070F, 0x070F, 0x0890, 0x0891, 0x08E2, 0x08E2, 0x180E, 0x180E,
0x200B, 0x200F, 0x202A, 0x202E, 0x2060, 0x2064, 0x2066, 0x206F,
0xFEFF, 0xFEFF, 0xFFF9, 0xFFFB, 0x110BD, 0x110BD, 0x110CD, 0x110CD,
0x13430, 0x13438, 0x1BCA0, 0x1BCA3, 0x1D173, 0x1D17A, 0xE0001, 0xE0001,
0xE0020, 0xE007F,
// #4 (23+698): gc=Unassigned:Cn
0x0378, 0x0379, 0x0380, 0x0383, 0x038B, 0x038B, 0x038D, 0x038D,
0x03A2, 0x03A2, 0x0530, 0x0530, 0x0557, 0x0558, 0x058B, 0x058C,
0x0590, 0x0590, 0x05C8, 0x05CF, 0x05EB, 0x05EE, 0x05F5, 0x05FF,
0x070E, 0x070E, 0x074B, 0x074C, 0x07B2, 0x07BF, 0x07FB, 0x07FC,
0x082E, 0x082F, 0x083F, 0x083F, 0x085C, 0x085D, 0x085F, 0x085F,
0x086B, 0x086F, 0x088F, 0x088F, 0x0892, 0x0897, 0x0984, 0x0984,
0x098D, 0x098E, 0x0991, 0x0992, 0x09A9, 0x09A9, 0x09B1, 0x09B1,
0x09B3, 0x09B5, 0x09BA, 0x09BB, 0x09C5, 0x09C6, 0x09C9, 0x09CA,
0x09CF, 0x09D6, 0x09D8, 0x09DB, 0x09DE, 0x09DE, 0x09E4, 0x09E5,
0x09FF, 0x0A00, 0x0A04, 0x0A04, 0x0A0B, 0x0A0E, 0x0A11, 0x0A12,
0x0A29, 0x0A29, 0x0A31, 0x0A31, 0x0A34, 0x0A34, 0x0A37, 0x0A37,
0x0A3A, 0x0A3B, 0x0A3D, 0x0A3D, 0x0A43, 0x0A46, 0x0A49, 0x0A4A,
0x0A4E, 0x0A50, 0x0A52, 0x0A58, 0x0A5D, 0x0A5D, 0x0A5F, 0x0A65,
0x0A77, 0x0A80, 0x0A84, 0x0A84, 0x0A8E, 0x0A8E, 0x0A92, 0x0A92,
0x0AA9, 0x0AA9, 0x0AB1, 0x0AB1, 0x0AB4, 0x0AB4, 0x0ABA, 0x0ABB,
0x0AC6, 0x0AC6, 0x0ACA, 0x0ACA, 0x0ACE, 0x0ACF, 0x0AD1, 0x0ADF,
0x0AE4, 0x0AE5, 0x0AF2, 0x0AF8, 0x0B00, 0x0B00, 0x0B04, 0x0B04,
0x0B0D, 0x0B0E, 0x0B11, 0x0B12, 0x0B29, 0x0B29, 0x0B31, 0x0B31,
0x0B34, 0x0B34, 0x0B3A, 0x0B3B, 0x0B45, 0x0B46, 0x0B49, 0x0B4A,
0x0B4E, 0x0B54, 0x0B58, 0x0B5B, 0x0B5E, 0x0B5E, 0x0B64, 0x0B65,
0x0B78, 0x0B81, 0x0B84, 0x0B84, 0x0B8B, 0x0B8D, 0x0B91, 0x0B91,
0x0B96, 0x0B98, 0x0B9B, 0x0B9B, 0x0B9D, 0x0B9D, 0x0BA0, 0x0BA2,
0x0BA5, 0x0BA7, 0x0BAB, 0x0BAD, 0x0BBA, 0x0BBD, 0x0BC3, 0x0BC5,
0x0BC9, 0x0BC9, 0x0BCE, 0x0BCF, 0x0BD1, 0x0BD6, 0x0BD8, 0x0BE5,
0x0BFB, 0x0BFF, 0x0C0D, 0x0C0D, 0x0C11, 0x0C11, 0x0C29, 0x0C29,
0x0C3A, 0x0C3B, 0x0C45, 0x0C45, 0x0C49, 0x0C49, 0x0C4E, 0x0C54,
0x0C57, 0x0C57, 0x0C5B, 0x0C5C, 0x0C5E, 0x0C5F, 0x0C64, 0x0C65,
0x0C70, 0x0C76, 0x0C8D, 0x0C8D, 0x0C91, 0x0C91, 0x0CA9, 0x0CA9,
0x0CB4, 0x0CB4, 0x0CBA, 0x0CBB, 0x0CC5, 0x0CC5, 0x0CC9, 0x0CC9,
0x0CCE, 0x0CD4, 0x0CD7, 0x0CDC, 0x0CDF, 0x0CDF, 0x0CE4, 0x0CE5,
0x0CF0, 0x0CF0, 0x0CF3, 0x0CFF, 0x0D0D, 0x0D0D, 0x0D11, 0x0D11,
0x0D45, 0x0D45, 0x0D49, 0x0D49, 0x0D50, 0x0D53, 0x0D64, 0x0D65,
0x0D80, 0x0D80, 0x0D84, 0x0D84, 0x0D97, 0x0D99, 0x0DB2, 0x0DB2,
0x0DBC, 0x0DBC, 0x0DBE, 0x0DBF, 0x0DC7, 0x0DC9, 0x0DCB, 0x0DCE,
0x0DD5, 0x0DD5, 0x0DD7, 0x0DD7, 0x0DE0, 0x0DE5, 0x0DF0, 0x0DF1,
0x0DF5, 0x0E00, 0x0E3B, 0x0E3E, 0x0E5C, 0x0E80, 0x0E83, 0x0E83,
0x0E85, 0x0E85, 0x0E8B, 0x0E8B, 0x0EA4, 0x0EA4, 0x0EA6, 0x0EA6,
0x0EBE, 0x0EBF, 0x0EC5, 0x0EC5, 0x0EC7, 0x0EC7, 0x0ECE, 0x0ECF,
0x0EDA, 0x0EDB, 0x0EE0, 0x0EFF, 0x0F48, 0x0F48, 0x0F6D, 0x0F70,
0x0F98, 0x0F98, 0x0FBD, 0x0FBD, 0x0FCD, 0x0FCD, 0x0FDB, 0x0FFF,
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, 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, 0x2A6E0, 0x2A6FF, 0x2B739, 0x2B73F,
0x2B81E, 0x2B81F, 0x2CEA2, 0x2CEAF, 0x2EBE1, 0x2F7FF, 0x2FA1E, 0x2FFFF,
0x3134B, 0xE0000, 0xE0002, 0xE001F, 0xE0080, 0xE00FF, 0xE01F0, 0xEFFFF,
0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF,
// #5 (721+3): gc=Private_Use:Co
0xE000, 0xF8FF, 0xF0000, 0xFFFFD, 0x100000, 0x10FFFD,
// #6 (724+1): gc=Surrogate:Cs
0xD800, 0xDFFF,
// #7 (725+1883): gc=Letter:L
// Ll:657 + Lt:10 + Lu:646 + Lm:69 + Lo:501
// #8 (725+1313): gc=Cased_Letter:LC
// Ll:657 + Lt:10 + Lu:646
// #9 (725+657): gc=Lowercase_Letter:Ll
0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF,
0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107,
0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F,
0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F,
0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F,
0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0138,
0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140,
0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149,
0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151,
0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159,
0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161,
0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169,
0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171,
0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A,
0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185,
0x0188, 0x0188, 0x018C, 0x018D, 0x0192, 0x0192, 0x0195, 0x0195,
0x0199, 0x019B, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3,
0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AA, 0x01AB, 0x01AD, 0x01AD,
0x01B0, 0x01B0, 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01BA,
0x01BD, 0x01BF, 0x01C6, 0x01C6, 0x01C9, 0x01C9, 0x01CC, 0x01CC,
0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, 0x01D4, 0x01D4,
0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, 0x01DC, 0x01DD,
0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, 0x01E5, 0x01E5,
0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, 0x01ED, 0x01ED,
0x01EF, 0x01F0, 0x01F3, 0x01F3, 0x01F5, 0x01F5, 0x01F9, 0x01F9,
0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, 0x0201, 0x0201,
0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209,
0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, 0x0211, 0x0211,
0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219,
0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, 0x0221, 0x0221,
0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229,
0x022B, 0x022B, 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231,
0x0233, 0x0239, 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242,
0x0247, 0x0247, 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D,
0x024F, 0x0293, 0x0295, 0x02AF, 0x0371, 0x0371, 0x0373, 0x0373,
0x0377, 0x0377, 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE,
0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB,
0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3,
0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB,
0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8,
0x03FB, 0x03FC, 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463,
0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B,
0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473,
0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B,
0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B,
0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493,
0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B,
0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3,
0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB,
0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3,
0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB,
0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4,
0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC,
0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5,
0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD,
0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5,
0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED,
0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5,
0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD,
0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505,
0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D,
0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515,
0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D,
0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525,
0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D,
0x052F, 0x052F, 0x0560, 0x0588, 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, 0x1DF0B, 0x1DF1E,
0x1E922, 0x1E943,
// #10 (1382+10): gc=Titlecase_Letter:Lt
0x01C5, 0x01C5, 0x01C8, 0x01C8, 0x01CB, 0x01CB, 0x01F2, 0x01F2,
0x1F88, 0x1F8F, 0x1F98, 0x1F9F, 0x1FA8, 0x1FAF, 0x1FBC, 0x1FBC,
0x1FCC, 0x1FCC, 0x1FFC, 0x1FFC,
// #11 (1392+646): gc=Uppercase_Letter:Lu
0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100,
0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139,
0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141,
0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A,
0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152,
0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A,
0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162,
0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A,
0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172,
0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B,
0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187,
0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198,
0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4,
0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF,
0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC,
0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CD, 0x01CD,
0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
0x01F1, 0x01F1, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA,
0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202,
0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A,
0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212,
0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A,
0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222,
0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A,
0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232,
0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246,
0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E,
0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F,
0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F,
0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D2, 0x03D4,
0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6,
0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
0x03F4, 0x03F4, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F,
0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466,
0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E,
0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476,
0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E,
0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E,
0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496,
0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E,
0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6,
0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE,
0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6,
0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE,
0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7,
0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0,
0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8,
0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0,
0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8,
0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0,
0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8,
0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500,
0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508,
0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510,
0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518,
0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520,
0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528,
0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556,
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,
// #12 (2038+69): gc=Modifier_Letter:Lm
0x02B0, 0x02C1, 0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC,
0x02EE, 0x02EE, 0x0374, 0x0374, 0x037A, 0x037A, 0x0559, 0x0559,
0x0640, 0x0640, 0x06E5, 0x06E6, 0x07F4, 0x07F5, 0x07FA, 0x07FA,
0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x08C9, 0x08C9,
0x0971, 0x0971, 0x0E46, 0x0E46, 0x0EC6, 0x0EC6, 0x10FC, 0x10FC,
0x17D7, 0x17D7, 0x1843, 0x1843, 0x1AA7, 0x1AA7, 0x1C78, 0x1C7D,
0x1D2C, 0x1D6A, 0x1D78, 0x1D78, 0x1D9B, 0x1DBF, 0x2071, 0x2071,
0x207F, 0x207F, 0x2090, 0x209C, 0x2C7C, 0x2C7D, 0x2D6F, 0x2D6F,
0x2E2F, 0x2E2F, 0x3005, 0x3005, 0x3031, 0x3035, 0x303B, 0x303B,
0x309D, 0x309E, 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, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA,
0x16B40, 0x16B43, 0x16F93, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3,
0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1E137, 0x1E13D,
0x1E94B, 0x1E94B,
// #13 (2107+501): gc=Other_Letter:Lo
0x00AA, 0x00AA, 0x00BA, 0x00BA, 0x01BB, 0x01BB, 0x01C0, 0x01C3,
0x0294, 0x0294, 0x05D0, 0x05EA, 0x05EF, 0x05F2, 0x0620, 0x063F,
0x0641, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5,
0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x0710,
0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1, 0x07CA, 0x07EA,
0x0800, 0x0815, 0x0840, 0x0858, 0x0860, 0x086A, 0x0870, 0x0887,
0x0889, 0x088E, 0x08A0, 0x08C8, 0x0904, 0x0939, 0x093D, 0x093D,
0x0950, 0x0950, 0x0958, 0x0961, 0x0972, 0x0980, 0x0985, 0x098C,
0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2,
0x09B6, 0x09B9, 0x09BD, 0x09BD, 0x09CE, 0x09CE, 0x09DC, 0x09DD,
0x09DF, 0x09E1, 0x09F0, 0x09F1, 0x09FC, 0x09FC, 0x0A05, 0x0A0A,
0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33,
0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E,
0x0A72, 0x0A74, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD,
0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1, 0x0AF9, 0x0AF9, 0x0B05, 0x0B0C,
0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
0x0B35, 0x0B39, 0x0B3D, 0x0B3D, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61,
0x0B71, 0x0B71, 0x0B83, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90,
0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F,
0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0,
0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39,
0x0C3D, 0x0C3D, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C61,
0x0C80, 0x0C80, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8,
0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE,
0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2, 0x0D04, 0x0D0C, 0x0D0E, 0x0D10,
0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, 0x0D4E, 0x0D4E, 0x0D54, 0x0D56,
0x0D5F, 0x0D61, 0x0D7A, 0x0D7F, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0E01, 0x0E30,
0x0E32, 0x0E33, 0x0E40, 0x0E45, 0x0E81, 0x0E82, 0x0E84, 0x0E84,
0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0,
0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EDC, 0x0EDF,
0x0F00, 0x0F00, 0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C,
0x1000, 0x102A, 0x103F, 0x103F, 0x1050, 0x1055, 0x105A, 0x105D,
0x1061, 0x1061, 0x1065, 0x1066, 0x106E, 0x1070, 0x1075, 0x1081,
0x108E, 0x108E, 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, 0x1401, 0x166C, 0x166F, 0x167F,
0x1681, 0x169A, 0x16A0, 0x16EA, 0x16F1, 0x16F8, 0x1700, 0x1711,
0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C, 0x176E, 0x1770,
0x1780, 0x17B3, 0x17DC, 0x17DC, 0x1820, 0x1842, 0x1844, 0x1878,
0x1880, 0x1884, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5,
0x1900, 0x191E, 0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB,
0x19B0, 0x19C9, 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, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
0x3400, 0x4DBF, 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, 0xAABD, 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,
0xFA70, 0xFAD9, 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, 0xFF66, 0xFF6F,
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, 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,
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, 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, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D,
0x30000, 0x3134A,
// #14 (2608+518): gc=Mark:M:Combining_Mark
// Mc:177 + Me:5 + Mn:336
// #15 (2608+177): gc=Spacing_Mark:Mc
0x0903, 0x0903, 0x093B, 0x093B, 0x093E, 0x0940, 0x0949, 0x094C,
0x094E, 0x094F, 0x0982, 0x0983, 0x09BE, 0x09C0, 0x09C7, 0x09C8,
0x09CB, 0x09CC, 0x09D7, 0x09D7, 0x0A03, 0x0A03, 0x0A3E, 0x0A40,
0x0A83, 0x0A83, 0x0ABE, 0x0AC0, 0x0AC9, 0x0AC9, 0x0ACB, 0x0ACC,
0x0B02, 0x0B03, 0x0B3E, 0x0B3E, 0x0B40, 0x0B40, 0x0B47, 0x0B48,
0x0B4B, 0x0B4C, 0x0B57, 0x0B57, 0x0BBE, 0x0BBF, 0x0BC1, 0x0BC2,
0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, 0x0BD7, 0x0BD7, 0x0C01, 0x0C03,
0x0C41, 0x0C44, 0x0C82, 0x0C83, 0x0CBE, 0x0CBE, 0x0CC0, 0x0CC4,
0x0CC7, 0x0CC8, 0x0CCA, 0x0CCB, 0x0CD5, 0x0CD6, 0x0D02, 0x0D03,
0x0D3E, 0x0D40, 0x0D46, 0x0D48, 0x0D4A, 0x0D4C, 0x0D57, 0x0D57,
0x0D82, 0x0D83, 0x0DCF, 0x0DD1, 0x0DD8, 0x0DDF, 0x0DF2, 0x0DF3,
0x0F3E, 0x0F3F, 0x0F7F, 0x0F7F, 0x102B, 0x102C, 0x1031, 0x1031,
0x1038, 0x1038, 0x103B, 0x103C, 0x1056, 0x1057, 0x1062, 0x1064,
0x1067, 0x106D, 0x1083, 0x1084, 0x1087, 0x108C, 0x108F, 0x108F,
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, 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, 0xA953, 0xA983, 0xA983,
0xA9B4, 0xA9B5, 0xA9BA, 0xA9BB, 0xA9BE, 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, 0x111C0, 0x111CE, 0x111CE, 0x1122C, 0x1122E, 0x11232, 0x11233,
0x11235, 0x11235, 0x112E0, 0x112E2, 0x11302, 0x11303, 0x1133E, 0x1133F,
0x11341, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D, 0x11357, 0x11357,
0x11362, 0x11363, 0x11435, 0x11437, 0x11440, 0x11441, 0x11445, 0x11445,
0x114B0, 0x114B2, 0x114B9, 0x114B9, 0x114BB, 0x114BE, 0x114C1, 0x114C1,
0x115AF, 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, 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, 0x1D166,
0x1D16D, 0x1D172,
// #16 (2785+5): gc=Enclosing_Mark:Me
0x0488, 0x0489, 0x1ABE, 0x1ABE, 0x20DD, 0x20E0, 0x20E2, 0x20E4,
0xA670, 0xA672,
// #17 (2790+336): gc=Nonspacing_Mark:Mn
0x0300, 0x036F, 0x0483, 0x0487, 0x0591, 0x05BD, 0x05BF, 0x05BF,
0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x0610, 0x061A,
0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4,
0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A,
0x07A6, 0x07B0, 0x07EB, 0x07F3, 0x07FD, 0x07FD, 0x0816, 0x0819,
0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B,
0x0898, 0x089F, 0x08CA, 0x08E1, 0x08E3, 0x0902, 0x093A, 0x093A,
0x093C, 0x093C, 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957,
0x0962, 0x0963, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09C1, 0x09C4,
0x09CD, 0x09CD, 0x09E2, 0x09E3, 0x09FE, 0x09FE, 0x0A01, 0x0A02,
0x0A3C, 0x0A3C, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
0x0A51, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A82,
0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD,
0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, 0x0B01, 0x0B01, 0x0B3C, 0x0B3C,
0x0B3F, 0x0B3F, 0x0B41, 0x0B44, 0x0B4D, 0x0B4D, 0x0B55, 0x0B56,
0x0B62, 0x0B63, 0x0B82, 0x0B82, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD,
0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40,
0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63,
0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC6, 0x0CC6,
0x0CCC, 0x0CCD, 0x0CE2, 0x0CE3, 0x0D00, 0x0D01, 0x0D3B, 0x0D3C,
0x0D41, 0x0D44, 0x0D4D, 0x0D4D, 0x0D62, 0x0D63, 0x0D81, 0x0D81,
0x0DCA, 0x0DCA, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, 0x0E31, 0x0E31,
0x0E34, 0x0E3A, 0x0E47, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC,
0x0EC8, 0x0ECD, 0x0F18, 0x0F19, 0x0F35, 0x0F35, 0x0F37, 0x0F37,
0x0F39, 0x0F39, 0x0F71, 0x0F7E, 0x0F80, 0x0F84, 0x0F86, 0x0F87,
0x0F8D, 0x0F97, 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x102D, 0x1030,
0x1032, 0x1037, 0x1039, 0x103A, 0x103D, 0x103E, 0x1058, 0x1059,
0x105E, 0x1060, 0x1071, 0x1074, 0x1082, 0x1082, 0x1085, 0x1086,
0x108D, 0x108D, 0x109D, 0x109D, 0x135D, 0x135F, 0x1712, 0x1714,
0x1732, 0x1733, 0x1752, 0x1753, 0x1772, 0x1773, 0x17B4, 0x17B5,
0x17B7, 0x17BD, 0x17C6, 0x17C6, 0x17C9, 0x17D3, 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, 0x1A7C,
0x1A7F, 0x1A7F, 0x1AB0, 0x1ABD, 0x1ABF, 0x1ACE, 0x1B00, 0x1B03,
0x1B34, 0x1B34, 0x1B36, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42,
0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9,
0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED,
0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2,
0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4,
0x1CF8, 0x1CF9, 0x1DC0, 0x1DFF, 0x20D0, 0x20DC, 0x20E1, 0x20E1,
0x20E5, 0x20F0, 0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF,
0x302A, 0x302D, 0x3099, 0x309A, 0xA66F, 0xA66F, 0xA674, 0xA67D,
0xA69E, 0xA69F, 0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806,
0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5,
0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 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, 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, 0x11046, 0x11070, 0x11070,
0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA,
0x110C2, 0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B, 0x1112D, 0x11134,
0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE, 0x111C9, 0x111CC,
0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237,
0x1123E, 0x1123E, 0x112DF, 0x112DF, 0x112E3, 0x112EA, 0x11300, 0x11301,
0x1133B, 0x1133C, 0x11340, 0x11340, 0x11366, 0x1136C, 0x11370, 0x11374,
0x11438, 0x1143F, 0x11442, 0x11444, 0x11446, 0x11446, 0x1145E, 0x1145E,
0x114B3, 0x114B8, 0x114BA, 0x114BA, 0x114BF, 0x114C0, 0x114C2, 0x114C3,
0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0, 0x115DC, 0x115DD,
0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640, 0x116AB, 0x116AB,
0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7, 0x1171D, 0x1171F,
0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837, 0x11839, 0x1183A,
0x1193B, 0x1193C, 0x1193E, 0x1193E, 0x11943, 0x11943, 0x119D4, 0x119D7,
0x119DA, 0x119DB, 0x119E0, 0x119E0, 0x11A01, 0x11A0A, 0x11A33, 0x11A38,
0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A56, 0x11A59, 0x11A5B,
0x11A8A, 0x11A96, 0x11A98, 0x11A99, 0x11C30, 0x11C36, 0x11C38, 0x11C3D,
0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, 0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3,
0x11CB5, 0x11CB6, 0x11D31, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D,
0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D90, 0x11D91, 0x11D95, 0x11D95,
0x11D97, 0x11D97, 0x11EF3, 0x11EF4, 0x16AF0, 0x16AF4, 0x16B30, 0x16B36,
0x16F4F, 0x16F4F, 0x16F8F, 0x16F92, 0x16FE4, 0x16FE4, 0x1BC9D, 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, 0x1E94A, 0xE0100, 0xE01EF,
// #18 (3126+145): gc=Number:N
// Nd:62 + Nl:12 + No:71
// #19 (3126+62): gc=Decimal_Number:Nd:digit
0x0030, 0x0039, 0x0660, 0x0669, 0x06F0, 0x06F9, 0x07C0, 0x07C9,
0x0966, 0x096F, 0x09E6, 0x09EF, 0x0A66, 0x0A6F, 0x0AE6, 0x0AEF,
0x0B66, 0x0B6F, 0x0BE6, 0x0BEF, 0x0C66, 0x0C6F, 0x0CE6, 0x0CEF,
0x0D66, 0x0D6F, 0x0DE6, 0x0DEF, 0x0E50, 0x0E59, 0x0ED0, 0x0ED9,
0x0F20, 0x0F29, 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,
0x1E950, 0x1E959, 0x1FBF0, 0x1FBF9,
// #20 (3188+12): gc=Letter_Number:Nl
0x16EE, 0x16F0, 0x2160, 0x2182, 0x2185, 0x2188, 0x3007, 0x3007,
0x3021, 0x3029, 0x3038, 0x303A, 0xA6E6, 0xA6EF, 0x10140, 0x10174,
0x10341, 0x10341, 0x1034A, 0x1034A, 0x103D1, 0x103D5, 0x12400, 0x1246E,
// #21 (3200+71): gc=Other_Number:No
0x00B2, 0x00B3, 0x00B9, 0x00B9, 0x00BC, 0x00BE, 0x09F4, 0x09F9,
0x0B72, 0x0B77, 0x0BF0, 0x0BF2, 0x0C78, 0x0C7E, 0x0D58, 0x0D5E,
0x0D70, 0x0D78, 0x0F2A, 0x0F33, 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, 0x1ED2F, 0x1ED3D, 0x1F100, 0x1F10C,
// #22 (3271+386): gc=Punctuation:P:punct
// Pc:6 + Pd:19 + Pe:76 + Pf:10 + Pi:11 + Po:185 + Ps:79
// #23 (3271+6): gc=Connector_Punctuation:Pc
0x005F, 0x005F, 0x203F, 0x2040, 0x2054, 0x2054, 0xFE33, 0xFE34,
0xFE4D, 0xFE4F, 0xFF3F, 0xFF3F,
// #24 (3277+19): gc=Dash_Punctuation:Pd
0x002D, 0x002D, 0x058A, 0x058A, 0x05BE, 0x05BE, 0x1400, 0x1400,
0x1806, 0x1806, 0x2010, 0x2015, 0x2E17, 0x2E17, 0x2E1A, 0x2E1A,
0x2E3A, 0x2E3B, 0x2E40, 0x2E40, 0x2E5D, 0x2E5D, 0x301C, 0x301C,
0x3030, 0x3030, 0x30A0, 0x30A0, 0xFE31, 0xFE32, 0xFE58, 0xFE58,
0xFE63, 0xFE63, 0xFF0D, 0xFF0D, 0x10EAD, 0x10EAD,
// #25 (3296+76): gc=Close_Punctuation:Pe
0x0029, 0x0029, 0x005D, 0x005D, 0x007D, 0x007D, 0x0F3B, 0x0F3B,
0x0F3D, 0x0F3D, 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,
// #26 (3372+10): gc=Final_Punctuation:Pf
0x00BB, 0x00BB, 0x2019, 0x2019, 0x201D, 0x201D, 0x203A, 0x203A,
0x2E03, 0x2E03, 0x2E05, 0x2E05, 0x2E0A, 0x2E0A, 0x2E0D, 0x2E0D,
0x2E1D, 0x2E1D, 0x2E21, 0x2E21,
// #27 (3382+11): gc=Initial_Punctuation:Pi
0x00AB, 0x00AB, 0x2018, 0x2018, 0x201B, 0x201C, 0x201F, 0x201F,
0x2039, 0x2039, 0x2E02, 0x2E02, 0x2E04, 0x2E04, 0x2E09, 0x2E09,
0x2E0C, 0x2E0C, 0x2E1C, 0x2E1C, 0x2E20, 0x2E20,
// #28 (3393+185): gc=Other_Punctuation:Po
0x0021, 0x0023, 0x0025, 0x0027, 0x002A, 0x002A, 0x002C, 0x002C,
0x002E, 0x002F, 0x003A, 0x003B, 0x003F, 0x0040, 0x005C, 0x005C,
0x00A1, 0x00A1, 0x00A7, 0x00A7, 0x00B6, 0x00B7, 0x00BF, 0x00BF,
0x037E, 0x037E, 0x0387, 0x0387, 0x055A, 0x055F, 0x0589, 0x0589,
0x05C0, 0x05C0, 0x05C3, 0x05C3, 0x05C6, 0x05C6, 0x05F3, 0x05F4,
0x0609, 0x060A, 0x060C, 0x060D, 0x061B, 0x061B, 0x061D, 0x061F,
0x066A, 0x066D, 0x06D4, 0x06D4, 0x0700, 0x070D, 0x07F7, 0x07F9,
0x0830, 0x083E, 0x085E, 0x085E, 0x0964, 0x0965, 0x0970, 0x0970,
0x09FD, 0x09FD, 0x0A76, 0x0A76, 0x0AF0, 0x0AF0, 0x0C77, 0x0C77,
0x0C84, 0x0C84, 0x0DF4, 0x0DF4, 0x0E4F, 0x0E4F, 0x0E5A, 0x0E5B,
0x0F04, 0x0F12, 0x0F14, 0x0F14, 0x0F85, 0x0F85, 0x0FD0, 0x0FD4,
0x0FD9, 0x0FDA, 0x104A, 0x104F, 0x10FB, 0x10FB, 0x1360, 0x1368,
0x166E, 0x166E, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x17D4, 0x17D6,
0x17D8, 0x17DA, 0x1800, 0x1805, 0x1807, 0x180A, 0x1944, 0x1945,
0x1A1E, 0x1A1F, 0x1AA0, 0x1AA6, 0x1AA8, 0x1AAD, 0x1B5A, 0x1B60,
0x1B7D, 0x1B7E, 0x1BFC, 0x1BFF, 0x1C3B, 0x1C3F, 0x1C7E, 0x1C7F,
0x1CC0, 0x1CC7, 0x1CD3, 0x1CD3, 0x2016, 0x2017, 0x2020, 0x2027,
0x2030, 0x2038, 0x203B, 0x203E, 0x2041, 0x2043, 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, 0x2E30, 0x2E39, 0x2E3C, 0x2E3F, 0x2E41, 0x2E41,
0x2E43, 0x2E4F, 0x2E52, 0x2E54, 0x3001, 0x3003, 0x303D, 0x303D,
0x30FB, 0x30FB, 0xA4FE, 0xA4FF, 0xA60D, 0xA60F, 0xA673, 0xA673,
0xA67E, 0xA67E, 0xA6F2, 0xA6F7, 0xA874, 0xA877, 0xA8CE, 0xA8CF,
0xA8F8, 0xA8FA, 0xA8FC, 0xA8FC, 0xA92E, 0xA92F, 0xA95F, 0xA95F,
0xA9C1, 0xA9CD, 0xA9DE, 0xA9DF, 0xAA5C, 0xAA5F, 0xAADE, 0xAADF,
0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE10, 0xFE16, 0xFE19, 0xFE19,
0xFE30, 0xFE30, 0xFE45, 0xFE46, 0xFE49, 0xFE4C, 0xFE50, 0xFE52,
0xFE54, 0xFE57, 0xFE5F, 0xFE61, 0xFE68, 0xFE68, 0xFE6A, 0xFE6B,
0xFF01, 0xFF03, 0xFF05, 0xFF07, 0xFF0A, 0xFF0A, 0xFF0C, 0xFF0C,
0xFF0E, 0xFF0F, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF20, 0xFF3C, 0xFF3C,
0xFF61, 0xFF61, 0xFF64, 0xFF65, 0x10100, 0x10102, 0x1039F, 0x1039F,
0x103D0, 0x103D0, 0x1056F, 0x1056F, 0x10857, 0x10857, 0x1091F, 0x1091F,
0x1093F, 0x1093F, 0x10A50, 0x10A58, 0x10A7F, 0x10A7F, 0x10AF0, 0x10AF6,
0x10B39, 0x10B3F, 0x10B99, 0x10B9C, 0x10F55, 0x10F59, 0x10F86, 0x10F89,
0x11047, 0x1104D, 0x110BB, 0x110BC, 0x110BE, 0x110C1, 0x11140, 0x11143,
0x11174, 0x11175, 0x111C5, 0x111C8, 0x111CD, 0x111CD, 0x111DB, 0x111DB,
0x111DD, 0x111DF, 0x11238, 0x1123D, 0x112A9, 0x112A9, 0x1144B, 0x1144F,
0x1145A, 0x1145B, 0x1145D, 0x1145D, 0x114C6, 0x114C6, 0x115C1, 0x115D7,
0x11641, 0x11643, 0x11660, 0x1166C, 0x116B9, 0x116B9, 0x1173C, 0x1173E,
0x1183B, 0x1183B, 0x11944, 0x11946, 0x119E2, 0x119E2, 0x11A3F, 0x11A46,
0x11A9A, 0x11A9C, 0x11A9E, 0x11AA2, 0x11C41, 0x11C45, 0x11C70, 0x11C71,
0x11EF7, 0x11EF8, 0x11FFF, 0x11FFF, 0x12470, 0x12474, 0x12FF1, 0x12FF2,
0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B3B, 0x16B44, 0x16B44,
0x16E97, 0x16E9A, 0x16FE2, 0x16FE2, 0x1BC9F, 0x1BC9F, 0x1DA87, 0x1DA8B,
0x1E95E, 0x1E95F,
// #29 (3578+79): gc=Open_Punctuation:Ps
0x0028, 0x0028, 0x005B, 0x005B, 0x007B, 0x007B, 0x0F3A, 0x0F3A,
0x0F3C, 0x0F3C, 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, 0xFF3B, 0xFF3B,
0xFF5B, 0xFF5B, 0xFF5F, 0xFF5F, 0xFF62, 0xFF62,
// #30 (3657+302): gc=Symbol:S
// Sc:21 + Sk:31 + Sm:64 + So:186
// #31 (3657+21): gc=Currency_Symbol:Sc
0x0024, 0x0024, 0x00A2, 0x00A5, 0x058F, 0x058F, 0x060B, 0x060B,
0x07FE, 0x07FF, 0x09F2, 0x09F3, 0x09FB, 0x09FB, 0x0AF1, 0x0AF1,
0x0BF9, 0x0BF9, 0x0E3F, 0x0E3F, 0x17DB, 0x17DB, 0x20A0, 0x20C0,
0xA838, 0xA838, 0xFDFC, 0xFDFC, 0xFE69, 0xFE69, 0xFF04, 0xFF04,
0xFFE0, 0xFFE1, 0xFFE5, 0xFFE6, 0x11FDD, 0x11FE0, 0x1E2FF, 0x1E2FF,
0x1ECB0, 0x1ECB0,
// #32 (3678+31): gc=Modifier_Symbol:Sk
0x005E, 0x005E, 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AF, 0x00AF,
0x00B4, 0x00B4, 0x00B8, 0x00B8, 0x02C2, 0x02C5, 0x02D2, 0x02DF,
0x02E5, 0x02EB, 0x02ED, 0x02ED, 0x02EF, 0x02FF, 0x0375, 0x0375,
0x0384, 0x0385, 0x0888, 0x0888, 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,
// #33 (3709+64): gc=Math_Symbol:Sm
0x002B, 0x002B, 0x003C, 0x003E, 0x007C, 0x007C, 0x007E, 0x007E,
0x00AC, 0x00AC, 0x00B1, 0x00B1, 0x00D7, 0x00D7, 0x00F7, 0x00F7,
0x03F6, 0x03F6, 0x0606, 0x0608, 0x2044, 0x2044, 0x2052, 0x2052,
0x207A, 0x207C, 0x208A, 0x208C, 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, 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, 0x1D7C3, 0x1D7C3, 0x1EEF0, 0x1EEF1,
// #34 (3773+186): gc=Other_Symbol:So
0x00A6, 0x00A6, 0x00A9, 0x00A9, 0x00AE, 0x00AE, 0x00B0, 0x00B0,
0x0482, 0x0482, 0x058D, 0x058E, 0x060E, 0x060F, 0x06DE, 0x06DE,
0x06E9, 0x06E9, 0x06FD, 0x06FE, 0x07F6, 0x07F6, 0x09FA, 0x09FA,
0x0B70, 0x0B70, 0x0BF3, 0x0BF8, 0x0BFA, 0x0BFA, 0x0C7F, 0x0C7F,
0x0D4F, 0x0D4F, 0x0D79, 0x0D79, 0x0F01, 0x0F03, 0x0F13, 0x0F13,
0x0F15, 0x0F17, 0x0F1A, 0x0F1F, 0x0F34, 0x0F34, 0x0F36, 0x0F36,
0x0F38, 0x0F38, 0x0FBE, 0x0FC5, 0x0FC7, 0x0FCC, 0x0FCE, 0x0FCF,
0x0FD5, 0x0FD8, 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, 0x21AD,
0x21AF, 0x21CD, 0x21D0, 0x21D1, 0x21D3, 0x21D3, 0x21D5, 0x21F3,
0x2300, 0x2307, 0x230C, 0x231F, 0x2322, 0x2328, 0x232B, 0x237B,
0x237D, 0x239A, 0x23B4, 0x23DB, 0x23E2, 0x2426, 0x2440, 0x244A,
0x249C, 0x24E9, 0x2500, 0x25B6, 0x25B8, 0x25C0, 0x25C2, 0x25F7,
0x2600, 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, 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, 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,
0x1FB00, 0x1FB92, 0x1FB94, 0x1FBCA,
// #35 (3959+9): gc=Separator:Z
// Zl:1 + Zp:1 + Zs:7
// #36 (3959+1): gc=Line_Separator:Zl
0x2028, 0x2028,
// #37 (3960+1): gc=Paragraph_Separator:Zp
0x2029, 0x2029,
// #38 (3961+7): gc=Space_Separator:Zs
0x0020, 0x0020, 0x00A0, 0x00A0, 0x1680, 0x1680, 0x2000, 0x200A,
0x202F, 0x202F, 0x205F, 0x205F, 0x3000, 0x3000,
// #39 (3968+1): bp=ASCII
0x0000, 0x007F,
// #40 (3969+3): bp=ASCII_Hex_Digit:AHex
0x0030, 0x0039, 0x0041, 0x0046, 0x0061, 0x0066,
// #41 (3972+722): bp=Alphabetic:Alpha
0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1,
0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE,
0x0345, 0x0345, 0x0370, 0x0374, 0x0376, 0x0377, 0x037A, 0x037D,
0x037F, 0x037F, 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C,
0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F,
0x0531, 0x0556, 0x0559, 0x0559, 0x0560, 0x0588, 0x05B0, 0x05BD,
0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7,
0x05D0, 0x05EA, 0x05EF, 0x05F2, 0x0610, 0x061A, 0x0620, 0x0657,
0x0659, 0x065F, 0x066E, 0x06D3, 0x06D5, 0x06DC, 0x06E1, 0x06E8,
0x06ED, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x073F,
0x074D, 0x07B1, 0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA,
0x0800, 0x0817, 0x081A, 0x082C, 0x0840, 0x0858, 0x0860, 0x086A,
0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9, 0x08D4, 0x08DF,
0x08E3, 0x08E9, 0x08F0, 0x093B, 0x093D, 0x094C, 0x094E, 0x0950,
0x0955, 0x0963, 0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990,
0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9,
0x09BD, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CE, 0x09CE,
0x09D7, 0x09D7, 0x09DC, 0x09DD, 0x09DF, 0x09E3, 0x09F0, 0x09F1,
0x09FC, 0x09FC, 0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10,
0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36,
0x0A38, 0x0A39, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4C,
0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A70, 0x0A75,
0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC5,
0x0AC7, 0x0AC9, 0x0ACB, 0x0ACC, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
0x0AF9, 0x0AFC, 0x0B01, 0x0B03, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10,
0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39,
0x0B3D, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4C, 0x0B56, 0x0B57,
0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B71, 0x0B71, 0x0B82, 0x0B83,
0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A,
0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC,
0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, 0x0C00, 0x0C03, 0x0C05, 0x0C0C,
0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C44,
0x0C46, 0x0C48, 0x0C4A, 0x0C4C, 0x0C55, 0x0C56, 0x0C58, 0x0C5A,
0x0C5D, 0x0C5D, 0x0C60, 0x0C63, 0x0C80, 0x0C83, 0x0C85, 0x0C8C,
0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9,
0x0CBD, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCC, 0x0CD5, 0x0CD6,
0x0CDD, 0x0CDE, 0x0CE0, 0x0CE3, 0x0CF1, 0x0CF2, 0x0D00, 0x0D0C,
0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D44, 0x0D46, 0x0D48,
0x0D4A, 0x0D4C, 0x0D4E, 0x0D4E, 0x0D54, 0x0D57, 0x0D5F, 0x0D63,
0x0D7A, 0x0D7F, 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCF, 0x0DD4,
0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DF2, 0x0DF3, 0x0E01, 0x0E3A,
0x0E40, 0x0E46, 0x0E4D, 0x0E4D, 0x0E81, 0x0E82, 0x0E84, 0x0E84,
0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5, 0x0EA7, 0x0EB9,
0x0EBB, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0ECD, 0x0ECD,
0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F40, 0x0F47, 0x0F49, 0x0F6C,
0x0F71, 0x0F81, 0x0F88, 0x0F97, 0x0F99, 0x0FBC, 0x1000, 0x1036,
0x1038, 0x1038, 0x103B, 0x103F, 0x1050, 0x108F, 0x109A, 0x109D,
0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
0x10FC, 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, 0x16F8,
0x1700, 0x1713, 0x171F, 0x1733, 0x1740, 0x1753, 0x1760, 0x176C,
0x176E, 0x1770, 0x1772, 0x1773, 0x1780, 0x17B3, 0x17B6, 0x17C8,
0x17D7, 0x17D7, 0x17DC, 0x17DC, 0x1820, 0x1878, 0x1880, 0x18AA,
0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x1938,
0x1950, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9,
0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A61, 0x1A74, 0x1AA7, 0x1AA7,
0x1ABF, 0x1AC0, 0x1ACC, 0x1ACE, 0x1B00, 0x1B33, 0x1B35, 0x1B43,
0x1B45, 0x1B4C, 0x1B80, 0x1BA9, 0x1BAC, 0x1BAF, 0x1BBA, 0x1BE5,
0x1BE7, 0x1BF1, 0x1C00, 0x1C36, 0x1C4D, 0x1C4F, 0x1C5A, 0x1C7D,
0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC,
0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 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, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E,
0x2160, 0x2188, 0x24B6, 0x24E9, 0x2C00, 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, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035,
0x3038, 0x303C, 0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA,
0x30FC, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF,
0x31F0, 0x31FF, 0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD,
0xA500, 0xA60C, 0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E,
0xA674, 0xA67B, 0xA67F, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788,
0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9,
0xA7F2, 0xA805, 0xA807, 0xA827, 0xA840, 0xA873, 0xA880, 0xA8C3,
0xA8C5, 0xA8C5, 0xA8F2, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA8FF,
0xA90A, 0xA92A, 0xA930, 0xA952, 0xA960, 0xA97C, 0xA980, 0xA9B2,
0xA9B4, 0xA9BF, 0xA9CF, 0xA9CF, 0xA9E0, 0xA9EF, 0xA9FA, 0xA9FE,
0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA60, 0xAA76, 0xAA7A, 0xAABE,
0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF,
0xAAF2, 0xAAF5, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16,
0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69,
0xAB70, 0xABEA, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB,
0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17,
0xFB1D, 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, 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, 0x1034A,
0x10350, 0x1037A, 0x10380, 0x1039D, 0x103A0, 0x103C3, 0x103C8, 0x103CF,
0x103D1, 0x103D5, 0x10400, 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, 0x10A03, 0x10A05, 0x10A06,
0x10A0C, 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, 0x10D27, 0x10E80, 0x10EA9,
0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C, 0x10F27, 0x10F27,
0x10F30, 0x10F45, 0x10F70, 0x10F81, 0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6,
0x11000, 0x11045, 0x11071, 0x11075, 0x11082, 0x110B8, 0x110C2, 0x110C2,
0x110D0, 0x110E8, 0x11100, 0x11132, 0x11144, 0x11147, 0x11150, 0x11172,
0x11176, 0x11176, 0x11180, 0x111BF, 0x111C1, 0x111C4, 0x111CE, 0x111CF,
0x111DA, 0x111DA, 0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x11234,
0x11237, 0x11237, 0x1123E, 0x1123E, 0x11280, 0x11286, 0x11288, 0x11288,
0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8, 0x112B0, 0x112E8,
0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x11344,
0x11347, 0x11348, 0x1134B, 0x1134C, 0x11350, 0x11350, 0x11357, 0x11357,
0x1135D, 0x11363, 0x11400, 0x11441, 0x11443, 0x11445, 0x11447, 0x1144A,
0x1145F, 0x11461, 0x11480, 0x114C1, 0x114C4, 0x114C5, 0x114C7, 0x114C7,
0x11580, 0x115B5, 0x115B8, 0x115BE, 0x115D8, 0x115DD, 0x11600, 0x1163E,
0x11640, 0x11640, 0x11644, 0x11644, 0x11680, 0x116B5, 0x116B8, 0x116B8,
0x11700, 0x1171A, 0x1171D, 0x1172A, 0x11740, 0x11746, 0x11800, 0x11838,
0x118A0, 0x118DF, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913,
0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x1193C,
0x1193F, 0x11942, 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119DF,
0x119E1, 0x119E1, 0x119E3, 0x119E4, 0x11A00, 0x11A32, 0x11A35, 0x11A3E,
0x11A50, 0x11A97, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08,
0x11C0A, 0x11C36, 0x11C38, 0x11C3E, 0x11C40, 0x11C40, 0x11C72, 0x11C8F,
0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09,
0x11D0B, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D41,
0x11D43, 0x11D43, 0x11D46, 0x11D47, 0x11D60, 0x11D65, 0x11D67, 0x11D68,
0x11D6A, 0x11D8E, 0x11D90, 0x11D91, 0x11D93, 0x11D96, 0x11D98, 0x11D98,
0x11EE0, 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, 0x16F87, 0x16F8F, 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, 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,
0x2F800, 0x2FA1D, 0x30000, 0x3134A,
// #42 (4694+1): bp=Any
0x0000, 0x10FFFF,
// #43 (4695+0): bp=Assigned
// #44 (4695+4): bp=Bidi_Control:Bidi_C
0x061C, 0x061C, 0x200E, 0x200F, 0x202A, 0x202E, 0x2066, 0x2069,
// #45 (4699+114): bp=Bidi_Mirrored:Bidi_M
0x0028, 0x0029, 0x003C, 0x003C, 0x003E, 0x003E, 0x005B, 0x005B,
0x005D, 0x005D, 0x007B, 0x007B, 0x007D, 0x007D, 0x00AB, 0x00AB,
0x00BB, 0x00BB, 0x0F3A, 0x0F3D, 0x169B, 0x169C, 0x2039, 0x203A,
0x2045, 0x2046, 0x207D, 0x207E, 0x208D, 0x208E, 0x2140, 0x2140,
0x2201, 0x2204, 0x2208, 0x220D, 0x2211, 0x2211, 0x2215, 0x2216,
0x221A, 0x221D, 0x221F, 0x2222, 0x2224, 0x2224, 0x2226, 0x2226,
0x222B, 0x2233, 0x2239, 0x2239, 0x223B, 0x224C, 0x2252, 0x2255,
0x225F, 0x2260, 0x2262, 0x2262, 0x2264, 0x226B, 0x226E, 0x228C,
0x228F, 0x2292, 0x2298, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22B8,
0x22BE, 0x22BF, 0x22C9, 0x22CD, 0x22D0, 0x22D1, 0x22D6, 0x22ED,
0x22F0, 0x22FF, 0x2308, 0x230B, 0x2320, 0x2321, 0x2329, 0x232A,
0x2768, 0x2775, 0x27C0, 0x27C0, 0x27C3, 0x27C6, 0x27C8, 0x27C9,
0x27CB, 0x27CD, 0x27D3, 0x27D6, 0x27DC, 0x27DE, 0x27E2, 0x27EF,
0x2983, 0x2998, 0x299B, 0x29A0, 0x29A2, 0x29AF, 0x29B8, 0x29B8,
0x29C0, 0x29C5, 0x29C9, 0x29C9, 0x29CE, 0x29D2, 0x29D4, 0x29D5,
0x29D8, 0x29DC, 0x29E1, 0x29E1, 0x29E3, 0x29E5, 0x29E8, 0x29E9,
0x29F4, 0x29F9, 0x29FC, 0x29FD, 0x2A0A, 0x2A1C, 0x2A1E, 0x2A21,
0x2A24, 0x2A24, 0x2A26, 0x2A26, 0x2A29, 0x2A29, 0x2A2B, 0x2A2E,
0x2A34, 0x2A35, 0x2A3C, 0x2A3E, 0x2A57, 0x2A58, 0x2A64, 0x2A65,
0x2A6A, 0x2A6D, 0x2A6F, 0x2A70, 0x2A73, 0x2A74, 0x2A79, 0x2AA3,
0x2AA6, 0x2AAD, 0x2AAF, 0x2AD6, 0x2ADC, 0x2ADC, 0x2ADE, 0x2ADE,
0x2AE2, 0x2AE6, 0x2AEC, 0x2AEE, 0x2AF3, 0x2AF3, 0x2AF7, 0x2AFB,
0x2AFD, 0x2AFD, 0x2BFE, 0x2BFE, 0x2E02, 0x2E05, 0x2E09, 0x2E0A,
0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x2E20, 0x2E29, 0x2E55, 0x2E5C,
0x3008, 0x3011, 0x3014, 0x301B, 0xFE59, 0xFE5E, 0xFE64, 0xFE65,
0xFF08, 0xFF09, 0xFF1C, 0xFF1C, 0xFF1E, 0xFF1E, 0xFF3B, 0xFF3B,
0xFF3D, 0xFF3D, 0xFF5B, 0xFF5B, 0xFF5D, 0xFF5D, 0xFF5F, 0xFF60,
0xFF62, 0xFF63, 0x1D6DB, 0x1D6DB, 0x1D715, 0x1D715, 0x1D74F, 0x1D74F,
0x1D789, 0x1D789, 0x1D7C3, 0x1D7C3,
// #46 (4813+427): bp=Case_Ignorable:CI
0x0027, 0x0027, 0x002E, 0x002E, 0x003A, 0x003A, 0x005E, 0x005E,
0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AD, 0x00AD, 0x00AF, 0x00AF,
0x00B4, 0x00B4, 0x00B7, 0x00B8, 0x02B0, 0x036F, 0x0374, 0x0375,
0x037A, 0x037A, 0x0384, 0x0385, 0x0387, 0x0387, 0x0483, 0x0489,
0x0559, 0x0559, 0x055F, 0x055F, 0x0591, 0x05BD, 0x05BF, 0x05BF,
0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05F4, 0x05F4,
0x0600, 0x0605, 0x0610, 0x061A, 0x061C, 0x061C, 0x0640, 0x0640,
0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DD, 0x06DF, 0x06E8,
0x06EA, 0x06ED, 0x070F, 0x070F, 0x0711, 0x0711, 0x0730, 0x074A,
0x07A6, 0x07B0, 0x07EB, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD,
0x0816, 0x082D, 0x0859, 0x085B, 0x0888, 0x0888, 0x0890, 0x0891,
0x0898, 0x089F, 0x08C9, 0x0902, 0x093A, 0x093A, 0x093C, 0x093C,
0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957, 0x0962, 0x0963,
0x0971, 0x0971, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09C1, 0x09C4,
0x09CD, 0x09CD, 0x09E2, 0x09E3, 0x09FE, 0x09FE, 0x0A01, 0x0A02,
0x0A3C, 0x0A3C, 0x0A41, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
0x0A51, 0x0A51, 0x0A70, 0x0A71, 0x0A75, 0x0A75, 0x0A81, 0x0A82,
0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5, 0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD,
0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF, 0x0B01, 0x0B01, 0x0B3C, 0x0B3C,
0x0B3F, 0x0B3F, 0x0B41, 0x0B44, 0x0B4D, 0x0B4D, 0x0B55, 0x0B56,
0x0B62, 0x0B63, 0x0B82, 0x0B82, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD,
0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40,
0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63,
0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC6, 0x0CC6,
0x0CCC, 0x0CCD, 0x0CE2, 0x0CE3, 0x0D00, 0x0D01, 0x0D3B, 0x0D3C,
0x0D41, 0x0D44, 0x0D4D, 0x0D4D, 0x0D62, 0x0D63, 0x0D81, 0x0D81,
0x0DCA, 0x0DCA, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6, 0x0E31, 0x0E31,
0x0E34, 0x0E3A, 0x0E46, 0x0E4E, 0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC,
0x0EC6, 0x0EC6, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19, 0x0F35, 0x0F35,
0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F71, 0x0F7E, 0x0F80, 0x0F84,
0x0F86, 0x0F87, 0x0F8D, 0x0F97, 0x0F99, 0x0FBC, 0x0FC6, 0x0FC6,
0x102D, 0x1030, 0x1032, 0x1037, 0x1039, 0x103A, 0x103D, 0x103E,
0x1058, 0x1059, 0x105E, 0x1060, 0x1071, 0x1074, 0x1082, 0x1082,
0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D, 0x10FC, 0x10FC,
0x135D, 0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753,
0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6,
0x17C9, 0x17D3, 0x17D7, 0x17D7, 0x17DD, 0x17DD, 0x180B, 0x180F,
0x1843, 0x1843, 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, 0x1A7C, 0x1A7F, 0x1A7F,
0x1AA7, 0x1AA7, 0x1AB0, 0x1ACE, 0x1B00, 0x1B03, 0x1B34, 0x1B34,
0x1B36, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42, 0x1B6B, 0x1B73,
0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9, 0x1BAB, 0x1BAD,
0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED, 0x1BEF, 0x1BF1,
0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1C78, 0x1C7D, 0x1CD0, 0x1CD2,
0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4,
0x1CF8, 0x1CF9, 0x1D2C, 0x1D6A, 0x1D78, 0x1D78, 0x1D9B, 0x1DFF,
0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1, 0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF,
0x1FED, 0x1FEF, 0x1FFD, 0x1FFE, 0x200B, 0x200F, 0x2018, 0x2019,
0x2024, 0x2024, 0x2027, 0x2027, 0x202A, 0x202E, 0x2060, 0x2064,
0x2066, 0x206F, 0x2071, 0x2071, 0x207F, 0x207F, 0x2090, 0x209C,
0x20D0, 0x20F0, 0x2C7C, 0x2C7D, 0x2CEF, 0x2CF1, 0x2D6F, 0x2D6F,
0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x2E2F, 0x2E2F, 0x3005, 0x3005,
0x302A, 0x302D, 0x3031, 0x3035, 0x303B, 0x303B, 0x3099, 0x309E,
0x30FC, 0x30FE, 0xA015, 0xA015, 0xA4F8, 0xA4FD, 0xA60C, 0xA60C,
0xA66F, 0xA672, 0xA674, 0xA67D, 0xA67F, 0xA67F, 0xA69C, 0xA69F,
0xA6F0, 0xA6F1, 0xA700, 0xA721, 0xA770, 0xA770, 0xA788, 0xA78A,
0xA7F2, 0xA7F4, 0xA7F8, 0xA7F9, 0xA802, 0xA802, 0xA806, 0xA806,
0xA80B, 0xA80B, 0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5,
0xA8E0, 0xA8F1, 0xA8FF, 0xA8FF, 0xA926, 0xA92D, 0xA947, 0xA951,
0xA980, 0xA982, 0xA9B3, 0xA9B3, 0xA9B6, 0xA9B9, 0xA9BC, 0xA9BD,
0xA9CF, 0xA9CF, 0xA9E5, 0xA9E6, 0xAA29, 0xAA2E, 0xAA31, 0xAA32,
0xAA35, 0xAA36, 0xAA43, 0xAA43, 0xAA4C, 0xAA4C, 0xAA70, 0xAA70,
0xAA7C, 0xAA7C, 0xAAB0, 0xAAB0, 0xAAB2, 0xAAB4, 0xAAB7, 0xAAB8,
0xAABE, 0xAABF, 0xAAC1, 0xAAC1, 0xAADD, 0xAADD, 0xAAEC, 0xAAED,
0xAAF3, 0xAAF4, 0xAAF6, 0xAAF6, 0xAB5B, 0xAB5F, 0xAB69, 0xAB6B,
0xABE5, 0xABE5, 0xABE8, 0xABE8, 0xABED, 0xABED, 0xFB1E, 0xFB1E,
0xFBB2, 0xFBC2, 0xFE00, 0xFE0F, 0xFE13, 0xFE13, 0xFE20, 0xFE2F,
0xFE52, 0xFE52, 0xFE55, 0xFE55, 0xFEFF, 0xFEFF, 0xFF07, 0xFF07,
0xFF0E, 0xFF0E, 0xFF1A, 0xFF1A, 0xFF3E, 0xFF3E, 0xFF40, 0xFF40,
0xFF70, 0xFF70, 0xFF9E, 0xFF9F, 0xFFE3, 0xFFE3, 0xFFF9, 0xFFFB,
0x101FD, 0x101FD, 0x102E0, 0x102E0, 0x10376, 0x1037A, 0x10780, 0x10785,
0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10A01, 0x10A03, 0x10A05, 0x10A06,
0x10A0C, 0x10A0F, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10AE5, 0x10AE6,
0x10D24, 0x10D27, 0x10EAB, 0x10EAC, 0x10F46, 0x10F50, 0x10F82, 0x10F85,
0x11001, 0x11001, 0x11038, 0x11046, 0x11070, 0x11070, 0x11073, 0x11074,
0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA, 0x110BD, 0x110BD,
0x110C2, 0x110C2, 0x110CD, 0x110CD, 0x11100, 0x11102, 0x11127, 0x1112B,
0x1112D, 0x11134, 0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE,
0x111C9, 0x111CC, 0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234,
0x11236, 0x11237, 0x1123E, 0x1123E, 0x112DF, 0x112DF, 0x112E3, 0x112EA,
0x11300, 0x11301, 0x1133B, 0x1133C, 0x11340, 0x11340, 0x11366, 0x1136C,
0x11370, 0x11374, 0x11438, 0x1143F, 0x11442, 0x11444, 0x11446, 0x11446,
0x1145E, 0x1145E, 0x114B3, 0x114B8, 0x114BA, 0x114BA, 0x114BF, 0x114C0,
0x114C2, 0x114C3, 0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0,
0x115DC, 0x115DD, 0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640,
0x116AB, 0x116AB, 0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7,
0x1171D, 0x1171F, 0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837,
0x11839, 0x1183A, 0x1193B, 0x1193C, 0x1193E, 0x1193E, 0x11943, 0x11943,
0x119D4, 0x119D7, 0x119DA, 0x119DB, 0x119E0, 0x119E0, 0x11A01, 0x11A0A,
0x11A33, 0x11A38, 0x11A3B, 0x11A3E, 0x11A47, 0x11A47, 0x11A51, 0x11A56,
0x11A59, 0x11A5B, 0x11A8A, 0x11A96, 0x11A98, 0x11A99, 0x11C30, 0x11C36,
0x11C38, 0x11C3D, 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7, 0x11CAA, 0x11CB0,
0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6, 0x11D31, 0x11D36, 0x11D3A, 0x11D3A,
0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47, 0x11D90, 0x11D91,
0x11D95, 0x11D95, 0x11D97, 0x11D97, 0x11EF3, 0x11EF4, 0x13430, 0x13438,
0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16B40, 0x16B43, 0x16F4F, 0x16F4F,
0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE4, 0x1AFF0, 0x1AFF3,
0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1BC9D, 0x1BC9E, 0x1BCA0, 0x1BCA3,
0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D173, 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, 0x1E13D, 0x1E2AE, 0x1E2AE,
0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E94B, 0x1F3FB, 0x1F3FF,
0xE0001, 0xE0001, 0xE0020, 0xE007F, 0xE0100, 0xE01EF,
// #47 (5240+155): bp=Cased
0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x01BA,
0x01BC, 0x01BF, 0x01C4, 0x0293, 0x0295, 0x02B8, 0x02C0, 0x02C1,
0x02E0, 0x02E4, 0x0345, 0x0345, 0x0370, 0x0373, 0x0376, 0x0377,
0x037A, 0x037D, 0x037F, 0x037F, 0x0386, 0x0386, 0x0388, 0x038A,
0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481,
0x048A, 0x052F, 0x0531, 0x0556, 0x0560, 0x0588, 0x10A0, 0x10C5,
0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FD, 0x10FF,
0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA,
0x1CBD, 0x1CBF, 0x1D00, 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,
0x2119, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128,
0x212A, 0x212D, 0x212F, 0x2134, 0x2139, 0x2139, 0x213C, 0x213F,
0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x217F, 0x2183, 0x2184,
0x24B6, 0x24E9, 0x2C00, 0x2CE4, 0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3,
0x2D00, 0x2D25, 0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0xA640, 0xA66D,
0xA680, 0xA69D, 0xA722, 0xA787, 0xA78B, 0xA78E, 0xA790, 0xA7CA,
0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F5, 0xA7F6,
0xA7F8, 0xA7FA, 0xAB30, 0xAB5A, 0xAB5C, 0xAB68, 0xAB70, 0xABBF,
0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A,
0x10400, 0x1044F, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10570, 0x1057A,
0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1,
0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10780, 0x10780,
0x10783, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA, 0x10C80, 0x10CB2,
0x10CC0, 0x10CF2, 0x118A0, 0x118DF, 0x16E40, 0x16E7F, 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, 0x1DF0B, 0x1DF1E, 0x1E900, 0x1E943,
0x1F130, 0x1F149, 0x1F150, 0x1F169, 0x1F170, 0x1F189,
// #48 (5395+622): bp=Changes_When_Casefolded:CWCF
0x0041, 0x005A, 0x00B5, 0x00B5, 0x00C0, 0x00D6, 0x00D8, 0x00DF,
0x0100, 0x0100, 0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106,
0x0108, 0x0108, 0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E,
0x0110, 0x0110, 0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116,
0x0118, 0x0118, 0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E,
0x0120, 0x0120, 0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126,
0x0128, 0x0128, 0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E,
0x0130, 0x0130, 0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136,
0x0139, 0x0139, 0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F,
0x0141, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147,
0x0149, 0x014A, 0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150,
0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158,
0x015A, 0x015A, 0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160,
0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168,
0x016A, 0x016A, 0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170,
0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179,
0x017B, 0x017B, 0x017D, 0x017D, 0x017F, 0x017F, 0x0181, 0x0182,
0x0184, 0x0184, 0x0186, 0x0187, 0x0189, 0x018B, 0x018E, 0x0191,
0x0193, 0x0194, 0x0196, 0x0198, 0x019C, 0x019D, 0x019F, 0x01A0,
0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7, 0x01A9, 0x01A9,
0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01B1, 0x01B3, 0x01B5, 0x01B5,
0x01B7, 0x01B8, 0x01BC, 0x01BC, 0x01C4, 0x01C5, 0x01C7, 0x01C8,
0x01CA, 0x01CB, 0x01CD, 0x01CD, 0x01CF, 0x01CF, 0x01D1, 0x01D1,
0x01D3, 0x01D3, 0x01D5, 0x01D5, 0x01D7, 0x01D7, 0x01D9, 0x01D9,
0x01DB, 0x01DB, 0x01DE, 0x01DE, 0x01E0, 0x01E0, 0x01E2, 0x01E2,
0x01E4, 0x01E4, 0x01E6, 0x01E6, 0x01E8, 0x01E8, 0x01EA, 0x01EA,
0x01EC, 0x01EC, 0x01EE, 0x01EE, 0x01F1, 0x01F2, 0x01F4, 0x01F4,
0x01F6, 0x01F8, 0x01FA, 0x01FA, 0x01FC, 0x01FC, 0x01FE, 0x01FE,
0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204, 0x0206, 0x0206,
0x0208, 0x0208, 0x020A, 0x020A, 0x020C, 0x020C, 0x020E, 0x020E,
0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214, 0x0216, 0x0216,
0x0218, 0x0218, 0x021A, 0x021A, 0x021C, 0x021C, 0x021E, 0x021E,
0x0220, 0x0220, 0x0222, 0x0222, 0x0224, 0x0224, 0x0226, 0x0226,
0x0228, 0x0228, 0x022A, 0x022A, 0x022C, 0x022C, 0x022E, 0x022E,
0x0230, 0x0230, 0x0232, 0x0232, 0x023A, 0x023B, 0x023D, 0x023E,
0x0241, 0x0241, 0x0243, 0x0246, 0x0248, 0x0248, 0x024A, 0x024A,
0x024C, 0x024C, 0x024E, 0x024E, 0x0345, 0x0345, 0x0370, 0x0370,
0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F, 0x0386, 0x0386,
0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F, 0x0391, 0x03A1,
0x03A3, 0x03AB, 0x03C2, 0x03C2, 0x03CF, 0x03D1, 0x03D5, 0x03D6,
0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6,
0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
0x03F0, 0x03F1, 0x03F4, 0x03F5, 0x03F7, 0x03F7, 0x03F9, 0x03FA,
0x03FD, 0x042F, 0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464,
0x0466, 0x0466, 0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C,
0x046E, 0x046E, 0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474,
0x0476, 0x0476, 0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C,
0x047E, 0x047E, 0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C,
0x048E, 0x048E, 0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494,
0x0496, 0x0496, 0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C,
0x049E, 0x049E, 0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4,
0x04A6, 0x04A6, 0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC,
0x04AE, 0x04AE, 0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4,
0x04B6, 0x04B6, 0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC,
0x04BE, 0x04BE, 0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5,
0x04C7, 0x04C7, 0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD,
0x04D0, 0x04D0, 0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6,
0x04D8, 0x04D8, 0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE,
0x04E0, 0x04E0, 0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6,
0x04E8, 0x04E8, 0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE,
0x04F0, 0x04F0, 0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6,
0x04F8, 0x04F8, 0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE,
0x0500, 0x0500, 0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506,
0x0508, 0x0508, 0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E,
0x0510, 0x0510, 0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516,
0x0518, 0x0518, 0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E,
0x0520, 0x0520, 0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526,
0x0528, 0x0528, 0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E,
0x0531, 0x0556, 0x0587, 0x0587, 0x10A0, 0x10C5, 0x10C7, 0x10C7,
0x10CD, 0x10CD, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 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,
0x1E9A, 0x1E9B, 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,
0x1F80, 0x1FAF, 0x1FB2, 0x1FB4, 0x1FB7, 0x1FBC, 0x1FC2, 0x1FC4,
0x1FC7, 0x1FCC, 0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, 0x1FF2, 0x1FF4,
0x1FF7, 0x1FFC, 0x2126, 0x2126, 0x212A, 0x212B, 0x2132, 0x2132,
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,
0xAB70, 0xABBF, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFF21, 0xFF3A,
0x10400, 0x10427, 0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A,
0x1058C, 0x10592, 0x10594, 0x10595, 0x10C80, 0x10CB2, 0x118A0, 0x118BF,
0x16E40, 0x16E5F, 0x1E900, 0x1E921,
// #49 (6017+131): bp=Changes_When_Casemapped:CWCM
0x0041, 0x005A, 0x0061, 0x007A, 0x00B5, 0x00B5, 0x00C0, 0x00D6,
0x00D8, 0x00F6, 0x00F8, 0x0137, 0x0139, 0x018C, 0x018E, 0x019A,
0x019C, 0x01A9, 0x01AC, 0x01B9, 0x01BC, 0x01BD, 0x01BF, 0x01BF,
0x01C4, 0x0220, 0x0222, 0x0233, 0x023A, 0x0254, 0x0256, 0x0257,
0x0259, 0x0259, 0x025B, 0x025C, 0x0260, 0x0261, 0x0263, 0x0263,
0x0265, 0x0266, 0x0268, 0x026C, 0x026F, 0x026F, 0x0271, 0x0272,
0x0275, 0x0275, 0x027D, 0x027D, 0x0280, 0x0280, 0x0282, 0x0283,
0x0287, 0x028C, 0x0292, 0x0292, 0x029D, 0x029E, 0x0345, 0x0345,
0x0370, 0x0373, 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F,
0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
0x03A3, 0x03D1, 0x03D5, 0x03F5, 0x03F7, 0x03FB, 0x03FD, 0x0481,
0x048A, 0x052F, 0x0531, 0x0556, 0x0561, 0x0587, 0x10A0, 0x10C5,
0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA, 0x10FD, 0x10FF,
0x13A0, 0x13F5, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1C90, 0x1CBA,
0x1CBD, 0x1CBF, 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E,
0x1E00, 0x1E9B, 0x1E9E, 0x1E9E, 0x1EA0, 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, 0x2132, 0x2132,
0x214E, 0x214E, 0x2160, 0x217F, 0x2183, 0x2184, 0x24B6, 0x24E9,
0x2C00, 0x2C70, 0x2C72, 0x2C73, 0x2C75, 0x2C76, 0x2C7E, 0x2CE3,
0x2CEB, 0x2CEE, 0x2CF2, 0x2CF3, 0x2D00, 0x2D25, 0x2D27, 0x2D27,
0x2D2D, 0x2D2D, 0xA640, 0xA66D, 0xA680, 0xA69B, 0xA722, 0xA72F,
0xA732, 0xA76F, 0xA779, 0xA787, 0xA78B, 0xA78D, 0xA790, 0xA794,
0xA796, 0xA7AE, 0xA7B0, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D6, 0xA7D9,
0xA7F5, 0xA7F6, 0xAB53, 0xAB53, 0xAB70, 0xABBF, 0xFB00, 0xFB06,
0xFB13, 0xFB17, 0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10400, 0x1044F,
0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10570, 0x1057A, 0x1057C, 0x1058A,
0x1058C, 0x10592, 0x10594, 0x10595, 0x10597, 0x105A1, 0x105A3, 0x105B1,
0x105B3, 0x105B9, 0x105BB, 0x105BC, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2,
0x118A0, 0x118DF, 0x16E40, 0x16E7F, 0x1E900, 0x1E943,
// #50 (6148+609): bp=Changes_When_Lowercased:CWL
0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100,
0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139,
0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141,
0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A,
0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152,
0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A,
0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162,
0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A,
0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172,
0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B,
0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187,
0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198,
0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4,
0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF,
0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC,
0x01C4, 0x01C5, 0x01C7, 0x01C8, 0x01CA, 0x01CB, 0x01CD, 0x01CD,
0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
0x01F1, 0x01F2, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA,
0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202,
0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A,
0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212,
0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A,
0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222,
0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A,
0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232,
0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246,
0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E,
0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F,
0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F,
0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D8, 0x03D8,
0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0,
0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8,
0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x03F4, 0x03F4,
0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, 0x0460, 0x0460,
0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468,
0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, 0x0470, 0x0470,
0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, 0x0478, 0x0478,
0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, 0x0480, 0x0480,
0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, 0x0490, 0x0490,
0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498,
0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, 0x04A0, 0x04A0,
0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8,
0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, 0x04B0, 0x04B0,
0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8,
0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, 0x04C0, 0x04C1,
0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, 0x04C9, 0x04C9,
0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, 0x04D2, 0x04D2,
0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, 0x04DA, 0x04DA,
0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, 0x04E2, 0x04E2,
0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, 0x04EA, 0x04EA,
0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, 0x04F2, 0x04F2,
0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, 0x04FA, 0x04FA,
0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, 0x0502, 0x0502,
0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, 0x050A, 0x050A,
0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, 0x0512, 0x0512,
0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, 0x051A, 0x051A,
0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, 0x0522, 0x0522,
0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, 0x052A, 0x052A,
0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, 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, 0x1F88, 0x1F8F,
0x1F98, 0x1F9F, 0x1FA8, 0x1FAF, 0x1FB8, 0x1FBC, 0x1FC8, 0x1FCC,
0x1FD8, 0x1FDB, 0x1FE8, 0x1FEC, 0x1FF8, 0x1FFC, 0x2126, 0x2126,
0x212A, 0x212B, 0x2132, 0x2132, 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,
0x1E900, 0x1E921,
// #51 (6757+838): bp=Changes_When_NFKC_Casefolded:CWKCF
0x0041, 0x005A, 0x00A0, 0x00A0, 0x00A8, 0x00A8, 0x00AA, 0x00AA,
0x00AD, 0x00AD, 0x00AF, 0x00AF, 0x00B2, 0x00B5, 0x00B8, 0x00BA,
0x00BC, 0x00BE, 0x00C0, 0x00D6, 0x00D8, 0x00DF, 0x0100, 0x0100,
0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
0x0132, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139, 0x013B, 0x013B,
0x013D, 0x013D, 0x013F, 0x0141, 0x0143, 0x0143, 0x0145, 0x0145,
0x0147, 0x0147, 0x0149, 0x014A, 0x014C, 0x014C, 0x014E, 0x014E,
0x0150, 0x0150, 0x0152, 0x0152, 0x0154, 0x0154, 0x0156, 0x0156,
0x0158, 0x0158, 0x015A, 0x015A, 0x015C, 0x015C, 0x015E, 0x015E,
0x0160, 0x0160, 0x0162, 0x0162, 0x0164, 0x0164, 0x0166, 0x0166,
0x0168, 0x0168, 0x016A, 0x016A, 0x016C, 0x016C, 0x016E, 0x016E,
0x0170, 0x0170, 0x0172, 0x0172, 0x0174, 0x0174, 0x0176, 0x0176,
0x0178, 0x0179, 0x017B, 0x017B, 0x017D, 0x017D, 0x017F, 0x017F,
0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, 0x0189, 0x018B,
0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198, 0x019C, 0x019D,
0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7,
0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01B1, 0x01B3,
0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC, 0x01C4, 0x01CD,
0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
0x01F1, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA, 0x01FC, 0x01FC,
0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202, 0x0204, 0x0204,
0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A, 0x020C, 0x020C,
0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212, 0x0214, 0x0214,
0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A, 0x021C, 0x021C,
0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222, 0x0224, 0x0224,
0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A, 0x022C, 0x022C,
0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232, 0x023A, 0x023B,
0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246, 0x0248, 0x0248,
0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E, 0x02B0, 0x02B8,
0x02D8, 0x02DD, 0x02E0, 0x02E4, 0x0340, 0x0341, 0x0343, 0x0345,
0x034F, 0x034F, 0x0370, 0x0370, 0x0372, 0x0372, 0x0374, 0x0374,
0x0376, 0x0376, 0x037A, 0x037A, 0x037E, 0x037F, 0x0384, 0x038A,
0x038C, 0x038C, 0x038E, 0x038F, 0x0391, 0x03A1, 0x03A3, 0x03AB,
0x03C2, 0x03C2, 0x03CF, 0x03D6, 0x03D8, 0x03D8, 0x03DA, 0x03DA,
0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0, 0x03E2, 0x03E2,
0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8, 0x03EA, 0x03EA,
0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x03F0, 0x03F2, 0x03F4, 0x03F5,
0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F, 0x0460, 0x0460,
0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466, 0x0468, 0x0468,
0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E, 0x0470, 0x0470,
0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476, 0x0478, 0x0478,
0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E, 0x0480, 0x0480,
0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E, 0x0490, 0x0490,
0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496, 0x0498, 0x0498,
0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E, 0x04A0, 0x04A0,
0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6, 0x04A8, 0x04A8,
0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE, 0x04B0, 0x04B0,
0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6, 0x04B8, 0x04B8,
0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE, 0x04C0, 0x04C1,
0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7, 0x04C9, 0x04C9,
0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0, 0x04D2, 0x04D2,
0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8, 0x04DA, 0x04DA,
0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0, 0x04E2, 0x04E2,
0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8, 0x04EA, 0x04EA,
0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0, 0x04F2, 0x04F2,
0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8, 0x04FA, 0x04FA,
0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500, 0x0502, 0x0502,
0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508, 0x050A, 0x050A,
0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510, 0x0512, 0x0512,
0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518, 0x051A, 0x051A,
0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520, 0x0522, 0x0522,
0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528, 0x052A, 0x052A,
0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556, 0x0587, 0x0587,
0x061C, 0x061C, 0x0675, 0x0678, 0x0958, 0x095F, 0x09DC, 0x09DD,
0x09DF, 0x09DF, 0x0A33, 0x0A33, 0x0A36, 0x0A36, 0x0A59, 0x0A5B,
0x0A5E, 0x0A5E, 0x0B5C, 0x0B5D, 0x0E33, 0x0E33, 0x0EB3, 0x0EB3,
0x0EDC, 0x0EDD, 0x0F0C, 0x0F0C, 0x0F43, 0x0F43, 0x0F4D, 0x0F4D,
0x0F52, 0x0F52, 0x0F57, 0x0F57, 0x0F5C, 0x0F5C, 0x0F69, 0x0F69,
0x0F73, 0x0F73, 0x0F75, 0x0F79, 0x0F81, 0x0F81, 0x0F93, 0x0F93,
0x0F9D, 0x0F9D, 0x0FA2, 0x0FA2, 0x0FA7, 0x0FA7, 0x0FAC, 0x0FAC,
0x0FB9, 0x0FB9, 0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD,
0x10FC, 0x10FC, 0x115F, 0x1160, 0x13F8, 0x13FD, 0x17B4, 0x17B5,
0x180B, 0x180F, 0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF,
0x1D2C, 0x1D2E, 0x1D30, 0x1D3A, 0x1D3C, 0x1D4D, 0x1D4F, 0x1D6A,
0x1D78, 0x1D78, 0x1D9B, 0x1DBF, 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, 0x1E9A, 0x1E9B, 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, 0x1F71, 0x1F71, 0x1F73, 0x1F73, 0x1F75, 0x1F75,
0x1F77, 0x1F77, 0x1F79, 0x1F79, 0x1F7B, 0x1F7B, 0x1F7D, 0x1F7D,
0x1F80, 0x1FAF, 0x1FB2, 0x1FB4, 0x1FB7, 0x1FC4, 0x1FC7, 0x1FCF,
0x1FD3, 0x1FD3, 0x1FD8, 0x1FDB, 0x1FDD, 0x1FDF, 0x1FE3, 0x1FE3,
0x1FE8, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF7, 0x1FFE, 0x2000, 0x200F,
0x2011, 0x2011, 0x2017, 0x2017, 0x2024, 0x2026, 0x202A, 0x202F,
0x2033, 0x2034, 0x2036, 0x2037, 0x203C, 0x203C, 0x203E, 0x203E,
0x2047, 0x2049, 0x2057, 0x2057, 0x205F, 0x2071, 0x2074, 0x208E,
0x2090, 0x209C, 0x20A8, 0x20A8, 0x2100, 0x2103, 0x2105, 0x2107,
0x2109, 0x2113, 0x2115, 0x2116, 0x2119, 0x211D, 0x2120, 0x2122,
0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x212D,
0x212F, 0x2139, 0x213B, 0x2140, 0x2145, 0x2149, 0x2150, 0x217F,
0x2183, 0x2183, 0x2189, 0x2189, 0x222C, 0x222D, 0x222F, 0x2230,
0x2329, 0x232A, 0x2460, 0x24EA, 0x2A0C, 0x2A0C, 0x2A74, 0x2A76,
0x2ADC, 0x2ADC, 0x2C00, 0x2C2F, 0x2C60, 0x2C60, 0x2C62, 0x2C64,
0x2C67, 0x2C67, 0x2C69, 0x2C69, 0x2C6B, 0x2C6B, 0x2C6D, 0x2C70,
0x2C72, 0x2C72, 0x2C75, 0x2C75, 0x2C7C, 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, 0x2D6F, 0x2D6F,
0x2E9F, 0x2E9F, 0x2EF3, 0x2EF3, 0x2F00, 0x2FD5, 0x3000, 0x3000,
0x3036, 0x3036, 0x3038, 0x303A, 0x309B, 0x309C, 0x309F, 0x309F,
0x30FF, 0x30FF, 0x3131, 0x318E, 0x3192, 0x319F, 0x3200, 0x321E,
0x3220, 0x3247, 0x3250, 0x327E, 0x3280, 0x33FF, 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,
0xA69C, 0xA69D, 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, 0xA770, 0xA770,
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, 0xA7F2, 0xA7F5,
0xA7F8, 0xA7F9, 0xAB5C, 0xAB5F, 0xAB69, 0xAB69, 0xAB70, 0xABBF,
0xF900, 0xFA0D, 0xFA10, 0xFA10, 0xFA12, 0xFA12, 0xFA15, 0xFA1E,
0xFA20, 0xFA20, 0xFA22, 0xFA22, 0xFA25, 0xFA26, 0xFA2A, 0xFA6D,
0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB1D,
0xFB1F, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41,
0xFB43, 0xFB44, 0xFB46, 0xFBB1, 0xFBD3, 0xFD3D, 0xFD50, 0xFD8F,
0xFD92, 0xFDC7, 0xFDF0, 0xFDFC, 0xFE00, 0xFE19, 0xFE30, 0xFE44,
0xFE47, 0xFE52, 0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFE70, 0xFE72,
0xFE74, 0xFE74, 0xFE76, 0xFEFC, 0xFEFF, 0xFEFF, 0xFF01, 0xFFBE,
0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC,
0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF0, 0xFFF8, 0x10400, 0x10427,
0x104B0, 0x104D3, 0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592,
0x10594, 0x10595, 0x10781, 0x10785, 0x10787, 0x107B0, 0x107B2, 0x107BA,
0x10C80, 0x10CB2, 0x118A0, 0x118BF, 0x16E40, 0x16E5F, 0x1BCA0, 0x1BCA3,
0x1D15E, 0x1D164, 0x1D173, 0x1D17A, 0x1D1BB, 0x1D1C0, 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, 0x1D7CB, 0x1D7CE, 0x1D7FF,
0x1E900, 0x1E921, 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, 0x1F100, 0x1F10A, 0x1F110, 0x1F12E,
0x1F130, 0x1F14F, 0x1F16A, 0x1F16C, 0x1F190, 0x1F190, 0x1F200, 0x1F202,
0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251, 0x1FBF0, 0x1FBF9,
0x2F800, 0x2FA1D, 0xE0000, 0xE0FFF,
// #52 (7595+626): bp=Changes_When_Titlecased:CWT
0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF,
0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107,
0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F,
0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F,
0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F,
0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137,
0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140,
0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149,
0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151,
0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159,
0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161,
0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169,
0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171,
0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A,
0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185,
0x0188, 0x0188, 0x018C, 0x018C, 0x0192, 0x0192, 0x0195, 0x0195,
0x0199, 0x019A, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3,
0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AD, 0x01AD, 0x01B0, 0x01B0,
0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01B9, 0x01BD, 0x01BD,
0x01BF, 0x01BF, 0x01C4, 0x01C4, 0x01C6, 0x01C7, 0x01C9, 0x01CA,
0x01CC, 0x01CC, 0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2,
0x01D4, 0x01D4, 0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA,
0x01DC, 0x01DD, 0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3,
0x01E5, 0x01E5, 0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB,
0x01ED, 0x01ED, 0x01EF, 0x01F1, 0x01F3, 0x01F3, 0x01F5, 0x01F5,
0x01F9, 0x01F9, 0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF,
0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207,
0x0209, 0x0209, 0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F,
0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217,
0x0219, 0x0219, 0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F,
0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229,
0x022B, 0x022B, 0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231,
0x0233, 0x0233, 0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242,
0x0247, 0x0247, 0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D,
0x024F, 0x0254, 0x0256, 0x0257, 0x0259, 0x0259, 0x025B, 0x025C,
0x0260, 0x0261, 0x0263, 0x0263, 0x0265, 0x0266, 0x0268, 0x026C,
0x026F, 0x026F, 0x0271, 0x0272, 0x0275, 0x0275, 0x027D, 0x027D,
0x0280, 0x0280, 0x0282, 0x0283, 0x0287, 0x028C, 0x0292, 0x0292,
0x029D, 0x029E, 0x0345, 0x0345, 0x0371, 0x0371, 0x0373, 0x0373,
0x0377, 0x0377, 0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE,
0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB,
0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3,
0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB,
0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8,
0x03FB, 0x03FB, 0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463,
0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B,
0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473,
0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B,
0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B,
0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493,
0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B,
0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3,
0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB,
0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3,
0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB,
0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4,
0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC,
0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5,
0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD,
0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5,
0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED,
0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5,
0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD,
0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505,
0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D,
0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515,
0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D,
0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525,
0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D,
0x052F, 0x052F, 0x0561, 0x0587, 0x13F8, 0x13FD, 0x1C80, 0x1C88,
0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E, 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, 0x1E9B, 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, 0x214E, 0x214E, 0x2170, 0x217F,
0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F, 0x2C61, 0x2C61,
0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A, 0x2C6C, 0x2C6C,
0x2C73, 0x2C73, 0x2C76, 0x2C76, 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, 0x2CE3,
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, 0xA72F, 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, 0xA77A, 0xA77A, 0xA77C, 0xA77C, 0xA77F, 0xA77F,
0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785, 0xA787, 0xA787,
0xA78C, 0xA78C, 0xA791, 0xA791, 0xA793, 0xA794, 0xA797, 0xA797,
0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D, 0xA79F, 0xA79F,
0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5, 0xA7A7, 0xA7A7,
0xA7A9, 0xA7A9, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7, 0xA7B9, 0xA7B9,
0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF, 0xA7C1, 0xA7C1,
0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA, 0xA7D1, 0xA7D1,
0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6, 0xAB53, 0xAB53,
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, 0x1E922, 0x1E943,
// #53 (8221+627): bp=Changes_When_Uppercased:CWU
0x0061, 0x007A, 0x00B5, 0x00B5, 0x00DF, 0x00F6, 0x00F8, 0x00FF,
0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107,
0x0109, 0x0109, 0x010B, 0x010B, 0x010D, 0x010D, 0x010F, 0x010F,
0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117,
0x0119, 0x0119, 0x011B, 0x011B, 0x011D, 0x011D, 0x011F, 0x011F,
0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127,
0x0129, 0x0129, 0x012B, 0x012B, 0x012D, 0x012D, 0x012F, 0x012F,
0x0131, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137,
0x013A, 0x013A, 0x013C, 0x013C, 0x013E, 0x013E, 0x0140, 0x0140,
0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0149,
0x014B, 0x014B, 0x014D, 0x014D, 0x014F, 0x014F, 0x0151, 0x0151,
0x0153, 0x0153, 0x0155, 0x0155, 0x0157, 0x0157, 0x0159, 0x0159,
0x015B, 0x015B, 0x015D, 0x015D, 0x015F, 0x015F, 0x0161, 0x0161,
0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169,
0x016B, 0x016B, 0x016D, 0x016D, 0x016F, 0x016F, 0x0171, 0x0171,
0x0173, 0x0173, 0x0175, 0x0175, 0x0177, 0x0177, 0x017A, 0x017A,
0x017C, 0x017C, 0x017E, 0x0180, 0x0183, 0x0183, 0x0185, 0x0185,
0x0188, 0x0188, 0x018C, 0x018C, 0x0192, 0x0192, 0x0195, 0x0195,
0x0199, 0x019A, 0x019E, 0x019E, 0x01A1, 0x01A1, 0x01A3, 0x01A3,
0x01A5, 0x01A5, 0x01A8, 0x01A8, 0x01AD, 0x01AD, 0x01B0, 0x01B0,
0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x01B9, 0x01B9, 0x01BD, 0x01BD,
0x01BF, 0x01BF, 0x01C5, 0x01C6, 0x01C8, 0x01C9, 0x01CB, 0x01CC,
0x01CE, 0x01CE, 0x01D0, 0x01D0, 0x01D2, 0x01D2, 0x01D4, 0x01D4,
0x01D6, 0x01D6, 0x01D8, 0x01D8, 0x01DA, 0x01DA, 0x01DC, 0x01DD,
0x01DF, 0x01DF, 0x01E1, 0x01E1, 0x01E3, 0x01E3, 0x01E5, 0x01E5,
0x01E7, 0x01E7, 0x01E9, 0x01E9, 0x01EB, 0x01EB, 0x01ED, 0x01ED,
0x01EF, 0x01F0, 0x01F2, 0x01F3, 0x01F5, 0x01F5, 0x01F9, 0x01F9,
0x01FB, 0x01FB, 0x01FD, 0x01FD, 0x01FF, 0x01FF, 0x0201, 0x0201,
0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209,
0x020B, 0x020B, 0x020D, 0x020D, 0x020F, 0x020F, 0x0211, 0x0211,
0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219,
0x021B, 0x021B, 0x021D, 0x021D, 0x021F, 0x021F, 0x0223, 0x0223,
0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229, 0x022B, 0x022B,
0x022D, 0x022D, 0x022F, 0x022F, 0x0231, 0x0231, 0x0233, 0x0233,
0x023C, 0x023C, 0x023F, 0x0240, 0x0242, 0x0242, 0x0247, 0x0247,
0x0249, 0x0249, 0x024B, 0x024B, 0x024D, 0x024D, 0x024F, 0x0254,
0x0256, 0x0257, 0x0259, 0x0259, 0x025B, 0x025C, 0x0260, 0x0261,
0x0263, 0x0263, 0x0265, 0x0266, 0x0268, 0x026C, 0x026F, 0x026F,
0x0271, 0x0272, 0x0275, 0x0275, 0x027D, 0x027D, 0x0280, 0x0280,
0x0282, 0x0283, 0x0287, 0x028C, 0x0292, 0x0292, 0x029D, 0x029E,
0x0345, 0x0345, 0x0371, 0x0371, 0x0373, 0x0373, 0x0377, 0x0377,
0x037B, 0x037D, 0x0390, 0x0390, 0x03AC, 0x03CE, 0x03D0, 0x03D1,
0x03D5, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB, 0x03DD, 0x03DD,
0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3, 0x03E5, 0x03E5,
0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, 0x03ED, 0x03ED,
0x03EF, 0x03F3, 0x03F5, 0x03F5, 0x03F8, 0x03F8, 0x03FB, 0x03FB,
0x0430, 0x045F, 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465,
0x0467, 0x0467, 0x0469, 0x0469, 0x046B, 0x046B, 0x046D, 0x046D,
0x046F, 0x046F, 0x0471, 0x0471, 0x0473, 0x0473, 0x0475, 0x0475,
0x0477, 0x0477, 0x0479, 0x0479, 0x047B, 0x047B, 0x047D, 0x047D,
0x047F, 0x047F, 0x0481, 0x0481, 0x048B, 0x048B, 0x048D, 0x048D,
0x048F, 0x048F, 0x0491, 0x0491, 0x0493, 0x0493, 0x0495, 0x0495,
0x0497, 0x0497, 0x0499, 0x0499, 0x049B, 0x049B, 0x049D, 0x049D,
0x049F, 0x049F, 0x04A1, 0x04A1, 0x04A3, 0x04A3, 0x04A5, 0x04A5,
0x04A7, 0x04A7, 0x04A9, 0x04A9, 0x04AB, 0x04AB, 0x04AD, 0x04AD,
0x04AF, 0x04AF, 0x04B1, 0x04B1, 0x04B3, 0x04B3, 0x04B5, 0x04B5,
0x04B7, 0x04B7, 0x04B9, 0x04B9, 0x04BB, 0x04BB, 0x04BD, 0x04BD,
0x04BF, 0x04BF, 0x04C2, 0x04C2, 0x04C4, 0x04C4, 0x04C6, 0x04C6,
0x04C8, 0x04C8, 0x04CA, 0x04CA, 0x04CC, 0x04CC, 0x04CE, 0x04CF,
0x04D1, 0x04D1, 0x04D3, 0x04D3, 0x04D5, 0x04D5, 0x04D7, 0x04D7,
0x04D9, 0x04D9, 0x04DB, 0x04DB, 0x04DD, 0x04DD, 0x04DF, 0x04DF,
0x04E1, 0x04E1, 0x04E3, 0x04E3, 0x04E5, 0x04E5, 0x04E7, 0x04E7,
0x04E9, 0x04E9, 0x04EB, 0x04EB, 0x04ED, 0x04ED, 0x04EF, 0x04EF,
0x04F1, 0x04F1, 0x04F3, 0x04F3, 0x04F5, 0x04F5, 0x04F7, 0x04F7,
0x04F9, 0x04F9, 0x04FB, 0x04FB, 0x04FD, 0x04FD, 0x04FF, 0x04FF,
0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507,
0x0509, 0x0509, 0x050B, 0x050B, 0x050D, 0x050D, 0x050F, 0x050F,
0x0511, 0x0511, 0x0513, 0x0513, 0x0515, 0x0515, 0x0517, 0x0517,
0x0519, 0x0519, 0x051B, 0x051B, 0x051D, 0x051D, 0x051F, 0x051F,
0x0521, 0x0521, 0x0523, 0x0523, 0x0525, 0x0525, 0x0527, 0x0527,
0x0529, 0x0529, 0x052B, 0x052B, 0x052D, 0x052D, 0x052F, 0x052F,
0x0561, 0x0587, 0x10D0, 0x10FA, 0x10FD, 0x10FF, 0x13F8, 0x13FD,
0x1C80, 0x1C88, 0x1D79, 0x1D79, 0x1D7D, 0x1D7D, 0x1D8E, 0x1D8E,
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, 0x1E9B, 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, 0x1FB4, 0x1FB6, 0x1FB7,
0x1FBC, 0x1FBC, 0x1FBE, 0x1FBE, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC7,
0x1FCC, 0x1FCC, 0x1FD0, 0x1FD3, 0x1FD6, 0x1FD7, 0x1FE0, 0x1FE7,
0x1FF2, 0x1FF4, 0x1FF6, 0x1FF7, 0x1FFC, 0x1FFC, 0x214E, 0x214E,
0x2170, 0x217F, 0x2184, 0x2184, 0x24D0, 0x24E9, 0x2C30, 0x2C5F,
0x2C61, 0x2C61, 0x2C65, 0x2C66, 0x2C68, 0x2C68, 0x2C6A, 0x2C6A,
0x2C6C, 0x2C6C, 0x2C73, 0x2C73, 0x2C76, 0x2C76, 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, 0x2CE3, 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, 0xA72F, 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, 0xA77A, 0xA77A, 0xA77C, 0xA77C,
0xA77F, 0xA77F, 0xA781, 0xA781, 0xA783, 0xA783, 0xA785, 0xA785,
0xA787, 0xA787, 0xA78C, 0xA78C, 0xA791, 0xA791, 0xA793, 0xA794,
0xA797, 0xA797, 0xA799, 0xA799, 0xA79B, 0xA79B, 0xA79D, 0xA79D,
0xA79F, 0xA79F, 0xA7A1, 0xA7A1, 0xA7A3, 0xA7A3, 0xA7A5, 0xA7A5,
0xA7A7, 0xA7A7, 0xA7A9, 0xA7A9, 0xA7B5, 0xA7B5, 0xA7B7, 0xA7B7,
0xA7B9, 0xA7B9, 0xA7BB, 0xA7BB, 0xA7BD, 0xA7BD, 0xA7BF, 0xA7BF,
0xA7C1, 0xA7C1, 0xA7C3, 0xA7C3, 0xA7C8, 0xA7C8, 0xA7CA, 0xA7CA,
0xA7D1, 0xA7D1, 0xA7D7, 0xA7D7, 0xA7D9, 0xA7D9, 0xA7F6, 0xA7F6,
0xAB53, 0xAB53, 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, 0x1E922, 0x1E943,
// #54 (8848+23): bp=Dash
0x002D, 0x002D, 0x058A, 0x058A, 0x05BE, 0x05BE, 0x1400, 0x1400,
0x1806, 0x1806, 0x2010, 0x2015, 0x2053, 0x2053, 0x207B, 0x207B,
0x208B, 0x208B, 0x2212, 0x2212, 0x2E17, 0x2E17, 0x2E1A, 0x2E1A,
0x2E3A, 0x2E3B, 0x2E40, 0x2E40, 0x2E5D, 0x2E5D, 0x301C, 0x301C,
0x3030, 0x3030, 0x30A0, 0x30A0, 0xFE31, 0xFE32, 0xFE58, 0xFE58,
0xFE63, 0xFE63, 0xFF0D, 0xFF0D, 0x10EAD, 0x10EAD,
// #55 (8871+17): bp=Default_Ignorable_Code_Point:DI
0x00AD, 0x00AD, 0x034F, 0x034F, 0x061C, 0x061C, 0x115F, 0x1160,
0x17B4, 0x17B5, 0x180B, 0x180F, 0x200B, 0x200F, 0x202A, 0x202E,
0x2060, 0x206F, 0x3164, 0x3164, 0xFE00, 0xFE0F, 0xFEFF, 0xFEFF,
0xFFA0, 0xFFA0, 0xFFF0, 0xFFF8, 0x1BCA0, 0x1BCA3, 0x1D173, 0x1D17A,
0xE0000, 0xE0FFF,
// #56 (8888+8): bp=Deprecated:Dep
0x0149, 0x0149, 0x0673, 0x0673, 0x0F77, 0x0F77, 0x0F79, 0x0F79,
0x17A3, 0x17A4, 0x206A, 0x206F, 0x2329, 0x232A, 0xE0001, 0xE0001,
// #57 (8896+192): bp=Diacritic:Dia
0x005E, 0x005E, 0x0060, 0x0060, 0x00A8, 0x00A8, 0x00AF, 0x00AF,
0x00B4, 0x00B4, 0x00B7, 0x00B8, 0x02B0, 0x034E, 0x0350, 0x0357,
0x035D, 0x0362, 0x0374, 0x0375, 0x037A, 0x037A, 0x0384, 0x0385,
0x0483, 0x0487, 0x0559, 0x0559, 0x0591, 0x05A1, 0x05A3, 0x05BD,
0x05BF, 0x05BF, 0x05C1, 0x05C2, 0x05C4, 0x05C4, 0x064B, 0x0652,
0x0657, 0x0658, 0x06DF, 0x06E0, 0x06E5, 0x06E6, 0x06EA, 0x06EC,
0x0730, 0x074A, 0x07A6, 0x07B0, 0x07EB, 0x07F5, 0x0818, 0x0819,
0x0898, 0x089F, 0x08C9, 0x08D2, 0x08E3, 0x08FE, 0x093C, 0x093C,
0x094D, 0x094D, 0x0951, 0x0954, 0x0971, 0x0971, 0x09BC, 0x09BC,
0x09CD, 0x09CD, 0x0A3C, 0x0A3C, 0x0A4D, 0x0A4D, 0x0ABC, 0x0ABC,
0x0ACD, 0x0ACD, 0x0AFD, 0x0AFF, 0x0B3C, 0x0B3C, 0x0B4D, 0x0B4D,
0x0B55, 0x0B55, 0x0BCD, 0x0BCD, 0x0C3C, 0x0C3C, 0x0C4D, 0x0C4D,
0x0CBC, 0x0CBC, 0x0CCD, 0x0CCD, 0x0D3B, 0x0D3C, 0x0D4D, 0x0D4D,
0x0DCA, 0x0DCA, 0x0E47, 0x0E4C, 0x0E4E, 0x0E4E, 0x0EBA, 0x0EBA,
0x0EC8, 0x0ECC, 0x0F18, 0x0F19, 0x0F35, 0x0F35, 0x0F37, 0x0F37,
0x0F39, 0x0F39, 0x0F3E, 0x0F3F, 0x0F82, 0x0F84, 0x0F86, 0x0F87,
0x0FC6, 0x0FC6, 0x1037, 0x1037, 0x1039, 0x103A, 0x1063, 0x1064,
0x1069, 0x106D, 0x1087, 0x108D, 0x108F, 0x108F, 0x109A, 0x109B,
0x135D, 0x135F, 0x1714, 0x1715, 0x17C9, 0x17D3, 0x17DD, 0x17DD,
0x1939, 0x193B, 0x1A75, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ABE,
0x1AC1, 0x1ACB, 0x1B34, 0x1B34, 0x1B44, 0x1B44, 0x1B6B, 0x1B73,
0x1BAA, 0x1BAB, 0x1C36, 0x1C37, 0x1C78, 0x1C7D, 0x1CD0, 0x1CE8,
0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF7, 0x1CF9, 0x1D2C, 0x1D6A,
0x1DC4, 0x1DCF, 0x1DF5, 0x1DFF, 0x1FBD, 0x1FBD, 0x1FBF, 0x1FC1,
0x1FCD, 0x1FCF, 0x1FDD, 0x1FDF, 0x1FED, 0x1FEF, 0x1FFD, 0x1FFE,
0x2CEF, 0x2CF1, 0x2E2F, 0x2E2F, 0x302A, 0x302F, 0x3099, 0x309C,
0x30FC, 0x30FC, 0xA66F, 0xA66F, 0xA67C, 0xA67D, 0xA67F, 0xA67F,
0xA69C, 0xA69D, 0xA6F0, 0xA6F1, 0xA700, 0xA721, 0xA788, 0xA78A,
0xA7F8, 0xA7F9, 0xA8C4, 0xA8C4, 0xA8E0, 0xA8F1, 0xA92B, 0xA92E,
0xA953, 0xA953, 0xA9B3, 0xA9B3, 0xA9C0, 0xA9C0, 0xA9E5, 0xA9E5,
0xAA7B, 0xAA7D, 0xAABF, 0xAAC2, 0xAAF6, 0xAAF6, 0xAB5B, 0xAB5F,
0xAB69, 0xAB6B, 0xABEC, 0xABED, 0xFB1E, 0xFB1E, 0xFE20, 0xFE2F,
0xFF3E, 0xFF3E, 0xFF40, 0xFF40, 0xFF70, 0xFF70, 0xFF9E, 0xFF9F,
0xFFE3, 0xFFE3, 0x102E0, 0x102E0, 0x10780, 0x10785, 0x10787, 0x107B0,
0x107B2, 0x107BA, 0x10AE5, 0x10AE6, 0x10D22, 0x10D27, 0x10F46, 0x10F50,
0x10F82, 0x10F85, 0x11046, 0x11046, 0x11070, 0x11070, 0x110B9, 0x110BA,
0x11133, 0x11134, 0x11173, 0x11173, 0x111C0, 0x111C0, 0x111CA, 0x111CC,
0x11235, 0x11236, 0x112E9, 0x112EA, 0x1133C, 0x1133C, 0x1134D, 0x1134D,
0x11366, 0x1136C, 0x11370, 0x11374, 0x11442, 0x11442, 0x11446, 0x11446,
0x114C2, 0x114C3, 0x115BF, 0x115C0, 0x1163F, 0x1163F, 0x116B6, 0x116B7,
0x1172B, 0x1172B, 0x11839, 0x1183A, 0x1193D, 0x1193E, 0x11943, 0x11943,
0x119E0, 0x119E0, 0x11A34, 0x11A34, 0x11A47, 0x11A47, 0x11A99, 0x11A99,
0x11C3F, 0x11C3F, 0x11D42, 0x11D42, 0x11D44, 0x11D45, 0x11D97, 0x11D97,
0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F8F, 0x16F9F, 0x16FF0, 0x16FF1,
0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1CF00, 0x1CF2D,
0x1CF30, 0x1CF46, 0x1D167, 0x1D169, 0x1D16D, 0x1D172, 0x1D17B, 0x1D182,
0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0x1E130, 0x1E136, 0x1E2AE, 0x1E2AE,
0x1E2EC, 0x1E2EF, 0x1E8D0, 0x1E8D6, 0x1E944, 0x1E946, 0x1E948, 0x1E94A,
// #58 (9088+153): bp=Emoji
0x0023, 0x0023, 0x002A, 0x002A, 0x0030, 0x0039, 0x00A9, 0x00A9,
0x00AE, 0x00AE, 0x203C, 0x203C, 0x2049, 0x2049, 0x2122, 0x2122,
0x2139, 0x2139, 0x2194, 0x2199, 0x21A9, 0x21AA, 0x231A, 0x231B,
0x2328, 0x2328, 0x23CF, 0x23CF, 0x23E9, 0x23F3, 0x23F8, 0x23FA,
0x24C2, 0x24C2, 0x25AA, 0x25AB, 0x25B6, 0x25B6, 0x25C0, 0x25C0,
0x25FB, 0x25FE, 0x2600, 0x2604, 0x260E, 0x260E, 0x2611, 0x2611,
0x2614, 0x2615, 0x2618, 0x2618, 0x261D, 0x261D, 0x2620, 0x2620,
0x2622, 0x2623, 0x2626, 0x2626, 0x262A, 0x262A, 0x262E, 0x262F,
0x2638, 0x263A, 0x2640, 0x2640, 0x2642, 0x2642, 0x2648, 0x2653,
0x265F, 0x2660, 0x2663, 0x2663, 0x2665, 0x2666, 0x2668, 0x2668,
0x267B, 0x267B, 0x267E, 0x267F, 0x2692, 0x2697, 0x2699, 0x2699,
0x269B, 0x269C, 0x26A0, 0x26A1, 0x26A7, 0x26A7, 0x26AA, 0x26AB,
0x26B0, 0x26B1, 0x26BD, 0x26BE, 0x26C4, 0x26C5, 0x26C8, 0x26C8,
0x26CE, 0x26CF, 0x26D1, 0x26D1, 0x26D3, 0x26D4, 0x26E9, 0x26EA,
0x26F0, 0x26F5, 0x26F7, 0x26FA, 0x26FD, 0x26FD, 0x2702, 0x2702,
0x2705, 0x2705, 0x2708, 0x270D, 0x270F, 0x270F, 0x2712, 0x2712,
0x2714, 0x2714, 0x2716, 0x2716, 0x271D, 0x271D, 0x2721, 0x2721,
0x2728, 0x2728, 0x2733, 0x2734, 0x2744, 0x2744, 0x2747, 0x2747,
0x274C, 0x274C, 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757,
0x2763, 0x2764, 0x2795, 0x2797, 0x27A1, 0x27A1, 0x27B0, 0x27B0,
0x27BF, 0x27BF, 0x2934, 0x2935, 0x2B05, 0x2B07, 0x2B1B, 0x2B1C,
0x2B50, 0x2B50, 0x2B55, 0x2B55, 0x3030, 0x3030, 0x303D, 0x303D,
0x3297, 0x3297, 0x3299, 0x3299, 0x1F004, 0x1F004, 0x1F0CF, 0x1F0CF,
0x1F170, 0x1F171, 0x1F17E, 0x1F17F, 0x1F18E, 0x1F18E, 0x1F191, 0x1F19A,
0x1F1E6, 0x1F1FF, 0x1F201, 0x1F202, 0x1F21A, 0x1F21A, 0x1F22F, 0x1F22F,
0x1F232, 0x1F23A, 0x1F250, 0x1F251, 0x1F300, 0x1F321, 0x1F324, 0x1F393,
0x1F396, 0x1F397, 0x1F399, 0x1F39B, 0x1F39E, 0x1F3F0, 0x1F3F3, 0x1F3F5,
0x1F3F7, 0x1F4FD, 0x1F4FF, 0x1F53D, 0x1F549, 0x1F54E, 0x1F550, 0x1F567,
0x1F56F, 0x1F570, 0x1F573, 0x1F57A, 0x1F587, 0x1F587, 0x1F58A, 0x1F58D,
0x1F590, 0x1F590, 0x1F595, 0x1F596, 0x1F5A4, 0x1F5A5, 0x1F5A8, 0x1F5A8,
0x1F5B1, 0x1F5B2, 0x1F5BC, 0x1F5BC, 0x1F5C2, 0x1F5C4, 0x1F5D1, 0x1F5D3,
0x1F5DC, 0x1F5DE, 0x1F5E1, 0x1F5E1, 0x1F5E3, 0x1F5E3, 0x1F5E8, 0x1F5E8,
0x1F5EF, 0x1F5EF, 0x1F5F3, 0x1F5F3, 0x1F5FA, 0x1F64F, 0x1F680, 0x1F6C5,
0x1F6CB, 0x1F6D2, 0x1F6D5, 0x1F6D7, 0x1F6DD, 0x1F6E5, 0x1F6E9, 0x1F6E9,
0x1F6EB, 0x1F6EC, 0x1F6F0, 0x1F6F0, 0x1F6F3, 0x1F6FC, 0x1F7E0, 0x1F7EB,
0x1F7F0, 0x1F7F0, 0x1F90C, 0x1F93A, 0x1F93C, 0x1F945, 0x1F947, 0x1F9FF,
0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C, 0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC,
0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5, 0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7,
0x1FAF0, 0x1FAF6,
// #59 (9241+10): bp=Emoji_Component:EComp
0x0023, 0x0023, 0x002A, 0x002A, 0x0030, 0x0039, 0x200D, 0x200D,
0x20E3, 0x20E3, 0xFE0F, 0xFE0F, 0x1F1E6, 0x1F1FF, 0x1F3FB, 0x1F3FF,
0x1F9B0, 0x1F9B3, 0xE0020, 0xE007F,
// #60 (9251+1): bp=Emoji_Modifier:EMod
0x1F3FB, 0x1F3FF,
// #61 (9252+40): bp=Emoji_Modifier_Base:EBase
0x261D, 0x261D, 0x26F9, 0x26F9, 0x270A, 0x270D, 0x1F385, 0x1F385,
0x1F3C2, 0x1F3C4, 0x1F3C7, 0x1F3C7, 0x1F3CA, 0x1F3CC, 0x1F442, 0x1F443,
0x1F446, 0x1F450, 0x1F466, 0x1F478, 0x1F47C, 0x1F47C, 0x1F481, 0x1F483,
0x1F485, 0x1F487, 0x1F48F, 0x1F48F, 0x1F491, 0x1F491, 0x1F4AA, 0x1F4AA,
0x1F574, 0x1F575, 0x1F57A, 0x1F57A, 0x1F590, 0x1F590, 0x1F595, 0x1F596,
0x1F645, 0x1F647, 0x1F64B, 0x1F64F, 0x1F6A3, 0x1F6A3, 0x1F6B4, 0x1F6B6,
0x1F6C0, 0x1F6C0, 0x1F6CC, 0x1F6CC, 0x1F90C, 0x1F90C, 0x1F90F, 0x1F90F,
0x1F918, 0x1F91F, 0x1F926, 0x1F926, 0x1F930, 0x1F939, 0x1F93C, 0x1F93E,
0x1F977, 0x1F977, 0x1F9B5, 0x1F9B6, 0x1F9B8, 0x1F9B9, 0x1F9BB, 0x1F9BB,
0x1F9CD, 0x1F9CF, 0x1F9D1, 0x1F9DD, 0x1FAC3, 0x1FAC5, 0x1FAF0, 0x1FAF6,
// #62 (9292+83): bp=Emoji_Presentation:EPres
0x231A, 0x231B, 0x23E9, 0x23EC, 0x23F0, 0x23F0, 0x23F3, 0x23F3,
0x25FD, 0x25FE, 0x2614, 0x2615, 0x2648, 0x2653, 0x267F, 0x267F,
0x2693, 0x2693, 0x26A1, 0x26A1, 0x26AA, 0x26AB, 0x26BD, 0x26BE,
0x26C4, 0x26C5, 0x26CE, 0x26CE, 0x26D4, 0x26D4, 0x26EA, 0x26EA,
0x26F2, 0x26F3, 0x26F5, 0x26F5, 0x26FA, 0x26FA, 0x26FD, 0x26FD,
0x2705, 0x2705, 0x270A, 0x270B, 0x2728, 0x2728, 0x274C, 0x274C,
0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757, 0x2795, 0x2797,
0x27B0, 0x27B0, 0x27BF, 0x27BF, 0x2B1B, 0x2B1C, 0x2B50, 0x2B50,
0x2B55, 0x2B55, 0x1F004, 0x1F004, 0x1F0CF, 0x1F0CF, 0x1F18E, 0x1F18E,
0x1F191, 0x1F19A, 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F201, 0x1F21A, 0x1F21A,
0x1F22F, 0x1F22F, 0x1F232, 0x1F236, 0x1F238, 0x1F23A, 0x1F250, 0x1F251,
0x1F300, 0x1F320, 0x1F32D, 0x1F335, 0x1F337, 0x1F37C, 0x1F37E, 0x1F393,
0x1F3A0, 0x1F3CA, 0x1F3CF, 0x1F3D3, 0x1F3E0, 0x1F3F0, 0x1F3F4, 0x1F3F4,
0x1F3F8, 0x1F43E, 0x1F440, 0x1F440, 0x1F442, 0x1F4FC, 0x1F4FF, 0x1F53D,
0x1F54B, 0x1F54E, 0x1F550, 0x1F567, 0x1F57A, 0x1F57A, 0x1F595, 0x1F596,
0x1F5A4, 0x1F5A4, 0x1F5FB, 0x1F64F, 0x1F680, 0x1F6C5, 0x1F6CC, 0x1F6CC,
0x1F6D0, 0x1F6D2, 0x1F6D5, 0x1F6D7, 0x1F6DD, 0x1F6DF, 0x1F6EB, 0x1F6EC,
0x1F6F4, 0x1F6FC, 0x1F7E0, 0x1F7EB, 0x1F7F0, 0x1F7F0, 0x1F90C, 0x1F93A,
0x1F93C, 0x1F945, 0x1F947, 0x1F9FF, 0x1FA70, 0x1FA74, 0x1FA78, 0x1FA7C,
0x1FA80, 0x1FA86, 0x1FA90, 0x1FAAC, 0x1FAB0, 0x1FABA, 0x1FAC0, 0x1FAC5,
0x1FAD0, 0x1FAD9, 0x1FAE0, 0x1FAE7, 0x1FAF0, 0x1FAF6,
// #63 (9375+78): bp=Extended_Pictographic:ExtPict
0x00A9, 0x00A9, 0x00AE, 0x00AE, 0x203C, 0x203C, 0x2049, 0x2049,
0x2122, 0x2122, 0x2139, 0x2139, 0x2194, 0x2199, 0x21A9, 0x21AA,
0x231A, 0x231B, 0x2328, 0x2328, 0x2388, 0x2388, 0x23CF, 0x23CF,
0x23E9, 0x23F3, 0x23F8, 0x23FA, 0x24C2, 0x24C2, 0x25AA, 0x25AB,
0x25B6, 0x25B6, 0x25C0, 0x25C0, 0x25FB, 0x25FE, 0x2600, 0x2605,
0x2607, 0x2612, 0x2614, 0x2685, 0x2690, 0x2705, 0x2708, 0x2712,
0x2714, 0x2714, 0x2716, 0x2716, 0x271D, 0x271D, 0x2721, 0x2721,
0x2728, 0x2728, 0x2733, 0x2734, 0x2744, 0x2744, 0x2747, 0x2747,
0x274C, 0x274C, 0x274E, 0x274E, 0x2753, 0x2755, 0x2757, 0x2757,
0x2763, 0x2767, 0x2795, 0x2797, 0x27A1, 0x27A1, 0x27B0, 0x27B0,
0x27BF, 0x27BF, 0x2934, 0x2935, 0x2B05, 0x2B07, 0x2B1B, 0x2B1C,
0x2B50, 0x2B50, 0x2B55, 0x2B55, 0x3030, 0x3030, 0x303D, 0x303D,
0x3297, 0x3297, 0x3299, 0x3299, 0x1F000, 0x1F0FF, 0x1F10D, 0x1F10F,
0x1F12F, 0x1F12F, 0x1F16C, 0x1F171, 0x1F17E, 0x1F17F, 0x1F18E, 0x1F18E,
0x1F191, 0x1F19A, 0x1F1AD, 0x1F1E5, 0x1F201, 0x1F20F, 0x1F21A, 0x1F21A,
0x1F22F, 0x1F22F, 0x1F232, 0x1F23A, 0x1F23C, 0x1F23F, 0x1F249, 0x1F3FA,
0x1F400, 0x1F53D, 0x1F546, 0x1F64F, 0x1F680, 0x1F6FF, 0x1F774, 0x1F77F,
0x1F7D5, 0x1F7FF, 0x1F80C, 0x1F80F, 0x1F848, 0x1F84F, 0x1F85A, 0x1F85F,
0x1F888, 0x1F88F, 0x1F8AE, 0x1F8FF, 0x1F90C, 0x1F93A, 0x1F93C, 0x1F945,
0x1F947, 0x1FAFF, 0x1FC00, 0x1FFFD,
// #64 (9453+33): bp=Extender:Ext
0x00B7, 0x00B7, 0x02D0, 0x02D1, 0x0640, 0x0640, 0x07FA, 0x07FA,
0x0B55, 0x0B55, 0x0E46, 0x0E46, 0x0EC6, 0x0EC6, 0x180A, 0x180A,
0x1843, 0x1843, 0x1AA7, 0x1AA7, 0x1C36, 0x1C36, 0x1C7B, 0x1C7B,
0x3005, 0x3005, 0x3031, 0x3035, 0x309D, 0x309E, 0x30FC, 0x30FE,
0xA015, 0xA015, 0xA60C, 0xA60C, 0xA9CF, 0xA9CF, 0xA9E6, 0xA9E6,
0xAA70, 0xAA70, 0xAADD, 0xAADD, 0xAAF3, 0xAAF4, 0xFF70, 0xFF70,
0x10781, 0x10782, 0x1135D, 0x1135D, 0x115C6, 0x115C8, 0x11A98, 0x11A98,
0x16B42, 0x16B43, 0x16FE0, 0x16FE1, 0x16FE3, 0x16FE3, 0x1E13C, 0x1E13D,
0x1E944, 0x1E946,
// #65 (9486+861): bp=Grapheme_Base:Gr_Base
0x0020, 0x007E, 0x00A0, 0x00AC, 0x00AE, 0x02FF, 0x0370, 0x0377,
0x037A, 0x037F, 0x0384, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
0x03A3, 0x0482, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x058A,
0x058D, 0x058F, 0x05BE, 0x05BE, 0x05C0, 0x05C0, 0x05C3, 0x05C3,
0x05C6, 0x05C6, 0x05D0, 0x05EA, 0x05EF, 0x05F4, 0x0606, 0x060F,
0x061B, 0x061B, 0x061D, 0x064A, 0x0660, 0x066F, 0x0671, 0x06D5,
0x06DE, 0x06DE, 0x06E5, 0x06E6, 0x06E9, 0x06E9, 0x06EE, 0x070D,
0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1,
0x07C0, 0x07EA, 0x07F4, 0x07FA, 0x07FE, 0x0815, 0x081A, 0x081A,
0x0824, 0x0824, 0x0828, 0x0828, 0x0830, 0x083E, 0x0840, 0x0858,
0x085E, 0x085E, 0x0860, 0x086A, 0x0870, 0x088E, 0x08A0, 0x08C9,
0x0903, 0x0939, 0x093B, 0x093B, 0x093D, 0x0940, 0x0949, 0x094C,
0x094E, 0x0950, 0x0958, 0x0961, 0x0964, 0x0980, 0x0982, 0x0983,
0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0,
0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD, 0x09BF, 0x09C0,
0x09C7, 0x09C8, 0x09CB, 0x09CC, 0x09CE, 0x09CE, 0x09DC, 0x09DD,
0x09DF, 0x09E1, 0x09E6, 0x09FD, 0x0A03, 0x0A03, 0x0A05, 0x0A0A,
0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33,
0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A3E, 0x0A40, 0x0A59, 0x0A5C,
0x0A5E, 0x0A5E, 0x0A66, 0x0A6F, 0x0A72, 0x0A74, 0x0A76, 0x0A76,
0x0A83, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABD, 0x0AC0,
0x0AC9, 0x0AC9, 0x0ACB, 0x0ACC, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1,
0x0AE6, 0x0AF1, 0x0AF9, 0x0AF9, 0x0B02, 0x0B03, 0x0B05, 0x0B0C,
0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
0x0B35, 0x0B39, 0x0B3D, 0x0B3D, 0x0B40, 0x0B40, 0x0B47, 0x0B48,
0x0B4B, 0x0B4C, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B66, 0x0B77,
0x0B83, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95,
0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4,
0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBF, 0x0BBF, 0x0BC1, 0x0BC2,
0x0BC6, 0x0BC8, 0x0BCA, 0x0BCC, 0x0BD0, 0x0BD0, 0x0BE6, 0x0BFA,
0x0C01, 0x0C03, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28,
0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C41, 0x0C44, 0x0C58, 0x0C5A,
0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C66, 0x0C6F, 0x0C77, 0x0C80,
0x0C82, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3,
0x0CB5, 0x0CB9, 0x0CBD, 0x0CBE, 0x0CC0, 0x0CC1, 0x0CC3, 0x0CC4,
0x0CC7, 0x0CC8, 0x0CCA, 0x0CCB, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1,
0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x0D02, 0x0D0C, 0x0D0E, 0x0D10,
0x0D12, 0x0D3A, 0x0D3D, 0x0D3D, 0x0D3F, 0x0D40, 0x0D46, 0x0D48,
0x0D4A, 0x0D4C, 0x0D4E, 0x0D4F, 0x0D54, 0x0D56, 0x0D58, 0x0D61,
0x0D66, 0x0D7F, 0x0D82, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DD0, 0x0DD1,
0x0DD8, 0x0DDE, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF4, 0x0E01, 0x0E30,
0x0E32, 0x0E33, 0x0E3F, 0x0E46, 0x0E4F, 0x0E5B, 0x0E81, 0x0E82,
0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5,
0x0EA7, 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD, 0x0EC0, 0x0EC4,
0x0EC6, 0x0EC6, 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F17,
0x0F1A, 0x0F34, 0x0F36, 0x0F36, 0x0F38, 0x0F38, 0x0F3A, 0x0F47,
0x0F49, 0x0F6C, 0x0F7F, 0x0F7F, 0x0F85, 0x0F85, 0x0F88, 0x0F8C,
0x0FBE, 0x0FC5, 0x0FC7, 0x0FCC, 0x0FCE, 0x0FDA, 0x1000, 0x102C,
0x1031, 0x1031, 0x1038, 0x1038, 0x103B, 0x103C, 0x103F, 0x1057,
0x105A, 0x105D, 0x1061, 0x1070, 0x1075, 0x1081, 0x1083, 0x1084,
0x1087, 0x108C, 0x108E, 0x109C, 0x109E, 0x10C5, 0x10C7, 0x10C7,
0x10CD, 0x10CD, 0x10D0, 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, 0x1360, 0x137C, 0x1380, 0x1399, 0x13A0, 0x13F5,
0x13F8, 0x13FD, 0x1400, 0x169C, 0x16A0, 0x16F8, 0x1700, 0x1711,
0x1715, 0x1715, 0x171F, 0x1731, 0x1734, 0x1736, 0x1740, 0x1751,
0x1760, 0x176C, 0x176E, 0x1770, 0x1780, 0x17B3, 0x17B6, 0x17B6,
0x17BE, 0x17C5, 0x17C7, 0x17C8, 0x17D4, 0x17DC, 0x17E0, 0x17E9,
0x17F0, 0x17F9, 0x1800, 0x180A, 0x1810, 0x1819, 0x1820, 0x1878,
0x1880, 0x1884, 0x1887, 0x18A8, 0x18AA, 0x18AA, 0x18B0, 0x18F5,
0x1900, 0x191E, 0x1923, 0x1926, 0x1929, 0x192B, 0x1930, 0x1931,
0x1933, 0x1938, 0x1940, 0x1940, 0x1944, 0x196D, 0x1970, 0x1974,
0x1980, 0x19AB, 0x19B0, 0x19C9, 0x19D0, 0x19DA, 0x19DE, 0x1A16,
0x1A19, 0x1A1A, 0x1A1E, 0x1A55, 0x1A57, 0x1A57, 0x1A61, 0x1A61,
0x1A63, 0x1A64, 0x1A6D, 0x1A72, 0x1A80, 0x1A89, 0x1A90, 0x1A99,
0x1AA0, 0x1AAD, 0x1B04, 0x1B33, 0x1B3B, 0x1B3B, 0x1B3D, 0x1B41,
0x1B43, 0x1B4C, 0x1B50, 0x1B6A, 0x1B74, 0x1B7E, 0x1B82, 0x1BA1,
0x1BA6, 0x1BA7, 0x1BAA, 0x1BAA, 0x1BAE, 0x1BE5, 0x1BE7, 0x1BE7,
0x1BEA, 0x1BEC, 0x1BEE, 0x1BEE, 0x1BF2, 0x1BF3, 0x1BFC, 0x1C2B,
0x1C34, 0x1C35, 0x1C3B, 0x1C49, 0x1C4D, 0x1C88, 0x1C90, 0x1CBA,
0x1CBD, 0x1CC7, 0x1CD3, 0x1CD3, 0x1CE1, 0x1CE1, 0x1CE9, 0x1CEC,
0x1CEE, 0x1CF3, 0x1CF5, 0x1CF7, 0x1CFA, 0x1CFA, 0x1D00, 0x1DBF,
0x1E00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D,
0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D,
0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3,
0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE,
0x2000, 0x200A, 0x2010, 0x2027, 0x202F, 0x205F, 0x2070, 0x2071,
0x2074, 0x208E, 0x2090, 0x209C, 0x20A0, 0x20C0, 0x2100, 0x218B,
0x2190, 0x2426, 0x2440, 0x244A, 0x2460, 0x2B73, 0x2B76, 0x2B95,
0x2B97, 0x2CEE, 0x2CF2, 0x2CF3, 0x2CF9, 0x2D25, 0x2D27, 0x2D27,
0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D70, 0x2D80, 0x2D96,
0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE,
0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE,
0x2E00, 0x2E5D, 0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5,
0x2FF0, 0x2FFB, 0x3000, 0x3029, 0x3030, 0x303F, 0x3041, 0x3096,
0x309B, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E, 0x3190, 0x31E3,
0x31F0, 0x321E, 0x3220, 0xA48C, 0xA490, 0xA4C6, 0xA4D0, 0xA62B,
0xA640, 0xA66E, 0xA673, 0xA673, 0xA67E, 0xA69D, 0xA6A0, 0xA6EF,
0xA6F2, 0xA6F7, 0xA700, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3,
0xA7D5, 0xA7D9, 0xA7F2, 0xA801, 0xA803, 0xA805, 0xA807, 0xA80A,
0xA80C, 0xA824, 0xA827, 0xA82B, 0xA830, 0xA839, 0xA840, 0xA877,
0xA880, 0xA8C3, 0xA8CE, 0xA8D9, 0xA8F2, 0xA8FE, 0xA900, 0xA925,
0xA92E, 0xA946, 0xA952, 0xA953, 0xA95F, 0xA97C, 0xA983, 0xA9B2,
0xA9B4, 0xA9B5, 0xA9BA, 0xA9BB, 0xA9BE, 0xA9CD, 0xA9CF, 0xA9D9,
0xA9DE, 0xA9E4, 0xA9E6, 0xA9FE, 0xAA00, 0xAA28, 0xAA2F, 0xAA30,
0xAA33, 0xAA34, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA4D, 0xAA4D,
0xAA50, 0xAA59, 0xAA5C, 0xAA7B, 0xAA7D, 0xAAAF, 0xAAB1, 0xAAB1,
0xAAB5, 0xAAB6, 0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2,
0xAADB, 0xAAEB, 0xAAEE, 0xAAF5, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB6B,
0xAB70, 0xABE4, 0xABE6, 0xABE7, 0xABE9, 0xABEC, 0xABF0, 0xABF9,
0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D,
0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 0xFB1D,
0xFB1F, 0xFB36, 0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41,
0xFB43, 0xFB44, 0xFB46, 0xFBC2, 0xFBD3, 0xFD8F, 0xFD92, 0xFDC7,
0xFDCF, 0xFDCF, 0xFDF0, 0xFDFF, 0xFE10, 0xFE19, 0xFE30, 0xFE52,
0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFE70, 0xFE74, 0xFE76, 0xFEFC,
0xFF01, 0xFF9D, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF,
0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC, 0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE,
0xFFFC, 0xFFFD, 0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A,
0x1003C, 0x1003D, 0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA,
0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1018E, 0x10190, 0x1019C,
0x101A0, 0x101A0, 0x101D0, 0x101FC, 0x10280, 0x1029C, 0x102A0, 0x102D0,
0x102E1, 0x102FB, 0x10300, 0x10323, 0x1032D, 0x1034A, 0x10350, 0x10375,
0x10380, 0x1039D, 0x1039F, 0x103C3, 0x103C8, 0x103D5, 0x10400, 0x1049D,
0x104A0, 0x104A9, 0x104B0, 0x104D3, 0x104D8, 0x104FB, 0x10500, 0x10527,
0x10530, 0x10563, 0x1056F, 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, 0x10857, 0x1089E, 0x108A7, 0x108AF, 0x108E0, 0x108F2,
0x108F4, 0x108F5, 0x108FB, 0x1091B, 0x1091F, 0x10939, 0x1093F, 0x1093F,
0x10980, 0x109B7, 0x109BC, 0x109CF, 0x109D2, 0x10A00, 0x10A10, 0x10A13,
0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A40, 0x10A48, 0x10A50, 0x10A58,
0x10A60, 0x10A9F, 0x10AC0, 0x10AE4, 0x10AEB, 0x10AF6, 0x10B00, 0x10B35,
0x10B39, 0x10B55, 0x10B58, 0x10B72, 0x10B78, 0x10B91, 0x10B99, 0x10B9C,
0x10BA9, 0x10BAF, 0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2,
0x10CFA, 0x10D23, 0x10D30, 0x10D39, 0x10E60, 0x10E7E, 0x10E80, 0x10EA9,
0x10EAD, 0x10EAD, 0x10EB0, 0x10EB1, 0x10F00, 0x10F27, 0x10F30, 0x10F45,
0x10F51, 0x10F59, 0x10F70, 0x10F81, 0x10F86, 0x10F89, 0x10FB0, 0x10FCB,
0x10FE0, 0x10FF6, 0x11000, 0x11000, 0x11002, 0x11037, 0x11047, 0x1104D,
0x11052, 0x1106F, 0x11071, 0x11072, 0x11075, 0x11075, 0x11082, 0x110B2,
0x110B7, 0x110B8, 0x110BB, 0x110BC, 0x110BE, 0x110C1, 0x110D0, 0x110E8,
0x110F0, 0x110F9, 0x11103, 0x11126, 0x1112C, 0x1112C, 0x11136, 0x11147,
0x11150, 0x11172, 0x11174, 0x11176, 0x11182, 0x111B5, 0x111BF, 0x111C8,
0x111CD, 0x111CE, 0x111D0, 0x111DF, 0x111E1, 0x111F4, 0x11200, 0x11211,
0x11213, 0x1122E, 0x11232, 0x11233, 0x11235, 0x11235, 0x11238, 0x1123D,
0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
0x1129F, 0x112A9, 0x112B0, 0x112DE, 0x112E0, 0x112E2, 0x112F0, 0x112F9,
0x11302, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133D, 0x1133D,
0x1133F, 0x1133F, 0x11341, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D,
0x11350, 0x11350, 0x1135D, 0x11363, 0x11400, 0x11437, 0x11440, 0x11441,
0x11445, 0x11445, 0x11447, 0x1145B, 0x1145D, 0x1145D, 0x1145F, 0x11461,
0x11480, 0x114AF, 0x114B1, 0x114B2, 0x114B9, 0x114B9, 0x114BB, 0x114BC,
0x114BE, 0x114BE, 0x114C1, 0x114C1, 0x114C4, 0x114C7, 0x114D0, 0x114D9,
0x11580, 0x115AE, 0x115B0, 0x115B1, 0x115B8, 0x115BB, 0x115BE, 0x115BE,
0x115C1, 0x115DB, 0x11600, 0x11632, 0x1163B, 0x1163C, 0x1163E, 0x1163E,
0x11641, 0x11644, 0x11650, 0x11659, 0x11660, 0x1166C, 0x11680, 0x116AA,
0x116AC, 0x116AC, 0x116AE, 0x116AF, 0x116B6, 0x116B6, 0x116B8, 0x116B9,
0x116C0, 0x116C9, 0x11700, 0x1171A, 0x11720, 0x11721, 0x11726, 0x11726,
0x11730, 0x11746, 0x11800, 0x1182E, 0x11838, 0x11838, 0x1183B, 0x1183B,
0x118A0, 0x118F2, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913,
0x11915, 0x11916, 0x11918, 0x1192F, 0x11931, 0x11935, 0x11937, 0x11938,
0x1193D, 0x1193D, 0x1193F, 0x11942, 0x11944, 0x11946, 0x11950, 0x11959,
0x119A0, 0x119A7, 0x119AA, 0x119D3, 0x119DC, 0x119DF, 0x119E1, 0x119E4,
0x11A00, 0x11A00, 0x11A0B, 0x11A32, 0x11A39, 0x11A3A, 0x11A3F, 0x11A46,
0x11A50, 0x11A50, 0x11A57, 0x11A58, 0x11A5C, 0x11A89, 0x11A97, 0x11A97,
0x11A9A, 0x11AA2, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C2F,
0x11C3E, 0x11C3E, 0x11C40, 0x11C45, 0x11C50, 0x11C6C, 0x11C70, 0x11C8F,
0x11CA9, 0x11CA9, 0x11CB1, 0x11CB1, 0x11CB4, 0x11CB4, 0x11D00, 0x11D06,
0x11D08, 0x11D09, 0x11D0B, 0x11D30, 0x11D46, 0x11D46, 0x11D50, 0x11D59,
0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D93, 0x11D94,
0x11D96, 0x11D96, 0x11D98, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 0x11EF2,
0x11EF5, 0x11EF8, 0x11FB0, 0x11FB0, 0x11FC0, 0x11FF1, 0x11FFF, 0x12399,
0x12400, 0x1246E, 0x12470, 0x12474, 0x12480, 0x12543, 0x12F90, 0x12FF2,
0x13000, 0x1342E, 0x14400, 0x14646, 0x16800, 0x16A38, 0x16A40, 0x16A5E,
0x16A60, 0x16A69, 0x16A6E, 0x16ABE, 0x16AC0, 0x16AC9, 0x16AD0, 0x16AED,
0x16AF5, 0x16AF5, 0x16B00, 0x16B2F, 0x16B37, 0x16B45, 0x16B50, 0x16B59,
0x16B5B, 0x16B61, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E9A,
0x16F00, 0x16F4A, 0x16F50, 0x16F87, 0x16F93, 0x16F9F, 0x16FE0, 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, 0x1BC9C, 0x1BC9C,
0x1BC9F, 0x1BC9F, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126,
0x1D129, 0x1D164, 0x1D166, 0x1D166, 0x1D16A, 0x1D16D, 0x1D183, 0x1D184,
0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, 0x1D200, 0x1D241, 0x1D245, 0x1D245,
0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356, 0x1D360, 0x1D378, 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, 0x1D7CB, 0x1D7CE, 0x1D9FF,
0x1DA37, 0x1DA3A, 0x1DA6D, 0x1DA74, 0x1DA76, 0x1DA83, 0x1DA85, 0x1DA8B,
0x1DF00, 0x1DF1E, 0x1E100, 0x1E12C, 0x1E137, 0x1E13D, 0x1E140, 0x1E149,
0x1E14E, 0x1E14F, 0x1E290, 0x1E2AD, 0x1E2C0, 0x1E2EB, 0x1E2F0, 0x1E2F9,
0x1E2FF, 0x1E2FF, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE,
0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8C7, 0x1E8CF, 0x1E900, 0x1E943,
0x1E94B, 0x1E94B, 0x1E950, 0x1E959, 0x1E95E, 0x1E95F, 0x1EC71, 0x1ECB4,
0x1ED01, 0x1ED3D, 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, 0x1EEF0, 0x1EEF1, 0x1F000, 0x1F02B,
0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF,
0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F202, 0x1F210, 0x1F23B,
0x1F240, 0x1F248, 0x1F250, 0x1F251, 0x1F260, 0x1F265, 0x1F300, 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, 0x1FB00, 0x1FB92,
0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, 0x20000, 0x2A6DF, 0x2A700, 0x2B738,
0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D,
0x30000, 0x3134A,
// #66 (10347+353): bp=Grapheme_Extend:Gr_Ext
0x0300, 0x036F, 0x0483, 0x0489, 0x0591, 0x05BD, 0x05BF, 0x05BF,
0x05C1, 0x05C2, 0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x0610, 0x061A,
0x064B, 0x065F, 0x0670, 0x0670, 0x06D6, 0x06DC, 0x06DF, 0x06E4,
0x06E7, 0x06E8, 0x06EA, 0x06ED, 0x0711, 0x0711, 0x0730, 0x074A,
0x07A6, 0x07B0, 0x07EB, 0x07F3, 0x07FD, 0x07FD, 0x0816, 0x0819,
0x081B, 0x0823, 0x0825, 0x0827, 0x0829, 0x082D, 0x0859, 0x085B,
0x0898, 0x089F, 0x08CA, 0x08E1, 0x08E3, 0x0902, 0x093A, 0x093A,
0x093C, 0x093C, 0x0941, 0x0948, 0x094D, 0x094D, 0x0951, 0x0957,
0x0962, 0x0963, 0x0981, 0x0981, 0x09BC, 0x09BC, 0x09BE, 0x09BE,
0x09C1, 0x09C4, 0x09CD, 0x09CD, 0x09D7, 0x09D7, 0x09E2, 0x09E3,
0x09FE, 0x09FE, 0x0A01, 0x0A02, 0x0A3C, 0x0A3C, 0x0A41, 0x0A42,
0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A51, 0x0A51, 0x0A70, 0x0A71,
0x0A75, 0x0A75, 0x0A81, 0x0A82, 0x0ABC, 0x0ABC, 0x0AC1, 0x0AC5,
0x0AC7, 0x0AC8, 0x0ACD, 0x0ACD, 0x0AE2, 0x0AE3, 0x0AFA, 0x0AFF,
0x0B01, 0x0B01, 0x0B3C, 0x0B3C, 0x0B3E, 0x0B3F, 0x0B41, 0x0B44,
0x0B4D, 0x0B4D, 0x0B55, 0x0B57, 0x0B62, 0x0B63, 0x0B82, 0x0B82,
0x0BBE, 0x0BBE, 0x0BC0, 0x0BC0, 0x0BCD, 0x0BCD, 0x0BD7, 0x0BD7,
0x0C00, 0x0C00, 0x0C04, 0x0C04, 0x0C3C, 0x0C3C, 0x0C3E, 0x0C40,
0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C62, 0x0C63,
0x0C81, 0x0C81, 0x0CBC, 0x0CBC, 0x0CBF, 0x0CBF, 0x0CC2, 0x0CC2,
0x0CC6, 0x0CC6, 0x0CCC, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CE2, 0x0CE3,
0x0D00, 0x0D01, 0x0D3B, 0x0D3C, 0x0D3E, 0x0D3E, 0x0D41, 0x0D44,
0x0D4D, 0x0D4D, 0x0D57, 0x0D57, 0x0D62, 0x0D63, 0x0D81, 0x0D81,
0x0DCA, 0x0DCA, 0x0DCF, 0x0DCF, 0x0DD2, 0x0DD4, 0x0DD6, 0x0DD6,
0x0DDF, 0x0DDF, 0x0E31, 0x0E31, 0x0E34, 0x0E3A, 0x0E47, 0x0E4E,
0x0EB1, 0x0EB1, 0x0EB4, 0x0EBC, 0x0EC8, 0x0ECD, 0x0F18, 0x0F19,
0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39, 0x0F71, 0x0F7E,
0x0F80, 0x0F84, 0x0F86, 0x0F87, 0x0F8D, 0x0F97, 0x0F99, 0x0FBC,
0x0FC6, 0x0FC6, 0x102D, 0x1030, 0x1032, 0x1037, 0x1039, 0x103A,
0x103D, 0x103E, 0x1058, 0x1059, 0x105E, 0x1060, 0x1071, 0x1074,
0x1082, 0x1082, 0x1085, 0x1086, 0x108D, 0x108D, 0x109D, 0x109D,
0x135D, 0x135F, 0x1712, 0x1714, 0x1732, 0x1733, 0x1752, 0x1753,
0x1772, 0x1773, 0x17B4, 0x17B5, 0x17B7, 0x17BD, 0x17C6, 0x17C6,
0x17C9, 0x17D3, 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, 0x1A7C, 0x1A7F, 0x1A7F, 0x1AB0, 0x1ACE,
0x1B00, 0x1B03, 0x1B34, 0x1B3A, 0x1B3C, 0x1B3C, 0x1B42, 0x1B42,
0x1B6B, 0x1B73, 0x1B80, 0x1B81, 0x1BA2, 0x1BA5, 0x1BA8, 0x1BA9,
0x1BAB, 0x1BAD, 0x1BE6, 0x1BE6, 0x1BE8, 0x1BE9, 0x1BED, 0x1BED,
0x1BEF, 0x1BF1, 0x1C2C, 0x1C33, 0x1C36, 0x1C37, 0x1CD0, 0x1CD2,
0x1CD4, 0x1CE0, 0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4,
0x1CF8, 0x1CF9, 0x1DC0, 0x1DFF, 0x200C, 0x200C, 0x20D0, 0x20F0,
0x2CEF, 0x2CF1, 0x2D7F, 0x2D7F, 0x2DE0, 0x2DFF, 0x302A, 0x302F,
0x3099, 0x309A, 0xA66F, 0xA672, 0xA674, 0xA67D, 0xA69E, 0xA69F,
0xA6F0, 0xA6F1, 0xA802, 0xA802, 0xA806, 0xA806, 0xA80B, 0xA80B,
0xA825, 0xA826, 0xA82C, 0xA82C, 0xA8C4, 0xA8C5, 0xA8E0, 0xA8F1,
0xA8FF, 0xA8FF, 0xA926, 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, 0xAABF, 0xAAC1, 0xAAC1, 0xAAEC, 0xAAED,
0xAAF6, 0xAAF6, 0xABE5, 0xABE5, 0xABE8, 0xABE8, 0xABED, 0xABED,
0xFB1E, 0xFB1E, 0xFE00, 0xFE0F, 0xFE20, 0xFE2F, 0xFF9E, 0xFF9F,
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, 0x11046, 0x11070, 0x11070,
0x11073, 0x11074, 0x1107F, 0x11081, 0x110B3, 0x110B6, 0x110B9, 0x110BA,
0x110C2, 0x110C2, 0x11100, 0x11102, 0x11127, 0x1112B, 0x1112D, 0x11134,
0x11173, 0x11173, 0x11180, 0x11181, 0x111B6, 0x111BE, 0x111C9, 0x111CC,
0x111CF, 0x111CF, 0x1122F, 0x11231, 0x11234, 0x11234, 0x11236, 0x11237,
0x1123E, 0x1123E, 0x112DF, 0x112DF, 0x112E3, 0x112EA, 0x11300, 0x11301,
0x1133B, 0x1133C, 0x1133E, 0x1133E, 0x11340, 0x11340, 0x11357, 0x11357,
0x11366, 0x1136C, 0x11370, 0x11374, 0x11438, 0x1143F, 0x11442, 0x11444,
0x11446, 0x11446, 0x1145E, 0x1145E, 0x114B0, 0x114B0, 0x114B3, 0x114B8,
0x114BA, 0x114BA, 0x114BD, 0x114BD, 0x114BF, 0x114C0, 0x114C2, 0x114C3,
0x115AF, 0x115AF, 0x115B2, 0x115B5, 0x115BC, 0x115BD, 0x115BF, 0x115C0,
0x115DC, 0x115DD, 0x11633, 0x1163A, 0x1163D, 0x1163D, 0x1163F, 0x11640,
0x116AB, 0x116AB, 0x116AD, 0x116AD, 0x116B0, 0x116B5, 0x116B7, 0x116B7,
0x1171D, 0x1171F, 0x11722, 0x11725, 0x11727, 0x1172B, 0x1182F, 0x11837,
0x11839, 0x1183A, 0x11930, 0x11930, 0x1193B, 0x1193C, 0x1193E, 0x1193E,
0x11943, 0x11943, 0x119D4, 0x119D7, 0x119DA, 0x119DB, 0x119E0, 0x119E0,
0x11A01, 0x11A0A, 0x11A33, 0x11A38, 0x11A3B, 0x11A3E, 0x11A47, 0x11A47,
0x11A51, 0x11A56, 0x11A59, 0x11A5B, 0x11A8A, 0x11A96, 0x11A98, 0x11A99,
0x11C30, 0x11C36, 0x11C38, 0x11C3D, 0x11C3F, 0x11C3F, 0x11C92, 0x11CA7,
0x11CAA, 0x11CB0, 0x11CB2, 0x11CB3, 0x11CB5, 0x11CB6, 0x11D31, 0x11D36,
0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D45, 0x11D47, 0x11D47,
0x11D90, 0x11D91, 0x11D95, 0x11D95, 0x11D97, 0x11D97, 0x11EF3, 0x11EF4,
0x16AF0, 0x16AF4, 0x16B30, 0x16B36, 0x16F4F, 0x16F4F, 0x16F8F, 0x16F92,
0x16FE4, 0x16FE4, 0x1BC9D, 0x1BC9E, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46,
0x1D165, 0x1D165, 0x1D167, 0x1D169, 0x1D16E, 0x1D172, 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, 0x1E94A, 0xE0020, 0xE007F,
0xE0100, 0xE01EF,
// #67 (10700+6): bp=Hex_Digit:Hex
0x0030, 0x0039, 0x0041, 0x0046, 0x0061, 0x0066, 0xFF10, 0xFF19,
0xFF21, 0xFF26, 0xFF41, 0xFF46,
// #68 (10706+2): bp=IDS_Binary_Operator:IDSB
0x2FF0, 0x2FF1, 0x2FF4, 0x2FFB,
// #69 (10708+1): bp=IDS_Trinary_Operator:IDST
0x2FF2, 0x2FF3,
// #70 (10709+756): bp=ID_Continue:IDC
0x0030, 0x0039, 0x0041, 0x005A, 0x005F, 0x005F, 0x0061, 0x007A,
0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00B7, 0x00B7, 0x00BA, 0x00BA,
0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, 0x02C6, 0x02D1,
0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, 0x0300, 0x0374,
0x0376, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F, 0x0386, 0x038A,
0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481,
0x0483, 0x0487, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x0559,
0x0560, 0x0588, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2,
0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
0x0610, 0x061A, 0x0620, 0x0669, 0x066E, 0x06D3, 0x06D5, 0x06DC,
0x06DF, 0x06E8, 0x06EA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x074A,
0x074D, 0x07B1, 0x07C0, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD,
0x0800, 0x082D, 0x0840, 0x085B, 0x0860, 0x086A, 0x0870, 0x0887,
0x0889, 0x088E, 0x0898, 0x08E1, 0x08E3, 0x0963, 0x0966, 0x096F,
0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4,
0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD,
0x09DF, 0x09E3, 0x09E6, 0x09F1, 0x09FC, 0x09FC, 0x09FE, 0x09FE,
0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A75,
0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5,
0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
0x0AE6, 0x0AEF, 0x0AF9, 0x0AFF, 0x0B01, 0x0B03, 0x0B05, 0x0B0C,
0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D,
0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B6F,
0x0B71, 0x0B71, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90,
0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F,
0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2,
0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7,
0x0BE6, 0x0BEF, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28,
0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D,
0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63,
0x0C66, 0x0C6F, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90,
0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4,
0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x0D00, 0x0D0C,
0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4E,
0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D66, 0x0D6F, 0x0D7A, 0x0D7F,
0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4,
0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF3,
0x0E01, 0x0E3A, 0x0E40, 0x0E4E, 0x0E50, 0x0E59, 0x0E81, 0x0E82,
0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5,
0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECD,
0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F18, 0x0F19,
0x0F20, 0x0F29, 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39,
0x0F3E, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F84, 0x0F86, 0x0F97,
0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x1000, 0x1049, 0x1050, 0x109D,
0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
0x10FC, 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, 0x16F8, 0x1700, 0x1715, 0x171F, 0x1734,
0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
0x1780, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9,
0x180B, 0x180D, 0x180F, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA,
0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B,
0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9,
0x19D0, 0x19DA, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C,
0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD,
0x1ABF, 0x1ACE, 0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73,
0x1B80, 0x1BF3, 0x1C00, 0x1C37, 0x1C40, 0x1C49, 0x1C4D, 0x1C7D,
0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CD0, 0x1CD2,
0x1CD4, 0x1CFA, 0x1D00, 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, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128,
0x212A, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E,
0x2160, 0x2188, 0x2C00, 0x2CE4, 0x2CEB, 0x2CF3, 0x2D00, 0x2D25,
0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F,
0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6,
0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6,
0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x3005, 0x3007, 0x3021, 0x302F,
0x3031, 0x3035, 0x3038, 0x303C, 0x3041, 0x3096, 0x3099, 0x309F,
0x30A1, 0x30FA, 0x30FC, 0x30FF, 0x3105, 0x312F, 0x3131, 0x318E,
0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF, 0x4E00, 0xA48C,
0xA4D0, 0xA4FD, 0xA500, 0xA60C, 0xA610, 0xA62B, 0xA640, 0xA66F,
0xA674, 0xA67D, 0xA67F, 0xA6F1, 0xA717, 0xA71F, 0xA722, 0xA788,
0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9,
0xA7F2, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873, 0xA880, 0xA8C5,
0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB, 0xA8FD, 0xA92D,
0xA930, 0xA953, 0xA960, 0xA97C, 0xA980, 0xA9C0, 0xA9CF, 0xA9D9,
0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA50, 0xAA59,
0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD, 0xAAE0, 0xAAEF,
0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E, 0xAB11, 0xAB16,
0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A, 0xAB5C, 0xAB69,
0xAB70, 0xABEA, 0xABEC, 0xABED, 0xABF0, 0xABF9, 0xAC00, 0xD7A3,
0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D, 0xFA70, 0xFAD9,
0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 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, 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, 0x1034A, 0x10350, 0x1037A, 0x10380, 0x1039D,
0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 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, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13,
0x10A15, 0x10A17, 0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F,
0x10A60, 0x10A7C, 0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6,
0x10B00, 0x10B35, 0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91,
0x10C00, 0x10C48, 0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27,
0x10D30, 0x10D39, 0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1,
0x10F00, 0x10F1C, 0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70, 0x10F85,
0x10FB0, 0x10FC4, 0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075,
0x1107F, 0x110BA, 0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9,
0x11100, 0x11134, 0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173,
0x11176, 0x11176, 0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA,
0x111DC, 0x111DC, 0x11200, 0x11211, 0x11213, 0x11237, 0x1123E, 0x1123E,
0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
0x1129F, 0x112A8, 0x112B0, 0x112EA, 0x112F0, 0x112F9, 0x11300, 0x11303,
0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330,
0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344, 0x11347, 0x11348,
0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363,
0x11366, 0x1136C, 0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459,
0x1145E, 0x11461, 0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9,
0x11580, 0x115B5, 0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640,
0x11644, 0x11644, 0x11650, 0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9,
0x11700, 0x1171A, 0x1171D, 0x1172B, 0x11730, 0x11739, 0x11740, 0x11746,
0x11800, 0x1183A, 0x118A0, 0x118E9, 0x118FF, 0x11906, 0x11909, 0x11909,
0x1190C, 0x11913, 0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938,
0x1193B, 0x11943, 0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA, 0x119D7,
0x119DA, 0x119E1, 0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47,
0x11A50, 0x11A99, 0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08,
0x11C0A, 0x11C36, 0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F,
0x11C92, 0x11CA7, 0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09,
0x11D0B, 0x11D36, 0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47,
0x11D50, 0x11D59, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E,
0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 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, 0x16B36, 0x16B40, 0x16B43,
0x16B50, 0x16B59, 0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F,
0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1,
0x16FE3, 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, 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, 0x1DF1E, 0x1E000, 0x1E006,
0x1E008, 0x1E018, 0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A,
0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14E,
0x1E290, 0x1E2AE, 0x1E2C0, 0x1E2F9, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB,
0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8D0, 0x1E8D6,
0x1E900, 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,
// #71 (11465+648): bp=ID_Start:IDS
0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1,
0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE,
0x0370, 0x0374, 0x0376, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F,
0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, 0x0531, 0x0556,
0x0559, 0x0559, 0x0560, 0x0588, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
0x0620, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5,
0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF,
0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1,
0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, 0x0800, 0x0815,
0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x0840, 0x0858,
0x0860, 0x086A, 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9,
0x0904, 0x0939, 0x093D, 0x093D, 0x0950, 0x0950, 0x0958, 0x0961,
0x0971, 0x0980, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD,
0x09CE, 0x09CE, 0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1,
0x09FC, 0x09FC, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8D,
0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1,
0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3D, 0x0B3D,
0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B71, 0x0B71, 0x0B83, 0x0B83,
0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A,
0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10,
0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A,
0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C80, 0x0C80, 0x0C85, 0x0C8C,
0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9,
0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2,
0x0D04, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D,
0x0D4E, 0x0D4E, 0x0D54, 0x0D56, 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F,
0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD,
0x0DC0, 0x0DC6, 0x0E01, 0x0E30, 0x0E32, 0x0E33, 0x0E40, 0x0E46,
0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3,
0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB3, 0x0EBD, 0x0EBD,
0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00,
0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, 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, 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, 0x16F8,
0x1700, 0x1711, 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C,
0x176E, 0x1770, 0x1780, 0x17B3, 0x17D7, 0x17D7, 0x17DC, 0x17DC,
0x1820, 0x1878, 0x1880, 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, 0x1C7D,
0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC,
0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 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, 0x211D, 0x2124, 0x2124,
0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F,
0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 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, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C,
0x3041, 0x3096, 0x309B, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF,
0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C,
0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA67F, 0xA69D,
0xA6A0, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA,
0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 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, 0xA9EF, 0xA9FA, 0xA9FE,
0xAA00, 0xAA28, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA76,
0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6,
0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD,
0xAAE0, 0xAAEA, 0xAAF2, 0xAAF4, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A,
0xAB5C, 0xAB69, 0xAB70, 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, 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, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D,
0x103A0, 0x103C3, 0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 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, 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, 0x2F800, 0x2FA1D, 0x30000, 0x3134A,
// #72 (12113+19): bp=Ideographic:Ideo
0x3006, 0x3007, 0x3021, 0x3029, 0x3038, 0x303A, 0x3400, 0x4DBF,
0x4E00, 0x9FFF, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0x16FE4, 0x16FE4,
0x17000, 0x187F7, 0x18800, 0x18CD5, 0x18D00, 0x18D08, 0x1B170, 0x1B2FB,
0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D, 0x2B820, 0x2CEA1,
0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A,
// #73 (12132+1): bp=Join_Control:Join_C
0x200C, 0x200D,
// #74 (12133+7): bp=Logical_Order_Exception:LOE
0x0E40, 0x0E44, 0x0EC0, 0x0EC4, 0x19B5, 0x19B7, 0x19BA, 0x19BA,
0xAAB5, 0xAAB6, 0xAAB9, 0xAAB9, 0xAABB, 0xAABC,
// #75 (12140+668): bp=Lowercase:Lower
0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00BA, 0x00BA,
0x00DF, 0x00F6, 0x00F8, 0x00FF, 0x0101, 0x0101, 0x0103, 0x0103,
0x0105, 0x0105, 0x0107, 0x0107, 0x0109, 0x0109, 0x010B, 0x010B,
0x010D, 0x010D, 0x010F, 0x010F, 0x0111, 0x0111, 0x0113, 0x0113,
0x0115, 0x0115, 0x0117, 0x0117, 0x0119, 0x0119, 0x011B, 0x011B,
0x011D, 0x011D, 0x011F, 0x011F, 0x0121, 0x0121, 0x0123, 0x0123,
0x0125, 0x0125, 0x0127, 0x0127, 0x0129, 0x0129, 0x012B, 0x012B,
0x012D, 0x012D, 0x012F, 0x012F, 0x0131, 0x0131, 0x0133, 0x0133,
0x0135, 0x0135, 0x0137, 0x0138, 0x013A, 0x013A, 0x013C, 0x013C,
0x013E, 0x013E, 0x0140, 0x0140, 0x0142, 0x0142, 0x0144, 0x0144,
0x0146, 0x0146, 0x0148, 0x0149, 0x014B, 0x014B, 0x014D, 0x014D,
0x014F, 0x014F, 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155,
0x0157, 0x0157, 0x0159, 0x0159, 0x015B, 0x015B, 0x015D, 0x015D,
0x015F, 0x015F, 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165,
0x0167, 0x0167, 0x0169, 0x0169, 0x016B, 0x016B, 0x016D, 0x016D,
0x016F, 0x016F, 0x0171, 0x0171, 0x0173, 0x0173, 0x0175, 0x0175,
0x0177, 0x0177, 0x017A, 0x017A, 0x017C, 0x017C, 0x017E, 0x0180,
0x0183, 0x0183, 0x0185, 0x0185, 0x0188, 0x0188, 0x018C, 0x018D,
0x0192, 0x0192, 0x0195, 0x0195, 0x0199, 0x019B, 0x019E, 0x019E,
0x01A1, 0x01A1, 0x01A3, 0x01A3, 0x01A5, 0x01A5, 0x01A8, 0x01A8,
0x01AA, 0x01AB, 0x01AD, 0x01AD, 0x01B0, 0x01B0, 0x01B4, 0x01B4,
0x01B6, 0x01B6, 0x01B9, 0x01BA, 0x01BD, 0x01BF, 0x01C6, 0x01C6,
0x01C9, 0x01C9, 0x01CC, 0x01CC, 0x01CE, 0x01CE, 0x01D0, 0x01D0,
0x01D2, 0x01D2, 0x01D4, 0x01D4, 0x01D6, 0x01D6, 0x01D8, 0x01D8,
0x01DA, 0x01DA, 0x01DC, 0x01DD, 0x01DF, 0x01DF, 0x01E1, 0x01E1,
0x01E3, 0x01E3, 0x01E5, 0x01E5, 0x01E7, 0x01E7, 0x01E9, 0x01E9,
0x01EB, 0x01EB, 0x01ED, 0x01ED, 0x01EF, 0x01F0, 0x01F3, 0x01F3,
0x01F5, 0x01F5, 0x01F9, 0x01F9, 0x01FB, 0x01FB, 0x01FD, 0x01FD,
0x01FF, 0x01FF, 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205,
0x0207, 0x0207, 0x0209, 0x0209, 0x020B, 0x020B, 0x020D, 0x020D,
0x020F, 0x020F, 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215,
0x0217, 0x0217, 0x0219, 0x0219, 0x021B, 0x021B, 0x021D, 0x021D,
0x021F, 0x021F, 0x0221, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225,
0x0227, 0x0227, 0x0229, 0x0229, 0x022B, 0x022B, 0x022D, 0x022D,
0x022F, 0x022F, 0x0231, 0x0231, 0x0233, 0x0239, 0x023C, 0x023C,
0x023F, 0x0240, 0x0242, 0x0242, 0x0247, 0x0247, 0x0249, 0x0249,
0x024B, 0x024B, 0x024D, 0x024D, 0x024F, 0x0293, 0x0295, 0x02B8,
0x02C0, 0x02C1, 0x02E0, 0x02E4, 0x0345, 0x0345, 0x0371, 0x0371,
0x0373, 0x0373, 0x0377, 0x0377, 0x037A, 0x037D, 0x0390, 0x0390,
0x03AC, 0x03CE, 0x03D0, 0x03D1, 0x03D5, 0x03D7, 0x03D9, 0x03D9,
0x03DB, 0x03DB, 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1,
0x03E3, 0x03E3, 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9,
0x03EB, 0x03EB, 0x03ED, 0x03ED, 0x03EF, 0x03F3, 0x03F5, 0x03F5,
0x03F8, 0x03F8, 0x03FB, 0x03FC, 0x0430, 0x045F, 0x0461, 0x0461,
0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469,
0x046B, 0x046B, 0x046D, 0x046D, 0x046F, 0x046F, 0x0471, 0x0471,
0x0473, 0x0473, 0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479,
0x047B, 0x047B, 0x047D, 0x047D, 0x047F, 0x047F, 0x0481, 0x0481,
0x048B, 0x048B, 0x048D, 0x048D, 0x048F, 0x048F, 0x0491, 0x0491,
0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499,
0x049B, 0x049B, 0x049D, 0x049D, 0x049F, 0x049F, 0x04A1, 0x04A1,
0x04A3, 0x04A3, 0x04A5, 0x04A5, 0x04A7, 0x04A7, 0x04A9, 0x04A9,
0x04AB, 0x04AB, 0x04AD, 0x04AD, 0x04AF, 0x04AF, 0x04B1, 0x04B1,
0x04B3, 0x04B3, 0x04B5, 0x04B5, 0x04B7, 0x04B7, 0x04B9, 0x04B9,
0x04BB, 0x04BB, 0x04BD, 0x04BD, 0x04BF, 0x04BF, 0x04C2, 0x04C2,
0x04C4, 0x04C4, 0x04C6, 0x04C6, 0x04C8, 0x04C8, 0x04CA, 0x04CA,
0x04CC, 0x04CC, 0x04CE, 0x04CF, 0x04D1, 0x04D1, 0x04D3, 0x04D3,
0x04D5, 0x04D5, 0x04D7, 0x04D7, 0x04D9, 0x04D9, 0x04DB, 0x04DB,
0x04DD, 0x04DD, 0x04DF, 0x04DF, 0x04E1, 0x04E1, 0x04E3, 0x04E3,
0x04E5, 0x04E5, 0x04E7, 0x04E7, 0x04E9, 0x04E9, 0x04EB, 0x04EB,
0x04ED, 0x04ED, 0x04EF, 0x04EF, 0x04F1, 0x04F1, 0x04F3, 0x04F3,
0x04F5, 0x04F5, 0x04F7, 0x04F7, 0x04F9, 0x04F9, 0x04FB, 0x04FB,
0x04FD, 0x04FD, 0x04FF, 0x04FF, 0x0501, 0x0501, 0x0503, 0x0503,
0x0505, 0x0505, 0x0507, 0x0507, 0x0509, 0x0509, 0x050B, 0x050B,
0x050D, 0x050D, 0x050F, 0x050F, 0x0511, 0x0511, 0x0513, 0x0513,
0x0515, 0x0515, 0x0517, 0x0517, 0x0519, 0x0519, 0x051B, 0x051B,
0x051D, 0x051D, 0x051F, 0x051F, 0x0521, 0x0521, 0x0523, 0x0523,
0x0525, 0x0525, 0x0527, 0x0527, 0x0529, 0x0529, 0x052B, 0x052B,
0x052D, 0x052D, 0x052F, 0x052F, 0x0560, 0x0588, 0x10D0, 0x10FA,
0x10FD, 0x10FF, 0x13F8, 0x13FD, 0x1C80, 0x1C88, 0x1D00, 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, 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, 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, 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, 0xA7FA, 0xAB30, 0xAB5A, 0xAB5C, 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,
// #76 (12808+138): bp=Math
0x002B, 0x002B, 0x003C, 0x003E, 0x005E, 0x005E, 0x007C, 0x007C,
0x007E, 0x007E, 0x00AC, 0x00AC, 0x00B1, 0x00B1, 0x00D7, 0x00D7,
0x00F7, 0x00F7, 0x03D0, 0x03D2, 0x03D5, 0x03D5, 0x03F0, 0x03F1,
0x03F4, 0x03F6, 0x0606, 0x0608, 0x2016, 0x2016, 0x2032, 0x2034,
0x2040, 0x2040, 0x2044, 0x2044, 0x2052, 0x2052, 0x2061, 0x2064,
0x207A, 0x207E, 0x208A, 0x208E, 0x20D0, 0x20DC, 0x20E1, 0x20E1,
0x20E5, 0x20E6, 0x20EB, 0x20EF, 0x2102, 0x2102, 0x2107, 0x2107,
0x210A, 0x2113, 0x2115, 0x2115, 0x2118, 0x211D, 0x2124, 0x2124,
0x2128, 0x2129, 0x212C, 0x212D, 0x212F, 0x2131, 0x2133, 0x2138,
0x213C, 0x2149, 0x214B, 0x214B, 0x2190, 0x21A7, 0x21A9, 0x21AE,
0x21B0, 0x21B1, 0x21B6, 0x21B7, 0x21BC, 0x21DB, 0x21DD, 0x21DD,
0x21E4, 0x21E5, 0x21F4, 0x22FF, 0x2308, 0x230B, 0x2320, 0x2321,
0x237C, 0x237C, 0x239B, 0x23B5, 0x23B7, 0x23B7, 0x23D0, 0x23D0,
0x23DC, 0x23E2, 0x25A0, 0x25A1, 0x25AE, 0x25B7, 0x25BC, 0x25C1,
0x25C6, 0x25C7, 0x25CA, 0x25CB, 0x25CF, 0x25D3, 0x25E2, 0x25E2,
0x25E4, 0x25E4, 0x25E7, 0x25EC, 0x25F8, 0x25FF, 0x2605, 0x2606,
0x2640, 0x2640, 0x2642, 0x2642, 0x2660, 0x2663, 0x266D, 0x266F,
0x27C0, 0x27FF, 0x2900, 0x2AFF, 0x2B30, 0x2B44, 0x2B47, 0x2B4C,
0xFB29, 0xFB29, 0xFE61, 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, 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, 0x1EEF0, 0x1EEF1,
// #77 (12946+18): bp=Noncharacter_Code_Point:NChar
0xFDD0, 0xFDEF, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF,
0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE, 0x6FFFF,
0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF,
0xBFFFE, 0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xEFFFE, 0xEFFFF,
0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF,
// #78 (12964+28): bp=Pattern_Syntax:Pat_Syn
0x0021, 0x002F, 0x003A, 0x0040, 0x005B, 0x005E, 0x0060, 0x0060,
0x007B, 0x007E, 0x00A1, 0x00A7, 0x00A9, 0x00A9, 0x00AB, 0x00AC,
0x00AE, 0x00AE, 0x00B0, 0x00B1, 0x00B6, 0x00B6, 0x00BB, 0x00BB,
0x00BF, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x2010, 0x2027,
0x2030, 0x203E, 0x2041, 0x2053, 0x2055, 0x205E, 0x2190, 0x245F,
0x2500, 0x2775, 0x2794, 0x2BFF, 0x2E00, 0x2E7F, 0x3001, 0x3003,
0x3008, 0x3020, 0x3030, 0x3030, 0xFD3E, 0xFD3F, 0xFE45, 0xFE46,
// #79 (12992+5): bp=Pattern_White_Space:Pat_WS
0x0009, 0x000D, 0x0020, 0x0020, 0x0085, 0x0085, 0x200E, 0x200F,
0x2028, 0x2029,
// #80 (12997+13): bp=Quotation_Mark:QMark
0x0022, 0x0022, 0x0027, 0x0027, 0x00AB, 0x00AB, 0x00BB, 0x00BB,
0x2018, 0x201F, 0x2039, 0x203A, 0x2E42, 0x2E42, 0x300C, 0x300F,
0x301D, 0x301F, 0xFE41, 0xFE44, 0xFF02, 0xFF02, 0xFF07, 0xFF07,
0xFF62, 0xFF63,
// #81 (13010+3): bp=Radical
0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5,
// #82 (13013+1): bp=Regional_Indicator:RI
0x1F1E6, 0x1F1FF,
// #83 (13014+79): bp=Sentence_Terminal:STerm
0x0021, 0x0021, 0x002E, 0x002E, 0x003F, 0x003F, 0x0589, 0x0589,
0x061D, 0x061F, 0x06D4, 0x06D4, 0x0700, 0x0702, 0x07F9, 0x07F9,
0x0837, 0x0837, 0x0839, 0x0839, 0x083D, 0x083E, 0x0964, 0x0965,
0x104A, 0x104B, 0x1362, 0x1362, 0x1367, 0x1368, 0x166E, 0x166E,
0x1735, 0x1736, 0x1803, 0x1803, 0x1809, 0x1809, 0x1944, 0x1945,
0x1AA8, 0x1AAB, 0x1B5A, 0x1B5B, 0x1B5E, 0x1B5F, 0x1B7D, 0x1B7E,
0x1C3B, 0x1C3C, 0x1C7E, 0x1C7F, 0x203C, 0x203D, 0x2047, 0x2049,
0x2E2E, 0x2E2E, 0x2E3C, 0x2E3C, 0x2E53, 0x2E54, 0x3002, 0x3002,
0xA4FF, 0xA4FF, 0xA60E, 0xA60F, 0xA6F3, 0xA6F3, 0xA6F7, 0xA6F7,
0xA876, 0xA877, 0xA8CE, 0xA8CF, 0xA92F, 0xA92F, 0xA9C8, 0xA9C9,
0xAA5D, 0xAA5F, 0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE52, 0xFE52,
0xFE56, 0xFE57, 0xFF01, 0xFF01, 0xFF0E, 0xFF0E, 0xFF1F, 0xFF1F,
0xFF61, 0xFF61, 0x10A56, 0x10A57, 0x10F55, 0x10F59, 0x10F86, 0x10F89,
0x11047, 0x11048, 0x110BE, 0x110C1, 0x11141, 0x11143, 0x111C5, 0x111C6,
0x111CD, 0x111CD, 0x111DE, 0x111DF, 0x11238, 0x11239, 0x1123B, 0x1123C,
0x112A9, 0x112A9, 0x1144B, 0x1144C, 0x115C2, 0x115C3, 0x115C9, 0x115D7,
0x11641, 0x11642, 0x1173C, 0x1173E, 0x11944, 0x11944, 0x11946, 0x11946,
0x11A42, 0x11A43, 0x11A9B, 0x11A9C, 0x11C41, 0x11C42, 0x11EF7, 0x11EF8,
0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B38, 0x16B44, 0x16B44,
0x16E98, 0x16E98, 0x1BC9F, 0x1BC9F, 0x1DA88, 0x1DA88,
// #84 (13093+32): bp=Soft_Dotted:SD
0x0069, 0x006A, 0x012F, 0x012F, 0x0249, 0x0249, 0x0268, 0x0268,
0x029D, 0x029D, 0x02B2, 0x02B2, 0x03F3, 0x03F3, 0x0456, 0x0456,
0x0458, 0x0458, 0x1D62, 0x1D62, 0x1D96, 0x1D96, 0x1DA4, 0x1DA4,
0x1DA8, 0x1DA8, 0x1E2D, 0x1E2D, 0x1ECB, 0x1ECB, 0x2071, 0x2071,
0x2148, 0x2149, 0x2C7C, 0x2C7C, 0x1D422, 0x1D423, 0x1D456, 0x1D457,
0x1D48A, 0x1D48B, 0x1D4BE, 0x1D4BF, 0x1D4F2, 0x1D4F3, 0x1D526, 0x1D527,
0x1D55A, 0x1D55B, 0x1D58E, 0x1D58F, 0x1D5C2, 0x1D5C3, 0x1D5F6, 0x1D5F7,
0x1D62A, 0x1D62B, 0x1D65E, 0x1D65F, 0x1D692, 0x1D693, 0x1DF1A, 0x1DF1A,
// #85 (13125+107): bp=Terminal_Punctuation:Term
0x0021, 0x0021, 0x002C, 0x002C, 0x002E, 0x002E, 0x003A, 0x003B,
0x003F, 0x003F, 0x037E, 0x037E, 0x0387, 0x0387, 0x0589, 0x0589,
0x05C3, 0x05C3, 0x060C, 0x060C, 0x061B, 0x061B, 0x061D, 0x061F,
0x06D4, 0x06D4, 0x0700, 0x070A, 0x070C, 0x070C, 0x07F8, 0x07F9,
0x0830, 0x083E, 0x085E, 0x085E, 0x0964, 0x0965, 0x0E5A, 0x0E5B,
0x0F08, 0x0F08, 0x0F0D, 0x0F12, 0x104A, 0x104B, 0x1361, 0x1368,
0x166E, 0x166E, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x17D4, 0x17D6,
0x17DA, 0x17DA, 0x1802, 0x1805, 0x1808, 0x1809, 0x1944, 0x1945,
0x1AA8, 0x1AAB, 0x1B5A, 0x1B5B, 0x1B5D, 0x1B5F, 0x1B7D, 0x1B7E,
0x1C3B, 0x1C3F, 0x1C7E, 0x1C7F, 0x203C, 0x203D, 0x2047, 0x2049,
0x2E2E, 0x2E2E, 0x2E3C, 0x2E3C, 0x2E41, 0x2E41, 0x2E4C, 0x2E4C,
0x2E4E, 0x2E4F, 0x2E53, 0x2E54, 0x3001, 0x3002, 0xA4FE, 0xA4FF,
0xA60D, 0xA60F, 0xA6F3, 0xA6F7, 0xA876, 0xA877, 0xA8CE, 0xA8CF,
0xA92F, 0xA92F, 0xA9C7, 0xA9C9, 0xAA5D, 0xAA5F, 0xAADF, 0xAADF,
0xAAF0, 0xAAF1, 0xABEB, 0xABEB, 0xFE50, 0xFE52, 0xFE54, 0xFE57,
0xFF01, 0xFF01, 0xFF0C, 0xFF0C, 0xFF0E, 0xFF0E, 0xFF1A, 0xFF1B,
0xFF1F, 0xFF1F, 0xFF61, 0xFF61, 0xFF64, 0xFF64, 0x1039F, 0x1039F,
0x103D0, 0x103D0, 0x10857, 0x10857, 0x1091F, 0x1091F, 0x10A56, 0x10A57,
0x10AF0, 0x10AF5, 0x10B3A, 0x10B3F, 0x10B99, 0x10B9C, 0x10F55, 0x10F59,
0x10F86, 0x10F89, 0x11047, 0x1104D, 0x110BE, 0x110C1, 0x11141, 0x11143,
0x111C5, 0x111C6, 0x111CD, 0x111CD, 0x111DE, 0x111DF, 0x11238, 0x1123C,
0x112A9, 0x112A9, 0x1144B, 0x1144D, 0x1145A, 0x1145B, 0x115C2, 0x115C5,
0x115C9, 0x115D7, 0x11641, 0x11642, 0x1173C, 0x1173E, 0x11944, 0x11944,
0x11946, 0x11946, 0x11A42, 0x11A43, 0x11A9B, 0x11A9C, 0x11AA1, 0x11AA2,
0x11C41, 0x11C43, 0x11C71, 0x11C71, 0x11EF7, 0x11EF8, 0x12470, 0x12474,
0x16A6E, 0x16A6F, 0x16AF5, 0x16AF5, 0x16B37, 0x16B39, 0x16B44, 0x16B44,
0x16E97, 0x16E98, 0x1BC9F, 0x1BC9F, 0x1DA87, 0x1DA8A,
// #86 (13232+15): bp=Unified_Ideograph:UIdeo
0x3400, 0x4DBF, 0x4E00, 0x9FFF, 0xFA0E, 0xFA0F, 0xFA11, 0xFA11,
0xFA13, 0xFA14, 0xFA1F, 0xFA1F, 0xFA21, 0xFA21, 0xFA23, 0xFA24,
0xFA27, 0xFA29, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D,
0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x30000, 0x3134A,
// #87 (13247+651): bp=Uppercase:Upper
0x0041, 0x005A, 0x00C0, 0x00D6, 0x00D8, 0x00DE, 0x0100, 0x0100,
0x0102, 0x0102, 0x0104, 0x0104, 0x0106, 0x0106, 0x0108, 0x0108,
0x010A, 0x010A, 0x010C, 0x010C, 0x010E, 0x010E, 0x0110, 0x0110,
0x0112, 0x0112, 0x0114, 0x0114, 0x0116, 0x0116, 0x0118, 0x0118,
0x011A, 0x011A, 0x011C, 0x011C, 0x011E, 0x011E, 0x0120, 0x0120,
0x0122, 0x0122, 0x0124, 0x0124, 0x0126, 0x0126, 0x0128, 0x0128,
0x012A, 0x012A, 0x012C, 0x012C, 0x012E, 0x012E, 0x0130, 0x0130,
0x0132, 0x0132, 0x0134, 0x0134, 0x0136, 0x0136, 0x0139, 0x0139,
0x013B, 0x013B, 0x013D, 0x013D, 0x013F, 0x013F, 0x0141, 0x0141,
0x0143, 0x0143, 0x0145, 0x0145, 0x0147, 0x0147, 0x014A, 0x014A,
0x014C, 0x014C, 0x014E, 0x014E, 0x0150, 0x0150, 0x0152, 0x0152,
0x0154, 0x0154, 0x0156, 0x0156, 0x0158, 0x0158, 0x015A, 0x015A,
0x015C, 0x015C, 0x015E, 0x015E, 0x0160, 0x0160, 0x0162, 0x0162,
0x0164, 0x0164, 0x0166, 0x0166, 0x0168, 0x0168, 0x016A, 0x016A,
0x016C, 0x016C, 0x016E, 0x016E, 0x0170, 0x0170, 0x0172, 0x0172,
0x0174, 0x0174, 0x0176, 0x0176, 0x0178, 0x0179, 0x017B, 0x017B,
0x017D, 0x017D, 0x0181, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187,
0x0189, 0x018B, 0x018E, 0x0191, 0x0193, 0x0194, 0x0196, 0x0198,
0x019C, 0x019D, 0x019F, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4,
0x01A6, 0x01A7, 0x01A9, 0x01A9, 0x01AC, 0x01AC, 0x01AE, 0x01AF,
0x01B1, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01BC, 0x01BC,
0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CD, 0x01CD,
0x01CF, 0x01CF, 0x01D1, 0x01D1, 0x01D3, 0x01D3, 0x01D5, 0x01D5,
0x01D7, 0x01D7, 0x01D9, 0x01D9, 0x01DB, 0x01DB, 0x01DE, 0x01DE,
0x01E0, 0x01E0, 0x01E2, 0x01E2, 0x01E4, 0x01E4, 0x01E6, 0x01E6,
0x01E8, 0x01E8, 0x01EA, 0x01EA, 0x01EC, 0x01EC, 0x01EE, 0x01EE,
0x01F1, 0x01F1, 0x01F4, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FA,
0x01FC, 0x01FC, 0x01FE, 0x01FE, 0x0200, 0x0200, 0x0202, 0x0202,
0x0204, 0x0204, 0x0206, 0x0206, 0x0208, 0x0208, 0x020A, 0x020A,
0x020C, 0x020C, 0x020E, 0x020E, 0x0210, 0x0210, 0x0212, 0x0212,
0x0214, 0x0214, 0x0216, 0x0216, 0x0218, 0x0218, 0x021A, 0x021A,
0x021C, 0x021C, 0x021E, 0x021E, 0x0220, 0x0220, 0x0222, 0x0222,
0x0224, 0x0224, 0x0226, 0x0226, 0x0228, 0x0228, 0x022A, 0x022A,
0x022C, 0x022C, 0x022E, 0x022E, 0x0230, 0x0230, 0x0232, 0x0232,
0x023A, 0x023B, 0x023D, 0x023E, 0x0241, 0x0241, 0x0243, 0x0246,
0x0248, 0x0248, 0x024A, 0x024A, 0x024C, 0x024C, 0x024E, 0x024E,
0x0370, 0x0370, 0x0372, 0x0372, 0x0376, 0x0376, 0x037F, 0x037F,
0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x038F,
0x0391, 0x03A1, 0x03A3, 0x03AB, 0x03CF, 0x03CF, 0x03D2, 0x03D4,
0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE,
0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6,
0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE,
0x03F4, 0x03F4, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FD, 0x042F,
0x0460, 0x0460, 0x0462, 0x0462, 0x0464, 0x0464, 0x0466, 0x0466,
0x0468, 0x0468, 0x046A, 0x046A, 0x046C, 0x046C, 0x046E, 0x046E,
0x0470, 0x0470, 0x0472, 0x0472, 0x0474, 0x0474, 0x0476, 0x0476,
0x0478, 0x0478, 0x047A, 0x047A, 0x047C, 0x047C, 0x047E, 0x047E,
0x0480, 0x0480, 0x048A, 0x048A, 0x048C, 0x048C, 0x048E, 0x048E,
0x0490, 0x0490, 0x0492, 0x0492, 0x0494, 0x0494, 0x0496, 0x0496,
0x0498, 0x0498, 0x049A, 0x049A, 0x049C, 0x049C, 0x049E, 0x049E,
0x04A0, 0x04A0, 0x04A2, 0x04A2, 0x04A4, 0x04A4, 0x04A6, 0x04A6,
0x04A8, 0x04A8, 0x04AA, 0x04AA, 0x04AC, 0x04AC, 0x04AE, 0x04AE,
0x04B0, 0x04B0, 0x04B2, 0x04B2, 0x04B4, 0x04B4, 0x04B6, 0x04B6,
0x04B8, 0x04B8, 0x04BA, 0x04BA, 0x04BC, 0x04BC, 0x04BE, 0x04BE,
0x04C0, 0x04C1, 0x04C3, 0x04C3, 0x04C5, 0x04C5, 0x04C7, 0x04C7,
0x04C9, 0x04C9, 0x04CB, 0x04CB, 0x04CD, 0x04CD, 0x04D0, 0x04D0,
0x04D2, 0x04D2, 0x04D4, 0x04D4, 0x04D6, 0x04D6, 0x04D8, 0x04D8,
0x04DA, 0x04DA, 0x04DC, 0x04DC, 0x04DE, 0x04DE, 0x04E0, 0x04E0,
0x04E2, 0x04E2, 0x04E4, 0x04E4, 0x04E6, 0x04E6, 0x04E8, 0x04E8,
0x04EA, 0x04EA, 0x04EC, 0x04EC, 0x04EE, 0x04EE, 0x04F0, 0x04F0,
0x04F2, 0x04F2, 0x04F4, 0x04F4, 0x04F6, 0x04F6, 0x04F8, 0x04F8,
0x04FA, 0x04FA, 0x04FC, 0x04FC, 0x04FE, 0x04FE, 0x0500, 0x0500,
0x0502, 0x0502, 0x0504, 0x0504, 0x0506, 0x0506, 0x0508, 0x0508,
0x050A, 0x050A, 0x050C, 0x050C, 0x050E, 0x050E, 0x0510, 0x0510,
0x0512, 0x0512, 0x0514, 0x0514, 0x0516, 0x0516, 0x0518, 0x0518,
0x051A, 0x051A, 0x051C, 0x051C, 0x051E, 0x051E, 0x0520, 0x0520,
0x0522, 0x0522, 0x0524, 0x0524, 0x0526, 0x0526, 0x0528, 0x0528,
0x052A, 0x052A, 0x052C, 0x052C, 0x052E, 0x052E, 0x0531, 0x0556,
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,
// #88 (13898+4): bp=Variation_Selector:VS
0x180B, 0x180D, 0x180F, 0x180F, 0xFE00, 0xFE0F, 0xE0100, 0xE01EF,
// #89 (13902+10): bp=White_Space:space
0x0009, 0x000D, 0x0020, 0x0020, 0x0085, 0x0085, 0x00A0, 0x00A0,
0x1680, 0x1680, 0x2000, 0x200A, 0x2028, 0x2029, 0x202F, 0x202F,
0x205F, 0x205F, 0x3000, 0x3000,
// #90 (13912+763): bp=XID_Continue:XIDC
0x0030, 0x0039, 0x0041, 0x005A, 0x005F, 0x005F, 0x0061, 0x007A,
0x00AA, 0x00AA, 0x00B5, 0x00B5, 0x00B7, 0x00B7, 0x00BA, 0x00BA,
0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1, 0x02C6, 0x02D1,
0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE, 0x0300, 0x0374,
0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F, 0x0386, 0x038A,
0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03F5, 0x03F7, 0x0481,
0x0483, 0x0487, 0x048A, 0x052F, 0x0531, 0x0556, 0x0559, 0x0559,
0x0560, 0x0588, 0x0591, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x05C2,
0x05C4, 0x05C5, 0x05C7, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
0x0610, 0x061A, 0x0620, 0x0669, 0x066E, 0x06D3, 0x06D5, 0x06DC,
0x06DF, 0x06E8, 0x06EA, 0x06FC, 0x06FF, 0x06FF, 0x0710, 0x074A,
0x074D, 0x07B1, 0x07C0, 0x07F5, 0x07FA, 0x07FA, 0x07FD, 0x07FD,
0x0800, 0x082D, 0x0840, 0x085B, 0x0860, 0x086A, 0x0870, 0x0887,
0x0889, 0x088E, 0x0898, 0x08E1, 0x08E3, 0x0963, 0x0966, 0x096F,
0x0971, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4,
0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD,
0x09DF, 0x09E3, 0x09E6, 0x09F1, 0x09FC, 0x09FC, 0x09FE, 0x09FE,
0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A75,
0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5,
0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
0x0AE6, 0x0AEF, 0x0AF9, 0x0AFF, 0x0B01, 0x0B03, 0x0B05, 0x0B0C,
0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D,
0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B6F,
0x0B71, 0x0B71, 0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90,
0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F,
0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2,
0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7,
0x0BE6, 0x0BEF, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28,
0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D,
0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63,
0x0C66, 0x0C6F, 0x0C80, 0x0C83, 0x0C85, 0x0C8C, 0x0C8E, 0x0C90,
0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4,
0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x0D00, 0x0D0C,
0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4E,
0x0D54, 0x0D57, 0x0D5F, 0x0D63, 0x0D66, 0x0D6F, 0x0D7A, 0x0D7F,
0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4,
0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF3,
0x0E01, 0x0E3A, 0x0E40, 0x0E4E, 0x0E50, 0x0E59, 0x0E81, 0x0E82,
0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3, 0x0EA5, 0x0EA5,
0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EC8, 0x0ECD,
0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00, 0x0F18, 0x0F19,
0x0F20, 0x0F29, 0x0F35, 0x0F35, 0x0F37, 0x0F37, 0x0F39, 0x0F39,
0x0F3E, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F84, 0x0F86, 0x0F97,
0x0F99, 0x0FBC, 0x0FC6, 0x0FC6, 0x1000, 0x1049, 0x1050, 0x109D,
0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
0x10FC, 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, 0x16F8, 0x1700, 0x1715, 0x171F, 0x1734,
0x1740, 0x1753, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
0x1780, 0x17D3, 0x17D7, 0x17D7, 0x17DC, 0x17DD, 0x17E0, 0x17E9,
0x180B, 0x180D, 0x180F, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA,
0x18B0, 0x18F5, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B,
0x1946, 0x196D, 0x1970, 0x1974, 0x1980, 0x19AB, 0x19B0, 0x19C9,
0x19D0, 0x19DA, 0x1A00, 0x1A1B, 0x1A20, 0x1A5E, 0x1A60, 0x1A7C,
0x1A7F, 0x1A89, 0x1A90, 0x1A99, 0x1AA7, 0x1AA7, 0x1AB0, 0x1ABD,
0x1ABF, 0x1ACE, 0x1B00, 0x1B4C, 0x1B50, 0x1B59, 0x1B6B, 0x1B73,
0x1B80, 0x1BF3, 0x1C00, 0x1C37, 0x1C40, 0x1C49, 0x1C4D, 0x1C7D,
0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CD0, 0x1CD2,
0x1CD4, 0x1CFA, 0x1D00, 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, 0x211D, 0x2124, 0x2124, 0x2126, 0x2126, 0x2128, 0x2128,
0x212A, 0x2139, 0x213C, 0x213F, 0x2145, 0x2149, 0x214E, 0x214E,
0x2160, 0x2188, 0x2C00, 0x2CE4, 0x2CEB, 0x2CF3, 0x2D00, 0x2D25,
0x2D27, 0x2D27, 0x2D2D, 0x2D2D, 0x2D30, 0x2D67, 0x2D6F, 0x2D6F,
0x2D7F, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6,
0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6,
0x2DD8, 0x2DDE, 0x2DE0, 0x2DFF, 0x3005, 0x3007, 0x3021, 0x302F,
0x3031, 0x3035, 0x3038, 0x303C, 0x3041, 0x3096, 0x3099, 0x309A,
0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF, 0x3105, 0x312F,
0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF, 0x3400, 0x4DBF,
0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C, 0xA610, 0xA62B,
0xA640, 0xA66F, 0xA674, 0xA67D, 0xA67F, 0xA6F1, 0xA717, 0xA71F,
0xA722, 0xA788, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3,
0xA7D5, 0xA7D9, 0xA7F2, 0xA827, 0xA82C, 0xA82C, 0xA840, 0xA873,
0xA880, 0xA8C5, 0xA8D0, 0xA8D9, 0xA8E0, 0xA8F7, 0xA8FB, 0xA8FB,
0xA8FD, 0xA92D, 0xA930, 0xA953, 0xA960, 0xA97C, 0xA980, 0xA9C0,
0xA9CF, 0xA9D9, 0xA9E0, 0xA9FE, 0xAA00, 0xAA36, 0xAA40, 0xAA4D,
0xAA50, 0xAA59, 0xAA60, 0xAA76, 0xAA7A, 0xAAC2, 0xAADB, 0xAADD,
0xAAE0, 0xAAEF, 0xAAF2, 0xAAF6, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A,
0xAB5C, 0xAB69, 0xAB70, 0xABEA, 0xABEC, 0xABED, 0xABF0, 0xABF9,
0xAC00, 0xD7A3, 0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xF900, 0xFA6D,
0xFA70, 0xFAD9, 0xFB00, 0xFB06, 0xFB13, 0xFB17, 0xFB1D, 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, 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, 0x1034A, 0x10350, 0x1037A, 0x10380, 0x1039D, 0x103A0, 0x103C3,
0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 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, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, 0x10A15, 0x10A17,
0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A3F, 0x10A60, 0x10A7C,
0x10A80, 0x10A9C, 0x10AC0, 0x10AC7, 0x10AC9, 0x10AE6, 0x10B00, 0x10B35,
0x10B40, 0x10B55, 0x10B60, 0x10B72, 0x10B80, 0x10B91, 0x10C00, 0x10C48,
0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10D00, 0x10D27, 0x10D30, 0x10D39,
0x10E80, 0x10EA9, 0x10EAB, 0x10EAC, 0x10EB0, 0x10EB1, 0x10F00, 0x10F1C,
0x10F27, 0x10F27, 0x10F30, 0x10F50, 0x10F70, 0x10F85, 0x10FB0, 0x10FC4,
0x10FE0, 0x10FF6, 0x11000, 0x11046, 0x11066, 0x11075, 0x1107F, 0x110BA,
0x110C2, 0x110C2, 0x110D0, 0x110E8, 0x110F0, 0x110F9, 0x11100, 0x11134,
0x11136, 0x1113F, 0x11144, 0x11147, 0x11150, 0x11173, 0x11176, 0x11176,
0x11180, 0x111C4, 0x111C9, 0x111CC, 0x111CE, 0x111DA, 0x111DC, 0x111DC,
0x11200, 0x11211, 0x11213, 0x11237, 0x1123E, 0x1123E, 0x11280, 0x11286,
0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D, 0x1129F, 0x112A8,
0x112B0, 0x112EA, 0x112F0, 0x112F9, 0x11300, 0x11303, 0x11305, 0x1130C,
0x1130F, 0x11310, 0x11313, 0x11328, 0x1132A, 0x11330, 0x11332, 0x11333,
0x11335, 0x11339, 0x1133B, 0x11344, 0x11347, 0x11348, 0x1134B, 0x1134D,
0x11350, 0x11350, 0x11357, 0x11357, 0x1135D, 0x11363, 0x11366, 0x1136C,
0x11370, 0x11374, 0x11400, 0x1144A, 0x11450, 0x11459, 0x1145E, 0x11461,
0x11480, 0x114C5, 0x114C7, 0x114C7, 0x114D0, 0x114D9, 0x11580, 0x115B5,
0x115B8, 0x115C0, 0x115D8, 0x115DD, 0x11600, 0x11640, 0x11644, 0x11644,
0x11650, 0x11659, 0x11680, 0x116B8, 0x116C0, 0x116C9, 0x11700, 0x1171A,
0x1171D, 0x1172B, 0x11730, 0x11739, 0x11740, 0x11746, 0x11800, 0x1183A,
0x118A0, 0x118E9, 0x118FF, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913,
0x11915, 0x11916, 0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x11943,
0x11950, 0x11959, 0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119E1,
0x119E3, 0x119E4, 0x11A00, 0x11A3E, 0x11A47, 0x11A47, 0x11A50, 0x11A99,
0x11A9D, 0x11A9D, 0x11AB0, 0x11AF8, 0x11C00, 0x11C08, 0x11C0A, 0x11C36,
0x11C38, 0x11C40, 0x11C50, 0x11C59, 0x11C72, 0x11C8F, 0x11C92, 0x11CA7,
0x11CA9, 0x11CB6, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36,
0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59,
0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91,
0x11D93, 0x11D98, 0x11DA0, 0x11DA9, 0x11EE0, 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, 0x16B36, 0x16B40, 0x16B43, 0x16B50, 0x16B59,
0x16B63, 0x16B77, 0x16B7D, 0x16B8F, 0x16E40, 0x16E7F, 0x16F00, 0x16F4A,
0x16F4F, 0x16F87, 0x16F8F, 0x16F9F, 0x16FE0, 0x16FE1, 0x16FE3, 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, 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, 0x1DF1E, 0x1E000, 0x1E006, 0x1E008, 0x1E018,
0x1E01B, 0x1E021, 0x1E023, 0x1E024, 0x1E026, 0x1E02A, 0x1E100, 0x1E12C,
0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14E, 0x1E290, 0x1E2AE,
0x1E2C0, 0x1E2F9, 0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE,
0x1E7F0, 0x1E7FE, 0x1E800, 0x1E8C4, 0x1E8D0, 0x1E8D6, 0x1E900, 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,
// #91 (14675+655): bp=XID_Start:XIDS
0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00B5, 0x00B5,
0x00BA, 0x00BA, 0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02C1,
0x02C6, 0x02D1, 0x02E0, 0x02E4, 0x02EC, 0x02EC, 0x02EE, 0x02EE,
0x0370, 0x0374, 0x0376, 0x0377, 0x037B, 0x037D, 0x037F, 0x037F,
0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1,
0x03A3, 0x03F5, 0x03F7, 0x0481, 0x048A, 0x052F, 0x0531, 0x0556,
0x0559, 0x0559, 0x0560, 0x0588, 0x05D0, 0x05EA, 0x05EF, 0x05F2,
0x0620, 0x064A, 0x066E, 0x066F, 0x0671, 0x06D3, 0x06D5, 0x06D5,
0x06E5, 0x06E6, 0x06EE, 0x06EF, 0x06FA, 0x06FC, 0x06FF, 0x06FF,
0x0710, 0x0710, 0x0712, 0x072F, 0x074D, 0x07A5, 0x07B1, 0x07B1,
0x07CA, 0x07EA, 0x07F4, 0x07F5, 0x07FA, 0x07FA, 0x0800, 0x0815,
0x081A, 0x081A, 0x0824, 0x0824, 0x0828, 0x0828, 0x0840, 0x0858,
0x0860, 0x086A, 0x0870, 0x0887, 0x0889, 0x088E, 0x08A0, 0x08C9,
0x0904, 0x0939, 0x093D, 0x093D, 0x0950, 0x0950, 0x0958, 0x0961,
0x0971, 0x0980, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BD, 0x09BD,
0x09CE, 0x09CE, 0x09DC, 0x09DD, 0x09DF, 0x09E1, 0x09F0, 0x09F1,
0x09FC, 0x09FC, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A72, 0x0A74, 0x0A85, 0x0A8D,
0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
0x0AB5, 0x0AB9, 0x0ABD, 0x0ABD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE1,
0x0AF9, 0x0AF9, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3D, 0x0B3D,
0x0B5C, 0x0B5D, 0x0B5F, 0x0B61, 0x0B71, 0x0B71, 0x0B83, 0x0B83,
0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A,
0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA,
0x0BAE, 0x0BB9, 0x0BD0, 0x0BD0, 0x0C05, 0x0C0C, 0x0C0E, 0x0C10,
0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3D, 0x0C3D, 0x0C58, 0x0C5A,
0x0C5D, 0x0C5D, 0x0C60, 0x0C61, 0x0C80, 0x0C80, 0x0C85, 0x0C8C,
0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9,
0x0CBD, 0x0CBD, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE1, 0x0CF1, 0x0CF2,
0x0D04, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D3A, 0x0D3D, 0x0D3D,
0x0D4E, 0x0D4E, 0x0D54, 0x0D56, 0x0D5F, 0x0D61, 0x0D7A, 0x0D7F,
0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD,
0x0DC0, 0x0DC6, 0x0E01, 0x0E30, 0x0E32, 0x0E32, 0x0E40, 0x0E46,
0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3,
0x0EA5, 0x0EA5, 0x0EA7, 0x0EB0, 0x0EB2, 0x0EB2, 0x0EBD, 0x0EBD,
0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6, 0x0EDC, 0x0EDF, 0x0F00, 0x0F00,
0x0F40, 0x0F47, 0x0F49, 0x0F6C, 0x0F88, 0x0F8C, 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, 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, 0x16F8,
0x1700, 0x1711, 0x171F, 0x1731, 0x1740, 0x1751, 0x1760, 0x176C,
0x176E, 0x1770, 0x1780, 0x17B3, 0x17D7, 0x17D7, 0x17DC, 0x17DC,
0x1820, 0x1878, 0x1880, 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, 0x1C7D,
0x1C80, 0x1C88, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x1CE9, 0x1CEC,
0x1CEE, 0x1CF3, 0x1CF5, 0x1CF6, 0x1CFA, 0x1CFA, 0x1D00, 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, 0x211D, 0x2124, 0x2124,
0x2126, 0x2126, 0x2128, 0x2128, 0x212A, 0x2139, 0x213C, 0x213F,
0x2145, 0x2149, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C00, 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, 0x3007, 0x3021, 0x3029, 0x3031, 0x3035, 0x3038, 0x303C,
0x3041, 0x3096, 0x309D, 0x309F, 0x30A1, 0x30FA, 0x30FC, 0x30FF,
0x3105, 0x312F, 0x3131, 0x318E, 0x31A0, 0x31BF, 0x31F0, 0x31FF,
0x3400, 0x4DBF, 0x4E00, 0xA48C, 0xA4D0, 0xA4FD, 0xA500, 0xA60C,
0xA610, 0xA61F, 0xA62A, 0xA62B, 0xA640, 0xA66E, 0xA67F, 0xA69D,
0xA6A0, 0xA6EF, 0xA717, 0xA71F, 0xA722, 0xA788, 0xA78B, 0xA7CA,
0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 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, 0xA9EF, 0xA9FA, 0xA9FE,
0xAA00, 0xAA28, 0xAA40, 0xAA42, 0xAA44, 0xAA4B, 0xAA60, 0xAA76,
0xAA7A, 0xAA7A, 0xAA7E, 0xAAAF, 0xAAB1, 0xAAB1, 0xAAB5, 0xAAB6,
0xAAB9, 0xAABD, 0xAAC0, 0xAAC0, 0xAAC2, 0xAAC2, 0xAADB, 0xAADD,
0xAAE0, 0xAAEA, 0xAAF2, 0xAAF4, 0xAB01, 0xAB06, 0xAB09, 0xAB0E,
0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E, 0xAB30, 0xAB5A,
0xAB5C, 0xAB69, 0xAB70, 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, 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, 0x1034A, 0x10350, 0x10375, 0x10380, 0x1039D, 0x103A0, 0x103C3,
0x103C8, 0x103CF, 0x103D1, 0x103D5, 0x10400, 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, 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, 0x2F800, 0x2FA1D, 0x30000, 0x3134A,
// #92 (15330+3): sc=Adlam:Adlm
0x1E900, 0x1E94B, 0x1E950, 0x1E959, 0x1E95E, 0x1E95F,
// #93 (15333+3): sc=Ahom:Ahom scx=Ahom:Ahom
0x11700, 0x1171A, 0x1171D, 0x1172B, 0x11730, 0x11746,
// #94 (15336+1): sc=Anatolian_Hieroglyphs:Hluw scx=Anatolian_Hieroglyphs:Hluw
0x14400, 0x14646,
// #95 (15337+57): sc=Arabic:Arab
0x0600, 0x0604, 0x0606, 0x060B, 0x060D, 0x061A, 0x061C, 0x061E,
0x0620, 0x063F, 0x0641, 0x064A, 0x0656, 0x066F, 0x0671, 0x06DC,
0x06DE, 0x06FF, 0x0750, 0x077F, 0x0870, 0x088E, 0x0890, 0x0891,
0x0898, 0x08E1, 0x08E3, 0x08FF, 0xFB50, 0xFBC2, 0xFBD3, 0xFD3D,
0xFD40, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF, 0xFDF0, 0xFDFF,
0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x10E60, 0x10E7E, 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,
0x1EEF0, 0x1EEF1,
// #96 (15394+4): sc=Armenian:Armn scx=Armenian:Armn
0x0531, 0x0556, 0x0559, 0x058A, 0x058D, 0x058F, 0xFB13, 0xFB17,
// #97 (15398+2): sc=Avestan:Avst scx=Avestan:Avst
0x10B00, 0x10B35, 0x10B39, 0x10B3F,
// #98 (15400+2): sc=Balinese:Bali scx=Balinese:Bali
0x1B00, 0x1B4C, 0x1B50, 0x1B7E,
// #99 (15402+2): sc=Bamum:Bamu scx=Bamum:Bamu
0xA6A0, 0xA6F7, 0x16800, 0x16A38,
// #100 (15404+2): sc=Bassa_Vah:Bass scx=Bassa_Vah:Bass
0x16AD0, 0x16AED, 0x16AF0, 0x16AF5,
// #101 (15406+2): sc=Batak:Batk scx=Batak:Batk
0x1BC0, 0x1BF3, 0x1BFC, 0x1BFF,
// #102 (15408+14): sc=Bengali:Beng
0x0980, 0x0983, 0x0985, 0x098C, 0x098F, 0x0990, 0x0993, 0x09A8,
0x09AA, 0x09B0, 0x09B2, 0x09B2, 0x09B6, 0x09B9, 0x09BC, 0x09C4,
0x09C7, 0x09C8, 0x09CB, 0x09CE, 0x09D7, 0x09D7, 0x09DC, 0x09DD,
0x09DF, 0x09E3, 0x09E6, 0x09FE,
// #103 (15422+4): sc=Bhaiksuki:Bhks scx=Bhaiksuki:Bhks
0x11C00, 0x11C08, 0x11C0A, 0x11C36, 0x11C38, 0x11C45, 0x11C50, 0x11C6C,
// #104 (15426+3): sc=Bopomofo:Bopo
0x02EA, 0x02EB, 0x3105, 0x312F, 0x31A0, 0x31BF,
// #105 (15429+3): sc=Brahmi:Brah scx=Brahmi:Brah
0x11000, 0x1104D, 0x11052, 0x11075, 0x1107F, 0x1107F,
// #106 (15432+1): sc=Braille:Brai scx=Braille:Brai
0x2800, 0x28FF,
// #107 (15433+2): sc=Buginese:Bugi
0x1A00, 0x1A1B, 0x1A1E, 0x1A1F,
// #108 (15435+1): sc=Buhid:Buhd
0x1740, 0x1753,
// #109 (15436+3): sc=Canadian_Aboriginal:Cans scx=Canadian_Aboriginal:Cans
0x1400, 0x167F, 0x18B0, 0x18F5, 0x11AB0, 0x11ABF,
// #110 (15439+1): sc=Carian:Cari scx=Carian:Cari
0x102A0, 0x102D0,
// #111 (15440+2): sc=Caucasian_Albanian:Aghb scx=Caucasian_Albanian:Aghb
0x10530, 0x10563, 0x1056F, 0x1056F,
// #112 (15442+2): sc=Chakma:Cakm
0x11100, 0x11134, 0x11136, 0x11147,
// #113 (15444+4): sc=Cham:Cham scx=Cham:Cham
0xAA00, 0xAA36, 0xAA40, 0xAA4D, 0xAA50, 0xAA59, 0xAA5C, 0xAA5F,
// #114 (15448+3): sc=Cherokee:Cher scx=Cherokee:Cher
0x13A0, 0x13F5, 0x13F8, 0x13FD, 0xAB70, 0xABBF,
// #115 (15451+1): sc=Chorasmian:Chrs scx=Chorasmian:Chrs
0x10FB0, 0x10FCB,
// #116 (15452+174): sc=Common:Zyyy
0x0000, 0x0040, 0x005B, 0x0060, 0x007B, 0x00A9, 0x00AB, 0x00B9,
0x00BB, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x02B9, 0x02DF,
0x02E5, 0x02E9, 0x02EC, 0x02FF, 0x0374, 0x0374, 0x037E, 0x037E,
0x0385, 0x0385, 0x0387, 0x0387, 0x0605, 0x0605, 0x060C, 0x060C,
0x061B, 0x061B, 0x061F, 0x061F, 0x0640, 0x0640, 0x06DD, 0x06DD,
0x08E2, 0x08E2, 0x0964, 0x0965, 0x0E3F, 0x0E3F, 0x0FD5, 0x0FD8,
0x10FB, 0x10FB, 0x16EB, 0x16ED, 0x1735, 0x1736, 0x1802, 0x1803,
0x1805, 0x1805, 0x1CD3, 0x1CD3, 0x1CE1, 0x1CE1, 0x1CE9, 0x1CEC,
0x1CEE, 0x1CF3, 0x1CF5, 0x1CF7, 0x1CFA, 0x1CFA, 0x2000, 0x200B,
0x200E, 0x2064, 0x2066, 0x2070, 0x2074, 0x207E, 0x2080, 0x208E,
0x20A0, 0x20C0, 0x2100, 0x2125, 0x2127, 0x2129, 0x212C, 0x2131,
0x2133, 0x214D, 0x214F, 0x215F, 0x2189, 0x218B, 0x2190, 0x2426,
0x2440, 0x244A, 0x2460, 0x27FF, 0x2900, 0x2B73, 0x2B76, 0x2B95,
0x2B97, 0x2BFF, 0x2E00, 0x2E5D, 0x2FF0, 0x2FFB, 0x3000, 0x3004,
0x3006, 0x3006, 0x3008, 0x3020, 0x3030, 0x3037, 0x303C, 0x303F,
0x309B, 0x309C, 0x30A0, 0x30A0, 0x30FB, 0x30FC, 0x3190, 0x319F,
0x31C0, 0x31E3, 0x3220, 0x325F, 0x327F, 0x32CF, 0x32FF, 0x32FF,
0x3358, 0x33FF, 0x4DC0, 0x4DFF, 0xA700, 0xA721, 0xA788, 0xA78A,
0xA830, 0xA839, 0xA92E, 0xA92E, 0xA9CF, 0xA9CF, 0xAB5B, 0xAB5B,
0xAB6A, 0xAB6B, 0xFD3E, 0xFD3F, 0xFE10, 0xFE19, 0xFE30, 0xFE52,
0xFE54, 0xFE66, 0xFE68, 0xFE6B, 0xFEFF, 0xFEFF, 0xFF01, 0xFF20,
0xFF3B, 0xFF40, 0xFF5B, 0xFF65, 0xFF70, 0xFF70, 0xFF9E, 0xFF9F,
0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF9, 0xFFFD, 0x10100, 0x10102,
0x10107, 0x10133, 0x10137, 0x1013F, 0x10190, 0x1019C, 0x101D0, 0x101FC,
0x102E1, 0x102FB, 0x1BCA0, 0x1BCA3, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5,
0x1D100, 0x1D126, 0x1D129, 0x1D166, 0x1D16A, 0x1D17A, 0x1D183, 0x1D184,
0x1D18C, 0x1D1A9, 0x1D1AE, 0x1D1EA, 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356,
0x1D360, 0x1D378, 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, 0x1D7CB, 0x1D7CE, 0x1D7FF, 0x1EC71, 0x1ECB4, 0x1ED01, 0x1ED3D,
0x1F000, 0x1F02B, 0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF,
0x1F0C1, 0x1F0CF, 0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F1FF,
0x1F201, 0x1F202, 0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F250, 0x1F251,
0x1F260, 0x1F265, 0x1F300, 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, 0x1FB00, 0x1FB92, 0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9,
0xE0001, 0xE0001, 0xE0020, 0xE007F,
// #117 (15626+3): sc=Coptic:Copt:Qaac
0x03E2, 0x03EF, 0x2C80, 0x2CF3, 0x2CF9, 0x2CFF,
// #118 (15629+1): sc=Cypro_Minoan:Cpmn
0x12F90, 0x12FF2,
// #119 (15630+4): sc=Cuneiform:Xsux scx=Cuneiform:Xsux
0x12000, 0x12399, 0x12400, 0x1246E, 0x12470, 0x12474, 0x12480, 0x12543,
// #120 (15634+6): sc=Cypriot:Cprt
0x10800, 0x10805, 0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838,
0x1083C, 0x1083C, 0x1083F, 0x1083F,
// #121 (15640+8): sc=Cyrillic:Cyrl
0x0400, 0x0484, 0x0487, 0x052F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B,
0x1D78, 0x1D78, 0x2DE0, 0x2DFF, 0xA640, 0xA69F, 0xFE2E, 0xFE2F,
// #122 (15648+1): sc=Deseret:Dsrt scx=Deseret:Dsrt
0x10400, 0x1044F,
// #123 (15649+4): sc=Devanagari:Deva
0x0900, 0x0950, 0x0955, 0x0963, 0x0966, 0x097F, 0xA8E0, 0xA8FF,
// #124 (15653+8): sc=Dives_Akuru:Diak scx=Dives_Akuru:Diak
0x11900, 0x11906, 0x11909, 0x11909, 0x1190C, 0x11913, 0x11915, 0x11916,
0x11918, 0x11935, 0x11937, 0x11938, 0x1193B, 0x11946, 0x11950, 0x11959,
// #125 (15661+1): sc=Dogra:Dogr
0x11800, 0x1183B,
// #126 (15662+5): sc=Duployan:Dupl
0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99,
0x1BC9C, 0x1BC9F,
// #127 (15667+2): sc=Egyptian_Hieroglyphs:Egyp scx=Egyptian_Hieroglyphs:Egyp
0x13000, 0x1342E, 0x13430, 0x13438,
// #128 (15669+1): sc=Elbasan:Elba scx=Elbasan:Elba
0x10500, 0x10527,
// #129 (15670+1): sc=Elymaic:Elym scx=Elymaic:Elym
0x10FE0, 0x10FF6,
// #130 (15671+36): sc=Ethiopic:Ethi scx=Ethiopic:Ethi
0x1200, 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, 0x137C, 0x1380, 0x1399, 0x2D80, 0x2D96, 0x2DA0, 0x2DA6,
0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6,
0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 0x2DD8, 0x2DDE, 0xAB01, 0xAB06,
0xAB09, 0xAB0E, 0xAB11, 0xAB16, 0xAB20, 0xAB26, 0xAB28, 0xAB2E,
0x1E7E0, 0x1E7E6, 0x1E7E8, 0x1E7EB, 0x1E7ED, 0x1E7EE, 0x1E7F0, 0x1E7FE,
// #131 (15707+10): sc=Georgian:Geor
0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FA,
0x10FC, 0x10FF, 0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x2D00, 0x2D25,
0x2D27, 0x2D27, 0x2D2D, 0x2D2D,
// #132 (15717+6): sc=Glagolitic:Glag
0x2C00, 0x2C5F, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
0x1E023, 0x1E024, 0x1E026, 0x1E02A,
// #133 (15723+1): sc=Gothic:Goth scx=Gothic:Goth
0x10330, 0x1034A,
// #134 (15724+15): sc=Grantha:Gran
0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133C, 0x11344,
0x11347, 0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357,
0x1135D, 0x11363, 0x11366, 0x1136C, 0x11370, 0x11374,
// #135 (15739+36): sc=Greek:Grek
0x0370, 0x0373, 0x0375, 0x0377, 0x037A, 0x037D, 0x037F, 0x037F,
0x0384, 0x0384, 0x0386, 0x0386, 0x0388, 0x038A, 0x038C, 0x038C,
0x038E, 0x03A1, 0x03A3, 0x03E1, 0x03F0, 0x03FF, 0x1D26, 0x1D2A,
0x1D5D, 0x1D61, 0x1D66, 0x1D6A, 0x1DBF, 0x1DBF, 0x1F00, 0x1F15,
0x1F18, 0x1F1D, 0x1F20, 0x1F45, 0x1F48, 0x1F4D, 0x1F50, 0x1F57,
0x1F59, 0x1F59, 0x1F5B, 0x1F5B, 0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D,
0x1F80, 0x1FB4, 0x1FB6, 0x1FC4, 0x1FC6, 0x1FD3, 0x1FD6, 0x1FDB,
0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FFE, 0x2126, 0x2126,
0xAB65, 0xAB65, 0x10140, 0x1018E, 0x101A0, 0x101A0, 0x1D200, 0x1D245,
// #136 (15775+14): sc=Gujarati:Gujr
0x0A81, 0x0A83, 0x0A85, 0x0A8D, 0x0A8F, 0x0A91, 0x0A93, 0x0AA8,
0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3, 0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5,
0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD, 0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3,
0x0AE6, 0x0AF1, 0x0AF9, 0x0AFF,
// #137 (15789+6): sc=Gunjala_Gondi:Gong
0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E, 0x11D90, 0x11D91,
0x11D93, 0x11D98, 0x11DA0, 0x11DA9,
// #138 (15795+16): sc=Gurmukhi:Guru
0x0A01, 0x0A03, 0x0A05, 0x0A0A, 0x0A0F, 0x0A10, 0x0A13, 0x0A28,
0x0A2A, 0x0A30, 0x0A32, 0x0A33, 0x0A35, 0x0A36, 0x0A38, 0x0A39,
0x0A3C, 0x0A3C, 0x0A3E, 0x0A42, 0x0A47, 0x0A48, 0x0A4B, 0x0A4D,
0x0A51, 0x0A51, 0x0A59, 0x0A5C, 0x0A5E, 0x0A5E, 0x0A66, 0x0A76,
// #139 (15811+20): sc=Han:Hani
0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3005, 0x3005,
0x3007, 0x3007, 0x3021, 0x3029, 0x3038, 0x303B, 0x3400, 0x4DBF,
0x4E00, 0x9FFF, 0xF900, 0xFA6D, 0xFA70, 0xFAD9, 0x16FE2, 0x16FE3,
0x16FF0, 0x16FF1, 0x20000, 0x2A6DF, 0x2A700, 0x2B738, 0x2B740, 0x2B81D,
0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D, 0x30000, 0x3134A,
// #140 (15831+14): sc=Hangul:Hang
0x1100, 0x11FF, 0x302E, 0x302F, 0x3131, 0x318E, 0x3200, 0x321E,
0x3260, 0x327E, 0xA960, 0xA97C, 0xAC00, 0xD7A3, 0xD7B0, 0xD7C6,
0xD7CB, 0xD7FB, 0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF,
0xFFD2, 0xFFD7, 0xFFDA, 0xFFDC,
// #141 (15845+2): sc=Hanifi_Rohingya:Rohg
0x10D00, 0x10D27, 0x10D30, 0x10D39,
// #142 (15847+1): sc=Hanunoo:Hano
0x1720, 0x1734,
// #143 (15848+3): sc=Hatran:Hatr scx=Hatran:Hatr
0x108E0, 0x108F2, 0x108F4, 0x108F5, 0x108FB, 0x108FF,
// #144 (15851+9): sc=Hebrew:Hebr scx=Hebrew:Hebr
0x0591, 0x05C7, 0x05D0, 0x05EA, 0x05EF, 0x05F4, 0xFB1D, 0xFB36,
0xFB38, 0xFB3C, 0xFB3E, 0xFB3E, 0xFB40, 0xFB41, 0xFB43, 0xFB44,
0xFB46, 0xFB4F,
// #145 (15860+5): sc=Hiragana:Hira
0x3041, 0x3096, 0x309D, 0x309F, 0x1B001, 0x1B11F, 0x1B150, 0x1B152,
0x1F200, 0x1F200,
// #146 (15865+2): sc=Imperial_Aramaic:Armi scx=Imperial_Aramaic:Armi
0x10840, 0x10855, 0x10857, 0x1085F,
// #147 (15867+29): sc=Inherited:Zinh:Qaai
0x0300, 0x036F, 0x0485, 0x0486, 0x064B, 0x0655, 0x0670, 0x0670,
0x0951, 0x0954, 0x1AB0, 0x1ACE, 0x1CD0, 0x1CD2, 0x1CD4, 0x1CE0,
0x1CE2, 0x1CE8, 0x1CED, 0x1CED, 0x1CF4, 0x1CF4, 0x1CF8, 0x1CF9,
0x1DC0, 0x1DFF, 0x200C, 0x200D, 0x20D0, 0x20F0, 0x302A, 0x302D,
0x3099, 0x309A, 0xFE00, 0xFE0F, 0xFE20, 0xFE2D, 0x101FD, 0x101FD,
0x102E0, 0x102E0, 0x1133B, 0x1133B, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46,
0x1D167, 0x1D169, 0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD,
0xE0100, 0xE01EF,
// #148 (15896+2): sc=Inscriptional_Pahlavi:Phli scx=Inscriptional_Pahlavi:Phli
0x10B60, 0x10B72, 0x10B78, 0x10B7F,
// #149 (15898+2): sc=Inscriptional_Parthian:Prti scx=Inscriptional_Parthian:Prti
0x10B40, 0x10B55, 0x10B58, 0x10B5F,
// #150 (15900+3): sc=Javanese:Java
0xA980, 0xA9CD, 0xA9D0, 0xA9D9, 0xA9DE, 0xA9DF,
// #151 (15903+2): sc=Kaithi:Kthi
0x11080, 0x110C2, 0x110CD, 0x110CD,
// #152 (15905+13): sc=Kannada:Knda
0x0C80, 0x0C8C, 0x0C8E, 0x0C90, 0x0C92, 0x0CA8, 0x0CAA, 0x0CB3,
0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4, 0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD,
0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE, 0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF,
0x0CF1, 0x0CF2,
// #153 (15918+13): sc=Katakana:Kana
0x30A1, 0x30FA, 0x30FD, 0x30FF, 0x31F0, 0x31FF, 0x32D0, 0x32FE,
0x3300, 0x3357, 0xFF66, 0xFF6F, 0xFF71, 0xFF9D, 0x1AFF0, 0x1AFF3,
0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE, 0x1B000, 0x1B000, 0x1B120, 0x1B122,
0x1B164, 0x1B167,
// #154 (15931+2): sc=Kayah_Li:Kali
0xA900, 0xA92D, 0xA92F, 0xA92F,
// #155 (15933+8): sc=Kharoshthi:Khar scx=Kharoshthi:Khar
0x10A00, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A13, 0x10A15, 0x10A17,
0x10A19, 0x10A35, 0x10A38, 0x10A3A, 0x10A3F, 0x10A48, 0x10A50, 0x10A58,
// #156 (15941+2): sc=Khitan_Small_Script:Kits scx=Khitan_Small_Script:Kits
0x16FE4, 0x16FE4, 0x18B00, 0x18CD5,
// #157 (15943+4): sc=Khmer:Khmr scx=Khmer:Khmr
0x1780, 0x17DD, 0x17E0, 0x17E9, 0x17F0, 0x17F9, 0x19E0, 0x19FF,
// #158 (15947+2): sc=Khojki:Khoj
0x11200, 0x11211, 0x11213, 0x1123E,
// #159 (15949+2): sc=Khudawadi:Sind
0x112B0, 0x112EA, 0x112F0, 0x112F9,
// #160 (15951+11): sc=Lao:Laoo scx=Lao:Laoo
0x0E81, 0x0E82, 0x0E84, 0x0E84, 0x0E86, 0x0E8A, 0x0E8C, 0x0EA3,
0x0EA5, 0x0EA5, 0x0EA7, 0x0EBD, 0x0EC0, 0x0EC4, 0x0EC6, 0x0EC6,
0x0EC8, 0x0ECD, 0x0ED0, 0x0ED9, 0x0EDC, 0x0EDF,
// #161 (15962+38): sc=Latin:Latn
0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00BA, 0x00BA,
0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02B8, 0x02E0, 0x02E4,
0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77,
0x1D79, 0x1DBE, 0x1E00, 0x1EFF, 0x2071, 0x2071, 0x207F, 0x207F,
0x2090, 0x209C, 0x212A, 0x212B, 0x2132, 0x2132, 0x214E, 0x214E,
0x2160, 0x2188, 0x2C60, 0x2C7F, 0xA722, 0xA787, 0xA78B, 0xA7CA,
0xA7D0, 0xA7D1, 0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7FF,
0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06,
0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0,
0x107B2, 0x107BA, 0x1DF00, 0x1DF1E,
// #162 (16000+3): sc=Lepcha:Lepc scx=Lepcha:Lepc
0x1C00, 0x1C37, 0x1C3B, 0x1C49, 0x1C4D, 0x1C4F,
// #163 (16003+5): sc=Limbu:Limb
0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B, 0x1940, 0x1940,
0x1944, 0x194F,
// #164 (16008+3): sc=Linear_A:Lina
0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
// #165 (16011+7): sc=Linear_B:Linb
0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D,
0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA,
// #166 (16018+2): sc=Lisu:Lisu scx=Lisu:Lisu
0xA4D0, 0xA4FF, 0x11FB0, 0x11FB0,
// #167 (16020+1): sc=Lycian:Lyci scx=Lycian:Lyci
0x10280, 0x1029C,
// #168 (16021+2): sc=Lydian:Lydi scx=Lydian:Lydi
0x10920, 0x10939, 0x1093F, 0x1093F,
// #169 (16023+1): sc=Mahajani:Mahj
0x11150, 0x11176,
// #170 (16024+1): sc=Makasar:Maka scx=Makasar:Maka
0x11EE0, 0x11EF8,
// #171 (16025+7): sc=Malayalam:Mlym
0x0D00, 0x0D0C, 0x0D0E, 0x0D10, 0x0D12, 0x0D44, 0x0D46, 0x0D48,
0x0D4A, 0x0D4F, 0x0D54, 0x0D63, 0x0D66, 0x0D7F,
// #172 (16032+2): sc=Mandaic:Mand
0x0840, 0x085B, 0x085E, 0x085E,
// #173 (16034+2): sc=Manichaean:Mani
0x10AC0, 0x10AE6, 0x10AEB, 0x10AF6,
// #174 (16036+3): sc=Marchen:Marc scx=Marchen:Marc
0x11C70, 0x11C8F, 0x11C92, 0x11CA7, 0x11CA9, 0x11CB6,
// #175 (16039+7): sc=Masaram_Gondi:Gonm
0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36, 0x11D3A, 0x11D3A,
0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59,
// #176 (16046+1): sc=Medefaidrin:Medf scx=Medefaidrin:Medf
0x16E40, 0x16E9A,
// #177 (16047+3): sc=Meetei_Mayek:Mtei scx=Meetei_Mayek:Mtei
0xAAE0, 0xAAF6, 0xABC0, 0xABED, 0xABF0, 0xABF9,
// #178 (16050+2): sc=Mende_Kikakui:Mend scx=Mende_Kikakui:Mend
0x1E800, 0x1E8C4, 0x1E8C7, 0x1E8D6,
// #179 (16052+3): sc=Meroitic_Cursive:Merc scx=Meroitic_Cursive:Merc
0x109A0, 0x109B7, 0x109BC, 0x109CF, 0x109D2, 0x109FF,
// #180 (16055+1): sc=Meroitic_Hieroglyphs:Mero scx=Meroitic_Hieroglyphs:Mero
0x10980, 0x1099F,
// #181 (16056+3): sc=Miao:Plrd scx=Miao:Plrd
0x16F00, 0x16F4A, 0x16F4F, 0x16F87, 0x16F8F, 0x16F9F,
// #182 (16059+2): sc=Modi:Modi
0x11600, 0x11644, 0x11650, 0x11659,
// #183 (16061+6): sc=Mongolian:Mong
0x1800, 0x1801, 0x1804, 0x1804, 0x1806, 0x1819, 0x1820, 0x1878,
0x1880, 0x18AA, 0x11660, 0x1166C,
// #184 (16067+3): sc=Mro:Mroo scx=Mro:Mroo
0x16A40, 0x16A5E, 0x16A60, 0x16A69, 0x16A6E, 0x16A6F,
// #185 (16070+5): sc=Multani:Mult
0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D, 0x1128F, 0x1129D,
0x1129F, 0x112A9,
// #186 (16075+3): sc=Myanmar:Mymr
0x1000, 0x109F, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F,
// #187 (16078+2): sc=Nabataean:Nbat scx=Nabataean:Nbat
0x10880, 0x1089E, 0x108A7, 0x108AF,
// #188 (16080+3): sc=Nandinagari:Nand
0x119A0, 0x119A7, 0x119AA, 0x119D7, 0x119DA, 0x119E4,
// #189 (16083+4): sc=New_Tai_Lue:Talu scx=New_Tai_Lue:Talu
0x1980, 0x19AB, 0x19B0, 0x19C9, 0x19D0, 0x19DA, 0x19DE, 0x19DF,
// #190 (16087+2): sc=Newa:Newa scx=Newa:Newa
0x11400, 0x1145B, 0x1145D, 0x11461,
// #191 (16089+2): sc=Nko:Nkoo
0x07C0, 0x07FA, 0x07FD, 0x07FF,
// #192 (16091+2): sc=Nushu:Nshu scx=Nushu:Nshu
0x16FE1, 0x16FE1, 0x1B170, 0x1B2FB,
// #193 (16093+4): sc=Nyiakeng_Puachue_Hmong:Hmnp scx=Nyiakeng_Puachue_Hmong:Hmnp
0x1E100, 0x1E12C, 0x1E130, 0x1E13D, 0x1E140, 0x1E149, 0x1E14E, 0x1E14F,
// #194 (16097+1): sc=Ogham:Ogam scx=Ogham:Ogam
0x1680, 0x169C,
// #195 (16098+1): sc=Ol_Chiki:Olck scx=Ol_Chiki:Olck
0x1C50, 0x1C7F,
// #196 (16099+3): sc=Old_Hungarian:Hung scx=Old_Hungarian:Hung
0x10C80, 0x10CB2, 0x10CC0, 0x10CF2, 0x10CFA, 0x10CFF,
// #197 (16102+2): sc=Old_Italic:Ital scx=Old_Italic:Ital
0x10300, 0x10323, 0x1032D, 0x1032F,
// #198 (16104+1): sc=Old_North_Arabian:Narb scx=Old_North_Arabian:Narb
0x10A80, 0x10A9F,
// #199 (16105+1): sc=Old_Permic:Perm
0x10350, 0x1037A,
// #200 (16106+2): sc=Old_Persian:Xpeo scx=Old_Persian:Xpeo
0x103A0, 0x103C3, 0x103C8, 0x103D5,
// #201 (16108+1): sc=Old_Sogdian:Sogo scx=Old_Sogdian:Sogo
0x10F00, 0x10F27,
// #202 (16109+1): sc=Old_South_Arabian:Sarb scx=Old_South_Arabian:Sarb
0x10A60, 0x10A7F,
// #203 (16110+1): sc=Old_Turkic:Orkh scx=Old_Turkic:Orkh
0x10C00, 0x10C48,
// #204 (16111+1): sc=Old_Uyghur:Ougr
0x10F70, 0x10F89,
// #205 (16112+14): sc=Oriya:Orya
0x0B01, 0x0B03, 0x0B05, 0x0B0C, 0x0B0F, 0x0B10, 0x0B13, 0x0B28,
0x0B2A, 0x0B30, 0x0B32, 0x0B33, 0x0B35, 0x0B39, 0x0B3C, 0x0B44,
0x0B47, 0x0B48, 0x0B4B, 0x0B4D, 0x0B55, 0x0B57, 0x0B5C, 0x0B5D,
0x0B5F, 0x0B63, 0x0B66, 0x0B77,
// #206 (16126+2): sc=Osage:Osge scx=Osage:Osge
0x104B0, 0x104D3, 0x104D8, 0x104FB,
// #207 (16128+2): sc=Osmanya:Osma scx=Osmanya:Osma
0x10480, 0x1049D, 0x104A0, 0x104A9,
// #208 (16130+5): sc=Pahawh_Hmong:Hmng scx=Pahawh_Hmong:Hmng
0x16B00, 0x16B45, 0x16B50, 0x16B59, 0x16B5B, 0x16B61, 0x16B63, 0x16B77,
0x16B7D, 0x16B8F,
// #209 (16135+1): sc=Palmyrene:Palm scx=Palmyrene:Palm
0x10860, 0x1087F,
// #210 (16136+1): sc=Pau_Cin_Hau:Pauc scx=Pau_Cin_Hau:Pauc
0x11AC0, 0x11AF8,
// #211 (16137+1): sc=Phags_Pa:Phag
0xA840, 0xA877,
// #212 (16138+2): sc=Phoenician:Phnx scx=Phoenician:Phnx
0x10900, 0x1091B, 0x1091F, 0x1091F,
// #213 (16140+3): sc=Psalter_Pahlavi:Phlp
0x10B80, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF,
// #214 (16143+2): sc=Rejang:Rjng scx=Rejang:Rjng
0xA930, 0xA953, 0xA95F, 0xA95F,
// #215 (16145+2): sc=Runic:Runr scx=Runic:Runr
0x16A0, 0x16EA, 0x16EE, 0x16F8,
// #216 (16147+2): sc=Samaritan:Samr scx=Samaritan:Samr
0x0800, 0x082D, 0x0830, 0x083E,
// #217 (16149+2): sc=Saurashtra:Saur scx=Saurashtra:Saur
0xA880, 0xA8C5, 0xA8CE, 0xA8D9,
// #218 (16151+1): sc=Sharada:Shrd
0x11180, 0x111DF,
// #219 (16152+1): sc=Shavian:Shaw scx=Shavian:Shaw
0x10450, 0x1047F,
// #220 (16153+2): sc=Siddham:Sidd scx=Siddham:Sidd
0x11580, 0x115B5, 0x115B8, 0x115DD,
// #221 (16155+3): sc=SignWriting:Sgnw scx=SignWriting:Sgnw
0x1D800, 0x1DA8B, 0x1DA9B, 0x1DA9F, 0x1DAA1, 0x1DAAF,
// #222 (16158+13): sc=Sinhala:Sinh
0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1, 0x0DB3, 0x0DBB,
0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA, 0x0DCF, 0x0DD4,
0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF, 0x0DF2, 0x0DF4,
0x111E1, 0x111F4,
// #223 (16171+1): sc=Sogdian:Sogd
0x10F30, 0x10F59,
// #224 (16172+2): sc=Sora_Sompeng:Sora scx=Sora_Sompeng:Sora
0x110D0, 0x110E8, 0x110F0, 0x110F9,
// #225 (16174+1): sc=Soyombo:Soyo scx=Soyombo:Soyo
0x11A50, 0x11AA2,
// #226 (16175+2): sc=Sundanese:Sund scx=Sundanese:Sund
0x1B80, 0x1BBF, 0x1CC0, 0x1CC7,
// #227 (16177+1): sc=Syloti_Nagri:Sylo
0xA800, 0xA82C,
// #228 (16178+4): sc=Syriac:Syrc
0x0700, 0x070D, 0x070F, 0x074A, 0x074D, 0x074F, 0x0860, 0x086A,
// #229 (16182+2): sc=Tagalog:Tglg
0x1700, 0x1715, 0x171F, 0x171F,
// #230 (16184+3): sc=Tagbanwa:Tagb
0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
// #231 (16187+2): sc=Tai_Le:Tale
0x1950, 0x196D, 0x1970, 0x1974,
// #232 (16189+5): sc=Tai_Tham:Lana scx=Tai_Tham:Lana
0x1A20, 0x1A5E, 0x1A60, 0x1A7C, 0x1A7F, 0x1A89, 0x1A90, 0x1A99,
0x1AA0, 0x1AAD,
// #233 (16194+2): sc=Tai_Viet:Tavt scx=Tai_Viet:Tavt
0xAA80, 0xAAC2, 0xAADB, 0xAADF,
// #234 (16196+2): sc=Takri:Takr
0x11680, 0x116B9, 0x116C0, 0x116C9,
// #235 (16198+18): sc=Tamil:Taml
0x0B82, 0x0B83, 0x0B85, 0x0B8A, 0x0B8E, 0x0B90, 0x0B92, 0x0B95,
0x0B99, 0x0B9A, 0x0B9C, 0x0B9C, 0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4,
0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9, 0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8,
0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0, 0x0BD7, 0x0BD7, 0x0BE6, 0x0BFA,
0x11FC0, 0x11FF1, 0x11FFF, 0x11FFF,
// #236 (16216+2): sc=Tangsa:Tnsa scx=Tangsa:Tnsa
0x16A70, 0x16ABE, 0x16AC0, 0x16AC9,
// #237 (16218+4): sc=Tangut:Tang scx=Tangut:Tang
0x16FE0, 0x16FE0, 0x17000, 0x187F7, 0x18800, 0x18AFF, 0x18D00, 0x18D08,
// #238 (16222+13): sc=Telugu:Telu
0x0C00, 0x0C0C, 0x0C0E, 0x0C10, 0x0C12, 0x0C28, 0x0C2A, 0x0C39,
0x0C3C, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4D, 0x0C55, 0x0C56,
0x0C58, 0x0C5A, 0x0C5D, 0x0C5D, 0x0C60, 0x0C63, 0x0C66, 0x0C6F,
0x0C77, 0x0C7F,
// #239 (16235+1): sc=Thaana:Thaa
0x0780, 0x07B1,
// #240 (16236+2): sc=Thai:Thai scx=Thai:Thai
0x0E01, 0x0E3A, 0x0E40, 0x0E5B,
// #241 (16238+7): sc=Tibetan:Tibt scx=Tibetan:Tibt
0x0F00, 0x0F47, 0x0F49, 0x0F6C, 0x0F71, 0x0F97, 0x0F99, 0x0FBC,
0x0FBE, 0x0FCC, 0x0FCE, 0x0FD4, 0x0FD9, 0x0FDA,
// #242 (16245+3): sc=Tifinagh:Tfng scx=Tifinagh:Tfng
0x2D30, 0x2D67, 0x2D6F, 0x2D70, 0x2D7F, 0x2D7F,
// #243 (16248+2): sc=Tirhuta:Tirh
0x11480, 0x114C7, 0x114D0, 0x114D9,
// #244 (16250+1): sc=Toto scx=Toto
0x1E290, 0x1E2AE,
// #245 (16251+2): sc=Ugaritic:Ugar scx=Ugaritic:Ugar
0x10380, 0x1039D, 0x1039F, 0x1039F,
// #246 (16253+1): sc=Vai:Vaii scx=Vai:Vaii
0xA500, 0xA62B,
// #247 (16254+8): sc=Vithkuqi:Vith scx=Vithkuqi:Vith
0x10570, 0x1057A, 0x1057C, 0x1058A, 0x1058C, 0x10592, 0x10594, 0x10595,
0x10597, 0x105A1, 0x105A3, 0x105B1, 0x105B3, 0x105B9, 0x105BB, 0x105BC,
// #248 (16262+2): sc=Wancho:Wcho scx=Wancho:Wcho
0x1E2C0, 0x1E2F9, 0x1E2FF, 0x1E2FF,
// #249 (16264+2): sc=Warang_Citi:Wara scx=Warang_Citi:Wara
0x118A0, 0x118F2, 0x118FF, 0x118FF,
// #250 (16266+3): sc=Yezidi:Yezi
0x10E80, 0x10EA9, 0x10EAB, 0x10EAD, 0x10EB0, 0x10EB1,
// #251 (16269+2): sc=Yi:Yiii
0xA000, 0xA48C, 0xA490, 0xA4C6,
// #252 (16271+1): sc=Zanabazar_Square:Zanb scx=Zanabazar_Square:Zanb
0x11A00, 0x11A47,
// #253 (16272+5): scx=Adlam:Adlm
0x061F, 0x061F, 0x0640, 0x0640, 0x1E900, 0x1E94B, 0x1E950, 0x1E959,
0x1E95E, 0x1E95F,
// #254 (16277+51): scx=Arabic:Arab
0x0600, 0x0604, 0x0606, 0x06DC, 0x06DE, 0x06FF, 0x0750, 0x077F,
0x0870, 0x088E, 0x0890, 0x0891, 0x0898, 0x08E1, 0x08E3, 0x08FF,
0xFB50, 0xFBC2, 0xFBD3, 0xFD8F, 0xFD92, 0xFDC7, 0xFDCF, 0xFDCF,
0xFDF0, 0xFDFF, 0xFE70, 0xFE74, 0xFE76, 0xFEFC, 0x102E0, 0x102FB,
0x10E60, 0x10E7E, 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, 0x1EEF0, 0x1EEF1,
// #255 (16328+26): scx=Bengali:Beng
0x0951, 0x0952, 0x0964, 0x0965, 0x0980, 0x0983, 0x0985, 0x098C,
0x098F, 0x0990, 0x0993, 0x09A8, 0x09AA, 0x09B0, 0x09B2, 0x09B2,
0x09B6, 0x09B9, 0x09BC, 0x09C4, 0x09C7, 0x09C8, 0x09CB, 0x09CE,
0x09D7, 0x09D7, 0x09DC, 0x09DD, 0x09DF, 0x09E3, 0x09E6, 0x09FE,
0x1CD0, 0x1CD0, 0x1CD2, 0x1CD2, 0x1CD5, 0x1CD6, 0x1CD8, 0x1CD8,
0x1CE1, 0x1CE1, 0x1CEA, 0x1CEA, 0x1CED, 0x1CED, 0x1CF2, 0x1CF2,
0x1CF5, 0x1CF7, 0xA8F1, 0xA8F1,
// #256 (16354+12): scx=Bopomofo:Bopo
0x02EA, 0x02EB, 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F,
0x302A, 0x302D, 0x3030, 0x3030, 0x3037, 0x3037, 0x30FB, 0x30FB,
0x3105, 0x312F, 0x31A0, 0x31BF, 0xFE45, 0xFE46, 0xFF61, 0xFF65,
// #257 (16366+3): scx=Buginese:Bugi
0x1A00, 0x1A1B, 0x1A1E, 0x1A1F, 0xA9CF, 0xA9CF,
// #258 (16369+2): scx=Buhid:Buhd
0x1735, 0x1736, 0x1740, 0x1753,
// #259 (16371+4): scx=Chakma:Cakm
0x09E6, 0x09EF, 0x1040, 0x1049, 0x11100, 0x11134, 0x11136, 0x11147,
// #260 (16375+148): scx=Common:Zyyy
0x0000, 0x0040, 0x005B, 0x0060, 0x007B, 0x00A9, 0x00AB, 0x00B9,
0x00BB, 0x00BF, 0x00D7, 0x00D7, 0x00F7, 0x00F7, 0x02B9, 0x02DF,
0x02E5, 0x02E9, 0x02EC, 0x02FF, 0x0374, 0x0374, 0x037E, 0x037E,
0x0385, 0x0385, 0x0387, 0x0387, 0x0605, 0x0605, 0x06DD, 0x06DD,
0x08E2, 0x08E2, 0x0E3F, 0x0E3F, 0x0FD5, 0x0FD8, 0x16EB, 0x16ED,
0x2000, 0x200B, 0x200E, 0x202E, 0x2030, 0x2064, 0x2066, 0x2070,
0x2074, 0x207E, 0x2080, 0x208E, 0x20A0, 0x20C0, 0x2100, 0x2125,
0x2127, 0x2129, 0x212C, 0x2131, 0x2133, 0x214D, 0x214F, 0x215F,
0x2189, 0x218B, 0x2190, 0x2426, 0x2440, 0x244A, 0x2460, 0x27FF,
0x2900, 0x2B73, 0x2B76, 0x2B95, 0x2B97, 0x2BFF, 0x2E00, 0x2E42,
0x2E44, 0x2E5D, 0x2FF0, 0x2FFB, 0x3000, 0x3000, 0x3004, 0x3004,
0x3012, 0x3012, 0x3020, 0x3020, 0x3036, 0x3036, 0x3248, 0x325F,
0x327F, 0x327F, 0x32B1, 0x32BF, 0x32CC, 0x32CF, 0x3371, 0x337A,
0x3380, 0x33DF, 0x33FF, 0x33FF, 0x4DC0, 0x4DFF, 0xA708, 0xA721,
0xA788, 0xA78A, 0xAB5B, 0xAB5B, 0xAB6A, 0xAB6B, 0xFE10, 0xFE19,
0xFE30, 0xFE44, 0xFE47, 0xFE52, 0xFE54, 0xFE66, 0xFE68, 0xFE6B,
0xFEFF, 0xFEFF, 0xFF01, 0xFF20, 0xFF3B, 0xFF40, 0xFF5B, 0xFF60,
0xFFE0, 0xFFE6, 0xFFE8, 0xFFEE, 0xFFF9, 0xFFFD, 0x10190, 0x1019C,
0x101D0, 0x101FC, 0x1CF50, 0x1CFC3, 0x1D000, 0x1D0F5, 0x1D100, 0x1D126,
0x1D129, 0x1D166, 0x1D16A, 0x1D17A, 0x1D183, 0x1D184, 0x1D18C, 0x1D1A9,
0x1D1AE, 0x1D1EA, 0x1D2E0, 0x1D2F3, 0x1D300, 0x1D356, 0x1D372, 0x1D378,
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, 0x1D7CB,
0x1D7CE, 0x1D7FF, 0x1EC71, 0x1ECB4, 0x1ED01, 0x1ED3D, 0x1F000, 0x1F02B,
0x1F030, 0x1F093, 0x1F0A0, 0x1F0AE, 0x1F0B1, 0x1F0BF, 0x1F0C1, 0x1F0CF,
0x1F0D1, 0x1F0F5, 0x1F100, 0x1F1AD, 0x1F1E6, 0x1F1FF, 0x1F201, 0x1F202,
0x1F210, 0x1F23B, 0x1F240, 0x1F248, 0x1F260, 0x1F265, 0x1F300, 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, 0x1FB00, 0x1FB92,
0x1FB94, 0x1FBCA, 0x1FBF0, 0x1FBF9, 0xE0001, 0xE0001, 0xE0020, 0xE007F,
// #261 (16523+4): scx=Coptic:Copt:Qaac
0x03E2, 0x03EF, 0x2C80, 0x2CF3, 0x2CF9, 0x2CFF, 0x102E0, 0x102FB,
// #262 (16527+2): scx=Cypro_Minoan:Cpmn
0x10100, 0x10101, 0x12F90, 0x12FF2,
// #263 (16529+9): scx=Cypriot:Cprt
0x10100, 0x10102, 0x10107, 0x10133, 0x10137, 0x1013F, 0x10800, 0x10805,
0x10808, 0x10808, 0x1080A, 0x10835, 0x10837, 0x10838, 0x1083C, 0x1083C,
0x1083F, 0x1083F,
// #264 (16538+9): scx=Cyrillic:Cyrl
0x0400, 0x052F, 0x1C80, 0x1C88, 0x1D2B, 0x1D2B, 0x1D78, 0x1D78,
0x1DF8, 0x1DF8, 0x2DE0, 0x2DFF, 0x2E43, 0x2E43, 0xA640, 0xA69F,
0xFE2E, 0xFE2F,
// #265 (16547+7): scx=Devanagari:Deva
0x0900, 0x0952, 0x0955, 0x097F, 0x1CD0, 0x1CF6, 0x1CF8, 0x1CF9,
0x20F0, 0x20F0, 0xA830, 0xA839, 0xA8E0, 0xA8FF,
// #266 (16554+3): scx=Dogra:Dogr
0x0964, 0x096F, 0xA830, 0xA839, 0x11800, 0x1183B,
// #267 (16557+5): scx=Duployan:Dupl
0x1BC00, 0x1BC6A, 0x1BC70, 0x1BC7C, 0x1BC80, 0x1BC88, 0x1BC90, 0x1BC99,
0x1BC9C, 0x1BCA3,
// #268 (16562+9): scx=Georgian:Geor
0x10A0, 0x10C5, 0x10C7, 0x10C7, 0x10CD, 0x10CD, 0x10D0, 0x10FF,
0x1C90, 0x1CBA, 0x1CBD, 0x1CBF, 0x2D00, 0x2D25, 0x2D27, 0x2D27,
0x2D2D, 0x2D2D,
// #269 (16571+10): scx=Glagolitic:Glag
0x0484, 0x0484, 0x0487, 0x0487, 0x2C00, 0x2C5F, 0x2E43, 0x2E43,
0xA66F, 0xA66F, 0x1E000, 0x1E006, 0x1E008, 0x1E018, 0x1E01B, 0x1E021,
0x1E023, 0x1E024, 0x1E026, 0x1E02A,
// #270 (16581+25): scx=Grantha:Gran
0x0951, 0x0952, 0x0964, 0x0965, 0x0BE6, 0x0BF3, 0x1CD0, 0x1CD0,
0x1CD2, 0x1CD3, 0x1CF2, 0x1CF4, 0x1CF8, 0x1CF9, 0x20F0, 0x20F0,
0x11300, 0x11303, 0x11305, 0x1130C, 0x1130F, 0x11310, 0x11313, 0x11328,
0x1132A, 0x11330, 0x11332, 0x11333, 0x11335, 0x11339, 0x1133B, 0x11344,
0x11347, 0x11348, 0x1134B, 0x1134D, 0x11350, 0x11350, 0x11357, 0x11357,
0x1135D, 0x11363, 0x11366, 0x1136C, 0x11370, 0x11374, 0x11FD0, 0x11FD1,
0x11FD3, 0x11FD3,
// #271 (16606+38): scx=Greek:Grek
0x0342, 0x0342, 0x0345, 0x0345, 0x0370, 0x0373, 0x0375, 0x0377,
0x037A, 0x037D, 0x037F, 0x037F, 0x0384, 0x0384, 0x0386, 0x0386,
0x0388, 0x038A, 0x038C, 0x038C, 0x038E, 0x03A1, 0x03A3, 0x03E1,
0x03F0, 0x03FF, 0x1D26, 0x1D2A, 0x1D5D, 0x1D61, 0x1D66, 0x1D6A,
0x1DBF, 0x1DC1, 0x1F00, 0x1F15, 0x1F18, 0x1F1D, 0x1F20, 0x1F45,
0x1F48, 0x1F4D, 0x1F50, 0x1F57, 0x1F59, 0x1F59, 0x1F5B, 0x1F5B,
0x1F5D, 0x1F5D, 0x1F5F, 0x1F7D, 0x1F80, 0x1FB4, 0x1FB6, 0x1FC4,
0x1FC6, 0x1FD3, 0x1FD6, 0x1FDB, 0x1FDD, 0x1FEF, 0x1FF2, 0x1FF4,
0x1FF6, 0x1FFE, 0x2126, 0x2126, 0xAB65, 0xAB65, 0x10140, 0x1018E,
0x101A0, 0x101A0, 0x1D200, 0x1D245,
// #272 (16644+17): scx=Gujarati:Gujr
0x0951, 0x0952, 0x0964, 0x0965, 0x0A81, 0x0A83, 0x0A85, 0x0A8D,
0x0A8F, 0x0A91, 0x0A93, 0x0AA8, 0x0AAA, 0x0AB0, 0x0AB2, 0x0AB3,
0x0AB5, 0x0AB9, 0x0ABC, 0x0AC5, 0x0AC7, 0x0AC9, 0x0ACB, 0x0ACD,
0x0AD0, 0x0AD0, 0x0AE0, 0x0AE3, 0x0AE6, 0x0AF1, 0x0AF9, 0x0AFF,
0xA830, 0xA839,
// #273 (16661+7): scx=Gunjala_Gondi:Gong
0x0964, 0x0965, 0x11D60, 0x11D65, 0x11D67, 0x11D68, 0x11D6A, 0x11D8E,
0x11D90, 0x11D91, 0x11D93, 0x11D98, 0x11DA0, 0x11DA9,
// #274 (16668+19): scx=Gurmukhi:Guru
0x0951, 0x0952, 0x0964, 0x0965, 0x0A01, 0x0A03, 0x0A05, 0x0A0A,
0x0A0F, 0x0A10, 0x0A13, 0x0A28, 0x0A2A, 0x0A30, 0x0A32, 0x0A33,
0x0A35, 0x0A36, 0x0A38, 0x0A39, 0x0A3C, 0x0A3C, 0x0A3E, 0x0A42,
0x0A47, 0x0A48, 0x0A4B, 0x0A4D, 0x0A51, 0x0A51, 0x0A59, 0x0A5C,
0x0A5E, 0x0A5E, 0x0A66, 0x0A76, 0xA830, 0xA839,
// #275 (16687+37): scx=Han:Hani
0x2E80, 0x2E99, 0x2E9B, 0x2EF3, 0x2F00, 0x2FD5, 0x3001, 0x3003,
0x3005, 0x3011, 0x3013, 0x301F, 0x3021, 0x302D, 0x3030, 0x3030,
0x3037, 0x303F, 0x30FB, 0x30FB, 0x3190, 0x319F, 0x31C0, 0x31E3,
0x3220, 0x3247, 0x3280, 0x32B0, 0x32C0, 0x32CB, 0x32FF, 0x32FF,
0x3358, 0x3370, 0x337B, 0x337F, 0x33E0, 0x33FE, 0x3400, 0x4DBF,
0x4E00, 0x9FFF, 0xA700, 0xA707, 0xF900, 0xFA6D, 0xFA70, 0xFAD9,
0xFE45, 0xFE46, 0xFF61, 0xFF65, 0x16FE2, 0x16FE3, 0x16FF0, 0x16FF1,
0x1D360, 0x1D371, 0x1F250, 0x1F251, 0x20000, 0x2A6DF, 0x2A700, 0x2B738,
0x2B740, 0x2B81D, 0x2B820, 0x2CEA1, 0x2CEB0, 0x2EBE0, 0x2F800, 0x2FA1D,
0x30000, 0x3134A,
// #276 (16724+21): scx=Hangul:Hang
0x1100, 0x11FF, 0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F,
0x302E, 0x3030, 0x3037, 0x3037, 0x30FB, 0x30FB, 0x3131, 0x318E,
0x3200, 0x321E, 0x3260, 0x327E, 0xA960, 0xA97C, 0xAC00, 0xD7A3,
0xD7B0, 0xD7C6, 0xD7CB, 0xD7FB, 0xFE45, 0xFE46, 0xFF61, 0xFF65,
0xFFA0, 0xFFBE, 0xFFC2, 0xFFC7, 0xFFCA, 0xFFCF, 0xFFD2, 0xFFD7,
0xFFDA, 0xFFDC,
// #277 (16745+7): scx=Hanifi_Rohingya:Rohg
0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x0640, 0x0640,
0x06D4, 0x06D4, 0x10D00, 0x10D27, 0x10D30, 0x10D39,
// #278 (16752+1): scx=Hanunoo:Hano
0x1720, 0x1736,
// #279 (16753+16): scx=Hiragana:Hira
0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, 0x3030, 0x3035,
0x3037, 0x3037, 0x303C, 0x303D, 0x3041, 0x3096, 0x3099, 0x30A0,
0x30FB, 0x30FC, 0xFE45, 0xFE46, 0xFF61, 0xFF65, 0xFF70, 0xFF70,
0xFF9E, 0xFF9F, 0x1B001, 0x1B11F, 0x1B150, 0x1B152, 0x1F200, 0x1F200,
// #280 (16769+20): scx=Inherited:Zinh:Qaai
0x0300, 0x0341, 0x0343, 0x0344, 0x0346, 0x0362, 0x0953, 0x0954,
0x1AB0, 0x1ACE, 0x1DC2, 0x1DF7, 0x1DF9, 0x1DF9, 0x1DFB, 0x1DFF,
0x200C, 0x200D, 0x20D0, 0x20EF, 0xFE00, 0xFE0F, 0xFE20, 0xFE2D,
0x101FD, 0x101FD, 0x1CF00, 0x1CF2D, 0x1CF30, 0x1CF46, 0x1D167, 0x1D169,
0x1D17B, 0x1D182, 0x1D185, 0x1D18B, 0x1D1AA, 0x1D1AD, 0xE0100, 0xE01EF,
// #281 (16789+3): scx=Javanese:Java
0xA980, 0xA9CD, 0xA9CF, 0xA9D9, 0xA9DE, 0xA9DF,
// #282 (16792+4): scx=Kaithi:Kthi
0x0966, 0x096F, 0xA830, 0xA839, 0x11080, 0x110C2, 0x110CD, 0x110CD,
// #283 (16796+21): scx=Kannada:Knda
0x0951, 0x0952, 0x0964, 0x0965, 0x0C80, 0x0C8C, 0x0C8E, 0x0C90,
0x0C92, 0x0CA8, 0x0CAA, 0x0CB3, 0x0CB5, 0x0CB9, 0x0CBC, 0x0CC4,
0x0CC6, 0x0CC8, 0x0CCA, 0x0CCD, 0x0CD5, 0x0CD6, 0x0CDD, 0x0CDE,
0x0CE0, 0x0CE3, 0x0CE6, 0x0CEF, 0x0CF1, 0x0CF2, 0x1CD0, 0x1CD0,
0x1CD2, 0x1CD2, 0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2, 0x1CF4, 0x1CF4,
0xA830, 0xA835,
// #284 (16817+19): scx=Katakana:Kana
0x3001, 0x3003, 0x3008, 0x3011, 0x3013, 0x301F, 0x3030, 0x3035,
0x3037, 0x3037, 0x303C, 0x303D, 0x3099, 0x309C, 0x30A0, 0x30FF,
0x31F0, 0x31FF, 0x32D0, 0x32FE, 0x3300, 0x3357, 0xFE45, 0xFE46,
0xFF61, 0xFF9F, 0x1AFF0, 0x1AFF3, 0x1AFF5, 0x1AFFB, 0x1AFFD, 0x1AFFE,
0x1B000, 0x1B000, 0x1B120, 0x1B122, 0x1B164, 0x1B167,
// #285 (16836+1): scx=Kayah_Li:Kali
0xA900, 0xA92F,
// #286 (16837+4): scx=Khojki:Khoj
0x0AE6, 0x0AEF, 0xA830, 0xA839, 0x11200, 0x11211, 0x11213, 0x1123E,
// #287 (16841+4): scx=Khudawadi:Sind
0x0964, 0x0965, 0xA830, 0xA839, 0x112B0, 0x112EA, 0x112F0, 0x112F9,
// #288 (16845+46): scx=Latin:Latn
0x0041, 0x005A, 0x0061, 0x007A, 0x00AA, 0x00AA, 0x00BA, 0x00BA,
0x00C0, 0x00D6, 0x00D8, 0x00F6, 0x00F8, 0x02B8, 0x02E0, 0x02E4,
0x0363, 0x036F, 0x0485, 0x0486, 0x0951, 0x0952, 0x10FB, 0x10FB,
0x1D00, 0x1D25, 0x1D2C, 0x1D5C, 0x1D62, 0x1D65, 0x1D6B, 0x1D77,
0x1D79, 0x1DBE, 0x1E00, 0x1EFF, 0x202F, 0x202F, 0x2071, 0x2071,
0x207F, 0x207F, 0x2090, 0x209C, 0x20F0, 0x20F0, 0x212A, 0x212B,
0x2132, 0x2132, 0x214E, 0x214E, 0x2160, 0x2188, 0x2C60, 0x2C7F,
0xA700, 0xA707, 0xA722, 0xA787, 0xA78B, 0xA7CA, 0xA7D0, 0xA7D1,
0xA7D3, 0xA7D3, 0xA7D5, 0xA7D9, 0xA7F2, 0xA7FF, 0xA92E, 0xA92E,
0xAB30, 0xAB5A, 0xAB5C, 0xAB64, 0xAB66, 0xAB69, 0xFB00, 0xFB06,
0xFF21, 0xFF3A, 0xFF41, 0xFF5A, 0x10780, 0x10785, 0x10787, 0x107B0,
0x107B2, 0x107BA, 0x1DF00, 0x1DF1E,
// #289 (16891+6): scx=Limbu:Limb
0x0965, 0x0965, 0x1900, 0x191E, 0x1920, 0x192B, 0x1930, 0x193B,
0x1940, 0x1940, 0x1944, 0x194F,
// #290 (16897+4): scx=Linear_A:Lina
0x10107, 0x10133, 0x10600, 0x10736, 0x10740, 0x10755, 0x10760, 0x10767,
// #291 (16901+10): scx=Linear_B:Linb
0x10000, 0x1000B, 0x1000D, 0x10026, 0x10028, 0x1003A, 0x1003C, 0x1003D,
0x1003F, 0x1004D, 0x10050, 0x1005D, 0x10080, 0x100FA, 0x10100, 0x10102,
0x10107, 0x10133, 0x10137, 0x1013F,
// #292 (16911+3): scx=Mahajani:Mahj
0x0964, 0x096F, 0xA830, 0xA839, 0x11150, 0x11176,
// #293 (16914+11): scx=Malayalam:Mlym
0x0951, 0x0952, 0x0964, 0x0965, 0x0D00, 0x0D0C, 0x0D0E, 0x0D10,
0x0D12, 0x0D44, 0x0D46, 0x0D48, 0x0D4A, 0x0D4F, 0x0D54, 0x0D63,
0x0D66, 0x0D7F, 0x1CDA, 0x1CDA, 0xA830, 0xA832,
// #294 (16925+3): scx=Mandaic:Mand
0x0640, 0x0640, 0x0840, 0x085B, 0x085E, 0x085E,
// #295 (16928+3): scx=Manichaean:Mani
0x0640, 0x0640, 0x10AC0, 0x10AE6, 0x10AEB, 0x10AF6,
// #296 (16931+8): scx=Masaram_Gondi:Gonm
0x0964, 0x0965, 0x11D00, 0x11D06, 0x11D08, 0x11D09, 0x11D0B, 0x11D36,
0x11D3A, 0x11D3A, 0x11D3C, 0x11D3D, 0x11D3F, 0x11D47, 0x11D50, 0x11D59,
// #297 (16939+3): scx=Modi:Modi
0xA830, 0xA839, 0x11600, 0x11644, 0x11650, 0x11659,
// #298 (16942+5): scx=Mongolian:Mong
0x1800, 0x1819, 0x1820, 0x1878, 0x1880, 0x18AA, 0x202F, 0x202F,
0x11660, 0x1166C,
// #299 (16947+6): scx=Multani:Mult
0x0A66, 0x0A6F, 0x11280, 0x11286, 0x11288, 0x11288, 0x1128A, 0x1128D,
0x1128F, 0x1129D, 0x1129F, 0x112A9,
// #300 (16953+4): scx=Myanmar:Mymr
0x1000, 0x109F, 0xA92E, 0xA92E, 0xA9E0, 0xA9FE, 0xAA60, 0xAA7F,
// #301 (16957+9): scx=Nandinagari:Nand
0x0964, 0x0965, 0x0CE6, 0x0CEF, 0x1CE9, 0x1CE9, 0x1CF2, 0x1CF2,
0x1CFA, 0x1CFA, 0xA830, 0xA835, 0x119A0, 0x119A7, 0x119AA, 0x119D7,
0x119DA, 0x119E4,
// #302 (16966+6): scx=Nko:Nkoo
0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x07C0, 0x07FA,
0x07FD, 0x07FF, 0xFD3E, 0xFD3F,
// #303 (16972+2): scx=Old_Permic:Perm
0x0483, 0x0483, 0x10350, 0x1037A,
// #304 (16974+3): scx=Old_Uyghur:Ougr
0x0640, 0x0640, 0x10AF2, 0x10AF2, 0x10F70, 0x10F89,
// #305 (16977+18): scx=Oriya:Orya
0x0951, 0x0952, 0x0964, 0x0965, 0x0B01, 0x0B03, 0x0B05, 0x0B0C,
0x0B0F, 0x0B10, 0x0B13, 0x0B28, 0x0B2A, 0x0B30, 0x0B32, 0x0B33,
0x0B35, 0x0B39, 0x0B3C, 0x0B44, 0x0B47, 0x0B48, 0x0B4B, 0x0B4D,
0x0B55, 0x0B57, 0x0B5C, 0x0B5D, 0x0B5F, 0x0B63, 0x0B66, 0x0B77,
0x1CDA, 0x1CDA, 0x1CF2, 0x1CF2,
// #306 (16995+3): scx=Phags_Pa:Phag
0x1802, 0x1803, 0x1805, 0x1805, 0xA840, 0xA877,
// #307 (16998+4): scx=Psalter_Pahlavi:Phlp
0x0640, 0x0640, 0x10B80, 0x10B91, 0x10B99, 0x10B9C, 0x10BA9, 0x10BAF,
// #308 (17002+6): scx=Sharada:Shrd
0x0951, 0x0951, 0x1CD7, 0x1CD7, 0x1CD9, 0x1CD9, 0x1CDC, 0x1CDD,
0x1CE0, 0x1CE0, 0x11180, 0x111DF,
// #309 (17008+14): scx=Sinhala:Sinh
0x0964, 0x0965, 0x0D81, 0x0D83, 0x0D85, 0x0D96, 0x0D9A, 0x0DB1,
0x0DB3, 0x0DBB, 0x0DBD, 0x0DBD, 0x0DC0, 0x0DC6, 0x0DCA, 0x0DCA,
0x0DCF, 0x0DD4, 0x0DD6, 0x0DD6, 0x0DD8, 0x0DDF, 0x0DE6, 0x0DEF,
0x0DF2, 0x0DF4, 0x111E1, 0x111F4,
// #310 (17022+2): scx=Sogdian:Sogd
0x0640, 0x0640, 0x10F30, 0x10F59,
// #311 (17024+3): scx=Syloti_Nagri:Sylo
0x0964, 0x0965, 0x09E6, 0x09EF, 0xA800, 0xA82C,
// #312 (17027+12): scx=Syriac:Syrc
0x060C, 0x060C, 0x061B, 0x061C, 0x061F, 0x061F, 0x0640, 0x0640,
0x064B, 0x0655, 0x0670, 0x0670, 0x0700, 0x070D, 0x070F, 0x074A,
0x074D, 0x074F, 0x0860, 0x086A, 0x1DF8, 0x1DF8, 0x1DFA, 0x1DFA,
// #313 (17039+3): scx=Tagalog:Tglg
0x1700, 0x1715, 0x171F, 0x171F, 0x1735, 0x1736,
// #314 (17042+4): scx=Tagbanwa:Tagb
0x1735, 0x1736, 0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773,
// #315 (17046+3): scx=Tai_Le:Tale
0x1040, 0x1049, 0x1950, 0x196D, 0x1970, 0x1974,
// #316 (17049+4): scx=Takri:Takr
0x0964, 0x0965, 0xA830, 0xA839, 0x11680, 0x116B9, 0x116C0, 0x116C9,
// #317 (17053+25): scx=Tamil:Taml
0x0951, 0x0952, 0x0964, 0x0965, 0x0B82, 0x0B83, 0x0B85, 0x0B8A,
0x0B8E, 0x0B90, 0x0B92, 0x0B95, 0x0B99, 0x0B9A, 0x0B9C, 0x0B9C,
0x0B9E, 0x0B9F, 0x0BA3, 0x0BA4, 0x0BA8, 0x0BAA, 0x0BAE, 0x0BB9,
0x0BBE, 0x0BC2, 0x0BC6, 0x0BC8, 0x0BCA, 0x0BCD, 0x0BD0, 0x0BD0,
0x0BD7, 0x0BD7, 0x0BE6, 0x0BFA, 0x1CDA, 0x1CDA, 0xA8F3, 0xA8F3,
0x11301, 0x11301, 0x11303, 0x11303, 0x1133B, 0x1133C, 0x11FC0, 0x11FF1,
0x11FFF, 0x11FFF,
// #318 (17078+17): scx=Telugu:Telu
0x0951, 0x0952, 0x0964, 0x0965, 0x0C00, 0x0C0C, 0x0C0E, 0x0C10,
0x0C12, 0x0C28, 0x0C2A, 0x0C39, 0x0C3C, 0x0C44, 0x0C46, 0x0C48,
0x0C4A, 0x0C4D, 0x0C55, 0x0C56, 0x0C58, 0x0C5A, 0x0C5D, 0x0C5D,
0x0C60, 0x0C63, 0x0C66, 0x0C6F, 0x0C77, 0x0C7F, 0x1CDA, 0x1CDA,
0x1CF2, 0x1CF2,
// #319 (17095+7): scx=Thaana:Thaa
0x060C, 0x060C, 0x061B, 0x061C, 0x061F, 0x061F, 0x0660, 0x0669,
0x0780, 0x07B1, 0xFDF2, 0xFDF2, 0xFDFD, 0xFDFD,
// #320 (17102+6): scx=Tirhuta:Tirh
0x0951, 0x0952, 0x0964, 0x0965, 0x1CF2, 0x1CF2, 0xA830, 0xA839,
0x11480, 0x114C7, 0x114D0, 0x114D9,
// #321 (17108+7): scx=Yezidi:Yezi
0x060C, 0x060C, 0x061B, 0x061B, 0x061F, 0x061F, 0x0660, 0x0669,
0x10E80, 0x10EA9, 0x10EAB, 0x10EAD, 0x10EB0, 0x10EB1,
// #322 (17115+7): scx=Yi:Yiii
0x3001, 0x3002, 0x3008, 0x3011, 0x3014, 0x301B, 0x30FB, 0x30FB,
0xA000, 0xA48C, 0xA490, 0xA4C6, 0xFF61, 0xFF65
};
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
const T5 unicode_property_data<T1, T2, T3, T4, T5, T6>::rangenumbertable[] =
{
{ ptype::unknown, "*", 0 }, // #0
{ ptype::general_category, "Other:C", 1 }, // #1
{ ptype::general_category, "Control:Cc:cntrl", 2 }, // #2
{ ptype::general_category, "Format:Cf", 3 }, // #3
{ ptype::general_category, "Unassigned:Cn", 4 }, // #4
{ ptype::general_category, "Private_Use:Co", 5 }, // #5
{ ptype::general_category, "Surrogate:Cs", 6 }, // #6
{ ptype::general_category, "Letter:L", 7 }, // #7
{ ptype::general_category, "Cased_Letter:LC", 8 }, // #8
{ ptype::general_category, "Lowercase_Letter:Ll", 9 }, // #9
{ ptype::general_category, "Titlecase_Letter:Lt", 10 }, // #10
{ ptype::general_category, "Uppercase_Letter:Lu", 11 }, // #11
{ ptype::general_category, "Modifier_Letter:Lm", 12 }, // #12
{ ptype::general_category, "Other_Letter:Lo", 13 }, // #13
{ ptype::general_category, "Mark:M:Combining_Mark", 14 }, // #14
{ ptype::general_category, "Spacing_Mark:Mc", 15 }, // #15
{ ptype::general_category, "Enclosing_Mark:Me", 16 }, // #16
{ ptype::general_category, "Nonspacing_Mark:Mn", 17 }, // #17
{ ptype::general_category, "Number:N", 18 }, // #18
{ ptype::general_category, "Decimal_Number:Nd:digit", 19 }, // #19
{ ptype::general_category, "Letter_Number:Nl", 20 }, // #20
{ ptype::general_category, "Other_Number:No", 21 }, // #21
{ ptype::general_category, "Punctuation:P:punct", 22 }, // #22
{ ptype::general_category, "Connector_Punctuation:Pc", 23 }, // #23
{ ptype::general_category, "Dash_Punctuation:Pd", 24 }, // #24
{ ptype::general_category, "Close_Punctuation:Pe", 25 }, // #25
{ ptype::general_category, "Final_Punctuation:Pf", 26 }, // #26
{ ptype::general_category, "Initial_Punctuation:Pi", 27 }, // #27
{ ptype::general_category, "Other_Punctuation:Po", 28 }, // #28
{ ptype::general_category, "Open_Punctuation:Ps", 29 }, // #29
{ ptype::general_category, "Symbol:S", 30 }, // #30
{ ptype::general_category, "Currency_Symbol:Sc", 31 }, // #31
{ ptype::general_category, "Modifier_Symbol:Sk", 32 }, // #32
{ ptype::general_category, "Math_Symbol:Sm", 33 }, // #33
{ ptype::general_category, "Other_Symbol:So", 34 }, // #34
{ ptype::general_category, "Separator:Z", 35 }, // #35
{ ptype::general_category, "Line_Separator:Zl", 36 }, // #36
{ ptype::general_category, "Paragraph_Separator:Zp", 37 }, // #37
{ ptype::general_category, "Space_Separator:Zs", 38 }, // #38
{ ptype::binary, "ASCII", 39 }, // #39
{ ptype::binary, "ASCII_Hex_Digit:AHex", 40 }, // #40
{ ptype::binary, "Alphabetic:Alpha", 41 }, // #41
{ ptype::binary, "Any", 42 }, // #42
{ ptype::binary, "Assigned", 43 }, // #43
{ ptype::binary, "Bidi_Control:Bidi_C", 44 }, // #44
{ ptype::binary, "Bidi_Mirrored:Bidi_M", 45 }, // #45
{ ptype::binary, "Case_Ignorable:CI", 46 }, // #46
{ ptype::binary, "Cased", 47 }, // #47
{ ptype::binary, "Changes_When_Casefolded:CWCF", 48 }, // #48
{ ptype::binary, "Changes_When_Casemapped:CWCM", 49 }, // #49
{ ptype::binary, "Changes_When_Lowercased:CWL", 50 }, // #50
{ ptype::binary, "Changes_When_NFKC_Casefolded:CWKCF", 51 }, // #51
{ ptype::binary, "Changes_When_Titlecased:CWT", 52 }, // #52
{ ptype::binary, "Changes_When_Uppercased:CWU", 53 }, // #53
{ ptype::binary, "Dash", 54 }, // #54
{ ptype::binary, "Default_Ignorable_Code_Point:DI", 55 }, // #55
{ ptype::binary, "Deprecated:Dep", 56 }, // #56
{ ptype::binary, "Diacritic:Dia", 57 }, // #57
{ ptype::binary, "Emoji", 58 }, // #58
{ ptype::binary, "Emoji_Component:EComp", 59 }, // #59
{ ptype::binary, "Emoji_Modifier:EMod", 60 }, // #60
{ ptype::binary, "Emoji_Modifier_Base:EBase", 61 }, // #61
{ ptype::binary, "Emoji_Presentation:EPres", 62 }, // #62
{ ptype::binary, "Extended_Pictographic:ExtPict", 63 }, // #63
{ ptype::binary, "Extender:Ext", 64 }, // #64
{ ptype::binary, "Grapheme_Base:Gr_Base", 65 }, // #65
{ ptype::binary, "Grapheme_Extend:Gr_Ext", 66 }, // #66
{ ptype::binary, "Hex_Digit:Hex", 67 }, // #67
{ ptype::binary, "IDS_Binary_Operator:IDSB", 68 }, // #68
{ ptype::binary, "IDS_Trinary_Operator:IDST", 69 }, // #69
{ ptype::binary, "ID_Continue:IDC", 70 }, // #70
{ ptype::binary, "ID_Start:IDS", 71 }, // #71
{ ptype::binary, "Ideographic:Ideo", 72 }, // #72
{ ptype::binary, "Join_Control:Join_C", 73 }, // #73
{ ptype::binary, "Logical_Order_Exception:LOE", 74 }, // #74
{ ptype::binary, "Lowercase:Lower", 75 }, // #75
{ ptype::binary, "Math", 76 }, // #76
{ ptype::binary, "Noncharacter_Code_Point:NChar", 77 }, // #77
{ ptype::binary, "Pattern_Syntax:Pat_Syn", 78 }, // #78
{ ptype::binary, "Pattern_White_Space:Pat_WS", 79 }, // #79
{ ptype::binary, "Quotation_Mark:QMark", 80 }, // #80
{ ptype::binary, "Radical", 81 }, // #81
{ ptype::binary, "Regional_Indicator:RI", 82 }, // #82
{ ptype::binary, "Sentence_Terminal:STerm", 83 }, // #83
{ ptype::binary, "Soft_Dotted:SD", 84 }, // #84
{ ptype::binary, "Terminal_Punctuation:Term", 85 }, // #85
{ ptype::binary, "Unified_Ideograph:UIdeo", 86 }, // #86
{ ptype::binary, "Uppercase:Upper", 87 }, // #87
{ ptype::binary, "Variation_Selector:VS", 88 }, // #88
{ ptype::binary, "White_Space:space", 89 }, // #89
{ ptype::binary, "XID_Continue:XIDC", 90 }, // #90
{ ptype::binary, "XID_Start:XIDS", 91 }, // #91
{ ptype::script, "Adlam:Adlm", 92 }, // #92
{ ptype::script, "Ahom:Ahom", 93 }, // #93
{ ptype::script, "Anatolian_Hieroglyphs:Hluw", 94 }, // #94
{ ptype::script, "Arabic:Arab", 95 }, // #95
{ ptype::script, "Armenian:Armn", 96 }, // #96
{ ptype::script, "Avestan:Avst", 97 }, // #97
{ ptype::script, "Balinese:Bali", 98 }, // #98
{ ptype::script, "Bamum:Bamu", 99 }, // #99
{ ptype::script, "Bassa_Vah:Bass", 100 }, // #100
{ ptype::script, "Batak:Batk", 101 }, // #101
{ ptype::script, "Bengali:Beng", 102 }, // #102
{ ptype::script, "Bhaiksuki:Bhks", 103 }, // #103
{ ptype::script, "Bopomofo:Bopo", 104 }, // #104
{ ptype::script, "Brahmi:Brah", 105 }, // #105
{ ptype::script, "Braille:Brai", 106 }, // #106
{ ptype::script, "Buginese:Bugi", 107 }, // #107
{ ptype::script, "Buhid:Buhd", 108 }, // #108
{ ptype::script, "Canadian_Aboriginal:Cans", 109 }, // #109
{ ptype::script, "Carian:Cari", 110 }, // #110
{ ptype::script, "Caucasian_Albanian:Aghb", 111 }, // #111
{ ptype::script, "Chakma:Cakm", 112 }, // #112
{ ptype::script, "Cham:Cham", 113 }, // #113
{ ptype::script, "Cherokee:Cher", 114 }, // #114
{ ptype::script, "Chorasmian:Chrs", 115 }, // #115
{ ptype::script, "Common:Zyyy", 116 }, // #116
{ ptype::script, "Coptic:Copt:Qaac", 117 }, // #117
{ ptype::script, "Cypro_Minoan:Cpmn", 118 }, // #118
{ ptype::script, "Cuneiform:Xsux", 119 }, // #119
{ ptype::script, "Cypriot:Cprt", 120 }, // #120
{ ptype::script, "Cyrillic:Cyrl", 121 }, // #121
{ ptype::script, "Deseret:Dsrt", 122 }, // #122
{ ptype::script, "Devanagari:Deva", 123 }, // #123
{ ptype::script, "Dives_Akuru:Diak", 124 }, // #124
{ ptype::script, "Dogra:Dogr", 125 }, // #125
{ ptype::script, "Duployan:Dupl", 126 }, // #126
{ ptype::script, "Egyptian_Hieroglyphs:Egyp", 127 }, // #127
{ ptype::script, "Elbasan:Elba", 128 }, // #128
{ ptype::script, "Elymaic:Elym", 129 }, // #129
{ ptype::script, "Ethiopic:Ethi", 130 }, // #130
{ ptype::script, "Georgian:Geor", 131 }, // #131
{ ptype::script, "Glagolitic:Glag", 132 }, // #132
{ ptype::script, "Gothic:Goth", 133 }, // #133
{ ptype::script, "Grantha:Gran", 134 }, // #134
{ ptype::script, "Greek:Grek", 135 }, // #135
{ ptype::script, "Gujarati:Gujr", 136 }, // #136
{ ptype::script, "Gunjala_Gondi:Gong", 137 }, // #137
{ ptype::script, "Gurmukhi:Guru", 138 }, // #138
{ ptype::script, "Han:Hani", 139 }, // #139
{ ptype::script, "Hangul:Hang", 140 }, // #140
{ ptype::script, "Hanifi_Rohingya:Rohg", 141 }, // #141
{ ptype::script, "Hanunoo:Hano", 142 }, // #142
{ ptype::script, "Hatran:Hatr", 143 }, // #143
{ ptype::script, "Hebrew:Hebr", 144 }, // #144
{ ptype::script, "Hiragana:Hira", 145 }, // #145
{ ptype::script, "Imperial_Aramaic:Armi", 146 }, // #146
{ ptype::script, "Inherited:Zinh:Qaai", 147 }, // #147
{ ptype::script, "Inscriptional_Pahlavi:Phli", 148 }, // #148
{ ptype::script, "Inscriptional_Parthian:Prti", 149 }, // #149
{ ptype::script, "Javanese:Java", 150 }, // #150
{ ptype::script, "Kaithi:Kthi", 151 }, // #151
{ ptype::script, "Kannada:Knda", 152 }, // #152
{ ptype::script, "Katakana:Kana", 153 }, // #153
{ ptype::script, "Kayah_Li:Kali", 154 }, // #154
{ ptype::script, "Kharoshthi:Khar", 155 }, // #155
{ ptype::script, "Khitan_Small_Script:Kits", 156 }, // #156
{ ptype::script, "Khmer:Khmr", 157 }, // #157
{ ptype::script, "Khojki:Khoj", 158 }, // #158
{ ptype::script, "Khudawadi:Sind", 159 }, // #159
{ ptype::script, "Lao:Laoo", 160 }, // #160
{ ptype::script, "Latin:Latn", 161 }, // #161
{ ptype::script, "Lepcha:Lepc", 162 }, // #162
{ ptype::script, "Limbu:Limb", 163 }, // #163
{ ptype::script, "Linear_A:Lina", 164 }, // #164
{ ptype::script, "Linear_B:Linb", 165 }, // #165
{ ptype::script, "Lisu:Lisu", 166 }, // #166
{ ptype::script, "Lycian:Lyci", 167 }, // #167
{ ptype::script, "Lydian:Lydi", 168 }, // #168
{ ptype::script, "Mahajani:Mahj", 169 }, // #169
{ ptype::script, "Makasar:Maka", 170 }, // #170
{ ptype::script, "Malayalam:Mlym", 171 }, // #171
{ ptype::script, "Mandaic:Mand", 172 }, // #172
{ ptype::script, "Manichaean:Mani", 173 }, // #173
{ ptype::script, "Marchen:Marc", 174 }, // #174
{ ptype::script, "Masaram_Gondi:Gonm", 175 }, // #175
{ ptype::script, "Medefaidrin:Medf", 176 }, // #176
{ ptype::script, "Meetei_Mayek:Mtei", 177 }, // #177
{ ptype::script, "Mende_Kikakui:Mend", 178 }, // #178
{ ptype::script, "Meroitic_Cursive:Merc", 179 }, // #179
{ ptype::script, "Meroitic_Hieroglyphs:Mero", 180 }, // #180
{ ptype::script, "Miao:Plrd", 181 }, // #181
{ ptype::script, "Modi:Modi", 182 }, // #182
{ ptype::script, "Mongolian:Mong", 183 }, // #183
{ ptype::script, "Mro:Mroo", 184 }, // #184
{ ptype::script, "Multani:Mult", 185 }, // #185
{ ptype::script, "Myanmar:Mymr", 186 }, // #186
{ ptype::script, "Nabataean:Nbat", 187 }, // #187
{ ptype::script, "Nandinagari:Nand", 188 }, // #188
{ ptype::script, "New_Tai_Lue:Talu", 189 }, // #189
{ ptype::script, "Newa:Newa", 190 }, // #190
{ ptype::script, "Nko:Nkoo", 191 }, // #191
{ ptype::script, "Nushu:Nshu", 192 }, // #192
{ ptype::script, "Nyiakeng_Puachue_Hmong:Hmnp", 193 }, // #193
{ ptype::script, "Ogham:Ogam", 194 }, // #194
{ ptype::script, "Ol_Chiki:Olck", 195 }, // #195
{ ptype::script, "Old_Hungarian:Hung", 196 }, // #196
{ ptype::script, "Old_Italic:Ital", 197 }, // #197
{ ptype::script, "Old_North_Arabian:Narb", 198 }, // #198
{ ptype::script, "Old_Permic:Perm", 199 }, // #199
{ ptype::script, "Old_Persian:Xpeo", 200 }, // #200
{ ptype::script, "Old_Sogdian:Sogo", 201 }, // #201
{ ptype::script, "Old_South_Arabian:Sarb", 202 }, // #202
{ ptype::script, "Old_Turkic:Orkh", 203 }, // #203
{ ptype::script, "Old_Uyghur:Ougr", 204 }, // #204
{ ptype::script, "Oriya:Orya", 205 }, // #205
{ ptype::script, "Osage:Osge", 206 }, // #206
{ ptype::script, "Osmanya:Osma", 207 }, // #207
{ ptype::script, "Pahawh_Hmong:Hmng", 208 }, // #208
{ ptype::script, "Palmyrene:Palm", 209 }, // #209
{ ptype::script, "Pau_Cin_Hau:Pauc", 210 }, // #210
{ ptype::script, "Phags_Pa:Phag", 211 }, // #211
{ ptype::script, "Phoenician:Phnx", 212 }, // #212
{ ptype::script, "Psalter_Pahlavi:Phlp", 213 }, // #213
{ ptype::script, "Rejang:Rjng", 214 }, // #214
{ ptype::script, "Runic:Runr", 215 }, // #215
{ ptype::script, "Samaritan:Samr", 216 }, // #216
{ ptype::script, "Saurashtra:Saur", 217 }, // #217
{ ptype::script, "Sharada:Shrd", 218 }, // #218
{ ptype::script, "Shavian:Shaw", 219 }, // #219
{ ptype::script, "Siddham:Sidd", 220 }, // #220
{ ptype::script, "SignWriting:Sgnw", 221 }, // #221
{ ptype::script, "Sinhala:Sinh", 222 }, // #222
{ ptype::script, "Sogdian:Sogd", 223 }, // #223
{ ptype::script, "Sora_Sompeng:Sora", 224 }, // #224
{ ptype::script, "Soyombo:Soyo", 225 }, // #225
{ ptype::script, "Sundanese:Sund", 226 }, // #226
{ ptype::script, "Syloti_Nagri:Sylo", 227 }, // #227
{ ptype::script, "Syriac:Syrc", 228 }, // #228
{ ptype::script, "Tagalog:Tglg", 229 }, // #229
{ ptype::script, "Tagbanwa:Tagb", 230 }, // #230
{ ptype::script, "Tai_Le:Tale", 231 }, // #231
{ ptype::script, "Tai_Tham:Lana", 232 }, // #232
{ ptype::script, "Tai_Viet:Tavt", 233 }, // #233
{ ptype::script, "Takri:Takr", 234 }, // #234
{ ptype::script, "Tamil:Taml", 235 }, // #235
{ ptype::script, "Tangsa:Tnsa", 236 }, // #236
{ ptype::script, "Tangut:Tang", 237 }, // #237
{ ptype::script, "Telugu:Telu", 238 }, // #238
{ ptype::script, "Thaana:Thaa", 239 }, // #239
{ ptype::script, "Thai:Thai", 240 }, // #240
{ ptype::script, "Tibetan:Tibt", 241 }, // #241
{ ptype::script, "Tifinagh:Tfng", 242 }, // #242
{ ptype::script, "Tirhuta:Tirh", 243 }, // #243
{ ptype::script, "Toto", 244 }, // #244
{ ptype::script, "Ugaritic:Ugar", 245 }, // #245
{ ptype::script, "Vai:Vaii", 246 }, // #246
{ ptype::script, "Vithkuqi:Vith", 247 }, // #247
{ ptype::script, "Wancho:Wcho", 248 }, // #248
{ ptype::script, "Warang_Citi:Wara", 249 }, // #249
{ ptype::script, "Yezidi:Yezi", 250 }, // #250
{ ptype::script, "Yi:Yiii", 251 }, // #251
{ ptype::script, "Zanabazar_Square:Zanb", 252 }, // #252
{ ptype::script_extensions, "Adlam:Adlm", 253 }, // #253
{ ptype::script_extensions, "Ahom:Ahom", 93 }, // #254
{ ptype::script_extensions, "Anatolian_Hieroglyphs:Hluw", 94 }, // #255
{ ptype::script_extensions, "Arabic:Arab", 254 }, // #256
{ ptype::script_extensions, "Armenian:Armn", 96 }, // #257
{ ptype::script_extensions, "Avestan:Avst", 97 }, // #258
{ ptype::script_extensions, "Balinese:Bali", 98 }, // #259
{ ptype::script_extensions, "Bamum:Bamu", 99 }, // #260
{ ptype::script_extensions, "Bassa_Vah:Bass", 100 }, // #261
{ ptype::script_extensions, "Batak:Batk", 101 }, // #262
{ ptype::script_extensions, "Bengali:Beng", 255 }, // #263
{ ptype::script_extensions, "Bhaiksuki:Bhks", 103 }, // #264
{ ptype::script_extensions, "Bopomofo:Bopo", 256 }, // #265
{ ptype::script_extensions, "Brahmi:Brah", 105 }, // #266
{ ptype::script_extensions, "Braille:Brai", 106 }, // #267
{ ptype::script_extensions, "Buginese:Bugi", 257 }, // #268
{ ptype::script_extensions, "Buhid:Buhd", 258 }, // #269
{ ptype::script_extensions, "Canadian_Aboriginal:Cans", 109 }, // #270
{ ptype::script_extensions, "Carian:Cari", 110 }, // #271
{ ptype::script_extensions, "Caucasian_Albanian:Aghb", 111 }, // #272
{ ptype::script_extensions, "Chakma:Cakm", 259 }, // #273
{ ptype::script_extensions, "Cham:Cham", 113 }, // #274
{ ptype::script_extensions, "Cherokee:Cher", 114 }, // #275
{ ptype::script_extensions, "Chorasmian:Chrs", 115 }, // #276
{ ptype::script_extensions, "Common:Zyyy", 260 }, // #277
{ ptype::script_extensions, "Coptic:Copt:Qaac", 261 }, // #278
{ ptype::script_extensions, "Cypro_Minoan:Cpmn", 262 }, // #279
{ ptype::script_extensions, "Cuneiform:Xsux", 119 }, // #280
{ ptype::script_extensions, "Cypriot:Cprt", 263 }, // #281
{ ptype::script_extensions, "Cyrillic:Cyrl", 264 }, // #282
{ ptype::script_extensions, "Deseret:Dsrt", 122 }, // #283
{ ptype::script_extensions, "Devanagari:Deva", 265 }, // #284
{ ptype::script_extensions, "Dives_Akuru:Diak", 124 }, // #285
{ ptype::script_extensions, "Dogra:Dogr", 266 }, // #286
{ ptype::script_extensions, "Duployan:Dupl", 267 }, // #287
{ ptype::script_extensions, "Egyptian_Hieroglyphs:Egyp", 127 }, // #288
{ ptype::script_extensions, "Elbasan:Elba", 128 }, // #289
{ ptype::script_extensions, "Elymaic:Elym", 129 }, // #290
{ ptype::script_extensions, "Ethiopic:Ethi", 130 }, // #291
{ ptype::script_extensions, "Georgian:Geor", 268 }, // #292
{ ptype::script_extensions, "Glagolitic:Glag", 269 }, // #293
{ ptype::script_extensions, "Gothic:Goth", 133 }, // #294
{ ptype::script_extensions, "Grantha:Gran", 270 }, // #295
{ ptype::script_extensions, "Greek:Grek", 271 }, // #296
{ ptype::script_extensions, "Gujarati:Gujr", 272 }, // #297
{ ptype::script_extensions, "Gunjala_Gondi:Gong", 273 }, // #298
{ ptype::script_extensions, "Gurmukhi:Guru", 274 }, // #299
{ ptype::script_extensions, "Han:Hani", 275 }, // #300
{ ptype::script_extensions, "Hangul:Hang", 276 }, // #301
{ ptype::script_extensions, "Hanifi_Rohingya:Rohg", 277 }, // #302
{ ptype::script_extensions, "Hanunoo:Hano", 278 }, // #303
{ ptype::script_extensions, "Hatran:Hatr", 143 }, // #304
{ ptype::script_extensions, "Hebrew:Hebr", 144 }, // #305
{ ptype::script_extensions, "Hiragana:Hira", 279 }, // #306
{ ptype::script_extensions, "Imperial_Aramaic:Armi", 146 }, // #307
{ ptype::script_extensions, "Inherited:Zinh:Qaai", 280 }, // #308
{ ptype::script_extensions, "Inscriptional_Pahlavi:Phli", 148 }, // #309
{ ptype::script_extensions, "Inscriptional_Parthian:Prti", 149 }, // #310
{ ptype::script_extensions, "Javanese:Java", 281 }, // #311
{ ptype::script_extensions, "Kaithi:Kthi", 282 }, // #312
{ ptype::script_extensions, "Kannada:Knda", 283 }, // #313
{ ptype::script_extensions, "Katakana:Kana", 284 }, // #314
{ ptype::script_extensions, "Kayah_Li:Kali", 285 }, // #315
{ ptype::script_extensions, "Kharoshthi:Khar", 155 }, // #316
{ ptype::script_extensions, "Khitan_Small_Script:Kits", 156 }, // #317
{ ptype::script_extensions, "Khmer:Khmr", 157 }, // #318
{ ptype::script_extensions, "Khojki:Khoj", 286 }, // #319
{ ptype::script_extensions, "Khudawadi:Sind", 287 }, // #320
{ ptype::script_extensions, "Lao:Laoo", 160 }, // #321
{ ptype::script_extensions, "Latin:Latn", 288 }, // #322
{ ptype::script_extensions, "Lepcha:Lepc", 162 }, // #323
{ ptype::script_extensions, "Limbu:Limb", 289 }, // #324
{ ptype::script_extensions, "Linear_A:Lina", 290 }, // #325
{ ptype::script_extensions, "Linear_B:Linb", 291 }, // #326
{ ptype::script_extensions, "Lisu:Lisu", 166 }, // #327
{ ptype::script_extensions, "Lycian:Lyci", 167 }, // #328
{ ptype::script_extensions, "Lydian:Lydi", 168 }, // #329
{ ptype::script_extensions, "Mahajani:Mahj", 292 }, // #330
{ ptype::script_extensions, "Makasar:Maka", 170 }, // #331
{ ptype::script_extensions, "Malayalam:Mlym", 293 }, // #332
{ ptype::script_extensions, "Mandaic:Mand", 294 }, // #333
{ ptype::script_extensions, "Manichaean:Mani", 295 }, // #334
{ ptype::script_extensions, "Marchen:Marc", 174 }, // #335
{ ptype::script_extensions, "Masaram_Gondi:Gonm", 296 }, // #336
{ ptype::script_extensions, "Medefaidrin:Medf", 176 }, // #337
{ ptype::script_extensions, "Meetei_Mayek:Mtei", 177 }, // #338
{ ptype::script_extensions, "Mende_Kikakui:Mend", 178 }, // #339
{ ptype::script_extensions, "Meroitic_Cursive:Merc", 179 }, // #340
{ ptype::script_extensions, "Meroitic_Hieroglyphs:Mero", 180 }, // #341
{ ptype::script_extensions, "Miao:Plrd", 181 }, // #342
{ ptype::script_extensions, "Modi:Modi", 297 }, // #343
{ ptype::script_extensions, "Mongolian:Mong", 298 }, // #344
{ ptype::script_extensions, "Mro:Mroo", 184 }, // #345
{ ptype::script_extensions, "Multani:Mult", 299 }, // #346
{ ptype::script_extensions, "Myanmar:Mymr", 300 }, // #347
{ ptype::script_extensions, "Nabataean:Nbat", 187 }, // #348
{ ptype::script_extensions, "Nandinagari:Nand", 301 }, // #349
{ ptype::script_extensions, "New_Tai_Lue:Talu", 189 }, // #350
{ ptype::script_extensions, "Newa:Newa", 190 }, // #351
{ ptype::script_extensions, "Nko:Nkoo", 302 }, // #352
{ ptype::script_extensions, "Nushu:Nshu", 192 }, // #353
{ ptype::script_extensions, "Nyiakeng_Puachue_Hmong:Hmnp", 193 }, // #354
{ ptype::script_extensions, "Ogham:Ogam", 194 }, // #355
{ ptype::script_extensions, "Ol_Chiki:Olck", 195 }, // #356
{ ptype::script_extensions, "Old_Hungarian:Hung", 196 }, // #357
{ ptype::script_extensions, "Old_Italic:Ital", 197 }, // #358
{ ptype::script_extensions, "Old_North_Arabian:Narb", 198 }, // #359
{ ptype::script_extensions, "Old_Permic:Perm", 303 }, // #360
{ ptype::script_extensions, "Old_Persian:Xpeo", 200 }, // #361
{ ptype::script_extensions, "Old_Sogdian:Sogo", 201 }, // #362
{ ptype::script_extensions, "Old_South_Arabian:Sarb", 202 }, // #363
{ ptype::script_extensions, "Old_Turkic:Orkh", 203 }, // #364
{ ptype::script_extensions, "Old_Uyghur:Ougr", 304 }, // #365
{ ptype::script_extensions, "Oriya:Orya", 305 }, // #366
{ ptype::script_extensions, "Osage:Osge", 206 }, // #367
{ ptype::script_extensions, "Osmanya:Osma", 207 }, // #368
{ ptype::script_extensions, "Pahawh_Hmong:Hmng", 208 }, // #369
{ ptype::script_extensions, "Palmyrene:Palm", 209 }, // #370
{ ptype::script_extensions, "Pau_Cin_Hau:Pauc", 210 }, // #371
{ ptype::script_extensions, "Phags_Pa:Phag", 306 }, // #372
{ ptype::script_extensions, "Phoenician:Phnx", 212 }, // #373
{ ptype::script_extensions, "Psalter_Pahlavi:Phlp", 307 }, // #374
{ ptype::script_extensions, "Rejang:Rjng", 214 }, // #375
{ ptype::script_extensions, "Runic:Runr", 215 }, // #376
{ ptype::script_extensions, "Samaritan:Samr", 216 }, // #377
{ ptype::script_extensions, "Saurashtra:Saur", 217 }, // #378
{ ptype::script_extensions, "Sharada:Shrd", 308 }, // #379
{ ptype::script_extensions, "Shavian:Shaw", 219 }, // #380
{ ptype::script_extensions, "Siddham:Sidd", 220 }, // #381
{ ptype::script_extensions, "SignWriting:Sgnw", 221 }, // #382
{ ptype::script_extensions, "Sinhala:Sinh", 309 }, // #383
{ ptype::script_extensions, "Sogdian:Sogd", 310 }, // #384
{ ptype::script_extensions, "Sora_Sompeng:Sora", 224 }, // #385
{ ptype::script_extensions, "Soyombo:Soyo", 225 }, // #386
{ ptype::script_extensions, "Sundanese:Sund", 226 }, // #387
{ ptype::script_extensions, "Syloti_Nagri:Sylo", 311 }, // #388
{ ptype::script_extensions, "Syriac:Syrc", 312 }, // #389
{ ptype::script_extensions, "Tagalog:Tglg", 313 }, // #390
{ ptype::script_extensions, "Tagbanwa:Tagb", 314 }, // #391
{ ptype::script_extensions, "Tai_Le:Tale", 315 }, // #392
{ ptype::script_extensions, "Tai_Tham:Lana", 232 }, // #393
{ ptype::script_extensions, "Tai_Viet:Tavt", 233 }, // #394
{ ptype::script_extensions, "Takri:Takr", 316 }, // #395
{ ptype::script_extensions, "Tamil:Taml", 317 }, // #396
{ ptype::script_extensions, "Tangsa:Tnsa", 236 }, // #397
{ ptype::script_extensions, "Tangut:Tang", 237 }, // #398
{ ptype::script_extensions, "Telugu:Telu", 318 }, // #399
{ ptype::script_extensions, "Thaana:Thaa", 319 }, // #400
{ ptype::script_extensions, "Thai:Thai", 240 }, // #401
{ ptype::script_extensions, "Tibetan:Tibt", 241 }, // #402
{ ptype::script_extensions, "Tifinagh:Tfng", 242 }, // #403
{ ptype::script_extensions, "Tirhuta:Tirh", 320 }, // #404
{ ptype::script_extensions, "Toto", 244 }, // #405
{ ptype::script_extensions, "Ugaritic:Ugar", 245 }, // #406
{ ptype::script_extensions, "Vai:Vaii", 246 }, // #407
{ ptype::script_extensions, "Vithkuqi:Vith", 247 }, // #408
{ ptype::script_extensions, "Wancho:Wcho", 248 }, // #409
{ ptype::script_extensions, "Warang_Citi:Wara", 249 }, // #410
{ ptype::script_extensions, "Yezidi:Yezi", 321 }, // #411
{ ptype::script_extensions, "Yi:Yiii", 322 }, // #412
{ ptype::script_extensions, "Zanabazar_Square:Zanb", 252 }, // #413
{ ptype::unknown, "", 0 }
};
template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
const T6 unicode_property_data<T1, T2, T3, T4, T5, T6>::positiontable[] =
{
{ 0, 0 }, // #0 unknown
{ 0, 725 }, // #1 gc=Other:C
{ 0, 2 }, // #2 gc=Control:Cc:cntrl
{ 2, 21 }, // #3 gc=Format:Cf
{ 23, 698 }, // #4 gc=Unassigned:Cn
{ 721, 3 }, // #5 gc=Private_Use:Co
{ 724, 1 }, // #6 gc=Surrogate:Cs
{ 725, 1883 }, // #7 gc=Letter:L
{ 725, 1313 }, // #8 gc=Cased_Letter:LC
{ 725, 657 }, // #9 gc=Lowercase_Letter:Ll
{ 1382, 10 }, // #10 gc=Titlecase_Letter:Lt
{ 1392, 646 }, // #11 gc=Uppercase_Letter:Lu
{ 2038, 69 }, // #12 gc=Modifier_Letter:Lm
{ 2107, 501 }, // #13 gc=Other_Letter:Lo
{ 2608, 518 }, // #14 gc=Mark:M:Combining_Mark
{ 2608, 177 }, // #15 gc=Spacing_Mark:Mc
{ 2785, 5 }, // #16 gc=Enclosing_Mark:Me
{ 2790, 336 }, // #17 gc=Nonspacing_Mark:Mn
{ 3126, 145 }, // #18 gc=Number:N
{ 3126, 62 }, // #19 gc=Decimal_Number:Nd:digit
{ 3188, 12 }, // #20 gc=Letter_Number:Nl
{ 3200, 71 }, // #21 gc=Other_Number:No
{ 3271, 386 }, // #22 gc=Punctuation:P:punct
{ 3271, 6 }, // #23 gc=Connector_Punctuation:Pc
{ 3277, 19 }, // #24 gc=Dash_Punctuation:Pd
{ 3296, 76 }, // #25 gc=Close_Punctuation:Pe
{ 3372, 10 }, // #26 gc=Final_Punctuation:Pf
{ 3382, 11 }, // #27 gc=Initial_Punctuation:Pi
{ 3393, 185 }, // #28 gc=Other_Punctuation:Po
{ 3578, 79 }, // #29 gc=Open_Punctuation:Ps
{ 3657, 302 }, // #30 gc=Symbol:S
{ 3657, 21 }, // #31 gc=Currency_Symbol:Sc
{ 3678, 31 }, // #32 gc=Modifier_Symbol:Sk
{ 3709, 64 }, // #33 gc=Math_Symbol:Sm
{ 3773, 186 }, // #34 gc=Other_Symbol:So
{ 3959, 9 }, // #35 gc=Separator:Z
{ 3959, 1 }, // #36 gc=Line_Separator:Zl
{ 3960, 1 }, // #37 gc=Paragraph_Separator:Zp
{ 3961, 7 }, // #38 gc=Space_Separator:Zs
{ 3968, 1 }, // #39 bp=ASCII
{ 3969, 3 }, // #40 bp=ASCII_Hex_Digit:AHex
{ 3972, 722 }, // #41 bp=Alphabetic:Alpha
{ 4694, 1 }, // #42 bp=Any
{ 4695, 0 }, // #43 bp=Assigned
{ 4695, 4 }, // #44 bp=Bidi_Control:Bidi_C
{ 4699, 114 }, // #45 bp=Bidi_Mirrored:Bidi_M
{ 4813, 427 }, // #46 bp=Case_Ignorable:CI
{ 5240, 155 }, // #47 bp=Cased
{ 5395, 622 }, // #48 bp=Changes_When_Casefolded:CWCF
{ 6017, 131 }, // #49 bp=Changes_When_Casemapped:CWCM
{ 6148, 609 }, // #50 bp=Changes_When_Lowercased:CWL
{ 6757, 838 }, // #51 bp=Changes_When_NFKC_Casefolded:CWKCF
{ 7595, 626 }, // #52 bp=Changes_When_Titlecased:CWT
{ 8221, 627 }, // #53 bp=Changes_When_Uppercased:CWU
{ 8848, 23 }, // #54 bp=Dash
{ 8871, 17 }, // #55 bp=Default_Ignorable_Code_Point:DI
{ 8888, 8 }, // #56 bp=Deprecated:Dep
{ 8896, 192 }, // #57 bp=Diacritic:Dia
{ 9088, 153 }, // #58 bp=Emoji
{ 9241, 10 }, // #59 bp=Emoji_Component:EComp
{ 9251, 1 }, // #60 bp=Emoji_Modifier:EMod
{ 9252, 40 }, // #61 bp=Emoji_Modifier_Base:EBase
{ 9292, 83 }, // #62 bp=Emoji_Presentation:EPres
{ 9375, 78 }, // #63 bp=Extended_Pictographic:ExtPict
{ 9453, 33 }, // #64 bp=Extender:Ext
{ 9486, 861 }, // #65 bp=Grapheme_Base:Gr_Base
{ 10347, 353 }, // #66 bp=Grapheme_Extend:Gr_Ext
{ 10700, 6 }, // #67 bp=Hex_Digit:Hex
{ 10706, 2 }, // #68 bp=IDS_Binary_Operator:IDSB
{ 10708, 1 }, // #69 bp=IDS_Trinary_Operator:IDST
{ 10709, 756 }, // #70 bp=ID_Continue:IDC
{ 11465, 648 }, // #71 bp=ID_Start:IDS
{ 12113, 19 }, // #72 bp=Ideographic:Ideo
{ 12132, 1 }, // #73 bp=Join_Control:Join_C
{ 12133, 7 }, // #74 bp=Logical_Order_Exception:LOE
{ 12140, 668 }, // #75 bp=Lowercase:Lower
{ 12808, 138 }, // #76 bp=Math
{ 12946, 18 }, // #77 bp=Noncharacter_Code_Point:NChar
{ 12964, 28 }, // #78 bp=Pattern_Syntax:Pat_Syn
{ 12992, 5 }, // #79 bp=Pattern_White_Space:Pat_WS
{ 12997, 13 }, // #80 bp=Quotation_Mark:QMark
{ 13010, 3 }, // #81 bp=Radical
{ 13013, 1 }, // #82 bp=Regional_Indicator:RI
{ 13014, 79 }, // #83 bp=Sentence_Terminal:STerm
{ 13093, 32 }, // #84 bp=Soft_Dotted:SD
{ 13125, 107 }, // #85 bp=Terminal_Punctuation:Term
{ 13232, 15 }, // #86 bp=Unified_Ideograph:UIdeo
{ 13247, 651 }, // #87 bp=Uppercase:Upper
{ 13898, 4 }, // #88 bp=Variation_Selector:VS
{ 13902, 10 }, // #89 bp=White_Space:space
{ 13912, 763 }, // #90 bp=XID_Continue:XIDC
{ 14675, 655 }, // #91 bp=XID_Start:XIDS
{ 15330, 3 }, // #92 sc=Adlam:Adlm
{ 15333, 3 }, // #93 sc=Ahom:Ahom scx=Ahom:Ahom
{ 15336, 1 }, // #94 sc=Anatolian_Hieroglyphs:Hluw scx=Anatolian_Hieroglyphs:Hluw
{ 15337, 57 }, // #95 sc=Arabic:Arab
{ 15394, 4 }, // #96 sc=Armenian:Armn scx=Armenian:Armn
{ 15398, 2 }, // #97 sc=Avestan:Avst scx=Avestan:Avst
{ 15400, 2 }, // #98 sc=Balinese:Bali scx=Balinese:Bali
{ 15402, 2 }, // #99 sc=Bamum:Bamu scx=Bamum:Bamu
{ 15404, 2 }, // #100 sc=Bassa_Vah:Bass scx=Bassa_Vah:Bass
{ 15406, 2 }, // #101 sc=Batak:Batk scx=Batak:Batk
{ 15408, 14 }, // #102 sc=Bengali:Beng
{ 15422, 4 }, // #103 sc=Bhaiksuki:Bhks scx=Bhaiksuki:Bhks
{ 15426, 3 }, // #104 sc=Bopomofo:Bopo
{ 15429, 3 }, // #105 sc=Brahmi:Brah scx=Brahmi:Brah
{ 15432, 1 }, // #106 sc=Braille:Brai scx=Braille:Brai
{ 15433, 2 }, // #107 sc=Buginese:Bugi
{ 15435, 1 }, // #108 sc=Buhid:Buhd
{ 15436, 3 }, // #109 sc=Canadian_Aboriginal:Cans scx=Canadian_Aboriginal:Cans
{ 15439, 1 }, // #110 sc=Carian:Cari scx=Carian:Cari
{ 15440, 2 }, // #111 sc=Caucasian_Albanian:Aghb scx=Caucasian_Albanian:Aghb
{ 15442, 2 }, // #112 sc=Chakma:Cakm
{ 15444, 4 }, // #113 sc=Cham:Cham scx=Cham:Cham
{ 15448, 3 }, // #114 sc=Cherokee:Cher scx=Cherokee:Cher
{ 15451, 1 }, // #115 sc=Chorasmian:Chrs scx=Chorasmian:Chrs
{ 15452, 174 }, // #116 sc=Common:Zyyy
{ 15626, 3 }, // #117 sc=Coptic:Copt:Qaac
{ 15629, 1 }, // #118 sc=Cypro_Minoan:Cpmn
{ 15630, 4 }, // #119 sc=Cuneiform:Xsux scx=Cuneiform:Xsux
{ 15634, 6 }, // #120 sc=Cypriot:Cprt
{ 15640, 8 }, // #121 sc=Cyrillic:Cyrl
{ 15648, 1 }, // #122 sc=Deseret:Dsrt scx=Deseret:Dsrt
{ 15649, 4 }, // #123 sc=Devanagari:Deva
{ 15653, 8 }, // #124 sc=Dives_Akuru:Diak scx=Dives_Akuru:Diak
{ 15661, 1 }, // #125 sc=Dogra:Dogr
{ 15662, 5 }, // #126 sc=Duployan:Dupl
{ 15667, 2 }, // #127 sc=Egyptian_Hieroglyphs:Egyp scx=Egyptian_Hieroglyphs:Egyp
{ 15669, 1 }, // #128 sc=Elbasan:Elba scx=Elbasan:Elba
{ 15670, 1 }, // #129 sc=Elymaic:Elym scx=Elymaic:Elym
{ 15671, 36 }, // #130 sc=Ethiopic:Ethi scx=Ethiopic:Ethi
{ 15707, 10 }, // #131 sc=Georgian:Geor
{ 15717, 6 }, // #132 sc=Glagolitic:Glag
{ 15723, 1 }, // #133 sc=Gothic:Goth scx=Gothic:Goth
{ 15724, 15 }, // #134 sc=Grantha:Gran
{ 15739, 36 }, // #135 sc=Greek:Grek
{ 15775, 14 }, // #136 sc=Gujarati:Gujr
{ 15789, 6 }, // #137 sc=Gunjala_Gondi:Gong
{ 15795, 16 }, // #138 sc=Gurmukhi:Guru
{ 15811, 20 }, // #139 sc=Han:Hani
{ 15831, 14 }, // #140 sc=Hangul:Hang
{ 15845, 2 }, // #141 sc=Hanifi_Rohingya:Rohg
{ 15847, 1 }, // #142 sc=Hanunoo:Hano
{ 15848, 3 }, // #143 sc=Hatran:Hatr scx=Hatran:Hatr
{ 15851, 9 }, // #144 sc=Hebrew:Hebr scx=Hebrew:Hebr
{ 15860, 5 }, // #145 sc=Hiragana:Hira
{ 15865, 2 }, // #146 sc=Imperial_Aramaic:Armi scx=Imperial_Aramaic:Armi
{ 15867, 29 }, // #147 sc=Inherited:Zinh:Qaai
{ 15896, 2 }, // #148 sc=Inscriptional_Pahlavi:Phli scx=Inscriptional_Pahlavi:Phli
{ 15898, 2 }, // #149 sc=Inscriptional_Parthian:Prti scx=Inscriptional_Parthian:Prti
{ 15900, 3 }, // #150 sc=Javanese:Java
{ 15903, 2 }, // #151 sc=Kaithi:Kthi
{ 15905, 13 }, // #152 sc=Kannada:Knda
{ 15918, 13 }, // #153 sc=Katakana:Kana
{ 15931, 2 }, // #154 sc=Kayah_Li:Kali
{ 15933, 8 }, // #155 sc=Kharoshthi:Khar scx=Kharoshthi:Khar
{ 15941, 2 }, // #156 sc=Khitan_Small_Script:Kits scx=Khitan_Small_Script:Kits
{ 15943, 4 }, // #157 sc=Khmer:Khmr scx=Khmer:Khmr
{ 15947, 2 }, // #158 sc=Khojki:Khoj
{ 15949, 2 }, // #159 sc=Khudawadi:Sind
{ 15951, 11 }, // #160 sc=Lao:Laoo scx=Lao:Laoo
{ 15962, 38 }, // #161 sc=Latin:Latn
{ 16000, 3 }, // #162 sc=Lepcha:Lepc scx=Lepcha:Lepc
{ 16003, 5 }, // #163 sc=Limbu:Limb
{ 16008, 3 }, // #164 sc=Linear_A:Lina
{ 16011, 7 }, // #165 sc=Linear_B:Linb
{ 16018, 2 }, // #166 sc=Lisu:Lisu scx=Lisu:Lisu
{ 16020, 1 }, // #167 sc=Lycian:Lyci scx=Lycian:Lyci
{ 16021, 2 }, // #168 sc=Lydian:Lydi scx=Lydian:Lydi
{ 16023, 1 }, // #169 sc=Mahajani:Mahj
{ 16024, 1 }, // #170 sc=Makasar:Maka scx=Makasar:Maka
{ 16025, 7 }, // #171 sc=Malayalam:Mlym
{ 16032, 2 }, // #172 sc=Mandaic:Mand
{ 16034, 2 }, // #173 sc=Manichaean:Mani
{ 16036, 3 }, // #174 sc=Marchen:Marc scx=Marchen:Marc
{ 16039, 7 }, // #175 sc=Masaram_Gondi:Gonm
{ 16046, 1 }, // #176 sc=Medefaidrin:Medf scx=Medefaidrin:Medf
{ 16047, 3 }, // #177 sc=Meetei_Mayek:Mtei scx=Meetei_Mayek:Mtei
{ 16050, 2 }, // #178 sc=Mende_Kikakui:Mend scx=Mende_Kikakui:Mend
{ 16052, 3 }, // #179 sc=Meroitic_Cursive:Merc scx=Meroitic_Cursive:Merc
{ 16055, 1 }, // #180 sc=Meroitic_Hieroglyphs:Mero scx=Meroitic_Hieroglyphs:Mero
{ 16056, 3 }, // #181 sc=Miao:Plrd scx=Miao:Plrd
{ 16059, 2 }, // #182 sc=Modi:Modi
{ 16061, 6 }, // #183 sc=Mongolian:Mong
{ 16067, 3 }, // #184 sc=Mro:Mroo scx=Mro:Mroo
{ 16070, 5 }, // #185 sc=Multani:Mult
{ 16075, 3 }, // #186 sc=Myanmar:Mymr
{ 16078, 2 }, // #187 sc=Nabataean:Nbat scx=Nabataean:Nbat
{ 16080, 3 }, // #188 sc=Nandinagari:Nand
{ 16083, 4 }, // #189 sc=New_Tai_Lue:Talu scx=New_Tai_Lue:Talu
{ 16087, 2 }, // #190 sc=Newa:Newa scx=Newa:Newa
{ 16089, 2 }, // #191 sc=Nko:Nkoo
{ 16091, 2 }, // #192 sc=Nushu:Nshu scx=Nushu:Nshu
{ 16093, 4 }, // #193 sc=Nyiakeng_Puachue_Hmong:Hmnp scx=Nyiakeng_Puachue_Hmong:Hmnp
{ 16097, 1 }, // #194 sc=Ogham:Ogam scx=Ogham:Ogam
{ 16098, 1 }, // #195 sc=Ol_Chiki:Olck scx=Ol_Chiki:Olck
{ 16099, 3 }, // #196 sc=Old_Hungarian:Hung scx=Old_Hungarian:Hung
{ 16102, 2 }, // #197 sc=Old_Italic:Ital scx=Old_Italic:Ital
{ 16104, 1 }, // #198 sc=Old_North_Arabian:Narb scx=Old_North_Arabian:Narb
{ 16105, 1 }, // #199 sc=Old_Permic:Perm
{ 16106, 2 }, // #200 sc=Old_Persian:Xpeo scx=Old_Persian:Xpeo
{ 16108, 1 }, // #201 sc=Old_Sogdian:Sogo scx=Old_Sogdian:Sogo
{ 16109, 1 }, // #202 sc=Old_South_Arabian:Sarb scx=Old_South_Arabian:Sarb
{ 16110, 1 }, // #203 sc=Old_Turkic:Orkh scx=Old_Turkic:Orkh
{ 16111, 1 }, // #204 sc=Old_Uyghur:Ougr
{ 16112, 14 }, // #205 sc=Oriya:Orya
{ 16126, 2 }, // #206 sc=Osage:Osge scx=Osage:Osge
{ 16128, 2 }, // #207 sc=Osmanya:Osma scx=Osmanya:Osma
{ 16130, 5 }, // #208 sc=Pahawh_Hmong:Hmng scx=Pahawh_Hmong:Hmng
{ 16135, 1 }, // #209 sc=Palmyrene:Palm scx=Palmyrene:Palm
{ 16136, 1 }, // #210 sc=Pau_Cin_Hau:Pauc scx=Pau_Cin_Hau:Pauc
{ 16137, 1 }, // #211 sc=Phags_Pa:Phag
{ 16138, 2 }, // #212 sc=Phoenician:Phnx scx=Phoenician:Phnx
{ 16140, 3 }, // #213 sc=Psalter_Pahlavi:Phlp
{ 16143, 2 }, // #214 sc=Rejang:Rjng scx=Rejang:Rjng
{ 16145, 2 }, // #215 sc=Runic:Runr scx=Runic:Runr
{ 16147, 2 }, // #216 sc=Samaritan:Samr scx=Samaritan:Samr
{ 16149, 2 }, // #217 sc=Saurashtra:Saur scx=Saurashtra:Saur
{ 16151, 1 }, // #218 sc=Sharada:Shrd
{ 16152, 1 }, // #219 sc=Shavian:Shaw scx=Shavian:Shaw
{ 16153, 2 }, // #220 sc=Siddham:Sidd scx=Siddham:Sidd
{ 16155, 3 }, // #221 sc=SignWriting:Sgnw scx=SignWriting:Sgnw
{ 16158, 13 }, // #222 sc=Sinhala:Sinh
{ 16171, 1 }, // #223 sc=Sogdian:Sogd
{ 16172, 2 }, // #224 sc=Sora_Sompeng:Sora scx=Sora_Sompeng:Sora
{ 16174, 1 }, // #225 sc=Soyombo:Soyo scx=Soyombo:Soyo
{ 16175, 2 }, // #226 sc=Sundanese:Sund scx=Sundanese:Sund
{ 16177, 1 }, // #227 sc=Syloti_Nagri:Sylo
{ 16178, 4 }, // #228 sc=Syriac:Syrc
{ 16182, 2 }, // #229 sc=Tagalog:Tglg
{ 16184, 3 }, // #230 sc=Tagbanwa:Tagb
{ 16187, 2 }, // #231 sc=Tai_Le:Tale
{ 16189, 5 }, // #232 sc=Tai_Tham:Lana scx=Tai_Tham:Lana
{ 16194, 2 }, // #233 sc=Tai_Viet:Tavt scx=Tai_Viet:Tavt
{ 16196, 2 }, // #234 sc=Takri:Takr
{ 16198, 18 }, // #235 sc=Tamil:Taml
{ 16216, 2 }, // #236 sc=Tangsa:Tnsa scx=Tangsa:Tnsa
{ 16218, 4 }, // #237 sc=Tangut:Tang scx=Tangut:Tang
{ 16222, 13 }, // #238 sc=Telugu:Telu
{ 16235, 1 }, // #239 sc=Thaana:Thaa
{ 16236, 2 }, // #240 sc=Thai:Thai scx=Thai:Thai
{ 16238, 7 }, // #241 sc=Tibetan:Tibt scx=Tibetan:Tibt
{ 16245, 3 }, // #242 sc=Tifinagh:Tfng scx=Tifinagh:Tfng
{ 16248, 2 }, // #243 sc=Tirhuta:Tirh
{ 16250, 1 }, // #244 sc=Toto scx=Toto
{ 16251, 2 }, // #245 sc=Ugaritic:Ugar scx=Ugaritic:Ugar
{ 16253, 1 }, // #246 sc=Vai:Vaii scx=Vai:Vaii
{ 16254, 8 }, // #247 sc=Vithkuqi:Vith scx=Vithkuqi:Vith
{ 16262, 2 }, // #248 sc=Wancho:Wcho scx=Wancho:Wcho
{ 16264, 2 }, // #249 sc=Warang_Citi:Wara scx=Warang_Citi:Wara
{ 16266, 3 }, // #250 sc=Yezidi:Yezi
{ 16269, 2 }, // #251 sc=Yi:Yiii
{ 16271, 1 }, // #252 sc=Zanabazar_Square:Zanb scx=Zanabazar_Square:Zanb
{ 16272, 5 }, // #253 scx=Adlam:Adlm
{ 16277, 51 }, // #254 scx=Arabic:Arab
{ 16328, 26 }, // #255 scx=Bengali:Beng
{ 16354, 12 }, // #256 scx=Bopomofo:Bopo
{ 16366, 3 }, // #257 scx=Buginese:Bugi
{ 16369, 2 }, // #258 scx=Buhid:Buhd
{ 16371, 4 }, // #259 scx=Chakma:Cakm
{ 16375, 148 }, // #260 scx=Common:Zyyy
{ 16523, 4 }, // #261 scx=Coptic:Copt:Qaac
{ 16527, 2 }, // #262 scx=Cypro_Minoan:Cpmn
{ 16529, 9 }, // #263 scx=Cypriot:Cprt
{ 16538, 9 }, // #264 scx=Cyrillic:Cyrl
{ 16547, 7 }, // #265 scx=Devanagari:Deva
{ 16554, 3 }, // #266 scx=Dogra:Dogr
{ 16557, 5 }, // #267 scx=Duployan:Dupl
{ 16562, 9 }, // #268 scx=Georgian:Geor
{ 16571, 10 }, // #269 scx=Glagolitic:Glag
{ 16581, 25 }, // #270 scx=Grantha:Gran
{ 16606, 38 }, // #271 scx=Greek:Grek
{ 16644, 17 }, // #272 scx=Gujarati:Gujr
{ 16661, 7 }, // #273 scx=Gunjala_Gondi:Gong
{ 16668, 19 }, // #274 scx=Gurmukhi:Guru
{ 16687, 37 }, // #275 scx=Han:Hani
{ 16724, 21 }, // #276 scx=Hangul:Hang
{ 16745, 7 }, // #277 scx=Hanifi_Rohingya:Rohg
{ 16752, 1 }, // #278 scx=Hanunoo:Hano
{ 16753, 16 }, // #279 scx=Hiragana:Hira
{ 16769, 20 }, // #280 scx=Inherited:Zinh:Qaai
{ 16789, 3 }, // #281 scx=Javanese:Java
{ 16792, 4 }, // #282 scx=Kaithi:Kthi
{ 16796, 21 }, // #283 scx=Kannada:Knda
{ 16817, 19 }, // #284 scx=Katakana:Kana
{ 16836, 1 }, // #285 scx=Kayah_Li:Kali
{ 16837, 4 }, // #286 scx=Khojki:Khoj
{ 16841, 4 }, // #287 scx=Khudawadi:Sind
{ 16845, 46 }, // #288 scx=Latin:Latn
{ 16891, 6 }, // #289 scx=Limbu:Limb
{ 16897, 4 }, // #290 scx=Linear_A:Lina
{ 16901, 10 }, // #291 scx=Linear_B:Linb
{ 16911, 3 }, // #292 scx=Mahajani:Mahj
{ 16914, 11 }, // #293 scx=Malayalam:Mlym
{ 16925, 3 }, // #294 scx=Mandaic:Mand
{ 16928, 3 }, // #295 scx=Manichaean:Mani
{ 16931, 8 }, // #296 scx=Masaram_Gondi:Gonm
{ 16939, 3 }, // #297 scx=Modi:Modi
{ 16942, 5 }, // #298 scx=Mongolian:Mong
{ 16947, 6 }, // #299 scx=Multani:Mult
{ 16953, 4 }, // #300 scx=Myanmar:Mymr
{ 16957, 9 }, // #301 scx=Nandinagari:Nand
{ 16966, 6 }, // #302 scx=Nko:Nkoo
{ 16972, 2 }, // #303 scx=Old_Permic:Perm
{ 16974, 3 }, // #304 scx=Old_Uyghur:Ougr
{ 16977, 18 }, // #305 scx=Oriya:Orya
{ 16995, 3 }, // #306 scx=Phags_Pa:Phag
{ 16998, 4 }, // #307 scx=Psalter_Pahlavi:Phlp
{ 17002, 6 }, // #308 scx=Sharada:Shrd
{ 17008, 14 }, // #309 scx=Sinhala:Sinh
{ 17022, 2 }, // #310 scx=Sogdian:Sogd
{ 17024, 3 }, // #311 scx=Syloti_Nagri:Sylo
{ 17027, 12 }, // #312 scx=Syriac:Syrc
{ 17039, 3 }, // #313 scx=Tagalog:Tglg
{ 17042, 4 }, // #314 scx=Tagbanwa:Tagb
{ 17046, 3 }, // #315 scx=Tai_Le:Tale
{ 17049, 4 }, // #316 scx=Takri:Takr
{ 17053, 25 }, // #317 scx=Tamil:Taml
{ 17078, 17 }, // #318 scx=Telugu:Telu
{ 17095, 7 }, // #319 scx=Thaana:Thaa
{ 17102, 6 }, // #320 scx=Tirhuta:Tirh
{ 17108, 7 }, // #321 scx=Yezidi:Yezi
{ 17115, 7 } // #322 scx=Yi:Yiii
};
#define SRELL_UPDATA_VERSION 110
// ... "srell_updata.hpp"]
//template <typename PairType>
class unicode_property
{
public:
typedef uint_l32 property_type;
typedef simple_array<char> pstring;
static const property_type error_property = static_cast<property_type>(-1);
unicode_property()
{
}
unicode_property &operator=(const unicode_property &)
{
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
unicode_property &operator=(unicode_property &&) SRELL_NOEXCEPT
{
return *this;
}
#endif
static property_type lookup_property(const pstring &name, const pstring &value)
{
pname_type ptype = name.size() ? lookup_property_name(name) : updata::ptype::general_category;
property_type property_number = lookup_property_value(ptype, value);
if (property_number == updata::unknown && name.size() == 0)
{
ptype = updata::ptype::binary;
property_number = lookup_property_value(ptype, value);
}
return property_number != updata::unknown ? property_number : error_property;
}
static std::size_t ranges_offset(const property_type property_number)
{
#if defined(SRELL_UPDATA_VERSION)
return updata::positiontable[property_number].offset;
#else
const offset_and_number *const postable = updata::position_table();
return postable[property_number].offset;
#endif
}
static std::size_t number_of_ranges(const property_type property_number)
{
#if defined(SRELL_UPDATA_VERSION)
return updata::positiontable[property_number].number_of_pairs;
#else
const offset_and_number *const postable = updata::position_table();
return postable[property_number].number_of_pairs;
#endif
}
static const uchar32 *ranges_address(const property_type property_number)
{
#if defined(SRELL_UPDATA_VERSION)
return &updata::rangetable[ranges_offset(property_number) << 1];
#else
const uchar32 *const ranges = updata::ranges();
return &ranges[ranges_offset(property_number) << 1];
#endif
}
private:
typedef uint_l32 pname_type;
typedef const char *pname_string_type;
#if defined(SRELL_UPDATA_VERSION) && (SRELL_UPDATA_VERSION >= 200)
struct pvalue_type
{
pname_type pname;
property_type pnumber;
pname_string_type csstrings;
};
#else
struct pvalue_type
{
pname_type pname;
pname_string_type csstrings;
property_type pnumber;
};
#endif
struct offset_and_number
{
std::size_t offset;
std::size_t number_of_pairs;
};
typedef unicode_property_data<property_type,
pname_type,
pname_string_type,
uchar32,
pvalue_type,
offset_and_number
>
updata;
static pname_type lookup_property_name(const pstring &name)
{
#if defined(SRELL_UPDATA_VERSION)
for (std::size_t pno = 0; *updata::propertynametable[pno]; ++pno)
{
if (check_if_included(name, updata::propertynametable[pno]))
return static_cast<pname_type>(pno);
}
#else
const pname_string_type *const pname_table = updata::propertyname_table();
for (std::size_t pno = 0; *pname_table[pno]; ++pno)
{
if (check_if_included(name, pname_table[pno]))
return static_cast<pname_type>(pno);
}
#endif
return updata::ptype::unknown;
}
// Checks if value is included in colon-separated strings.
static bool check_if_included(const pstring &value, pname_string_type csstrings)
{
if (static_cast<uchar32>(*csstrings) != meta_char::mc_astrsk) // '*'
{
while (*csstrings)
{
const pname_string_type begin = csstrings;
for (; static_cast<uchar32>(*csstrings) != meta_char::mc_colon && static_cast<uchar32>(*csstrings) != char_ctrl::cc_nul; ++csstrings);
const std::size_t length = csstrings - begin;
if (static_cast<std::size_t>(value.size()) == length)
if (value.compare(0, value.size(), begin, length) == 0)
return true;
if (static_cast<uchar32>(*csstrings) == meta_char::mc_colon)
++csstrings;
}
}
return false;
}
static property_type lookup_property_value(const pname_type ptype, const pstring &value)
{
#if defined(SRELL_UPDATA_VERSION)
for (std::size_t pno = 0; *updata::rangenumbertable[pno].csstrings; ++pno)
{
const pvalue_type &pvalue = updata::rangenumbertable[pno];
if (pvalue.pname == ptype && check_if_included(value, pvalue.csstrings))
return pvalue.pnumber;
}
#else
const pvalue_type *const pvalue_table = updata::rangenumber_table();
for (std::size_t pno = 0; *pvalue_table[pno].csstrings; ++pno)
{
const pvalue_type &pvalue = pvalue_table[pno];
if (pvalue.pname == ptype && check_if_included(value, pvalue.csstrings))
return pvalue.pnumber;
}
#endif
return updata::unknown;
}
public:
static const std::size_t number_of_properties = updata::last_property_number + 1;
static const std::size_t last_property_number = updata::last_property_number;
#if defined(SRELL_UPDATA_VERSION) && (SRELL_UPDATA_VERSION >= 200)
static const std::size_t last_pos_number = updata::last_pos_number;
#endif
static const property_type gc_Zs = updata::gc_Space_Separator;
static const property_type gc_Cn = updata::gc_Unassigned;
static const property_type bp_Assigned = updata::bp_Assigned;
// UnicodeIDStart::
// UnicodeIDContinue::
static const property_type bp_ID_Start = updata::bp_ID_Start;
static const property_type bp_ID_Continue = updata::bp_ID_Continue;
};
// unicode_property
#endif // !defined(SRELL_NO_UNICODE_PROPERTY)
} // namespace regex_internal
// ... "rei_up.hpp"]
// ["rei_char_class.hpp" ...
namespace regex_internal
{
struct range_pair // , public std::pair<charT, charT>
{
uchar32 second;
uchar32 first;
void set(const uchar32 min, const uchar32 max)
{
this->first = min;
this->second = max;
}
bool is_range_valid() const
{
return first <= second;
}
bool operator==(const range_pair &right) const
{
return this->first == right.first && this->second == right.second;
}
bool operator<(const range_pair &right) const
{
return this->second < right.first; // This assumes that optimise() has been called.
}
void swap(range_pair &right)
{
const range_pair tmp = *this;
*this = right;
right = tmp;
}
bool unify_range(const range_pair &right)
{
range_pair &left = *this;
if (right.first <= left.second || left.second + 1 == right.first) // r1 <= l2 || l2+1 == r1
{
// l1 l2+1 < r1 r2 excluded.
if (left.first <= right.second || right.second + 1 == left.first) // l1 <= r2 || r2+1 == l1
{
// r1 r2+1 < l1 l2 excluded.
if (left.first > right.first)
left.first = right.first;
if (left.second < right.second)
left.second = right.second;
return true;
}
}
return false;
}
};
// range_pair
struct range_pair_helper : public range_pair
{
range_pair_helper(const uchar32 min, const uchar32 max)
{
this->first = min;
this->second = max;
}
range_pair_helper(const uchar32 minmax)
{
this->first = minmax;
this->second = minmax;
}
};
// range_pair_helper
struct range_pairs // : public simple_array<range_pair>
{
public:
typedef simple_array<range_pair> array_type;
typedef array_type::size_type size_type;
range_pairs()
{
}
range_pairs(const range_pairs &rp) : rparray_(rp.rparray_)
{
}
range_pairs &operator=(const range_pairs &rp)
{
rparray_.operator=(rp.rparray_);
return *this;
}
range_pairs(const size_type initsize) : rparray_(initsize)
{
}
range_pairs(const range_pairs &right, size_type pos, size_type size)
: rparray_(right.rparray_, pos, size)
{
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
range_pairs(range_pairs &&rp) SRELL_NOEXCEPT
: rparray_(std::move(rp.rparray_))
{
}
range_pairs &operator=(range_pairs &&rp) SRELL_NOEXCEPT
{
rparray_.operator=(std::move(rp.rparray_));
return *this;
}
#endif
void clear()
{
rparray_.clear();
}
size_type size() const
{
return rparray_.size();
}
const range_pair &operator[](const size_type pos) const
{
return rparray_[pos];
}
range_pair &operator[](const size_type pos)
{
return rparray_[pos];
}
void resize(const size_type size)
{
rparray_.resize(size);
}
void swap(range_pairs &right)
{
rparray_.swap(right.rparray_);
}
void set_solerange(const range_pair &right)
{
rparray_.clear();
rparray_.push_back(right);
}
void append_newclass(const range_pairs &right)
{
rparray_.append(right.rparray_);
}
void append_newpair(const range_pair &right)
{
rparray_.push_back(right);
}
void join(const range_pair &right)
{
size_type pos = 0;
for (; pos < rparray_.size(); ++pos)
{
range_pair &curpair = rparray_[pos];
if (curpair.unify_range(right))
{
for (++pos; pos < rparray_.size();)
{
if (curpair.unify_range(rparray_[pos]))
rparray_.erase(pos);
else
break;
}
return;
}
if (right.second < curpair.first)
break;
}
rparray_.insert(pos, right);
}
void merge(const range_pairs &right)
{
for (size_type i = 0; i < right.size(); ++i)
join(right[i]);
}
bool same(uchar32 pos, const uchar32 count, const range_pairs &right) const
{
if (count == right.size())
{
for (uchar32 i = 0; i < count; ++i, ++pos)
if (!(rparray_[pos] == right[i]))
return false;
return true;
}
return false;
}
int relationship(const range_pairs &right) const
{
if (rparray_.size() == right.rparray_.size())
{
for (size_type i = 0; i < rparray_.size(); ++i)
{
if (!(this->rparray_[i] == right.rparray_[i]))
{
if (i == 0)
goto check_overlap;
return 1; // Overlapped.
}
}
return 0; // Same.
}
check_overlap:
return is_overlap(right) ? 1 : 2; // Overlapped or exclusive.
}
void negation()
{
uchar32 begin = 0;
range_pairs newpairs;
for (size_type i = 0; i < rparray_.size(); ++i)
{
const range_pair &range = rparray_[i];
if (begin < range.first)
newpairs.join(range_pair_helper(begin, range.first - 1));
begin = range.second + 1;
}
if (begin <= constants::unicode_max_codepoint)
newpairs.join(range_pair_helper(begin, constants::unicode_max_codepoint));
*this = newpairs;
}
bool is_overlap(const range_pairs &right) const
{
for (size_type i = 0; i < rparray_.size(); ++i)
{
const range_pair &leftrange = rparray_[i];
for (size_type j = 0; j < right.size(); ++j)
{
const range_pair &rightrange = right[j];
if (rightrange.first <= leftrange.second) // Excludes l1 l2 < r1 r2.
if (leftrange.first <= rightrange.second) // Excludes r1 r2 < l1 l2.
return true;
}
}
return false;
}
void load_from_memory(const uchar32 *array, size_type number_of_pairs)
{
for (; number_of_pairs; --number_of_pairs, array += 2)
join(range_pair_helper(array[0], array[1]));
}
void make_caseunfoldedcharset()
{
uchar32 table[unicode_case_folding::rev_maxset] = {};
bitset<constants::unicode_max_codepoint + 1> bs;
for (size_type i = 0; i < rparray_.size(); ++i)
{
const range_pair &range = rparray_[i];
for (uchar32 ucp = range.first; ucp <= range.second; ++ucp)
{
const uchar32 setnum = unicode_case_folding::casefoldedcharset(table, ucp);
for (uchar32 j = 0; j < setnum; ++j)
bs.set(table[j]);
}
}
load_from_bitset(bs);
}
// For updataout.hpp.
void remove_range(const range_pair &right)
{
for (size_type pos = 0; pos < rparray_.size();)
{
range_pair &left = rparray_[pos];
if (right.first <= left.first && left.first <= right.second) // r1 <= l1 <= r2.
{
if (left.second > right.second) // r1 <= l1 <= r2 < l2.
{
left.first = right.second + 1; // carry doesn't happen.
++pos;
}
else // r1 <= l1 <= l2 <= r2.
rparray_.erase(pos);
}
else if (right.first <= left.second && left.second <= right.second) // r1 <= l2 <= r2.
{
if (left.first < right.first) // l1 < r1 <= l2 <= r2.
{
left.second = right.first - 1;
++pos;
}
else // r1 <= l1 <= l2 <= r2.
rparray_.erase(pos);
}
else if (left.first < right.first && right.second < left.second) // l1 < r1 && r2 < l2.
{
range_pair newrange(left);
left.second = right.first - 1;
newrange.first = right.second + 1;
rparray_.insert(++pos, newrange);
++pos;
}
else
++pos;
}
}
// template <typename ucf>
uchar32 consists_of_one_character(const bool icase) const
{
if (rparray_.size() >= 1)
{
uchar32 (*const casefolding_func)(const uchar32) = !icase ? do_nothing : unicode_case_folding::do_casefolding;
const uchar32 ucp1st = casefolding_func(rparray_[0].first);
for (size_type no = 0; no < rparray_.size(); ++no)
{
const range_pair &cr = rparray_[no];
for (uchar32 ucp = cr.first;; ++ucp)
{
if (ucp1st != casefolding_func(ucp))
return constants::invalid_u32value;
if (ucp == cr.second)
break;
}
}
return ucp1st;
}
return constants::invalid_u32value;
}
void split_ranges(range_pairs &kept, range_pairs &removed, const range_pairs &rightranges) const
{
range_pair newpair;
kept.rparray_ = this->rparray_; // Subtraction set.
removed.clear(); // Intersection set.
for (size_type i = 0;; ++i)
{
RETRY_SAMEINDEXNO:
if (i >= kept.rparray_.size())
break;
range_pair &left = kept.rparray_[i];
for (size_type j = 0; j < rightranges.rparray_.size(); ++j)
{
const range_pair &right = rightranges.rparray_[j];
if (right.first <= left.second) // Excludes l1 l2 < r1 r2.
{
if (left.first <= right.second) // Excludes r1 r2 < l1 l2.
{
if (left.first < right.first)
{
if (right.second < left.second)
{
removed.join(range_pair_helper(right.first, right.second));
newpair.set(right.second + 1, left.second);
left.second = right.first - 1;
kept.rparray_.insert(i + 1, newpair);
}
else
{
removed.join(range_pair_helper(right.first, left.second));
left.second = right.first - 1;
}
}
else if (right.second < left.second)
{
removed.join(range_pair_helper(left.first, right.second));
left.first = right.second + 1;
}
else
{
removed.join(range_pair_helper(left.first, left.second));
kept.rparray_.erase(i);
goto RETRY_SAMEINDEXNO;
}
}
}
else
break;
}
}
}
#if defined(SRELLDBG_NO_BITSET)
bool is_included(const uchar32 ch) const
{
#if 01
const range_pair *const end = rparray_.data() + rparray_.size();
for (const range_pair *cur = rparray_.data(); cur != end; ++cur)
{
if (ch <= cur->second)
return ch >= cur->first;
#else
for (size_type i = 0; i < rparray_.size(); ++i)
{
if (rparray_[i].is_included(ch))
return true;
#endif
}
return false;
}
#endif // defined(SRELLDBG_NO_BITSET)
// For multiple_range_pairs functions.
bool is_included_ls(const uchar32 pos, uchar32 count, const uchar32 c) const
{
const range_pair *cur = &rparray_[pos];
for (; count; ++cur, --count)
{
if (c <= cur->second)
return c >= cur->first;
}
return false;
}
bool is_included(const uchar32 pos, uchar32 count, const uchar32 c) const
{
const range_pair *base = &rparray_[pos];
while (count)
{
uchar32 mid = count >> 1;
const range_pair &rp = base[mid];
if (c <= rp.second)
{
if (c >= rp.first)
return true;
count = mid;
}
else
{
++mid;
count -= mid;
base += mid;
}
}
return false;
}
void replace(const size_type pos, const size_type count, const range_pairs &right)
{
rparray_.replace(pos, count, right.rparray_);
}
#if !defined(SRELLDBG_NO_CCPOS)
// For Eytzinger layout functions.
bool is_included_el(uchar32 pos, const uchar32 len, const uchar32 c) const
{
const range_pair *const base = &rparray_[pos];
#if defined(__GNUC__)
__builtin_prefetch(base);
#endif
for (pos = 0; pos < len;)
{
const range_pair &rp = base[pos];
if (c <= rp.second)
{
if (c >= rp.first)
return true;
pos = (pos << 1) + 1;
}
else
{
pos = (pos << 1) + 2;
}
}
return false;
}
uchar32 create_el(const range_pair *srcbase, const uchar32 srcsize)
{
const uchar32 basepos = static_cast<uchar32>(rparray_.size());
rparray_.resize(basepos + srcsize);
set_eytzinger_layout(0, srcbase, srcsize, &rparray_[basepos], 0);
return srcsize;
}
#endif // !defined(SRELLDBG_NO_CCPOS)
uint_l32 total_codepoints() const
{
uint_l32 num = 0;
for (size_type no = 0; no < rparray_.size(); ++no)
{
const range_pair &cr = rparray_[no];
num += cr.second - cr.first + 1;
}
return num;
}
private:
#if !defined(SRELLDBG_NO_CCPOS)
uchar32 set_eytzinger_layout(uchar32 srcpos, const range_pair *const srcbase, const uchar32 srclen,
range_pair *const destbase, const uchar32 destpos)
{
if (destpos < srclen)
{
const uchar32 nextpos = (destpos << 1) + 1;
srcpos = set_eytzinger_layout(srcpos, srcbase, srclen, destbase, nextpos);
destbase[destpos] = srcbase[srcpos++];
srcpos = set_eytzinger_layout(srcpos, srcbase, srclen, destbase, nextpos + 1);
}
return srcpos;
}
#endif // !defined(SRELLDBG_NO_CCPOS)
static uchar32 do_nothing(const uchar32 cp)
{
return cp;
}
template <typename BitSetT>
void load_from_bitset(const BitSetT &bs)
{
uchar32 begin = constants::invalid_u32value;
range_pairs newranges;
for (uchar32 ucp = 0;; ++ucp)
{
if (ucp > constants::unicode_max_codepoint || !bs.test(ucp))
{
if (begin != constants::invalid_u32value)
{
newranges.join(range_pair_helper(begin, ucp - 1));
begin = constants::invalid_u32value;
}
if (ucp > constants::unicode_max_codepoint)
break;
}
else if (begin == constants::invalid_u32value && bs.test(ucp))
begin = ucp;
}
rparray_.swap(newranges.rparray_);
}
array_type rparray_;
public: // For debug.
void print_pairs(const int, const char *const = NULL, const char *const = NULL) const;
};
// range_pairs
#if !defined(SRELL_NO_UNICODE_PROPERTY)
// For RegExpIdentifierStart and RegExpIdentifierPart
struct identifier_charclass
{
public:
void clear()
{
char_class_.clear();
char_class_pos_.clear();
}
void setup()
{
if (char_class_pos_.size() == 0)
{
static const uchar32 additions[] = {
// reg_exp_identifier_start, reg_exp_identifier_part.
0x24, 0x24, 0x5f, 0x5f, 0x200c, 0x200d // '$' '_' <ZWNJ>-<ZWJ>
};
range_pairs ranges;
// For reg_exp_identifier_start.
{
const uchar32 *const IDs_address = unicode_property::ranges_address(unicode_property::bp_ID_Start);
const std::size_t IDs_number = unicode_property::number_of_ranges(unicode_property::bp_ID_Start);
ranges.load_from_memory(IDs_address, IDs_number);
}
ranges.load_from_memory(&additions[0], 2);
append_charclass(ranges);
// For reg_exp_identifier_part.
ranges.clear();
{
const uchar32 *const IDc_address = unicode_property::ranges_address(unicode_property::bp_ID_Continue);
const std::size_t IDc_number = unicode_property::number_of_ranges(unicode_property::bp_ID_Continue);
ranges.load_from_memory(IDc_address, IDc_number);
}
ranges.load_from_memory(&additions[0], 3);
append_charclass(ranges);
}
}
bool is_identifier(const uchar32 ch, const bool part) const
{
const range_pair &rp = char_class_pos_[part ? 1 : 0];
return char_class_.is_included(rp.first, rp.second, ch);
}
private:
void append_charclass(const range_pairs &rps)
{
char_class_pos_.push_back(range_pair_helper(static_cast<uchar32>(char_class_.size()), static_cast<uchar32>(rps.size())));
char_class_.append_newclass(rps);
}
range_pairs char_class_;
range_pairs::array_type char_class_pos_;
};
// identifier_charclass
#endif // !defined(SRELL_NO_UNICODE_PROPERTY)
class re_character_class
{
public:
enum
{ // 0 1 2 3 4 5
newline, dotall, space, digit, word, icase_word,
// 6
number_of_predefcls
};
static const uint_l32 error_property = static_cast<uint_l32>(-1);
#if !defined(SRELL_NO_UNICODE_PROPERTY)
typedef unicode_property::pstring pstring;
#endif
re_character_class()
{
setup_predefinedclass();
}
re_character_class &operator=(const re_character_class &that)
{
if (this != &that)
{
this->char_class_ = that.char_class_;
this->char_class_pos_ = that.char_class_pos_;
#if !defined(SRELLDBG_NO_CCPOS)
this->char_class_el_ = that.char_class_el_;
this->char_class_pos_el_ = that.char_class_pos_el_;
#endif
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
re_character_class &operator=(re_character_class &&that) SRELL_NOEXCEPT
{
if (this != &that)
{
this->char_class_ = std::move(that.char_class_);
this->char_class_pos_ = std::move(that.char_class_pos_);
#if !defined(SRELLDBG_NO_CCPOS)
this->char_class_el_ = std::move(that.char_class_el_);
this->char_class_pos_el_ = std::move(that.char_class_pos_el_);
#endif
}
return *this;
}
#endif
bool is_included(const uint_l32 class_number, const uchar32 c) const
{
// return char_class_.is_included(char_class_pos_[class_number], c);
const range_pair &rp = char_class_pos_[class_number];
return char_class_.is_included(rp.first, rp.second, c);
}
#if !defined(SRELLDBG_NO_CCPOS)
// bool is_included(const uint_l32 pos, const uint_l32 len, const uchar32 &c) const
bool is_included(const uchar32 pos, const uchar32 len, const uchar32 c) const
{
return char_class_el_.is_included_el(pos, len, c);
}
#endif
void setup_icase_word()
{
range_pair &icase_pos = char_class_pos_[icase_word];
if (icase_pos.second == char_class_pos_[word].second)
{
range_pairs icasewordclass(char_class_, icase_pos.first, icase_pos.second);
icasewordclass.make_caseunfoldedcharset();
// Includes 017f and 212a so that they and their case-folded
// characters 's' and 'k' will be excluded from the character
// set that /[\W]/i matches.
char_class_.replace(icase_pos.first, icase_pos.second, icasewordclass);
if (icase_pos.second < static_cast<uchar32>(icasewordclass.size()))
{
const uchar32 delta = static_cast<uchar32>(icasewordclass.size() - icase_pos.second);
for (int i = number_of_predefcls; i < static_cast<int>(char_class_pos_.size()); ++i)
char_class_pos_[i].first += delta;
}
icase_pos.second = static_cast<uchar32>(icasewordclass.size());
}
}
void clear()
{
char_class_pos_.resize(number_of_predefcls);
uchar32 basesize = 0;
for (int i = 0; i < number_of_predefcls; ++i)
basesize += char_class_pos_[i].second;
char_class_.resize(basesize);
#if !defined(SRELLDBG_NO_CCPOS)
char_class_el_.clear();
char_class_pos_el_.clear();
#endif
}
uint_l32 register_newclass(const range_pairs &rps)
{
for (range_pairs::size_type no = 0; no < char_class_pos_.size(); ++no)
{
const range_pair &rp = char_class_pos_[no];
if (char_class_.same(rp.first, rp.second, rps))
return static_cast<uint_l32>(no);
}
append_charclass(rps);
return static_cast<uint_l32>(char_class_pos_.size() - 1);
}
range_pairs operator[](const uint_l32 no) const
{
const range_pair &ccpos = char_class_pos_[no];
range_pairs rp(ccpos.second);
for (uchar32 i = 0; i < ccpos.second; ++i)
rp[i] = char_class_[ccpos.first + i];
return rp;
}
#if !defined(SRELLDBG_NO_CCPOS)
const range_pair &charclasspos(const uint_l32 no) // const
{
const range_pair &pos = char_class_pos_el_[no];
if (pos.second == 0)
finalise(no);
return pos;
}
void finalise()
{
char_class_el_.clear();
char_class_pos_el_.resize(char_class_pos_.size());
std::memset(&char_class_pos_el_[0], 0, char_class_pos_el_.size() * sizeof (range_pairs::array_type::value_type));
}
void finalise(const uint_l32 no)
{
const range_pair &posinfo = char_class_pos_[no];
range_pair &outpair = char_class_pos_el_[no];
outpair.first = static_cast<uchar32>(char_class_el_.size());
outpair.second = char_class_el_.create_el(&char_class_[posinfo.first], posinfo.second); //arraysize;
}
#endif // #if !defined(SRELLDBG_NO_CCPOS)
void optimise()
{
}
#if !defined(SRELL_NO_UNICODE_PROPERTY)
uint_l32 lookup_property(const pstring &pname, const pstring &pvalue, const bool icase)
{
const uint_l32 property_number = static_cast<uint_l32>(unicode_property::lookup_property(pname, pvalue));
if (property_number != unicode_property::error_property && property_number < unicode_property::number_of_properties)
{
const uint_l32 charclass_number = register_property_as_charclass(property_number, icase);
return charclass_number;
}
return error_property;
}
#endif // !defined(SRELL_NO_UNICODE_PROPERTY)
void swap(re_character_class &right)
{
if (this != &right)
{
this->char_class_.swap(right.char_class_);
this->char_class_pos_.swap(right.char_class_pos_);
#if !defined(SRELLDBG_NO_CCPOS)
this->char_class_el_.swap(right.char_class_el_);
this->char_class_pos_el_.swap(right.char_class_pos_el_);
#endif
}
}
private:
#if !defined(SRELL_NO_UNICODE_PROPERTY)
uint_l32 register_property_as_charclass(const uint_l32 property_number, const bool icase)
{
if (property_number == unicode_property::bp_Assigned)
{
// \p{Assigned} == \P{Cn}
return load_updata_and_register_as_charclass(unicode_property::gc_Cn, false, true);
}
return load_updata_and_register_as_charclass(property_number, icase, false);
}
uint_l32 load_updata_and_register_as_charclass(const uint_l32 property_number, const bool /* icase */, const bool negation)
{
const uchar32 *const address = unicode_property::ranges_address(property_number);
// const std::size_t offset = unicode_property::ranges_offset(property_number);
const std::size_t number = unicode_property::number_of_ranges(property_number);
range_pairs newranges;
newranges.load_from_memory(address, number);
if (negation)
newranges.negation();
return register_newclass(newranges);
}
#endif // !defined(SRELL_NO_UNICODE_PROPERTY)
void append_charclass(const range_pairs &rps)
{
char_class_pos_.push_back(range_pair_helper(static_cast<uchar32>(char_class_.size()), static_cast<uchar32>(rps.size())));
char_class_.append_newclass(rps);
}
// The production CharacterClassEscape::s evaluates as follows:
// Return the set of characters containing the characters that are on the right-hand side of the WhiteSpace or LineTerminator productions.
// WhiteSpace::<TAB> <VT> <FF> <SP> <NBSP> <ZWNBSP> <USP>
// 0009 000B 000C 0020 00A0 FEFF Zs
// LineTerminator::<LF> <CR> <LS> <PS>
// 000A 000D 2028 2029
void setup_predefinedclass()
{
#if !defined(SRELL_NO_UNICODE_PROPERTY)
const uchar32 *const Zs_address = unicode_property::ranges_address(unicode_property::gc_Zs);
// const std::size_t Zs_offset = unicode_property::ranges_offset(unicode_property::gc_Zs);
const std::size_t Zs_number = unicode_property::number_of_ranges(unicode_property::gc_Zs);
#else
static const uchar32 Zs[] = {
0x1680, 0x1680, 0x2000, 0x200a, // 0x2028, 0x2029,
0x202f, 0x202f, 0x205f, 0x205f, 0x3000, 0x3000
};
#endif // defined(SRELL_NO_UNICODE_PROPERTY)
static const uchar32 allranges[] = {
// dotall.
0x0000, 0x10ffff,
// newline.
0x0a, 0x0a, 0x0d, 0x0d, // \n \r
// newline, space.
0x2028, 0x2029,
// space.
0x09, 0x0d, // \t \n \v \f \r
0x20, 0x20, // ' '
0xa0, 0xa0, // <NBSP>
0xfeff, 0xfeff, // <BOM>
// digit, word.
0x30, 0x39, // '0'-'9'
0x41, 0x5a, 0x5f, 0x5f, 0x61, 0x7a // 'A'-'Z' '_' 'a'-'z'
};
range_pairs ranges;
// newline.
ranges.load_from_memory(&allranges[2], 3);
append_charclass(ranges);
// dotall.
ranges.clear();
ranges.load_from_memory(&allranges[0], 1);
append_charclass(ranges);
// space.
ranges.clear();
ranges.load_from_memory(&allranges[6], 5);
#if !defined(SRELL_NO_UNICODE_PROPERTY)
ranges.load_from_memory(Zs_address, Zs_number);
#else
ranges.load_from_memory(Zs, 5);
#endif
append_charclass(ranges);
// digit.
ranges.clear();
ranges.load_from_memory(&allranges[16], 1);
append_charclass(ranges);
// word.
ranges.clear();
ranges.load_from_memory(&allranges[16], 4);
append_charclass(ranges);
// Reservation for icase_word.
append_charclass(ranges);
}
private:
range_pairs char_class_;
range_pairs::array_type char_class_pos_;
#if !defined(SRELLDBG_NO_CCPOS)
range_pairs char_class_el_;
range_pairs::array_type char_class_pos_el_;
#endif
public: // For debug.
void print_classes(const int) const;
};
// re_character_class
} // namespace regex_internal
// ... "rei_char_class.hpp"]
// ["rei_groupname_mapper.hpp" ...
namespace regex_internal
{
#if !defined(SRELL_NO_NAMEDCAPTURE)
template <typename charT, typename numberT>
class groupname_and_backrefnumber_mapper
{
public:
typedef simple_array<charT> gname_string;
typedef typename gname_string::size_type size_type;
static const numberT notfound = static_cast<numberT>(-1);
groupname_and_backrefnumber_mapper()
{
}
groupname_and_backrefnumber_mapper(const groupname_and_backrefnumber_mapper &right)
: names_(right.names_), keysize_classno_(right.keysize_classno_)
{
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
groupname_and_backrefnumber_mapper(groupname_and_backrefnumber_mapper &&right) SRELL_NOEXCEPT
: names_(std::move(right.names_)), keysize_classno_(std::move(right.keysize_classno_))
{
}
#endif
groupname_and_backrefnumber_mapper &operator=(const groupname_and_backrefnumber_mapper &right)
{
if (this != &right)
{
names_ = right.names_;
keysize_classno_ = right.keysize_classno_;
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
groupname_and_backrefnumber_mapper &operator=(groupname_and_backrefnumber_mapper &&right) SRELL_NOEXCEPT
{
if (this != &right)
{
names_ = std::move(right.names_);
keysize_classno_ = std::move(right.keysize_classno_);
}
return *this;
}
#endif
void clear()
{
names_.clear();
keysize_classno_.clear();
}
numberT operator[](const gname_string &gname) const
{
numberT pos = 0;
for (std::size_t i = 0; i < static_cast<std::size_t>(keysize_classno_.size()); i += 2)
{
const numberT keysize = keysize_classno_[i];
if (keysize == static_cast<numberT>(gname.size()) && sameseq(pos, gname))
return keysize_classno_[++i];
pos += keysize;
}
return notfound;
}
gname_string operator[](const numberT indexno) const
{
numberT pos = 0;
for (std::size_t i = 0; i < static_cast<std::size_t>(keysize_classno_.size()); ++i)
{
const numberT keysize = keysize_classno_[i];
const numberT classno = keysize_classno_[++i];
if (classno == indexno)
return gname_string(names_, pos, keysize);
pos += keysize;
}
return gname_string();
}
size_type size() const
{
return static_cast<size_type>(keysize_classno_.size() >> 1);
}
bool push_back(const gname_string &gname, const numberT class_number)
{
const numberT num = operator[](gname);
if (num == notfound)
{
names_.append(gname);
keysize_classno_.append(1, static_cast<numberT>(gname.size()));
keysize_classno_.append(1, class_number);
return true;
}
return false; // Already exists.
}
void swap(groupname_and_backrefnumber_mapper &right)
{
this->names_.swap(right.names_);
keysize_classno_.swap(right.keysize_classno_);
}
private:
bool sameseq(size_type pos, const gname_string &gname) const
{
for (size_type i = 0; i < gname.size(); ++i, ++pos)
if (pos >= names_.size() || names_[pos] != gname[i])
return false;
return true;
}
gname_string names_;
simple_array<numberT> keysize_classno_;
public: // For debug.
void print_mappings(const int) const;
};
// groupname_and_backrefnumber_mapper
template <typename charT>
class groupname_mapper : public groupname_and_backrefnumber_mapper<charT, uint_l32>
{
};
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
} // namespace regex_internal
// ... "rei_groupname_mapper.hpp"]
// ["rei_state.hpp" ...
namespace regex_internal
{
struct re_quantifier
{
static const uint_l32 infinity = static_cast<uint_l32>(~0);
// atleast and atmost: for check_counter.
// offset and length: for charcter_class.
// (Special case 1) in roundbracket_open and roundbracket_pop atleast and atmost represent
// the minimum and maximum bracket numbers respectively inside the brackets itself.
// (Special case 2) in repeat_in_push and repeat_in_pop atleast and atmost represent the
// minimum and maximum bracket numbers respectively inside the repetition.
union
{
uint_l32 atleast;
// (Special case 3: v1) in lookaround_open represents the number of characters to be rewound.
// (Special case 3: v2) in lookaround_open represents: 0=lookaheads, 1=lookbehinds,
// 2=matchpointrewinder.
// (Special case 4) in NFA_states[0] represents the class number of the first character class.
uchar32 offset;
};
union
{
uint_l32 atmost;
uchar32 length;
};
union
{
bool is_greedy;
uint_l32 padding_;
};
void reset(const uint_l32 len = 1)
{
atleast = atmost = len;
is_greedy = true;
}
void set(const uint_l32 min, const uint_l32 max)
{
atleast = min;
atmost = max;
}
void set(const uint_l32 min, const uint_l32 max, const bool greedy)
{
atleast = min;
atmost = max;
is_greedy = greedy;
}
void setccpos(const uchar32 o, const uchar32 l)
{
offset = o;
length = l;
}
bool is_valid() const
{
return atleast <= atmost && atmost > 0;
}
void set_infinity()
{
atmost = infinity;
}
bool is_infinity() const
{
return atmost == infinity;
}
bool is_same() const
{
return atleast == atmost;
}
bool is_default() const
{
return atleast == 1 && atmost == 1;
}
bool is_asterisk() const
{
return atleast == 0 && atmost == infinity;
}
bool is_plus() const
{
return atleast == 1 && atmost == infinity;
}
bool is_asterisk_or_plus() const
{
return atleast <= 1 && atmost == infinity;
}
bool is_question_or_asterisk() const
{
return atleast == 0 && (atmost == 1 || atmost == infinity);
}
bool has_simple_equivalence() const
{
return (atleast <= 1 && atmost <= 3) || (atleast == 2 && atmost <= 4) || (atleast == atmost && atmost <= 6);
}
void multiply(const re_quantifier &q)
{
if (atleast != infinity)
{
if (q.atleast != infinity)
atleast *= q.atleast;
else
atleast = infinity;
}
if (atmost != infinity)
{
if (q.atmost != infinity)
atmost *= q.atmost;
else
atmost = infinity;
}
}
void add(const re_quantifier &q)
{
if (atleast != infinity)
{
if (q.atleast != infinity && (atleast + q.atleast) >= atleast)
atleast += q.atleast;
else
atleast = infinity;
}
if (atmost != infinity)
{
if (q.atmost != infinity && (atmost + q.atmost) >= atmost)
atmost += q.atmost;
else
atmost = infinity;
}
}
};
// re_quantifier
struct re_state
{
union
{
uchar32 character; // For character.
uint_l32 number; // For character_class, brackets, counter, repeat, backreference.
};
re_state_type type;
union
{
std::ptrdiff_t next1;
re_state *next_state1;
// Points to the next state.
// (Special case 1) in lookaround_open points to the next of lookaround_close.
};
union
{
std::ptrdiff_t next2;
re_state *next_state2;
// character and character_class: points to another possibility, non-backtracking.
// epsilon: points to another possibility, backtracking.
// save_and_reset_counter, roundbracket_open, and repeat_in_push: points to a
// restore state, backtracking.
// check_counter: complementary to next1 based on quantifier.is_greedy.
// (Special case 1) roundbracket_close, check_0_width_repeat, and backreference:
// points to the next state as an exit after 0 width match.
// (Special case 2) in NFA_states[0] holds the entry point for match_continuous/regex_match.
// (Special case 3) in lookaround_open points to the contents of brackets.
};
re_quantifier quantifier; // For check_counter, roundbrackets, repeasts, (?<=...) and (?<!...),
// and character_class.
union
{
bool is_not; // For \B, (?!...) and (?<!...).
bool dont_push; // For check_counter.
bool backrefnumber_unresolved; // For backreference (used only in compiler).
bool icase; // For [0] only.
bool multiline; // For bol, eol.
uint_l32 padding_;
};
// st_character, // 0x00
// char/number: character
// next1: gen.
// next2: +1 (exit. used only when '*' or '?')
// quantifiers: -
// is_not/dont_push: -
// st_character_class, // 0x01
// char/number: character class number
// next1: gen.
// next2: +1 (exit. used only when '*' or '?')
// quantifiers: -
// is_not/dont_push: -
// st_epsilon, // 0x02
// char/number: -
// next1: gen.
// next2: alt.
// quantifiers: -
// is_not/dont_push: -
// st_check_counter, // 0x03
// char/number: counter number
// next1: greedy: epsilon that may push backtracking data to decrement_counter.
// not-greedy: out-of-loop
// next2: complementary to next1
// q.atleast: gen.
// q.atmost: gen.
// q.greedy: gen.
// is_not/dont_push: - (was dont_push)
// st_decrement_counter, // 0x04
// char/number: counter number
// next1: 0 (always treated as "not matched")
// next2: 0
// quantifiers: -
// is_not/dont_push: -
// st_save_and_reset_counter, // 0x05
// char/number: counter number
// next1: +2 (check_counter)
// next2: +1 (restore_counter)
// quantifiers: -
// is_not/dont_push: - (was dont_push)
// st_restore_counter, // 0x06
// char/number: counter number
// next1: 0 (always treated as "not matched")
// next2: 0
// quantifiers: -
// is_not/dont_push: -
// st_roundbracket_open, // 0x07
// char/number: bracket number
// next1: +2 (next of roundbracket_pop, atom)
// next2: +1 (roundbracket_pop)
// q.atleast: min bracket number inside this bracket (except myself's number)
// q.atmost: max bracket number inside this bracket
// q.greedy: -
// is_not/dont_push: - (was dont_push)
// st_roundbracket_pop, // 0x08
// char/number: bracket number
// next1: 0 (always treated as "not matched")
// next2: 0
// q.atleast: min bracket number inside this bracket (i.except myself's number)
// q.atmost: max bracket number inside this bracket
// q.greedy: -
// is_not/dont_push: - (was dont_push)
// st_roundbracket_close, // 0x09
// char/number: bracket number
// next1: gen.
// next2: +1 (exit for 0 width loop)
// quantifiers: -
// is_not/dont_push: -
// st_repeat_in_push, // 0x0a
// char/number: repeat counter
// next1: +2 (next of repeat_in_pop, atom)
// next2: +1 (repeat_in_pop)
// quantifiers: -
// is_not/dont_push: -
// st_repeat_in_pop, // 0x0b
// char/number: repeat counter
// next1: 0 (always treated as "not matched")
// next2: 0
// quantifiers: -
// is_not/dont_push: -
// st_check_0_width_repeat, // 0x0c
// char/number: repeat counter
// next1: gen. (epsilon or check_counter)
// next2: +1 (exit for 0 width loop)
// quantifiers: -
// is_not/dont_push: -
// st_backreference, // 0x0d
// char/number: bracket number
// next1: gen.
// next2: +1 (exit for 0 width match)
// quantifiers: -
// is_not/dont_push: -
// st_lookaround_open, // 0x0e
// char/number: -
// next1: next of lookaround_close (to where jumps after lookaround assertion)
// next2: +2 (the contents of brackets)
// q.atleast: <fixed-width> number of chars to be rewound (for (?<=...) (?<!...))
// <variable-width> 0: lookahead, 1: lookbehind, 2: mprewinder.
// q.atmost: -
// q.greedy: -
// is_not/dont_push: not
// st_bol, // 0x0f
// char/number: -
// next1/next2: -
// quantifiers: -
// is_not/dont_push: -
// st_eol, // 0x10
// char/number: -
// next1/next2: -
// quantifiers: -
// is_not/dont_push: -
// st_boundary, // 0x11
// char/number: -
// next1/next2: -
// quantifiers: -
// is_not/dont_push: not
// st_success, // 0x12
// char/number: -
// next1/next2: -
// quantifiers: -
// is_not/dont_push: -
// st_move_nextpos, // 0x13
// char/number: -
// next1/next2: -
// quantifiers: -
// is_not/dont_push: -
void reset()
{
number = 0;
type = st_character;
next1 = 1;
next2 = 0;
is_not = false;
quantifier.reset();
}
bool is_character_or_class() const
{
return type == st_character || type == st_character_class;
}
bool has_quantifier() const
{
// 1. character: size == 1 && type == character,
// 2. [...]: size == 1 && type == character_class,
// 3. (...): size == ? && type == roundbracket_open,
// 4. (?:...): size == ? && type == epsilon && character == ':',
// 5. backref: size == ? && type == backreference,
// -- assertions boundary --
// 6. lookaround: size == ? && type == lookaround,
// 7. assertion: size == 0 && type == one of assertions (^, $, \b and \B).
#if !defined(SRELL_ENABLE_GT)
return type < st_zero_width_boundary;
#else
// 5.5. independent: size == ? && type == lookaround && character == '>',
return type < st_zero_width_boundary || (type == st_lookaround_open && character == meta_char::mc_gt);
#endif
}
bool is_noncapturinggroup() const
{
return type == st_epsilon && character == meta_char::mc_colon;
}
bool has_0widthchecker() const
{
return type == st_roundbracket_open || type == st_backreference;
}
bool is_negcharclass() const
{
return type == st_character_class && is_not;
}
bool is_branch() const
{
return type == st_epsilon && next2 != 0 && character == meta_char::mc_bar; // '|'
}
};
// re_state
template <typename charT>
//struct re_flags
struct re_compiler_state
{
// bool i;
// bool m;
// bool s;
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
bool back;
#endif
bool backref_used;
simple_array<uint_l32> atleast_widths_of_brackets;
#if !defined(SRELL_NO_NAMEDCAPTURE)
groupname_mapper<charT> unresolved_gnames;
#endif
#if !defined(SRELL_NO_UNICODE_PROPERTY)
identifier_charclass idchecker;
#endif
void reset(const regex_constants::syntax_option_type & /* flags */)
{
// i = (flags & regex_constants::icase) != 0; // Case-insensitive.
// m = (flags & regex_constants::multiline) != 0;
// s = (flags & regex_constants::dotall) != 0;
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
back = false;
#endif
backref_used = false;
atleast_widths_of_brackets.clear();
#if !defined(SRELL_NO_NAMEDCAPTURE)
unresolved_gnames.clear();
#endif
#if !defined(SRELL_NO_UNICODE_PROPERTY)
// idchecker.clear(); // Keeps data once created.
#endif
}
void restore_from(const re_compiler_state &backup)
{
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
back = backup.back;
#endif
}
};
// re_compiler_state
} // namespace regex_internal
// ... "rei_state.hpp"]
// ["rei_search_state.hpp" ...
template <typename BidirectionalIterator>
class sub_match /* : std::pair<BidirectionalIterator, BidirectionalIterator> */;
namespace regex_internal
{
//template <typename charT>
struct re_state;
template </* typename charT, */typename BidirectionalIterator>
struct re_search_state_core
{
const re_state/* <charT> */ *in_NFA_states;
BidirectionalIterator in_string;
};
template <typename BidirectionalIterator>
struct re_submatch_core
{
BidirectionalIterator open_at;
BidirectionalIterator close_at;
};
template <typename BidirectionalIterator>
struct re_submatch_type
{
re_submatch_core<BidirectionalIterator> core;
uint_l32 counter;
};
template </*typename charT, */typename BidirectionalIterator>
struct re_search_state_types
{
typedef re_submatch_core<BidirectionalIterator> submatch_core;
typedef re_submatch_type<BidirectionalIterator> submatch_type;
typedef uint_l32 counter_type;
typedef BidirectionalIterator position_type;
typedef std::vector<submatch_type> submatch_array;
typedef re_search_state_core</*charT, */BidirectionalIterator> search_core_state;
typedef std::vector<search_core_state> backtracking_array;
typedef std::vector<submatch_core> capture_array;
typedef simple_array<counter_type> counter_array;
typedef std::vector<position_type> repeat_array;
};
template </*typename charT1, */typename charT2>
struct re_search_state_types</*charT1, */const charT2 *>
{
typedef re_submatch_core<const charT2 *> submatch_core;
typedef re_submatch_type<const charT2 *> submatch_type;
typedef uint_l32 counter_type;
typedef const charT2 *position_type;
typedef simple_array<submatch_type> submatch_array;
typedef re_search_state_core</*charT1, */const charT2 *> search_core_state;
typedef simple_array<search_core_state> backtracking_array;
typedef simple_array<submatch_core> capture_array;
typedef simple_array<position_type> repeat_array;
typedef simple_array<counter_type> counter_array;
};
// re_search_state_types
template </*typename charT, */typename BidirectionalIterator>
class re_search_state : public re_search_state_types</*charT, */BidirectionalIterator>
{
private:
typedef re_search_state_types</*charT, */BidirectionalIterator> base_type;
public:
typedef typename base_type::submatch_core submatchcore_type;
typedef typename base_type::submatch_type submatch_type;
typedef typename base_type::counter_type counter_type;
typedef typename base_type::position_type position_type;
typedef typename base_type::submatch_array submatch_array;
typedef typename base_type::search_core_state search_core_state;
typedef typename base_type::backtracking_array backtracking_array;
typedef typename base_type::capture_array capture_array;
typedef typename base_type::counter_array counter_array;
typedef typename base_type::repeat_array repeat_array;
typedef typename backtracking_array::size_type btstack_size_type;
public:
struct bottom_state
{
btstack_size_type btstack_size;
typename capture_array::size_type capturestack_size;
typename counter_array::size_type counterstack_size;
typename repeat_array::size_type repeatstack_size;
bottom_state(
const btstack_size_type bt,
const typename capture_array::size_type h,
const typename counter_array::size_type c,
const typename repeat_array::size_type r)
: btstack_size(bt)
, capturestack_size(h)
, counterstack_size(c)
, repeatstack_size(r)
{
}
};
public:
search_core_state nth;
#if !defined(SRELL_NO_LIMIT_COUNTER)
std::size_t failure_counter;
#endif
BidirectionalIterator srchend;
BidirectionalIterator lblim;
BidirectionalIterator nextpos;
backtracking_array bt_stack;
capture_array capture_stack;
counter_array counter_stack;
repeat_array repeat_stack;
submatch_array bracket;
counter_array counter;
repeat_array repeat;
btstack_size_type btstack_size;
BidirectionalIterator srchbegin;
public:
void init
(
const BidirectionalIterator begin,
const BidirectionalIterator end,
const BidirectionalIterator lookbehindlimit,
const regex_constants::match_flag_type flags
)
{
lblim = lookbehindlimit;
nextpos = srchbegin = begin;
srchend = end;
flags_ = flags;
}
void set_entrypoint(const re_state *const entry)
{
entry_state_ = entry;
}
void init_for_automaton
(
uint_l32 num_of_submatches,
const uint_l32 num_of_counters,
const uint_l32 num_of_repeats
)
{
bracket.resize(num_of_submatches);
counter.resize(num_of_counters);
repeat.resize(num_of_repeats);
nth.in_string = (flags_ & regex_constants::match_continuous) ? srchbegin : srchend;
while (num_of_submatches > 1)
{
submatch_type &br = bracket[--num_of_submatches];
br.core.open_at = br.core.close_at = this->srchend;
br.counter = 0;
// 15.10.2.9; AtomEscape:
// If the regular expression has n or more capturing parentheses
// but the nth one is undefined because it hasn't captured anything,
// then the backreference always succeeds.
// C.f., table 27 and 28 on TR1, table 142 and 143 on C++11.
}
clear_stacks();
}
#if defined(SRELL_NO_LIMIT_COUNTER)
void reset(/* const BidirectionalIterator start */)
#else
void reset(/* const BidirectionalIterator start, */ const std::size_t limit)
#endif
{
nth.in_NFA_states = this->entry_state_;
bracket[0].core.open_at = nth.in_string;
#if !defined(SRELL_NO_LIMIT_COUNTER)
failure_counter = limit;
#endif
}
bool is_at_lookbehindlimit() const
{
return nth.in_string == this->lblim;
}
bool is_at_srchend() const
{
return nth.in_string == this->srchend;
}
bool is_null() const
{
return nth.in_string == bracket[0].core.open_at;
}
// regex_constants::match_flag_type flags() const
// {
// return this->flags_;
// }
bool match_not_bol_flag() const
{
if (this->flags_ & regex_constants::match_not_bol)
return true;
return false;
}
bool match_not_eol_flag() const
{
if (this->flags_ & regex_constants::match_not_eol)
return true;
return false;
}
bool match_not_bow_flag() const
{
if (this->flags_ & regex_constants::match_not_bow)
return true;
return false;
}
bool match_not_eow_flag() const
{
if (this->flags_ & regex_constants::match_not_eow)
return true;
return false;
}
bool match_prev_avail_flag() const
{
if (this->flags_ & regex_constants::match_prev_avail)
return true;
return false;
}
bool match_not_null_flag() const
{
if (this->flags_ & regex_constants::match_not_null)
return true;
return false;
}
bool match_continuous_flag() const
{
if (this->flags_ & regex_constants::match_continuous)
return true;
return false;
}
bool match_match_flag() const
{
if (this->flags_ & regex_constants::match_match_)
return true;
return false;
}
bool set_bracket0(const BidirectionalIterator begin, const BidirectionalIterator end)
{
nth.in_string = begin;
nextpos = end;
return true;
}
void clear_stacks()
{
btstack_size = 0;
bt_stack.clear();
capture_stack.clear();
repeat_stack.clear();
counter_stack.clear();
}
btstack_size_type size() const // For debug.
{
return bt_stack.size();
}
bool is_empty() const // For debug.
{
if (btstack_size == 0
&& bt_stack.size() == 0
&& capture_stack.size() == 0
&& repeat_stack.size() == 0
&& counter_stack.size() == 0)
return true;
return false;
}
private:
/* const */regex_constants::match_flag_type flags_;
const re_state/* <charT> */ * /* const */entry_state_;
};
// re_search_state
} // namespace regex_internal
// ... "rei_search_state.hpp"]
// ["rei_bmh.hpp" ...
namespace regex_internal
{
#if !defined(SRELLDBG_NO_BMH)
template <typename charT, typename utf_traits>
class re_bmh
{
public:
re_bmh()
{
}
re_bmh(const re_bmh &right)
{
operator=(right);
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
re_bmh(re_bmh &&right) SRELL_NOEXCEPT
{
operator=(std::move(right));
}
#endif
re_bmh &operator=(const re_bmh &that)
{
if (this != &that)
{
this->u32string_ = that.u32string_;
this->bmtable_ = that.bmtable_;
this->repseq_ = that.repseq_;
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
re_bmh &operator=(re_bmh &&that) SRELL_NOEXCEPT
{
if (this != &that)
{
this->u32string_ = std::move(that.u32string_);
this->bmtable_ = std::move(that.bmtable_);
this->repseq_ = std::move(that.repseq_);
}
return *this;
}
#endif
void clear()
{
u32string_.clear();
bmtable_.clear();
repseq_.clear();
}
void setup(const simple_array<uchar32> &u32s, const bool icase)
{
u32string_ = u32s;
setup_();
if (!icase)
setup_for_casesensitive();
else
setup_for_icase();
}
template <typename RandomAccessIterator>
bool do_casesensitivesearch(re_search_state<RandomAccessIterator> &sstate, const std::random_access_iterator_tag) const
{
RandomAccessIterator begin = sstate.srchbegin;
const RandomAccessIterator end = sstate.srchend;
std::size_t offset = static_cast<std::size_t>(repseq_.size() - 1);
const charT *const relastchar = &repseq_[offset];
for (; static_cast<std::size_t>(end - begin) > offset;)
{
begin += offset;
if (*begin == *relastchar)
{
const charT *re = relastchar;
RandomAccessIterator tail = begin;
for (; *--re == *--tail;)
{
if (re == repseq_.data())
return sstate.set_bracket0(tail, ++begin);
}
}
offset = bmtable_[*begin & 0xff];
}
return false;
}
template <typename BidirectionalIterator>
bool do_casesensitivesearch(re_search_state<BidirectionalIterator> &sstate, const std::bidirectional_iterator_tag) const
{
BidirectionalIterator begin = sstate.srchbegin;
const BidirectionalIterator end = sstate.srchend;
std::size_t offset = static_cast<std::size_t>(repseq_.size() - 1);
const charT *const relastchar = &repseq_[offset];
for (;;)
{
for (; offset; --offset, ++begin)
if (begin == end)
return false;
if (*begin == *relastchar)
{
const charT *re = relastchar;
BidirectionalIterator tail = begin;
for (; *--re == *--tail;)
{
if (re == repseq_.data())
return sstate.set_bracket0(tail, ++begin);
}
}
offset = bmtable_[*begin & 0xff];
}
}
template <typename RandomAccessIterator>
bool do_icasesearch(re_search_state<RandomAccessIterator> &sstate, const std::random_access_iterator_tag) const
{
const RandomAccessIterator begin = sstate.srchbegin;
const RandomAccessIterator end = sstate.srchend;
std::size_t offset = bmtable_[256];
const uchar32 entrychar = u32string_[u32string_.size() - 1];
const uchar32 *const re2ndlastchar = &u32string_[u32string_.size() - 2];
RandomAccessIterator curpos = begin;
for (; static_cast<std::size_t>(end - curpos) > offset;)
{
curpos += offset;
for (; utf_traits::is_trailing(*curpos);)
if (++curpos == end)
return false;
const uchar32 txtlastchar = utf_traits::codepoint(curpos, end);
if (txtlastchar == entrychar || unicode_case_folding::do_casefolding(txtlastchar) == entrychar)
{
const uchar32 *re = re2ndlastchar;
RandomAccessIterator tail = curpos;
// for (; *--re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin));)
for (; *re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin)); --re)
{
if (re == u32string_.data())
{
utf_traits::codepoint_inc(curpos, end);
return sstate.set_bracket0(tail, curpos);
}
if (tail == begin)
break;
}
}
offset = bmtable_[txtlastchar & 0xff];
}
return false;
}
template <typename BidirectionalIterator>
bool do_icasesearch(re_search_state<BidirectionalIterator> &sstate, const std::bidirectional_iterator_tag) const
{
const BidirectionalIterator begin = sstate.srchbegin;
const BidirectionalIterator end = sstate.srchend;
if (begin != end)
{
std::size_t offset = bmtable_[256]; //static_cast<std::size_t>(u32string_.size() - 1);
const uchar32 entrychar = u32string_[offset];
const uchar32 *const re2ndlastchar = &u32string_[offset - 1];
BidirectionalIterator curpos = begin;
for (;;)
{
for (;;)
{
if (++curpos == end)
return false;
if (!utf_traits::is_trailing(*curpos))
if (--offset == 0)
break;
}
// const uchar32 txtlastchar = unicode_case_folding::do_casefolding(utf_traits::codepoint(curpos, end));
const uchar32 txtlastchar = utf_traits::codepoint(curpos, end);
// if (txtlastchar == *re2ndlastchar)
// if (txtlastchar == *re2ndlastchar || unicode_case_folding::do_casefolding(txtlastchar) == *re2ndlastchar)
if (txtlastchar == entrychar || unicode_case_folding::do_casefolding(txtlastchar) == entrychar)
{
const uchar32 *re = re2ndlastchar;
BidirectionalIterator tail = curpos;
for (; *re == unicode_case_folding::do_casefolding(utf_traits::dec_codepoint(tail, begin)); --re)
{
if (re == u32string_.data())
{
utf_traits::codepoint_inc(curpos, end);
return sstate.set_bracket0(tail, curpos);
}
if (tail == begin)
break;
}
}
offset = bmtable_[txtlastchar & 0xff];
}
}
return false;
}
private:
void setup_()
{
bmtable_.resize(257);
}
void setup_for_casesensitive()
{
charT mbstr[utf_traits::maxseqlen];
const std::size_t u32str_lastcharpos_ = static_cast<std::size_t>(u32string_.size() - 1);
repseq_.clear();
for (std::size_t i = 0; i <= u32str_lastcharpos_; ++i)
{
const uchar32 seqlen = utf_traits::to_codeunits(mbstr, u32string_[i]);
for (uchar32 j = 0; j < seqlen; ++j)
repseq_.push_back(mbstr[j]);
}
for (std::size_t i = 0; i < 256; ++i)
bmtable_[i] = static_cast<std::size_t>(repseq_.size());
const std::size_t repseq_lastcharpos_ = static_cast<std::size_t>(repseq_.size() - 1);
for (std::size_t i = 0; i < repseq_lastcharpos_; ++i)
bmtable_[repseq_[i] & 0xff] = repseq_lastcharpos_ - i;
}
void setup_for_icase()
{
charT mbstr[utf_traits::maxseqlen];
uchar32 u32table[unicode_case_folding::rev_maxset];
const std::size_t u32str_lastcharpos = static_cast<std::size_t>(u32string_.size() - 1);
simple_array<std::size_t> minlen(u32string_.size());
std::size_t cu_repseq_lastcharpos = 0;
for (std::size_t i = 0; i <= u32str_lastcharpos; ++i)
{
const uchar32 setnum = unicode_case_folding::casefoldedcharset(u32table, u32string_[i]);
uchar32 u32c = u32table[0];
for (uchar32 j = 1; j < setnum; ++j)
if (u32c > u32table[j])
u32c = u32table[j];
if (i < u32str_lastcharpos)
cu_repseq_lastcharpos += minlen[i] = utf_traits::to_codeunits(mbstr, u32c);
}
++cu_repseq_lastcharpos;
for (std::size_t i = 0; i < 256; ++i)
bmtable_[i] = cu_repseq_lastcharpos;
bmtable_[256] = --cu_repseq_lastcharpos;
for (std::size_t i = 0; i < u32str_lastcharpos; ++i)
{
const uchar32 setnum = unicode_case_folding::casefoldedcharset(u32table, u32string_[i]);
for (uchar32 j = 0; j < setnum; ++j)
bmtable_[u32table[j] & 0xff] = cu_repseq_lastcharpos;
cu_repseq_lastcharpos -= minlen[i];
}
}
public: // For debug.
void print_table() const;
void print_seq() const;
private:
simple_array<uchar32> u32string_;
// std::size_t bmtable_[256];
simple_array<std::size_t> bmtable_;
simple_array<charT> repseq_;
};
// re_bmh
#endif // !defined(SRELLDBG_NO_BMH)
} // namespace regex_internal
// ... "rei_bmh.hpp"]
// ["rei_compiler.hpp" ...
namespace regex_internal
{
template <typename charT, typename traits>
struct re_object_core
{
protected:
typedef re_state/*<charT>*/ state_type;
typedef simple_array<state_type> state_array;
state_array NFA_states;
re_character_class character_class;
#if !defined(SRELLDBG_NO_1STCHRCLS)
#if !defined(SRELLDBG_NO_BITSET)
bitset<traits::utf_traits::bitsetsize> firstchar_class_bs;
#else
range_pairs firstchar_class;
#endif
#endif
#if !defined(SRELL_NO_LIMIT_COUNTER)
public:
std::size_t limit_counter;
protected:
#endif
typedef typename traits::utf_traits utf_traits;
uint_l32 number_of_brackets;
uint_l32 number_of_counters;
uint_l32 number_of_repeats;
regex_constants::syntax_option_type soflags;
#if !defined(SRELL_NO_NAMEDCAPTURE)
groupname_mapper<charT> namedcaptures;
typedef typename groupname_mapper<charT>::gname_string gname_string;
#endif
#if !defined(SRELLDBG_NO_BMH)
re_bmh<charT, utf_traits> *bmdata;
#endif
#if !defined(SRELL_NO_LIMIT_COUNTER)
private:
static const std::size_t lcounter_defnum_ = 16777216;
#endif
protected:
re_object_core()
#if !defined(SRELL_NO_LIMIT_COUNTER)
: limit_counter(lcounter_defnum_)
#if !defined(SRELLDBG_NO_BMH)
, bmdata(NULL)
#endif
#elif !defined(SRELLDBG_NO_BMH)
: bmdata(NULL)
#endif
{
}
re_object_core(const re_object_core &right)
#if !defined(SRELLDBG_NO_BMH)
: bmdata(NULL)
#endif
{
operator=(right);
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
re_object_core(re_object_core &&right) SRELL_NOEXCEPT
#if !defined(SRELLDBG_NO_BMH)
: bmdata(NULL)
#endif
{
operator=(std::move(right));
}
#endif
#if !defined(SRELLDBG_NO_BMH)
~re_object_core()
{
if (bmdata)
delete bmdata;
}
#endif
void reset(const regex_constants::syntax_option_type flags)
{
NFA_states.clear();
character_class.clear();
#if !defined(SRELLDBG_NO_1STCHRCLS)
#if !defined(SRELLDBG_NO_BITSET)
firstchar_class_bs.reset();
#else
firstchar_class.clear();
#endif
#endif
#if !defined(SRELL_NO_LIMIT_COUNTER)
limit_counter = lcounter_defnum_;
#endif
number_of_brackets = 1;
number_of_counters = 0;
number_of_repeats = 0;
soflags = flags; // regex_constants::ECMAScript;
#if !defined(SRELL_NO_NAMEDCAPTURE)
namedcaptures.clear();
#endif
#if !defined(SRELLDBG_NO_BMH)
// bmdata->clear();
if (bmdata)
delete bmdata;
bmdata = NULL;
#endif
}
re_object_core &operator=(const re_object_core &that)
{
if (this != &that)
{
this->NFA_states = that.NFA_states;
this->character_class = that.character_class;
#if !defined(SRELLDBG_NO_1STCHRCLS)
#if !defined(SRELLDBG_NO_BITSET)
this->firstchar_class_bs = that.firstchar_class_bs;
#else
this->firstchar_class = that.firstchar_class;
#endif
#endif
#if !defined(SRELL_NO_LIMIT_COUNTER)
this->limit_counter = that.limit_counter;
#endif
// this->utf_traits_inst = that.utf_traits_inst;
this->number_of_brackets = that.number_of_brackets;
this->number_of_counters = that.number_of_counters;
this->number_of_repeats = that.number_of_repeats;
this->soflags = that.soflags;
#if !defined(SRELL_NO_NAMEDCAPTURE)
this->namedcaptures = that.namedcaptures;
#endif
#if !defined(SRELLDBG_NO_BMH)
if (that.bmdata)
{
if (this->bmdata)
*this->bmdata = *that.bmdata;
else
this->bmdata = new re_bmh<charT, utf_traits>(*that.bmdata);
}
else if (this->bmdata)
{
delete this->bmdata;
this->bmdata = NULL;
}
#endif
if (that.NFA_states.size())
repair_nextstates(&that.NFA_states[0]);
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
re_object_core &operator=(re_object_core &&that) SRELL_NOEXCEPT
{
if (this != &that)
{
this->NFA_states = std::move(that.NFA_states);
this->character_class = std::move(that.character_class);
#if !defined(SRELLDBG_NO_1STCHRCLS)
#if !defined(SRELLDBG_NO_BITSET)
this->firstchar_class_bs = std::move(that.firstchar_class_bs);
#else
this->firstchar_class = std::move(that.firstchar_class);
#endif
#endif
#if !defined(SRELL_NO_LIMIT_COUNTER)
this->limit_counter = that.limit_counter;
#endif
this->number_of_brackets = that.number_of_brackets;
this->number_of_counters = that.number_of_counters;
this->number_of_repeats = that.number_of_repeats;
this->soflags = that.soflags;
#if !defined(SRELL_NO_NAMEDCAPTURE)
this->namedcaptures = std::move(that.namedcaptures);
#endif
#if !defined(SRELLDBG_NO_BMH)
if (this->bmdata)
delete this->bmdata;
this->bmdata = that.bmdata;
that.bmdata = NULL;
#endif
}
return *this;
}
#endif // defined(SRELL_CPP11_MOVE_ENABLED)
void swap(re_object_core &right)
{
if (this != &right)
{
this->NFA_states.swap(right.NFA_states);
this->character_class.swap(right.character_class);
#if !defined(SRELLDBG_NO_1STCHRCLS)
#if !defined(SRELLDBG_NO_BITSET)
this->firstchar_class_bs.swap(right.firstchar_class_bs);
#else
this->firstchar_class.swap(right.firstchar_class);
#endif
#endif
#if !defined(SRELL_NO_LIMIT_COUNTER)
{
const std::size_t tmp_limit_counter = this->limit_counter;
this->limit_counter = right.limit_counter;
right.limit_counter = tmp_limit_counter;
}
#endif
// this->utf_traits_inst.swap(right.utf_traits_inst);
{
const uint_l32 tmp_numof_brackets = this->number_of_brackets;
this->number_of_brackets = right.number_of_brackets;
right.number_of_brackets = tmp_numof_brackets;
}
{
const uint_l32 tmp_numof_counters = this->number_of_counters;
this->number_of_counters = right.number_of_counters;
right.number_of_counters = tmp_numof_counters;
}
{
const uint_l32 tmp_numof_repeats = this->number_of_repeats;
this->number_of_repeats = right.number_of_repeats;
right.number_of_repeats = tmp_numof_repeats;
}
{
const regex_constants::syntax_option_type tmp_soflags = this->soflags;
this->soflags = right.soflags;
right.soflags = tmp_soflags;
}
#if !defined(SRELL_NO_NAMEDCAPTURE)
this->namedcaptures.swap(right.namedcaptures);
#endif
#if !defined(SRELLDBG_NO_BMH)
{
re_bmh<charT, utf_traits> *const tmp_bmdata = this->bmdata;
this->bmdata = right.bmdata;
right.bmdata = tmp_bmdata;
}
#endif
}
}
void throw_error(const regex_constants::error_type &e)
{
// reset();
NFA_states.clear();
#if !defined(SRELLDBG_NO_BMH)
if (bmdata)
delete bmdata;
bmdata = NULL;
#endif
throw regex_error(e);
}
private:
void repair_nextstates(const state_type *const oldbase)
{
state_type *const newbase = &this->NFA_states[0];
for (typename state_array::size_type i = 0; i < this->NFA_states.size(); ++i)
{
state_type &state = this->NFA_states[i];
if (state.next_state1)
state.next_state1 = state.next_state1 - oldbase + newbase;
if (state.next_state2)
state.next_state2 = state.next_state2 - oldbase + newbase;
}
}
};
// re_object_core
template <typename charT, typename traits>
class re_compiler : public re_object_core<charT, traits>
{
protected:
template <typename ForwardIterator>
bool compile(ForwardIterator begin, const ForwardIterator end, const regex_constants::syntax_option_type flags /* = regex_constants::ECMAScript */)
{
simple_array<uchar32> u32;
while (begin != end)
{
const uchar32 u32c = utf_traits::codepoint_inc(begin, end);
if (u32c > constants::unicode_max_codepoint)
this->throw_error(regex_constants::error_utf8);
u32.push_back(u32c);
}
return compile_core(u32.data(), u32.data() + u32.size(), flags);
}
bool is_icase() const
{
#if !defined(SRELL_NO_ICASE)
if (this->soflags & regex_constants::icase)
return true;
#endif
return false;
}
bool is_ricase() const
{
#if !defined(SRELL_NO_ICASE)
return /* this->NFA_states.size() && */ this->NFA_states[0].icase == true;
#else
return false;
#endif
}
bool is_multiline() const
{
if (this->soflags & regex_constants::multiline)
return true;
return false;
}
bool is_dotall() const
{
return (this->soflags & regex_constants::dotall) ? true : false;
}
bool is_optimize() const
{
return (this->soflags & regex_constants::optimize) ? true : false;
}
private:
typedef re_object_core<charT, traits> base_type;
typedef typename base_type::utf_traits utf_traits;
typedef typename base_type::state_type state_type;
typedef typename base_type::state_array state_array;
#if !defined(SRELL_NO_NAMEDCAPTURE)
typedef typename base_type::gname_string gname_string;
#endif
#if !defined(SRELL_NO_UNICODE_PROPERTY)
typedef typename re_character_class::pstring pstring;
#endif
typedef typename state_array::size_type state_size_type;
bool compile_core(const uchar32 *begin, const uchar32 *const end, const regex_constants::syntax_option_type flags)
{
re_quantifier piececharlen;
re_compiler_state<charT> cstate;
state_type atom;
this->reset(flags);
// this->soflags = flags;
cstate.reset(flags);
atom.reset();
atom.type = st_epsilon;
atom.next2 = 1;
this->NFA_states.push_back(atom);
if (!make_nfa_states(this->NFA_states, piececharlen, begin, end, cstate))
{
return false;
}
if (begin != end)
this->throw_error(regex_constants::error_paren); // ')'s are too many.
if (!check_backreferences(cstate))
this->throw_error(regex_constants::error_backref);
#if !defined(SRELL_NO_ICASE)
if (this->is_icase())
this->NFA_states[0].icase = check_if_really_needs_icase_search();
#endif
#if !defined(SRELLDBG_NO_BMH)
setup_bmhdata();
#endif
atom.type = st_success;
atom.next1 = 0;
atom.next2 = 0;
this->NFA_states.push_back(atom);
optimise();
relativejump_to_absolutejump();
return true;
}
bool make_nfa_states(state_array &piece, re_quantifier &piececharlen, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
typename state_array::size_type prevbranch_end = 0;
state_type atom;
state_array branch;
re_quantifier branchsize;
piececharlen.reset(0);
for (;;)
{
branch.clear();
if (!make_branch(branch, branchsize, curpos, end, cstate))
return false;
// For piececharlen.atleast, 0 as the initial value and 0 as an
// actual value must be distinguished.
if (piececharlen.atmost == 0 || piececharlen.atleast > branchsize.atleast)
piececharlen.atleast = branchsize.atleast;
if (piececharlen.atmost < branchsize.atmost)
piececharlen.atmost = branchsize.atmost;
if (curpos != end && *curpos == meta_char::mc_bar)
{
atom.reset();
atom.character = meta_char::mc_bar;
atom.type = st_epsilon;
atom.next2 = static_cast<std::ptrdiff_t>(branch.size()) + 2;
branch.insert(0, atom);
}
if (prevbranch_end)
piece[prevbranch_end].next1 = static_cast<std::ptrdiff_t>(branch.size()) + 1;
piece += branch;
// end or ')'
if (curpos == end || *curpos == meta_char::mc_rbracl)
break;
// *curpos == '|'
prevbranch_end = piece.size();
atom.reset();
atom.type = st_epsilon;
piece.push_back(atom);
++curpos;
}
return true;
}
bool make_branch(state_array &branch, re_quantifier &branchsize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
state_array piece;
state_array piece_with_quantifier;
re_quantifier quantifier;
branchsize.reset(0);
for (;;)
{
re_quantifier piececharlen;
if (curpos == end)
return true;
piece.clear();
piece_with_quantifier.clear();
switch (*curpos)
{
// case char_ctrl::cc_nul: // '\0':
case meta_char::mc_bar: // '|':
case meta_char::mc_rbracl: // ')':
return true;
default:
if (!get_atom(piece, piececharlen, curpos, end, cstate))
return false;
}
if (piece.size())
{
const state_type &firstatom = piece[0];
quantifier.reset(); // quantifier.atleast = quantifier.atmost = 1;
if (firstatom.has_quantifier())
{
if (curpos != end && !get_quantifier(quantifier, curpos, end))
return false;
}
if (piece.size() == 2 && firstatom.is_noncapturinggroup() && piece[1].is_noncapturinggroup())
{
// (?:) alone or followed by a quantifier.
// piece_with_quantifier += piece;
; // Do nothing.
}
else
combine_piece_with_quantifier(piece_with_quantifier, piece, quantifier, piececharlen);
#if 01
piececharlen.multiply(quantifier);
branchsize.add(piececharlen);
#else
branchsize.atleast += piececharlen.atleast * quantifier.atleast;
if (!branchsize.is_infinity())
{
if (piececharlen.is_infinity() || quantifier.is_infinity())
branchsize.set_infinity();
else
branchsize.atmost += piececharlen.atmost * quantifier.atmost;
}
#endif
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
if (!cstate.back)
branch += piece_with_quantifier;
else
branch.insert(0, piece_with_quantifier);
#else
branch += piece_with_quantifier;
#endif
}
}
}
bool get_atom(state_array &piece, re_quantifier &atomsize, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
state_type atom;
atom.reset();
atom.character = *curpos++;
switch (atom.character)
{
case meta_char::mc_rbraop: // '(':
return get_piece_in_roundbrackets(piece, atomsize, curpos, end, cstate);
case meta_char::mc_sbraop: // '[':
if (!register_character_class(atom, curpos, end, cstate))
return false;
break;
case meta_char::mc_escape: // '\\':
if (!translate_atom_escape(atom, curpos, end, cstate))
return false;
break;
case meta_char::mc_period: // '.':
atom.type = st_character_class;
#if !defined(SRELL_NO_SINGLELINE)
if (this->is_dotall())
{
atom.number = static_cast<uint_l32>(re_character_class::dotall);
}
else
#endif
{
// atom.number = static_cast<uint_l32>(re_character_class::newline);
range_pairs nlclass = this->character_class[static_cast<uint_l32>(re_character_class::newline)];
nlclass.negation();
atom.number = this->character_class.register_newclass(nlclass);
}
break;
case meta_char::mc_caret: // '^':
atom.type = st_bol;
atom.quantifier.reset(0);
// if (current_flags.m)
if (is_multiline())
atom.multiline = true;
break;
case meta_char::mc_dollar: // '$':
atom.type = st_eol;
atom.quantifier.reset(0);
// if (current_flags.m)
if (is_multiline())
atom.multiline = true;
break;
case meta_char::mc_astrsk: // '*':
case meta_char::mc_plus: // '+':
case meta_char::mc_query: // '?':
case meta_char::mc_cbraop: // '{'
this->throw_error(regex_constants::error_badrepeat);
default:;
}
if (atom.type == st_character)
{
if (this->is_icase())
atom.character = unicode_case_folding::do_casefolding(atom.character);
}
piece.push_back(atom);
atomsize = atom.quantifier;
return true;
}
// '('.
bool get_piece_in_roundbrackets(state_array &piece, re_quantifier &piececharlen, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
const re_compiler_state<charT> original_cstate(cstate);
state_type atom;
if (curpos == end)
this->throw_error(regex_constants::error_paren);
atom.reset();
atom.type = st_roundbracket_open;
if (*curpos == meta_char::mc_query) // '?'
{
if (!extended_roundbrackets(piece, atom, ++curpos, end, cstate))
return false;
}
if (atom.type == st_roundbracket_open)
{
push_bracket_open(piece, atom);
}
// if (curpos == end)
// this->throw_error(regex_constants::error_paren);
if (!make_nfa_states(piece, piececharlen, curpos, end, cstate))
return false;
// end or ')'?
if (curpos == end)
this->throw_error(regex_constants::error_paren);
++curpos;
cstate.restore_from(original_cstate);
switch (atom.type)
{
case st_epsilon:
// if (piece.size() <= 2) // ':' or ':' + one.
if (piece.size() == 2) // ':' + something.
{
piece.erase(0);
return true;
}
piece[0].quantifier.atmost = this->number_of_brackets - 1;
break;
// case st_lookaround_pop:
case st_lookaround_open:
{
state_type &firstatom = piece[0];
#if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
// if (firstatom.reverse)
if (firstatom.quantifier.atleast) // > 0 means lookbehind.
{
if (!piececharlen.is_same() || piececharlen.is_infinity())
this->throw_error(regex_constants::error_lookbehind);
firstatom.quantifier = piececharlen;
}
#endif
#if defined(SRELL_ENABLE_GT)
if (firstatom.character != meta_char::mc_gt)
#endif
piececharlen.reset(0);
firstatom.next1 = static_cast<std::ptrdiff_t>(piece.size()) + 1;
atom.type = st_lookaround_close;
atom.next1 = 0;
atom.next2 = 0;
}
break;
default:
set_bracket_close(piece, atom, piececharlen, cstate);
}
piece.push_back(atom);
return true;
}
bool extended_roundbrackets(state_array &piece, state_type &atom, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
bool lookbehind = false;
#endif
if (curpos == end)
this->throw_error(regex_constants::error_paren);
atom.character = *curpos;
if (atom.character == meta_char::mc_lt) // '<'
{
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
lookbehind = true;
#endif
if (++curpos == end)
this->throw_error(regex_constants::error_paren);
atom.character = *curpos;
if (atom.character != meta_char::mc_eq && atom.character != meta_char::mc_exclam)
{
#if !defined(SRELL_NO_NAMEDCAPTURE)
return parse_groupname(curpos, end, cstate);
#else
this->throw_error(regex_constants::error_paren);
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
}
}
else
atom.quantifier.atleast = 0;
// Sets atleast to 0 for other assertions than lookbehinds. The automaton
// checks atleast to know whether lookbehinds or other assertions.
switch (atom.character)
{
case meta_char::mc_colon:
atom.type = st_epsilon;
atom.quantifier.atleast = this->number_of_brackets;
break;
case meta_char::mc_exclam: // '!':
atom.is_not = true;
//@fallthrough@
case meta_char::mc_eq: // '=':
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
cstate.back = lookbehind;
#else
// atom.reverse = lookbehind;
#endif
#if defined(SRELL_ENABLE_GT)
case meta_char::mc_gt:
#endif
atom.type = st_lookaround_open;
atom.next2 = 1;
break;
default:
this->throw_error(regex_constants::error_paren);
}
++curpos;
piece.push_back(atom);
return true;
}
void push_bracket_open(state_array &piece, state_type &atom)
{
atom.number = this->number_of_brackets;
atom.next1 = 2;
atom.next2 = 1;
piece.push_back(atom);
++this->number_of_brackets;
atom.type = st_roundbracket_pop;
atom.next1 = 0;
atom.next2 = 0;
piece.push_back(atom);
}
void set_bracket_close(state_array &piece, state_type &atom, const re_quantifier &piececharlen, re_compiler_state<charT> &cstate)
{
// uint_l32 max_bracketno = atom.number;
atom.type = st_roundbracket_close;
atom.next1 = 1;
atom.next2 = 1;
#if 0
for (typename state_array::size_type i = 0; i < piece.size(); ++i)
{
const state_type &state = piece[i];
if (state.type == st_roundbracket_open && max_bracketno < state.number)
max_bracketno = state.number;
}
#endif
re_quantifier &rb_open = piece[0].quantifier;
re_quantifier &rb_pop = piece[1].quantifier;
rb_open.atleast = rb_pop.atleast = atom.number + 1;
rb_open.atmost = rb_pop.atmost = this->number_of_brackets - 1; // max_bracketno;
if (cstate.atleast_widths_of_brackets.size() < atom.number)
cstate.atleast_widths_of_brackets.resize(atom.number, 0);
cstate.atleast_widths_of_brackets[atom.number - 1] = piececharlen.atleast;
}
void combine_piece_with_quantifier(state_array &piece_with_quantifier, state_array &piece, const re_quantifier &quantifier, const re_quantifier &piececharlen)
{
state_type &firstatom = piece[0];
// const bool firstpiece_is_roundbracket_open = (firstatom.type == st_roundbracket_open);
const bool piece_has_0widthchecker = firstatom.has_0widthchecker();
const bool piece_is_noncapturinggroup_contaning_capturinggroup = firstatom.is_noncapturinggroup() && firstatom.quantifier.is_valid();
state_type atom;
if (quantifier.atmost == 0)
return;
atom.reset();
atom.quantifier = quantifier;
if (firstatom.is_character_or_class())
atom.character = meta_char::mc_astrsk; // For nextpos_optimisation1_3().
if (quantifier.atmost == 1)
{
if (quantifier.atleast == 0)
{
atom.type = st_epsilon;
atom.next2 = static_cast<std::ptrdiff_t>(piece.size()) + 1;
if (!quantifier.is_greedy)
{
atom.next1 = atom.next2;
atom.next2 = 1;
}
if (atom.character == meta_char::mc_astrsk)
firstatom.quantifier = quantifier;
piece_with_quantifier.push_back(atom);
// (push)
}
if (piece.size() >= 2 && firstatom.type == st_roundbracket_open && piece[1].type == st_roundbracket_pop)
{
firstatom.quantifier.atmost = 0u;
piece[1].quantifier.atmost = 0u;
}
piece_with_quantifier += piece;
return;
}
// atmost >= 2
#if !defined(SRELLDBG_NO_SIMPLEEQUIV)
// The counter requires at least 6 states: save, restore, check, inc, dec, atom(s).
// A character or charclass quantified by one of these has a simple equivalent representation:
// a{0,2} 1.epsilon(2|5), 2.CHorCL(3), 3.epsilon(4|5), 4.CHorCL(5), [5].
// a{0,3} 1.epsilon(2|7), 2.CHorCL(3), 3.epsilon(4|7), 4.CHorCL(5), 5.epsilon(6|7), 6.CHorCL(7), [7].
// a{1,2} 1.CHorCL(2), 2.epsilon(3|4), 3.CHorCL(4), [4].
// a{1,3} 1.CHorCL(2), 2.epsilon(3|6), 3.CHorCL(4), 4.epsilon(5|6), 5.CHorCL(6), [6].
// a{2,3} 1.CHorCL(2), 2.CHorCL(3), 3.epsilon(4|5), 4.CHorCL(5), [5].
// a{2,4} 1.CHorCL(2), 2.CHorCL(3), 3.epsilon(4|7), 4.CHorCL(5), 5.epsilon(6|7), 6.CHorCL(7), [7].
if (piece.size() == 1 && firstatom.is_character_or_class() && quantifier.has_simple_equivalence())
{
const typename state_array::size_type branchsize = piece.size() + 1;
for (uint_l32 i = 0; i < quantifier.atleast; ++i)
piece_with_quantifier += piece;
if (atom.character == meta_char::mc_astrsk)
firstatom.quantifier.set(0, 1, quantifier.is_greedy);
atom.type = st_epsilon;
atom.next2 = (quantifier.atmost - quantifier.atleast) * branchsize;
if (!quantifier.is_greedy)
{
atom.next1 = atom.next2;
atom.next2 = 1;
}
for (uint_l32 i = quantifier.atleast; i < quantifier.atmost; ++i)
{
piece_with_quantifier.push_back(atom);
piece_with_quantifier += piece;
quantifier.is_greedy ? (atom.next2 -= branchsize) : (atom.next1 -= branchsize);
}
return;
}
#endif // !defined(SRELLDBG_NO_SIMPLEEQUIV)
atom.type = st_epsilon;
if (quantifier.is_asterisk()) // {0,}
{
// greedy: 1.epsilon(2|4), 2.piece, 3.LAorC0WR(1|0), 4.OutOfLoop.
// !greedy: 1.epsilon(4|2), 2.piece, 3.LAorC0WR(1|0), 4.OutOfLoop.
// LAorC0WR: LastAtomOfPiece or Check0WidthRepeat.
// atom.type points to 1.
}
else if (quantifier.is_plus()) // {1,}
{
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
if (piece.size() == 1 && firstatom.is_character_or_class())
{
piece_with_quantifier += piece;
--atom.quantifier.atleast; // /.+/ -> /..*/.
}
else
#endif
{
atom.next1 = 2;
atom.next2 = 0;
piece_with_quantifier.push_back(atom);
// greedy: 1.epsilon(3), 2.epsilon(3|5), 3.piece, 4.LAorC0WR(2|0), 5.OutOfLoop.
// !greedy: 1.epsilon(3), 2.epsilon(5|3), 3.piece, 4.LAorC0WR(2|0), 5.OutOfLoop.
// atom.type points to 2.
}
}
else
{
atom.number = this->number_of_counters;
++this->number_of_counters;
atom.type = st_save_and_reset_counter;
atom.next1 = 2;
atom.next2 = 1;
piece_with_quantifier.push_back(atom);
atom.type = st_restore_counter;
atom.next1 = 0;
atom.next2 = 0;
piece_with_quantifier.push_back(atom);
// 1.save_and_reset_counter(3|2), 2.restore_counter(0|0),
atom.next1 = 0;
atom.next2 = 0;
atom.type = st_decrement_counter;
piece.insert(0, atom);
atom.next1 = 2;
// atom.next2 = piece[1].is_character_or_class() ? 0 : 1;
// atom.next2 = 0;
for (state_size_type i = 1; i < piece.size(); ++i)
{
const state_type &state = piece[i];
if (state.is_character_or_class() || (state.type == st_epsilon && state.next2 == 0))
;
else
{
atom.next2 = 1;
break;
}
}
atom.type = st_epsilon; // st_increment_counter;
piece.insert(0, atom);
piece[0].number = 0;
atom.type = st_check_counter;
// greedy: 3.check_counter(4|6), 4.piece, 5.LAorC0WR(3|0), 6.OutOfLoop.
// !greedy: 3.check_counter(6|4), 4.piece, 5.LAorC0WR(3|0), 6.OutOfLoop.
// 4.piece = { 4a.increment_counter(4c|4b), 4b.decrement_counter(0|0), 4c.OriginalPiece }.
}
// atom.type is epsilon or check_counter.
// Its "next"s point to piece and OutOfLoop.
if (!piece_is_noncapturinggroup_contaning_capturinggroup && (piececharlen.atleast || piece_has_0widthchecker))
{
const typename state_array::size_type piece_size = piece.size();
state_type &lastatom = piece[piece_size - 1];
lastatom.next1 = 0 - static_cast<std::ptrdiff_t>(piece_size);
// Points to the one immediately before piece, which will be pushed last in this block.
// atom.type has already been set. epsilon or check_counter.
atom.next1 = 1;
atom.next2 = static_cast<std::ptrdiff_t>(piece_size) + 1;
if (!quantifier.is_greedy)
{
atom.next1 = atom.next2;
atom.next2 = 1;
}
piece_with_quantifier.push_back(atom);
}
else
{
// atom.type has already been set. epsilon or check_counter.
atom.next1 = 1;
atom.next2 = static_cast<std::ptrdiff_t>(piece.size()) + 4; // To OutOfLoop.
// The reason for +3 than above is that push, pop, and check_0_width are added below.
if (!quantifier.is_greedy)
{
atom.next1 = atom.next2;
atom.next2 = 1;
}
piece_with_quantifier.push_back(atom); // *1
atom.number = this->number_of_repeats;
++this->number_of_repeats;
const state_size_type org1stpos = (atom.type == st_check_counter) ? 2 : 0;
if (piece_is_noncapturinggroup_contaning_capturinggroup)
atom.quantifier = piece[org1stpos].quantifier;
else
atom.quantifier.set(1, 0);
atom.type = st_repeat_in_pop;
atom.next1 = 0;
atom.next2 = 0;
piece.insert(org1stpos, atom);
atom.type = st_repeat_in_push;
atom.next1 = 2;
atom.next2 = 1;
piece.insert(org1stpos, atom);
atom.type = st_check_0_width_repeat;
atom.next1 = 0 - static_cast<std::ptrdiff_t>(piece.size()) - 1; // Points to *1.
atom.next2 = 1;
piece.push_back(atom);
// greedy: 1.epsilon(2|6),
// !greedy: 1.epsilon(6|2),
// 2.repeat_in_push(4|3), 3.repeat_in_pop(0|0), 4.piece,
// 5.check_0_width_repeat(1|6), 6.OutOfLoop.
// or
// greedy: 1.check_counter(2|8),
// !greedy: 1.check_counter(8|2),
// 2.increment_counter(4|3), 3.decrement_counter(0|0)
// 4.repeat_in_push(6|5), 5.repeat_in_pop(0|0), 6.piece,
// 7.check_0_width_repeat(1|8), 8.OutOfLoop.
}
piece_with_quantifier += piece;
}
#if !defined(SRELL_NO_NAMEDCAPTURE)
bool parse_groupname(const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
const gname_string groupname = get_groupname(curpos, end, cstate);
if (!this->namedcaptures.push_back(groupname, this->number_of_brackets))
this->throw_error(regex_constants::error_backref);
return true;
}
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
// '['.
bool register_character_class(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state<charT> & /* cstate */)
{
range_pair code_range;
range_pairs ranges;
state_type classatom;
if (curpos == end)
this->throw_error(regex_constants::error_brack);
atom.type = st_character_class;
if (*curpos == meta_char::mc_caret) // '^'
{
atom.is_not = true;
++curpos;
}
for (;;)
{
if (curpos == end)
this->throw_error(regex_constants::error_brack);
if (*curpos == meta_char::mc_sbracl) // ']'
break;
classatom.reset();
if (!get_character_in_class(classatom, curpos, end))
return false;
if (classatom.type == st_character_class)
{
add_predefclass_to_charclass(ranges, classatom);
continue;
}
code_range.first = code_range.second = classatom.character;
if (curpos == end)
this->throw_error(regex_constants::error_brack);
if (*curpos == meta_char::mc_minus) // '-'
{
++curpos;
if (curpos == end)
this->throw_error(regex_constants::error_brack);
if (*curpos == meta_char::mc_sbracl)
{
PUSH_SEPARATELY:
ranges.join(code_range);
code_range.first = code_range.second = meta_char::mc_minus;
}
else
{
if (!get_character_in_class(classatom, curpos, end))
return false;
if (classatom.type == st_character_class)
{
add_predefclass_to_charclass(ranges, classatom);
goto PUSH_SEPARATELY;
}
code_range.second = classatom.character;
if (!code_range.is_range_valid())
this->throw_error(regex_constants::error_range);
}
}
ranges.join(code_range);
}
// *curpos == ']'
++curpos;
if (this->is_icase())
ranges.make_caseunfoldedcharset();
if (atom.is_not)
{
ranges.negation();
atom.is_not = false;
}
// atom.character = this->is_icase() ? ranges.template consists_of_one_character<unicode_case_folding>() : ranges.template consists_of_one_character<nocase_faketraits>();
atom.character = ranges.consists_of_one_character(this->is_icase());
if (atom.character != constants::invalid_u32value)
{
atom.type = st_character;
return true;
}
atom.number = this->character_class.register_newclass(ranges);
return true;
}
bool get_character_in_class(state_type &atom, const uchar32 *&curpos, const uchar32 *const end /* , const re_compiler_state &cstate */)
{
atom.character = *curpos++;
return atom.character != meta_char::mc_escape // '\\'
|| translate_escseq(atom, curpos, end);
}
void add_predefclass_to_charclass(range_pairs &cls, const state_type &classatom)
{
range_pairs predefclass = this->character_class[classatom.number];
if (classatom.is_not)
predefclass.negation();
cls.merge(predefclass);
}
// Escape characters which appear both in and out of [] pairs.
bool translate_escseq(state_type &atom, const uchar32 *&curpos, const uchar32 *const end)
{
if (curpos == end)
this->throw_error(regex_constants::error_escape);
atom.character = *curpos++;
switch (atom.character)
{
// Predefined classes.
case char_alnum::ch_D: // 'D':
atom.is_not = true;
//@fallthrough@
case char_alnum::ch_d: // 'd':
atom.number = static_cast<uint_l32>(re_character_class::digit); // \d, \D.
atom.type = st_character_class;
break;
case char_alnum::ch_S: // 'S':
atom.is_not = true;
//@fallthrough@
case char_alnum::ch_s: // 's':
atom.number = static_cast<uint_l32>(re_character_class::space); // \s, \S.
atom.type = st_character_class;
break;
case char_alnum::ch_W: // 'W':
atom.is_not = true;
//@fallthrough@
case char_alnum::ch_w: // 'w':
if (this->is_icase())
{
this->character_class.setup_icase_word();
atom.number = static_cast<uint_l32>(re_character_class::icase_word);
}
else
atom.number = static_cast<uint_l32>(re_character_class::word); // \w, \W.
atom.type = st_character_class;
break;
#if !defined(SRELL_NO_UNICODE_PROPERTY)
// Prepared for Unicode properties and script names.
case char_alnum::ch_P: // \P{...}
atom.is_not = true;
//@fallthrough@
case char_alnum::ch_p: // \p{...}
atom.number = get_property_number(curpos, end);
atom.type = st_character_class;
break;
#endif // !defined(SRELL_NO_UNICODE_PROPERTY)
case char_alnum::ch_b:
atom.character = char_ctrl::cc_bs; // '\b' 0x08:BS
break;
case char_alnum::ch_t:
atom.character = char_ctrl::cc_htab; // '\t' 0x09:HT
break;
case char_alnum::ch_n:
atom.character = char_ctrl::cc_nl; // '\n' 0x0a:LF
break;
case char_alnum::ch_v:
atom.character = char_ctrl::cc_vtab; // '\v' 0x0b:VT
break;
case char_alnum::ch_f:
atom.character = char_ctrl::cc_ff; // '\f' 0x0c:FF
break;
case char_alnum::ch_r:
atom.character = char_ctrl::cc_cr; // '\r' 0x0d:CR
break;
case char_alnum::ch_c: // \cX
if (curpos != end)
{
// atom.character = static_cast<uchar32>(utf_traits().codepoint_inc(curpos, end) & 0x1f); // *curpos++
atom.character = static_cast<uchar32>(*curpos | constants::asc_icase);
if (atom.character >= char_alnum::ch_a && atom.character <= char_alnum::ch_z)
atom.character = static_cast<uchar32>(*curpos++ & 0x1f);
else
{
this->throw_error(regex_constants::error_escape); // Strict.
// atom.character = char_alnum::ch_c; // Loose.
}
}
break;
case char_alnum::ch_0:
atom.character = char_ctrl::cc_nul; // '\0' 0x00:NUL
break;
case char_alnum::ch_u: // \uhhhh, \u{h~hhhhhh}
atom.character = parse_escape_u(curpos, end);
break;
case char_alnum::ch_x: // \xhh
atom.character = translate_numbers(curpos, end, 16, 2, 2, 0xff);
break;
// SyntaxCharacter, '/', and '-'.
case meta_char::mc_caret: // '^'
case meta_char::mc_dollar: // '$'
case meta_char::mc_escape: // '\\'
case meta_char::mc_period: // '.'
case meta_char::mc_astrsk: // '*'
case meta_char::mc_plus: // '+'
case meta_char::mc_query: // '?'
case meta_char::mc_rbraop: // '('
case meta_char::mc_rbracl: // ')'
case meta_char::mc_sbraop: // '['
case meta_char::mc_sbracl: // ']'
case meta_char::mc_cbraop: // '{'
case meta_char::mc_cbracl: // '}'
case meta_char::mc_bar: // '|'
case char_other::co_slash: // '/'
case meta_char::mc_minus: // '-' allowed only in charclass.
break;
default:
atom.character = constants::invalid_u32value;
}
if (atom.character == constants::invalid_u32value)
this->throw_error(regex_constants::error_escape);
return true;
}
uchar32 parse_escape_u(const uchar32 *&curpos, const uchar32 *const end) const
{
uchar32 ucp;
if (curpos == end)
return constants::invalid_u32value;
if (*curpos == meta_char::mc_cbraop)
{
// ucp = translate_numbers(++curpos, end, 16, 1, 6, constants::unicode_max_codepoint, true);
ucp = translate_numbers(++curpos, end, 16, 1, 0, constants::unicode_max_codepoint);
if (curpos == end || *curpos != meta_char::mc_cbracl)
return constants::invalid_u32value;
++curpos;
}
else
{
ucp = translate_numbers(curpos, end, 16, 4, 4, 0xffff);
if (ucp >= 0xd800 && ucp <= 0xdbff)
{
const uchar32 * prefetch = curpos;
if (prefetch != end && *prefetch == meta_char::mc_escape && ++prefetch != end && *prefetch == char_alnum::ch_u)
{
const uchar32 nextucp = translate_numbers(++prefetch, end, 16, 4, 4, 0xffff);
if (nextucp >= 0xdc00 && nextucp <= 0xdfff)
{
curpos = prefetch;
ucp = (((ucp << 10) & 0xffc00) | (nextucp & 0x3ff)) + 0x10000;
}
}
}
}
return ucp;
}
#if !defined(SRELL_NO_UNICODE_PROPERTY)
uint_l32 get_property_number(const uchar32 *&curpos, const uchar32 *const end)
{
if (curpos == end || *curpos != meta_char::mc_cbraop) // '{'
this->throw_error(regex_constants::error_escape);
pstring pname;
pstring pvalue(get_property_name_or_value(++curpos, end));
if (!pvalue.size())
this->throw_error(regex_constants::error_escape);
if (static_cast<uchar32>(pvalue[pvalue.size() - 1]) != char_other::co_sp) // ' ', not a value.
{
if (curpos == end)
this->throw_error(regex_constants::error_escape);
if (*curpos == meta_char::mc_eq) // '='
{
pname = pvalue;
pvalue = get_property_name_or_value(++curpos, end);
if (!pvalue.size())
this->throw_error(regex_constants::error_escape);
}
}
if (curpos == end || *curpos != meta_char::mc_cbracl) // '}'
this->throw_error(regex_constants::error_escape);
if (static_cast<uchar32>(pvalue[pvalue.size() - 1]) == char_other::co_sp) // ' ', value.
pvalue.resize(pvalue.size() - 1);
++curpos;
const uint_l32 class_number = this->character_class.lookup_property(pname, pvalue, this->is_icase());
if (class_number == re_character_class::error_property)
this->throw_error(regex_constants::error_escape);
return class_number;
}
pstring get_property_name_or_value(const uchar32 *&curpos, const uchar32 *const end) const
{
pstring name_or_value;
bool number_found = false;
for (;; ++curpos)
{
if (curpos == end)
break;
const uchar32 curchar = *curpos;
if (curchar >= char_alnum::ch_A && curchar <= char_alnum::ch_Z)
;
else if (curchar >= char_alnum::ch_a && curchar <= char_alnum::ch_z)
;
else if (curchar == char_other::co_ll) // '_'
;
else if (curchar >= char_alnum::ch_0 && curchar <= char_alnum::ch_9)
number_found = true;
else
break;
name_or_value.append(1, static_cast<typename pstring::value_type>(curchar));
}
if (number_found)
name_or_value.append(1, char_other::co_sp); // ' '
return name_or_value;
}
#endif // !defined(SRELL_NO_UNICODE_PROPERTY)
// Escape characters which do not appear in [] pairs.
bool translate_atom_escape(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, /* const */ re_compiler_state<charT> &cstate)
{
if (curpos == end)
this->throw_error(regex_constants::error_escape);
atom.character = *curpos;
switch (atom.character)
{
case meta_char::mc_minus: // '-'
this->throw_error(regex_constants::error_escape);
//@fallthrough@
case char_alnum::ch_B: // 'B':
atom.is_not = true;
//@fallthrough@
case char_alnum::ch_b: // 'b':
atom.type = st_boundary; // \b, \B.
atom.quantifier.reset(0);
// atom.number = 0;
if (this->is_icase())
{
this->character_class.setup_icase_word();
atom.number = static_cast<uint_l32>(re_character_class::icase_word);
}
else
atom.number = static_cast<uint_l32>(re_character_class::word); // \w, \W.
break;
// case char_alnum::ch_A: // 'A':
// atom.type = st_bol; // '\A'
// case char_alnum::ch_Z: // 'Z':
// atom.type = st_eol; // '\Z'
// case char_alnum::ch_z: // 'z':
// atom.type = st_eol; // '\z'
// Backreferences.
#if !defined(SRELL_NO_NAMEDCAPTURE)
// Prepared for named captures.
case char_alnum::ch_k: // 'k':
return parse_backreference_name(atom, curpos, end, cstate); // \k.
#endif
default:
if (atom.character >= char_alnum::ch_1 && atom.character <= char_alnum::ch_9) // \1, \9.
return parse_backreference_number(atom, curpos, end, cstate);
translate_escseq(atom, curpos, end);
if (atom.type == st_character_class)
{
range_pairs newclass = this->character_class[atom.number];
if (atom.is_not)
{
newclass.negation();
atom.is_not = false;
}
if (this->is_icase() && atom.number >= static_cast<uint_l32>(re_character_class::number_of_predefcls))
newclass.make_caseunfoldedcharset();
atom.number = this->character_class.register_newclass(newclass);
}
return true;
}
++curpos;
return true;
}
bool parse_backreference_number(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, const re_compiler_state<charT> &cstate)
{
const uchar32 backrefno = translate_numbers(curpos, end, 10, 0, 0, 0xfffffffe);
// 22.2.1.1 Static Semantics: Early Errors:
// It is a Syntax Error if NcapturingParens >= 23^2 - 1.
if (backrefno == constants::invalid_u32value)
this->throw_error(regex_constants::error_escape);
atom.number = static_cast<uint_l32>(backrefno);
atom.backrefnumber_unresolved = false;
return backreference_postprocess(atom, cstate);
}
bool backreference_postprocess(state_type &atom, const re_compiler_state<charT> & /* cstate */) const
{
atom.next2 = 1;
atom.type = st_backreference;
// atom.quantifier.atleast = cstate.atleast_widths_of_brackets[atom.number - 1];
// Moved to check_backreferences().
return true;
}
#if !defined(SRELL_NO_NAMEDCAPTURE)
bool parse_backreference_name(state_type &atom, const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
{
if (++curpos == end || *curpos != meta_char::mc_lt)
this->throw_error(regex_constants::error_escape);
const gname_string groupname = get_groupname(++curpos, end, cstate);
atom.number = this->namedcaptures[groupname];
if (atom.number != groupname_mapper<charT>::notfound)
atom.backrefnumber_unresolved = false;
else
{
atom.backrefnumber_unresolved = true;
atom.number = static_cast<uint_l32>(cstate.unresolved_gnames.size());
cstate.unresolved_gnames.push_back(groupname, atom.number);
}
return backreference_postprocess(atom, cstate);
}
#if !defined(SRELL_NO_UNICODE_PROPERTY)
gname_string get_groupname(const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &cstate)
#else
gname_string get_groupname(const uchar32 *&curpos, const uchar32 *const end, re_compiler_state<charT> &)
#endif
{
charT mbstr[utf_traits::maxseqlen];
gname_string groupname;
#if !defined(SRELL_NO_UNICODE_PROPERTY)
cstate.idchecker.setup();
#endif
for (;;)
{
if (curpos == end)
this->throw_error(regex_constants::error_escape);
uchar32 curchar = *curpos++;
if (curchar == meta_char::mc_gt) // '>'
break;
if (curchar == meta_char::mc_escape && curpos != end && *curpos == char_alnum::ch_u) // '\\', 'u'.
curchar = parse_escape_u(++curpos, end);
#if defined(SRELL_NO_UNICODE_PROPERTY)
if (curchar != meta_char::mc_escape)
#else
if (cstate.idchecker.is_identifier(curchar, groupname.size() != 0))
#endif
; // OK.
else
curchar = constants::invalid_u32value;
if (curchar == constants::invalid_u32value)
this->throw_error(regex_constants::error_escape);
const uchar32 seqlen = utf_traits::to_codeunits(mbstr, curchar);
for (uchar32 i = 0; i < seqlen; ++i)
groupname.append(1, mbstr[i]);
}
if (!groupname.size())
this->throw_error(regex_constants::error_escape);
return groupname;
}
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
bool get_quantifier(re_quantifier &quantifier, const uchar32 *&curpos, const uchar32 *const end)
{
switch (*curpos)
{
case meta_char::mc_astrsk: // '*':
--quantifier.atleast;
//@fallthrough@
case meta_char::mc_plus: // '+':
quantifier.set_infinity();
break;
case meta_char::mc_query: // '?':
--quantifier.atleast;
break;
case meta_char::mc_cbraop: // '{':
get_brace_with_quantifier(quantifier, curpos, end);
break;
default:
return true;
}
if (++curpos != end && *curpos == meta_char::mc_query) // '?'
{
quantifier.is_greedy = false;
++curpos;
}
return true;
}
void get_brace_with_quantifier(re_quantifier &quantifier, const uchar32 *&curpos, const uchar32 *const end)
{
++curpos;
quantifier.atleast = static_cast<uint_l32>(translate_numbers(curpos, end, 10, 1, 0, constants::max_u32value));
if (quantifier.atleast == static_cast<uint_l32>(constants::invalid_u32value))
goto THROW_ERROR_BRACE;
if (curpos == end)
goto THROW_ERROR_BRACE;
if (*curpos == meta_char::mc_comma) // ','
{
++curpos;
quantifier.atmost = static_cast<uint_l32>(translate_numbers(curpos, end, 10, 1, 0, constants::max_u32value));
if (quantifier.atmost == static_cast<uint_l32>(constants::invalid_u32value))
quantifier.set_infinity();
if (!quantifier.is_valid())
this->throw_error(regex_constants::error_badbrace);
}
else
quantifier.atmost = quantifier.atleast;
if (curpos == end || *curpos != meta_char::mc_cbracl) // '}'
{
THROW_ERROR_BRACE:
this->throw_error(regex_constants::error_brace);
}
// *curpos == '}'
}
uchar32 translate_numbers(const uchar32 *&curpos, const uchar32 *const end, const int radix, const std::size_t minsize, const std::size_t maxsize, const uchar32 maxvalue) const
{
std::size_t count = 0;
uchar32 u32value = 0;
int num;
for (; maxsize == 0 || count < maxsize; ++curpos, ++count)
{
if (curpos == end || (num = tonumber(*curpos, radix)) == -1)
break;
const uchar32 nextvalue = u32value * radix + num;
if ((/* maxvalue != 0 && */ nextvalue > maxvalue) || nextvalue < u32value)
break;
u32value = nextvalue;
}
if (count >= minsize)
return u32value;
return constants::invalid_u32value;
}
int tonumber(const uchar32 ch, const int radix) const
{
if ((ch >= char_alnum::ch_0 && ch <= char_alnum::ch_7) || (radix >= 10 && (ch == char_alnum::ch_8 || ch == char_alnum::ch_9)))
return static_cast<int>(ch - char_alnum::ch_0);
if (radix == 16)
{
if (ch >= char_alnum::ch_a && ch <= char_alnum::ch_f)
return static_cast<int>(ch - char_alnum::ch_a + 10);
if (ch >= char_alnum::ch_A && ch <= char_alnum::ch_F)
return static_cast<int>(ch - char_alnum::ch_A + 10);
}
return -1;
}
bool check_backreferences(re_compiler_state<charT> &cstate)
{
for (typename state_array::size_type backrefpos = 0; backrefpos < this->NFA_states.size(); ++backrefpos)
{
state_type &brs = this->NFA_states[backrefpos];
if (brs.type == st_backreference)
{
const uint_l32 &backrefno = brs.number;
#if !defined(SRELL_NO_NAMEDCAPTURE)
if (brs.backrefnumber_unresolved)
{
if (backrefno >= cstate.unresolved_gnames.size())
return false; // Internal error.
brs.number = this->namedcaptures[cstate.unresolved_gnames[backrefno]];
if (backrefno == groupname_mapper<charT>::notfound)
return false;
brs.backrefnumber_unresolved = false;
}
#endif
for (typename state_array::size_type roundbracket_closepos = 0;; ++roundbracket_closepos)
{
if (roundbracket_closepos < this->NFA_states.size())
{
const state_type &rbcs = this->NFA_states[roundbracket_closepos];
if (rbcs.type == st_roundbracket_close && rbcs.number == backrefno)
{
if (roundbracket_closepos < backrefpos)
{
// brs.quantifier.atleast = cstate.atleast_widths_of_brackets[backrefno - 1];
// 20210429: It was reported that clang-tidy was dissatisfied with this code.
// 20211006: Replaced with the following code:
const uint_l32 backrefnoindex = backrefno - 1;
// This can never be true. Added only for satisfying clang-tidy.
if (backrefnoindex >= cstate.atleast_widths_of_brackets.size())
return false;
brs.quantifier.atleast = cstate.atleast_widths_of_brackets[backrefnoindex];
cstate.backref_used = true;
}
else
{
brs.type = st_epsilon;
brs.next2 = 0;
}
break;
}
}
else
return false;
}
}
}
return true;
}
#if !defined(SRELLDBG_NO_1STCHRCLS)
void create_firstchar_class()
{
#if !defined(SRELLDBG_NO_BITSET)
range_pairs fcc;
#else
range_pairs &fcc = this->firstchar_class;
#endif
const bool canbe0length = gather_nextchars(fcc, static_cast<typename state_array::size_type>(this->NFA_states[0].next1), 0u, false);
if (canbe0length)
{
fcc.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint));
// Expressions would consist of assertions only, such as /^$/.
// We cannot but accept every codepoint.
}
#if !defined(SRELLDBG_NO_BITSET)
this->NFA_states[0].quantifier.atleast = this->character_class.register_newclass(fcc);
set_bitset_table(fcc);
#endif
}
#if !defined(SRELLDBG_NO_BITSET)
void set_bitset_table(const range_pairs &fcc)
{
for (typename range_pairs::size_type i = 0; i < fcc.size(); ++i)
{
const range_pair &range = fcc[i];
#if 0
uchar32 second = range.second <= constants::unicode_max_codepoint ? range.second : constants::unicode_max_codepoint;
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(push)
#pragma warning(disable:4127)
#endif
if (utf_traits::utftype == 16)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(pop)
#endif
{
if (second >= 0x10000 && range.first < 0x10000)
{
this->firstchar_class_bs.set_range(utf_traits::firstcodeunit(0x10000) & utf_traits::bitsetmask, utf_traits::firstcodeunit(second) & utf_traits::bitsetmask);
second = 0xffff;
}
}
this->firstchar_class_bs.set_range(utf_traits::firstcodeunit(range.first) & utf_traits::bitsetmask, utf_traits::firstcodeunit(second) & utf_traits::bitsetmask);
#else
for (uchar32 ucp = range.first; ucp <= constants::unicode_max_codepoint; ++ucp)
{
this->firstchar_class_bs.set(utf_traits::firstcodeunit(ucp) & utf_traits::bitsetmask);
if (ucp == range.second)
break;
}
#endif
}
}
#endif // !defined(SRELLDBG_NO_BITSET)
#endif // !defined(SRELLDBG_NO_1STCHRCLS)
bool gather_nextchars(range_pairs &nextcharclass, typename state_array::size_type pos, simple_array<bool> &checked, const uint_l32 bracket_number, const bool subsequent) const
{
bool canbe0length = false;
for (;;)
{
const state_type &state = this->NFA_states[pos];
if (checked[pos])
break;
checked[pos] = true;
if (state.next2
&& (state.type != st_check_counter || !state.quantifier.is_greedy || state.quantifier.atleast == 0)
&& (state.type != st_save_and_reset_counter)
&& (state.type != st_roundbracket_open)
&& (state.type != st_roundbracket_close || state.number != bracket_number)
&& (state.type != st_repeat_in_push)
&& (state.type != st_backreference || (state.quantifier.atleast == 0 && state.next1 != state.next2))
&& (state.type != st_lookaround_open))
if (gather_nextchars(nextcharclass, pos + state.next2, checked, bracket_number, subsequent))
canbe0length = true;
switch (state.type)
{
case st_character:
nextcharclass.join(range_pair_helper(state.character));
if (this->is_ricase())
nextcharclass.make_caseunfoldedcharset();
return canbe0length;
case st_character_class:
nextcharclass.merge(this->character_class[state.number]);
return canbe0length;
case st_backreference:
{
const typename state_array::size_type nextpos = find_next1_of_bracketopen(state.number);
const bool length0 = gather_nextchars(nextcharclass, nextpos, state.number, subsequent);
if (!length0)
return canbe0length;
}
break;
case st_eol:
case st_bol:
if (!subsequent)
break;
//@fallthrough@
case st_boundary:
if (subsequent)
nextcharclass.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint));
break;
case st_lookaround_open:
// if (!state.is_not && !state.reverse)
if (!state.is_not && state.quantifier.atleast == 0)
{
gather_nextchars(nextcharclass, pos + 1, checked, 0u, subsequent);
}
else if (subsequent)
nextcharclass.set_solerange(range_pair_helper(0, constants::unicode_max_codepoint));
break;
case st_roundbracket_close:
if (/* bracket_number == 0 || */ state.number != bracket_number)
break;
//@fallthrough@
case st_success: // == st_lookaround_close.
return true;
case st_check_counter:
if (!state.quantifier.is_greedy && state.quantifier.atleast >= 1)
return canbe0length;
//@fallthrough@
default:;
}
if (state.next1)
pos += state.next1;
else
break;
}
return canbe0length;
}
bool gather_nextchars(range_pairs &nextcharclass, const typename state_array::size_type pos, const uint_l32 bracket_number, const bool subsequent) const
{
simple_array<bool> checked;
checked.resize(this->NFA_states.size(), false);
return gather_nextchars(nextcharclass, pos, checked, bracket_number, subsequent);
}
typename state_array::size_type find_next1_of_bracketopen(const uint_l32 bracketno) const
{
for (typename state_array::size_type no = 0; no < this->NFA_states.size(); ++no)
{
const state_type &state = this->NFA_states[no];
if (state.type == st_roundbracket_open && state.number == bracketno)
return no + state.next1;
}
return 0;
}
void relativejump_to_absolutejump()
{
for (typename state_array::size_type pos = 0; pos < this->NFA_states.size(); ++pos)
{
state_type &state = this->NFA_states[pos];
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
if (state.next1 || state.type == st_character || state.type == st_character_class)
#else
if (state.next1)
#endif
state.next_state1 = &this->NFA_states[pos + state.next1];
else
state.next_state1 = NULL;
if (state.next2)
state.next_state2 = &this->NFA_states[pos + state.next2];
else
state.next_state2 = NULL;
}
}
void optimise()
{
#if !defined(SRELLDBG_NO_BRANCH_OPT2) && !defined(SRELLDBG_NO_ASTERISK_OPT)
branch_optimisation2();
#endif
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
asterisk_optimisation();
#endif
#if !defined(SRELLDBG_NO_BRANCH_OPT) && !defined(SRELLDBG_NO_ASTERISK_OPT)
branch_optimisation();
#endif
#if !defined(SRELLDBG_NO_1STCHRCLS)
create_firstchar_class();
#endif
#if !defined(SRELLDBG_NO_SKIP_EPSILON)
skip_epsilon();
#endif
#if !defined(SRELLDBG_NO_CCPOS)
set_charclass_posinfo();
#endif
}
#if !defined(SRELLDBG_NO_SKIP_EPSILON)
void skip_epsilon()
{
for (typename state_array::size_type pos = 0; pos < this->NFA_states.size(); ++pos)
{
state_type &state = this->NFA_states[pos];
if (state.next1)
state.next1 = static_cast<std::ptrdiff_t>(skip_nonbranch_epsilon(pos + state.next1) - pos);
if (state.next2)
state.next2 = static_cast<std::ptrdiff_t>(skip_nonbranch_epsilon(pos + state.next2) - pos);
}
}
typename state_array::size_type skip_nonbranch_epsilon(typename state_array::size_type pos) const
{
for (;;)
{
const state_type &state = this->NFA_states[pos];
if (state.type == st_epsilon && state.next2 == 0)
{
pos += state.next1;
continue;
}
break;
}
return pos;
}
#endif
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
void asterisk_optimisation()
{
state_type *prevstate_is_astrskepsilon = NULL;
const state_type *prevcharstate = NULL;
state_size_type mnp_inspos = 0;
bool inspos_updatable = true;
#if !defined(SRELLDBG_NO_SPLITCC)
bool inserted = false;
#endif
for (typename state_array::size_type cur = 1; cur < this->NFA_states.size(); ++cur)
{
state_type &curstate = this->NFA_states[cur];
switch (curstate.type)
{
case st_epsilon:
if (curstate.character == meta_char::mc_astrsk)
{
prevstate_is_astrskepsilon = &curstate;
}
else
{
prevstate_is_astrskepsilon = NULL;
inspos_updatable = false;
}
break;
case st_character:
case st_character_class:
if (inspos_updatable)
{
if (prevcharstate)
{
if (prevcharstate->type != curstate.type || prevcharstate->number != curstate.number)
inspos_updatable = false;
}
if (inspos_updatable)
{
if (prevstate_is_astrskepsilon)
{
inspos_updatable = false;
if (prevstate_is_astrskepsilon->quantifier.is_asterisk_or_plus())
{
mnp_inspos = cur + 1;
}
}
}
prevcharstate = &curstate;
}
if (prevstate_is_astrskepsilon)
{
const re_quantifier &eq = prevstate_is_astrskepsilon->quantifier;
const state_size_type epsilonno = cur - 1;
const state_size_type faroffset = eq.is_greedy ? prevstate_is_astrskepsilon->next2 : prevstate_is_astrskepsilon->next1;
const state_size_type nextno = epsilonno + faroffset;
#if !defined(SRELLDBG_NO_SPLITCC)
const state_size_type origlen = this->NFA_states.size();
#endif
if (is_exclusive_sequence(eq, cur, nextno))
{
state_type &epsilonstate = this->NFA_states[epsilonno];
state_type &curstate2 = this->NFA_states[cur];
epsilonstate.next1 = 1;
epsilonstate.next2 = 0;
epsilonstate.number = 0;
// curstate2.quantifier.is_greedy = true;
if (epsilonstate.quantifier.is_infinity())
{
curstate2.next1 = 0;
curstate2.next2 = faroffset - 1;
}
else // ? or {0,1}
{
curstate2.next2 = faroffset - 1;
}
#if !defined(SRELLDBG_NO_SPLITCC)
if (mnp_inspos == nextno && origlen != this->NFA_states.size())
inserted = true;
#endif
}
prevstate_is_astrskepsilon = NULL;
}
break;
default:
prevstate_is_astrskepsilon = NULL;
inspos_updatable = false;
}
}
#if !defined(SRELLDBG_NO_NEXTPOS_OPT)
if (mnp_inspos != 0)
{
state_size_type cur = mnp_inspos;
if (this->NFA_states[cur].type != st_success)
{
const state_type &prevstate = this->NFA_states[cur - 1];
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER) && !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET)
#if !defined(SRELLDBG_NO_SPLITCC)
if (!inserted && prevstate.next1 == 0)
#else
if (prevstate.next1 == 0)
#endif
{
range_pairs prevcc;
range_pairs nextcc;
// gather_if_char_or_cc_strict(prevcc, prevstate);
if (prevstate.type == st_character)
{
prevcc.set_solerange(range_pair_helper(prevstate.character));
}
else if (prevstate.type == st_character_class)
{
prevcc = this->character_class[prevstate.number];
}
gather_nextchars(nextcc, cur, 0u, true);
const uint_l32 cpnum_prevcc = prevcc.total_codepoints();
const uint_l32 cpnum_nextcc = nextcc.total_codepoints();
if (cpnum_nextcc != 0 && cpnum_nextcc < cpnum_prevcc)
{
state_array newNFAs;
state_type atom;
atom.reset();
atom.character = meta_char::mc_eq; // '='
atom.type = st_lookaround_open;
atom.next1 = static_cast<std::ptrdiff_t>(cur - 1) * 2 + 2;
atom.next2 = 1;
atom.quantifier.atleast = 2; // Match point rewinder.
newNFAs.append(1, atom);
newNFAs.append(this->NFA_states, 1, cur - 1);
atom.type = st_lookaround_close;
atom.next1 = 0;
atom.next2 = 0;
newNFAs.append(1, atom);
insert_at(1, newNFAs.size());
this->NFA_states.replace(1, newNFAs.size(), newNFAs);
this->NFA_states[0].next2 = this->NFA_states[0].next1;
this->NFA_states[0].next1 = 1;
return;
}
}
#endif // !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER) && !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET)
insert_at(cur, 1);
state_type &mnpstate = this->NFA_states[cur];
state_type &charstate = this->NFA_states[cur - 1];
mnpstate.type = st_move_nextpos;
#if !defined(SRELLDBG_NO_SPLITCC)
if (inserted)
{
charstate.next2 = 1;
}
else
#endif
if (charstate.next1 == 0)
{
mnpstate.next1 = charstate.next2 - 1;
charstate.next2 = 1;
}
else
{
mnpstate.next1 = -2;
charstate.next1 = 1;
}
}
}
#endif // !defined(SRELLDBG_NO_NEXTPOS_OPT)
}
bool is_exclusive_sequence(const re_quantifier &eq, const state_size_type curno, const state_size_type nextno) // const
{
const state_type &curstate = this->NFA_states[curno];
range_pairs curchar_class;
range_pairs nextchar_class;
if (curstate.type == st_character)
{
curchar_class.join(range_pair_helper(curstate.character));
}
else if (curstate.type == st_character_class)
{
curchar_class = this->character_class[curstate.number];
if (curchar_class.size() == 0) // Means [], which always makes matching fail.
return true; // For preventing the automaton from pushing bt data.
}
else
{
return false;
}
const bool canbe0length = gather_nextchars(nextchar_class, nextno, 0u, true);
if (nextchar_class.size())
{
if (!canbe0length || eq.is_greedy)
{
#if !defined(SRELLDBG_NO_SPLITCC)
range_pairs kept;
range_pairs removed;
curchar_class.split_ranges(kept, removed, nextchar_class);
if (removed.size() == 0) // !curchar_class.is_overlap(nextchar_class)
return true;
if (curstate.type == st_character_class && kept.size() && eq.is_infinity())
{
{
state_type &curstate2 = this->NFA_states[curno];
curstate2.character = kept.consists_of_one_character(this->is_icase());
if (curstate2.character != constants::invalid_u32value)
curstate2.type = st_character;
else
curstate2.number = this->character_class.register_newclass(kept);
}
const re_quantifier backupeq(eq);
insert_at(nextno, 2);
state_type &n0 = this->NFA_states[nextno];
state_type &n1 = this->NFA_states[nextno + 1];
n0.reset();
n0.type = st_epsilon;
n0.character = meta_char::mc_astrsk;
n0.quantifier = backupeq;
// n0.next2 = 1;
n0.next2 = 2;
if (!n0.quantifier.is_greedy)
{
n0.next1 = n0.next2;
n0.next2 = 1;
}
n1.reset();
n1.type = st_character_class;
n1.character = removed.consists_of_one_character(this->is_icase());
if (n1.character != constants::invalid_u32value)
n1.type = st_character;
else
n1.number = this->character_class.register_newclass(removed);
n1.next1 = -2;
// n1.next2 = 0;
return true;
}
#else // defined(SRELLDBG_NO_SPLITCC)
if (!curchar_class.is_overlap(nextchar_class))
{
return true;
}
#endif // !defined(SRELLDBG_NO_SPLITCC)
}
}
else if (/* nextchar_class.size() == 0 && */ (!canbe0length || only_success_left(nextno)))
{
// (size() == 0 && !canbe0length) means [].
return eq.is_greedy;
}
return false;
}
bool only_success_left(typename state_array::size_type pos) const
{
for (;;)
{
const state_type &state = this->NFA_states[pos];
switch (state.type)
{
case st_success:
return true;
case st_roundbracket_close:
case st_backreference:
if (state.next2 != 0 && state.next1 != state.next2)
return false;
break;
case st_epsilon:
if (state.next2 != 0 && !only_success_left(pos + state.next2))
return false;
break;
case st_roundbracket_open:
break; // /a*()/
default:
return false;
}
if (state.next1)
pos += state.next1;
else
return false;
}
}
#endif // !defined(SRELLDBG_NO_ASTERISK_OPT)
void insert_at(const typename state_array::size_type pos, const std::ptrdiff_t len)
{
state_type newstate;
for (typename state_array::size_type cur = 0; cur < pos; ++cur)
{
state_type &state = this->NFA_states[cur];
if (state.next1 && (cur + state.next1) >= pos)
state.next1 += len;
if (state.next2 && (cur + state.next2) >= pos)
state.next2 += len;
}
for (typename state_array::size_type cur = pos; cur < this->NFA_states.size(); ++cur)
{
state_type &state = this->NFA_states[cur];
if ((cur + state.next1) < pos)
state.next1 -= len;
if ((cur + state.next2) < pos)
state.next2 -= len;
}
newstate.reset();
newstate.type = st_epsilon;
for (std::ptrdiff_t count = 0; count < len; ++count)
this->NFA_states.insert(pos, newstate);
}
#if !defined(SRELLDBG_NO_NEXTPOS_OPT)
#endif // !defined(SRELLDBG_NO_NEXTPOS_OPT)
#if !defined(SRELLDBG_NO_BRANCH_OPT) || defined(SRELLTEST_NEXTPOS_OPT2)
typename state_array::size_type gather_if_char_or_charclass(range_pairs &charclass, typename state_array::size_type pos) const
{
for (; pos < this->NFA_states.size();)
{
const state_type &curstate = this->NFA_states[pos];
if (curstate.type == st_character && curstate.next2 == 0)
{
charclass.set_solerange(range_pair_helper(curstate.character));
return pos;
}
else if (curstate.type == st_character_class && curstate.next2 == 0)
{
charclass = this->character_class[curstate.number];
return pos;
}
else if (curstate.type == st_epsilon && curstate.next2 == 0)
{
}
else
break;
pos += curstate.next1;
}
return 0;
}
#endif // !defined(SRELLDBG_NO_BRANCH_OPT) || defined(SRELLTEST_NEXTPOS_OPT2)
#if !defined(SRELLDBG_NO_BRANCH_OPT)
void branch_optimisation()
{
range_pairs nextcharclass1;
for (typename state_array::size_type pos = 0; pos < this->NFA_states.size(); ++pos)
{
const state_type &state = this->NFA_states[pos];
if (state.is_branch())
{
const typename state_array::size_type nextcharpos = gather_if_char_or_charclass(nextcharclass1, pos + state.next1);
if (nextcharpos)
{
range_pairs nextcharclass2;
const bool canbe0length = gather_nextchars(nextcharclass2, pos + state.next2, 0u /* bracket_number */, true);
if (!canbe0length && !nextcharclass1.is_overlap(nextcharclass2))
{
state_type &branch = this->NFA_states[pos];
state_type &next1 = this->NFA_states[nextcharpos];
next1.next2 = pos + branch.next2 - nextcharpos;
branch.next2 = 0;
}
}
}
}
}
#endif // !defined(SRELLDBG_NO_BRANCH_OPT)
#if !defined(SRELL_NO_ICASE)
bool check_if_really_needs_icase_search()
{
uchar32 u32chars[unicode_case_folding::rev_maxset];
for (typename state_array::size_type i = 0; i < this->NFA_states.size(); ++i)
{
const state_type &state = this->NFA_states[i];
if (state.type == st_character)
{
if (unicode_case_folding::casefoldedcharset(u32chars, state.character) > 1)
return true;
}
else if (state.type == st_backreference)
return true;
}
// this->soflags &= ~regex_constants::icase;
return false;
}
#endif // !defined(SRELL_NO_ICASE)
#if !defined(SRELLDBG_NO_BMH)
void setup_bmhdata()
{
simple_array<uchar32> u32s;
for (typename state_array::size_type i = 1; i < this->NFA_states.size(); ++i)
{
const state_type &state = this->NFA_states[i];
if (state.type == st_character)
u32s.push_back(state.character);
else
{
u32s.clear();
break;
}
}
if (u32s.size() > 1)
// if ((u32s.size() > 1 && !this->is_ricase()) || (u32s.size() > 2 && this->is_ricase()))
{
if (this->bmdata)
this->bmdata->clear();
else
this->bmdata = new re_bmh<charT, utf_traits>;
this->bmdata->setup(u32s, this->is_ricase());
return /* false */;
}
if (this->bmdata)
delete this->bmdata;
this->bmdata = NULL;
// return true;
}
#endif // !defined(SRELLDBG_NO_BMH)
#if !defined(SRELLDBG_NO_CCPOS)
void set_charclass_posinfo()
{
this->character_class.finalise();
for (typename state_array::size_type i = 1; i < this->NFA_states.size(); ++i)
{
state_type &state = this->NFA_states[i];
if (state.type == st_character_class)
{
const range_pair &posinfo = this->character_class.charclasspos(state.number);
state.quantifier.setccpos(posinfo.first, posinfo.second);
}
}
}
#endif // !defined(SRELLDBG_NO_CCPOS)
#if !defined(SRELLDBG_NO_BRANCH_OPT2)
bool gather_if_char_or_charclass_strict(range_pairs &out, const state_type &state) const
{
if (state.type == st_character /* && state.next2 == 0 */)
{
out.set_solerange(range_pair_helper(state.character));
}
else if (state.type == st_character_class /* && state.next2 == 0 */)
{
out = this->character_class[state.number];
}
else
return false;
return true;
}
void branch_optimisation2()
{
range_pairs basealt1stch;
range_pairs nextalt1stch;
for (state_size_type pos = 0; pos < this->NFA_states.size(); ++pos)
{
const state_type &curstate = this->NFA_states[pos];
if (curstate.is_branch())
{
const state_size_type next1pos = pos + curstate.next1;
state_size_type precharchainpos = pos;
if (gather_if_char_or_charclass_strict(basealt1stch, this->NFA_states[next1pos]))
{
state_size_type next2pos = precharchainpos + curstate.next2;
state_size_type postcharchainpos = 0;
for (;;)
{
state_size_type next2next1pos = next2pos;
state_type &nstate2 = this->NFA_states[next2pos];
state_size_type next2next2pos = 0;
if (nstate2.is_branch())
{
next2next2pos = next2pos + nstate2.next2;
next2next1pos += nstate2.next1;
}
if (gather_if_char_or_charclass_strict(nextalt1stch, this->NFA_states[next2next1pos]))
{
const int relation = basealt1stch.relationship(nextalt1stch);
if (relation == 0)
{
if (next2next2pos) // if (nstate2.is_branch())
{
nstate2.reset();
nstate2.type = st_epsilon;
}
if (postcharchainpos == 0)
{
postcharchainpos = next1pos + 1;
insert_at(postcharchainpos, 1);
this->NFA_states[next1pos].next1 = 1;
}
else
{
const state_size_type prevbranchpos = postcharchainpos;
postcharchainpos = prevbranchpos + this->NFA_states[prevbranchpos].next2;
insert_at(postcharchainpos, 1);
this->NFA_states[prevbranchpos].next2 = postcharchainpos - prevbranchpos;
// Fix for bug210423. This line cannot be omitted, because
// NFA_states[prevbranchpos].next2 has been incremented in insert_at().
}
// if (next2next1pos >= postcharchainpos)
++next2next1pos;
if (precharchainpos >= postcharchainpos)
++precharchainpos;
state_type &prechainbranchpoint = this->NFA_states[precharchainpos];
if (next2next2pos)
{
// if (next2next2pos >= postcharchainpos)
++next2next2pos;
prechainbranchpoint.next2 = next2next2pos - precharchainpos;
}
else
{
prechainbranchpoint.next2 = 0;
}
state_type &newbranchpoint = this->NFA_states[postcharchainpos];
newbranchpoint.character = meta_char::mc_bar;
// newbranchpoint.next1 = 1;
newbranchpoint.next2 = next2next1pos + this->NFA_states[next2next1pos].next1 - postcharchainpos;
}
else if (relation == 1)
{
break;
}
else
precharchainpos = next2pos;
}
else
{
// Fix for bug210428.
// Original: /mm2|m|mm/
// 1st step: /m(?:m2||m)/ <- No more optimisation can be performed. Must quit.
// 2nd step: /mm(?:2||)/ <- BUG.
break;
}
if (next2next2pos == 0)
break;
next2pos = next2next2pos;
}
}
}
}
}
#endif // !defined(SRELLDBG_NO_BRANCH_OPT2)
public: // For debug.
void print_NFA_states(const int) const;
};
// re_compiler
} // namespace regex_internal
// ... "rei_compiler.hpp"]
// ["regex_sub_match.hpp" ...
// 28.9, class template sub_match:
template <class BidirectionalIterator>
class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>
{
public:
typedef typename std::iterator_traits<BidirectionalIterator>::value_type value_type;
typedef typename std::iterator_traits<BidirectionalIterator>::difference_type difference_type;
typedef BidirectionalIterator iterator;
typedef std::basic_string<value_type> string_type;
bool matched;
// constexpr sub_match(); // C++11.
sub_match() : matched(false)
{
}
difference_type length() const
{
return matched ? std::distance(this->first, this->second) : 0;
}
operator string_type() const
{
return matched ? string_type(this->first, this->second) : string_type();
}
string_type str() const
{
return matched ? string_type(this->first, this->second) : string_type();
}
int compare(const sub_match &s) const
{
return str().compare(s.str());
}
int compare(const string_type &s) const
{
return str().compare(s);
}
int compare(const value_type *const s) const
{
return str().compare(s);
}
};
// 28.9.2, sub_match non-member operators:
// [7.9.2] sub_match non-member operators
// Compares sub_match & with sub_match &.
template <class BiIter>
bool operator==(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
{
return lhs.compare(rhs) == 0; // 1
}
template <class BiIter>
bool operator!=(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
{
return lhs.compare(rhs) != 0; // 2
}
template <class BiIter>
bool operator<(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
{
return lhs.compare(rhs) < 0; // 3
}
template <class BiIter>
bool operator<=(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
{
return lhs.compare(rhs) <= 0; // 4
}
template <class BiIter>
bool operator>=(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
{
return lhs.compare(rhs) >= 0; // 5
}
template <class BiIter>
bool operator>(const sub_match<BiIter> &lhs, const sub_match<BiIter> &rhs)
{
return lhs.compare(rhs) > 0; // 6
}
// Compares basic_string & with sub_match &.
template <class BiIter, class ST, class SA>
bool operator==(
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
const sub_match<BiIter> &rhs
)
{
return rhs.compare(lhs.c_str()) == 0; // 7
}
template <class BiIter, class ST, class SA>
bool operator!=(
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
const sub_match<BiIter> &rhs
)
{
return !(lhs == rhs); // 8
}
template <class BiIter, class ST, class SA>
bool operator<(
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
const sub_match<BiIter> &rhs
)
{
return rhs.compare(lhs.c_str()) > 0; // 9
}
template <class BiIter, class ST, class SA>
bool operator>(
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
const sub_match<BiIter> &rhs
)
{
return rhs < lhs; // 10
}
template <class BiIter, class ST, class SA>
bool operator>=(
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
const sub_match<BiIter> &rhs
)
{
return !(lhs < rhs); // 11
}
template <class BiIter, class ST, class SA>
bool operator<=(
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &lhs,
const sub_match<BiIter> &rhs
)
{
return !(rhs < lhs); // 12
}
// Compares sub_match & with basic_string &.
template <class BiIter, class ST, class SA>
bool operator==(
const sub_match<BiIter> &lhs,
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
)
{
return lhs.compare(rhs.c_str()) == 0; // 13
}
template <class BiIter, class ST, class SA>
bool operator!=(
const sub_match<BiIter> &lhs,
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
)
{
return !(lhs == rhs); // 14
}
template <class BiIter, class ST, class SA>
bool operator<(
const sub_match<BiIter> &lhs,
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
)
{
return lhs.compare(rhs.c_str()) < 0; // 15
}
template <class BiIter, class ST, class SA>
bool operator>(
const sub_match<BiIter> &lhs,
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
)
{
return rhs < lhs; // 16
}
template <class BiIter, class ST, class SA>
bool operator>=(
const sub_match<BiIter> &lhs,
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
)
{
return !(lhs < rhs); // 17
}
template <class BiIter, class ST, class SA>
bool operator<=(
const sub_match<BiIter> &lhs,
const std::basic_string<typename std::iterator_traits<BiIter>::value_type, ST, SA> &rhs
)
{
return !(rhs < lhs); // 18
}
// Compares iterator_traits::value_type * with sub_match &.
template <class BiIter>
bool operator==(
typename std::iterator_traits<BiIter>::value_type const *lhs,
const sub_match<BiIter> &rhs
)
{
return rhs.compare(lhs) == 0; // 19
}
template <class BiIter>
bool operator!=(
typename std::iterator_traits<BiIter>::value_type const *lhs,
const sub_match<BiIter> &rhs
)
{
return !(lhs == rhs); // 20
}
template <class BiIter>
bool operator<(
typename std::iterator_traits<BiIter>::value_type const *lhs,
const sub_match<BiIter> &rhs
)
{
return rhs.compare(lhs) > 0; // 21
}
template <class BiIter>
bool operator>(
typename std::iterator_traits<BiIter>::value_type const *lhs,
const sub_match<BiIter> &rhs
)
{
return rhs < lhs; // 22
}
template <class BiIter>
bool operator>=(
typename std::iterator_traits<BiIter>::value_type const *lhs,
const sub_match<BiIter> &rhs
)
{
return !(lhs < rhs); // 23
}
template <class BiIter>
bool operator<=(
typename std::iterator_traits<BiIter>::value_type const *lhs,
const sub_match<BiIter> &rhs
)
{
return !(rhs < lhs); // 24
}
// Compares sub_match & with iterator_traits::value_type *.
template <class BiIter>
bool operator==(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const *rhs
)
{
return lhs.compare(rhs) == 0; // 25
}
template <class BiIter>
bool operator!=(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const *rhs
)
{
return !(lhs == rhs); // 26
}
template <class BiIter>
bool operator<(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const *rhs
)
{
return lhs.compare(rhs) < 0; // 27
}
template <class BiIter>
bool operator>(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const *rhs
)
{
return rhs < lhs; // 28
}
template <class BiIter>
bool operator>=(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const *rhs
)
{
return !(lhs < rhs); // 29
}
template <class BiIter>
bool operator<=(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const *rhs
)
{
return !(rhs < lhs); // 30
}
// Compares iterator_traits::value_type & with sub_match &.
template <class BiIter>
bool operator==(
typename std::iterator_traits<BiIter>::value_type const &lhs,
const sub_match<BiIter> &rhs
)
{
return rhs.compare(typename sub_match<BiIter>::string_type(1, lhs)) == 0; // 31
}
template <class BiIter>
bool operator!=(
typename std::iterator_traits<BiIter>::value_type const &lhs,
const sub_match<BiIter> &rhs
)
{
return !(lhs == rhs); // 32
}
template <class BiIter>
bool operator<(
typename std::iterator_traits<BiIter>::value_type const &lhs,
const sub_match<BiIter> &rhs
)
{
return rhs.compare(typename sub_match<BiIter>::string_type(1, lhs)) > 0; // 33
}
template <class BiIter>
bool operator>(
typename std::iterator_traits<BiIter>::value_type const &lhs,
const sub_match<BiIter> &rhs
)
{
return rhs < lhs; // 34
}
template <class BiIter>
bool operator>=(
typename std::iterator_traits<BiIter>::value_type const &lhs,
const sub_match<BiIter> &rhs
)
{
return !(lhs < rhs); // 35
}
template <class BiIter>
bool operator<=(
typename std::iterator_traits<BiIter>::value_type const &lhs,
const sub_match<BiIter> &rhs
)
{
return !(rhs < lhs); // 36
}
// Compares sub_match & with iterator_traits::value_type &.
template <class BiIter>
bool operator==(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const &rhs
)
{
return lhs.compare(typename sub_match<BiIter>::string_type(1, rhs)) == 0; // 37
}
template <class BiIter>
bool operator!=(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const &rhs
)
{
return !(lhs == rhs); // 38
}
template <class BiIter>
bool operator<(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const &rhs
)
{
return lhs.compare(typename sub_match<BiIter>::string_type(1, rhs)) < 0; // 39
}
template <class BiIter>
bool operator>(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const &rhs
)
{
return rhs < lhs; // 40
}
template <class BiIter>
bool operator>=(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const &rhs
)
{
return !(lhs < rhs); // 41
}
template <class BiIter>
bool operator<=(
const sub_match<BiIter> &lhs,
typename std::iterator_traits<BiIter>::value_type const &rhs
)
{
return !(rhs < lhs); // 42
}
template <class charT, class ST, class BiIter>
std::basic_ostream<charT, ST> &operator<<(std::basic_ostream<charT, ST> &os, const sub_match<BiIter> &m)
{
return (os << m.str());
}
typedef sub_match<const char *> csub_match;
typedef sub_match<const wchar_t *> wcsub_match;
typedef sub_match<std::string::const_iterator> ssub_match;
typedef sub_match<std::wstring::const_iterator> wssub_match;
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef sub_match<const char16_t *> u16csub_match;
typedef sub_match<const char32_t *> u32csub_match;
typedef sub_match<std::u16string::const_iterator> u16ssub_match;
typedef sub_match<std::u32string::const_iterator> u32ssub_match;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED)
typedef sub_match<const char8_t *> u8csub_match;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
typedef sub_match<std::u8string::const_iterator> u8ssub_match;
#endif
typedef csub_match u8ccsub_match;
typedef ssub_match u8cssub_match;
#if !defined(SRELL_CPP20_CHAR8_ENABLED)
typedef u8ccsub_match u8csub_match;
#endif
#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
typedef u8cssub_match u8ssub_match;
#endif
#if defined(WCHAR_MAX)
#if WCHAR_MAX >= 0x10ffff
typedef wcsub_match u32wcsub_match;
typedef wssub_match u32wssub_match;
typedef u32wcsub_match u1632wcsub_match;
typedef u32wssub_match u1632wssub_match;
#elif WCHAR_MAX >= 0xffff
typedef wcsub_match u16wcsub_match;
typedef wssub_match u16wssub_match;
typedef u16wcsub_match u1632wcsub_match;
typedef u16wssub_match u1632wssub_match;
#endif
#endif
// ... "regex_sub_match.hpp"]
// ["regex_match_results.hpp" ...
// 28.10, class template match_results:
template <class BidirectionalIterator, class Allocator = std::allocator<sub_match<BidirectionalIterator> > >
class match_results
{
public:
typedef sub_match<BidirectionalIterator> value_type;
typedef const value_type & const_reference;
typedef const_reference reference;
// typedef implementation defined const_iterator;
typedef typename std::vector<value_type, Allocator>::const_iterator const_iterator;
typedef const_iterator iterator;
typedef typename std::iterator_traits<BidirectionalIterator>::difference_type difference_type;
#if defined(__cplusplus) && __cplusplus >= 201103L
typedef typename std::allocator_traits<Allocator>::size_type size_type;
#else
typedef typename Allocator::size_type size_type; // TR1.
#endif
typedef Allocator allocator_type;
typedef typename std::iterator_traits<BidirectionalIterator>::value_type char_type;
typedef std::basic_string<char_type> string_type;
public:
// 28.10.1, construct/copy/destroy:
// [7.10.1] construct/copy/destroy
explicit match_results(const Allocator &a = Allocator()) : ready_(false), sub_matches_(a)
{
}
match_results(const match_results &m)
{
operator=(m);
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
match_results(match_results &&m) SRELL_NOEXCEPT
{
operator=(std::move(m));
}
#endif
match_results &operator=(const match_results &m)
{
if (this != &m)
{
// this->sstate_ = m.sstate_;
this->ready_ = m.ready_;
this->sub_matches_ = m.sub_matches_;
this->prefix_ = m.prefix_;
this->suffix_ = m.suffix_;
this->base_ = m.base_;
#if !defined(SRELL_NO_NAMEDCAPTURE)
this->gnames_ = m.gnames_;
#endif
}
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
match_results &operator=(match_results &&m) SRELL_NOEXCEPT
{
if (this != &m)
{
// this->sstate_ = std::move(m.sstate_);
this->ready_ = m.ready_;
this->sub_matches_ = std::move(m.sub_matches_);
this->prefix_ = std::move(m.prefix_);
this->suffix_ = std::move(m.suffix_);
this->base_ = m.base_;
#if !defined(SRELL_NO_NAMEDCAPTURE)
this->gnames_ = std::move(m.gnames_);
#endif
}
return *this;
}
#endif
// ~match_results();
// 28.10.2, state:
bool ready() const
{
return ready_;
}
// 28.10.3, size:
// [7.10.2] size
size_type size() const
{
return sub_matches_.size();
}
size_type max_size() const
{
return sub_matches_.max_size();
// return static_cast<size_type>(~0) / sizeof (value_type);
}
bool empty() const
{
return size() == 0;
}
// 28.10.4, element access:
// [7.10.3] element access
difference_type length(const size_type sub = 0) const
{
return (*this)[sub].length();
}
difference_type position(const size_type sub = 0) const
{
const_reference ref = (*this)[sub];
return std::distance(base_, ref.first);
}
string_type str(const size_type sub = 0) const
{
return string_type((*this)[sub]);
}
const_reference operator[](const size_type n) const
{
#if defined(SRELL_STRICT_IMPL)
return n < sub_matches_.size() ? sub_matches_[n] : unmatched_;
#else
return sub_matches_[n];
#endif
}
#if !defined(SRELL_NO_NAMEDCAPTURE)
// Helpers for overload resolution of the integer literal 0 of signed types.
template <typename IntegerType>
difference_type length(const IntegerType zero) const
{
return length(static_cast<size_type>(zero));
}
template <typename IntegerType>
difference_type position(const IntegerType zero) const
{
return position(static_cast<size_type>(zero));
}
template <typename IntegerType>
string_type str(const IntegerType zero) const
{
return str(static_cast<size_type>(zero));
}
template <typename IntegerType>
const_reference operator[](const IntegerType zero) const
{
return operator[](static_cast<size_type>(zero));
}
difference_type length(const string_type &sub) const
{
return (*this)[sub].length();
}
difference_type position(const string_type &sub) const
{
const_reference ref = (*this)[sub];
return std::distance(base_, ref.first);
}
string_type str(const string_type &sub) const
{
return string_type((*this)[sub]);
}
const_reference operator[](const string_type &sub) const
{
return sub_matches_[lookup_and_check_backref_number(sub.c_str(), sub.c_str() + sub.size())];
}
difference_type length(const char_type *sub) const
{
return (*this)[sub].length();
}
difference_type position(const char_type *sub) const
{
const_reference ref = (*this)[sub];
return std::distance(base_, ref.first);
}
string_type str(const char_type *sub) const
{
return string_type((*this)[sub]);
}
const_reference operator[](const char_type *sub) const
{
return sub_matches_[lookup_and_check_backref_number(sub, sub + std::char_traits<char_type>::length(sub))];
}
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
const_reference prefix() const
{
return prefix_;
}
const_reference suffix() const
{
return suffix_;
}
const_iterator begin() const
{
return sub_matches_.begin();
}
const_iterator end() const
{
return sub_matches_.end();
}
const_iterator cbegin() const
{
return sub_matches_.begin();
}
const_iterator cend() const
{
return sub_matches_.end();
}
// 28.10.5, format:
// [7.10.4] format
template <class OutputIter>
OutputIter format(
OutputIter out,
const char_type *fmt_first,
const char_type *const fmt_last,
regex_constants::match_flag_type /* flags */ = regex_constants::format_default
) const
{
if (this->ready() && !this->empty())
{
#if !defined(SRELL_NO_NAMEDCAPTURE)
const bool no_groupnames = gnames_.size() == 0;
#endif
const value_type &m0 = (*this)[0];
while (fmt_first != fmt_last)
{
if (*fmt_first != static_cast<char_type>(regex_internal::meta_char::mc_dollar)) // '$'
{
*out++ = *fmt_first++;
}
else
{
++fmt_first;
if (fmt_first == fmt_last)
{
*out++ = regex_internal::meta_char::mc_dollar; // '$';
}
else if (*fmt_first == static_cast<char_type>(regex_internal::char_other::co_amp)) // '&', $&
{
out = std::copy(m0.first, m0.second, out);
++fmt_first;
}
else if (*fmt_first == static_cast<char_type>(regex_internal::char_other::co_grav)) // '`', $`, prefix.
{
out = std::copy(this->prefix().first, this->prefix().second, out);
++fmt_first;
}
else if (*fmt_first == static_cast<char_type>(regex_internal::char_other::co_apos)) // '\'', $', suffix.
{
out = std::copy(this->suffix().first, this->suffix().second, out);
++fmt_first;
}
#if !defined(SRELL_NO_NAMEDCAPTURE)
else if (*fmt_first == static_cast<char_type>(regex_internal::meta_char::mc_lt) && !no_groupnames) // '<', $<
{
const char_type *const current_backup = fmt_first;
bool replaced = false;
if (++fmt_first == fmt_last)
; // Do nothing.
else
{
const char_type *const name_begin = fmt_first;
for (;; ++fmt_first)
{
if (*fmt_first == static_cast<char_type>(regex_internal::meta_char::mc_gt))
{
const regex_internal::uint_l32 backref_number = lookup_backref_number(name_begin, fmt_first);
if (backref_number != regex_internal::groupname_mapper<char_type>::notfound)
{
const value_type &mn = (*this)[backref_number];
if (mn.matched)
out = std::copy(mn.first, mn.second, out);
// replaced = true;
}
replaced = true;
++fmt_first;
break;
}
if (fmt_first == fmt_last)
break;
}
}
if (!replaced)
{
fmt_first = current_backup;
*out++ = regex_internal::meta_char::mc_dollar; // '$';
}
}
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
else
{
const char_type *const backup_pos = fmt_first;
size_type backref_number = 0;
if (fmt_first != fmt_last && *fmt_first >= static_cast<char_type>(regex_internal::char_alnum::ch_0) && *fmt_first <= static_cast<char_type>(regex_internal::char_alnum::ch_9)) // '0'-'9'
{
backref_number += *fmt_first - regex_internal::char_alnum::ch_0; // '0';
if (++fmt_first != fmt_last && *fmt_first >= static_cast<char_type>(regex_internal::char_alnum::ch_0) && *fmt_first <= static_cast<char_type>(regex_internal::char_alnum::ch_9)) // '0'-'9'
{
backref_number *= 10;
backref_number += *fmt_first - regex_internal::char_alnum::ch_0; // '0';
++fmt_first;
}
}
if (backref_number && backref_number < this->size())
{
const value_type &mn = (*this)[backref_number];
if (mn.matched)
out = std::copy(mn.first, mn.second, out);
}
else
{
*out++ = regex_internal::meta_char::mc_dollar; // '$';
fmt_first = backup_pos;
if (*fmt_first == static_cast<char_type>(regex_internal::meta_char::mc_dollar))
++fmt_first;
}
}
}
}
}
return out;
}
template <class OutputIter, class ST, class SA>
OutputIter format(
OutputIter out,
const std::basic_string<char_type, ST, SA> &fmt,
regex_constants::match_flag_type flags = regex_constants::format_default
) const
{
return format(out, fmt.data(), fmt.data() + fmt.size(), flags);
}
template <class ST, class SA>
std::basic_string<char_type, ST, SA> format(
const string_type &fmt,
regex_constants::match_flag_type flags = regex_constants::format_default
) const
{
std::basic_string<char_type, ST, SA> result;
// format(std::back_insert_iterator<string_type>(result), fmt, flags);
format(std::back_inserter(result), fmt, flags);
return result;
}
string_type format(const char_type *fmt, regex_constants::match_flag_type flags = regex_constants::format_default) const
{
string_type result;
format(std::back_inserter(result), fmt, fmt + std::char_traits<char_type>::length(fmt), flags);
return result;
}
// 28.10.6, allocator:
// [7.10.5] allocator
allocator_type get_allocator() const
{
return allocator_type();
}
// 28.10.7, swap:
// [7.10.6] swap
void swap(match_results &that)
{
const match_results tmp(that);
that = *this;
*this = tmp;
}
public: // For internal.
typedef match_results<BidirectionalIterator> match_results_type;
typedef typename match_results_type::size_type match_results_size_type;
typedef typename regex_internal::re_search_state</*charT, */BidirectionalIterator> search_state_type;
search_state_type sstate_;
void clear_()
{
ready_ = false;
sub_matches_.clear();
// prefix_.matched = false;
// suffix_.matched = false;
#if !defined(SRELL_NO_NAMEDCAPTURE)
gnames_.clear();
#endif
}
// template <typename charT>
#if !defined(SRELL_NO_NAMEDCAPTURE)
bool set_match_results_(const regex_internal::groupname_mapper<char_type> &gnames)
#else
bool set_match_results_()
#endif
{
sub_matches_.resize(sstate_.bracket.size());
// value_type &m0 = sub_matches_[0];
sub_matches_[0].matched = true;
for (regex_internal::uint_l32 i = 1; i < static_cast<regex_internal::uint_l32>(sstate_.bracket.size()); ++i)
{
const typename search_state_type::submatch_type &br = sstate_.bracket[i];
value_type &sm = sub_matches_[i];
sm.first = br.core.open_at;
sm.second = br.core.close_at;
sm.matched = br.counter != 0;
}
base_ = sstate_.lblim;
prefix_.first = sstate_.srchbegin;
prefix_.second = sub_matches_[0].first = sstate_.bracket[0].core.open_at;
suffix_.first = sub_matches_[0].second = sstate_.nth.in_string;
suffix_.second = sstate_.srchend;
prefix_.matched = prefix_.first != prefix_.second; // The spec says prefix().first != prefix().second
suffix_.matched = suffix_.first != suffix_.second; // The spec says suffix().first != suffix().second
#if !defined(SRELL_NO_NAMEDCAPTURE)
gnames_ = gnames;
#endif
ready_ = true;
return true;
}
bool set_match_results_bmh_()
{
sub_matches_.resize(1);
// value_type &m0 = sub_matches_[0];
sub_matches_[0].matched = true;
base_ = sstate_.lblim;
prefix_.first = sstate_.srchbegin;
prefix_.second = sub_matches_[0].first = sstate_.nth.in_string;
suffix_.first = sub_matches_[0].second = sstate_.nextpos;
suffix_.second = sstate_.srchend;
prefix_.matched = prefix_.first != prefix_.second;
suffix_.matched = suffix_.first != suffix_.second;
ready_ = true;
return true;
}
void set_prefix_first_(const BidirectionalIterator pf)
{
prefix_.first = pf;
}
bool mark_as_failed_()
{
ready_ = true; // 30.11.2 and 3: Postconditions: m.ready() == true in all cases.
return false;
}
private:
#if !defined(SRELL_NO_NAMEDCAPTURE)
regex_internal::uint_l32 lookup_backref_number(const char_type *begin, const char_type *const end) const
{
typename regex_internal::groupname_mapper<char_type>::gname_string key(end - begin);
for (std::size_t i = 0; begin != end; ++begin, ++i)
key[i] = *begin;
return gnames_[key];
}
regex_internal::uint_l32 lookup_and_check_backref_number(const char_type *begin, const char_type *const end) const
{
const regex_internal::uint_l32 backrefno = lookup_backref_number(begin, end);
if (backrefno == regex_internal::groupname_mapper<char_type>::notfound)
throw regex_error(regex_constants::error_backref);
return backrefno;
}
#endif // !defined(SRELL_NO_NAMEDCAPTURE)
public: // For debug.
template <typename BasicRegexT>
void print_sub_matches(const BasicRegexT &, const int) const;
void print_addresses(const value_type &, const char *const) const;
private:
typedef std::vector<value_type, Allocator> sub_match_array;
bool ready_;
sub_match_array sub_matches_;
value_type prefix_;
value_type suffix_;
BidirectionalIterator base_;
#if !defined(SRELL_NO_NAMEDCAPTURE)
regex_internal::groupname_mapper<char_type> gnames_;
#endif
#if defined(SRELL_STRICT_IMPL)
value_type unmatched_;
#endif
};
// 28.10.7, match_results swap:
// [7.10.6] match_results swap
template <class BidirectionalIterator, class Allocator>
void swap(
match_results<BidirectionalIterator, Allocator> &m1,
match_results<BidirectionalIterator, Allocator> &m2
)
{
m1.swap(m2);
}
// 28.10.8, match_results comparisons
template <class BidirectionalIterator, class Allocator>
bool operator==(
const match_results<BidirectionalIterator, Allocator> &m1,
const match_results<BidirectionalIterator, Allocator> &m2
)
{
if (!m1.ready() && !m2.ready())
return true;
if (m1.ready() && m2.ready())
{
if (m1.empty() && m2.empty())
return true;
if (!m1.empty() && !m2.empty())
{
return m1.prefix() == m2.prefix() && m1.size() == m2.size() && std::equal(m1.begin(), m1.end(), m2.begin()) && m1.suffix() == m2.suffix();
}
}
return false;
}
template <class BidirectionalIterator, class Allocator>
bool operator!=(
const match_results<BidirectionalIterator, Allocator> &m1,
const match_results<BidirectionalIterator, Allocator> &m2
)
{
return !(m1 == m2);
}
typedef match_results<const char *> cmatch;
typedef match_results<const wchar_t *> wcmatch;
typedef match_results<std::string::const_iterator> smatch;
typedef match_results<std::wstring::const_iterator> wsmatch;
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef match_results<const char16_t *> u16cmatch;
typedef match_results<const char32_t *> u32cmatch;
typedef match_results<std::u16string::const_iterator> u16smatch;
typedef match_results<std::u32string::const_iterator> u32smatch;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED)
typedef match_results<const char8_t *> u8cmatch;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
typedef match_results<std::u8string::const_iterator> u8smatch;
#endif
typedef cmatch u8ccmatch;
typedef smatch u8csmatch;
#if !defined(SRELL_CPP20_CHAR8_ENABLED)
typedef u8ccmatch u8cmatch;
#endif
#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
typedef u8csmatch u8smatch;
#endif
#if defined(WCHAR_MAX)
#if WCHAR_MAX >= 0x10ffff
typedef wcmatch u32wcmatch;
typedef wsmatch u32wsmatch;
typedef u32wcmatch u1632wcmatch;
typedef u32wsmatch u1632wsmatch;
#elif WCHAR_MAX >= 0xffff
typedef wcmatch u16wcmatch;
typedef wsmatch u16wsmatch;
typedef u16wcmatch u1632wcmatch;
typedef u16wsmatch u1632wsmatch;
#endif
#endif
// ... "regex_match_results.hpp"]
// ["rei_algorithm.hpp" ...
namespace regex_internal
{
template <typename charT, typename traits>
class regex_object : public re_compiler<charT, traits>
{
public:
template <typename BidirectionalIterator>
bool search
(
const BidirectionalIterator begin,
const BidirectionalIterator end,
const BidirectionalIterator lookbehind_limit,
match_results<BidirectionalIterator> &results,
const regex_constants::match_flag_type flags /* = regex_constants::match_default */
) const
{
results.clear_();
// results.sstate_.template init<utf_traits>(begin, end, lookbehind_limit, flags);
results.sstate_.init(begin, end, lookbehind_limit, flags);
if (results.sstate_.match_continuous_flag())
{
if (this->NFA_states.size())
{
results.sstate_.set_entrypoint(this->NFA_states[0].next_state2);
goto DO_SEARCH;
}
}
else
#if !defined(SRELLDBG_NO_BMH)
if (this->bmdata)
{
#if !defined(SRELL_NO_ICASE)
if (!this->is_ricase() ? this->bmdata->do_casesensitivesearch(results.sstate_, typename std::iterator_traits<BidirectionalIterator>::iterator_category()) : this->bmdata->do_icasesearch(results.sstate_, typename std::iterator_traits<BidirectionalIterator>::iterator_category()))
#else
if (this->bmdata->do_casesensitivesearch(results.sstate_, typename std::iterator_traits<BidirectionalIterator>::iterator_category()))
#endif
return results.set_match_results_bmh_();
}
else
#endif
if (this->NFA_states.size())
{
results.sstate_.set_entrypoint(this->NFA_states[0].next_state1);
DO_SEARCH:
results.sstate_.init_for_automaton(this->number_of_brackets, this->number_of_counters, this->number_of_repeats);
#if !defined(SRELL_NO_ICASE)
if (!this->is_ricase() ? do_search<false>(results) : do_search<true>(results))
#else
if (do_search<false>(results))
#endif
{
#if !defined(SRELL_NO_NAMEDCAPTURE)
return results.set_match_results_(this->namedcaptures);
#else
return results.set_match_results_();
#endif
}
}
return results.mark_as_failed_();
}
private:
typedef typename traits::utf_traits utf_traits;
template <const bool icase, typename BidirectionalIterator>
bool do_search
(
match_results<BidirectionalIterator> &results
) const
{
re_search_state</*charT, */BidirectionalIterator> &sstate = results.sstate_;
const BidirectionalIterator searchend = sstate.nth.in_string;
for (;;)
{
const bool final = sstate.nextpos == searchend;
sstate.nth.in_string = sstate.nextpos;
if (!final)
{
#ifdef SRELLDBG_NO_1STCHRCLS
utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend);
#else
{
#if !defined(SRELLDBG_NO_BITSET)
if (!this->firstchar_class_bs.test((*sstate.nextpos++) & utf_traits::bitsetmask))
#else
const uchar32 firstchar = utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend);
if (!this->firstchar_class.is_included(firstchar))
#endif
continue;
}
#endif
}
// Even when final == true, we have to try for such expressions
// as "" =~ /^$/ or "..." =~ /$/.
#if defined(SRELL_NO_LIMIT_COUNTER)
sstate.reset(/* first */);
#else
sstate.reset(/* first, */ this->limit_counter);
#endif
if (run_automaton<icase, false>(sstate /* , false */))
return true;
if (final)
break;
}
return false;
}
template <typename T, const bool>
struct casehelper
{
static T canonicalise(const T t)
{
return t;
}
};
template <typename T>
struct casehelper<T, true>
{
static T canonicalise(const T t)
{
return unicode_case_folding::do_casefolding(t);
}
};
template <const bool icase, const bool reverse, typename BidirectionalIterator>
bool run_automaton
(
// match_results<BidirectionalIterator> &results,
re_search_state</*charT, */BidirectionalIterator> &sstate
// , const bool is_recursive /* = false */
) const
{
typedef casehelper<uchar32, icase> casehelper_type;
typedef typename re_object_core<charT, traits>::state_type state_type;
typedef re_search_state</*charT, */BidirectionalIterator> ss_type;
// typedef typename ss_type::search_core_state scstate_type;
typedef typename ss_type::submatch_type submatch_type;
typedef typename ss_type::submatchcore_type submatchcore_type;
typedef typename ss_type::counter_type counter_type;
typedef typename ss_type::position_type position_type;
bool is_matched;
goto START;
JUDGE:
if (is_matched)
{
MATCHED:
sstate.nth.in_NFA_states = sstate.nth.in_NFA_states->next_state1;
}
else
{
NOT_MATCHED:
#if !defined(SRELL_NO_LIMIT_COUNTER)
if (--sstate.failure_counter)
{
#endif
if (sstate.bt_stack.size() > sstate.btstack_size)
{
sstate.nth = sstate.bt_stack.back();
sstate.bt_stack.pop_back();
sstate.nth.in_NFA_states = sstate.nth.in_NFA_states->next_state2;
// continue;
}
else
{
return false;
}
#if !defined(SRELL_NO_LIMIT_COUNTER)
}
else
throw regex_error(regex_constants::error_complexity);
#endif
}
// START:
for (;;)
{
START:
const state_type &current_NFA = *sstate.nth.in_NFA_states;
switch (current_NFA.type)
{
case st_character:
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(push)
#pragma warning(disable:4127)
#endif
if (!reverse)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(pop)
#endif
{
if (!sstate.is_at_srchend())
{
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
const BidirectionalIterator prevpos = sstate.nth.in_string;
#endif
const uchar32 uchar = casehelper_type::canonicalise(utf_traits::codepoint_inc(sstate.nth.in_string, sstate.srchend));
RETRY_CF:
const state_type &current_NFA2 = *sstate.nth.in_NFA_states;
if (current_NFA2.character == uchar)
goto MATCHED;
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
if (current_NFA2.next_state2)
{
sstate.nth.in_NFA_states = current_NFA2.next_state2;
if (sstate.nth.in_NFA_states->type == st_character)
goto RETRY_CF;
sstate.nth.in_string = prevpos;
continue;
}
#endif
}
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
else if (current_NFA.next_state2)
{
sstate.nth.in_NFA_states = current_NFA.next_state2;
continue;
}
#endif
}
else // reverse == true.
{
if (!sstate.is_at_lookbehindlimit())
{
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
const BidirectionalIterator prevpos = sstate.nth.in_string;
#endif
const uchar32 uchar = casehelper_type::canonicalise(utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim));
RETRY_CB:
const state_type &current_NFA2 = *sstate.nth.in_NFA_states;
if (current_NFA2.character == uchar)
goto MATCHED;
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
if (current_NFA2.next_state2)
{
sstate.nth.in_NFA_states = current_NFA2.next_state2;
if (sstate.nth.in_NFA_states->type == st_character)
goto RETRY_CB;
sstate.nth.in_string = prevpos;
continue;
}
#endif
}
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
else if (current_NFA.next_state2)
{
sstate.nth.in_NFA_states = current_NFA.next_state2;
continue;
}
#endif
}
goto NOT_MATCHED;
case st_character_class:
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(push)
#pragma warning(disable:4127)
#endif
if (!reverse)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(pop)
#endif
{
if (!sstate.is_at_srchend())
{
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
const BidirectionalIterator prevpos = sstate.nth.in_string;
#endif
const uchar32 uchar = utf_traits::codepoint_inc(sstate.nth.in_string, sstate.srchend);
// RETRY_CCF:
const state_type &current_NFA2 = *sstate.nth.in_NFA_states;
#if !defined(SRELLDBG_NO_CCPOS)
if (this->character_class.is_included(current_NFA2.quantifier.offset, current_NFA2.quantifier.length, uchar))
#else
if (this->character_class.is_included(current_NFA2.number, uchar))
#endif
goto MATCHED;
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
if (current_NFA2.next_state2)
{
sstate.nth.in_NFA_states = current_NFA2.next_state2;
// if (sstate.nth.in_NFA_states->type == st_character_class)
// goto RETRY_CCF;
sstate.nth.in_string = prevpos;
continue;
}
#endif
}
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
else if (current_NFA.next_state2)
{
sstate.nth.in_NFA_states = current_NFA.next_state2;
continue;
}
#endif
}
else // reverse == true.
{
if (!sstate.is_at_lookbehindlimit())
{
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
const BidirectionalIterator prevpos = sstate.nth.in_string;
#endif
const uchar32 uchar = utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim);
// RETRY_CCB:
const state_type &current_NFA2 = *sstate.nth.in_NFA_states;
#if !defined(SRELLDBG_NO_CCPOS)
if (this->character_class.is_included(current_NFA2.quantifier.offset, current_NFA2.quantifier.length, uchar))
#else
if (this->character_class.is_included(current_NFA2.number, uchar))
#endif
goto MATCHED;
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
if (current_NFA2.next_state2)
{
sstate.nth.in_NFA_states = current_NFA2.next_state2;
// if (sstate.nth.in_NFA_states->type == st_character_class)
// goto RETRY_CCB;
sstate.nth.in_string = prevpos;
continue;
}
#endif
}
#if !defined(SRELLDBG_NO_ASTERISK_OPT)
else if (current_NFA.next_state2)
{
sstate.nth.in_NFA_states = current_NFA.next_state2;
continue;
}
#endif
}
goto NOT_MATCHED;
case st_epsilon:
#if defined(SRELLDBG_NO_SKIP_EPSILON)
if (current_NFA.next_state2)
#endif
{
sstate.bt_stack.push_back(sstate.nth); // sstate.push();
}
sstate.nth.in_NFA_states = current_NFA.next_state1;
continue;
default:
switch (current_NFA.type)
{
case st_check_counter:
{
const uint_l32 counter = sstate.counter[current_NFA.number];
if (counter < current_NFA.quantifier.atmost)
{
++sstate.counter[current_NFA.number];
LOOP_WITHOUT_INCREMENT:
if (counter >= current_NFA.quantifier.atleast)
{
sstate.bt_stack.push_back(sstate.nth);
sstate.nth.in_NFA_states = current_NFA.next_state1;
}
else
{
sstate.nth.in_NFA_states
= current_NFA.quantifier.is_greedy
? current_NFA.next_state1
: current_NFA.next_state2;
}
}
else
{
if (current_NFA.quantifier.is_infinity())
goto LOOP_WITHOUT_INCREMENT;
sstate.nth.in_NFA_states
= current_NFA.quantifier.is_greedy
? current_NFA.next_state2
: current_NFA.next_state1;
}
}
continue;
case st_decrement_counter:
--sstate.counter[current_NFA.number];
goto NOT_MATCHED;
case st_save_and_reset_counter:
{
counter_type &c = sstate.counter[current_NFA.number];
sstate.counter_stack.push_back(c);
sstate.bt_stack.push_back(sstate.nth);
c = 0;
}
goto MATCHED;
case st_restore_counter:
sstate.counter[current_NFA.number] = sstate.counter_stack.back();
sstate.counter_stack.pop_back();
goto NOT_MATCHED;
case st_roundbracket_open: // '(':
{
submatch_type &bracket = sstate.bracket[current_NFA.number];
sstate.capture_stack.push_back(bracket.core);
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(push)
#pragma warning(disable:4127)
#endif
if (!reverse)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(pop)
#endif
{
bracket.core.open_at = sstate.nth.in_string;
}
else
bracket.core.close_at = sstate.nth.in_string;
++bracket.counter;
for (uint_l32 brno = current_NFA.quantifier.atleast; brno <= current_NFA.quantifier.atmost; ++brno)
{
submatch_type &inner_bracket = sstate.bracket[brno];
sstate.capture_stack.push_back(inner_bracket.core);
sstate.counter_stack.push_back(inner_bracket.counter);
inner_bracket.core.open_at = inner_bracket.core.close_at = sstate.srchend;
inner_bracket.counter = 0;
// ECMAScript spec (3-5.1) 15.10.2.5, NOTE 3.
// ECMAScript 2018 (ES9) 21.2.2.5.1, Note 3.
}
sstate.bt_stack.push_back(sstate.nth);
}
goto MATCHED;
case st_roundbracket_pop: // '/':
{
for (uint_l32 brno = current_NFA.quantifier.atmost; brno >= current_NFA.quantifier.atleast; --brno)
{
submatch_type &inner_bracket = sstate.bracket[brno];
inner_bracket.counter = sstate.counter_stack.back();
inner_bracket.core = sstate.capture_stack.back();
sstate.counter_stack.pop_back();
sstate.capture_stack.pop_back();
}
submatch_type &bracket = sstate.bracket[current_NFA.number];
bracket.core = sstate.capture_stack.back();
sstate.capture_stack.pop_back();
--bracket.counter;
}
goto NOT_MATCHED;
case st_roundbracket_close: // ')':
{
submatch_type &bracket = sstate.bracket[current_NFA.number];
submatchcore_type &brc = bracket.core;
if ((!reverse ? brc.open_at : brc.close_at) != sstate.nth.in_string)
{
sstate.nth.in_NFA_states = current_NFA.next_state1;
}
else // 0 width match, breaks from the loop.
{
if (current_NFA.next_state1->type != st_check_counter)
{
if (bracket.counter > 1)
goto NOT_MATCHED; // ECMAScript spec 15.10.2.5, note 4.
sstate.nth.in_NFA_states = current_NFA.next_state2;
// Accepts 0 width match and exits.
}
else
{
// A pair with check_counter.
const counter_type counter = sstate.counter[current_NFA.next_state1->number];
if (counter > current_NFA.next_state1->quantifier.atleast)
goto NOT_MATCHED; // Takes a captured string in the previous loop.
sstate.nth.in_NFA_states = current_NFA.next_state1;
// Accepts 0 width match and continues.
}
}
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(push)
#pragma warning(disable:4127)
#endif
if (!reverse)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(pop)
#endif
{
brc.close_at = sstate.nth.in_string;
}
else // reverse == true.
{
brc.open_at = sstate.nth.in_string;
}
}
continue;
case st_repeat_in_push:
{
position_type &r = sstate.repeat[current_NFA.number];
sstate.repeat_stack.push_back(r);
r = sstate.nth.in_string;
for (uint_l32 brno = current_NFA.quantifier.atleast; brno <= current_NFA.quantifier.atmost; ++brno)
{
submatch_type &inner_bracket = sstate.bracket[brno];
sstate.capture_stack.push_back(inner_bracket.core);
sstate.counter_stack.push_back(inner_bracket.counter);
inner_bracket.core.open_at = inner_bracket.core.close_at = sstate.srchend;
inner_bracket.counter = 0;
// ECMAScript 2019 (ES10) 21.2.2.5.1, Note 3.
}
sstate.bt_stack.push_back(sstate.nth);
}
goto MATCHED;
case st_repeat_in_pop:
for (uint_l32 brno = current_NFA.quantifier.atmost; brno >= current_NFA.quantifier.atleast; --brno)
{
submatch_type &inner_bracket = sstate.bracket[brno];
inner_bracket.counter = sstate.counter_stack.back();
inner_bracket.core = sstate.capture_stack.back();
sstate.counter_stack.pop_back();
sstate.capture_stack.pop_back();
}
sstate.repeat[current_NFA.number] = sstate.repeat_stack.back();
sstate.repeat_stack.pop_back();
goto NOT_MATCHED;
case st_check_0_width_repeat:
if (sstate.nth.in_string != sstate.repeat[current_NFA.number])
goto MATCHED;
sstate.nth.in_NFA_states = current_NFA.next_state2;
continue;
case st_backreference: // '\\':
{
const submatch_type &bracket = sstate.bracket[current_NFA.number];
if (!bracket.counter) // Undefined.
{
ESCAPE_FROM_ZERO_WIDTH_MATCH:
sstate.nth.in_NFA_states = current_NFA.next_state2;
continue;
}
else
{
const submatchcore_type &brc = bracket.core;
if (brc.open_at == brc.close_at)
{
goto ESCAPE_FROM_ZERO_WIDTH_MATCH;
}
else
{
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(push)
#pragma warning(disable:4127)
#endif
if (!reverse)
#if defined(_MSC_VER) && _MSC_VER >= 1400
#pragma warning(pop)
#endif
{
for (BidirectionalIterator backrefpos = brc.open_at; backrefpos != brc.close_at;)
{
if (!sstate.is_at_srchend())
{
const uchar32 uchartxt = utf_traits::codepoint_inc(sstate.nth.in_string, sstate.srchend);
const uchar32 ucharref = utf_traits::codepoint_inc(backrefpos, brc.close_at);
if (casehelper_type::canonicalise(uchartxt) == casehelper_type::canonicalise(ucharref))
continue;
}
goto NOT_MATCHED;
}
}
else // reverse == true.
{
for (BidirectionalIterator backrefpos = brc.close_at; backrefpos != brc.open_at;)
{
if (!sstate.is_at_lookbehindlimit())
{
const uchar32 uchartxt = utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim);
const uchar32 ucharref = utf_traits::dec_codepoint(backrefpos, brc.open_at);
if (casehelper_type::canonicalise(uchartxt) == casehelper_type::canonicalise(ucharref))
continue;
}
goto NOT_MATCHED;
}
}
}
}
}
goto MATCHED;
case st_lookaround_open:
{
for (uint_l32 i = 1; i < this->number_of_brackets; ++i)
{
const submatch_type &sm = sstate.bracket[i];
sstate.capture_stack.push_back(sm.core);
sstate.counter_stack.push_back(sm.counter);
}
for (uint_l32 i = 0; i < this->number_of_counters; ++i)
sstate.counter_stack.push_back(sstate.counter[i]);
for (uint_l32 i = 0; i < this->number_of_repeats; ++i)
sstate.repeat_stack.push_back(sstate.repeat[i]);
const typename ss_type::bottom_state backup_bottom(sstate.btstack_size, sstate.capture_stack.size(), sstate.counter_stack.size(), sstate.repeat_stack.size());
const BidirectionalIterator orgpos = sstate.nth.in_string;
sstate.btstack_size = sstate.bt_stack.size();
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
if (current_NFA.quantifier.atleast == 2)
{
sstate.repeat_stack.push_back(sstate.lblim);
sstate.lblim = sstate.srchbegin;
}
#endif
#if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
// if (current_NFA.reverse)
{
for (uint_l32 i = 0; i < current_NFA.quantifier.atleast; ++i)
{
if (!sstate.is_at_lookbehindlimit())
{
utf_traits::dec_codepoint(sstate.nth.in_string, sstate.lblim);
continue;
}
is_matched = false;
goto AFTER_LOOKAROUND;
}
}
#endif
sstate.nth.in_NFA_states = current_NFA.next_state2;
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND)
is_matched = current_NFA.quantifier.atleast == 0 ? run_automaton<icase, false>(sstate /* , true */) : run_automaton<icase, true>(sstate /* , true */);
#else
is_matched = run_automaton<icase, false>(sstate /* , true */);
#endif
#if defined(SRELL_FIXEDWIDTHLOOKBEHIND)
AFTER_LOOKAROUND:
#endif
{
#if !defined(SRELL_FIXEDWIDTHLOOKBEHIND) && !defined(SRELLDBG_NO_MPREWINDER)
if (current_NFA.quantifier.atleast == 2)
{
sstate.lblim = sstate.repeat_stack[backup_bottom.repeatstack_size];
if (is_matched)
sstate.bracket[0].core.open_at = sstate.nth.in_string;
}
#endif
#if defined(SRELL_ENABLE_GT)
if (current_NFA.character != meta_char::mc_gt) // '>'
#endif
{
sstate.nth.in_string = orgpos;
}
sstate.bt_stack.resize(sstate.btstack_size);
sstate.btstack_size = backup_bottom.btstack_size;
sstate.capture_stack.resize(backup_bottom.capturestack_size);
sstate.counter_stack.resize(backup_bottom.counterstack_size);
sstate.repeat_stack.resize(backup_bottom.repeatstack_size);
is_matched ^= current_NFA.is_not;
}
}
if (is_matched)
{
sstate.nth.in_NFA_states = current_NFA.next_state1;
continue;
}
// case st_lookaround_pop:
for (uint_l32 i = this->number_of_repeats; i;)
{
sstate.repeat[--i] = sstate.repeat_stack.back();
sstate.repeat_stack.pop_back();
}
for (uint_l32 i = this->number_of_counters; i;)
{
sstate.counter[--i] = sstate.counter_stack.back();
sstate.counter_stack.pop_back();
}
for (uint_l32 i = this->number_of_brackets; i > 1;)
{
submatch_type &sm = sstate.bracket[--i];
sm.counter = sstate.counter_stack.back();
sm.core = sstate.capture_stack.back();
sstate.counter_stack.pop_back();
sstate.capture_stack.pop_back();
}
goto NOT_MATCHED;
case st_bol: // '^':
if (sstate.is_at_lookbehindlimit() && !sstate.match_prev_avail_flag())
{
if (!sstate.match_not_bol_flag())
goto MATCHED;
}
// !sstate.is_at_lookbehindlimit() || sstate.match_prev_avail_flag()
else if (current_NFA.multiline)
{
const uchar32 prevchar = utf_traits::prevcodepoint(sstate.nth.in_string, sstate.lblim);
if (this->character_class.is_included(re_character_class::newline, prevchar))
goto MATCHED;
}
goto NOT_MATCHED;
case st_eol: // '$':
if (sstate.is_at_srchend())
{
if (!sstate.match_not_eol_flag())
goto MATCHED;
}
else if (current_NFA.multiline)
{
const uchar32 nextchar = utf_traits::codepoint(sstate.nth.in_string, sstate.srchend);
if (this->character_class.is_included(re_character_class::newline, nextchar))
goto MATCHED;
}
goto NOT_MATCHED;
case st_boundary: // '\b' '\B'
is_matched = current_NFA.is_not;
// is_matched = current_NFA.character == char_alnum::ch_B;
// First, suppose the previous character is not \w but \W.
if (sstate.is_at_srchend())
{
if (sstate.match_not_eow_flag())
is_matched = !is_matched;
}
else if (this->character_class.is_included(current_NFA.number, utf_traits::codepoint(sstate.nth.in_string, sstate.srchend)))
{
is_matched = !is_matched;
}
// \W/last \w
// \b false true
// \B true false
// Second, if the actual previous character is \w, flip is_matched.
if (sstate.is_at_lookbehindlimit() && !sstate.match_prev_avail_flag())
{
if (sstate.match_not_bow_flag())
is_matched = !is_matched;
}
// !sstate.is_at_lookbehindlimit() || sstate.match_prev_avail_flag()
else if (this->character_class.is_included(current_NFA.number, utf_traits::prevcodepoint(sstate.nth.in_string, sstate.lblim)))
{
is_matched = !is_matched;
}
// \b \B
// pre cur \W/last \w pre cur \W/last \w
// \W/base false true \W/base true false
// \w true false \w false true
goto JUDGE;
case st_success: // == lookaround_close.
// if (is_recursive)
if (sstate.btstack_size)
return true;
if
(
(!sstate.match_not_null_flag() || !sstate.is_null())
&&
(!sstate.match_match_flag() || sstate.is_at_srchend())
)
return true;
goto NOT_MATCHED;
#if !defined(SRELLDBG_NO_NEXTPOS_OPT)
case st_move_nextpos:
#if !defined(SRELLDBG_NO_1STCHRCLS) && !defined(SRELLDBG_NO_BITSET)
sstate.nextpos = sstate.nth.in_string;
if (!sstate.is_at_srchend())
++sstate.nextpos;
#else // defined(SRELLDBG_NO_1STCHRCLS) || defined(SRELLDBG_NO_BITSET)
if (sstate.nth.in_string != sstate.bracket[0].core.open_at)
{
sstate.nextpos = sstate.nth.in_string;
if (!sstate.is_at_srchend())
utf_traits::codepoint_inc(sstate.nextpos, sstate.srchend);
}
#endif
goto MATCHED;
#endif
default:
// Reaching here means that this->NFA_states is corrupted.
throw regex_error(regex_constants::error_internal);
}
}
}
}
};
// regex_object
} // namespace regex_internal
// ... "rei_algorithm.hpp"]
// ["basic_regex.hpp" ...
// 28.8, class template basic_regex:
template <class charT, class traits = regex_traits<charT> >
class basic_regex : public regex_internal::regex_object<charT, traits>
{
public:
// Types:
typedef charT value_type;
typedef traits traits_type;
typedef typename traits::string_type string_type;
typedef regex_constants::syntax_option_type flag_type;
typedef typename traits::locale_type locale_type;
// 28.8.1, constants:
// [7.8.1] constants
static const regex_constants::syntax_option_type icase = regex_constants::icase;
static const regex_constants::syntax_option_type nosubs = regex_constants::nosubs;
static const regex_constants::syntax_option_type optimize = regex_constants::optimize;
static const regex_constants::syntax_option_type collate = regex_constants::collate;
static const regex_constants::syntax_option_type ECMAScript = regex_constants::ECMAScript;
static const regex_constants::syntax_option_type basic = regex_constants::basic;
static const regex_constants::syntax_option_type extended = regex_constants::extended;
static const regex_constants::syntax_option_type awk = regex_constants::awk;
static const regex_constants::syntax_option_type grep = regex_constants::grep;
static const regex_constants::syntax_option_type egrep = regex_constants::egrep;
static const regex_constants::syntax_option_type multiline = regex_constants::multiline;
static const regex_constants::syntax_option_type dotall = regex_constants::dotall;
// 28.8.2, construct/copy/destroy:
// [7.8.2] construct/copy/destroy
basic_regex()
{
}
explicit basic_regex(const charT *const p, const flag_type f = regex_constants::ECMAScript)
{
assign(p, p + std::char_traits<charT>::length(p), f);
}
basic_regex(const charT *const p, const std::size_t len, const flag_type f = regex_constants::ECMAScript)
{
assign(p, p + len, f);
}
basic_regex(const basic_regex &e)
{
assign(e);
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
basic_regex(basic_regex &&e) SRELL_NOEXCEPT
{
assign(std::move(e));
}
#endif
template <class ST, class SA>
explicit basic_regex(const std::basic_string<charT, ST, SA> &p, const flag_type f = regex_constants::ECMAScript)
{
assign(p, f);
}
template <class ForwardIterator>
basic_regex(ForwardIterator first, ForwardIterator last, const flag_type f = regex_constants::ECMAScript)
{
assign(first, last, f);
}
#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
basic_regex(std::initializer_list<charT> il, const flag_type f = regex_constants::ECMAScript)
{
assign(il, f);
}
#endif
// ~basic_regex();
basic_regex &operator=(const basic_regex &right)
{
return assign(right);
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
basic_regex &operator=(basic_regex &&e) SRELL_NOEXCEPT
{
return assign(std::move(e));
}
#endif
basic_regex &operator=(const charT *const ptr)
{
return assign(ptr);
}
#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
basic_regex &operator=(std::initializer_list<charT> il)
{
return assign(il.begin(), il.end());
}
#endif
template <class ST, class SA>
basic_regex &operator=(const std::basic_string<charT, ST, SA> &p)
{
return assign(p);
}
// 28.8.3, assign:
// [7.8.3] assign
basic_regex &assign(const basic_regex &right)
{
regex_internal::re_object_core<charT, traits>::operator=(right);
return *this;
}
#if defined(SRELL_CPP11_MOVE_ENABLED)
basic_regex &assign(basic_regex &&right) SRELL_NOEXCEPT
{
regex_internal::re_object_core<charT, traits>::operator=(std::move(right));
return *this;
}
#endif
basic_regex &assign(const charT *const ptr, const flag_type f = regex_constants::ECMAScript)
{
return assign(ptr, ptr + std::char_traits<charT>::length(ptr), f);
}
basic_regex &assign(const charT *const p, std::size_t len, const flag_type f = regex_constants::ECMAScript)
{
return assign(p, p + len, f);
}
template <class string_traits, class A>
basic_regex &assign(const std::basic_string<charT, string_traits, A> &s, const flag_type f = regex_constants::ECMAScript)
{
return assign(s.c_str(), s.c_str() + s.size(), f);
}
template <class InputIterator>
basic_regex &assign(InputIterator first, InputIterator last, const flag_type f = regex_constants::ECMAScript)
{
#if defined(SRELL_STRICT_IMPL)
basic_regex tmp;
tmp.compile(first, last, f);
tmp.swap(*this);
#else
this->compile(first, last, f);
#endif
return *this;
}
#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
basic_regex &assign(std::initializer_list<charT> il, const flag_type f = regex_constants::ECMAScript)
{
return assign(il.begin(), il.end(), f);
}
#endif
// 28.8.4, const operations:
// [7.8.4] const operations
unsigned mark_count() const
{
return this->number_of_brackets - 1;
}
flag_type flags() const
{
return this->soflags;
}
// 28.8.5, locale:
// [7.8.5] locale
locale_type imbue(locale_type loc)
{
return this->traits_inst.imbue(loc);
}
locale_type getloc() const
{
return this->traits_inst.getloc();
}
// 28.8.6, swap:
// [7.8.6] swap
void swap(basic_regex &e)
{
regex_internal::re_object_core<charT, traits>::swap(e);
}
};
// 28.8.6, basic_regex swap:
template <class charT, class traits>
void swap(basic_regex<charT, traits> &lhs, basic_regex<charT, traits> &rhs)
{
lhs.swap(rhs);
}
typedef basic_regex<char> regex;
typedef basic_regex<wchar_t> wregex;
#if defined(WCHAR_MAX)
#if WCHAR_MAX >= 0x10ffff
typedef wregex u32wregex;
typedef u32wregex u1632wregex;
#elif WCHAR_MAX >= 0xffff
typedef basic_regex<wchar_t, u16regex_traits<wchar_t> > u16wregex;
typedef u16wregex u1632wregex;
#endif
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED)
typedef basic_regex<char8_t> u8regex;
#endif
typedef basic_regex<char, u8regex_traits<char> > u8cregex;
#if !defined(SRELL_CPP20_CHAR8_ENABLED)
typedef u8cregex u8regex;
#endif
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef basic_regex<char16_t> u16regex;
typedef basic_regex<char32_t> u32regex;
#endif
// ... "basic_regex.hpp"]
// ["regex_iterator.hpp" ...
// 28.12.1, class template regex_iterator:
template <class BidirectionalIterator, class charT = typename std::iterator_traits<BidirectionalIterator>::value_type, class traits = regex_traits<charT> >
class regex_iterator
{
public:
typedef basic_regex<charT, traits> regex_type;
typedef match_results<BidirectionalIterator> value_type;
typedef std::ptrdiff_t difference_type;
typedef const value_type * pointer;
typedef const value_type & reference;
typedef std::forward_iterator_tag iterator_category;
regex_iterator()
{
// 28.12.1.1: Constructs an end-of-sequence iterator.
}
regex_iterator(
const BidirectionalIterator a,
const BidirectionalIterator b,
const regex_type &re,
const regex_constants::match_flag_type m = regex_constants::match_default)
: begin(a), end(b), pregex(&re), flags(m)
{
regex_search(begin, end, begin, match, *pregex, flags);
// 28.12.1.1: If this call returns false the constructor
// sets *this to the end-of-sequence iterator.
}
regex_iterator(const regex_iterator &that)
{
operator=(that);
}
regex_iterator &operator=(const regex_iterator &that)
{
if (this != &that)
{
this->begin = that.begin;
this->end = that.end;
this->pregex = that.pregex;
this->flags = that.flags;
this->match = that.match;
}
return *this;
}
bool operator==(const regex_iterator &right) const
{
// It is probably safe to assume that match.size() == 0 means
// end-of-sequence, because it happens only when 1) never tried
// regex_search, or 2) regex_search returned false.
if (this->match.size() == 0 || right.match.size() == 0)
return this->match.size() == right.match.size();
return
this->begin == right.begin
&&
this->end == right.end
&&
this->pregex == right.pregex
&&
this->flags == right.flags
&&
this->match[0] == right.match[0];
}
bool operator!=(const regex_iterator &right) const
{
return !(*this == right);
}
const value_type &operator*() const
{
return match;
}
const value_type *operator->() const
{
return &match;
}
regex_iterator &operator++()
{
if (this->match.size())
{
BidirectionalIterator start = match[0].second;
if (match[0].first == start) // The iterator holds a 0-length match.
{
if (start == end)
{
match.clear_();
// 28.12.1.4.2: If the iterator holds a zero-length match and
// start == end the operator sets *this to the end-ofsequence
// iterator and returns *this.
}
else
{
// 28.12.1.4.3: Otherwise, if the iterator holds a zero-length match
// the operator calls regex_search(start, end, match, *pregex, flags
// | regex_constants::match_not_null | regex_constants::match_continuous).
// If the call returns true the operator returns *this. [Cont...]
if (!regex_search(start, end, begin, match, *pregex, flags | regex_constants::match_not_null | regex_constants::match_continuous))
{
const BidirectionalIterator prevend = start;
// [...Cont] Otherwise the operator increments start and continues
// as if the most recent match was not a zero-length match.
// ++start;
utf_traits::codepoint_inc(start, end);
flags |= regex_constants::match_prev_avail;
if (regex_search(start, end, begin, match, *pregex, flags))
{
// 28.12.1.4.5-6: In all cases in which the call to regex_search
// returns true, match.prefix().first shall be equal to the previous
// value of match[0].second, ... match[i].position() shall return
// distance(begin, match[i].first).
// This means that match[i].position() gives the offset from the
// beginning of the target sequence, which is often not the same as
// the offset from the sequence passed in the call to regex_search.
//
// To satisfy this:
match.set_prefix_first_(prevend);
}
}
}
}
else
{
// 28.12.1.4.4: If the most recent match was not a zero-length match,
// the operator sets flags to flags | regex_constants::match_prev_avail
// and calls regex_search(start, end, match, *pregex, flags). [Cont...]
flags |= regex_constants::match_prev_avail;
regex_search(start, end, begin, match, *pregex, flags);
// [...Cont] If the call returns false the iterator sets *this to
// the end-of-sequence iterator. The iterator then returns *this.
//
// 28.12.1.4.5-6: In all cases in which the call to regex_search
// returns true, match.prefix().first shall be equal to the previous
// value of match[0].second, ... match[i].position() shall return
// distance(begin, match[i].first).
// This means that match[i].position() gives the offset from the
// beginning of the target sequence, which is often not the same as
// the offset from the sequence passed in the call to regex_search.
//
// These should already be done in regex_search.
}
}
return *this;
}
regex_iterator operator++(int)
{
const regex_iterator tmp = *this;
++(*this);
return tmp;
}
private:
BidirectionalIterator begin;
BidirectionalIterator end;
const regex_type *pregex;
regex_constants::match_flag_type flags;
match_results<BidirectionalIterator> match;
typedef typename traits::utf_traits utf_traits;
};
typedef regex_iterator<const char *> cregex_iterator;
typedef regex_iterator<const wchar_t *> wcregex_iterator;
typedef regex_iterator<std::string::const_iterator> sregex_iterator;
typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator;
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef regex_iterator<const char16_t *> u16cregex_iterator;
typedef regex_iterator<const char32_t *> u32cregex_iterator;
typedef regex_iterator<std::u16string::const_iterator> u16sregex_iterator;
typedef regex_iterator<std::u32string::const_iterator> u32sregex_iterator;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED)
typedef regex_iterator<const char8_t *> u8cregex_iterator;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
typedef regex_iterator<std::u8string::const_iterator> u8sregex_iterator;
#endif
typedef regex_iterator<const char *, std::iterator_traits<const char *>::value_type, u8regex_traits<std::iterator_traits<const char *>::value_type> > u8ccregex_iterator;
typedef regex_iterator<std::string::const_iterator, std::iterator_traits<std::string::const_iterator>::value_type, u8regex_traits<std::iterator_traits<std::string::const_iterator>::value_type> > u8csregex_iterator;
#if !defined(SRELL_CPP20_CHAR8_ENABLED)
typedef u8ccregex_iterator u8cregex_iterator;
#endif
#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
typedef u8csregex_iterator u8sregex_iterator;
#endif
#if defined(WCHAR_MAX)
#if WCHAR_MAX >= 0x10ffff
typedef wcregex_iterator u32wcregex_iterator;
typedef wsregex_iterator u32wsregex_iterator;
typedef u32wcregex_iterator u1632wcregex_iterator;
typedef u32wsregex_iterator u1632wsregex_iterator;
#elif WCHAR_MAX >= 0xffff
typedef regex_iterator<const wchar_t *, std::iterator_traits<const wchar_t *>::value_type, u16regex_traits<std::iterator_traits<const wchar_t *>::value_type> > u16wcregex_iterator;
typedef regex_iterator<std::wstring::const_iterator, std::iterator_traits<std::wstring::const_iterator>::value_type, u16regex_traits<std::iterator_traits<std::wstring::const_iterator>::value_type> > u16wsregex_iterator;
typedef u16wcregex_iterator u1632wcregex_iterator;
typedef u16wsregex_iterator u1632wsregex_iterator;
#endif
#endif
// ... "regex_iterator.hpp"]
// ["regex_algorithm.hpp" ...
// 28.11.2, function template regex_match:
// [7.11.2] Function template regex_match
template <class BidirectionalIterator, class Allocator, class charT, class traits>
bool regex_match(
const BidirectionalIterator first,
const BidirectionalIterator last,
match_results<BidirectionalIterator, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return e.search(first, last, first, m, flags | regex_constants::match_continuous | regex_constants::match_match_);
}
template <class BidirectionalIterator, class charT, class traits>
bool regex_match(
const BidirectionalIterator first,
const BidirectionalIterator last,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
// 4 Effects: Behaves "as if" by constructing an instance of
// match_results<BidirectionalIterator> what, and then returning the
// result of regex_match(first, last, what, e, flags).
match_results<BidirectionalIterator> what;
return regex_match(first, last, what, e, flags);
}
template <class charT, class Allocator, class traits>
bool regex_match(
const charT *const str,
match_results<const charT *, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_match(str, str + std::char_traits<charT>::length(str), m, e, flags);
}
template <class ST, class SA, class Allocator, class charT, class traits>
bool regex_match(
const std::basic_string<charT, ST, SA> &s,
match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_match(s.begin(), s.end(), m, e, flags);
}
template <class charT, class traits>
bool regex_match(
const charT *const str,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_match(str, str + std::char_traits<charT>::length(str), e, flags);
}
template <class ST, class SA, class charT, class traits>
bool regex_match(
const std::basic_string<charT, ST, SA> &s,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_match(s.begin(), s.end(), e, flags);
}
template <class BidirectionalIterator, class Allocator, class charT, class traits>
bool regex_search(
const BidirectionalIterator first,
const BidirectionalIterator last,
const BidirectionalIterator lookbehind_limit,
match_results<BidirectionalIterator, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return e.search(first, last, lookbehind_limit, m, flags);
}
template <class BidirectionalIterator, class charT, class traits>
bool regex_search(
const BidirectionalIterator first,
const BidirectionalIterator last,
const BidirectionalIterator lookbehind_limit,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
// 6 Effects: Behaves "as if" by constructing an object what of type
// match_results<iterator> and then returning the result of
// regex_search(first, last, what, e, flags).
match_results<BidirectionalIterator> what;
return regex_search(first, last, lookbehind_limit, what, e, flags);
}
// 28.11.3, function template regex_search:
// 7.11.3 regex_search [tr.re.alg.search]
template <class BidirectionalIterator, class Allocator, class charT, class traits>
bool regex_search(
const BidirectionalIterator first,
const BidirectionalIterator last,
match_results<BidirectionalIterator, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return e.search(first, last, first, m, flags);
}
template <class BidirectionalIterator, class charT, class traits>
bool regex_search(
const BidirectionalIterator first,
const BidirectionalIterator last,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
// 6 Effects: Behaves "as if" by constructing an object what of type
// match_results<iterator> and then returning the result of
// regex_search(first, last, what, e, flags).
match_results<BidirectionalIterator> what;
return regex_search(first, last, what, e, flags);
}
template <class charT, class Allocator, class traits>
bool regex_search(
const charT *const str,
match_results<const charT *, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_search(str, str + std::char_traits<charT>::length(str), m, e, flags);
}
template <class charT, class traits>
bool regex_search(
const charT *const str,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_search(str, str + std::char_traits<charT>::length(str), e, flags);
}
template <class ST, class SA, class charT, class traits>
bool regex_search(
const std::basic_string<charT, ST, SA> &s,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_search(s.begin(), s.end(), e, flags);
}
template <class ST, class SA, class Allocator, class charT, class traits>
bool regex_search(
const std::basic_string<charT, ST, SA> &s,
match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator> &m,
const basic_regex<charT, traits> &e,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
return regex_search(s.begin(), s.end(), m, e, flags);
}
// 28.11.4, function template regex_replace:
// [7.11.4] Function template regex_replace
template <class OutputIterator, class BidirectionalIterator, class traits, class charT, class ST, class SA>
OutputIterator regex_replace(
OutputIterator out,
const BidirectionalIterator first,
const BidirectionalIterator last,
const basic_regex<charT, traits> &e,
const std::basic_string<charT, ST, SA> &fmt,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
typedef regex_iterator<BidirectionalIterator, charT, traits> iterator_type;
const bool do_copy = !(flags & regex_constants::format_no_copy);
const iterator_type eos;
iterator_type i(first, last, e, flags);
typename iterator_type::value_type::value_type last_m_suffix;
last_m_suffix.first = first;
last_m_suffix.second = last;
for (; i != eos; ++i)
{
if (do_copy)
out = std::copy(i->prefix().first, i->prefix().second, out);
out = i->format(out, fmt, flags);
last_m_suffix = i->suffix();
if (flags & regex_constants::format_first_only)
break;
}
if (do_copy)
out = std::copy(last_m_suffix.first, last_m_suffix.second, out);
return out;
}
template <class OutputIterator, class BidirectionalIterator, class traits, class charT>
OutputIterator regex_replace(
OutputIterator out,
const BidirectionalIterator first,
const BidirectionalIterator last,
const basic_regex<charT, traits> &e,
const charT *const fmt,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
// Strictly speaking, this should be implemented as a version different
// from the above with changing the line i->format(out, fmt, flags) to
// i->format(out, fmt, fmt + char_traits<charT>::length(fmt), flags).
const std::basic_string<charT> fs(fmt, fmt + std::char_traits<charT>::length(fmt));
return regex_replace(out, first, last, e, fs, flags);
}
template <class traits, class charT, class ST, class SA, class FST, class FSA>
std::basic_string<charT, ST, SA> regex_replace(
const std::basic_string<charT, ST, SA> &s,
const basic_regex<charT, traits> &e,
const std::basic_string<charT, FST, FSA> &fmt,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
std::basic_string<charT, ST, SA> result;
regex_replace(std::back_inserter(result), s.begin(), s.end(), e, fmt, flags);
return result;
}
template <class traits, class charT, class ST, class SA>
std::basic_string<charT, ST, SA> regex_replace(
const std::basic_string<charT, ST, SA> &s,
const basic_regex<charT, traits> &e,
const charT *const fmt,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
std::basic_string<charT, ST, SA> result;
regex_replace(std::back_inserter(result), s.begin(), s.end(), e, fmt, flags);
return result;
}
template <class traits, class charT, class ST, class SA>
std::basic_string<charT> regex_replace(
const charT *const s,
const basic_regex<charT, traits> &e,
const std::basic_string<charT, ST, SA> &fmt,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
std::basic_string<charT> result;
regex_replace(std::back_inserter(result), s, s + std::char_traits<charT>::length(s), e, fmt, flags);
return result;
}
template <class traits, class charT>
std::basic_string<charT> regex_replace(
const charT *const s,
const basic_regex<charT, traits> &e,
const charT *const fmt,
const regex_constants::match_flag_type flags = regex_constants::match_default
)
{
std::basic_string<charT> result;
regex_replace(std::back_inserter(result), s, s + std::char_traits<charT>::length(s), e, fmt, flags);
return result;
}
// ... "regex_algorithm.hpp"]
// ["regex_token_iterator.hpp" ...
// 28.12.2, class template regex_token_iterator:
template <class BidirectionalIterator, class charT = typename std::iterator_traits<BidirectionalIterator>::value_type, class traits = regex_traits<charT> >
class regex_token_iterator
{
public:
typedef basic_regex<charT, traits> regex_type;
typedef sub_match<BidirectionalIterator> value_type;
typedef std::ptrdiff_t difference_type;
typedef const value_type * pointer;
typedef const value_type & reference;
typedef std::forward_iterator_tag iterator_category;
regex_token_iterator() : result(NULL)
{
// Constructs the end-of-sequence iterator.
}
regex_token_iterator(
const BidirectionalIterator a,
const BidirectionalIterator b,
const regex_type &re,
int submatch = 0,
regex_constants::match_flag_type m = regex_constants::match_default
) : position(a, b, re, m), result(NULL), subs(1, submatch)
{
post_constructor(a, b);
}
regex_token_iterator(
const BidirectionalIterator a,
const BidirectionalIterator b,
const regex_type &re,
const std::vector<int> &submatches,
regex_constants::match_flag_type m = regex_constants::match_default
) : position(a, b, re, m), result(NULL), subs(submatches)
{
post_constructor(a, b);
}
#if defined(SRELL_CPP11_INITIALIZER_LIST_ENABLED)
regex_token_iterator(
const BidirectionalIterator a,
const BidirectionalIterator b,
const regex_type &re,
std::initializer_list<int> submatches,
regex_constants::match_flag_type m = regex_constants::match_default
) : position(a, b, re, m), result(NULL), subs(submatches)
{
post_constructor(a, b);
}
#endif
template <std::size_t N> // Was R in TR1.
regex_token_iterator(
const BidirectionalIterator a,
const BidirectionalIterator b,
const regex_type &re,
const int (&submatches)[N],
regex_constants::match_flag_type m = regex_constants::match_default
) : position(a, b, re, m), result(NULL), subs(submatches, submatches + N)
{
post_constructor(a, b);
}
regex_token_iterator(const regex_token_iterator &that)
{
operator=(that);
}
regex_token_iterator &operator=(const regex_token_iterator &that)
{
if (this != &that)
{
this->position = that.position;
this->result = that.result;
this->suffix = that.suffix;
this->N = that.N;
this->subs = that.subs;
}
return *this;
}
bool operator==(const regex_token_iterator &right)
{
if (this->result == NULL || right.result == NULL)
return this->result == right.result;
if (this->result == &this->suffix || right.result == &right.suffix)
return this->suffix == right.suffix;
return
this->position == right.position
&&
this->N == right.N
&&
this->subs == right.subs;
}
bool operator!=(const regex_token_iterator &right)
{
return !(*this == right);
}
const value_type &operator*()
{
return *result;
}
const value_type *operator->()
{
return result;
}
regex_token_iterator &operator++()
{
position_iterator prev(position);
position_iterator eos_iterator;
if (result != NULL)
// To avoid inifinite loop. The specification does not require, though.
{
if (result == &suffix)
{
result = NULL; // end-of-sequence.
}
else
{
++this->N;
for (;;)
{
if (this->N < subs.size())
{
result = subs[this->N] != -1 ? &((*position)[subs[this->N]]) : &((*position).prefix());
break;
}
this->N = 0;
++position;
if (position == eos_iterator)
{
if (this->N < subs.size() && prev->suffix().length() && minus1_in_subs())
{
suffix = prev->suffix();
result = &suffix;
}
else
{
result = NULL;
}
break;
}
}
}
}
return *this;
}
regex_token_iterator operator++(int)
{
const regex_token_iterator tmp(*this);
++(*this);
return tmp;
}
private:
void post_constructor(const BidirectionalIterator a, const BidirectionalIterator b)
{
position_iterator eos_iterator;
this->N = 0;
if (position != eos_iterator && subs.size())
{
result = subs[this->N] != -1 ? &((*position)[subs[this->N]]) : &((*position).prefix());
}
else if (minus1_in_subs()) // end-of-sequence.
{
suffix.first = a;
suffix.second = b;
suffix.matched = a != b;
// 28.1.2.7: In a suffix iterator the member result holds a pointer
// to the data member suffix, the value of the member suffix.match is true,
if (suffix.matched)
result = &suffix;
else
result = NULL; // Means end-of-sequence.
}
}
bool minus1_in_subs() const
{
for (std::size_t i = 0; i < subs.size(); ++i)
if (subs[i] == -1)
return true;
return false;
}
private:
typedef regex_iterator<BidirectionalIterator, charT, traits> position_iterator;
position_iterator position;
const value_type *result;
value_type suffix;
std::size_t N;
std::vector<int> subs;
};
typedef regex_token_iterator<const char *> cregex_token_iterator;
typedef regex_token_iterator<const wchar_t *> wcregex_token_iterator;
typedef regex_token_iterator<std::string::const_iterator> sregex_token_iterator;
typedef regex_token_iterator<std::wstring::const_iterator> wsregex_token_iterator;
#if defined(SRELL_CPP11_CHAR1632_ENABLED)
typedef regex_token_iterator<const char16_t *> u16cregex_token_iterator;
typedef regex_token_iterator<const char32_t *> u32cregex_token_iterator;
typedef regex_token_iterator<std::u16string::const_iterator> u16sregex_token_iterator;
typedef regex_token_iterator<std::u32string::const_iterator> u32sregex_token_iterator;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED)
typedef regex_token_iterator<const char8_t *> u8cregex_token_iterator;
#endif
#if defined(SRELL_CPP20_CHAR8_ENABLED) && SRELL_CPP20_CHAR8_ENABLED >= 2
typedef regex_token_iterator<std::u8string::const_iterator> u8sregex_token_iterator;
#endif
typedef regex_token_iterator<const char *, std::iterator_traits<const char *>::value_type, u8regex_traits<std::iterator_traits<const char *>::value_type> > u8ccregex_token_iterator;
typedef regex_token_iterator<std::string::const_iterator, std::iterator_traits<std::string::const_iterator>::value_type, u8regex_traits<std::iterator_traits<std::string::const_iterator>::value_type> > u8csregex_token_iterator;
#if !defined(SRELL_CPP20_CHAR8_ENABLED)
typedef u8ccregex_token_iterator u8cregex_token_iterator;
#endif
#if !defined(SRELL_CPP20_CHAR8_ENABLED) || SRELL_CPP20_CHAR8_ENABLED < 2
typedef u8csregex_token_iterator u8sregex_token_iterator;
#endif
#if defined(WCHAR_MAX)
#if WCHAR_MAX >= 0x10ffff
typedef wcregex_token_iterator u32wcregex_token_iterator;
typedef wsregex_token_iterator u32wsregex_token_iterator;
typedef u32wcregex_token_iterator u1632wcregex_token_iterator;
typedef u32wsregex_token_iterator u1632wsregex_token_iterator;
#elif WCHAR_MAX >= 0xffff
typedef regex_token_iterator<const wchar_t *, std::iterator_traits<const wchar_t *>::value_type, u16regex_traits<std::iterator_traits<const wchar_t *>::value_type> > u16wcregex_token_iterator;
typedef regex_token_iterator<std::wstring::const_iterator, std::iterator_traits<std::wstring::const_iterator>::value_type, u16regex_traits<std::iterator_traits<std::wstring::const_iterator>::value_type> > u16wsregex_token_iterator;
typedef u16wcregex_token_iterator u1632wcregex_token_iterator;
typedef u16wsregex_token_iterator u1632wsregex_token_iterator;
#endif
#endif
// ... "regex_token_iterator.hpp"]
} // namespace srell
#ifdef SRELL_NOEXCEPT
#undef SRELL_NOEXCEPT
#endif
#ifdef SRELL_CPP20_CHAR8_ENABLED
#undef SRELL_CPP20_CHAR8_ENABLED
#endif
#ifdef SRELL_CPP11_CHAR1632_ENABLED
#undef SRELL_CPP11_CHAR1632_ENABLED
#endif
#ifdef SRELL_CPP11_INITIALIZER_LIST_ENABLED
#undef SRELL_CPP11_INITIALIZER_LIST_ENABLED
#endif
#ifdef SRELL_CPP11_MOVE_ENABLED
#undef SRELL_CPP11_MOVE_ENABLED
#endif
#endif // SRELL_REGEX_TEMPLATE_LIBRARY