use bonsai_gguf::Metadata;
use crate::bpe::{MAX_BPE_INPUT_BYTES, MAX_BPE_INPUT_PIECES, MAX_BPE_PIECE_BYTES};
use crate::{Result, invalid};
const LETTER_OR_MARK: u8 = 1;
const NUMBER: u8 = 2;
#[derive(Clone, Copy, Debug)]
pub struct Qwen35PreTokenizer {
_validated: (),
}
pub struct Qwen35Pieces<'a> {
remaining: &'a str,
emitted: usize,
}
impl Qwen35PreTokenizer {
pub(crate) const fn new() -> Self {
Self { _validated: () }
}
pub fn from_metadata(metadata: &Metadata) -> Result<Self> {
for (key, required) in [
("tokenizer.ggml.model", "gpt2"),
("tokenizer.ggml.pre", "qwen35"),
] {
if metadata.get(key).and_then(|value| value.as_str()) != Some(required) {
return Err(invalid(format!(
"unsupported Qwen35 pretokenizer metadata: {key}"
)));
}
}
Ok(Self { _validated: () })
}
pub fn split<'a>(&self, text: &'a str) -> Result<Vec<&'a str>> {
let boundaries = self.pieces(text)?;
let mut pieces = Vec::new();
pieces.try_reserve_exact(text.len().min(MAX_BPE_INPUT_PIECES))?;
for piece in boundaries {
pieces.push(piece?);
}
Ok(pieces)
}
pub fn pieces<'a>(&self, text: &'a str) -> Result<Qwen35Pieces<'a>> {
if text.len() > MAX_BPE_INPUT_BYTES {
return Err(invalid("Qwen35 pretokenizer input exceeds byte limit"));
}
Ok(Qwen35Pieces {
remaining: text,
emitted: 0,
})
}
}
impl<'a> Iterator for Qwen35Pieces<'a> {
type Item = Result<&'a str>;
fn next(&mut self) -> Option<Self::Item> {
if self.remaining.is_empty() {
return None;
}
let end = piece_end(self.remaining);
if end > MAX_BPE_PIECE_BYTES {
self.remaining = "";
return Some(Err(invalid("Qwen35 pretokenizer piece exceeds byte limit")));
}
if self.emitted == MAX_BPE_INPUT_PIECES {
self.remaining = "";
return Some(Err(invalid(
"Qwen35 pretokenizer input exceeds piece limit",
)));
}
let (piece, remaining) = self.remaining.split_at(end);
self.remaining = remaining;
self.emitted += 1;
Some(Ok(piece))
}
}
impl std::iter::FusedIterator for Qwen35Pieces<'_> {}
fn piece_end(text: &str) -> usize {
let mut characters = text.char_indices();
let Some((_, first)) = characters.next() else {
return 0;
};
if first == '\'' {
let bytes = text.as_bytes();
match bytes.get(1).map(u8::to_ascii_lowercase) {
Some(b's' | b't' | b'm' | b'd') => return 2,
Some(b'r' | b'v' | b'l') => {
let second = bytes[1].to_ascii_lowercase();
let third = bytes.get(2).map(u8::to_ascii_lowercase);
if matches!(
(second, third),
(b'r' | b'v', Some(b'e')) | (b'l', Some(b'l'))
) {
return 3;
}
}
_ => {}
}
}
let first_category = category(first);
if !matches!(first, '\r' | '\n')
&& first_category != NUMBER
&& (first_category == LETTER_OR_MARK
|| text[first.len_utf8()..]
.chars()
.next()
.is_some_and(|character| category(character) == LETTER_OR_MARK))
{
let mut end = first.len_utf8();
for (offset, character) in characters {
if category(character) != LETTER_OR_MARK {
break;
}
end = offset + character.len_utf8();
}
return end;
}
if first_category == NUMBER {
return first.len_utf8();
}
let punctuation_start = usize::from(first == ' ');
if text[punctuation_start..]
.chars()
.next()
.is_some_and(is_punctuation_piece)
{
let mut end = punctuation_start;
for (offset, character) in text[punctuation_start..].char_indices() {
if !is_punctuation_piece(character) {
break;
}
end = punctuation_start + offset + character.len_utf8();
}
for (offset, character) in text[end..].char_indices() {
if !matches!(character, '\r' | '\n') {
return end + offset;
}
}
return text.len();
}
let mut whitespace_end = 0;
let mut last_newline_end = 0;
let mut last_whitespace_bytes = 0;
let mut whitespace_count = 0;
for (offset, character) in text.char_indices() {
if !is_whitespace(character) {
break;
}
whitespace_end = offset + character.len_utf8();
last_whitespace_bytes = character.len_utf8();
whitespace_count += 1;
if matches!(character, '\r' | '\n') {
last_newline_end = whitespace_end;
}
}
if last_newline_end > 0 {
return last_newline_end;
}
if whitespace_count > 1 && whitespace_end < text.len() {
return whitespace_end - last_whitespace_bytes;
}
if whitespace_end > 0 {
return whitespace_end;
}
first.len_utf8()
}
fn is_punctuation_piece(character: char) -> bool {
category(character) == 0 && !is_whitespace(character)
}
const fn is_whitespace(character: char) -> bool {
matches!(
character,
'\u{0009}'..='\u{000d}'
| ' '
| '\u{0085}'
| '\u{00a0}'
| '\u{1680}'
| '\u{2000}'..='\u{200a}'
| '\u{2028}'
| '\u{2029}'
| '\u{202f}'
| '\u{205f}'
| '\u{3000}'
)
}
fn category(character: char) -> u8 {
if character.is_ascii_alphabetic() {
return LETTER_OR_MARK;
}
if character.is_ascii_digit() {
return NUMBER;
}
if character.is_ascii() {
return 0;
}
let scalar = u32::from(character);
let index = CATEGORY_STARTS.partition_point(|&(start, _)| start <= scalar) - 1;
CATEGORY_STARTS[index].1
}
const CATEGORY_STARTS: &[(u32, u8)] = &[
(0x0000_0000, 0),
(0x0000_0030, 2),
(0x0000_003a, 0),
(0x0000_0041, 1),
(0x0000_005b, 0),
(0x0000_0061, 1),
(0x0000_007b, 0),
(0x0000_00aa, 1),
(0x0000_00ab, 0),
(0x0000_00b2, 2),
(0x0000_00b4, 0),
(0x0000_00b5, 1),
(0x0000_00b6, 0),
(0x0000_00b9, 2),
(0x0000_00ba, 1),
(0x0000_00bb, 0),
(0x0000_00bc, 2),
(0x0000_00bf, 0),
(0x0000_00c0, 1),
(0x0000_00d7, 0),
(0x0000_00d8, 1),
(0x0000_00f7, 0),
(0x0000_00f8, 1),
(0x0000_02c2, 0),
(0x0000_02c6, 1),
(0x0000_02d2, 0),
(0x0000_02e0, 1),
(0x0000_02e5, 0),
(0x0000_02ec, 1),
(0x0000_02ed, 0),
(0x0000_02ee, 1),
(0x0000_02ef, 0),
(0x0000_0300, 1),
(0x0000_0375, 0),
(0x0000_0376, 1),
(0x0000_0378, 0),
(0x0000_037a, 1),
(0x0000_037e, 0),
(0x0000_037f, 1),
(0x0000_0380, 0),
(0x0000_0386, 1),
(0x0000_0387, 0),
(0x0000_0388, 1),
(0x0000_038b, 0),
(0x0000_038c, 1),
(0x0000_038d, 0),
(0x0000_038e, 1),
(0x0000_03a2, 0),
(0x0000_03a3, 1),
(0x0000_03f6, 0),
(0x0000_03f7, 1),
(0x0000_0482, 0),
(0x0000_0483, 1),
(0x0000_0530, 0),
(0x0000_0531, 1),
(0x0000_0557, 0),
(0x0000_0559, 1),
(0x0000_055a, 0),
(0x0000_0560, 1),
(0x0000_0589, 0),
(0x0000_0591, 1),
(0x0000_05be, 0),
(0x0000_05bf, 1),
(0x0000_05c0, 0),
(0x0000_05c1, 1),
(0x0000_05c3, 0),
(0x0000_05c4, 1),
(0x0000_05c6, 0),
(0x0000_05c7, 1),
(0x0000_05c8, 0),
(0x0000_05d0, 1),
(0x0000_05eb, 0),
(0x0000_05ef, 1),
(0x0000_05f3, 0),
(0x0000_0610, 1),
(0x0000_061b, 0),
(0x0000_0620, 1),
(0x0000_0660, 2),
(0x0000_066a, 0),
(0x0000_066e, 1),
(0x0000_06d4, 0),
(0x0000_06d5, 1),
(0x0000_06dd, 0),
(0x0000_06df, 1),
(0x0000_06e9, 0),
(0x0000_06ea, 1),
(0x0000_06f0, 2),
(0x0000_06fa, 1),
(0x0000_06fd, 0),
(0x0000_06ff, 1),
(0x0000_0700, 0),
(0x0000_0710, 1),
(0x0000_074b, 0),
(0x0000_074d, 1),
(0x0000_07b2, 0),
(0x0000_07c0, 2),
(0x0000_07ca, 1),
(0x0000_07f6, 0),
(0x0000_07fa, 1),
(0x0000_07fb, 0),
(0x0000_07fd, 1),
(0x0000_07fe, 0),
(0x0000_0800, 1),
(0x0000_082e, 0),
(0x0000_0840, 1),
(0x0000_085c, 0),
(0x0000_0860, 1),
(0x0000_086b, 0),
(0x0000_0870, 1),
(0x0000_0888, 0),
(0x0000_0889, 1),
(0x0000_088f, 0),
(0x0000_0898, 1),
(0x0000_08e2, 0),
(0x0000_08e3, 1),
(0x0000_0964, 0),
(0x0000_0966, 2),
(0x0000_0970, 0),
(0x0000_0971, 1),
(0x0000_0984, 0),
(0x0000_0985, 1),
(0x0000_098d, 0),
(0x0000_098f, 1),
(0x0000_0991, 0),
(0x0000_0993, 1),
(0x0000_09a9, 0),
(0x0000_09aa, 1),
(0x0000_09b1, 0),
(0x0000_09b2, 1),
(0x0000_09b3, 0),
(0x0000_09b6, 1),
(0x0000_09ba, 0),
(0x0000_09bc, 1),
(0x0000_09c5, 0),
(0x0000_09c7, 1),
(0x0000_09c9, 0),
(0x0000_09cb, 1),
(0x0000_09cf, 0),
(0x0000_09d7, 1),
(0x0000_09d8, 0),
(0x0000_09dc, 1),
(0x0000_09de, 0),
(0x0000_09df, 1),
(0x0000_09e4, 0),
(0x0000_09e6, 2),
(0x0000_09f0, 1),
(0x0000_09f2, 0),
(0x0000_09f4, 2),
(0x0000_09fa, 0),
(0x0000_09fc, 1),
(0x0000_09fd, 0),
(0x0000_09fe, 1),
(0x0000_09ff, 0),
(0x0000_0a01, 1),
(0x0000_0a04, 0),
(0x0000_0a05, 1),
(0x0000_0a0b, 0),
(0x0000_0a0f, 1),
(0x0000_0a11, 0),
(0x0000_0a13, 1),
(0x0000_0a29, 0),
(0x0000_0a2a, 1),
(0x0000_0a31, 0),
(0x0000_0a32, 1),
(0x0000_0a34, 0),
(0x0000_0a35, 1),
(0x0000_0a37, 0),
(0x0000_0a38, 1),
(0x0000_0a3a, 0),
(0x0000_0a3c, 1),
(0x0000_0a3d, 0),
(0x0000_0a3e, 1),
(0x0000_0a43, 0),
(0x0000_0a47, 1),
(0x0000_0a49, 0),
(0x0000_0a4b, 1),
(0x0000_0a4e, 0),
(0x0000_0a51, 1),
(0x0000_0a52, 0),
(0x0000_0a59, 1),
(0x0000_0a5d, 0),
(0x0000_0a5e, 1),
(0x0000_0a5f, 0),
(0x0000_0a66, 2),
(0x0000_0a70, 1),
(0x0000_0a76, 0),
(0x0000_0a81, 1),
(0x0000_0a84, 0),
(0x0000_0a85, 1),
(0x0000_0a8e, 0),
(0x0000_0a8f, 1),
(0x0000_0a92, 0),
(0x0000_0a93, 1),
(0x0000_0aa9, 0),
(0x0000_0aaa, 1),
(0x0000_0ab1, 0),
(0x0000_0ab2, 1),
(0x0000_0ab4, 0),
(0x0000_0ab5, 1),
(0x0000_0aba, 0),
(0x0000_0abc, 1),
(0x0000_0ac6, 0),
(0x0000_0ac7, 1),
(0x0000_0aca, 0),
(0x0000_0acb, 1),
(0x0000_0ace, 0),
(0x0000_0ad0, 1),
(0x0000_0ad1, 0),
(0x0000_0ae0, 1),
(0x0000_0ae4, 0),
(0x0000_0ae6, 2),
(0x0000_0af0, 0),
(0x0000_0af9, 1),
(0x0000_0b00, 0),
(0x0000_0b01, 1),
(0x0000_0b04, 0),
(0x0000_0b05, 1),
(0x0000_0b0d, 0),
(0x0000_0b0f, 1),
(0x0000_0b11, 0),
(0x0000_0b13, 1),
(0x0000_0b29, 0),
(0x0000_0b2a, 1),
(0x0000_0b31, 0),
(0x0000_0b32, 1),
(0x0000_0b34, 0),
(0x0000_0b35, 1),
(0x0000_0b3a, 0),
(0x0000_0b3c, 1),
(0x0000_0b45, 0),
(0x0000_0b47, 1),
(0x0000_0b49, 0),
(0x0000_0b4b, 1),
(0x0000_0b4e, 0),
(0x0000_0b55, 1),
(0x0000_0b58, 0),
(0x0000_0b5c, 1),
(0x0000_0b5e, 0),
(0x0000_0b5f, 1),
(0x0000_0b64, 0),
(0x0000_0b66, 2),
(0x0000_0b70, 0),
(0x0000_0b71, 1),
(0x0000_0b72, 2),
(0x0000_0b78, 0),
(0x0000_0b82, 1),
(0x0000_0b84, 0),
(0x0000_0b85, 1),
(0x0000_0b8b, 0),
(0x0000_0b8e, 1),
(0x0000_0b91, 0),
(0x0000_0b92, 1),
(0x0000_0b96, 0),
(0x0000_0b99, 1),
(0x0000_0b9b, 0),
(0x0000_0b9c, 1),
(0x0000_0b9d, 0),
(0x0000_0b9e, 1),
(0x0000_0ba0, 0),
(0x0000_0ba3, 1),
(0x0000_0ba5, 0),
(0x0000_0ba8, 1),
(0x0000_0bab, 0),
(0x0000_0bae, 1),
(0x0000_0bba, 0),
(0x0000_0bbe, 1),
(0x0000_0bc3, 0),
(0x0000_0bc6, 1),
(0x0000_0bc9, 0),
(0x0000_0bca, 1),
(0x0000_0bce, 0),
(0x0000_0bd0, 1),
(0x0000_0bd1, 0),
(0x0000_0bd7, 1),
(0x0000_0bd8, 0),
(0x0000_0be6, 2),
(0x0000_0bf3, 0),
(0x0000_0c00, 1),
(0x0000_0c0d, 0),
(0x0000_0c0e, 1),
(0x0000_0c11, 0),
(0x0000_0c12, 1),
(0x0000_0c29, 0),
(0x0000_0c2a, 1),
(0x0000_0c3a, 0),
(0x0000_0c3c, 1),
(0x0000_0c45, 0),
(0x0000_0c46, 1),
(0x0000_0c49, 0),
(0x0000_0c4a, 1),
(0x0000_0c4e, 0),
(0x0000_0c55, 1),
(0x0000_0c57, 0),
(0x0000_0c58, 1),
(0x0000_0c5b, 0),
(0x0000_0c5d, 1),
(0x0000_0c5e, 0),
(0x0000_0c60, 1),
(0x0000_0c64, 0),
(0x0000_0c66, 2),
(0x0000_0c70, 0),
(0x0000_0c78, 2),
(0x0000_0c7f, 0),
(0x0000_0c80, 1),
(0x0000_0c84, 0),
(0x0000_0c85, 1),
(0x0000_0c8d, 0),
(0x0000_0c8e, 1),
(0x0000_0c91, 0),
(0x0000_0c92, 1),
(0x0000_0ca9, 0),
(0x0000_0caa, 1),
(0x0000_0cb4, 0),
(0x0000_0cb5, 1),
(0x0000_0cba, 0),
(0x0000_0cbc, 1),
(0x0000_0cc5, 0),
(0x0000_0cc6, 1),
(0x0000_0cc9, 0),
(0x0000_0cca, 1),
(0x0000_0cce, 0),
(0x0000_0cd5, 1),
(0x0000_0cd7, 0),
(0x0000_0cdd, 1),
(0x0000_0cdf, 0),
(0x0000_0ce0, 1),
(0x0000_0ce4, 0),
(0x0000_0ce6, 2),
(0x0000_0cf0, 0),
(0x0000_0cf1, 1),
(0x0000_0cf4, 0),
(0x0000_0d00, 1),
(0x0000_0d0d, 0),
(0x0000_0d0e, 1),
(0x0000_0d11, 0),
(0x0000_0d12, 1),
(0x0000_0d45, 0),
(0x0000_0d46, 1),
(0x0000_0d49, 0),
(0x0000_0d4a, 1),
(0x0000_0d4f, 0),
(0x0000_0d54, 1),
(0x0000_0d58, 2),
(0x0000_0d5f, 1),
(0x0000_0d64, 0),
(0x0000_0d66, 2),
(0x0000_0d79, 0),
(0x0000_0d7a, 1),
(0x0000_0d80, 0),
(0x0000_0d81, 1),
(0x0000_0d84, 0),
(0x0000_0d85, 1),
(0x0000_0d97, 0),
(0x0000_0d9a, 1),
(0x0000_0db2, 0),
(0x0000_0db3, 1),
(0x0000_0dbc, 0),
(0x0000_0dbd, 1),
(0x0000_0dbe, 0),
(0x0000_0dc0, 1),
(0x0000_0dc7, 0),
(0x0000_0dca, 1),
(0x0000_0dcb, 0),
(0x0000_0dcf, 1),
(0x0000_0dd5, 0),
(0x0000_0dd6, 1),
(0x0000_0dd7, 0),
(0x0000_0dd8, 1),
(0x0000_0de0, 0),
(0x0000_0de6, 2),
(0x0000_0df0, 0),
(0x0000_0df2, 1),
(0x0000_0df4, 0),
(0x0000_0e01, 1),
(0x0000_0e3b, 0),
(0x0000_0e40, 1),
(0x0000_0e4f, 0),
(0x0000_0e50, 2),
(0x0000_0e5a, 0),
(0x0000_0e81, 1),
(0x0000_0e83, 0),
(0x0000_0e84, 1),
(0x0000_0e85, 0),
(0x0000_0e86, 1),
(0x0000_0e8b, 0),
(0x0000_0e8c, 1),
(0x0000_0ea4, 0),
(0x0000_0ea5, 1),
(0x0000_0ea6, 0),
(0x0000_0ea7, 1),
(0x0000_0ebe, 0),
(0x0000_0ec0, 1),
(0x0000_0ec5, 0),
(0x0000_0ec6, 1),
(0x0000_0ec7, 0),
(0x0000_0ec8, 1),
(0x0000_0ecf, 0),
(0x0000_0ed0, 2),
(0x0000_0eda, 0),
(0x0000_0edc, 1),
(0x0000_0ee0, 0),
(0x0000_0f00, 1),
(0x0000_0f01, 0),
(0x0000_0f18, 1),
(0x0000_0f1a, 0),
(0x0000_0f20, 2),
(0x0000_0f34, 0),
(0x0000_0f35, 1),
(0x0000_0f36, 0),
(0x0000_0f37, 1),
(0x0000_0f38, 0),
(0x0000_0f39, 1),
(0x0000_0f3a, 0),
(0x0000_0f3e, 1),
(0x0000_0f48, 0),
(0x0000_0f49, 1),
(0x0000_0f6d, 0),
(0x0000_0f71, 1),
(0x0000_0f85, 0),
(0x0000_0f86, 1),
(0x0000_0f98, 0),
(0x0000_0f99, 1),
(0x0000_0fbd, 0),
(0x0000_0fc6, 1),
(0x0000_0fc7, 0),
(0x0000_1000, 1),
(0x0000_1040, 2),
(0x0000_104a, 0),
(0x0000_1050, 1),
(0x0000_1090, 2),
(0x0000_109a, 1),
(0x0000_109e, 0),
(0x0000_10a0, 1),
(0x0000_10c6, 0),
(0x0000_10c7, 1),
(0x0000_10c8, 0),
(0x0000_10cd, 1),
(0x0000_10ce, 0),
(0x0000_10d0, 1),
(0x0000_10fb, 0),
(0x0000_10fc, 1),
(0x0000_1249, 0),
(0x0000_124a, 1),
(0x0000_124e, 0),
(0x0000_1250, 1),
(0x0000_1257, 0),
(0x0000_1258, 1),
(0x0000_1259, 0),
(0x0000_125a, 1),
(0x0000_125e, 0),
(0x0000_1260, 1),
(0x0000_1289, 0),
(0x0000_128a, 1),
(0x0000_128e, 0),
(0x0000_1290, 1),
(0x0000_12b1, 0),
(0x0000_12b2, 1),
(0x0000_12b6, 0),
(0x0000_12b8, 1),
(0x0000_12bf, 0),
(0x0000_12c0, 1),
(0x0000_12c1, 0),
(0x0000_12c2, 1),
(0x0000_12c6, 0),
(0x0000_12c8, 1),
(0x0000_12d7, 0),
(0x0000_12d8, 1),
(0x0000_1311, 0),
(0x0000_1312, 1),
(0x0000_1316, 0),
(0x0000_1318, 1),
(0x0000_135b, 0),
(0x0000_135d, 1),
(0x0000_1360, 0),
(0x0000_1369, 2),
(0x0000_137d, 0),
(0x0000_1380, 1),
(0x0000_1390, 0),
(0x0000_13a0, 1),
(0x0000_13f6, 0),
(0x0000_13f8, 1),
(0x0000_13fe, 0),
(0x0000_1401, 1),
(0x0000_166d, 0),
(0x0000_166f, 1),
(0x0000_1680, 0),
(0x0000_1681, 1),
(0x0000_169b, 0),
(0x0000_16a0, 1),
(0x0000_16eb, 0),
(0x0000_16ee, 2),
(0x0000_16f1, 1),
(0x0000_16f9, 0),
(0x0000_1700, 1),
(0x0000_1716, 0),
(0x0000_171f, 1),
(0x0000_1735, 0),
(0x0000_1740, 1),
(0x0000_1754, 0),
(0x0000_1760, 1),
(0x0000_176d, 0),
(0x0000_176e, 1),
(0x0000_1771, 0),
(0x0000_1772, 1),
(0x0000_1774, 0),
(0x0000_1780, 1),
(0x0000_17d4, 0),
(0x0000_17d7, 1),
(0x0000_17d8, 0),
(0x0000_17dc, 1),
(0x0000_17de, 0),
(0x0000_17e0, 2),
(0x0000_17ea, 0),
(0x0000_17f0, 2),
(0x0000_17fa, 0),
(0x0000_180b, 1),
(0x0000_180e, 0),
(0x0000_180f, 1),
(0x0000_1810, 2),
(0x0000_181a, 0),
(0x0000_1820, 1),
(0x0000_1879, 0),
(0x0000_1880, 1),
(0x0000_18ab, 0),
(0x0000_18b0, 1),
(0x0000_18f6, 0),
(0x0000_1900, 1),
(0x0000_191f, 0),
(0x0000_1920, 1),
(0x0000_192c, 0),
(0x0000_1930, 1),
(0x0000_193c, 0),
(0x0000_1946, 2),
(0x0000_1950, 1),
(0x0000_196e, 0),
(0x0000_1970, 1),
(0x0000_1975, 0),
(0x0000_1980, 1),
(0x0000_19ac, 0),
(0x0000_19b0, 1),
(0x0000_19ca, 0),
(0x0000_19d0, 2),
(0x0000_19db, 0),
(0x0000_1a00, 1),
(0x0000_1a1c, 0),
(0x0000_1a20, 1),
(0x0000_1a5f, 0),
(0x0000_1a60, 1),
(0x0000_1a7d, 0),
(0x0000_1a7f, 1),
(0x0000_1a80, 2),
(0x0000_1a8a, 0),
(0x0000_1a90, 2),
(0x0000_1a9a, 0),
(0x0000_1aa7, 1),
(0x0000_1aa8, 0),
(0x0000_1ab0, 1),
(0x0000_1acf, 0),
(0x0000_1b00, 1),
(0x0000_1b4d, 0),
(0x0000_1b50, 2),
(0x0000_1b5a, 0),
(0x0000_1b6b, 1),
(0x0000_1b74, 0),
(0x0000_1b80, 1),
(0x0000_1bb0, 2),
(0x0000_1bba, 1),
(0x0000_1bf4, 0),
(0x0000_1c00, 1),
(0x0000_1c38, 0),
(0x0000_1c40, 2),
(0x0000_1c4a, 0),
(0x0000_1c4d, 1),
(0x0000_1c50, 2),
(0x0000_1c5a, 1),
(0x0000_1c7e, 0),
(0x0000_1c80, 1),
(0x0000_1c89, 0),
(0x0000_1c90, 1),
(0x0000_1cbb, 0),
(0x0000_1cbd, 1),
(0x0000_1cc0, 0),
(0x0000_1cd0, 1),
(0x0000_1cd3, 0),
(0x0000_1cd4, 1),
(0x0000_1cfb, 0),
(0x0000_1d00, 1),
(0x0000_1f16, 0),
(0x0000_1f18, 1),
(0x0000_1f1e, 0),
(0x0000_1f20, 1),
(0x0000_1f46, 0),
(0x0000_1f48, 1),
(0x0000_1f4e, 0),
(0x0000_1f50, 1),
(0x0000_1f58, 0),
(0x0000_1f59, 1),
(0x0000_1f5a, 0),
(0x0000_1f5b, 1),
(0x0000_1f5c, 0),
(0x0000_1f5d, 1),
(0x0000_1f5e, 0),
(0x0000_1f5f, 1),
(0x0000_1f7e, 0),
(0x0000_1f80, 1),
(0x0000_1fb5, 0),
(0x0000_1fb6, 1),
(0x0000_1fbd, 0),
(0x0000_1fbe, 1),
(0x0000_1fbf, 0),
(0x0000_1fc2, 1),
(0x0000_1fc5, 0),
(0x0000_1fc6, 1),
(0x0000_1fcd, 0),
(0x0000_1fd0, 1),
(0x0000_1fd4, 0),
(0x0000_1fd6, 1),
(0x0000_1fdc, 0),
(0x0000_1fe0, 1),
(0x0000_1fed, 0),
(0x0000_1ff2, 1),
(0x0000_1ff5, 0),
(0x0000_1ff6, 1),
(0x0000_1ffd, 0),
(0x0000_2070, 2),
(0x0000_2071, 1),
(0x0000_2072, 0),
(0x0000_2074, 2),
(0x0000_207a, 0),
(0x0000_207f, 1),
(0x0000_2080, 2),
(0x0000_208a, 0),
(0x0000_2090, 1),
(0x0000_209d, 0),
(0x0000_20d0, 1),
(0x0000_20f1, 0),
(0x0000_2102, 1),
(0x0000_2103, 0),
(0x0000_2107, 1),
(0x0000_2108, 0),
(0x0000_210a, 1),
(0x0000_2114, 0),
(0x0000_2115, 1),
(0x0000_2116, 0),
(0x0000_2119, 1),
(0x0000_211e, 0),
(0x0000_2124, 1),
(0x0000_2125, 0),
(0x0000_2126, 1),
(0x0000_2127, 0),
(0x0000_2128, 1),
(0x0000_2129, 0),
(0x0000_212a, 1),
(0x0000_212e, 0),
(0x0000_212f, 1),
(0x0000_213a, 0),
(0x0000_213c, 1),
(0x0000_2140, 0),
(0x0000_2145, 1),
(0x0000_214a, 0),
(0x0000_214e, 1),
(0x0000_214f, 0),
(0x0000_2150, 2),
(0x0000_2183, 1),
(0x0000_2185, 2),
(0x0000_218a, 0),
(0x0000_2460, 2),
(0x0000_249c, 0),
(0x0000_24ea, 2),
(0x0000_2500, 0),
(0x0000_2776, 2),
(0x0000_2794, 0),
(0x0000_2c00, 1),
(0x0000_2ce5, 0),
(0x0000_2ceb, 1),
(0x0000_2cf4, 0),
(0x0000_2cfd, 2),
(0x0000_2cfe, 0),
(0x0000_2d00, 1),
(0x0000_2d26, 0),
(0x0000_2d27, 1),
(0x0000_2d28, 0),
(0x0000_2d2d, 1),
(0x0000_2d2e, 0),
(0x0000_2d30, 1),
(0x0000_2d68, 0),
(0x0000_2d6f, 1),
(0x0000_2d70, 0),
(0x0000_2d7f, 1),
(0x0000_2d97, 0),
(0x0000_2da0, 1),
(0x0000_2da7, 0),
(0x0000_2da8, 1),
(0x0000_2daf, 0),
(0x0000_2db0, 1),
(0x0000_2db7, 0),
(0x0000_2db8, 1),
(0x0000_2dbf, 0),
(0x0000_2dc0, 1),
(0x0000_2dc7, 0),
(0x0000_2dc8, 1),
(0x0000_2dcf, 0),
(0x0000_2dd0, 1),
(0x0000_2dd7, 0),
(0x0000_2dd8, 1),
(0x0000_2ddf, 0),
(0x0000_2de0, 1),
(0x0000_2e00, 0),
(0x0000_2e2f, 1),
(0x0000_2e30, 0),
(0x0000_3005, 1),
(0x0000_3007, 2),
(0x0000_3008, 0),
(0x0000_3021, 2),
(0x0000_302a, 1),
(0x0000_3030, 0),
(0x0000_3031, 1),
(0x0000_3036, 0),
(0x0000_3038, 2),
(0x0000_303b, 1),
(0x0000_303d, 0),
(0x0000_3041, 1),
(0x0000_3097, 0),
(0x0000_3099, 1),
(0x0000_309b, 0),
(0x0000_309d, 1),
(0x0000_30a0, 0),
(0x0000_30a1, 1),
(0x0000_30fb, 0),
(0x0000_30fc, 1),
(0x0000_3100, 0),
(0x0000_3105, 1),
(0x0000_3130, 0),
(0x0000_3131, 1),
(0x0000_318f, 0),
(0x0000_3192, 2),
(0x0000_3196, 0),
(0x0000_31a0, 1),
(0x0000_31c0, 0),
(0x0000_31f0, 1),
(0x0000_3200, 0),
(0x0000_3220, 2),
(0x0000_322a, 0),
(0x0000_3248, 2),
(0x0000_3250, 0),
(0x0000_3251, 2),
(0x0000_3260, 0),
(0x0000_3280, 2),
(0x0000_328a, 0),
(0x0000_32b1, 2),
(0x0000_32c0, 0),
(0x0000_3400, 1),
(0x0000_4dc0, 0),
(0x0000_4e00, 1),
(0x0000_a48d, 0),
(0x0000_a4d0, 1),
(0x0000_a4fe, 0),
(0x0000_a500, 1),
(0x0000_a60d, 0),
(0x0000_a610, 1),
(0x0000_a620, 2),
(0x0000_a62a, 1),
(0x0000_a62c, 0),
(0x0000_a640, 1),
(0x0000_a673, 0),
(0x0000_a674, 1),
(0x0000_a67e, 0),
(0x0000_a67f, 1),
(0x0000_a6e6, 2),
(0x0000_a6f0, 1),
(0x0000_a6f2, 0),
(0x0000_a717, 1),
(0x0000_a720, 0),
(0x0000_a722, 1),
(0x0000_a789, 0),
(0x0000_a78b, 1),
(0x0000_a7cb, 0),
(0x0000_a7d0, 1),
(0x0000_a7d2, 0),
(0x0000_a7d3, 1),
(0x0000_a7d4, 0),
(0x0000_a7d5, 1),
(0x0000_a7da, 0),
(0x0000_a7f2, 1),
(0x0000_a828, 0),
(0x0000_a82c, 1),
(0x0000_a82d, 0),
(0x0000_a830, 2),
(0x0000_a836, 0),
(0x0000_a840, 1),
(0x0000_a874, 0),
(0x0000_a880, 1),
(0x0000_a8c6, 0),
(0x0000_a8d0, 2),
(0x0000_a8da, 0),
(0x0000_a8e0, 1),
(0x0000_a8f8, 0),
(0x0000_a8fb, 1),
(0x0000_a8fc, 0),
(0x0000_a8fd, 1),
(0x0000_a900, 2),
(0x0000_a90a, 1),
(0x0000_a92e, 0),
(0x0000_a930, 1),
(0x0000_a954, 0),
(0x0000_a960, 1),
(0x0000_a97d, 0),
(0x0000_a980, 1),
(0x0000_a9c1, 0),
(0x0000_a9cf, 1),
(0x0000_a9d0, 2),
(0x0000_a9da, 0),
(0x0000_a9e0, 1),
(0x0000_a9f0, 2),
(0x0000_a9fa, 1),
(0x0000_a9ff, 0),
(0x0000_aa00, 1),
(0x0000_aa37, 0),
(0x0000_aa40, 1),
(0x0000_aa4e, 0),
(0x0000_aa50, 2),
(0x0000_aa5a, 0),
(0x0000_aa60, 1),
(0x0000_aa77, 0),
(0x0000_aa7a, 1),
(0x0000_aac3, 0),
(0x0000_aadb, 1),
(0x0000_aade, 0),
(0x0000_aae0, 1),
(0x0000_aaf0, 0),
(0x0000_aaf2, 1),
(0x0000_aaf7, 0),
(0x0000_ab01, 1),
(0x0000_ab07, 0),
(0x0000_ab09, 1),
(0x0000_ab0f, 0),
(0x0000_ab11, 1),
(0x0000_ab17, 0),
(0x0000_ab20, 1),
(0x0000_ab27, 0),
(0x0000_ab28, 1),
(0x0000_ab2f, 0),
(0x0000_ab30, 1),
(0x0000_ab5b, 0),
(0x0000_ab5c, 1),
(0x0000_ab6a, 0),
(0x0000_ab70, 1),
(0x0000_abeb, 0),
(0x0000_abec, 1),
(0x0000_abee, 0),
(0x0000_abf0, 2),
(0x0000_abfa, 0),
(0x0000_ac00, 1),
(0x0000_d7a4, 0),
(0x0000_d7b0, 1),
(0x0000_d7c7, 0),
(0x0000_d7cb, 1),
(0x0000_d7fc, 0),
(0x0000_f900, 1),
(0x0000_fa6e, 0),
(0x0000_fa70, 1),
(0x0000_fada, 0),
(0x0000_fb00, 1),
(0x0000_fb07, 0),
(0x0000_fb13, 1),
(0x0000_fb18, 0),
(0x0000_fb1d, 1),
(0x0000_fb29, 0),
(0x0000_fb2a, 1),
(0x0000_fb37, 0),
(0x0000_fb38, 1),
(0x0000_fb3d, 0),
(0x0000_fb3e, 1),
(0x0000_fb3f, 0),
(0x0000_fb40, 1),
(0x0000_fb42, 0),
(0x0000_fb43, 1),
(0x0000_fb45, 0),
(0x0000_fb46, 1),
(0x0000_fbb2, 0),
(0x0000_fbd3, 1),
(0x0000_fd3e, 0),
(0x0000_fd50, 1),
(0x0000_fd90, 0),
(0x0000_fd92, 1),
(0x0000_fdc8, 0),
(0x0000_fdf0, 1),
(0x0000_fdfc, 0),
(0x0000_fe00, 1),
(0x0000_fe10, 0),
(0x0000_fe20, 1),
(0x0000_fe30, 0),
(0x0000_fe70, 1),
(0x0000_fe75, 0),
(0x0000_fe76, 1),
(0x0000_fefd, 0),
(0x0000_ff10, 2),
(0x0000_ff1a, 0),
(0x0000_ff21, 1),
(0x0000_ff3b, 0),
(0x0000_ff41, 1),
(0x0000_ff5b, 0),
(0x0000_ff66, 1),
(0x0000_ffbf, 0),
(0x0000_ffc2, 1),
(0x0000_ffc8, 0),
(0x0000_ffca, 1),
(0x0000_ffd0, 0),
(0x0000_ffd2, 1),
(0x0000_ffd8, 0),
(0x0000_ffda, 1),
(0x0000_ffdd, 0),
(0x0001_0000, 1),
(0x0001_000c, 0),
(0x0001_000d, 1),
(0x0001_0027, 0),
(0x0001_0028, 1),
(0x0001_003b, 0),
(0x0001_003c, 1),
(0x0001_003e, 0),
(0x0001_003f, 1),
(0x0001_004e, 0),
(0x0001_0050, 1),
(0x0001_005e, 0),
(0x0001_0080, 1),
(0x0001_00fb, 0),
(0x0001_0107, 2),
(0x0001_0134, 0),
(0x0001_0140, 2),
(0x0001_0179, 0),
(0x0001_018a, 2),
(0x0001_018c, 0),
(0x0001_01fd, 1),
(0x0001_01fe, 0),
(0x0001_0280, 1),
(0x0001_029d, 0),
(0x0001_02a0, 1),
(0x0001_02d1, 0),
(0x0001_02e0, 1),
(0x0001_02e1, 2),
(0x0001_02fc, 0),
(0x0001_0300, 1),
(0x0001_0320, 2),
(0x0001_0324, 0),
(0x0001_032d, 1),
(0x0001_0341, 2),
(0x0001_0342, 1),
(0x0001_034a, 2),
(0x0001_034b, 0),
(0x0001_0350, 1),
(0x0001_037b, 0),
(0x0001_0380, 1),
(0x0001_039e, 0),
(0x0001_03a0, 1),
(0x0001_03c4, 0),
(0x0001_03c8, 1),
(0x0001_03d0, 0),
(0x0001_03d1, 2),
(0x0001_03d6, 0),
(0x0001_0400, 1),
(0x0001_049e, 0),
(0x0001_04a0, 2),
(0x0001_04aa, 0),
(0x0001_04b0, 1),
(0x0001_04d4, 0),
(0x0001_04d8, 1),
(0x0001_04fc, 0),
(0x0001_0500, 1),
(0x0001_0528, 0),
(0x0001_0530, 1),
(0x0001_0564, 0),
(0x0001_0570, 1),
(0x0001_057b, 0),
(0x0001_057c, 1),
(0x0001_058b, 0),
(0x0001_058c, 1),
(0x0001_0593, 0),
(0x0001_0594, 1),
(0x0001_0596, 0),
(0x0001_0597, 1),
(0x0001_05a2, 0),
(0x0001_05a3, 1),
(0x0001_05b2, 0),
(0x0001_05b3, 1),
(0x0001_05ba, 0),
(0x0001_05bb, 1),
(0x0001_05bd, 0),
(0x0001_0600, 1),
(0x0001_0737, 0),
(0x0001_0740, 1),
(0x0001_0756, 0),
(0x0001_0760, 1),
(0x0001_0768, 0),
(0x0001_0780, 1),
(0x0001_0786, 0),
(0x0001_0787, 1),
(0x0001_07b1, 0),
(0x0001_07b2, 1),
(0x0001_07bb, 0),
(0x0001_0800, 1),
(0x0001_0806, 0),
(0x0001_0808, 1),
(0x0001_0809, 0),
(0x0001_080a, 1),
(0x0001_0836, 0),
(0x0001_0837, 1),
(0x0001_0839, 0),
(0x0001_083c, 1),
(0x0001_083d, 0),
(0x0001_083f, 1),
(0x0001_0856, 0),
(0x0001_0858, 2),
(0x0001_0860, 1),
(0x0001_0877, 0),
(0x0001_0879, 2),
(0x0001_0880, 1),
(0x0001_089f, 0),
(0x0001_08a7, 2),
(0x0001_08b0, 0),
(0x0001_08e0, 1),
(0x0001_08f3, 0),
(0x0001_08f4, 1),
(0x0001_08f6, 0),
(0x0001_08fb, 2),
(0x0001_0900, 1),
(0x0001_0916, 2),
(0x0001_091c, 0),
(0x0001_0920, 1),
(0x0001_093a, 0),
(0x0001_0980, 1),
(0x0001_09b8, 0),
(0x0001_09bc, 2),
(0x0001_09be, 1),
(0x0001_09c0, 2),
(0x0001_09d0, 0),
(0x0001_09d2, 2),
(0x0001_0a00, 1),
(0x0001_0a04, 0),
(0x0001_0a05, 1),
(0x0001_0a07, 0),
(0x0001_0a0c, 1),
(0x0001_0a14, 0),
(0x0001_0a15, 1),
(0x0001_0a18, 0),
(0x0001_0a19, 1),
(0x0001_0a36, 0),
(0x0001_0a38, 1),
(0x0001_0a3b, 0),
(0x0001_0a3f, 1),
(0x0001_0a40, 2),
(0x0001_0a49, 0),
(0x0001_0a60, 1),
(0x0001_0a7d, 2),
(0x0001_0a7f, 0),
(0x0001_0a80, 1),
(0x0001_0a9d, 2),
(0x0001_0aa0, 0),
(0x0001_0ac0, 1),
(0x0001_0ac8, 0),
(0x0001_0ac9, 1),
(0x0001_0ae7, 0),
(0x0001_0aeb, 2),
(0x0001_0af0, 0),
(0x0001_0b00, 1),
(0x0001_0b36, 0),
(0x0001_0b40, 1),
(0x0001_0b56, 0),
(0x0001_0b58, 2),
(0x0001_0b60, 1),
(0x0001_0b73, 0),
(0x0001_0b78, 2),
(0x0001_0b80, 1),
(0x0001_0b92, 0),
(0x0001_0ba9, 2),
(0x0001_0bb0, 0),
(0x0001_0c00, 1),
(0x0001_0c49, 0),
(0x0001_0c80, 1),
(0x0001_0cb3, 0),
(0x0001_0cc0, 1),
(0x0001_0cf3, 0),
(0x0001_0cfa, 2),
(0x0001_0d00, 1),
(0x0001_0d28, 0),
(0x0001_0d30, 2),
(0x0001_0d3a, 0),
(0x0001_0e60, 2),
(0x0001_0e7f, 0),
(0x0001_0e80, 1),
(0x0001_0eaa, 0),
(0x0001_0eab, 1),
(0x0001_0ead, 0),
(0x0001_0eb0, 1),
(0x0001_0eb2, 0),
(0x0001_0efd, 1),
(0x0001_0f1d, 2),
(0x0001_0f27, 1),
(0x0001_0f28, 0),
(0x0001_0f30, 1),
(0x0001_0f51, 2),
(0x0001_0f55, 0),
(0x0001_0f70, 1),
(0x0001_0f86, 0),
(0x0001_0fb0, 1),
(0x0001_0fc5, 2),
(0x0001_0fcc, 0),
(0x0001_0fe0, 1),
(0x0001_0ff7, 0),
(0x0001_1000, 1),
(0x0001_1047, 0),
(0x0001_1052, 2),
(0x0001_1070, 1),
(0x0001_1076, 0),
(0x0001_107f, 1),
(0x0001_10bb, 0),
(0x0001_10c2, 1),
(0x0001_10c3, 0),
(0x0001_10d0, 1),
(0x0001_10e9, 0),
(0x0001_10f0, 2),
(0x0001_10fa, 0),
(0x0001_1100, 1),
(0x0001_1135, 0),
(0x0001_1136, 2),
(0x0001_1140, 0),
(0x0001_1144, 1),
(0x0001_1148, 0),
(0x0001_1150, 1),
(0x0001_1174, 0),
(0x0001_1176, 1),
(0x0001_1177, 0),
(0x0001_1180, 1),
(0x0001_11c5, 0),
(0x0001_11c9, 1),
(0x0001_11cd, 0),
(0x0001_11ce, 1),
(0x0001_11d0, 2),
(0x0001_11da, 1),
(0x0001_11db, 0),
(0x0001_11dc, 1),
(0x0001_11dd, 0),
(0x0001_11e1, 2),
(0x0001_11f5, 0),
(0x0001_1200, 1),
(0x0001_1212, 0),
(0x0001_1213, 1),
(0x0001_1238, 0),
(0x0001_123e, 1),
(0x0001_1242, 0),
(0x0001_1280, 1),
(0x0001_1287, 0),
(0x0001_1288, 1),
(0x0001_1289, 0),
(0x0001_128a, 1),
(0x0001_128e, 0),
(0x0001_128f, 1),
(0x0001_129e, 0),
(0x0001_129f, 1),
(0x0001_12a9, 0),
(0x0001_12b0, 1),
(0x0001_12eb, 0),
(0x0001_12f0, 2),
(0x0001_12fa, 0),
(0x0001_1300, 1),
(0x0001_1304, 0),
(0x0001_1305, 1),
(0x0001_130d, 0),
(0x0001_130f, 1),
(0x0001_1311, 0),
(0x0001_1313, 1),
(0x0001_1329, 0),
(0x0001_132a, 1),
(0x0001_1331, 0),
(0x0001_1332, 1),
(0x0001_1334, 0),
(0x0001_1335, 1),
(0x0001_133a, 0),
(0x0001_133b, 1),
(0x0001_1345, 0),
(0x0001_1347, 1),
(0x0001_1349, 0),
(0x0001_134b, 1),
(0x0001_134e, 0),
(0x0001_1350, 1),
(0x0001_1351, 0),
(0x0001_1357, 1),
(0x0001_1358, 0),
(0x0001_135d, 1),
(0x0001_1364, 0),
(0x0001_1366, 1),
(0x0001_136d, 0),
(0x0001_1370, 1),
(0x0001_1375, 0),
(0x0001_1400, 1),
(0x0001_144b, 0),
(0x0001_1450, 2),
(0x0001_145a, 0),
(0x0001_145e, 1),
(0x0001_1462, 0),
(0x0001_1480, 1),
(0x0001_14c6, 0),
(0x0001_14c7, 1),
(0x0001_14c8, 0),
(0x0001_14d0, 2),
(0x0001_14da, 0),
(0x0001_1580, 1),
(0x0001_15b6, 0),
(0x0001_15b8, 1),
(0x0001_15c1, 0),
(0x0001_15d8, 1),
(0x0001_15de, 0),
(0x0001_1600, 1),
(0x0001_1641, 0),
(0x0001_1644, 1),
(0x0001_1645, 0),
(0x0001_1650, 2),
(0x0001_165a, 0),
(0x0001_1680, 1),
(0x0001_16b9, 0),
(0x0001_16c0, 2),
(0x0001_16ca, 0),
(0x0001_1700, 1),
(0x0001_171b, 0),
(0x0001_171d, 1),
(0x0001_172c, 0),
(0x0001_1730, 2),
(0x0001_173c, 0),
(0x0001_1740, 1),
(0x0001_1747, 0),
(0x0001_1800, 1),
(0x0001_183b, 0),
(0x0001_18a0, 1),
(0x0001_18e0, 2),
(0x0001_18f3, 0),
(0x0001_18ff, 1),
(0x0001_1907, 0),
(0x0001_1909, 1),
(0x0001_190a, 0),
(0x0001_190c, 1),
(0x0001_1914, 0),
(0x0001_1915, 1),
(0x0001_1917, 0),
(0x0001_1918, 1),
(0x0001_1936, 0),
(0x0001_1937, 1),
(0x0001_1939, 0),
(0x0001_193b, 1),
(0x0001_1944, 0),
(0x0001_1950, 2),
(0x0001_195a, 0),
(0x0001_19a0, 1),
(0x0001_19a8, 0),
(0x0001_19aa, 1),
(0x0001_19d8, 0),
(0x0001_19da, 1),
(0x0001_19e2, 0),
(0x0001_19e3, 1),
(0x0001_19e5, 0),
(0x0001_1a00, 1),
(0x0001_1a3f, 0),
(0x0001_1a47, 1),
(0x0001_1a48, 0),
(0x0001_1a50, 1),
(0x0001_1a9a, 0),
(0x0001_1a9d, 1),
(0x0001_1a9e, 0),
(0x0001_1ab0, 1),
(0x0001_1af9, 0),
(0x0001_1c00, 1),
(0x0001_1c09, 0),
(0x0001_1c0a, 1),
(0x0001_1c37, 0),
(0x0001_1c38, 1),
(0x0001_1c41, 0),
(0x0001_1c50, 2),
(0x0001_1c6d, 0),
(0x0001_1c72, 1),
(0x0001_1c90, 0),
(0x0001_1c92, 1),
(0x0001_1ca8, 0),
(0x0001_1ca9, 1),
(0x0001_1cb7, 0),
(0x0001_1d00, 1),
(0x0001_1d07, 0),
(0x0001_1d08, 1),
(0x0001_1d0a, 0),
(0x0001_1d0b, 1),
(0x0001_1d37, 0),
(0x0001_1d3a, 1),
(0x0001_1d3b, 0),
(0x0001_1d3c, 1),
(0x0001_1d3e, 0),
(0x0001_1d3f, 1),
(0x0001_1d48, 0),
(0x0001_1d50, 2),
(0x0001_1d5a, 0),
(0x0001_1d60, 1),
(0x0001_1d66, 0),
(0x0001_1d67, 1),
(0x0001_1d69, 0),
(0x0001_1d6a, 1),
(0x0001_1d8f, 0),
(0x0001_1d90, 1),
(0x0001_1d92, 0),
(0x0001_1d93, 1),
(0x0001_1d99, 0),
(0x0001_1da0, 2),
(0x0001_1daa, 0),
(0x0001_1ee0, 1),
(0x0001_1ef7, 0),
(0x0001_1f00, 1),
(0x0001_1f11, 0),
(0x0001_1f12, 1),
(0x0001_1f3b, 0),
(0x0001_1f3e, 1),
(0x0001_1f43, 0),
(0x0001_1f50, 2),
(0x0001_1f5a, 0),
(0x0001_1fb0, 1),
(0x0001_1fb1, 0),
(0x0001_1fc0, 2),
(0x0001_1fd5, 0),
(0x0001_2000, 1),
(0x0001_239a, 0),
(0x0001_2400, 2),
(0x0001_246f, 0),
(0x0001_2480, 1),
(0x0001_2544, 0),
(0x0001_2f90, 1),
(0x0001_2ff1, 0),
(0x0001_3000, 1),
(0x0001_3430, 0),
(0x0001_3440, 1),
(0x0001_3456, 0),
(0x0001_4400, 1),
(0x0001_4647, 0),
(0x0001_6800, 1),
(0x0001_6a39, 0),
(0x0001_6a40, 1),
(0x0001_6a5f, 0),
(0x0001_6a60, 2),
(0x0001_6a6a, 0),
(0x0001_6a70, 1),
(0x0001_6abf, 0),
(0x0001_6ac0, 2),
(0x0001_6aca, 0),
(0x0001_6ad0, 1),
(0x0001_6aee, 0),
(0x0001_6af0, 1),
(0x0001_6af5, 0),
(0x0001_6b00, 1),
(0x0001_6b37, 0),
(0x0001_6b40, 1),
(0x0001_6b44, 0),
(0x0001_6b50, 2),
(0x0001_6b5a, 0),
(0x0001_6b5b, 2),
(0x0001_6b62, 0),
(0x0001_6b63, 1),
(0x0001_6b78, 0),
(0x0001_6b7d, 1),
(0x0001_6b90, 0),
(0x0001_6e40, 1),
(0x0001_6e80, 2),
(0x0001_6e97, 0),
(0x0001_6f00, 1),
(0x0001_6f4b, 0),
(0x0001_6f4f, 1),
(0x0001_6f88, 0),
(0x0001_6f8f, 1),
(0x0001_6fa0, 0),
(0x0001_6fe0, 1),
(0x0001_6fe2, 0),
(0x0001_6fe3, 1),
(0x0001_6fe5, 0),
(0x0001_6ff0, 1),
(0x0001_6ff2, 0),
(0x0001_7000, 1),
(0x0001_87f8, 0),
(0x0001_8800, 1),
(0x0001_8cd6, 0),
(0x0001_8d00, 1),
(0x0001_8d09, 0),
(0x0001_aff0, 1),
(0x0001_aff4, 0),
(0x0001_aff5, 1),
(0x0001_affc, 0),
(0x0001_affd, 1),
(0x0001_afff, 0),
(0x0001_b000, 1),
(0x0001_b123, 0),
(0x0001_b132, 1),
(0x0001_b133, 0),
(0x0001_b150, 1),
(0x0001_b153, 0),
(0x0001_b155, 1),
(0x0001_b156, 0),
(0x0001_b164, 1),
(0x0001_b168, 0),
(0x0001_b170, 1),
(0x0001_b2fc, 0),
(0x0001_bc00, 1),
(0x0001_bc6b, 0),
(0x0001_bc70, 1),
(0x0001_bc7d, 0),
(0x0001_bc80, 1),
(0x0001_bc89, 0),
(0x0001_bc90, 1),
(0x0001_bc9a, 0),
(0x0001_bc9d, 1),
(0x0001_bc9f, 0),
(0x0001_cf00, 1),
(0x0001_cf2e, 0),
(0x0001_cf30, 1),
(0x0001_cf47, 0),
(0x0001_d165, 1),
(0x0001_d16a, 0),
(0x0001_d16d, 1),
(0x0001_d173, 0),
(0x0001_d17b, 1),
(0x0001_d183, 0),
(0x0001_d185, 1),
(0x0001_d18c, 0),
(0x0001_d1aa, 1),
(0x0001_d1ae, 0),
(0x0001_d242, 1),
(0x0001_d245, 0),
(0x0001_d2c0, 2),
(0x0001_d2d4, 0),
(0x0001_d2e0, 2),
(0x0001_d2f4, 0),
(0x0001_d360, 2),
(0x0001_d379, 0),
(0x0001_d400, 1),
(0x0001_d455, 0),
(0x0001_d456, 1),
(0x0001_d49d, 0),
(0x0001_d49e, 1),
(0x0001_d4a0, 0),
(0x0001_d4a2, 1),
(0x0001_d4a3, 0),
(0x0001_d4a5, 1),
(0x0001_d4a7, 0),
(0x0001_d4a9, 1),
(0x0001_d4ad, 0),
(0x0001_d4ae, 1),
(0x0001_d4ba, 0),
(0x0001_d4bb, 1),
(0x0001_d4bc, 0),
(0x0001_d4bd, 1),
(0x0001_d4c4, 0),
(0x0001_d4c5, 1),
(0x0001_d506, 0),
(0x0001_d507, 1),
(0x0001_d50b, 0),
(0x0001_d50d, 1),
(0x0001_d515, 0),
(0x0001_d516, 1),
(0x0001_d51d, 0),
(0x0001_d51e, 1),
(0x0001_d53a, 0),
(0x0001_d53b, 1),
(0x0001_d53f, 0),
(0x0001_d540, 1),
(0x0001_d545, 0),
(0x0001_d546, 1),
(0x0001_d547, 0),
(0x0001_d54a, 1),
(0x0001_d551, 0),
(0x0001_d552, 1),
(0x0001_d6a6, 0),
(0x0001_d6a8, 1),
(0x0001_d6c1, 0),
(0x0001_d6c2, 1),
(0x0001_d6db, 0),
(0x0001_d6dc, 1),
(0x0001_d6fb, 0),
(0x0001_d6fc, 1),
(0x0001_d715, 0),
(0x0001_d716, 1),
(0x0001_d735, 0),
(0x0001_d736, 1),
(0x0001_d74f, 0),
(0x0001_d750, 1),
(0x0001_d76f, 0),
(0x0001_d770, 1),
(0x0001_d789, 0),
(0x0001_d78a, 1),
(0x0001_d7a9, 0),
(0x0001_d7aa, 1),
(0x0001_d7c3, 0),
(0x0001_d7c4, 1),
(0x0001_d7cc, 0),
(0x0001_d7ce, 2),
(0x0001_d800, 0),
(0x0001_da00, 1),
(0x0001_da37, 0),
(0x0001_da3b, 1),
(0x0001_da6d, 0),
(0x0001_da75, 1),
(0x0001_da76, 0),
(0x0001_da84, 1),
(0x0001_da85, 0),
(0x0001_da9b, 1),
(0x0001_daa0, 0),
(0x0001_daa1, 1),
(0x0001_dab0, 0),
(0x0001_df00, 1),
(0x0001_df1f, 0),
(0x0001_df25, 1),
(0x0001_df2b, 0),
(0x0001_e000, 1),
(0x0001_e007, 0),
(0x0001_e008, 1),
(0x0001_e019, 0),
(0x0001_e01b, 1),
(0x0001_e022, 0),
(0x0001_e023, 1),
(0x0001_e025, 0),
(0x0001_e026, 1),
(0x0001_e02b, 0),
(0x0001_e030, 1),
(0x0001_e06e, 0),
(0x0001_e08f, 1),
(0x0001_e090, 0),
(0x0001_e100, 1),
(0x0001_e12d, 0),
(0x0001_e130, 1),
(0x0001_e13e, 0),
(0x0001_e140, 2),
(0x0001_e14a, 0),
(0x0001_e14e, 1),
(0x0001_e14f, 0),
(0x0001_e290, 1),
(0x0001_e2af, 0),
(0x0001_e2c0, 1),
(0x0001_e2f0, 2),
(0x0001_e2fa, 0),
(0x0001_e4d0, 1),
(0x0001_e4f0, 2),
(0x0001_e4fa, 0),
(0x0001_e7e0, 1),
(0x0001_e7e7, 0),
(0x0001_e7e8, 1),
(0x0001_e7ec, 0),
(0x0001_e7ed, 1),
(0x0001_e7ef, 0),
(0x0001_e7f0, 1),
(0x0001_e7ff, 0),
(0x0001_e800, 1),
(0x0001_e8c5, 0),
(0x0001_e8c7, 2),
(0x0001_e8d0, 1),
(0x0001_e8d7, 0),
(0x0001_e900, 1),
(0x0001_e94c, 0),
(0x0001_e950, 2),
(0x0001_e95a, 0),
(0x0001_ec71, 2),
(0x0001_ecac, 0),
(0x0001_ecad, 2),
(0x0001_ecb0, 0),
(0x0001_ecb1, 2),
(0x0001_ecb5, 0),
(0x0001_ed01, 2),
(0x0001_ed2e, 0),
(0x0001_ed2f, 2),
(0x0001_ed3e, 0),
(0x0001_ee00, 1),
(0x0001_ee04, 0),
(0x0001_ee05, 1),
(0x0001_ee20, 0),
(0x0001_ee21, 1),
(0x0001_ee23, 0),
(0x0001_ee24, 1),
(0x0001_ee25, 0),
(0x0001_ee27, 1),
(0x0001_ee28, 0),
(0x0001_ee29, 1),
(0x0001_ee33, 0),
(0x0001_ee34, 1),
(0x0001_ee38, 0),
(0x0001_ee39, 1),
(0x0001_ee3a, 0),
(0x0001_ee3b, 1),
(0x0001_ee3c, 0),
(0x0001_ee42, 1),
(0x0001_ee43, 0),
(0x0001_ee47, 1),
(0x0001_ee48, 0),
(0x0001_ee49, 1),
(0x0001_ee4a, 0),
(0x0001_ee4b, 1),
(0x0001_ee4c, 0),
(0x0001_ee4d, 1),
(0x0001_ee50, 0),
(0x0001_ee51, 1),
(0x0001_ee53, 0),
(0x0001_ee54, 1),
(0x0001_ee55, 0),
(0x0001_ee57, 1),
(0x0001_ee58, 0),
(0x0001_ee59, 1),
(0x0001_ee5a, 0),
(0x0001_ee5b, 1),
(0x0001_ee5c, 0),
(0x0001_ee5d, 1),
(0x0001_ee5e, 0),
(0x0001_ee5f, 1),
(0x0001_ee60, 0),
(0x0001_ee61, 1),
(0x0001_ee63, 0),
(0x0001_ee64, 1),
(0x0001_ee65, 0),
(0x0001_ee67, 1),
(0x0001_ee6b, 0),
(0x0001_ee6c, 1),
(0x0001_ee73, 0),
(0x0001_ee74, 1),
(0x0001_ee78, 0),
(0x0001_ee79, 1),
(0x0001_ee7d, 0),
(0x0001_ee7e, 1),
(0x0001_ee7f, 0),
(0x0001_ee80, 1),
(0x0001_ee8a, 0),
(0x0001_ee8b, 1),
(0x0001_ee9c, 0),
(0x0001_eea1, 1),
(0x0001_eea4, 0),
(0x0001_eea5, 1),
(0x0001_eeaa, 0),
(0x0001_eeab, 1),
(0x0001_eebc, 0),
(0x0001_f100, 2),
(0x0001_f10d, 0),
(0x0001_fbf0, 2),
(0x0001_fbfa, 0),
(0x0002_0000, 1),
(0x0002_a6e0, 0),
(0x0002_a700, 1),
(0x0002_b73a, 0),
(0x0002_b740, 1),
(0x0002_b81e, 0),
(0x0002_b820, 1),
(0x0002_cea2, 0),
(0x0002_ceb0, 1),
(0x0002_ebe1, 0),
(0x0002_ebf0, 1),
(0x0002_ee5e, 0),
(0x0002_f800, 1),
(0x0002_fa1e, 0),
(0x0003_0000, 1),
(0x0003_134b, 0),
(0x0003_1350, 1),
(0x0003_23b0, 0),
(0x000e_0100, 1),
(0x000e_01f0, 0),
];