1// Scintilla source code edit control
2/** @file CharacterCategoryMap.cxx
3 ** Returns the Unicode general category of a character.
4 ** Table automatically regenerated by scripts/GenerateCharacterCategory.py
5 ** Should only be rarely regenerated for new versions of Unicode.
6 ** Similar code to Lexilla's lexilla/lexlib/CharacterCategory.cxx but renamed
7 ** to avoid problems with builds that statically include both Scintilla and Lexilla.
8 **/
9// Copyright 2013 by Neil Hodgson <neilh@scintilla.org>
10// The License.txt file describes the conditions under which this software may be distributed.
11
12#include <vector>
13#include <algorithm>
14#include <iterator>
15
16#include "CharacterCategoryMap.h"
17
18namespace Scintilla::Internal {
19
20namespace {
21 // Use an unnamed namespace to protect the declarations from name conflicts
22
23const int catRanges[] = {
24//++Autogenerated -- start of section automatically generated
25// Created with Python 3.9.4, Unicode 13.0.0
2625,
271046,
281073,
291171,
301201,
311293,
321326,
331361,
341394,
351425,
361452,
371489,
381544,
391873,
401938,
412033,
422080,
432925,
442961,
452990,
463028,
473051,
483092,
493105,
503949,
513986,
524014,
534050,
544089,
555142,
565169,
575203,
585333,
595361,
605396,
615429,
625444,
635487,
645522,
655562,
665589,
675620,
685653,
695682,
705706,
715780,
725793,
735841,
745908,
755930,
765956,
776000,
786026,
796129,
806144,
816898,
826912,
837137,
847922,
857937,
868192,
878225,
888256,
898289,
908320,
918353,
928384,
938417,
948448,
958481,
968512,
978545,
988576,
998609,
1008640,
1018673,
1028704,
1038737,
1048768,
1058801,
1068832,
1078865,
1088896,
1098929,
1108960,
1118993,
1129024,
1139057,
1149088,
1159121,
1169152,
1179185,
1189216,
1199249,
1209280,
1219313,
1229344,
1239377,
1249408,
1259441,
1269472,
1279505,
1289536,
1299569,
1309600,
1319633,
1329664,
1339697,
1349728,
1359761,
1369792,
1379825,
1389856,
1399889,
1409920,
1419953,
14210016,
14310049,
14410080,
14510113,
14610144,
14710177,
14810208,
14910241,
15010272,
15110305,
15210336,
15310369,
15410400,
15510433,
15610464,
15710497,
15810560,
15910593,
16010624,
16110657,
16210688,
16310721,
16410752,
16510785,
16610816,
16710849,
16810880,
16910913,
17010944,
17110977,
17211008,
17311041,
17411072,
17511105,
17611136,
17711169,
17811200,
17911233,
18011264,
18111297,
18211328,
18311361,
18411392,
18511425,
18611456,
18711489,
18811520,
18911553,
19011584,
19111617,
19211648,
19311681,
19411712,
19511745,
19611776,
19711809,
19811840,
19911873,
20011904,
20111937,
20211968,
20312001,
20412032,
20512097,
20612128,
20712161,
20812192,
20912225,
21012320,
21112385,
21212416,
21312449,
21412480,
21512545,
21612576,
21712673,
21812736,
21912865,
22012896,
22112961,
22212992,
22313089,
22413184,
22513249,
22613280,
22713345,
22813376,
22913409,
23013440,
23113473,
23213504,
23313569,
23413600,
23513633,
23613696,
23713729,
23813760,
23913825,
24013856,
24113953,
24213984,
24314017,
24414048,
24514113,
24614180,
24714208,
24814241,
24914340,
25014464,
25114498,
25214529,
25314560,
25414594,
25514625,
25614656,
25714690,
25814721,
25914752,
26014785,
26114816,
26214849,
26314880,
26414913,
26514944,
26614977,
26715008,
26815041,
26915072,
27015105,
27115136,
27215169,
27315200,
27415233,
27515296,
27615329,
27715360,
27815393,
27915424,
28015457,
28115488,
28215521,
28315552,
28415585,
28515616,
28615649,
28715680,
28815713,
28915744,
29015777,
29115808,
29215841,
29315904,
29415938,
29515969,
29616000,
29716033,
29816064,
29916161,
30016192,
30116225,
30216256,
30316289,
30416320,
30516353,
30616384,
30716417,
30816448,
30916481,
31016512,
31116545,
31216576,
31316609,
31416640,
31516673,
31616704,
31716737,
31816768,
31916801,
32016832,
32116865,
32216896,
32316929,
32416960,
32516993,
32617024,
32717057,
32817088,
32917121,
33017152,
33117185,
33217216,
33317249,
33417280,
33517313,
33617344,
33717377,
33817408,
33917441,
34017472,
34117505,
34217536,
34317569,
34417600,
34517633,
34617664,
34717697,
34817728,
34917761,
35017792,
35117825,
35217856,
35317889,
35417920,
35517953,
35617984,
35718017,
35818240,
35918305,
36018336,
36118401,
36218464,
36318497,
36418528,
36518657,
36618688,
36718721,
36818752,
36918785,
37018816,
37118849,
37218880,
37318913,
37421124,
37521153,
37622019,
37722612,
37822723,
37923124,
38023555,
38123732,
38223939,
38323988,
38424003,
38524052,
38624581,
38728160,
38828193,
38928224,
39028257,
39128291,
39228340,
39328352,
39428385,
39528445,
39628483,
39728513,
39828625,
39928640,
40028701,
40128820,
40228864,
40328913,
40428928,
40529053,
40629056,
40729117,
40829120,
40929185,
41029216,
41129789,
41229792,
41330081,
41431200,
41531233,
41631296,
41731393,
41831488,
41931521,
42031552,
42131585,
42231616,
42331649,
42431680,
42531713,
42631744,
42731777,
42831808,
42931841,
43031872,
43131905,
43231936,
43331969,
43432000,
43532033,
43632064,
43732097,
43832128,
43932161,
44032192,
44132225,
44232384,
44332417,
44432466,
44532480,
44632513,
44732544,
44832609,
44932672,
45034305,
45135840,
45235873,
45335904,
45435937,
45535968,
45636001,
45736032,
45836065,
45936096,
46036129,
46136160,
46236193,
46336224,
46436257,
46536288,
46636321,
46736352,
46836385,
46936416,
47036449,
47136480,
47236513,
47336544,
47436577,
47536608,
47636641,
47736672,
47836705,
47936736,
48036769,
48136800,
48236833,
48336864,
48436897,
48536949,
48636965,
48737127,
48837184,
48937217,
49037248,
49137281,
49237312,
49337345,
49437376,
49537409,
49637440,
49737473,
49837504,
49937537,
50037568,
50137601,
50237632,
50337665,
50437696,
50537729,
50637760,
50737793,
50837824,
50937857,
51037888,
51137921,
51237952,
51337985,
51438016,
51538049,
51638080,
51738113,
51838144,
51938177,
52038208,
52138241,
52238272,
52338305,
52438336,
52538369,
52638400,
52738433,
52838464,
52938497,
53038528,
53138561,
53238592,
53338625,
53438656,
53538689,
53638720,
53738753,
53838784,
53938817,
54038848,
54138881,
54238912,
54338977,
54439008,
54539041,
54639072,
54739105,
54839136,
54939169,
55039200,
55139233,
55239264,
55339297,
55439328,
55539361,
55639424,
55739457,
55839488,
55939521,
56039552,
56139585,
56239616,
56339649,
56439680,
56539713,
56639744,
56739777,
56839808,
56939841,
57039872,
57139905,
57239936,
57339969,
57440000,
57540033,
57640064,
57740097,
57840128,
57940161,
58040192,
58140225,
58240256,
58340289,
58440320,
58540353,
58640384,
58740417,
58840448,
58940481,
59040512,
59140545,
59240576,
59340609,
59440640,
59540673,
59640704,
59740737,
59840768,
59940801,
60040832,
60140865,
60240896,
60340929,
60440960,
60540993,
60641024,
60741057,
60841088,
60941121,
61041152,
61141185,
61241216,
61341249,
61441280,
61541313,
61641344,
61741377,
61841408,
61941441,
62041472,
62141505,
62241536,
62341569,
62441600,
62541633,
62641664,
62741697,
62841728,
62941761,
63041792,
63141825,
63241856,
63341889,
63441920,
63541953,
63641984,
63742017,
63842048,
63942081,
64042112,
64142145,
64242176,
64342209,
64442240,
64542273,
64642304,
64742337,
64842368,
64942401,
65042432,
65142465,
65242525,
65342528,
65443773,
65543811,
65643857,
65744033,
65845361,
65945388,
66045437,
66145493,
66245555,
66345597,
66445605,
66547052,
66647077,
66747121,
66847141,
66947217,
67047237,
67147313,
67247333,
67347389,
67447620,
67548509,
67648612,
67748753,
67848829,
67949178,
68049362,
68149457,
68249523,
68349553,
68449621,
68549669,
68650033,
68750074,
68850109,
68950129,
69050180,
69151203,
69251236,
69351557,
69452232,
69552561,
69652676,
69752741,
69852772,
69955953,
70055972,
70156005,
70256250,
70356277,
70456293,
70556483,
70656549,
70756629,
70856645,
70956772,
71056840,
71157156,
71257269,
71357316,
71457361,
71557821,
71657850,
71757860,
71857893,
71957924,
72058885,
72159773,
72259812,
72362661,
72463012,
72563069,
72663496,
72763812,
72864869,
72965155,
73065237,
73165265,
73265347,
73365405,
73465445,
73565491,
73665540,
73766245,
73866371,
73966405,
74066691,
74166725,
74266819,
74366853,
74467037,
74567089,
74667581,
74767588,
74868389,
74968509,
75068561,
75168605,
75268612,
75368989,
75470660,
75571357,
75671364,
75771965,
75872293,
75972794,
76072805,
76173830,
76273860,
76375589,
76475622,
76575653,
76675684,
76775718,
76875813,
76976070,
77076197,
77176230,
77276292,
77376325,
77476548,
77576869,
77676945,
77777000,
77877329,
77977347,
78077380,
78177861,
78277894,
78377981,
78477988,
78578269,
78678308,
78778397,
78878436,
78979165,
79079172,
79179421,
79279428,
79379485,
79479556,
79579709,
79679749,
79779780,
79879814,
79979909,
80080061,
80180102,
80280189,
80380230,
80480293,
80580324,
80680381,
80780614,
80880669,
80980772,
81080861,
81180868,
81280965,
81381053,
81481096,
81581412,
81681491,
81781546,
81881749,
81981779,
82081796,
82181841,
82281861,
82381917,
82481957,
82582022,
82682077,
82782084,
82882301,
82982404,
83082493,
83182532,
83283261,
83383268,
83483517,
83583524,
83683613,
83783620,
83883709,
83983716,
84083805,
84183845,
84283901,
84383910,
84484005,
84584093,
84684197,
84784285,
84884325,
84984445,
85084517,
85184573,
85284772,
85384925,
85484932,
85584989,
85685192,
85785509,
85885572,
85985669,
86085713,
86185757,
86286053,
86386118,
86486173,
86586180,
86686493,
86786500,
86886621,
86986628,
87087357,
87187364,
87287613,
87387620,
87487709,
87587716,
87687901,
87787941,
87887972,
87988006,
88088101,
88188285,
88288293,
88388358,
88488413,
88588422,
88688485,
88788541,
88888580,
88988637,
89089092,
89189157,
89289245,
89389288,
89489617,
89589651,
89689693,
89789892,
89889925,
89990141,
90090149,
90190182,
90290269,
90390276,
90490557,
90590596,
90690685,
90790724,
90891453,
90991460,
91091709,
91191716,
91291805,
91391812,
91491997,
91592037,
91692068,
91792102,
91892133,
91992166,
92092197,
92192349,
92292390,
92392477,
92492518,
92592581,
92692637,
92792837,
92892902,
92992957,
93093060,
93193149,
93293156,
93393253,
93493341,
93593384,
93693717,
93793732,
93893770,
93993981,
94094277,
94194308,
94294365,
94394372,
94494589,
94594660,
94694781,
94794788,
94894941,
94995012,
95095101,
95195108,
95295165,
95395172,
95495261,
95595332,
95695421,
95795492,
95895613,
95995684,
96096093,
96196198,
96296261,
96396294,
96496381,
96596454,
96696573,
96796582,
96896677,
96996733,
97096772,
97196829,
97296998,
97397053,
97497480,
97597802,
97697909,
97798099,
97898133,
97998173,
98098309,
98198342,
98298437,
98398468,
98498749,
98598756,
98698877,
98798884,
98899645,
98999652,
990100189,
991100260,
992100293,
993100390,
994100541,
995100549,
996100669,
997100677,
998100829,
999101029,
1000101117,
1001101124,
1002101245,
1003101380,
1004101445,
1005101533,
1006101576,
1007101917,
1008102129,
1009102154,
1010102389,
1011102404,
1012102437,
1013102470,
1014102545,
1015102564,
1016102845,
1017102852,
1018102973,
1019102980,
1020103741,
1021103748,
1022104093,
1023104100,
1024104285,
1025104325,
1026104356,
1027104390,
1028104421,
1029104454,
1030104637,
1031104645,
1032104678,
1033104765,
1034104774,
1035104837,
1036104925,
1037105126,
1038105213,
1039105412,
1040105469,
1041105476,
1042105541,
1043105629,
1044105672,
1045106013,
1046106020,
1047106109,
1048106501,
1049106566,
1050106628,
1051106941,
1052106948,
1053107069,
1054107076,
1055108389,
1056108452,
1057108486,
1058108581,
1059108733,
1060108742,
1061108861,
1062108870,
1063108965,
1064108996,
1065109045,
1066109085,
1067109188,
1068109286,
1069109322,
1070109540,
1071109637,
1072109725,
1073109768,
1074110090,
1075110389,
1076110404,
1077110621,
1078110629,
1079110662,
1080110749,
1081110756,
1082111357,
1083111428,
1084112221,
1085112228,
1086112541,
1087112548,
1088112605,
1089112644,
1090112893,
1091112965,
1092113021,
1093113126,
1094113221,
1095113341,
1096113349,
1097113405,
1098113414,
1099113693,
1100113864,
1101114205,
1102114246,
1103114321,
1104114365,
1105114724,
1106116261,
1107116292,
1108116357,
1109116605,
1110116723,
1111116740,
1112116931,
1113116965,
1114117233,
1115117256,
1116117585,
1117117661,
1118118820,
1119118909,
1120118916,
1121118973,
1122118980,
1123119165,
1124119172,
1125119965,
1126119972,
1127120029,
1128120036,
1129120357,
1130120388,
1131120453,
1132120740,
1133120797,
1134120836,
1135121021,
1136121027,
1137121085,
1138121093,
1139121309,
1140121352,
1141121693,
1142121732,
1143121885,
1144122884,
1145122933,
1146123025,
1147123509,
1148123537,
1149123573,
1150123653,
1151123733,
1152123912,
1153124234,
1154124565,
1155124581,
1156124629,
1157124645,
1158124693,
1159124709,
1160124749,
1161124782,
1162124813,
1163124846,
1164124870,
1165124932,
1166125213,
1167125220,
1168126397,
1169126501,
1170126950,
1171126981,
1172127153,
1173127173,
1174127236,
1175127397,
1176127773,
1177127781,
1178128957,
1179128981,
1180129221,
1181129269,
1182129469,
1183129493,
1184129553,
1185129717,
1186129841,
1187129917,
1188131076,
1189132454,
1190132517,
1191132646,
1192132677,
1193132870,
1194132901,
1195132966,
1196133029,
1197133092,
1198133128,
1199133457,
1200133636,
1201133830,
1202133893,
1203133956,
1204134085,
1205134180,
1206134214,
1207134308,
1208134374,
1209134596,
1210134693,
1211134820,
1212135237,
1213135270,
1214135333,
1215135398,
1216135589,
1217135620,
1218135654,
1219135688,
1220136006,
1221136101,
1222136149,
1223136192,
1224137437,
1225137440,
1226137501,
1227137632,
1228137693,
1229137729,
1230139121,
1231139139,
1232139169,
1233139268,
1234149821,
1235149828,
1236149981,
1237150020,
1238150269,
1239150276,
1240150333,
1241150340,
1242150493,
1243150532,
1244151869,
1245151876,
1246152029,
1247152068,
1248153149,
1249153156,
1250153309,
1251153348,
1252153597,
1253153604,
1254153661,
1255153668,
1256153821,
1257153860,
1258154365,
1259154372,
1260156221,
1261156228,
1262156381,
1263156420,
1264158589,
1265158629,
1266158737,
1267159018,
1268159677,
1269159748,
1270160277,
1271160605,
1272160768,
1273163549,
1274163585,
1275163805,
1276163852,
1277163876,
1278183733,
1279183761,
1280183780,
1281184342,
1282184356,
1283185197,
1284185230,
1285185277,
1286185348,
1287187761,
1288187849,
1289187940,
1290188221,
1291188420,
1292188861,
1293188868,
1294188997,
1295189117,
1296189444,
1297190021,
1298190129,
1299190205,
1300190468,
1301191045,
1302191133,
1303191492,
1304191933,
1305191940,
1306192061,
1307192069,
1308192157,
1309192516,
1310194181,
1311194246,
1312194277,
1313194502,
1314194757,
1315194790,
1316194853,
1317195217,
1318195299,
1319195345,
1320195443,
1321195460,
1322195493,
1323195549,
1324195592,
1325195933,
1326196106,
1327196445,
1328196625,
1329196812,
1330196849,
1331196965,
1332197082,
1333197117,
1334197128,
1335197469,
1336197636,
1337198755,
1338198788,
1339200509,
1340200708,
1341200869,
1342200932,
1343202021,
1344202052,
1345202109,
1346202244,
1347204509,
1348204804,
1349205821,
1350205829,
1351205926,
1352206053,
1353206118,
1354206237,
1355206342,
1356206405,
1357206438,
1358206629,
1359206749,
1360206869,
1361206909,
1362206993,
1363207048,
1364207364,
1365208349,
1366208388,
1367208573,
1368208900,
1369210333,
1370210436,
1371211293,
1372211464,
1373211786,
1374211837,
1375211925,
1376212996,
1377213733,
1378213798,
1379213861,
1380213917,
1381213969,
1382214020,
1383215718,
1384215749,
1385215782,
1386215813,
1387216061,
1388216069,
1389216102,
1390216133,
1391216166,
1392216229,
1393216486,
1394216677,
1395217021,
1396217061,
1397217096,
1398217437,
1399217608,
1400217949,
1401218129,
1402218339,
1403218385,
1404218589,
1405218629,
1406219079,
1407219109,
1408219197,
1409221189,
1410221318,
1411221348,
1412222853,
1413222886,
1414222917,
1415223078,
1416223109,
1417223142,
1418223301,
1419223334,
1420223396,
1421223645,
1422223752,
1423224081,
1424224309,
1425224613,
1426224917,
1427225213,
1428225285,
1429225350,
1430225380,
1431226342,
1432226373,
1433226502,
1434226565,
1435226630,
1436226661,
1437226756,
1438226824,
1439227140,
1440228549,
1441228582,
1442228613,
1443228678,
1444228773,
1445228806,
1446228837,
1447228934,
1448229021,
1449229265,
1450229380,
1451230534,
1452230789,
1453231046,
1454231109,
1455231197,
1456231281,
1457231432,
1458231773,
1459231844,
1460231944,
1461232260,
1462233219,
1463233425,
1464233473,
1465233789,
1466233984,
1467235389,
1468235424,
1469235537,
1470235805,
1471236037,
1472236145,
1473236165,
1474236582,
1475236613,
1476236836,
1477236965,
1478236996,
1479237189,
1480237220,
1481237286,
1482237317,
1483237380,
1484237437,
1485237569,
1486238979,
1487240993,
1488241411,
1489241441,
1490242531,
1491243717,
1492245597,
1493245605,
1494245760,
1495245793,
1496245824,
1497245857,
1498245888,
1499245921,
1500245952,
1501245985,
1502246016,
1503246049,
1504246080,
1505246113,
1506246144,
1507246177,
1508246208,
1509246241,
1510246272,
1511246305,
1512246336,
1513246369,
1514246400,
1515246433,
1516246464,
1517246497,
1518246528,
1519246561,
1520246592,
1521246625,
1522246656,
1523246689,
1524246720,
1525246753,
1526246784,
1527246817,
1528246848,
1529246881,
1530246912,
1531246945,
1532246976,
1533247009,
1534247040,
1535247073,
1536247104,
1537247137,
1538247168,
1539247201,
1540247232,
1541247265,
1542247296,
1543247329,
1544247360,
1545247393,
1546247424,
1547247457,
1548247488,
1549247521,
1550247552,
1551247585,
1552247616,
1553247649,
1554247680,
1555247713,
1556247744,
1557247777,
1558247808,
1559247841,
1560247872,
1561247905,
1562247936,
1563247969,
1564248000,
1565248033,
1566248064,
1567248097,
1568248128,
1569248161,
1570248192,
1571248225,
1572248256,
1573248289,
1574248320,
1575248353,
1576248384,
1577248417,
1578248448,
1579248481,
1580248512,
1581248545,
1582248576,
1583248609,
1584248640,
1585248673,
1586248704,
1587248737,
1588248768,
1589248801,
1590248832,
1591248865,
1592248896,
1593248929,
1594248960,
1595248993,
1596249024,
1597249057,
1598249088,
1599249121,
1600249152,
1601249185,
1602249216,
1603249249,
1604249280,
1605249313,
1606249344,
1607249377,
1608249408,
1609249441,
1610249472,
1611249505,
1612249536,
1613249569,
1614249600,
1615249633,
1616249664,
1617249697,
1618249728,
1619249761,
1620249792,
1621249825,
1622249856,
1623249889,
1624249920,
1625249953,
1626249984,
1627250017,
1628250048,
1629250081,
1630250112,
1631250145,
1632250176,
1633250209,
1634250240,
1635250273,
1636250304,
1637250337,
1638250368,
1639250401,
1640250432,
1641250465,
1642250496,
1643250529,
1644250816,
1645250849,
1646250880,
1647250913,
1648250944,
1649250977,
1650251008,
1651251041,
1652251072,
1653251105,
1654251136,
1655251169,
1656251200,
1657251233,
1658251264,
1659251297,
1660251328,
1661251361,
1662251392,
1663251425,
1664251456,
1665251489,
1666251520,
1667251553,
1668251584,
1669251617,
1670251648,
1671251681,
1672251712,
1673251745,
1674251776,
1675251809,
1676251840,
1677251873,
1678251904,
1679251937,
1680251968,
1681252001,
1682252032,
1683252065,
1684252096,
1685252129,
1686252160,
1687252193,
1688252224,
1689252257,
1690252288,
1691252321,
1692252352,
1693252385,
1694252416,
1695252449,
1696252480,
1697252513,
1698252544,
1699252577,
1700252608,
1701252641,
1702252672,
1703252705,
1704252736,
1705252769,
1706252800,
1707252833,
1708252864,
1709252897,
1710252928,
1711252961,
1712252992,
1713253025,
1714253056,
1715253089,
1716253120,
1717253153,
1718253184,
1719253217,
1720253248,
1721253281,
1722253312,
1723253345,
1724253376,
1725253409,
1726253440,
1727253473,
1728253504,
1729253537,
1730253568,
1731253601,
1732253632,
1733253665,
1734253696,
1735253729,
1736253760,
1737253793,
1738253824,
1739253857,
1740253888,
1741253921,
1742254208,
1743254465,
1744254685,
1745254720,
1746254941,
1747254977,
1748255232,
1749255489,
1750255744,
1751256001,
1752256221,
1753256256,
1754256477,
1755256513,
1756256797,
1757256800,
1758256861,
1759256864,
1760256925,
1761256928,
1762256989,
1763256992,
1764257025,
1765257280,
1766257537,
1767258013,
1768258049,
1769258306,
1770258561,
1771258818,
1772259073,
1773259330,
1774259585,
1775259773,
1776259777,
1777259840,
1778259970,
1779260020,
1780260033,
1781260084,
1782260161,
1783260285,
1784260289,
1785260352,
1786260482,
1787260532,
1788260609,
1789260765,
1790260801,
1791260864,
1792261021,
1793261044,
1794261121,
1795261376,
1796261556,
1797261661,
1798261697,
1799261821,
1800261825,
1801261888,
1802262018,
1803262068,
1804262141,
1805262166,
1806262522,
1807262668,
1808262865,
1809262927,
1810262960,
1811262989,
1812263023,
1813263088,
1814263117,
1815263151,
1816263185,
1817263447,
1818263480,
1819263514,
1820263670,
1821263697,
1822263983,
1823264016,
1824264049,
1825264171,
1826264241,
1827264338,
1828264365,
1829264398,
1830264433,
1831264786,
1832264817,
1833264843,
1834264881,
1835265206,
1836265242,
1837265405,
1838265434,
1839265738,
1840265763,
1841265821,
1842265866,
1843266066,
1844266157,
1845266190,
1846266211,
1847266250,
1848266578,
1849266669,
1850266702,
1851266749,
1852266755,
1853267197,
1854267283,
1855268317,
1856268805,
1857269223,
1858269349,
1859269383,
1860269477,
1861269885,
1862270357,
1863270400,
1864270453,
1865270560,
1866270613,
1867270657,
1868270688,
1869270785,
1870270848,
1871270945,
1872270997,
1873271008,
1874271061,
1875271122,
1876271136,
1877271317,
1878271488,
1879271541,
1880271552,
1881271605,
1882271616,
1883271669,
1884271680,
1885271829,
1886271841,
1887271872,
1888272001,
1889272036,
1890272161,
1891272213,
1892272257,
1893272320,
1894272402,
1895272544,
1896272577,
1897272725,
1898272754,
1899272789,
1900272833,
1901272885,
1902272906,
1903273417,
1904274528,
1905274561,
1906274601,
1907274730,
1908274773,
1909274845,
1910274962,
1911275125,
1912275282,
1913275349,
1914275474,
1915275509,
1916275570,
1917275605,
1918275666,
1919275701,
1920275922,
1921275957,
1922276946,
1923277013,
1924277074,
1925277109,
1926277138,
1927277173,
1928278162,
1929286741,
1930286989,
1931287022,
1932287053,
1933287086,
1934287125,
1935287762,
1936287829,
1937288045,
1938288078,
1939288117,
1940290706,
1941290741,
1942291698,
1943292501,
1944293778,
1945293973,
1946296189,
1947296981,
1948297341,
1949297994,
1950299925,
1951302410,
1952303125,
1953308978,
1954309013,
1955309298,
1956309333,
1957311058,
1958311317,
1959314866,
1960314901,
1961322829,
1962322862,
1963322893,
1964322926,
1965322957,
1966322990,
1967323021,
1968323054,
1969323085,
1970323118,
1971323149,
1972323182,
1973323213,
1974323246,
1975323274,
1976324245,
1977325650,
1978325805,
1979325838,
1980325874,
1981326861,
1982326894,
1983326925,
1984326958,
1985326989,
1986327022,
1987327053,
1988327086,
1989327117,
1990327150,
1991327186,
1992327701,
1993335890,
1994340077,
1995340110,
1996340141,
1997340174,
1998340205,
1999340238,
2000340269,
2001340302,
2002340333,
2003340366,
2004340397,
2005340430,
2006340461,
2007340494,
2008340525,
2009340558,
2010340589,
2011340622,
2012340653,
2013340686,
2014340717,
2015340750,
2016340786,
2017342797,
2018342830,
2019342861,
2020342894,
2021342930,
2022343949,
2023343982,
2024344018,
2025352277,
2026353810,
2027354485,
2028354546,
2029354741,
2030355997,
2031356053,
2032357085,
2033357109,
2034360448,
2035361981,
2036361985,
2037363517,
2038363520,
2039363553,
2040363584,
2041363681,
2042363744,
2043363777,
2044363808,
2045363841,
2046363872,
2047363905,
2048363936,
2049364065,
2050364096,
2051364129,
2052364192,
2053364225,
2054364419,
2055364480,
2056364577,
2057364608,
2058364641,
2059364672,
2060364705,
2061364736,
2062364769,
2063364800,
2064364833,
2065364864,
2066364897,
2067364928,
2068364961,
2069364992,
2070365025,
2071365056,
2072365089,
2073365120,
2074365153,
2075365184,
2076365217,
2077365248,
2078365281,
2079365312,
2080365345,
2081365376,
2082365409,
2083365440,
2084365473,
2085365504,
2086365537,
2087365568,
2088365601,
2089365632,
2090365665,
2091365696,
2092365729,
2093365760,
2094365793,
2095365824,
2096365857,
2097365888,
2098365921,
2099365952,
2100365985,
2101366016,
2102366049,
2103366080,
2104366113,
2105366144,
2106366177,
2107366208,
2108366241,
2109366272,
2110366305,
2111366336,
2112366369,
2113366400,
2114366433,
2115366464,
2116366497,
2117366528,
2118366561,
2119366592,
2120366625,
2121366656,
2122366689,
2123366720,
2124366753,
2125366784,
2126366817,
2127366848,
2128366881,
2129366912,
2130366945,
2131366976,
2132367009,
2133367040,
2134367073,
2135367104,
2136367137,
2137367168,
2138367201,
2139367232,
2140367265,
2141367296,
2142367329,
2143367360,
2144367393,
2145367424,
2146367457,
2147367488,
2148367521,
2149367552,
2150367585,
2151367616,
2152367649,
2153367680,
2154367713,
2155367797,
2156367968,
2157368001,
2158368032,
2159368065,
2160368101,
2161368192,
2162368225,
2163368285,
2164368433,
2165368554,
2166368593,
2167368641,
2168369885,
2169369889,
2170369949,
2171370081,
2172370141,
2173370180,
2174371997,
2175372195,
2176372241,
2177372285,
2178372709,
2179372740,
2180373501,
2181373764,
2182374013,
2183374020,
2184374269,
2185374276,
2186374525,
2187374532,
2188374781,
2189374788,
2190375037,
2191375044,
2192375293,
2193375300,
2194375549,
2195375556,
2196375805,
2197375813,
2198376849,
2199376911,
2200376944,
2201376975,
2202377008,
2203377041,
2204377135,
2205377168,
2206377201,
2207377231,
2208377264,
2209377297,
2210377580,
2211377617,
2212377676,
2213377713,
2214377743,
2215377776,
2216377809,
2217377871,
2218377904,
2219377933,
2220377966,
2221377997,
2222378030,
2223378061,
2224378094,
2225378125,
2226378158,
2227378193,
2228378339,
2229378385,
2230378700,
2231378769,
2232378892,
2233378929,
2234378957,
2235378993,
2236379413,
2237379473,
2238379517,
2239380949,
2240381789,
2241381813,
2242384669,
2243385045,
2244391901,
2245392725,
2246393117,
2247393238,
2248393265,
2249393365,
2250393379,
2251393412,
2252393449,
2253393485,
2254393518,
2255393549,
2256393582,
2257393613,
2258393646,
2259393677,
2260393710,
2261393741,
2262393774,
2263393813,
2264393869,
2265393902,
2266393933,
2267393966,
2268393997,
2269394030,
2270394061,
2271394094,
2272394124,
2273394157,
2274394190,
2275394261,
2276394281,
2277394565,
2278394694,
2279394764,
2280394787,
2281394965,
2282395017,
2283395107,
2284395140,
2285395185,
2286395221,
2287395293,
2288395300,
2289398077,
2290398117,
2291398196,
2292398243,
2293398308,
2294398348,
2295398372,
2296401265,
2297401283,
2298401380,
2299401437,
2300401572,
2301402973,
2302402980,
2303406013,
2304406037,
2305406090,
2306406229,
2307406532,
2308407573,
2309408733,
2310409092,
2311409621,
2312410621,
2313410634,
2314410965,
2315411914,
2316412181,
2317412202,
2318412693,
2319413706,
2320414037,
2321415274,
2322415765,
2323425988,
2324636949,
2325638980,
23261310653,
23271310724,
23281311395,
23291311428,
23301348029,
23311348117,
23321349885,
23331350148,
23341351427,
23351351633,
23361351684,
23371360259,
23381360305,
23391360388,
23401360904,
23411361220,
23421361309,
23431361920,
23441361953,
23451361984,
23461362017,
23471362048,
23481362081,
23491362112,
23501362145,
23511362176,
23521362209,
23531362240,
23541362273,
23551362304,
23561362337,
23571362368,
23581362401,
23591362432,
23601362465,
23611362496,
23621362529,
23631362560,
23641362593,
23651362624,
23661362657,
23671362688,
23681362721,
23691362752,
23701362785,
23711362816,
23721362849,
23731362880,
23741362913,
23751362944,
23761362977,
23771363008,
23781363041,
23791363072,
23801363105,
23811363136,
23821363169,
23831363200,
23841363233,
23851363264,
23861363297,
23871363328,
23881363361,
23891363396,
23901363429,
23911363463,
23921363569,
23931363589,
23941363921,
23951363939,
23961363968,
23971364001,
23981364032,
23991364065,
24001364096,
24011364129,
24021364160,
24031364193,
24041364224,
24051364257,
24061364288,
24071364321,
24081364352,
24091364385,
24101364416,
24111364449,
24121364480,
24131364513,
24141364544,
24151364577,
24161364608,
24171364641,
24181364672,
24191364705,
24201364736,
24211364769,
24221364800,
24231364833,
24241364867,
24251364933,
24261364996,
24271367241,
24281367557,
24291367633,
24301367837,
24311368084,
24321368803,
24331369108,
24341369152,
24351369185,
24361369216,
24371369249,
24381369280,
24391369313,
24401369344,
24411369377,
24421369408,
24431369441,
24441369472,
24451369505,
24461369536,
24471369569,
24481369664,
24491369697,
24501369728,
24511369761,
24521369792,
24531369825,
24541369856,
24551369889,
24561369920,
24571369953,
24581369984,
24591370017,
24601370048,
24611370081,
24621370112,
24631370145,
24641370176,
24651370209,
24661370240,
24671370273,
24681370304,
24691370337,
24701370368,
24711370401,
24721370432,
24731370465,
24741370496,
24751370529,
24761370560,
24771370593,
24781370624,
24791370657,
24801370688,
24811370721,
24821370752,
24831370785,
24841370816,
24851370849,
24861370880,
24871370913,
24881370944,
24891370977,
24901371008,
24911371041,
24921371072,
24931371105,
24941371136,
24951371169,
24961371200,
24971371233,
24981371264,
24991371297,
25001371328,
25011371361,
25021371392,
25031371425,
25041371456,
25051371489,
25061371520,
25071371553,
25081371584,
25091371617,
25101371651,
25111371681,
25121371936,
25131371969,
25141372000,
25151372033,
25161372064,
25171372129,
25181372160,
25191372193,
25201372224,
25211372257,
25221372288,
25231372321,
25241372352,
25251372385,
25261372419,
25271372468,
25281372512,
25291372545,
25301372576,
25311372609,
25321372644,
25331372672,
25341372705,
25351372736,
25361372769,
25371372864,
25381372897,
25391372928,
25401372961,
25411372992,
25421373025,
25431373056,
25441373089,
25451373120,
25461373153,
25471373184,
25481373217,
25491373248,
25501373281,
25511373312,
25521373345,
25531373376,
25541373409,
25551373440,
25561373473,
25571373504,
25581373665,
25591373696,
25601373857,
25611373888,
25621373921,
25631373952,
25641373985,
25651374016,
25661374049,
25671374080,
25681374113,
25691374144,
25701374177,
25711374237,
25721374272,
25731374305,
25741374336,
25751374465,
25761374496,
25771374529,
25781374589,
25791375904,
25801375937,
25811375972,
25821376003,
25831376065,
25841376100,
25851376325,
25861376356,
25871376453,
25881376484,
25891376613,
25901376644,
25911377382,
25921377445,
25931377510,
25941377557,
25951377669,
25961377725,
25971377802,
25981378005,
25991378067,
26001378101,
26011378141,
26021378308,
26031379985,
26041380125,
26051380358,
26061380420,
26071382022,
26081382533,
26091382621,
26101382865,
26111382920,
26121383261,
26131383429,
26141384004,
26151384209,
26161384292,
26171384337,
26181384356,
26191384421,
26201384456,
26211384772,
26221385669,
26231385937,
26241385988,
26251386725,
26261387078,
26271387165,
26281387505,
26291387524,
26301388477,
26311388549,
26321388646,
26331388676,
26341390181,
26351390214,
26361390277,
26371390406,
26381390469,
26391390534,
26401390641,
26411391069,
26421391075,
26431391112,
26441391453,
26451391569,
26461391620,
26471391781,
26481391811,
26491391844,
26501392136,
26511392452,
26521392637,
26531392644,
26541393957,
26551394150,
26561394213,
26571394278,
26581394341,
26591394429,
26601394692,
26611394789,
26621394820,
26631395077,
26641395110,
26651395165,
26661395208,
26671395549,
26681395601,
26691395716,
26701396227,
26711396260,
26721396469,
26731396548,
26741396582,
26751396613,
26761396646,
26771396676,
26781398277,
26791398308,
26801398341,
26811398436,
26821398501,
26831398564,
26841398725,
26851398788,
26861398821,
26871398852,
26881398909,
26891399652,
26901399715,
26911399761,
26921399812,
26931400166,
26941400197,
26951400262,
26961400337,
26971400388,
26981400419,
26991400486,
27001400517,
27011400573,
27021400868,
27031401085,
27041401124,
27051401341,
27061401380,
27071401597,
27081401860,
27091402109,
27101402116,
27111402365,
27121402369,
27131403764,
27141403779,
27151403905,
27161404195,
27171404244,
27181404317,
27191404417,
27201406980,
27211408102,
27221408165,
27231408198,
27241408261,
27251408294,
27261408369,
27271408390,
27281408421,
27291408477,
27301408520,
27311408861,
27321409028,
27331766557,
27341766916,
27351767677,
27361767780,
27371769373,
27381769499,
27391835036,
27402039812,
27412051549,
27422051588,
27432055005,
27442056193,
27452056445,
27462056801,
27472056989,
27482057124,
27492057157,
27502057188,
27512057522,
27522057540,
27532057981,
27542057988,
27552058173,
27562058180,
27572058237,
27582058244,
27592058333,
27602058340,
27612058429,
27622058436,
27632061908,
27642062429,
27652062948,
27662074574,
27672074605,
27682074653,
27692075140,
27702077213,
27712077252,
27722079005,
27732080260,
27742080659,
27752080693,
27762080733,
27772080773,
27782081297,
27792081517,
27802081550,
27812081585,
27822081629,
27832081797,
27842082321,
27852082348,
27862082411,
27872082477,
27882082510,
27892082541,
27902082574,
27912082605,
27922082638,
27932082669,
27942082702,
27952082733,
27962082766,
27972082797,
27982082830,
27992082861,
28002082894,
28012082925,
28022082958,
28032082993,
28042083053,
28052083086,
28062083121,
28072083243,
28082083345,
28092083453,
28102083473,
28112083596,
28122083629,
28132083662,
28142083693,
28152083726,
28162083757,
28172083790,
28182083825,
28192083922,
28202083948,
28212083986,
28222084093,
28232084113,
28242084147,
28252084177,
28262084253,
28272084356,
28282084541,
28292084548,
28302088893,
28312088954,
28322088989,
28332089009,
28342089107,
28352089137,
28362089229,
28372089262,
28382089297,
28392089330,
28402089361,
28412089388,
28422089425,
28432089480,
28442089809,
28452089874,
28462089969,
28472090016,
28482090861,
28492090897,
28502090926,
28512090964,
28522090987,
28532091028,
28542091041,
28552091885,
28562091922,
28572091950,
28582091986,
28592092013,
28602092046,
28612092081,
28622092109,
28632092142,
28642092177,
28652092228,
28662092547,
28672092580,
28682094019,
28692094084,
28702095101,
28712095172,
28722095389,
28732095428,
28742095645,
28752095684,
28762095901,
28772095940,
28782096061,
28792096147,
28802096210,
28812096244,
28822096277,
28832096307,
28842096381,
28852096405,
28862096434,
28872096565,
28882096637,
28892096954,
28902097045,
28912097117,
28922097156,
28932097565,
28942097572,
28952098429,
28962098436,
28972099069,
28982099076,
28992099165,
29002099172,
29012099677,
29022099716,
29032100189,
29042101252,
29052105213,
29062105361,
29072105469,
29082105578,
29092107037,
29102107125,
29112107401,
29122109098,
29132109237,
29142109770,
29152109845,
29162109949,
29172109973,
29182110397,
29192110485,
29202110525,
29212112021,
29222113445,
29232113501,
29242117636,
29252118589,
29262118660,
29272120253,
29282120709,
29292120746,
29302121629,
29312121732,
29322122762,
29332122909,
29342123172,
29352123817,
29362123844,
29372124105,
29382124157,
29392124292,
29402125509,
29412125693,
29422125828,
29432126813,
29442126833,
29452126852,
29462128029,
29472128132,
29482128401,
29492128425,
29502128605,
29512129920,
29522131201,
29532132484,
29542135005,
29552135048,
29562135389,
29572135552,
29582136733,
29592136833,
29602138013,
29612138116,
29622139421,
29632139652,
29642141341,
29652141681,
29662141725,
29672146308,
29682156285,
29692156548,
29702157277,
29712157572,
29722157853,
29732162692,
29742162909,
29752162948,
29762163005,
29772163012,
29782164445,
29792164452,
29802164541,
29812164612,
29822164669,
29832164708,
29842165469,
29852165489,
29862165514,
29872165764,
29882166517,
29892166570,
29902166788,
29912167805,
29922168042,
29932168349,
29942169860,
29952170493,
29962170500,
29972170589,
29982170730,
29992170884,
30002171594,
30012171805,
30022171889,
30032171908,
30042172765,
30052172913,
30062172957,
30072174980,
30082176797,
30092176906,
30102176964,
30112177034,
30122177565,
30132177610,
30142179076,
30152179109,
30162179229,
30172179237,
30182179325,
30192179461,
30202179588,
30212179741,
30222179748,
30232179869,
30242179876,
30252180829,
30262180869,
30272180989,
30282181093,
30292181130,
30302181437,
30312181649,
30322181949,
30332182148,
30342183082,
30352183153,
30362183172,
30372184106,
30382184221,
30392185220,
30402185493,
30412185508,
30422186405,
30432186493,
30442186602,
30452186769,
30462187005,
30472187268,
30482189021,
30492189105,
30502189316,
30512190045,
30522190090,
30532190340,
30542190973,
30552191114,
30562191364,
30572191965,
30582192177,
30592192317,
30602192682,
30612192925,
30622195460,
30632197821,
30642199552,
30652201213,
30662201601,
30672203261,
30682203466,
30692203652,
30702204805,
30712204957,
30722205192,
30732205533,
30742214922,
30752215933,
30762215940,
30772217309,
30782217317,
30792217388,
30802217437,
30812217476,
30822217565,
30832220036,
30842220970,
30852221284,
30862221341,
30872221572,
30882222277,
30892222634,
30902222769,
30912222941,
30922225668,
30932226346,
30942226589,
30952227204,
30962227965,
30972228230,
30982228261,
30992228294,
31002228324,
31012230021,
31022230513,
31032230749,
31042230858,
31052231496,
31062231837,
31072232293,
31082232390,
31092232420,
31102233862,
31112233957,
31122234086,
31132234149,
31142234225,
31152234298,
31162234321,
31172234461,
31182234810,
31192234845,
31202234884,
31212235709,
31222235912,
31232236253,
31242236421,
31252236516,
31262237669,
31272237830,
31282237861,
31292238141,
31302238152,
31312238481,
31322238596,
31332238630,
31342238692,
31352238749,
31362238980,
31372240101,
31382240145,
31392240196,
31402240253,
31412240517,
31422240582,
31432240612,
31442242150,
31452242245,
31462242534,
31472242596,
31482242737,
31492242853,
31502242993,
31512243014,
31522243045,
31532243080,
31542243396,
31552243441,
31562243460,
31572243505,
31582243613,
31592243626,
31602244285,
31612244612,
31622245213,
31632245220,
31642246022,
31652246117,
31662246214,
31672246277,
31682246310,
31692246341,
31702246417,
31712246597,
31722246653,
31732248708,
31742248957,
31752248964,
31762249021,
31772249028,
31782249181,
31792249188,
31802249693,
31812249700,
31822250033,
31832250077,
31842250244,
31852251749,
31862251782,
31872251877,
31882252157,
31892252296,
31902252637,
31912252805,
31922252870,
31932252957,
31942252964,
31952253245,
31962253284,
31972253373,
31982253412,
31992254141,
32002254148,
32012254397,
32022254404,
32032254493,
32042254500,
32052254685,
32062254693,
32072254756,
32082254790,
32092254853,
32102254886,
32112255037,
32122255078,
32132255165,
32142255206,
32152255325,
32162255364,
32172255421,
32182255590,
32192255645,
32202255780,
32212255942,
32222256029,
32232256069,
32242256317,
32252256389,
32262256573,
32272260996,
32282262694,
32292262789,
32302263046,
32312263109,
32322263206,
32332263237,
32342263268,
32352263409,
32362263560,
32372263889,
32382263965,
32392263985,
32402264005,
32412264036,
32422264157,
32432265092,
32442266630,
32452266725,
32462266918,
32472266949,
32482266982,
32492267109,
32502267174,
32512267205,
32522267268,
32532267345,
32542267364,
32552267421,
32562267656,
32572267997,
32582273284,
32592274790,
32602274885,
32612275037,
32622275078,
32632275205,
32642275270,
32652275301,
32662275377,
32672276100,
32682276229,
32692276317,
32702277380,
32712278918,
32722279013,
32732279270,
32742279333,
32752279366,
32762279397,
32772279473,
32782279556,
32792279613,
32802279944,
32812280285,
32822280465,
32832280893,
32842281476,
32852282853,
32862282886,
32872282917,
32882282950,
32892283013,
32902283206,
32912283237,
32922283268,
32932283325,
32942283528,
32952283869,
32962285572,
32972286461,
32982286501,
32992286598,
33002286661,
33012286790,
33022286821,
33032287005,
33042287112,
33052287434,
33062287505,
33072287605,
33082287645,
33092293764,
33102295174,
33112295269,
33122295558,
33132295589,
33142295665,
33152295709,
33162298880,
33172299905,
33182300936,
33192301258,
33202301565,
33212301924,
33222302205,
33232302244,
33242302301,
33252302340,
33262302621,
33272302628,
33282302717,
33292302724,
33302303494,
33312303709,
33322303718,
33332303805,
33342303845,
33352303910,
33362303941,
33372303972,
33382304006,
33392304036,
33402304070,
33412304101,
33422304145,
33432304253,
33442304520,
33452304861,
33462307076,
33472307357,
33482307396,
33492308646,
33502308741,
33512308893,
33522308933,
33532308998,
33542309125,
33552309156,
33562309201,
33572309220,
33582309254,
33592309309,
33602310148,
33612310181,
33622310500,
33632311781,
33642311974,
33652312004,
33662312037,
33672312177,
33682312421,
33692312477,
33702312708,
33712312741,
33722312934,
33732312997,
33742313092,
33752314565,
33762314982,
33772315013,
33782315089,
33792315172,
33802315217,
33812315389,
33822316292,
33832318141,
33842326532,
33852326845,
33862326852,
33872328038,
33882328069,
33892328317,
33902328325,
33912328518,
33922328549,
33932328580,
33942328625,
33952328797,
33962329096,
33972329418,
33982330045,
33992330129,
34002330180,
34012331165,
34022331205,
34032331933,
34042331942,
34052331973,
34062332198,
34072332229,
34082332294,
34092332325,
34102332413,
34112334724,
34122334973,
34132334980,
34142335069,
34152335076,
34162336293,
34172336509,
34182336581,
34192336637,
34202336645,
34212336733,
34222336741,
34232336964,
34242336997,
34252337053,
34262337288,
34272337629,
34282337796,
34292338013,
34302338020,
34312338109,
34322338116,
34332339142,
34342339325,
34352339333,
34362339421,
34372339430,
34382339493,
34392339526,
34402339557,
34412339588,
34422339645,
34432339848,
34442340189,
34452350084,
34462350693,
34472350758,
34482350833,
34492350909,
34502356740,
34512356797,
34522357258,
34532357941,
34542358195,
34552358325,
34562358877,
34572359281,
34582359300,
34592388829,
34602392073,
34612395645,
34622395665,
34632395837,
34642396164,
34652402461,
34662490372,
34672524669,
34682524698,
34692524989,
34702654212,
34712672893,
34722949124,
34732967357,
34742967556,
34752968573,
34762968584,
34772968925,
34782969041,
34792969117,
34802972164,
34812973149,
34822973189,
34832973361,
34842973405,
34852973700,
34862975237,
34872975473,
34882975637,
34892975747,
34902975889,
34912975925,
34922975965,
34932976264,
34942976605,
34952976618,
34962976861,
34972976868,
34982977565,
34992977700,
35002978333,
35013000320,
35023001345,
35033002378,
35043003121,
35053003261,
35063006468,
35073008893,
35083008997,
35093009028,
35103009062,
35113010845,
35123011045,
35133011171,
35143011613,
35153013635,
35163013713,
35173013731,
35183013765,
35193013821,
35203014150,
35213014237,
35223014660,
35233211037,
35243211268,
35253250909,
35263252228,
35273252541,
35283538948,
35293548157,
35303549700,
35313549821,
35323550340,
35333550493,
35343550724,
35353563421,
35363637252,
35373640701,
35383640836,
35393641277,
35403641348,
35413641661,
35423641860,
35433642205,
35443642261,
35453642277,
35463642353,
35473642394,
35483642525,
35493801109,
35503808989,
35513809301,
35523810557,
35533810613,
35543812518,
35553812581,
35563812693,
35573812774,
35583812986,
35593813221,
35603813493,
35613813541,
35623813781,
35633814725,
35643814869,
35653816765,
35663817493,
35673819589,
35683819701,
35693819741,
35703824650,
35713825309,
35723825685,
35733828477,
35743828746,
35753829565,
35763833856,
35773834689,
35783835520,
35793836353,
35803836605,
35813836609,
35823837184,
35833838017,
35843838848,
35853838909,
35863838912,
35873839005,
35883839040,
35893839101,
35903839136,
35913839229,
35923839264,
35933839421,
35943839424,
35953839681,
35963839837,
35973839841,
35983839901,
35993839905,
36003840157,
36013840161,
36023840512,
36033841345,
36043842176,
36053842269,
36063842272,
36073842429,
36083842464,
36093842749,
36103842752,
36113843005,
36123843009,
36133843840,
36143843933,
36153843936,
36163844093,
36173844096,
36183844285,
36193844288,
36203844349,
36213844416,
36223844669,
36233844673,
36243845504,
36253846337,
36263847168,
36273848001,
36283848832,
36293849665,
36303850496,
36313851329,
36323852160,
36333852993,
36343853824,
36353854657,
36363855581,
36373855616,
36383856434,
36393856449,
36403857266,
36413857281,
36423857472,
36433858290,
36443858305,
36453859122,
36463859137,
36473859328,
36483860146,
36493860161,
36503860978,
36513860993,
36523861184,
36533862002,
36543862017,
36553862834,
36563862849,
36573863040,
36583863858,
36593863873,
36603864690,
36613864705,
36623864896,
36633864929,
36643864989,
36653865032,
36663866645,
36673883013,
36683884789,
36693884901,
36703886517,
36713886757,
36723886805,
36733887237,
36743887285,
36753887345,
36763887517,
36773887973,
36783888157,
36793888165,
36803888669,
36813932165,
36823932413,
36833932421,
36843932989,
36853933029,
36863933277,
36873933285,
36883933373,
36893933381,
36903933565,
36913940356,
36923941821,
36933941893,
36943942115,
36953942365,
36963942408,
36973942749,
36983942852,
36993942901,
37003942941,
37013954692,
37023956101,
37033956232,
37043956573,
37053956723,
37063956765,
37073997700,
37084004029,
37094004074,
37104004357,
37114004605,
37124005888,
37134006977,
37144008069,
37154008291,
37164008349,
37174008456,
37184008797,
37194008913,
37204008989,
37214034090,
37224035989,
37234036010,
37244036115,
37254036138,
37264036285,
37274038698,
37284040149,
37294040170,
37304040669,
37314046852,
37324047005,
37334047012,
37344047901,
37354047908,
37364047997,
37374048004,
37384048061,
37394048100,
37404048157,
37414048164,
37424048509,
37434048516,
37444048669,
37454048676,
37464048733,
37474048740,
37484048797,
37494048964,
37504049021,
37514049124,
37524049181,
37534049188,
37544049245,
37554049252,
37564049309,
37574049316,
37584049437,
37594049444,
37604049533,
37614049540,
37624049597,
37634049636,
37644049693,
37654049700,
37664049757,
37674049764,
37684049821,
37694049828,
37704049885,
37714049892,
37724049949,
37734049956,
37744050045,
37754050052,
37764050109,
37774050148,
37784050301,
37794050308,
37804050557,
37814050564,
37824050717,
37834050724,
37844050877,
37854050884,
37864050941,
37874050948,
37884051293,
37894051300,
37904051869,
37914052004,
37924052125,
37934052132,
37944052317,
37954052324,
37964052893,
37974054546,
37984054621,
37994063253,
38004064669,
38014064789,
38024067997,
38034068373,
38044068861,
38054068917,
38064069405,
38074069429,
38084069917,
38094069941,
38104071133,
38114071434,
38124071861,
38134077021,
38144078805,
38154079741,
38164080149,
38174081565,
38184081685,
38194081981,
38204082197,
38214082269,
38224082709,
38234082909,
38244087829,
38254095860,
38264096021,
38274119325,
38284119573,
38294119997,
38304120085,
38314120509,
38324120597,
38334124317,
38344124693,
38354127549,
38364127765,
38374128157,
38384128789,
38394129181,
38404129301,
38414131101,
38424131349,
38434131677,
38444131861,
38454133149,
38464133397,
38474134365,
38484134421,
38494134493,
38504136981,
38514140861,
38524140885,
38534143517,
38544143541,
38554147869,
38564148245,
38574148701,
38584148757,
38594148925,
38604149013,
38614149117,
38624149269,
38634149501,
38644149781,
38654150589,
38664150805,
38674151037,
38684151317,
38694151421,
38704151829,
38714152061,
38724153365,
38734158077,
38744158101,
38754159869,
38764161032,
38774161373,
38784194308,
38795561309,
38805562372,
38815695165,
38825695492,
38835702621,
38845702660,
38855887069,
38865887492,
38876126653,
38886225924,
38896243293,
38906291460,
38916449533,
389229360186,
389329360221,
389429361178,
389529364253,
389629368325,
389729376029,
389831457308,
389933554397,
390033554460,
390135651549,
390235651613,
3903//--Autogenerated -- end of section automatically generated
3904};
3905
3906constexpr int maxUnicode = 0x10ffff;
3907constexpr int maskCategory = 0x1F;
3908
3909}
3910
3911// Each element in catRanges is the start of a range of Unicode characters in
3912// one general category.
3913// The value is comprised of a 21-bit character value shifted 5 bits and a 5 bit
3914// category matching the CharacterCategory enumeration.
3915// Initial version has 3249 entries and adds about 13K to the executable.
3916// The array is in ascending order so can be searched using binary search.
3917// Therefore the average call takes log2(3249) = 12 comparisons.
3918// For speed, it may be useful to make a linear table for the common values,
3919// possibly for 0..0xff for most Western European text or 0..0xfff for most
3920// alphabetic languages.
3921
3922CharacterCategory CategoriseCharacter(int character) {
3923 if (character < 0 || character > maxUnicode)
3924 return ccCn;
3925 const int baseValue = character * (maskCategory+1) + maskCategory;
3926 const int *placeAfter = std::lower_bound(catRanges, std::end(catRanges), baseValue);
3927 return static_cast<CharacterCategory>(*(placeAfter-1) & maskCategory);
3928}
3929
3930// Implementation of character sets recommended for identifiers in Unicode Standard Annex #31.
3931// http://unicode.org/reports/tr31/
3932
3933namespace {
3934
3935enum class OtherID { oidNone, oidStart, oidContinue };
3936
3937// Some characters are treated as valid for identifiers even
3938// though most characters from their category are not.
3939// Values copied from http://www.unicode.org/Public/9.0.0/ucd/PropList.txt
3940OtherID OtherIDOfCharacter(int character) noexcept {
3941 if (
3942 (character == 0x1885) || // MONGOLIAN LETTER ALI GALI BALUDA
3943 (character == 0x1886) || // MONGOLIAN LETTER ALI GALI THREE BALUDA
3944 (character == 0x2118) || // SCRIPT CAPITAL P
3945 (character == 0x212E) || // ESTIMATED SYMBOL
3946 (character == 0x309B) || // KATAKANA-HIRAGANA VOICED SOUND MARK
3947 (character == 0x309C)) { // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
3948 return OtherID::oidStart;
3949 } else if (
3950 (character == 0x00B7) || // MIDDLE DOT
3951 (character == 0x0387) || // GREEK ANO TELEIA
3952 ((character >= 0x1369) && (character <= 0x1371)) || // ETHIOPIC DIGIT ONE..ETHIOPIC DIGIT NINE
3953 (character == 0x19DA)) { // NEW TAI LUE THAM DIGIT ONE
3954 return OtherID::oidContinue;
3955 } else {
3956 return OtherID::oidNone;
3957 }
3958}
3959
3960// Determine if a character is in Ll|Lu|Lt|Lm|Lo|Nl|Mn|Mc|Nd|Pc and has
3961// Pattern_Syntax|Pattern_White_Space.
3962// As of Unicode 9, only VERTICAL TILDE which is in Lm and has Pattern_Syntax matches.
3963// Should really generate from PropList.txt a list of Pattern_Syntax and Pattern_White_Space.
3964constexpr bool IsIdPattern(int character) noexcept {
3965 return character == 0x2E2F;
3966}
3967
3968bool OmitXidStart(int character) noexcept {
3969 switch (character) {
3970 case 0x037A: // GREEK YPOGEGRAMMENI
3971 case 0x0E33: // THAI CHARACTER SARA AM
3972 case 0x0EB3: // LAO VOWEL SIGN AM
3973 case 0x309B: // KATAKANA-HIRAGANA VOICED SOUND MARK
3974 case 0x309C: // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
3975 case 0xFC5E: // ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
3976 case 0xFC5F: // ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
3977 case 0xFC60: // ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
3978 case 0xFC61: // ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
3979 case 0xFC62: // ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
3980 case 0xFC63: // ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
3981 case 0xFDFA: // ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
3982 case 0xFDFB: // ARABIC LIGATURE JALLAJALALOUHOU
3983 case 0xFE70: // ARABIC FATHATAN ISOLATED FORM
3984 case 0xFE72: // ARABIC DAMMATAN ISOLATED FORM
3985 case 0xFE74: // ARABIC KASRATAN ISOLATED FORM
3986 case 0xFE76: // ARABIC FATHA ISOLATED FORM
3987 case 0xFE78: // ARABIC DAMMA ISOLATED FORM
3988 case 0xFE7A: // ARABIC KASRA ISOLATED FORM
3989 case 0xFE7C: // ARABIC SHADDA ISOLATED FORM
3990 case 0xFE7E: // ARABIC SUKUN ISOLATED FORM
3991 case 0xFF9E: // HALFWIDTH KATAKANA VOICED SOUND MARK
3992 case 0xFF9F: // HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
3993 return true;
3994 default:
3995 return false;
3996 }
3997}
3998
3999bool OmitXidContinue(int character) noexcept {
4000 switch (character) {
4001 case 0x037A: // GREEK YPOGEGRAMMENI
4002 case 0x309B: // KATAKANA-HIRAGANA VOICED SOUND MARK
4003 case 0x309C: // KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
4004 case 0xFC5E: // ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM
4005 case 0xFC5F: // ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM
4006 case 0xFC60: // ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM
4007 case 0xFC61: // ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM
4008 case 0xFC62: // ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM
4009 case 0xFC63: // ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM
4010 case 0xFDFA: // ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM
4011 case 0xFDFB: // ARABIC LIGATURE JALLAJALALOUHOU
4012 case 0xFE70: // ARABIC FATHATAN ISOLATED FORM
4013 case 0xFE72: // ARABIC DAMMATAN ISOLATED FORM
4014 case 0xFE74: // ARABIC KASRATAN ISOLATED FORM
4015 case 0xFE76: // ARABIC FATHA ISOLATED FORM
4016 case 0xFE78: // ARABIC DAMMA ISOLATED FORM
4017 case 0xFE7A: // ARABIC KASRA ISOLATED FORM
4018 case 0xFE7C: // ARABIC SHADDA ISOLATED FORM
4019 case 0xFE7E: // ARABIC SUKUN ISOLATED FORM
4020 return true;
4021 default:
4022 return false;
4023 }
4024}
4025
4026}
4027
4028// UAX #31 defines ID_Start as
4029// [[:L:][:Nl:][:Other_ID_Start:]--[:Pattern_Syntax:]--[:Pattern_White_Space:]]
4030bool IsIdStart(int character) {
4031 if (IsIdPattern(character)) {
4032 return false;
4033 }
4034 const OtherID oid = OtherIDOfCharacter(character);
4035 if (oid == OtherID::oidStart) {
4036 return true;
4037 }
4038 const CharacterCategory c = CategoriseCharacter(character);
4039 return (c == ccLl || c == ccLu || c == ccLt || c == ccLm || c == ccLo
4040 || c == ccNl);
4041}
4042
4043// UAX #31 defines ID_Continue as
4044// [[:ID_Start:][:Mn:][:Mc:][:Nd:][:Pc:][:Other_ID_Continue:]--[:Pattern_Syntax:]--[:Pattern_White_Space:]]
4045bool IsIdContinue(int character) {
4046 if (IsIdPattern(character)) {
4047 return false;
4048 }
4049 const OtherID oid = OtherIDOfCharacter(character);
4050 if (oid != OtherID::oidNone) {
4051 return true;
4052 }
4053 const CharacterCategory c = CategoriseCharacter(character);
4054 return (c == ccLl || c == ccLu || c == ccLt || c == ccLm || c == ccLo
4055 || c == ccNl || c == ccMn || c == ccMc || c == ccNd || c == ccPc);
4056}
4057
4058// XID_Start is ID_Start modified for Normalization Form KC in UAX #31
4059bool IsXidStart(int character) {
4060 if (OmitXidStart(character)) {
4061 return false;
4062 } else {
4063 return IsIdStart(character);
4064 }
4065}
4066
4067// XID_Continue is ID_Continue modified for Normalization Form KC in UAX #31
4068bool IsXidContinue(int character) {
4069 if (OmitXidContinue(character)) {
4070 return false;
4071 } else {
4072 return IsIdContinue(character);
4073 }
4074}
4075
4076CharacterCategoryMap::CharacterCategoryMap() {
4077 Optimize(256);
4078}
4079
4080int CharacterCategoryMap::Size() const noexcept {
4081 return static_cast<int>(dense.size());
4082}
4083
4084void CharacterCategoryMap::Optimize(int countCharacters) {
4085 const int characters = std::clamp(countCharacters, 256, maxUnicode + 1);
4086 dense.resize(characters);
4087
4088 int end = 0;
4089 int index = 0;
4090 int current = catRanges[index];
4091 ++index;
4092 do {
4093 const int next = catRanges[index];
4094 const unsigned char category = current & maskCategory;
4095 current >>= 5;
4096 end = std::min(characters, next >> 5);
4097 while (current < end) {
4098 dense[current++] = category;
4099 }
4100 current = next;
4101 ++index;
4102 } while (characters > end);
4103}
4104
4105}
4106