Unicode.cpp (233394B)
1 /* Generated by make_unicode.py DO NOT MODIFY */ 2 /* Unicode version: 17.0.0 */ 3 4 /* 5 * Any copyright is dedicated to the Public Domain. 6 * http://creativecommons.org/licenses/publicdomain/ 7 */ 8 #include "util/Unicode.h" 9 10 using namespace js; 11 using namespace js::unicode; 12 13 /* 14 * So how does indexing work? 15 * First let's have a look at a char16_t, 16-bits: 16 * [................] 17 * Step 1: 18 * Extracting the upper 11 bits from the char16_t. 19 * upper = char >> 5 ([***********.....]) 20 * Step 2: 21 * Using these bits to get an reduced index from index1. 22 * index = index1[upper] 23 * Step 3: 24 * Combining the index and the bottom 5 bits of the original char16_t. 25 * real_index = index2[(index << 5) + (char & ((1 << 5) - 1))] ([...********+++++]) 26 * 27 * The advantage here is that the biggest number in index1 doesn't need 10 bits, 28 * but 7 and we save some memory. 29 * 30 * Step 4: 31 * Get the character informations by looking up real_index in js_charinfo. 32 * 33 * Pseudocode of generation: 34 * 35 * let table be the mapping of char16_t => js_charinfo_index 36 * let index1 be an empty array 37 * let index2 be an empty array 38 * let cache be a hash map 39 * 40 * while shift is less then maximal amount you can shift 0xffff before it's 0 41 * let chunks be table split in chunks of size 2**shift 42 * 43 * for every chunk in chunks 44 * if chunk is in cache 45 * let index be cache[chunk] 46 * else 47 * let index be the max key of index2 + 1 48 * for element in chunk 49 * push element to index2 50 * put index as chunk in cache 51 * 52 * push index >> shift to index1 53 * 54 * increase shift 55 * stop if you found the best shift 56 */ 57 const CharacterInfo unicode::js_charinfo[] = { 58 { 0, 0, 0 }, 59 { 0, 0, 1 }, 60 { 0, 0, 4 }, 61 { 0, 32, 2 }, 62 { 65504, 0, 2 }, 63 { 0, 0, 2 }, 64 { 743, 0, 2 }, 65 { 121, 0, 2 }, 66 { 0, 1, 2 }, 67 { 65535, 0, 2 }, 68 { 0, 65337, 2 }, 69 { 65304, 0, 2 }, 70 { 0, 65415, 2 }, 71 { 65236, 0, 2 }, 72 { 195, 0, 2 }, 73 { 0, 210, 2 }, 74 { 0, 206, 2 }, 75 { 0, 205, 2 }, 76 { 0, 79, 2 }, 77 { 0, 202, 2 }, 78 { 0, 203, 2 }, 79 { 0, 207, 2 }, 80 { 97, 0, 2 }, 81 { 0, 211, 2 }, 82 { 0, 209, 2 }, 83 { 163, 0, 2 }, 84 { 42561, 0, 2 }, 85 { 0, 213, 2 }, 86 { 130, 0, 2 }, 87 { 0, 214, 2 }, 88 { 0, 218, 2 }, 89 { 0, 217, 2 }, 90 { 0, 219, 2 }, 91 { 56, 0, 2 }, 92 { 0, 2, 2 }, 93 { 65535, 1, 2 }, 94 { 65534, 0, 2 }, 95 { 65457, 0, 2 }, 96 { 0, 65439, 2 }, 97 { 0, 65480, 2 }, 98 { 0, 65406, 2 }, 99 { 0, 10795, 2 }, 100 { 0, 65373, 2 }, 101 { 0, 10792, 2 }, 102 { 10815, 0, 2 }, 103 { 0, 65341, 2 }, 104 { 0, 69, 2 }, 105 { 0, 71, 2 }, 106 { 10783, 0, 2 }, 107 { 10780, 0, 2 }, 108 { 10782, 0, 2 }, 109 { 65326, 0, 2 }, 110 { 65330, 0, 2 }, 111 { 65331, 0, 2 }, 112 { 65334, 0, 2 }, 113 { 65333, 0, 2 }, 114 { 42319, 0, 2 }, 115 { 42315, 0, 2 }, 116 { 65329, 0, 2 }, 117 { 42343, 0, 2 }, 118 { 42280, 0, 2 }, 119 { 42308, 0, 2 }, 120 { 65327, 0, 2 }, 121 { 65325, 0, 2 }, 122 { 10743, 0, 2 }, 123 { 42305, 0, 2 }, 124 { 10749, 0, 2 }, 125 { 65323, 0, 2 }, 126 { 65322, 0, 2 }, 127 { 10727, 0, 2 }, 128 { 65318, 0, 2 }, 129 { 42307, 0, 2 }, 130 { 42282, 0, 2 }, 131 { 65467, 0, 2 }, 132 { 65319, 0, 2 }, 133 { 65465, 0, 2 }, 134 { 65317, 0, 2 }, 135 { 42261, 0, 2 }, 136 { 42258, 0, 2 }, 137 { 84, 0, 4 }, 138 { 0, 116, 2 }, 139 { 0, 38, 2 }, 140 { 0, 37, 2 }, 141 { 0, 64, 2 }, 142 { 0, 63, 2 }, 143 { 65498, 0, 2 }, 144 { 65499, 0, 2 }, 145 { 65505, 0, 2 }, 146 { 65472, 0, 2 }, 147 { 65473, 0, 2 }, 148 { 0, 8, 2 }, 149 { 65474, 0, 2 }, 150 { 65479, 0, 2 }, 151 { 65489, 0, 2 }, 152 { 65482, 0, 2 }, 153 { 65528, 0, 2 }, 154 { 65450, 0, 2 }, 155 { 65456, 0, 2 }, 156 { 7, 0, 2 }, 157 { 65420, 0, 2 }, 158 { 0, 65476, 2 }, 159 { 65440, 0, 2 }, 160 { 0, 65529, 2 }, 161 { 0, 80, 2 }, 162 { 0, 15, 2 }, 163 { 65521, 0, 2 }, 164 { 0, 48, 2 }, 165 { 65488, 0, 2 }, 166 { 0, 7264, 2 }, 167 { 3008, 0, 2 }, 168 { 0, 38864, 2 }, 169 { 59282, 0, 2 }, 170 { 59283, 0, 2 }, 171 { 59292, 0, 2 }, 172 { 59294, 0, 2 }, 173 { 59293, 0, 2 }, 174 { 59300, 0, 2 }, 175 { 59355, 0, 2 }, 176 { 35266, 0, 2 }, 177 { 0, 62528, 2 }, 178 { 35332, 0, 2 }, 179 { 3814, 0, 2 }, 180 { 35384, 0, 2 }, 181 { 65477, 0, 2 }, 182 { 0, 57921, 2 }, 183 { 8, 0, 2 }, 184 { 0, 65528, 2 }, 185 { 74, 0, 2 }, 186 { 86, 0, 2 }, 187 { 100, 0, 2 }, 188 { 128, 0, 2 }, 189 { 112, 0, 2 }, 190 { 126, 0, 2 }, 191 { 9, 0, 2 }, 192 { 0, 65462, 2 }, 193 { 0, 65527, 2 }, 194 { 58331, 0, 2 }, 195 { 0, 65450, 2 }, 196 { 0, 65436, 2 }, 197 { 0, 65424, 2 }, 198 { 0, 65408, 2 }, 199 { 0, 65410, 2 }, 200 { 0, 58019, 2 }, 201 { 0, 57153, 2 }, 202 { 0, 57274, 2 }, 203 { 0, 28, 2 }, 204 { 65508, 0, 2 }, 205 { 0, 16, 2 }, 206 { 65520, 0, 2 }, 207 { 0, 26, 0 }, 208 { 65510, 0, 0 }, 209 { 0, 54793, 2 }, 210 { 0, 61722, 2 }, 211 { 0, 54809, 2 }, 212 { 54741, 0, 2 }, 213 { 54744, 0, 2 }, 214 { 0, 54756, 2 }, 215 { 0, 54787, 2 }, 216 { 0, 54753, 2 }, 217 { 0, 54754, 2 }, 218 { 0, 54721, 2 }, 219 { 58272, 0, 2 }, 220 { 0, 30204, 2 }, 221 { 0, 23256, 2 }, 222 { 48, 0, 2 }, 223 { 0, 23228, 2 }, 224 { 0, 23217, 2 }, 225 { 0, 23221, 2 }, 226 { 0, 23231, 2 }, 227 { 0, 23278, 2 }, 228 { 0, 23254, 2 }, 229 { 0, 23275, 2 }, 230 { 0, 928, 2 }, 231 { 0, 65488, 2 }, 232 { 0, 23229, 2 }, 233 { 0, 30152, 2 }, 234 { 0, 23193, 2 }, 235 { 0, 22975, 2 }, 236 { 64608, 0, 2 }, 237 { 26672, 0, 2 }, 238 }; 239 240 const uint8_t unicode::index1[] = { 241 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 242 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 243 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 244 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 26, 26, 26, 26, 245 26, 68, 69, 70, 71, 72, 73, 74, 75, 26, 26, 26, 26, 26, 26, 26, 26, 76, 246 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 247 95, 96, 97, 98, 99, 100, 101, 102, 26, 103, 104, 12, 105, 105, 106, 105, 107, 108, 248 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 249 118, 118, 119, 120, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 250 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 121, 122, 105, 123, 251 124, 125, 126, 127, 118, 118, 118, 118, 118, 118, 118, 118, 128, 75, 129, 130, 131, 26, 252 132, 133, 118, 118, 118, 118, 118, 118, 118, 118, 26, 26, 26, 26, 26, 26, 26, 26, 253 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 254 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 255 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 256 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 257 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 258 26, 26, 26, 26, 26, 118, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 259 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 260 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 261 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 262 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 263 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 264 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 265 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 266 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 267 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 268 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 269 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 270 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 271 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 272 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 273 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 274 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 275 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 276 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 277 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 134, 135, 26, 26, 26, 26, 136, 137, 278 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 279 156, 157, 158, 159, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 280 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 281 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 282 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 283 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 284 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 285 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 286 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 287 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 288 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 160, 161, 289 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 290 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 291 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 292 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 293 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 294 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 295 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 296 118, 118, 118, 118, 118, 118, 26, 26, 26, 26, 26, 162, 26, 163, 164, 165, 166, 167, 297 26, 26, 26, 26, 168, 169, 170, 171, 172, 173, 26, 174, 175, 176, 177, 178, 298 }; 299 300 const uint8_t unicode::index2[] = { 301 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 302 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 303 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 304 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 305 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 306 3, 0, 0, 0, 0, 2, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 307 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 308 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 309 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 310 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 311 0, 6, 0, 2, 0, 0, 5, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 312 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 313 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 314 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 315 4, 4, 4, 7, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 316 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 317 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 10, 11, 318 8, 9, 8, 9, 8, 9, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 319 9, 8, 9, 8, 9, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 320 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 321 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 12, 8, 322 9, 8, 9, 8, 9, 13, 14, 15, 8, 9, 8, 9, 16, 8, 9, 17, 17, 8, 323 9, 5, 18, 19, 20, 8, 9, 17, 21, 22, 23, 24, 8, 9, 25, 26, 23, 27, 324 28, 29, 8, 9, 8, 9, 8, 9, 30, 8, 9, 30, 5, 5, 8, 9, 30, 8, 325 9, 31, 31, 8, 9, 8, 9, 32, 8, 9, 5, 5, 8, 9, 5, 33, 5, 5, 326 5, 5, 34, 35, 36, 34, 35, 36, 34, 35, 36, 8, 9, 8, 9, 8, 9, 8, 327 9, 8, 9, 8, 9, 8, 9, 8, 9, 37, 8, 9, 8, 9, 8, 9, 8, 9, 328 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 5, 34, 35, 36, 8, 9, 38, 39, 329 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 330 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 331 8, 9, 8, 9, 40, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 332 8, 9, 8, 9, 8, 9, 5, 5, 5, 5, 5, 5, 41, 8, 9, 42, 43, 44, 333 44, 8, 9, 45, 46, 47, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 48, 49, 334 50, 51, 52, 5, 53, 53, 5, 54, 5, 55, 56, 5, 5, 5, 53, 57, 5, 58, 335 59, 60, 61, 5, 62, 63, 61, 64, 65, 5, 5, 63, 5, 66, 67, 5, 5, 68, 336 5, 5, 5, 5, 5, 5, 5, 69, 5, 5, 70, 5, 71, 70, 5, 5, 5, 72, 337 70, 73, 74, 74, 75, 5, 5, 5, 5, 5, 76, 5, 5, 5, 5, 5, 5, 5, 338 5, 5, 5, 77, 78, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 339 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 340 5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 341 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 342 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 5, 0, 0, 0, 0, 0, 343 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 344 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 345 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 346 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 347 2, 2, 2, 2, 2, 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, 2, 2, 2, 348 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 349 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 8, 9, 350 8, 9, 5, 0, 8, 9, 0, 0, 5, 28, 28, 28, 0, 80, 0, 0, 0, 0, 351 0, 0, 81, 2, 82, 82, 82, 0, 83, 0, 84, 84, 5, 3, 3, 3, 3, 3, 352 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 3, 3, 353 3, 3, 3, 3, 85, 86, 86, 86, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 354 4, 4, 4, 4, 4, 4, 4, 4, 87, 4, 4, 4, 4, 4, 4, 4, 4, 4, 355 88, 89, 89, 90, 91, 92, 5, 5, 5, 93, 94, 95, 8, 9, 8, 9, 8, 9, 356 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 357 96, 97, 98, 99, 100, 101, 0, 8, 9, 102, 8, 9, 5, 40, 40, 40, 103, 103, 358 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 3, 3, 3, 3, 359 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 360 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 361 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 362 4, 4, 4, 4, 4, 4, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 363 97, 97, 97, 97, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 364 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 365 8, 9, 0, 2, 2, 2, 2, 2, 0, 0, 8, 9, 8, 9, 8, 9, 8, 9, 366 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 367 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 368 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 104, 8, 9, 8, 9, 8, 9, 8, 369 9, 8, 9, 8, 9, 8, 9, 105, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 370 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 371 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 372 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 373 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 374 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 0, 106, 106, 106, 375 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 376 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, 377 0, 5, 0, 0, 0, 0, 0, 0, 5, 107, 107, 107, 107, 107, 107, 107, 107, 107, 378 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 379 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 5, 5, 0, 0, 0, 0, 0, 380 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 381 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 382 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 0, 383 2, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 384 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 385 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 386 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 387 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 388 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 389 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 390 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 391 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 392 2, 2, 2, 2, 0, 0, 0, 0, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 393 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 394 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 395 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 396 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 397 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 398 5, 5, 0, 5, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 399 2, 5, 5, 2, 2, 0, 2, 2, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 400 2, 2, 2, 2, 5, 5, 5, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 401 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 402 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 403 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 404 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 5, 5, 5, 405 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 406 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 407 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 408 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 409 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 410 2, 2, 2, 2, 2, 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 411 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 412 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 413 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 414 2, 2, 5, 5, 0, 0, 0, 0, 5, 0, 0, 2, 0, 0, 5, 5, 5, 5, 415 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 416 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 417 5, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 418 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 419 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 0, 0, 420 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 421 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 422 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 423 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 424 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 425 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 426 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 427 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 428 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 429 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 430 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 431 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 432 5, 5, 5, 5, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 433 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 5, 5, 434 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 435 2, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 436 5, 5, 5, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 437 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 438 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 439 0, 0, 5, 5, 5, 5, 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 2, 0, 440 0, 2, 2, 0, 0, 2, 2, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 441 0, 0, 0, 0, 5, 5, 0, 5, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 442 2, 2, 2, 2, 2, 2, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443 5, 0, 2, 0, 0, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 444 0, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 445 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 446 5, 5, 0, 5, 5, 0, 5, 5, 0, 0, 2, 0, 2, 2, 2, 2, 2, 0, 447 0, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 0, 448 0, 0, 0, 5, 5, 5, 5, 0, 5, 0, 0, 0, 0, 0, 0, 0, 2, 2, 449 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 2, 0, 0, 0, 0, 450 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 451 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 452 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 453 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 2, 5, 2, 2, 2, 2, 454 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 5, 0, 0, 0, 455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 2, 2, 0, 0, 456 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 457 0, 5, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 5, 5, 5, 5, 5, 458 5, 5, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 459 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 460 5, 5, 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 2, 5, 2, 2, 461 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, 0, 462 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 5, 5, 0, 5, 5, 5, 2, 2, 463 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, 0, 0, 0, 0, 464 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 0, 5, 5, 5, 465 5, 5, 5, 0, 0, 0, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 466 5, 0, 5, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 0, 467 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 468 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, 469 5, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 471 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 5, 472 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 473 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 474 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 475 2, 5, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 2, 2, 476 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 5, 5, 5, 0, 5, 5, 0, 0, 477 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 478 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 479 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 5, 5, 480 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 481 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 482 0, 0, 2, 5, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2, 483 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 5, 5, 484 5, 0, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 485 0, 5, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 486 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 5, 5, 487 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 488 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 489 5, 5, 5, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 490 2, 2, 2, 2, 5, 0, 0, 0, 0, 0, 5, 5, 5, 2, 0, 0, 0, 0, 491 0, 0, 0, 5, 5, 5, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 492 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 493 0, 2, 2, 2, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 494 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 495 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 496 5, 5, 5, 5, 5, 5, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 497 0, 0, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 498 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 499 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 501 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 502 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 5, 503 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 504 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 505 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 506 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 507 0, 0, 0, 0, 0, 5, 5, 0, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 508 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 509 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 510 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 0, 0, 5, 5, 5, 5, 511 5, 0, 5, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 512 2, 2, 2, 2, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 513 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 515 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 516 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 517 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 2, 2, 5, 5, 518 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 519 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 520 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 5, 5, 522 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 523 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 525 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 526 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 527 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 528 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 529 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 530 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 532 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 533 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 5, 5, 5, 5, 2, 2, 2, 5, 534 2, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 2, 2, 2, 535 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 536 2, 2, 2, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 537 2, 2, 2, 2, 2, 2, 0, 0, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 538 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 539 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 0, 108, 0, 0, 0, 0, 0, 108, 540 0, 0, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 541 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 542 109, 109, 109, 109, 109, 109, 109, 109, 109, 0, 5, 109, 109, 109, 5, 5, 5, 5, 543 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 544 5, 0, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 545 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 546 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 547 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 548 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 549 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 550 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 551 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 552 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 553 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 554 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 555 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 556 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 557 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 558 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 2, 2, 2, 0, 0, 0, 0, 559 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 560 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 561 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 562 0, 0, 0, 0, 0, 0, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 563 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 564 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 565 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 566 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 90, 90, 90, 90, 567 90, 90, 0, 0, 95, 95, 95, 95, 95, 95, 0, 0, 0, 5, 5, 5, 5, 5, 568 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 569 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 570 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 571 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 572 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 573 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 574 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 5, 5, 5, 575 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 576 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 577 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 578 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 579 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 580 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 581 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 5, 5, 582 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 583 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 584 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 0, 0, 0, 585 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 586 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 587 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 588 5, 5, 5, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 589 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 590 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 591 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 592 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 593 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 5, 0, 0, 594 0, 0, 5, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 595 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 596 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 597 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5, 598 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 599 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 600 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 601 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 602 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 603 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 604 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 605 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 0, 0, 0, 0, 0, 5, 5, 606 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 607 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 608 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 609 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 610 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 611 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 612 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 613 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 614 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 615 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 616 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 617 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 618 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 619 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 620 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 621 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 2, 2, 622 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 624 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 625 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 626 2, 2, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 627 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 628 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 629 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 630 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 631 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 632 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 633 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 634 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 635 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 636 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 637 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 638 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 639 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 640 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 641 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 642 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 643 5, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 645 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 646 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 647 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 648 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 649 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 650 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 651 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 652 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 653 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 654 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 655 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 656 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 657 2, 2, 0, 0, 0, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 658 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 659 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 660 0, 0, 111, 112, 113, 114, 114, 115, 116, 117, 118, 8, 9, 0, 0, 0, 0, 0, 661 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 662 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 663 119, 119, 119, 119, 119, 119, 119, 0, 0, 119, 119, 119, 0, 0, 0, 0, 0, 0, 664 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 2, 665 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 666 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 2, 5, 5, 2, 2, 2, 5, 0, 667 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 668 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 669 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 670 5, 5, 5, 5, 5, 5, 5, 120, 5, 5, 5, 121, 5, 5, 5, 5, 5, 5, 671 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 122, 5, 5, 5, 5, 5, 5, 5, 672 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 673 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 674 5, 5, 5, 5, 5, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 675 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 676 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 677 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 678 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 679 8, 9, 5, 5, 5, 5, 5, 123, 5, 5, 124, 5, 8, 9, 8, 9, 8, 9, 680 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 681 8, 9, 8, 9, 8, 9, 8, 9, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 682 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 0, 0, 126, 126, 126, 126, 683 126, 126, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 684 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 685 125, 125, 125, 125, 125, 125, 0, 0, 126, 126, 126, 126, 126, 126, 0, 0, 5, 125, 686 5, 125, 5, 125, 5, 125, 0, 126, 0, 126, 0, 126, 0, 126, 125, 125, 125, 125, 687 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 128, 128, 128, 128, 688 129, 129, 130, 130, 131, 131, 132, 132, 0, 0, 125, 125, 125, 125, 125, 125, 125, 125, 689 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 690 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 691 126, 126, 126, 126, 125, 125, 5, 133, 5, 0, 5, 5, 126, 126, 134, 134, 135, 0, 692 136, 0, 0, 0, 5, 133, 5, 0, 5, 5, 137, 137, 137, 137, 135, 0, 0, 0, 693 125, 125, 5, 5, 0, 0, 5, 5, 126, 126, 138, 138, 0, 0, 0, 0, 125, 125, 694 5, 5, 5, 98, 5, 5, 126, 126, 139, 139, 102, 0, 0, 0, 0, 0, 5, 133, 695 5, 0, 5, 5, 140, 140, 141, 141, 135, 0, 0, 0, 1, 1, 1, 1, 1, 1, 696 1, 1, 1, 1, 1, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 697 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 698 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 699 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 700 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 701 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 702 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 703 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 704 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 705 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 706 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 707 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 708 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 709 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 710 5, 0, 0, 0, 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 711 0, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 5, 0, 712 142, 0, 5, 0, 143, 144, 5, 5, 5, 5, 5, 5, 145, 5, 5, 5, 5, 5, 713 5, 5, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 714 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 715 0, 0, 0, 0, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 716 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 717 5, 5, 5, 8, 9, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 718 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 719 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 720 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 721 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 722 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 724 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 725 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 726 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 727 0, 0, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 728 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 729 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 731 0, 0, 0, 0, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 732 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 733 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 734 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 735 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 736 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 8, 9, 151, 152, 153, 154, 155, 8, 737 9, 8, 9, 8, 9, 156, 157, 158, 159, 5, 8, 9, 5, 8, 9, 5, 5, 5, 738 5, 5, 5, 5, 160, 160, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 739 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 740 8, 9, 8, 9, 8, 9, 5, 0, 0, 0, 0, 0, 0, 8, 9, 8, 9, 2, 741 2, 2, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 161, 742 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 743 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 744 0, 161, 0, 0, 0, 0, 0, 161, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 745 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 746 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 747 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 748 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 749 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 750 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 751 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 752 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 753 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 754 5, 5, 5, 5, 5, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 755 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 756 2, 2, 1, 0, 0, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 757 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 758 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 0, 5, 5, 5, 759 5, 5, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 760 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 761 0, 2, 2, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 762 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 763 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 764 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 765 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 766 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 5, 5, 5, 5, 0, 0, 0, 0, 767 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 768 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 769 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 770 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 771 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 772 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 773 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 774 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, 0, 0, 0, 0, 0, 0, 0, 0, 776 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 777 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 778 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 782 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 783 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 784 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 785 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 786 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 787 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 788 0, 0, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 789 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 790 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 5, 2, 0, 0, 0, 0, 791 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 5, 8, 9, 8, 9, 8, 9, 792 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 793 8, 9, 8, 9, 5, 5, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 794 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 795 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 796 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 797 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 798 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 799 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 800 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 8, 9, 8, 9, 8, 9, 801 8, 9, 8, 9, 8, 9, 8, 9, 5, 5, 8, 9, 8, 9, 8, 9, 8, 9, 802 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 803 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 804 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 805 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 9, 8, 9, 162, 8, 9, 8, 9, 806 8, 9, 8, 9, 8, 9, 5, 0, 0, 8, 9, 163, 5, 5, 8, 9, 8, 9, 807 164, 5, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 808 8, 9, 8, 9, 165, 166, 167, 168, 165, 5, 169, 170, 171, 172, 8, 9, 8, 9, 809 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 173, 174, 175, 8, 9, 8, 810 9, 176, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 811 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 812 0, 0, 0, 5, 5, 5, 5, 8, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 813 5, 5, 2, 5, 5, 5, 2, 5, 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 814 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 815 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 817 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 818 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 819 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 820 0, 0, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 821 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 822 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 823 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 825 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 826 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 827 0, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 828 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 829 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 5, 5, 830 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 831 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 832 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 833 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 834 5, 5, 5, 0, 0, 0, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 835 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 836 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 837 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 838 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 2, 2, 2, 839 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 2, 840 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 841 2, 2, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 842 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 843 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 844 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 845 5, 5, 5, 2, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 0, 0, 2, 2, 846 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 847 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 848 5, 0, 0, 0, 5, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 849 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 850 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 851 5, 5, 5, 5, 2, 5, 2, 2, 2, 5, 5, 2, 2, 5, 5, 5, 5, 5, 852 2, 2, 5, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 853 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 0, 0, 5, 5, 854 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 0, 0, 5, 5, 855 5, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 856 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 857 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 858 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 859 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 860 5, 5, 5, 5, 5, 178, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 861 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 179, 179, 862 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 863 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 864 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 865 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 866 179, 179, 179, 179, 179, 179, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 867 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 868 5, 5, 5, 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 0, 869 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 5, 5, 870 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 871 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 872 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 873 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 874 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 875 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 876 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 877 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 878 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 879 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 880 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 881 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 882 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 883 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884 0, 0, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 885 0, 0, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5, 2, 5, 5, 5, 886 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 887 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 0, 5, 5, 0, 888 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 889 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 890 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 891 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 892 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 893 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 894 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 895 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 896 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 897 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 898 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 899 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 900 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 901 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 902 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 903 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 904 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 905 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 906 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 907 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 908 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 909 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 910 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 911 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 912 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 913 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 914 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 915 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 917 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 918 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 919 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 920 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 921 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 922 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 923 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 924 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 925 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 926 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 2, 0, 4, 4, 4, 927 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 928 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 5, 929 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 930 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 931 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 932 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 933 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 934 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 935 5, 5, 5, 5, 0, 0, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 936 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 937 0, 0, 0, 0, 0, 0, 0, 0, 938 }; 939 940 const FoldingInfo unicode::js_foldinfo[] = { 941 { 0 }, 942 { 32 }, 943 { 775 }, 944 { 1 }, 945 { 65415 }, 946 { 65268 }, 947 { 210 }, 948 { 206 }, 949 { 205 }, 950 { 79 }, 951 { 202 }, 952 { 203 }, 953 { 207 }, 954 { 211 }, 955 { 209 }, 956 { 213 }, 957 { 214 }, 958 { 218 }, 959 { 217 }, 960 { 219 }, 961 { 2 }, 962 { 65439 }, 963 { 65480 }, 964 { 65406 }, 965 { 10795 }, 966 { 65373 }, 967 { 10792 }, 968 { 65341 }, 969 { 69 }, 970 { 71 }, 971 { 116 }, 972 { 38 }, 973 { 37 }, 974 { 64 }, 975 { 63 }, 976 { 8 }, 977 { 65506 }, 978 { 65511 }, 979 { 65521 }, 980 { 65514 }, 981 { 65482 }, 982 { 65488 }, 983 { 65476 }, 984 { 65472 }, 985 { 65529 }, 986 { 80 }, 987 { 15 }, 988 { 48 }, 989 { 7264 }, 990 { 65528 }, 991 { 59314 }, 992 { 59315 }, 993 { 59324 }, 994 { 59326 }, 995 { 59325 }, 996 { 59332 }, 997 { 59356 }, 998 { 35267 }, 999 { 62528 }, 1000 { 65478 }, 1001 { 57921 }, 1002 { 65462 }, 1003 { 65527 }, 1004 { 58363 }, 1005 { 65450 }, 1006 { 58301 }, 1007 { 65436 }, 1008 { 58317 }, 1009 { 65424 }, 1010 { 65408 }, 1011 { 65410 }, 1012 { 58019 }, 1013 { 57153 }, 1014 { 57274 }, 1015 { 28 }, 1016 { 16 }, 1017 { 26 }, 1018 { 54793 }, 1019 { 61722 }, 1020 { 54809 }, 1021 { 54756 }, 1022 { 54787 }, 1023 { 54753 }, 1024 { 54754 }, 1025 { 54721 }, 1026 { 30204 }, 1027 { 23256 }, 1028 { 23228 }, 1029 { 23217 }, 1030 { 23221 }, 1031 { 23231 }, 1032 { 23278 }, 1033 { 23254 }, 1034 { 23275 }, 1035 { 928 }, 1036 { 23229 }, 1037 { 30152 }, 1038 { 23193 }, 1039 { 22975 }, 1040 { 26672 }, 1041 }; 1042 1043 const uint8_t unicode::folding_index1[] = { 1044 0, 0, 1, 0, 0, 2, 3, 0, 4, 5, 6, 7, 8, 9, 10, 11, 4, 12, 1045 13, 0, 0, 0, 0, 0, 0, 0, 14, 15, 16, 17, 18, 19, 20, 21, 0, 4, 1046 22, 4, 23, 4, 4, 24, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1047 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1048 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1049 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1050 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1051 0, 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1052 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 1053 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1054 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1055 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1056 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 0, 0, 0, 0, 1057 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 31, 4, 4, 4, 32, 33, 34, 35, 1058 33, 36, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 40, 41, 0, 1059 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1060 0, 0, 0, 0, 0, 42, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1061 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1062 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1063 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 46, 4, 4, 4, 47, 1064 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1065 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1066 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1068 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1069 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1072 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1073 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1075 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1076 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1077 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1078 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1079 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1080 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1081 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1082 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1083 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1084 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1085 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1086 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1087 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1088 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1089 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1090 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1091 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1092 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1093 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1094 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1095 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1096 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1097 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1099 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1101 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1102 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1103 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1104 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1105 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1107 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 48, 1118 49, 0, 0, 0, 0, 50, 4, 51, 52, 53, 54, 55, 0, 0, 0, 0, 0, 0, 1119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1120 0, 0, 0, 56, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1121 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1123 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1124 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1125 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1127 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1128 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1130 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1131 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1132 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1133 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1134 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1135 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1136 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1137 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1138 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1139 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1140 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1141 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1145 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1147 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1152 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1153 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1154 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1155 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 1156 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1157 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1158 }; 1159 1160 const uint8_t unicode::folding_index2[] = { 1161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1163 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1164 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1166 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1167 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1168 1, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1169 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1170 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 0, 1171 3, 0, 3, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1172 0, 3, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1173 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1174 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 4, 3, 0, 3, 1175 0, 3, 0, 5, 0, 6, 3, 0, 3, 0, 7, 3, 0, 8, 8, 3, 0, 0, 1176 9, 10, 11, 3, 0, 8, 12, 0, 13, 14, 3, 0, 0, 0, 13, 15, 0, 16, 1177 3, 0, 3, 0, 3, 0, 17, 3, 0, 17, 0, 0, 3, 0, 17, 3, 0, 18, 1178 18, 3, 0, 3, 0, 19, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1179 20, 3, 0, 20, 3, 0, 20, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 1180 0, 3, 0, 3, 0, 3, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1181 3, 0, 3, 0, 3, 0, 3, 0, 0, 20, 3, 0, 3, 0, 21, 22, 3, 0, 1182 3, 0, 3, 0, 3, 0, 23, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1183 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 24, 3, 0, 25, 1184 26, 0, 0, 3, 0, 27, 28, 29, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1185 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1186 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1187 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1188 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0, 1189 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 31, 0, 32, 32, 1190 32, 0, 33, 0, 34, 34, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1191 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1192 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1193 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 36, 37, 1194 0, 0, 0, 38, 39, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1195 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 40, 41, 0, 0, 42, 43, 1196 0, 3, 0, 44, 3, 0, 0, 23, 23, 23, 45, 45, 45, 45, 45, 45, 45, 45, 1197 45, 45, 45, 45, 45, 45, 45, 45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1198 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1199 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1200 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 1201 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 46, 3, 1202 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 3, 0, 3, 0, 1203 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1204 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 47, 47, 47, 47, 47, 47, 47, 1205 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1206 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, 1207 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 1208 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 1209 48, 48, 48, 48, 48, 48, 0, 48, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 1210 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1211 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1212 0, 0, 49, 49, 49, 49, 49, 49, 0, 0, 50, 51, 52, 53, 53, 54, 55, 56, 1213 57, 3, 0, 0, 0, 0, 0, 0, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1214 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 1215 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 0, 0, 58, 1216 58, 58, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1217 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 59, 0, 0, 60, 0, 0, 0, 1218 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 1219 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1220 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 1221 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 1222 49, 49, 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, 49, 1223 0, 49, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 1224 49, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1225 0, 0, 0, 0, 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, 49, 49, 0, 0, 1226 0, 0, 0, 0, 0, 0, 49, 49, 61, 61, 62, 0, 63, 0, 0, 0, 0, 0, 1227 0, 0, 0, 0, 64, 64, 64, 64, 62, 0, 0, 0, 0, 0, 0, 65, 0, 0, 1228 0, 0, 49, 49, 66, 66, 0, 0, 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, 1229 49, 49, 68, 68, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 69, 1230 70, 70, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 72, 73, 1231 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1232 0, 0, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 1233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1235 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1236 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 1237 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 1238 76, 76, 76, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1239 0, 0, 0, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1240 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 1241 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, 0, 1242 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 77, 78, 1243 79, 0, 0, 3, 0, 3, 0, 3, 0, 80, 81, 82, 83, 0, 3, 0, 0, 3, 1244 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, 3, 0, 3, 0, 0, 0, 0, 0, 1245 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1246 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1247 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1248 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1249 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1250 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 3, 0, 1251 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1252 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1253 0, 3, 0, 3, 0, 85, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 0, 0, 1254 0, 3, 0, 86, 0, 0, 3, 0, 3, 0, 0, 0, 3, 0, 3, 0, 3, 0, 1255 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 87, 88, 89, 90, 1256 87, 0, 91, 92, 93, 94, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 1257 3, 0, 3, 0, 41, 95, 96, 3, 0, 3, 0, 97, 3, 0, 3, 0, 3, 0, 1258 3, 0, 3, 0, 3, 0, 3, 0, 3, 0, 98, 0, 0, 0, 0, 0, 0, 0, 1259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1261 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 1262 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 1263 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 1264 99, 99, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1266 }; 1267 1268 bool 1269 js::unicode::IsIdentifierStartNonBMP(char32_t codePoint) 1270 { 1271 if (codePoint >= 0x10000 && codePoint <= 0x1000B) { // LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE 1272 return true; 1273 } 1274 if (codePoint >= 0x1000D && codePoint <= 0x10026) { // LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO 1275 return true; 1276 } 1277 if (codePoint >= 0x10028 && codePoint <= 0x1003A) { // LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO 1278 return true; 1279 } 1280 if (codePoint >= 0x1003C && codePoint <= 0x1003D) { // LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE 1281 return true; 1282 } 1283 if (codePoint >= 0x1003F && codePoint <= 0x1004D) { // LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO 1284 return true; 1285 } 1286 if (codePoint >= 0x10050 && codePoint <= 0x1005D) { // LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089 1287 return true; 1288 } 1289 if (codePoint >= 0x10080 && codePoint <= 0x100FA) { // LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305 1290 return true; 1291 } 1292 if (codePoint >= 0x10140 && codePoint <= 0x10174) { // GREEK ACROPHONIC ATTIC ONE QUARTER .. GREEK ACROPHONIC STRATIAN FIFTY MNAS 1293 return true; 1294 } 1295 if (codePoint >= 0x10280 && codePoint <= 0x1029C) { // LYCIAN LETTER A .. LYCIAN LETTER X 1296 return true; 1297 } 1298 if (codePoint >= 0x102A0 && codePoint <= 0x102D0) { // CARIAN LETTER A .. CARIAN LETTER UUU3 1299 return true; 1300 } 1301 if (codePoint >= 0x10300 && codePoint <= 0x1031F) { // OLD ITALIC LETTER A .. OLD ITALIC LETTER ESS 1302 return true; 1303 } 1304 if (codePoint >= 0x1032D && codePoint <= 0x1034A) { // OLD ITALIC LETTER YE .. GOTHIC LETTER NINE HUNDRED 1305 return true; 1306 } 1307 if (codePoint >= 0x10350 && codePoint <= 0x10375) { // OLD PERMIC LETTER AN .. OLD PERMIC LETTER IA 1308 return true; 1309 } 1310 if (codePoint >= 0x10380 && codePoint <= 0x1039D) { // UGARITIC LETTER ALPA .. UGARITIC LETTER SSU 1311 return true; 1312 } 1313 if (codePoint >= 0x103A0 && codePoint <= 0x103C3) { // OLD PERSIAN SIGN A .. OLD PERSIAN SIGN HA 1314 return true; 1315 } 1316 if (codePoint >= 0x103C8 && codePoint <= 0x103CF) { // OLD PERSIAN SIGN AURAMAZDAA .. OLD PERSIAN SIGN BUUMISH 1317 return true; 1318 } 1319 if (codePoint >= 0x103D1 && codePoint <= 0x103D5) { // OLD PERSIAN NUMBER ONE .. OLD PERSIAN NUMBER HUNDRED 1320 return true; 1321 } 1322 if (codePoint >= 0x10400 && codePoint <= 0x1049D) { // DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO 1323 return true; 1324 } 1325 if (codePoint >= 0x104B0 && codePoint <= 0x104D3) { // OSAGE CAPITAL LETTER A .. OSAGE CAPITAL LETTER ZHA 1326 return true; 1327 } 1328 if (codePoint >= 0x104D8 && codePoint <= 0x104FB) { // OSAGE SMALL LETTER A .. OSAGE SMALL LETTER ZHA 1329 return true; 1330 } 1331 if (codePoint >= 0x10500 && codePoint <= 0x10527) { // ELBASAN LETTER A .. ELBASAN LETTER KHE 1332 return true; 1333 } 1334 if (codePoint >= 0x10530 && codePoint <= 0x10563) { // CAUCASIAN ALBANIAN LETTER ALT .. CAUCASIAN ALBANIAN LETTER KIW 1335 return true; 1336 } 1337 if (codePoint >= 0x10570 && codePoint <= 0x1057A) { // VITHKUQI CAPITAL LETTER A .. VITHKUQI CAPITAL LETTER GA 1338 return true; 1339 } 1340 if (codePoint >= 0x1057C && codePoint <= 0x1058A) { // VITHKUQI CAPITAL LETTER HA .. VITHKUQI CAPITAL LETTER RE 1341 return true; 1342 } 1343 if (codePoint >= 0x1058C && codePoint <= 0x10592) { // VITHKUQI CAPITAL LETTER SE .. VITHKUQI CAPITAL LETTER XE 1344 return true; 1345 } 1346 if (codePoint >= 0x10594 && codePoint <= 0x10595) { // VITHKUQI CAPITAL LETTER Y .. VITHKUQI CAPITAL LETTER ZE 1347 return true; 1348 } 1349 if (codePoint >= 0x10597 && codePoint <= 0x105A1) { // VITHKUQI SMALL LETTER A .. VITHKUQI SMALL LETTER GA 1350 return true; 1351 } 1352 if (codePoint >= 0x105A3 && codePoint <= 0x105B1) { // VITHKUQI SMALL LETTER HA .. VITHKUQI SMALL LETTER RE 1353 return true; 1354 } 1355 if (codePoint >= 0x105B3 && codePoint <= 0x105B9) { // VITHKUQI SMALL LETTER SE .. VITHKUQI SMALL LETTER XE 1356 return true; 1357 } 1358 if (codePoint >= 0x105BB && codePoint <= 0x105BC) { // VITHKUQI SMALL LETTER Y .. VITHKUQI SMALL LETTER ZE 1359 return true; 1360 } 1361 if (codePoint >= 0x105C0 && codePoint <= 0x105F3) { // TODHRI LETTER A .. TODHRI LETTER OO 1362 return true; 1363 } 1364 if (codePoint >= 0x10600 && codePoint <= 0x10736) { // LINEAR A SIGN AB001 .. LINEAR A SIGN A664 1365 return true; 1366 } 1367 if (codePoint >= 0x10740 && codePoint <= 0x10755) { // LINEAR A SIGN A701 A .. LINEAR A SIGN A732 JE 1368 return true; 1369 } 1370 if (codePoint >= 0x10760 && codePoint <= 0x10767) { // LINEAR A SIGN A800 .. LINEAR A SIGN A807 1371 return true; 1372 } 1373 if (codePoint >= 0x10780 && codePoint <= 0x10785) { // MODIFIER LETTER SMALL CAPITAL AA .. MODIFIER LETTER SMALL B WITH HOOK 1374 return true; 1375 } 1376 if (codePoint >= 0x10787 && codePoint <= 0x107B0) { // MODIFIER LETTER SMALL DZ DIGRAPH .. MODIFIER LETTER SMALL V WITH RIGHT HOOK 1377 return true; 1378 } 1379 if (codePoint >= 0x107B2 && codePoint <= 0x107BA) { // MODIFIER LETTER SMALL CAPITAL Y .. MODIFIER LETTER SMALL S WITH CURL 1380 return true; 1381 } 1382 if (codePoint >= 0x10800 && codePoint <= 0x10805) { // CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA 1383 return true; 1384 } 1385 if (codePoint >= 0x10808 && codePoint <= 0x10808) { // CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO 1386 return true; 1387 } 1388 if (codePoint >= 0x1080A && codePoint <= 0x10835) { // CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO 1389 return true; 1390 } 1391 if (codePoint >= 0x10837 && codePoint <= 0x10838) { // CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE 1392 return true; 1393 } 1394 if (codePoint >= 0x1083C && codePoint <= 0x1083C) { // CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA 1395 return true; 1396 } 1397 if (codePoint >= 0x1083F && codePoint <= 0x10855) { // CYPRIOT SYLLABLE ZO .. IMPERIAL ARAMAIC LETTER TAW 1398 return true; 1399 } 1400 if (codePoint >= 0x10860 && codePoint <= 0x10876) { // PALMYRENE LETTER ALEPH .. PALMYRENE LETTER TAW 1401 return true; 1402 } 1403 if (codePoint >= 0x10880 && codePoint <= 0x1089E) { // NABATAEAN LETTER FINAL ALEPH .. NABATAEAN LETTER TAW 1404 return true; 1405 } 1406 if (codePoint >= 0x108E0 && codePoint <= 0x108F2) { // HATRAN LETTER ALEPH .. HATRAN LETTER QOPH 1407 return true; 1408 } 1409 if (codePoint >= 0x108F4 && codePoint <= 0x108F5) { // HATRAN LETTER SHIN .. HATRAN LETTER TAW 1410 return true; 1411 } 1412 if (codePoint >= 0x10900 && codePoint <= 0x10915) { // PHOENICIAN LETTER ALF .. PHOENICIAN LETTER TAU 1413 return true; 1414 } 1415 if (codePoint >= 0x10920 && codePoint <= 0x10939) { // LYDIAN LETTER A .. LYDIAN LETTER C 1416 return true; 1417 } 1418 if (codePoint >= 0x10940 && codePoint <= 0x10959) { // SIDETIC LETTER N01 .. SIDETIC LETTER N26 1419 return true; 1420 } 1421 if (codePoint >= 0x10980 && codePoint <= 0x109B7) { // MEROITIC HIEROGLYPHIC LETTER A .. MEROITIC CURSIVE LETTER DA 1422 return true; 1423 } 1424 if (codePoint >= 0x109BE && codePoint <= 0x109BF) { // MEROITIC CURSIVE LOGOGRAM RMT .. MEROITIC CURSIVE LOGOGRAM IMN 1425 return true; 1426 } 1427 if (codePoint >= 0x10A00 && codePoint <= 0x10A00) { // KHAROSHTHI LETTER A .. KHAROSHTHI LETTER A 1428 return true; 1429 } 1430 if (codePoint >= 0x10A10 && codePoint <= 0x10A13) { // KHAROSHTHI LETTER KA .. KHAROSHTHI LETTER GHA 1431 return true; 1432 } 1433 if (codePoint >= 0x10A15 && codePoint <= 0x10A17) { // KHAROSHTHI LETTER CA .. KHAROSHTHI LETTER JA 1434 return true; 1435 } 1436 if (codePoint >= 0x10A19 && codePoint <= 0x10A35) { // KHAROSHTHI LETTER NYA .. KHAROSHTHI LETTER VHA 1437 return true; 1438 } 1439 if (codePoint >= 0x10A60 && codePoint <= 0x10A7C) { // OLD SOUTH ARABIAN LETTER HE .. OLD SOUTH ARABIAN LETTER THETH 1440 return true; 1441 } 1442 if (codePoint >= 0x10A80 && codePoint <= 0x10A9C) { // OLD NORTH ARABIAN LETTER HEH .. OLD NORTH ARABIAN LETTER ZAH 1443 return true; 1444 } 1445 if (codePoint >= 0x10AC0 && codePoint <= 0x10AC7) { // MANICHAEAN LETTER ALEPH .. MANICHAEAN LETTER WAW 1446 return true; 1447 } 1448 if (codePoint >= 0x10AC9 && codePoint <= 0x10AE4) { // MANICHAEAN LETTER ZAYIN .. MANICHAEAN LETTER TAW 1449 return true; 1450 } 1451 if (codePoint >= 0x10B00 && codePoint <= 0x10B35) { // AVESTAN LETTER A .. AVESTAN LETTER HE 1452 return true; 1453 } 1454 if (codePoint >= 0x10B40 && codePoint <= 0x10B55) { // INSCRIPTIONAL PARTHIAN LETTER ALEPH .. INSCRIPTIONAL PARTHIAN LETTER TAW 1455 return true; 1456 } 1457 if (codePoint >= 0x10B60 && codePoint <= 0x10B72) { // INSCRIPTIONAL PAHLAVI LETTER ALEPH .. INSCRIPTIONAL PAHLAVI LETTER TAW 1458 return true; 1459 } 1460 if (codePoint >= 0x10B80 && codePoint <= 0x10B91) { // PSALTER PAHLAVI LETTER ALEPH .. PSALTER PAHLAVI LETTER TAW 1461 return true; 1462 } 1463 if (codePoint >= 0x10C00 && codePoint <= 0x10C48) { // OLD TURKIC LETTER ORKHON A .. OLD TURKIC LETTER ORKHON BASH 1464 return true; 1465 } 1466 if (codePoint >= 0x10C80 && codePoint <= 0x10CB2) { // OLD HUNGARIAN CAPITAL LETTER A .. OLD HUNGARIAN CAPITAL LETTER US 1467 return true; 1468 } 1469 if (codePoint >= 0x10CC0 && codePoint <= 0x10CF2) { // OLD HUNGARIAN SMALL LETTER A .. OLD HUNGARIAN SMALL LETTER US 1470 return true; 1471 } 1472 if (codePoint >= 0x10D00 && codePoint <= 0x10D23) { // HANIFI ROHINGYA LETTER A .. HANIFI ROHINGYA MARK NA KHONNA 1473 return true; 1474 } 1475 if (codePoint >= 0x10D4A && codePoint <= 0x10D65) { // GARAY VOWEL SIGN A .. GARAY CAPITAL LETTER OLD NA 1476 return true; 1477 } 1478 if (codePoint >= 0x10D6F && codePoint <= 0x10D85) { // GARAY REDUPLICATION MARK .. GARAY SMALL LETTER OLD NA 1479 return true; 1480 } 1481 if (codePoint >= 0x10E80 && codePoint <= 0x10EA9) { // YEZIDI LETTER ELIF .. YEZIDI LETTER ET 1482 return true; 1483 } 1484 if (codePoint >= 0x10EB0 && codePoint <= 0x10EB1) { // YEZIDI LETTER LAM WITH DOT ABOVE .. YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 1485 return true; 1486 } 1487 if (codePoint >= 0x10EC2 && codePoint <= 0x10EC7) { // ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW .. ARABIC LETTER YEH WITH FOUR DOTS BELOW 1488 return true; 1489 } 1490 if (codePoint >= 0x10F00 && codePoint <= 0x10F1C) { // OLD SOGDIAN LETTER ALEPH .. OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 1491 return true; 1492 } 1493 if (codePoint >= 0x10F27 && codePoint <= 0x10F27) { // OLD SOGDIAN LIGATURE AYIN-DALETH .. OLD SOGDIAN LIGATURE AYIN-DALETH 1494 return true; 1495 } 1496 if (codePoint >= 0x10F30 && codePoint <= 0x10F45) { // SOGDIAN LETTER ALEPH .. SOGDIAN INDEPENDENT SHIN 1497 return true; 1498 } 1499 if (codePoint >= 0x10F70 && codePoint <= 0x10F81) { // OLD UYGHUR LETTER ALEPH .. OLD UYGHUR LETTER LESH 1500 return true; 1501 } 1502 if (codePoint >= 0x10FB0 && codePoint <= 0x10FC4) { // CHORASMIAN LETTER ALEPH .. CHORASMIAN LETTER TAW 1503 return true; 1504 } 1505 if (codePoint >= 0x10FE0 && codePoint <= 0x10FF6) { // ELYMAIC LETTER ALEPH .. ELYMAIC LIGATURE ZAYIN-YODH 1506 return true; 1507 } 1508 if (codePoint >= 0x11003 && codePoint <= 0x11037) { // BRAHMI SIGN JIHVAMULIYA .. BRAHMI LETTER OLD TAMIL NNNA 1509 return true; 1510 } 1511 if (codePoint >= 0x11071 && codePoint <= 0x11072) { // BRAHMI LETTER OLD TAMIL SHORT E .. BRAHMI LETTER OLD TAMIL SHORT O 1512 return true; 1513 } 1514 if (codePoint >= 0x11075 && codePoint <= 0x11075) { // BRAHMI LETTER OLD TAMIL LLA .. BRAHMI LETTER OLD TAMIL LLA 1515 return true; 1516 } 1517 if (codePoint >= 0x11083 && codePoint <= 0x110AF) { // KAITHI LETTER A .. KAITHI LETTER HA 1518 return true; 1519 } 1520 if (codePoint >= 0x110D0 && codePoint <= 0x110E8) { // SORA SOMPENG LETTER SAH .. SORA SOMPENG LETTER MAE 1521 return true; 1522 } 1523 if (codePoint >= 0x11103 && codePoint <= 0x11126) { // CHAKMA LETTER AA .. CHAKMA LETTER HAA 1524 return true; 1525 } 1526 if (codePoint >= 0x11144 && codePoint <= 0x11144) { // CHAKMA LETTER LHAA .. CHAKMA LETTER LHAA 1527 return true; 1528 } 1529 if (codePoint >= 0x11147 && codePoint <= 0x11147) { // CHAKMA LETTER VAA .. CHAKMA LETTER VAA 1530 return true; 1531 } 1532 if (codePoint >= 0x11150 && codePoint <= 0x11172) { // MAHAJANI LETTER A .. MAHAJANI LETTER RRA 1533 return true; 1534 } 1535 if (codePoint >= 0x11176 && codePoint <= 0x11176) { // MAHAJANI LIGATURE SHRI .. MAHAJANI LIGATURE SHRI 1536 return true; 1537 } 1538 if (codePoint >= 0x11183 && codePoint <= 0x111B2) { // SHARADA LETTER A .. SHARADA LETTER HA 1539 return true; 1540 } 1541 if (codePoint >= 0x111C1 && codePoint <= 0x111C4) { // SHARADA SIGN AVAGRAHA .. SHARADA OM 1542 return true; 1543 } 1544 if (codePoint >= 0x111DA && codePoint <= 0x111DA) { // SHARADA EKAM .. SHARADA EKAM 1545 return true; 1546 } 1547 if (codePoint >= 0x111DC && codePoint <= 0x111DC) { // SHARADA HEADSTROKE .. SHARADA HEADSTROKE 1548 return true; 1549 } 1550 if (codePoint >= 0x11200 && codePoint <= 0x11211) { // KHOJKI LETTER A .. KHOJKI LETTER JJA 1551 return true; 1552 } 1553 if (codePoint >= 0x11213 && codePoint <= 0x1122B) { // KHOJKI LETTER NYA .. KHOJKI LETTER LLA 1554 return true; 1555 } 1556 if (codePoint >= 0x1123F && codePoint <= 0x11240) { // KHOJKI LETTER QA .. KHOJKI LETTER SHORT I 1557 return true; 1558 } 1559 if (codePoint >= 0x11280 && codePoint <= 0x11286) { // MULTANI LETTER A .. MULTANI LETTER GA 1560 return true; 1561 } 1562 if (codePoint >= 0x11288 && codePoint <= 0x11288) { // MULTANI LETTER GHA .. MULTANI LETTER GHA 1563 return true; 1564 } 1565 if (codePoint >= 0x1128A && codePoint <= 0x1128D) { // MULTANI LETTER CA .. MULTANI LETTER JJA 1566 return true; 1567 } 1568 if (codePoint >= 0x1128F && codePoint <= 0x1129D) { // MULTANI LETTER NYA .. MULTANI LETTER BA 1569 return true; 1570 } 1571 if (codePoint >= 0x1129F && codePoint <= 0x112A8) { // MULTANI LETTER BHA .. MULTANI LETTER RHA 1572 return true; 1573 } 1574 if (codePoint >= 0x112B0 && codePoint <= 0x112DE) { // KHUDAWADI LETTER A .. KHUDAWADI LETTER HA 1575 return true; 1576 } 1577 if (codePoint >= 0x11305 && codePoint <= 0x1130C) { // GRANTHA LETTER A .. GRANTHA LETTER VOCALIC L 1578 return true; 1579 } 1580 if (codePoint >= 0x1130F && codePoint <= 0x11310) { // GRANTHA LETTER EE .. GRANTHA LETTER AI 1581 return true; 1582 } 1583 if (codePoint >= 0x11313 && codePoint <= 0x11328) { // GRANTHA LETTER OO .. GRANTHA LETTER NA 1584 return true; 1585 } 1586 if (codePoint >= 0x1132A && codePoint <= 0x11330) { // GRANTHA LETTER PA .. GRANTHA LETTER RA 1587 return true; 1588 } 1589 if (codePoint >= 0x11332 && codePoint <= 0x11333) { // GRANTHA LETTER LA .. GRANTHA LETTER LLA 1590 return true; 1591 } 1592 if (codePoint >= 0x11335 && codePoint <= 0x11339) { // GRANTHA LETTER VA .. GRANTHA LETTER HA 1593 return true; 1594 } 1595 if (codePoint >= 0x1133D && codePoint <= 0x1133D) { // GRANTHA SIGN AVAGRAHA .. GRANTHA SIGN AVAGRAHA 1596 return true; 1597 } 1598 if (codePoint >= 0x11350 && codePoint <= 0x11350) { // GRANTHA OM .. GRANTHA OM 1599 return true; 1600 } 1601 if (codePoint >= 0x1135D && codePoint <= 0x11361) { // GRANTHA SIGN PLUTA .. GRANTHA LETTER VOCALIC LL 1602 return true; 1603 } 1604 if (codePoint >= 0x11380 && codePoint <= 0x11389) { // TULU-TIGALARI LETTER A .. TULU-TIGALARI LETTER VOCALIC LL 1605 return true; 1606 } 1607 if (codePoint >= 0x1138B && codePoint <= 0x1138B) { // TULU-TIGALARI LETTER EE .. TULU-TIGALARI LETTER EE 1608 return true; 1609 } 1610 if (codePoint >= 0x1138E && codePoint <= 0x1138E) { // TULU-TIGALARI LETTER AI .. TULU-TIGALARI LETTER AI 1611 return true; 1612 } 1613 if (codePoint >= 0x11390 && codePoint <= 0x113B5) { // TULU-TIGALARI LETTER OO .. TULU-TIGALARI LETTER LLLA 1614 return true; 1615 } 1616 if (codePoint >= 0x113B7 && codePoint <= 0x113B7) { // TULU-TIGALARI SIGN AVAGRAHA .. TULU-TIGALARI SIGN AVAGRAHA 1617 return true; 1618 } 1619 if (codePoint >= 0x113D1 && codePoint <= 0x113D1) { // TULU-TIGALARI REPHA .. TULU-TIGALARI REPHA 1620 return true; 1621 } 1622 if (codePoint >= 0x113D3 && codePoint <= 0x113D3) { // TULU-TIGALARI SIGN PLUTA .. TULU-TIGALARI SIGN PLUTA 1623 return true; 1624 } 1625 if (codePoint >= 0x11400 && codePoint <= 0x11434) { // NEWA LETTER A .. NEWA LETTER HA 1626 return true; 1627 } 1628 if (codePoint >= 0x11447 && codePoint <= 0x1144A) { // NEWA SIGN AVAGRAHA .. NEWA SIDDHI 1629 return true; 1630 } 1631 if (codePoint >= 0x1145F && codePoint <= 0x11461) { // NEWA LETTER VEDIC ANUSVARA .. NEWA SIGN UPADHMANIYA 1632 return true; 1633 } 1634 if (codePoint >= 0x11480 && codePoint <= 0x114AF) { // TIRHUTA ANJI .. TIRHUTA LETTER HA 1635 return true; 1636 } 1637 if (codePoint >= 0x114C4 && codePoint <= 0x114C5) { // TIRHUTA SIGN AVAGRAHA .. TIRHUTA GVANG 1638 return true; 1639 } 1640 if (codePoint >= 0x114C7 && codePoint <= 0x114C7) { // TIRHUTA OM .. TIRHUTA OM 1641 return true; 1642 } 1643 if (codePoint >= 0x11580 && codePoint <= 0x115AE) { // SIDDHAM LETTER A .. SIDDHAM LETTER HA 1644 return true; 1645 } 1646 if (codePoint >= 0x115D8 && codePoint <= 0x115DB) { // SIDDHAM LETTER THREE-CIRCLE ALTERNATE I .. SIDDHAM LETTER ALTERNATE U 1647 return true; 1648 } 1649 if (codePoint >= 0x11600 && codePoint <= 0x1162F) { // MODI LETTER A .. MODI LETTER LLA 1650 return true; 1651 } 1652 if (codePoint >= 0x11644 && codePoint <= 0x11644) { // MODI SIGN HUVA .. MODI SIGN HUVA 1653 return true; 1654 } 1655 if (codePoint >= 0x11680 && codePoint <= 0x116AA) { // TAKRI LETTER A .. TAKRI LETTER RRA 1656 return true; 1657 } 1658 if (codePoint >= 0x116B8 && codePoint <= 0x116B8) { // TAKRI LETTER ARCHAIC KHA .. TAKRI LETTER ARCHAIC KHA 1659 return true; 1660 } 1661 if (codePoint >= 0x11700 && codePoint <= 0x1171A) { // AHOM LETTER KA .. AHOM LETTER ALTERNATE BA 1662 return true; 1663 } 1664 if (codePoint >= 0x11740 && codePoint <= 0x11746) { // AHOM LETTER CA .. AHOM LETTER LLA 1665 return true; 1666 } 1667 if (codePoint >= 0x11800 && codePoint <= 0x1182B) { // DOGRA LETTER A .. DOGRA LETTER RRA 1668 return true; 1669 } 1670 if (codePoint >= 0x118A0 && codePoint <= 0x118DF) { // WARANG CITI CAPITAL LETTER NGAA .. WARANG CITI SMALL LETTER VIYO 1671 return true; 1672 } 1673 if (codePoint >= 0x118FF && codePoint <= 0x11906) { // WARANG CITI OM .. DIVES AKURU LETTER E 1674 return true; 1675 } 1676 if (codePoint >= 0x11909 && codePoint <= 0x11909) { // DIVES AKURU LETTER O .. DIVES AKURU LETTER O 1677 return true; 1678 } 1679 if (codePoint >= 0x1190C && codePoint <= 0x11913) { // DIVES AKURU LETTER KA .. DIVES AKURU LETTER JA 1680 return true; 1681 } 1682 if (codePoint >= 0x11915 && codePoint <= 0x11916) { // DIVES AKURU LETTER NYA .. DIVES AKURU LETTER TTA 1683 return true; 1684 } 1685 if (codePoint >= 0x11918 && codePoint <= 0x1192F) { // DIVES AKURU LETTER DDA .. DIVES AKURU LETTER ZA 1686 return true; 1687 } 1688 if (codePoint >= 0x1193F && codePoint <= 0x1193F) { // DIVES AKURU PREFIXED NASAL SIGN .. DIVES AKURU PREFIXED NASAL SIGN 1689 return true; 1690 } 1691 if (codePoint >= 0x11941 && codePoint <= 0x11941) { // DIVES AKURU INITIAL RA .. DIVES AKURU INITIAL RA 1692 return true; 1693 } 1694 if (codePoint >= 0x119A0 && codePoint <= 0x119A7) { // NANDINAGARI LETTER A .. NANDINAGARI LETTER VOCALIC RR 1695 return true; 1696 } 1697 if (codePoint >= 0x119AA && codePoint <= 0x119D0) { // NANDINAGARI LETTER E .. NANDINAGARI LETTER RRA 1698 return true; 1699 } 1700 if (codePoint >= 0x119E1 && codePoint <= 0x119E1) { // NANDINAGARI SIGN AVAGRAHA .. NANDINAGARI SIGN AVAGRAHA 1701 return true; 1702 } 1703 if (codePoint >= 0x119E3 && codePoint <= 0x119E3) { // NANDINAGARI HEADSTROKE .. NANDINAGARI HEADSTROKE 1704 return true; 1705 } 1706 if (codePoint >= 0x11A00 && codePoint <= 0x11A00) { // ZANABAZAR SQUARE LETTER A .. ZANABAZAR SQUARE LETTER A 1707 return true; 1708 } 1709 if (codePoint >= 0x11A0B && codePoint <= 0x11A32) { // ZANABAZAR SQUARE LETTER KA .. ZANABAZAR SQUARE LETTER KSSA 1710 return true; 1711 } 1712 if (codePoint >= 0x11A3A && codePoint <= 0x11A3A) { // ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA .. ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA 1713 return true; 1714 } 1715 if (codePoint >= 0x11A50 && codePoint <= 0x11A50) { // SOYOMBO LETTER A .. SOYOMBO LETTER A 1716 return true; 1717 } 1718 if (codePoint >= 0x11A5C && codePoint <= 0x11A89) { // SOYOMBO LETTER KA .. SOYOMBO CLUSTER-INITIAL LETTER SA 1719 return true; 1720 } 1721 if (codePoint >= 0x11A9D && codePoint <= 0x11A9D) { // SOYOMBO MARK PLUTA .. SOYOMBO MARK PLUTA 1722 return true; 1723 } 1724 if (codePoint >= 0x11AB0 && codePoint <= 0x11AF8) { // CANADIAN SYLLABICS NATTILIK HI .. PAU CIN HAU GLOTTAL STOP FINAL 1725 return true; 1726 } 1727 if (codePoint >= 0x11BC0 && codePoint <= 0x11BE0) { // SUNUWAR LETTER DEVI .. SUNUWAR LETTER KLOKO 1728 return true; 1729 } 1730 if (codePoint >= 0x11C00 && codePoint <= 0x11C08) { // BHAIKSUKI LETTER A .. BHAIKSUKI LETTER VOCALIC L 1731 return true; 1732 } 1733 if (codePoint >= 0x11C0A && codePoint <= 0x11C2E) { // BHAIKSUKI LETTER E .. BHAIKSUKI LETTER HA 1734 return true; 1735 } 1736 if (codePoint >= 0x11C40 && codePoint <= 0x11C40) { // BHAIKSUKI SIGN AVAGRAHA .. BHAIKSUKI SIGN AVAGRAHA 1737 return true; 1738 } 1739 if (codePoint >= 0x11C72 && codePoint <= 0x11C8F) { // MARCHEN LETTER KA .. MARCHEN LETTER A 1740 return true; 1741 } 1742 if (codePoint >= 0x11D00 && codePoint <= 0x11D06) { // MASARAM GONDI LETTER A .. MASARAM GONDI LETTER E 1743 return true; 1744 } 1745 if (codePoint >= 0x11D08 && codePoint <= 0x11D09) { // MASARAM GONDI LETTER AI .. MASARAM GONDI LETTER O 1746 return true; 1747 } 1748 if (codePoint >= 0x11D0B && codePoint <= 0x11D30) { // MASARAM GONDI LETTER AU .. MASARAM GONDI LETTER TRA 1749 return true; 1750 } 1751 if (codePoint >= 0x11D46 && codePoint <= 0x11D46) { // MASARAM GONDI REPHA .. MASARAM GONDI REPHA 1752 return true; 1753 } 1754 if (codePoint >= 0x11D60 && codePoint <= 0x11D65) { // GUNJALA GONDI LETTER A .. GUNJALA GONDI LETTER UU 1755 return true; 1756 } 1757 if (codePoint >= 0x11D67 && codePoint <= 0x11D68) { // GUNJALA GONDI LETTER EE .. GUNJALA GONDI LETTER AI 1758 return true; 1759 } 1760 if (codePoint >= 0x11D6A && codePoint <= 0x11D89) { // GUNJALA GONDI LETTER OO .. GUNJALA GONDI LETTER SA 1761 return true; 1762 } 1763 if (codePoint >= 0x11D98 && codePoint <= 0x11D98) { // GUNJALA GONDI OM .. GUNJALA GONDI OM 1764 return true; 1765 } 1766 if (codePoint >= 0x11DB0 && codePoint <= 0x11DDB) { // TOLONG SIKI LETTER I .. TOLONG SIKI UNGGA 1767 return true; 1768 } 1769 if (codePoint >= 0x11EE0 && codePoint <= 0x11EF2) { // MAKASAR LETTER KA .. MAKASAR ANGKA 1770 return true; 1771 } 1772 if (codePoint >= 0x11F02 && codePoint <= 0x11F02) { // KAWI SIGN REPHA .. KAWI SIGN REPHA 1773 return true; 1774 } 1775 if (codePoint >= 0x11F04 && codePoint <= 0x11F10) { // KAWI LETTER A .. KAWI LETTER O 1776 return true; 1777 } 1778 if (codePoint >= 0x11F12 && codePoint <= 0x11F33) { // KAWI LETTER KA .. KAWI LETTER JNYA 1779 return true; 1780 } 1781 if (codePoint >= 0x11FB0 && codePoint <= 0x11FB0) { // LISU LETTER YHA .. LISU LETTER YHA 1782 return true; 1783 } 1784 if (codePoint >= 0x12000 && codePoint <= 0x12399) { // CUNEIFORM SIGN A .. CUNEIFORM SIGN U U 1785 return true; 1786 } 1787 if (codePoint >= 0x12400 && codePoint <= 0x1246E) { // CUNEIFORM NUMERIC SIGN TWO ASH .. CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 1788 return true; 1789 } 1790 if (codePoint >= 0x12480 && codePoint <= 0x12543) { // CUNEIFORM SIGN AB TIMES NUN TENU .. CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU 1791 return true; 1792 } 1793 if (codePoint >= 0x12F90 && codePoint <= 0x12FF0) { // CYPRO-MINOAN SIGN CM001 .. CYPRO-MINOAN SIGN CM114 1794 return true; 1795 } 1796 if (codePoint >= 0x13000 && codePoint <= 0x1342F) { // EGYPTIAN HIEROGLYPH A001 .. EGYPTIAN HIEROGLYPH V011D 1797 return true; 1798 } 1799 if (codePoint >= 0x13441 && codePoint <= 0x13446) { // EGYPTIAN HIEROGLYPH FULL BLANK .. EGYPTIAN HIEROGLYPH WIDE LOST SIGN 1800 return true; 1801 } 1802 if (codePoint >= 0x13460 && codePoint <= 0x143FA) { // EGYPTIAN HIEROGLYPH-13460 .. EGYPTIAN HIEROGLYPH-143FA 1803 return true; 1804 } 1805 if (codePoint >= 0x14400 && codePoint <= 0x14646) { // ANATOLIAN HIEROGLYPH A001 .. ANATOLIAN HIEROGLYPH A530 1806 return true; 1807 } 1808 if (codePoint >= 0x16100 && codePoint <= 0x1611D) { // GURUNG KHEMA LETTER A .. GURUNG KHEMA LETTER SA 1809 return true; 1810 } 1811 if (codePoint >= 0x16800 && codePoint <= 0x16A38) { // BAMUM LETTER PHASE-A NGKUE MFON .. BAMUM LETTER PHASE-F VUEQ 1812 return true; 1813 } 1814 if (codePoint >= 0x16A40 && codePoint <= 0x16A5E) { // MRO LETTER TA .. MRO LETTER TEK 1815 return true; 1816 } 1817 if (codePoint >= 0x16A70 && codePoint <= 0x16ABE) { // TANGSA LETTER OZ .. TANGSA LETTER ZA 1818 return true; 1819 } 1820 if (codePoint >= 0x16AD0 && codePoint <= 0x16AED) { // BASSA VAH LETTER ENNI .. BASSA VAH LETTER I 1821 return true; 1822 } 1823 if (codePoint >= 0x16B00 && codePoint <= 0x16B2F) { // PAHAWH HMONG VOWEL KEEB .. PAHAWH HMONG CONSONANT CAU 1824 return true; 1825 } 1826 if (codePoint >= 0x16B40 && codePoint <= 0x16B43) { // PAHAWH HMONG SIGN VOS SEEV .. PAHAWH HMONG SIGN IB YAM 1827 return true; 1828 } 1829 if (codePoint >= 0x16B63 && codePoint <= 0x16B77) { // PAHAWH HMONG SIGN VOS LUB .. PAHAWH HMONG SIGN CIM NRES TOS 1830 return true; 1831 } 1832 if (codePoint >= 0x16B7D && codePoint <= 0x16B8F) { // PAHAWH HMONG CLAN SIGN TSHEEJ .. PAHAWH HMONG CLAN SIGN VWJ 1833 return true; 1834 } 1835 if (codePoint >= 0x16D40 && codePoint <= 0x16D6C) { // KIRAT RAI SIGN ANUSVARA .. KIRAT RAI SIGN SAAT 1836 return true; 1837 } 1838 if (codePoint >= 0x16E40 && codePoint <= 0x16E7F) { // MEDEFAIDRIN CAPITAL LETTER M .. MEDEFAIDRIN SMALL LETTER Y 1839 return true; 1840 } 1841 if (codePoint >= 0x16EA0 && codePoint <= 0x16EB8) { // BERIA ERFE CAPITAL LETTER ARKAB .. BERIA ERFE CAPITAL LETTER AY 1842 return true; 1843 } 1844 if (codePoint >= 0x16EBB && codePoint <= 0x16ED3) { // BERIA ERFE SMALL LETTER ARKAB .. BERIA ERFE SMALL LETTER AY 1845 return true; 1846 } 1847 if (codePoint >= 0x16F00 && codePoint <= 0x16F4A) { // MIAO LETTER PA .. MIAO LETTER RTE 1848 return true; 1849 } 1850 if (codePoint >= 0x16F50 && codePoint <= 0x16F50) { // MIAO LETTER NASALIZATION .. MIAO LETTER NASALIZATION 1851 return true; 1852 } 1853 if (codePoint >= 0x16F93 && codePoint <= 0x16F9F) { // MIAO LETTER TONE-2 .. MIAO LETTER REFORMED TONE-8 1854 return true; 1855 } 1856 if (codePoint >= 0x16FE0 && codePoint <= 0x16FE1) { // TANGUT ITERATION MARK .. NUSHU ITERATION MARK 1857 return true; 1858 } 1859 if (codePoint >= 0x16FE3 && codePoint <= 0x16FE3) { // OLD CHINESE ITERATION MARK .. OLD CHINESE ITERATION MARK 1860 return true; 1861 } 1862 if (codePoint >= 0x16FF2 && codePoint <= 0x16FF6) { // CHINESE SMALL SIMPLIFIED ER .. YANGQIN SIGN SLOW TWO BEATS 1863 return true; 1864 } 1865 if (codePoint >= 0x17000 && codePoint <= 0x18CD5) { // Tangut Ideograph .. KHITAN SMALL SCRIPT CHARACTER-18CD5 1866 return true; 1867 } 1868 if (codePoint >= 0x18CFF && codePoint <= 0x18D1E) { // KHITAN SMALL SCRIPT CHARACTER-18CFF .. Tangut Ideograph Supplement 1869 return true; 1870 } 1871 if (codePoint >= 0x18D80 && codePoint <= 0x18DF2) { // TANGUT COMPONENT-769 .. TANGUT COMPONENT-883 1872 return true; 1873 } 1874 if (codePoint >= 0x1AFF0 && codePoint <= 0x1AFF3) { // KATAKANA LETTER MINNAN TONE-2 .. KATAKANA LETTER MINNAN TONE-5 1875 return true; 1876 } 1877 if (codePoint >= 0x1AFF5 && codePoint <= 0x1AFFB) { // KATAKANA LETTER MINNAN TONE-7 .. KATAKANA LETTER MINNAN NASALIZED TONE-5 1878 return true; 1879 } 1880 if (codePoint >= 0x1AFFD && codePoint <= 0x1AFFE) { // KATAKANA LETTER MINNAN NASALIZED TONE-7 .. KATAKANA LETTER MINNAN NASALIZED TONE-8 1881 return true; 1882 } 1883 if (codePoint >= 0x1B000 && codePoint <= 0x1B122) { // KATAKANA LETTER ARCHAIC E .. KATAKANA LETTER ARCHAIC WU 1884 return true; 1885 } 1886 if (codePoint >= 0x1B132 && codePoint <= 0x1B132) { // HIRAGANA LETTER SMALL KO .. HIRAGANA LETTER SMALL KO 1887 return true; 1888 } 1889 if (codePoint >= 0x1B150 && codePoint <= 0x1B152) { // HIRAGANA LETTER SMALL WI .. HIRAGANA LETTER SMALL WO 1890 return true; 1891 } 1892 if (codePoint >= 0x1B155 && codePoint <= 0x1B155) { // KATAKANA LETTER SMALL KO .. KATAKANA LETTER SMALL KO 1893 return true; 1894 } 1895 if (codePoint >= 0x1B164 && codePoint <= 0x1B167) { // KATAKANA LETTER SMALL WI .. KATAKANA LETTER SMALL N 1896 return true; 1897 } 1898 if (codePoint >= 0x1B170 && codePoint <= 0x1B2FB) { // NUSHU CHARACTER-1B170 .. NUSHU CHARACTER-1B2FB 1899 return true; 1900 } 1901 if (codePoint >= 0x1BC00 && codePoint <= 0x1BC6A) { // DUPLOYAN LETTER H .. DUPLOYAN LETTER VOCALIC M 1902 return true; 1903 } 1904 if (codePoint >= 0x1BC70 && codePoint <= 0x1BC7C) { // DUPLOYAN AFFIX LEFT HORIZONTAL SECANT .. DUPLOYAN AFFIX ATTACHED TANGENT HOOK 1905 return true; 1906 } 1907 if (codePoint >= 0x1BC80 && codePoint <= 0x1BC88) { // DUPLOYAN AFFIX HIGH ACUTE .. DUPLOYAN AFFIX HIGH VERTICAL 1908 return true; 1909 } 1910 if (codePoint >= 0x1BC90 && codePoint <= 0x1BC99) { // DUPLOYAN AFFIX LOW ACUTE .. DUPLOYAN AFFIX LOW ARROW 1911 return true; 1912 } 1913 if (codePoint >= 0x1D400 && codePoint <= 0x1D454) { // MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G 1914 return true; 1915 } 1916 if (codePoint >= 0x1D456 && codePoint <= 0x1D49C) { // MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A 1917 return true; 1918 } 1919 if (codePoint >= 0x1D49E && codePoint <= 0x1D49F) { // MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D 1920 return true; 1921 } 1922 if (codePoint >= 0x1D4A2 && codePoint <= 0x1D4A2) { // MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G 1923 return true; 1924 } 1925 if (codePoint >= 0x1D4A5 && codePoint <= 0x1D4A6) { // MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K 1926 return true; 1927 } 1928 if (codePoint >= 0x1D4A9 && codePoint <= 0x1D4AC) { // MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q 1929 return true; 1930 } 1931 if (codePoint >= 0x1D4AE && codePoint <= 0x1D4B9) { // MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D 1932 return true; 1933 } 1934 if (codePoint >= 0x1D4BB && codePoint <= 0x1D4BB) { // MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F 1935 return true; 1936 } 1937 if (codePoint >= 0x1D4BD && codePoint <= 0x1D4C3) { // MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N 1938 return true; 1939 } 1940 if (codePoint >= 0x1D4C5 && codePoint <= 0x1D505) { // MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B 1941 return true; 1942 } 1943 if (codePoint >= 0x1D507 && codePoint <= 0x1D50A) { // MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G 1944 return true; 1945 } 1946 if (codePoint >= 0x1D50D && codePoint <= 0x1D514) { // MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q 1947 return true; 1948 } 1949 if (codePoint >= 0x1D516 && codePoint <= 0x1D51C) { // MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y 1950 return true; 1951 } 1952 if (codePoint >= 0x1D51E && codePoint <= 0x1D539) { // MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B 1953 return true; 1954 } 1955 if (codePoint >= 0x1D53B && codePoint <= 0x1D53E) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G 1956 return true; 1957 } 1958 if (codePoint >= 0x1D540 && codePoint <= 0x1D544) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M 1959 return true; 1960 } 1961 if (codePoint >= 0x1D546 && codePoint <= 0x1D546) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O 1962 return true; 1963 } 1964 if (codePoint >= 0x1D54A && codePoint <= 0x1D550) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y 1965 return true; 1966 } 1967 if (codePoint >= 0x1D552 && codePoint <= 0x1D6A5) { // MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL ITALIC SMALL DOTLESS J 1968 return true; 1969 } 1970 if (codePoint >= 0x1D6A8 && codePoint <= 0x1D6C0) { // MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA 1971 return true; 1972 } 1973 if (codePoint >= 0x1D6C2 && codePoint <= 0x1D6DA) { // MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA 1974 return true; 1975 } 1976 if (codePoint >= 0x1D6DC && codePoint <= 0x1D6FA) { // MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA 1977 return true; 1978 } 1979 if (codePoint >= 0x1D6FC && codePoint <= 0x1D714) { // MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA 1980 return true; 1981 } 1982 if (codePoint >= 0x1D716 && codePoint <= 0x1D734) { // MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 1983 return true; 1984 } 1985 if (codePoint >= 0x1D736 && codePoint <= 0x1D74E) { // MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA 1986 return true; 1987 } 1988 if (codePoint >= 0x1D750 && codePoint <= 0x1D76E) { // MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA 1989 return true; 1990 } 1991 if (codePoint >= 0x1D770 && codePoint <= 0x1D788) { // MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA 1992 return true; 1993 } 1994 if (codePoint >= 0x1D78A && codePoint <= 0x1D7A8) { // MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1995 return true; 1996 } 1997 if (codePoint >= 0x1D7AA && codePoint <= 0x1D7C2) { // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1998 return true; 1999 } 2000 if (codePoint >= 0x1D7C4 && codePoint <= 0x1D7CB) { // MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD SMALL DIGAMMA 2001 return true; 2002 } 2003 if (codePoint >= 0x1DF00 && codePoint <= 0x1DF1E) { // LATIN SMALL LETTER FENG DIGRAPH WITH TRILL .. LATIN SMALL LETTER S WITH CURL 2004 return true; 2005 } 2006 if (codePoint >= 0x1DF25 && codePoint <= 0x1DF2A) { // LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK .. LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK 2007 return true; 2008 } 2009 if (codePoint >= 0x1E030 && codePoint <= 0x1E06D) { // MODIFIER LETTER CYRILLIC SMALL A .. MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 2010 return true; 2011 } 2012 if (codePoint >= 0x1E100 && codePoint <= 0x1E12C) { // NYIAKENG PUACHUE HMONG LETTER MA .. NYIAKENG PUACHUE HMONG LETTER W 2013 return true; 2014 } 2015 if (codePoint >= 0x1E137 && codePoint <= 0x1E13D) { // NYIAKENG PUACHUE HMONG SIGN FOR PERSON .. NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 2016 return true; 2017 } 2018 if (codePoint >= 0x1E14E && codePoint <= 0x1E14E) { // NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ .. NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 2019 return true; 2020 } 2021 if (codePoint >= 0x1E290 && codePoint <= 0x1E2AD) { // TOTO LETTER PA .. TOTO LETTER A 2022 return true; 2023 } 2024 if (codePoint >= 0x1E2C0 && codePoint <= 0x1E2EB) { // WANCHO LETTER AA .. WANCHO LETTER YIH 2025 return true; 2026 } 2027 if (codePoint >= 0x1E4D0 && codePoint <= 0x1E4EB) { // NAG MUNDARI LETTER O .. NAG MUNDARI SIGN OJOD 2028 return true; 2029 } 2030 if (codePoint >= 0x1E5D0 && codePoint <= 0x1E5ED) { // OL ONAL LETTER O .. OL ONAL LETTER EG 2031 return true; 2032 } 2033 if (codePoint >= 0x1E5F0 && codePoint <= 0x1E5F0) { // OL ONAL SIGN HODDOND .. OL ONAL SIGN HODDOND 2034 return true; 2035 } 2036 if (codePoint >= 0x1E6C0 && codePoint <= 0x1E6DE) { // TAI YO LETTER LOW KO .. TAI YO LETTER HIGH KVO 2037 return true; 2038 } 2039 if (codePoint >= 0x1E6E0 && codePoint <= 0x1E6E2) { // TAI YO LETTER AA .. TAI YO LETTER UE 2040 return true; 2041 } 2042 if (codePoint >= 0x1E6E4 && codePoint <= 0x1E6E5) { // TAI YO LETTER U .. TAI YO LETTER AE 2043 return true; 2044 } 2045 if (codePoint >= 0x1E6E7 && codePoint <= 0x1E6ED) { // TAI YO LETTER O .. TAI YO LETTER AUE 2046 return true; 2047 } 2048 if (codePoint >= 0x1E6F0 && codePoint <= 0x1E6F4) { // TAI YO LETTER AN .. TAI YO LETTER AP 2049 return true; 2050 } 2051 if (codePoint >= 0x1E6FE && codePoint <= 0x1E6FF) { // TAI YO SYMBOL MUEANG .. TAI YO XAM LAI 2052 return true; 2053 } 2054 if (codePoint >= 0x1E7E0 && codePoint <= 0x1E7E6) { // ETHIOPIC SYLLABLE HHYA .. ETHIOPIC SYLLABLE HHYO 2055 return true; 2056 } 2057 if (codePoint >= 0x1E7E8 && codePoint <= 0x1E7EB) { // ETHIOPIC SYLLABLE GURAGE HHWA .. ETHIOPIC SYLLABLE HHWE 2058 return true; 2059 } 2060 if (codePoint >= 0x1E7ED && codePoint <= 0x1E7EE) { // ETHIOPIC SYLLABLE GURAGE MWI .. ETHIOPIC SYLLABLE GURAGE MWEE 2061 return true; 2062 } 2063 if (codePoint >= 0x1E7F0 && codePoint <= 0x1E7FE) { // ETHIOPIC SYLLABLE GURAGE QWI .. ETHIOPIC SYLLABLE GURAGE PWEE 2064 return true; 2065 } 2066 if (codePoint >= 0x1E800 && codePoint <= 0x1E8C4) { // MENDE KIKAKUI SYLLABLE M001 KI .. MENDE KIKAKUI SYLLABLE M060 NYON 2067 return true; 2068 } 2069 if (codePoint >= 0x1E900 && codePoint <= 0x1E943) { // ADLAM CAPITAL LETTER ALIF .. ADLAM SMALL LETTER SHA 2070 return true; 2071 } 2072 if (codePoint >= 0x1E94B && codePoint <= 0x1E94B) { // ADLAM NASALIZATION MARK .. ADLAM NASALIZATION MARK 2073 return true; 2074 } 2075 if (codePoint >= 0x1EE00 && codePoint <= 0x1EE03) { // ARABIC MATHEMATICAL ALEF .. ARABIC MATHEMATICAL DAL 2076 return true; 2077 } 2078 if (codePoint >= 0x1EE05 && codePoint <= 0x1EE1F) { // ARABIC MATHEMATICAL WAW .. ARABIC MATHEMATICAL DOTLESS QAF 2079 return true; 2080 } 2081 if (codePoint >= 0x1EE21 && codePoint <= 0x1EE22) { // ARABIC MATHEMATICAL INITIAL BEH .. ARABIC MATHEMATICAL INITIAL JEEM 2082 return true; 2083 } 2084 if (codePoint >= 0x1EE24 && codePoint <= 0x1EE24) { // ARABIC MATHEMATICAL INITIAL HEH .. ARABIC MATHEMATICAL INITIAL HEH 2085 return true; 2086 } 2087 if (codePoint >= 0x1EE27 && codePoint <= 0x1EE27) { // ARABIC MATHEMATICAL INITIAL HAH .. ARABIC MATHEMATICAL INITIAL HAH 2088 return true; 2089 } 2090 if (codePoint >= 0x1EE29 && codePoint <= 0x1EE32) { // ARABIC MATHEMATICAL INITIAL YEH .. ARABIC MATHEMATICAL INITIAL QAF 2091 return true; 2092 } 2093 if (codePoint >= 0x1EE34 && codePoint <= 0x1EE37) { // ARABIC MATHEMATICAL INITIAL SHEEN .. ARABIC MATHEMATICAL INITIAL KHAH 2094 return true; 2095 } 2096 if (codePoint >= 0x1EE39 && codePoint <= 0x1EE39) { // ARABIC MATHEMATICAL INITIAL DAD .. ARABIC MATHEMATICAL INITIAL DAD 2097 return true; 2098 } 2099 if (codePoint >= 0x1EE3B && codePoint <= 0x1EE3B) { // ARABIC MATHEMATICAL INITIAL GHAIN .. ARABIC MATHEMATICAL INITIAL GHAIN 2100 return true; 2101 } 2102 if (codePoint >= 0x1EE42 && codePoint <= 0x1EE42) { // ARABIC MATHEMATICAL TAILED JEEM .. ARABIC MATHEMATICAL TAILED JEEM 2103 return true; 2104 } 2105 if (codePoint >= 0x1EE47 && codePoint <= 0x1EE47) { // ARABIC MATHEMATICAL TAILED HAH .. ARABIC MATHEMATICAL TAILED HAH 2106 return true; 2107 } 2108 if (codePoint >= 0x1EE49 && codePoint <= 0x1EE49) { // ARABIC MATHEMATICAL TAILED YEH .. ARABIC MATHEMATICAL TAILED YEH 2109 return true; 2110 } 2111 if (codePoint >= 0x1EE4B && codePoint <= 0x1EE4B) { // ARABIC MATHEMATICAL TAILED LAM .. ARABIC MATHEMATICAL TAILED LAM 2112 return true; 2113 } 2114 if (codePoint >= 0x1EE4D && codePoint <= 0x1EE4F) { // ARABIC MATHEMATICAL TAILED NOON .. ARABIC MATHEMATICAL TAILED AIN 2115 return true; 2116 } 2117 if (codePoint >= 0x1EE51 && codePoint <= 0x1EE52) { // ARABIC MATHEMATICAL TAILED SAD .. ARABIC MATHEMATICAL TAILED QAF 2118 return true; 2119 } 2120 if (codePoint >= 0x1EE54 && codePoint <= 0x1EE54) { // ARABIC MATHEMATICAL TAILED SHEEN .. ARABIC MATHEMATICAL TAILED SHEEN 2121 return true; 2122 } 2123 if (codePoint >= 0x1EE57 && codePoint <= 0x1EE57) { // ARABIC MATHEMATICAL TAILED KHAH .. ARABIC MATHEMATICAL TAILED KHAH 2124 return true; 2125 } 2126 if (codePoint >= 0x1EE59 && codePoint <= 0x1EE59) { // ARABIC MATHEMATICAL TAILED DAD .. ARABIC MATHEMATICAL TAILED DAD 2127 return true; 2128 } 2129 if (codePoint >= 0x1EE5B && codePoint <= 0x1EE5B) { // ARABIC MATHEMATICAL TAILED GHAIN .. ARABIC MATHEMATICAL TAILED GHAIN 2130 return true; 2131 } 2132 if (codePoint >= 0x1EE5D && codePoint <= 0x1EE5D) { // ARABIC MATHEMATICAL TAILED DOTLESS NOON .. ARABIC MATHEMATICAL TAILED DOTLESS NOON 2133 return true; 2134 } 2135 if (codePoint >= 0x1EE5F && codePoint <= 0x1EE5F) { // ARABIC MATHEMATICAL TAILED DOTLESS QAF .. ARABIC MATHEMATICAL TAILED DOTLESS QAF 2136 return true; 2137 } 2138 if (codePoint >= 0x1EE61 && codePoint <= 0x1EE62) { // ARABIC MATHEMATICAL STRETCHED BEH .. ARABIC MATHEMATICAL STRETCHED JEEM 2139 return true; 2140 } 2141 if (codePoint >= 0x1EE64 && codePoint <= 0x1EE64) { // ARABIC MATHEMATICAL STRETCHED HEH .. ARABIC MATHEMATICAL STRETCHED HEH 2142 return true; 2143 } 2144 if (codePoint >= 0x1EE67 && codePoint <= 0x1EE6A) { // ARABIC MATHEMATICAL STRETCHED HAH .. ARABIC MATHEMATICAL STRETCHED KAF 2145 return true; 2146 } 2147 if (codePoint >= 0x1EE6C && codePoint <= 0x1EE72) { // ARABIC MATHEMATICAL STRETCHED MEEM .. ARABIC MATHEMATICAL STRETCHED QAF 2148 return true; 2149 } 2150 if (codePoint >= 0x1EE74 && codePoint <= 0x1EE77) { // ARABIC MATHEMATICAL STRETCHED SHEEN .. ARABIC MATHEMATICAL STRETCHED KHAH 2151 return true; 2152 } 2153 if (codePoint >= 0x1EE79 && codePoint <= 0x1EE7C) { // ARABIC MATHEMATICAL STRETCHED DAD .. ARABIC MATHEMATICAL STRETCHED DOTLESS BEH 2154 return true; 2155 } 2156 if (codePoint >= 0x1EE7E && codePoint <= 0x1EE7E) { // ARABIC MATHEMATICAL STRETCHED DOTLESS FEH .. ARABIC MATHEMATICAL STRETCHED DOTLESS FEH 2157 return true; 2158 } 2159 if (codePoint >= 0x1EE80 && codePoint <= 0x1EE89) { // ARABIC MATHEMATICAL LOOPED ALEF .. ARABIC MATHEMATICAL LOOPED YEH 2160 return true; 2161 } 2162 if (codePoint >= 0x1EE8B && codePoint <= 0x1EE9B) { // ARABIC MATHEMATICAL LOOPED LAM .. ARABIC MATHEMATICAL LOOPED GHAIN 2163 return true; 2164 } 2165 if (codePoint >= 0x1EEA1 && codePoint <= 0x1EEA3) { // ARABIC MATHEMATICAL DOUBLE-STRUCK BEH .. ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 2166 return true; 2167 } 2168 if (codePoint >= 0x1EEA5 && codePoint <= 0x1EEA9) { // ARABIC MATHEMATICAL DOUBLE-STRUCK WAW .. ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 2169 return true; 2170 } 2171 if (codePoint >= 0x1EEAB && codePoint <= 0x1EEBB) { // ARABIC MATHEMATICAL DOUBLE-STRUCK LAM .. ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 2172 return true; 2173 } 2174 if (codePoint >= 0x20000 && codePoint <= 0x2A6DF) { // CJK Ideograph Extension B .. CJK Ideograph Extension B 2175 return true; 2176 } 2177 if (codePoint >= 0x2A700 && codePoint <= 0x2B81D) { // CJK Ideograph Extension C .. CJK Ideograph Extension D 2178 return true; 2179 } 2180 if (codePoint >= 0x2B820 && codePoint <= 0x2CEAD) { // CJK Ideograph Extension E .. CJK Ideograph Extension E 2181 return true; 2182 } 2183 if (codePoint >= 0x2CEB0 && codePoint <= 0x2EBE0) { // CJK Ideograph Extension F .. CJK Ideograph Extension F 2184 return true; 2185 } 2186 if (codePoint >= 0x2EBF0 && codePoint <= 0x2EE5D) { // CJK Ideograph Extension I .. CJK Ideograph Extension I 2187 return true; 2188 } 2189 if (codePoint >= 0x2F800 && codePoint <= 0x2FA1D) { // CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D 2190 return true; 2191 } 2192 if (codePoint >= 0x30000 && codePoint <= 0x3134A) { // CJK Ideograph Extension G .. CJK Ideograph Extension G 2193 return true; 2194 } 2195 if (codePoint >= 0x31350 && codePoint <= 0x33479) { // CJK Ideograph Extension H .. CJK Ideograph Extension J 2196 return true; 2197 } 2198 return false; 2199 } 2200 2201 bool 2202 js::unicode::IsIdentifierPartNonBMP(char32_t codePoint) 2203 { 2204 if (codePoint >= 0x10000 && codePoint <= 0x1000B) { // LINEAR B SYLLABLE B008 A .. LINEAR B SYLLABLE B046 JE 2205 return true; 2206 } 2207 if (codePoint >= 0x1000D && codePoint <= 0x10026) { // LINEAR B SYLLABLE B036 JO .. LINEAR B SYLLABLE B032 QO 2208 return true; 2209 } 2210 if (codePoint >= 0x10028 && codePoint <= 0x1003A) { // LINEAR B SYLLABLE B060 RA .. LINEAR B SYLLABLE B042 WO 2211 return true; 2212 } 2213 if (codePoint >= 0x1003C && codePoint <= 0x1003D) { // LINEAR B SYLLABLE B017 ZA .. LINEAR B SYLLABLE B074 ZE 2214 return true; 2215 } 2216 if (codePoint >= 0x1003F && codePoint <= 0x1004D) { // LINEAR B SYLLABLE B020 ZO .. LINEAR B SYLLABLE B091 TWO 2217 return true; 2218 } 2219 if (codePoint >= 0x10050 && codePoint <= 0x1005D) { // LINEAR B SYMBOL B018 .. LINEAR B SYMBOL B089 2220 return true; 2221 } 2222 if (codePoint >= 0x10080 && codePoint <= 0x100FA) { // LINEAR B IDEOGRAM B100 MAN .. LINEAR B IDEOGRAM VESSEL B305 2223 return true; 2224 } 2225 if (codePoint >= 0x10140 && codePoint <= 0x10174) { // GREEK ACROPHONIC ATTIC ONE QUARTER .. GREEK ACROPHONIC STRATIAN FIFTY MNAS 2226 return true; 2227 } 2228 if (codePoint >= 0x101FD && codePoint <= 0x101FD) { // PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE .. PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE 2229 return true; 2230 } 2231 if (codePoint >= 0x10280 && codePoint <= 0x1029C) { // LYCIAN LETTER A .. LYCIAN LETTER X 2232 return true; 2233 } 2234 if (codePoint >= 0x102A0 && codePoint <= 0x102D0) { // CARIAN LETTER A .. CARIAN LETTER UUU3 2235 return true; 2236 } 2237 if (codePoint >= 0x102E0 && codePoint <= 0x102E0) { // COPTIC EPACT THOUSANDS MARK .. COPTIC EPACT THOUSANDS MARK 2238 return true; 2239 } 2240 if (codePoint >= 0x10300 && codePoint <= 0x1031F) { // OLD ITALIC LETTER A .. OLD ITALIC LETTER ESS 2241 return true; 2242 } 2243 if (codePoint >= 0x1032D && codePoint <= 0x1034A) { // OLD ITALIC LETTER YE .. GOTHIC LETTER NINE HUNDRED 2244 return true; 2245 } 2246 if (codePoint >= 0x10350 && codePoint <= 0x1037A) { // OLD PERMIC LETTER AN .. COMBINING OLD PERMIC LETTER SII 2247 return true; 2248 } 2249 if (codePoint >= 0x10380 && codePoint <= 0x1039D) { // UGARITIC LETTER ALPA .. UGARITIC LETTER SSU 2250 return true; 2251 } 2252 if (codePoint >= 0x103A0 && codePoint <= 0x103C3) { // OLD PERSIAN SIGN A .. OLD PERSIAN SIGN HA 2253 return true; 2254 } 2255 if (codePoint >= 0x103C8 && codePoint <= 0x103CF) { // OLD PERSIAN SIGN AURAMAZDAA .. OLD PERSIAN SIGN BUUMISH 2256 return true; 2257 } 2258 if (codePoint >= 0x103D1 && codePoint <= 0x103D5) { // OLD PERSIAN NUMBER ONE .. OLD PERSIAN NUMBER HUNDRED 2259 return true; 2260 } 2261 if (codePoint >= 0x10400 && codePoint <= 0x1049D) { // DESERET CAPITAL LETTER LONG I .. OSMANYA LETTER OO 2262 return true; 2263 } 2264 if (codePoint >= 0x104A0 && codePoint <= 0x104A9) { // OSMANYA DIGIT ZERO .. OSMANYA DIGIT NINE 2265 return true; 2266 } 2267 if (codePoint >= 0x104B0 && codePoint <= 0x104D3) { // OSAGE CAPITAL LETTER A .. OSAGE CAPITAL LETTER ZHA 2268 return true; 2269 } 2270 if (codePoint >= 0x104D8 && codePoint <= 0x104FB) { // OSAGE SMALL LETTER A .. OSAGE SMALL LETTER ZHA 2271 return true; 2272 } 2273 if (codePoint >= 0x10500 && codePoint <= 0x10527) { // ELBASAN LETTER A .. ELBASAN LETTER KHE 2274 return true; 2275 } 2276 if (codePoint >= 0x10530 && codePoint <= 0x10563) { // CAUCASIAN ALBANIAN LETTER ALT .. CAUCASIAN ALBANIAN LETTER KIW 2277 return true; 2278 } 2279 if (codePoint >= 0x10570 && codePoint <= 0x1057A) { // VITHKUQI CAPITAL LETTER A .. VITHKUQI CAPITAL LETTER GA 2280 return true; 2281 } 2282 if (codePoint >= 0x1057C && codePoint <= 0x1058A) { // VITHKUQI CAPITAL LETTER HA .. VITHKUQI CAPITAL LETTER RE 2283 return true; 2284 } 2285 if (codePoint >= 0x1058C && codePoint <= 0x10592) { // VITHKUQI CAPITAL LETTER SE .. VITHKUQI CAPITAL LETTER XE 2286 return true; 2287 } 2288 if (codePoint >= 0x10594 && codePoint <= 0x10595) { // VITHKUQI CAPITAL LETTER Y .. VITHKUQI CAPITAL LETTER ZE 2289 return true; 2290 } 2291 if (codePoint >= 0x10597 && codePoint <= 0x105A1) { // VITHKUQI SMALL LETTER A .. VITHKUQI SMALL LETTER GA 2292 return true; 2293 } 2294 if (codePoint >= 0x105A3 && codePoint <= 0x105B1) { // VITHKUQI SMALL LETTER HA .. VITHKUQI SMALL LETTER RE 2295 return true; 2296 } 2297 if (codePoint >= 0x105B3 && codePoint <= 0x105B9) { // VITHKUQI SMALL LETTER SE .. VITHKUQI SMALL LETTER XE 2298 return true; 2299 } 2300 if (codePoint >= 0x105BB && codePoint <= 0x105BC) { // VITHKUQI SMALL LETTER Y .. VITHKUQI SMALL LETTER ZE 2301 return true; 2302 } 2303 if (codePoint >= 0x105C0 && codePoint <= 0x105F3) { // TODHRI LETTER A .. TODHRI LETTER OO 2304 return true; 2305 } 2306 if (codePoint >= 0x10600 && codePoint <= 0x10736) { // LINEAR A SIGN AB001 .. LINEAR A SIGN A664 2307 return true; 2308 } 2309 if (codePoint >= 0x10740 && codePoint <= 0x10755) { // LINEAR A SIGN A701 A .. LINEAR A SIGN A732 JE 2310 return true; 2311 } 2312 if (codePoint >= 0x10760 && codePoint <= 0x10767) { // LINEAR A SIGN A800 .. LINEAR A SIGN A807 2313 return true; 2314 } 2315 if (codePoint >= 0x10780 && codePoint <= 0x10785) { // MODIFIER LETTER SMALL CAPITAL AA .. MODIFIER LETTER SMALL B WITH HOOK 2316 return true; 2317 } 2318 if (codePoint >= 0x10787 && codePoint <= 0x107B0) { // MODIFIER LETTER SMALL DZ DIGRAPH .. MODIFIER LETTER SMALL V WITH RIGHT HOOK 2319 return true; 2320 } 2321 if (codePoint >= 0x107B2 && codePoint <= 0x107BA) { // MODIFIER LETTER SMALL CAPITAL Y .. MODIFIER LETTER SMALL S WITH CURL 2322 return true; 2323 } 2324 if (codePoint >= 0x10800 && codePoint <= 0x10805) { // CYPRIOT SYLLABLE A .. CYPRIOT SYLLABLE JA 2325 return true; 2326 } 2327 if (codePoint >= 0x10808 && codePoint <= 0x10808) { // CYPRIOT SYLLABLE JO .. CYPRIOT SYLLABLE JO 2328 return true; 2329 } 2330 if (codePoint >= 0x1080A && codePoint <= 0x10835) { // CYPRIOT SYLLABLE KA .. CYPRIOT SYLLABLE WO 2331 return true; 2332 } 2333 if (codePoint >= 0x10837 && codePoint <= 0x10838) { // CYPRIOT SYLLABLE XA .. CYPRIOT SYLLABLE XE 2334 return true; 2335 } 2336 if (codePoint >= 0x1083C && codePoint <= 0x1083C) { // CYPRIOT SYLLABLE ZA .. CYPRIOT SYLLABLE ZA 2337 return true; 2338 } 2339 if (codePoint >= 0x1083F && codePoint <= 0x10855) { // CYPRIOT SYLLABLE ZO .. IMPERIAL ARAMAIC LETTER TAW 2340 return true; 2341 } 2342 if (codePoint >= 0x10860 && codePoint <= 0x10876) { // PALMYRENE LETTER ALEPH .. PALMYRENE LETTER TAW 2343 return true; 2344 } 2345 if (codePoint >= 0x10880 && codePoint <= 0x1089E) { // NABATAEAN LETTER FINAL ALEPH .. NABATAEAN LETTER TAW 2346 return true; 2347 } 2348 if (codePoint >= 0x108E0 && codePoint <= 0x108F2) { // HATRAN LETTER ALEPH .. HATRAN LETTER QOPH 2349 return true; 2350 } 2351 if (codePoint >= 0x108F4 && codePoint <= 0x108F5) { // HATRAN LETTER SHIN .. HATRAN LETTER TAW 2352 return true; 2353 } 2354 if (codePoint >= 0x10900 && codePoint <= 0x10915) { // PHOENICIAN LETTER ALF .. PHOENICIAN LETTER TAU 2355 return true; 2356 } 2357 if (codePoint >= 0x10920 && codePoint <= 0x10939) { // LYDIAN LETTER A .. LYDIAN LETTER C 2358 return true; 2359 } 2360 if (codePoint >= 0x10940 && codePoint <= 0x10959) { // SIDETIC LETTER N01 .. SIDETIC LETTER N26 2361 return true; 2362 } 2363 if (codePoint >= 0x10980 && codePoint <= 0x109B7) { // MEROITIC HIEROGLYPHIC LETTER A .. MEROITIC CURSIVE LETTER DA 2364 return true; 2365 } 2366 if (codePoint >= 0x109BE && codePoint <= 0x109BF) { // MEROITIC CURSIVE LOGOGRAM RMT .. MEROITIC CURSIVE LOGOGRAM IMN 2367 return true; 2368 } 2369 if (codePoint >= 0x10A00 && codePoint <= 0x10A03) { // KHAROSHTHI LETTER A .. KHAROSHTHI VOWEL SIGN VOCALIC R 2370 return true; 2371 } 2372 if (codePoint >= 0x10A05 && codePoint <= 0x10A06) { // KHAROSHTHI VOWEL SIGN E .. KHAROSHTHI VOWEL SIGN O 2373 return true; 2374 } 2375 if (codePoint >= 0x10A0C && codePoint <= 0x10A13) { // KHAROSHTHI VOWEL LENGTH MARK .. KHAROSHTHI LETTER GHA 2376 return true; 2377 } 2378 if (codePoint >= 0x10A15 && codePoint <= 0x10A17) { // KHAROSHTHI LETTER CA .. KHAROSHTHI LETTER JA 2379 return true; 2380 } 2381 if (codePoint >= 0x10A19 && codePoint <= 0x10A35) { // KHAROSHTHI LETTER NYA .. KHAROSHTHI LETTER VHA 2382 return true; 2383 } 2384 if (codePoint >= 0x10A38 && codePoint <= 0x10A3A) { // KHAROSHTHI SIGN BAR ABOVE .. KHAROSHTHI SIGN DOT BELOW 2385 return true; 2386 } 2387 if (codePoint >= 0x10A3F && codePoint <= 0x10A3F) { // KHAROSHTHI VIRAMA .. KHAROSHTHI VIRAMA 2388 return true; 2389 } 2390 if (codePoint >= 0x10A60 && codePoint <= 0x10A7C) { // OLD SOUTH ARABIAN LETTER HE .. OLD SOUTH ARABIAN LETTER THETH 2391 return true; 2392 } 2393 if (codePoint >= 0x10A80 && codePoint <= 0x10A9C) { // OLD NORTH ARABIAN LETTER HEH .. OLD NORTH ARABIAN LETTER ZAH 2394 return true; 2395 } 2396 if (codePoint >= 0x10AC0 && codePoint <= 0x10AC7) { // MANICHAEAN LETTER ALEPH .. MANICHAEAN LETTER WAW 2397 return true; 2398 } 2399 if (codePoint >= 0x10AC9 && codePoint <= 0x10AE6) { // MANICHAEAN LETTER ZAYIN .. MANICHAEAN ABBREVIATION MARK BELOW 2400 return true; 2401 } 2402 if (codePoint >= 0x10B00 && codePoint <= 0x10B35) { // AVESTAN LETTER A .. AVESTAN LETTER HE 2403 return true; 2404 } 2405 if (codePoint >= 0x10B40 && codePoint <= 0x10B55) { // INSCRIPTIONAL PARTHIAN LETTER ALEPH .. INSCRIPTIONAL PARTHIAN LETTER TAW 2406 return true; 2407 } 2408 if (codePoint >= 0x10B60 && codePoint <= 0x10B72) { // INSCRIPTIONAL PAHLAVI LETTER ALEPH .. INSCRIPTIONAL PAHLAVI LETTER TAW 2409 return true; 2410 } 2411 if (codePoint >= 0x10B80 && codePoint <= 0x10B91) { // PSALTER PAHLAVI LETTER ALEPH .. PSALTER PAHLAVI LETTER TAW 2412 return true; 2413 } 2414 if (codePoint >= 0x10C00 && codePoint <= 0x10C48) { // OLD TURKIC LETTER ORKHON A .. OLD TURKIC LETTER ORKHON BASH 2415 return true; 2416 } 2417 if (codePoint >= 0x10C80 && codePoint <= 0x10CB2) { // OLD HUNGARIAN CAPITAL LETTER A .. OLD HUNGARIAN CAPITAL LETTER US 2418 return true; 2419 } 2420 if (codePoint >= 0x10CC0 && codePoint <= 0x10CF2) { // OLD HUNGARIAN SMALL LETTER A .. OLD HUNGARIAN SMALL LETTER US 2421 return true; 2422 } 2423 if (codePoint >= 0x10D00 && codePoint <= 0x10D27) { // HANIFI ROHINGYA LETTER A .. HANIFI ROHINGYA SIGN TASSI 2424 return true; 2425 } 2426 if (codePoint >= 0x10D30 && codePoint <= 0x10D39) { // HANIFI ROHINGYA DIGIT ZERO .. HANIFI ROHINGYA DIGIT NINE 2427 return true; 2428 } 2429 if (codePoint >= 0x10D40 && codePoint <= 0x10D65) { // GARAY DIGIT ZERO .. GARAY CAPITAL LETTER OLD NA 2430 return true; 2431 } 2432 if (codePoint >= 0x10D69 && codePoint <= 0x10D6D) { // GARAY VOWEL SIGN E .. GARAY CONSONANT NASALIZATION MARK 2433 return true; 2434 } 2435 if (codePoint >= 0x10D6F && codePoint <= 0x10D85) { // GARAY REDUPLICATION MARK .. GARAY SMALL LETTER OLD NA 2436 return true; 2437 } 2438 if (codePoint >= 0x10E80 && codePoint <= 0x10EA9) { // YEZIDI LETTER ELIF .. YEZIDI LETTER ET 2439 return true; 2440 } 2441 if (codePoint >= 0x10EAB && codePoint <= 0x10EAC) { // YEZIDI COMBINING HAMZA MARK .. YEZIDI COMBINING MADDA MARK 2442 return true; 2443 } 2444 if (codePoint >= 0x10EB0 && codePoint <= 0x10EB1) { // YEZIDI LETTER LAM WITH DOT ABOVE .. YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE 2445 return true; 2446 } 2447 if (codePoint >= 0x10EC2 && codePoint <= 0x10EC7) { // ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW .. ARABIC LETTER YEH WITH FOUR DOTS BELOW 2448 return true; 2449 } 2450 if (codePoint >= 0x10EFA && codePoint <= 0x10F1C) { // ARABIC DOUBLE VERTICAL BAR BELOW .. OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 2451 return true; 2452 } 2453 if (codePoint >= 0x10F27 && codePoint <= 0x10F27) { // OLD SOGDIAN LIGATURE AYIN-DALETH .. OLD SOGDIAN LIGATURE AYIN-DALETH 2454 return true; 2455 } 2456 if (codePoint >= 0x10F30 && codePoint <= 0x10F50) { // SOGDIAN LETTER ALEPH .. SOGDIAN COMBINING STROKE BELOW 2457 return true; 2458 } 2459 if (codePoint >= 0x10F70 && codePoint <= 0x10F85) { // OLD UYGHUR LETTER ALEPH .. OLD UYGHUR COMBINING TWO DOTS BELOW 2460 return true; 2461 } 2462 if (codePoint >= 0x10FB0 && codePoint <= 0x10FC4) { // CHORASMIAN LETTER ALEPH .. CHORASMIAN LETTER TAW 2463 return true; 2464 } 2465 if (codePoint >= 0x10FE0 && codePoint <= 0x10FF6) { // ELYMAIC LETTER ALEPH .. ELYMAIC LIGATURE ZAYIN-YODH 2466 return true; 2467 } 2468 if (codePoint >= 0x11000 && codePoint <= 0x11046) { // BRAHMI SIGN CANDRABINDU .. BRAHMI VIRAMA 2469 return true; 2470 } 2471 if (codePoint >= 0x11066 && codePoint <= 0x11075) { // BRAHMI DIGIT ZERO .. BRAHMI LETTER OLD TAMIL LLA 2472 return true; 2473 } 2474 if (codePoint >= 0x1107F && codePoint <= 0x110BA) { // BRAHMI NUMBER JOINER .. KAITHI SIGN NUKTA 2475 return true; 2476 } 2477 if (codePoint >= 0x110C2 && codePoint <= 0x110C2) { // KAITHI VOWEL SIGN VOCALIC R .. KAITHI VOWEL SIGN VOCALIC R 2478 return true; 2479 } 2480 if (codePoint >= 0x110D0 && codePoint <= 0x110E8) { // SORA SOMPENG LETTER SAH .. SORA SOMPENG LETTER MAE 2481 return true; 2482 } 2483 if (codePoint >= 0x110F0 && codePoint <= 0x110F9) { // SORA SOMPENG DIGIT ZERO .. SORA SOMPENG DIGIT NINE 2484 return true; 2485 } 2486 if (codePoint >= 0x11100 && codePoint <= 0x11134) { // CHAKMA SIGN CANDRABINDU .. CHAKMA MAAYYAA 2487 return true; 2488 } 2489 if (codePoint >= 0x11136 && codePoint <= 0x1113F) { // CHAKMA DIGIT ZERO .. CHAKMA DIGIT NINE 2490 return true; 2491 } 2492 if (codePoint >= 0x11144 && codePoint <= 0x11147) { // CHAKMA LETTER LHAA .. CHAKMA LETTER VAA 2493 return true; 2494 } 2495 if (codePoint >= 0x11150 && codePoint <= 0x11173) { // MAHAJANI LETTER A .. MAHAJANI SIGN NUKTA 2496 return true; 2497 } 2498 if (codePoint >= 0x11176 && codePoint <= 0x11176) { // MAHAJANI LIGATURE SHRI .. MAHAJANI LIGATURE SHRI 2499 return true; 2500 } 2501 if (codePoint >= 0x11180 && codePoint <= 0x111C4) { // SHARADA SIGN CANDRABINDU .. SHARADA OM 2502 return true; 2503 } 2504 if (codePoint >= 0x111C9 && codePoint <= 0x111CC) { // SHARADA SANDHI MARK .. SHARADA EXTRA SHORT VOWEL MARK 2505 return true; 2506 } 2507 if (codePoint >= 0x111CE && codePoint <= 0x111DA) { // SHARADA VOWEL SIGN PRISHTHAMATRA E .. SHARADA EKAM 2508 return true; 2509 } 2510 if (codePoint >= 0x111DC && codePoint <= 0x111DC) { // SHARADA HEADSTROKE .. SHARADA HEADSTROKE 2511 return true; 2512 } 2513 if (codePoint >= 0x11200 && codePoint <= 0x11211) { // KHOJKI LETTER A .. KHOJKI LETTER JJA 2514 return true; 2515 } 2516 if (codePoint >= 0x11213 && codePoint <= 0x11237) { // KHOJKI LETTER NYA .. KHOJKI SIGN SHADDA 2517 return true; 2518 } 2519 if (codePoint >= 0x1123E && codePoint <= 0x11241) { // KHOJKI SIGN SUKUN .. KHOJKI VOWEL SIGN VOCALIC R 2520 return true; 2521 } 2522 if (codePoint >= 0x11280 && codePoint <= 0x11286) { // MULTANI LETTER A .. MULTANI LETTER GA 2523 return true; 2524 } 2525 if (codePoint >= 0x11288 && codePoint <= 0x11288) { // MULTANI LETTER GHA .. MULTANI LETTER GHA 2526 return true; 2527 } 2528 if (codePoint >= 0x1128A && codePoint <= 0x1128D) { // MULTANI LETTER CA .. MULTANI LETTER JJA 2529 return true; 2530 } 2531 if (codePoint >= 0x1128F && codePoint <= 0x1129D) { // MULTANI LETTER NYA .. MULTANI LETTER BA 2532 return true; 2533 } 2534 if (codePoint >= 0x1129F && codePoint <= 0x112A8) { // MULTANI LETTER BHA .. MULTANI LETTER RHA 2535 return true; 2536 } 2537 if (codePoint >= 0x112B0 && codePoint <= 0x112EA) { // KHUDAWADI LETTER A .. KHUDAWADI SIGN VIRAMA 2538 return true; 2539 } 2540 if (codePoint >= 0x112F0 && codePoint <= 0x112F9) { // KHUDAWADI DIGIT ZERO .. KHUDAWADI DIGIT NINE 2541 return true; 2542 } 2543 if (codePoint >= 0x11300 && codePoint <= 0x11303) { // GRANTHA SIGN COMBINING ANUSVARA ABOVE .. GRANTHA SIGN VISARGA 2544 return true; 2545 } 2546 if (codePoint >= 0x11305 && codePoint <= 0x1130C) { // GRANTHA LETTER A .. GRANTHA LETTER VOCALIC L 2547 return true; 2548 } 2549 if (codePoint >= 0x1130F && codePoint <= 0x11310) { // GRANTHA LETTER EE .. GRANTHA LETTER AI 2550 return true; 2551 } 2552 if (codePoint >= 0x11313 && codePoint <= 0x11328) { // GRANTHA LETTER OO .. GRANTHA LETTER NA 2553 return true; 2554 } 2555 if (codePoint >= 0x1132A && codePoint <= 0x11330) { // GRANTHA LETTER PA .. GRANTHA LETTER RA 2556 return true; 2557 } 2558 if (codePoint >= 0x11332 && codePoint <= 0x11333) { // GRANTHA LETTER LA .. GRANTHA LETTER LLA 2559 return true; 2560 } 2561 if (codePoint >= 0x11335 && codePoint <= 0x11339) { // GRANTHA LETTER VA .. GRANTHA LETTER HA 2562 return true; 2563 } 2564 if (codePoint >= 0x1133B && codePoint <= 0x11344) { // COMBINING BINDU BELOW .. GRANTHA VOWEL SIGN VOCALIC RR 2565 return true; 2566 } 2567 if (codePoint >= 0x11347 && codePoint <= 0x11348) { // GRANTHA VOWEL SIGN EE .. GRANTHA VOWEL SIGN AI 2568 return true; 2569 } 2570 if (codePoint >= 0x1134B && codePoint <= 0x1134D) { // GRANTHA VOWEL SIGN OO .. GRANTHA SIGN VIRAMA 2571 return true; 2572 } 2573 if (codePoint >= 0x11350 && codePoint <= 0x11350) { // GRANTHA OM .. GRANTHA OM 2574 return true; 2575 } 2576 if (codePoint >= 0x11357 && codePoint <= 0x11357) { // GRANTHA AU LENGTH MARK .. GRANTHA AU LENGTH MARK 2577 return true; 2578 } 2579 if (codePoint >= 0x1135D && codePoint <= 0x11363) { // GRANTHA SIGN PLUTA .. GRANTHA VOWEL SIGN VOCALIC LL 2580 return true; 2581 } 2582 if (codePoint >= 0x11366 && codePoint <= 0x1136C) { // COMBINING GRANTHA DIGIT ZERO .. COMBINING GRANTHA DIGIT SIX 2583 return true; 2584 } 2585 if (codePoint >= 0x11370 && codePoint <= 0x11374) { // COMBINING GRANTHA LETTER A .. COMBINING GRANTHA LETTER PA 2586 return true; 2587 } 2588 if (codePoint >= 0x11380 && codePoint <= 0x11389) { // TULU-TIGALARI LETTER A .. TULU-TIGALARI LETTER VOCALIC LL 2589 return true; 2590 } 2591 if (codePoint >= 0x1138B && codePoint <= 0x1138B) { // TULU-TIGALARI LETTER EE .. TULU-TIGALARI LETTER EE 2592 return true; 2593 } 2594 if (codePoint >= 0x1138E && codePoint <= 0x1138E) { // TULU-TIGALARI LETTER AI .. TULU-TIGALARI LETTER AI 2595 return true; 2596 } 2597 if (codePoint >= 0x11390 && codePoint <= 0x113B5) { // TULU-TIGALARI LETTER OO .. TULU-TIGALARI LETTER LLLA 2598 return true; 2599 } 2600 if (codePoint >= 0x113B7 && codePoint <= 0x113C0) { // TULU-TIGALARI SIGN AVAGRAHA .. TULU-TIGALARI VOWEL SIGN VOCALIC LL 2601 return true; 2602 } 2603 if (codePoint >= 0x113C2 && codePoint <= 0x113C2) { // TULU-TIGALARI VOWEL SIGN EE .. TULU-TIGALARI VOWEL SIGN EE 2604 return true; 2605 } 2606 if (codePoint >= 0x113C5 && codePoint <= 0x113C5) { // TULU-TIGALARI VOWEL SIGN AI .. TULU-TIGALARI VOWEL SIGN AI 2607 return true; 2608 } 2609 if (codePoint >= 0x113C7 && codePoint <= 0x113CA) { // TULU-TIGALARI VOWEL SIGN OO .. TULU-TIGALARI SIGN CANDRA ANUNASIKA 2610 return true; 2611 } 2612 if (codePoint >= 0x113CC && codePoint <= 0x113D3) { // TULU-TIGALARI SIGN ANUSVARA .. TULU-TIGALARI SIGN PLUTA 2613 return true; 2614 } 2615 if (codePoint >= 0x113E1 && codePoint <= 0x113E2) { // TULU-TIGALARI VEDIC TONE SVARITA .. TULU-TIGALARI VEDIC TONE ANUDATTA 2616 return true; 2617 } 2618 if (codePoint >= 0x11400 && codePoint <= 0x1144A) { // NEWA LETTER A .. NEWA SIDDHI 2619 return true; 2620 } 2621 if (codePoint >= 0x11450 && codePoint <= 0x11459) { // NEWA DIGIT ZERO .. NEWA DIGIT NINE 2622 return true; 2623 } 2624 if (codePoint >= 0x1145E && codePoint <= 0x11461) { // NEWA SANDHI MARK .. NEWA SIGN UPADHMANIYA 2625 return true; 2626 } 2627 if (codePoint >= 0x11480 && codePoint <= 0x114C5) { // TIRHUTA ANJI .. TIRHUTA GVANG 2628 return true; 2629 } 2630 if (codePoint >= 0x114C7 && codePoint <= 0x114C7) { // TIRHUTA OM .. TIRHUTA OM 2631 return true; 2632 } 2633 if (codePoint >= 0x114D0 && codePoint <= 0x114D9) { // TIRHUTA DIGIT ZERO .. TIRHUTA DIGIT NINE 2634 return true; 2635 } 2636 if (codePoint >= 0x11580 && codePoint <= 0x115B5) { // SIDDHAM LETTER A .. SIDDHAM VOWEL SIGN VOCALIC RR 2637 return true; 2638 } 2639 if (codePoint >= 0x115B8 && codePoint <= 0x115C0) { // SIDDHAM VOWEL SIGN E .. SIDDHAM SIGN NUKTA 2640 return true; 2641 } 2642 if (codePoint >= 0x115D8 && codePoint <= 0x115DD) { // SIDDHAM LETTER THREE-CIRCLE ALTERNATE I .. SIDDHAM VOWEL SIGN ALTERNATE UU 2643 return true; 2644 } 2645 if (codePoint >= 0x11600 && codePoint <= 0x11640) { // MODI LETTER A .. MODI SIGN ARDHACANDRA 2646 return true; 2647 } 2648 if (codePoint >= 0x11644 && codePoint <= 0x11644) { // MODI SIGN HUVA .. MODI SIGN HUVA 2649 return true; 2650 } 2651 if (codePoint >= 0x11650 && codePoint <= 0x11659) { // MODI DIGIT ZERO .. MODI DIGIT NINE 2652 return true; 2653 } 2654 if (codePoint >= 0x11680 && codePoint <= 0x116B8) { // TAKRI LETTER A .. TAKRI LETTER ARCHAIC KHA 2655 return true; 2656 } 2657 if (codePoint >= 0x116C0 && codePoint <= 0x116C9) { // TAKRI DIGIT ZERO .. TAKRI DIGIT NINE 2658 return true; 2659 } 2660 if (codePoint >= 0x116D0 && codePoint <= 0x116E3) { // MYANMAR PAO DIGIT ZERO .. MYANMAR EASTERN PWO KAREN DIGIT NINE 2661 return true; 2662 } 2663 if (codePoint >= 0x11700 && codePoint <= 0x1171A) { // AHOM LETTER KA .. AHOM LETTER ALTERNATE BA 2664 return true; 2665 } 2666 if (codePoint >= 0x1171D && codePoint <= 0x1172B) { // AHOM CONSONANT SIGN MEDIAL LA .. AHOM SIGN KILLER 2667 return true; 2668 } 2669 if (codePoint >= 0x11730 && codePoint <= 0x11739) { // AHOM DIGIT ZERO .. AHOM DIGIT NINE 2670 return true; 2671 } 2672 if (codePoint >= 0x11740 && codePoint <= 0x11746) { // AHOM LETTER CA .. AHOM LETTER LLA 2673 return true; 2674 } 2675 if (codePoint >= 0x11800 && codePoint <= 0x1183A) { // DOGRA LETTER A .. DOGRA SIGN NUKTA 2676 return true; 2677 } 2678 if (codePoint >= 0x118A0 && codePoint <= 0x118E9) { // WARANG CITI CAPITAL LETTER NGAA .. WARANG CITI DIGIT NINE 2679 return true; 2680 } 2681 if (codePoint >= 0x118FF && codePoint <= 0x11906) { // WARANG CITI OM .. DIVES AKURU LETTER E 2682 return true; 2683 } 2684 if (codePoint >= 0x11909 && codePoint <= 0x11909) { // DIVES AKURU LETTER O .. DIVES AKURU LETTER O 2685 return true; 2686 } 2687 if (codePoint >= 0x1190C && codePoint <= 0x11913) { // DIVES AKURU LETTER KA .. DIVES AKURU LETTER JA 2688 return true; 2689 } 2690 if (codePoint >= 0x11915 && codePoint <= 0x11916) { // DIVES AKURU LETTER NYA .. DIVES AKURU LETTER TTA 2691 return true; 2692 } 2693 if (codePoint >= 0x11918 && codePoint <= 0x11935) { // DIVES AKURU LETTER DDA .. DIVES AKURU VOWEL SIGN E 2694 return true; 2695 } 2696 if (codePoint >= 0x11937 && codePoint <= 0x11938) { // DIVES AKURU VOWEL SIGN AI .. DIVES AKURU VOWEL SIGN O 2697 return true; 2698 } 2699 if (codePoint >= 0x1193B && codePoint <= 0x11943) { // DIVES AKURU SIGN ANUSVARA .. DIVES AKURU SIGN NUKTA 2700 return true; 2701 } 2702 if (codePoint >= 0x11950 && codePoint <= 0x11959) { // DIVES AKURU DIGIT ZERO .. DIVES AKURU DIGIT NINE 2703 return true; 2704 } 2705 if (codePoint >= 0x119A0 && codePoint <= 0x119A7) { // NANDINAGARI LETTER A .. NANDINAGARI LETTER VOCALIC RR 2706 return true; 2707 } 2708 if (codePoint >= 0x119AA && codePoint <= 0x119D7) { // NANDINAGARI LETTER E .. NANDINAGARI VOWEL SIGN VOCALIC RR 2709 return true; 2710 } 2711 if (codePoint >= 0x119DA && codePoint <= 0x119E1) { // NANDINAGARI VOWEL SIGN E .. NANDINAGARI SIGN AVAGRAHA 2712 return true; 2713 } 2714 if (codePoint >= 0x119E3 && codePoint <= 0x119E4) { // NANDINAGARI HEADSTROKE .. NANDINAGARI VOWEL SIGN PRISHTHAMATRA E 2715 return true; 2716 } 2717 if (codePoint >= 0x11A00 && codePoint <= 0x11A3E) { // ZANABAZAR SQUARE LETTER A .. ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA 2718 return true; 2719 } 2720 if (codePoint >= 0x11A47 && codePoint <= 0x11A47) { // ZANABAZAR SQUARE SUBJOINER .. ZANABAZAR SQUARE SUBJOINER 2721 return true; 2722 } 2723 if (codePoint >= 0x11A50 && codePoint <= 0x11A99) { // SOYOMBO LETTER A .. SOYOMBO SUBJOINER 2724 return true; 2725 } 2726 if (codePoint >= 0x11A9D && codePoint <= 0x11A9D) { // SOYOMBO MARK PLUTA .. SOYOMBO MARK PLUTA 2727 return true; 2728 } 2729 if (codePoint >= 0x11AB0 && codePoint <= 0x11AF8) { // CANADIAN SYLLABICS NATTILIK HI .. PAU CIN HAU GLOTTAL STOP FINAL 2730 return true; 2731 } 2732 if (codePoint >= 0x11B60 && codePoint <= 0x11B67) { // SHARADA VOWEL SIGN OE .. SHARADA VOWEL SIGN CANDRA O 2733 return true; 2734 } 2735 if (codePoint >= 0x11BC0 && codePoint <= 0x11BE0) { // SUNUWAR LETTER DEVI .. SUNUWAR LETTER KLOKO 2736 return true; 2737 } 2738 if (codePoint >= 0x11BF0 && codePoint <= 0x11BF9) { // SUNUWAR DIGIT ZERO .. SUNUWAR DIGIT NINE 2739 return true; 2740 } 2741 if (codePoint >= 0x11C00 && codePoint <= 0x11C08) { // BHAIKSUKI LETTER A .. BHAIKSUKI LETTER VOCALIC L 2742 return true; 2743 } 2744 if (codePoint >= 0x11C0A && codePoint <= 0x11C36) { // BHAIKSUKI LETTER E .. BHAIKSUKI VOWEL SIGN VOCALIC L 2745 return true; 2746 } 2747 if (codePoint >= 0x11C38 && codePoint <= 0x11C40) { // BHAIKSUKI VOWEL SIGN E .. BHAIKSUKI SIGN AVAGRAHA 2748 return true; 2749 } 2750 if (codePoint >= 0x11C50 && codePoint <= 0x11C59) { // BHAIKSUKI DIGIT ZERO .. BHAIKSUKI DIGIT NINE 2751 return true; 2752 } 2753 if (codePoint >= 0x11C72 && codePoint <= 0x11C8F) { // MARCHEN LETTER KA .. MARCHEN LETTER A 2754 return true; 2755 } 2756 if (codePoint >= 0x11C92 && codePoint <= 0x11CA7) { // MARCHEN SUBJOINED LETTER KA .. MARCHEN SUBJOINED LETTER ZA 2757 return true; 2758 } 2759 if (codePoint >= 0x11CA9 && codePoint <= 0x11CB6) { // MARCHEN SUBJOINED LETTER YA .. MARCHEN SIGN CANDRABINDU 2760 return true; 2761 } 2762 if (codePoint >= 0x11D00 && codePoint <= 0x11D06) { // MASARAM GONDI LETTER A .. MASARAM GONDI LETTER E 2763 return true; 2764 } 2765 if (codePoint >= 0x11D08 && codePoint <= 0x11D09) { // MASARAM GONDI LETTER AI .. MASARAM GONDI LETTER O 2766 return true; 2767 } 2768 if (codePoint >= 0x11D0B && codePoint <= 0x11D36) { // MASARAM GONDI LETTER AU .. MASARAM GONDI VOWEL SIGN VOCALIC R 2769 return true; 2770 } 2771 if (codePoint >= 0x11D3A && codePoint <= 0x11D3A) { // MASARAM GONDI VOWEL SIGN E .. MASARAM GONDI VOWEL SIGN E 2772 return true; 2773 } 2774 if (codePoint >= 0x11D3C && codePoint <= 0x11D3D) { // MASARAM GONDI VOWEL SIGN AI .. MASARAM GONDI VOWEL SIGN O 2775 return true; 2776 } 2777 if (codePoint >= 0x11D3F && codePoint <= 0x11D47) { // MASARAM GONDI VOWEL SIGN AU .. MASARAM GONDI RA-KARA 2778 return true; 2779 } 2780 if (codePoint >= 0x11D50 && codePoint <= 0x11D59) { // MASARAM GONDI DIGIT ZERO .. MASARAM GONDI DIGIT NINE 2781 return true; 2782 } 2783 if (codePoint >= 0x11D60 && codePoint <= 0x11D65) { // GUNJALA GONDI LETTER A .. GUNJALA GONDI LETTER UU 2784 return true; 2785 } 2786 if (codePoint >= 0x11D67 && codePoint <= 0x11D68) { // GUNJALA GONDI LETTER EE .. GUNJALA GONDI LETTER AI 2787 return true; 2788 } 2789 if (codePoint >= 0x11D6A && codePoint <= 0x11D8E) { // GUNJALA GONDI LETTER OO .. GUNJALA GONDI VOWEL SIGN UU 2790 return true; 2791 } 2792 if (codePoint >= 0x11D90 && codePoint <= 0x11D91) { // GUNJALA GONDI VOWEL SIGN EE .. GUNJALA GONDI VOWEL SIGN AI 2793 return true; 2794 } 2795 if (codePoint >= 0x11D93 && codePoint <= 0x11D98) { // GUNJALA GONDI VOWEL SIGN OO .. GUNJALA GONDI OM 2796 return true; 2797 } 2798 if (codePoint >= 0x11DA0 && codePoint <= 0x11DA9) { // GUNJALA GONDI DIGIT ZERO .. GUNJALA GONDI DIGIT NINE 2799 return true; 2800 } 2801 if (codePoint >= 0x11DB0 && codePoint <= 0x11DDB) { // TOLONG SIKI LETTER I .. TOLONG SIKI UNGGA 2802 return true; 2803 } 2804 if (codePoint >= 0x11DE0 && codePoint <= 0x11DE9) { // TOLONG SIKI DIGIT ZERO .. TOLONG SIKI DIGIT NINE 2805 return true; 2806 } 2807 if (codePoint >= 0x11EE0 && codePoint <= 0x11EF6) { // MAKASAR LETTER KA .. MAKASAR VOWEL SIGN O 2808 return true; 2809 } 2810 if (codePoint >= 0x11F00 && codePoint <= 0x11F10) { // KAWI SIGN CANDRABINDU .. KAWI LETTER O 2811 return true; 2812 } 2813 if (codePoint >= 0x11F12 && codePoint <= 0x11F3A) { // KAWI LETTER KA .. KAWI VOWEL SIGN VOCALIC R 2814 return true; 2815 } 2816 if (codePoint >= 0x11F3E && codePoint <= 0x11F42) { // KAWI VOWEL SIGN E .. KAWI CONJOINER 2817 return true; 2818 } 2819 if (codePoint >= 0x11F50 && codePoint <= 0x11F5A) { // KAWI DIGIT ZERO .. KAWI SIGN NUKTA 2820 return true; 2821 } 2822 if (codePoint >= 0x11FB0 && codePoint <= 0x11FB0) { // LISU LETTER YHA .. LISU LETTER YHA 2823 return true; 2824 } 2825 if (codePoint >= 0x12000 && codePoint <= 0x12399) { // CUNEIFORM SIGN A .. CUNEIFORM SIGN U U 2826 return true; 2827 } 2828 if (codePoint >= 0x12400 && codePoint <= 0x1246E) { // CUNEIFORM NUMERIC SIGN TWO ASH .. CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 2829 return true; 2830 } 2831 if (codePoint >= 0x12480 && codePoint <= 0x12543) { // CUNEIFORM SIGN AB TIMES NUN TENU .. CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU 2832 return true; 2833 } 2834 if (codePoint >= 0x12F90 && codePoint <= 0x12FF0) { // CYPRO-MINOAN SIGN CM001 .. CYPRO-MINOAN SIGN CM114 2835 return true; 2836 } 2837 if (codePoint >= 0x13000 && codePoint <= 0x1342F) { // EGYPTIAN HIEROGLYPH A001 .. EGYPTIAN HIEROGLYPH V011D 2838 return true; 2839 } 2840 if (codePoint >= 0x13440 && codePoint <= 0x13455) { // EGYPTIAN HIEROGLYPH MIRROR HORIZONTALLY .. EGYPTIAN HIEROGLYPH MODIFIER DAMAGED 2841 return true; 2842 } 2843 if (codePoint >= 0x13460 && codePoint <= 0x143FA) { // EGYPTIAN HIEROGLYPH-13460 .. EGYPTIAN HIEROGLYPH-143FA 2844 return true; 2845 } 2846 if (codePoint >= 0x14400 && codePoint <= 0x14646) { // ANATOLIAN HIEROGLYPH A001 .. ANATOLIAN HIEROGLYPH A530 2847 return true; 2848 } 2849 if (codePoint >= 0x16100 && codePoint <= 0x16139) { // GURUNG KHEMA LETTER A .. GURUNG KHEMA DIGIT NINE 2850 return true; 2851 } 2852 if (codePoint >= 0x16800 && codePoint <= 0x16A38) { // BAMUM LETTER PHASE-A NGKUE MFON .. BAMUM LETTER PHASE-F VUEQ 2853 return true; 2854 } 2855 if (codePoint >= 0x16A40 && codePoint <= 0x16A5E) { // MRO LETTER TA .. MRO LETTER TEK 2856 return true; 2857 } 2858 if (codePoint >= 0x16A60 && codePoint <= 0x16A69) { // MRO DIGIT ZERO .. MRO DIGIT NINE 2859 return true; 2860 } 2861 if (codePoint >= 0x16A70 && codePoint <= 0x16ABE) { // TANGSA LETTER OZ .. TANGSA LETTER ZA 2862 return true; 2863 } 2864 if (codePoint >= 0x16AC0 && codePoint <= 0x16AC9) { // TANGSA DIGIT ZERO .. TANGSA DIGIT NINE 2865 return true; 2866 } 2867 if (codePoint >= 0x16AD0 && codePoint <= 0x16AED) { // BASSA VAH LETTER ENNI .. BASSA VAH LETTER I 2868 return true; 2869 } 2870 if (codePoint >= 0x16AF0 && codePoint <= 0x16AF4) { // BASSA VAH COMBINING HIGH TONE .. BASSA VAH COMBINING HIGH-LOW TONE 2871 return true; 2872 } 2873 if (codePoint >= 0x16B00 && codePoint <= 0x16B36) { // PAHAWH HMONG VOWEL KEEB .. PAHAWH HMONG MARK CIM TAUM 2874 return true; 2875 } 2876 if (codePoint >= 0x16B40 && codePoint <= 0x16B43) { // PAHAWH HMONG SIGN VOS SEEV .. PAHAWH HMONG SIGN IB YAM 2877 return true; 2878 } 2879 if (codePoint >= 0x16B50 && codePoint <= 0x16B59) { // PAHAWH HMONG DIGIT ZERO .. PAHAWH HMONG DIGIT NINE 2880 return true; 2881 } 2882 if (codePoint >= 0x16B63 && codePoint <= 0x16B77) { // PAHAWH HMONG SIGN VOS LUB .. PAHAWH HMONG SIGN CIM NRES TOS 2883 return true; 2884 } 2885 if (codePoint >= 0x16B7D && codePoint <= 0x16B8F) { // PAHAWH HMONG CLAN SIGN TSHEEJ .. PAHAWH HMONG CLAN SIGN VWJ 2886 return true; 2887 } 2888 if (codePoint >= 0x16D40 && codePoint <= 0x16D6C) { // KIRAT RAI SIGN ANUSVARA .. KIRAT RAI SIGN SAAT 2889 return true; 2890 } 2891 if (codePoint >= 0x16D70 && codePoint <= 0x16D79) { // KIRAT RAI DIGIT ZERO .. KIRAT RAI DIGIT NINE 2892 return true; 2893 } 2894 if (codePoint >= 0x16E40 && codePoint <= 0x16E7F) { // MEDEFAIDRIN CAPITAL LETTER M .. MEDEFAIDRIN SMALL LETTER Y 2895 return true; 2896 } 2897 if (codePoint >= 0x16EA0 && codePoint <= 0x16EB8) { // BERIA ERFE CAPITAL LETTER ARKAB .. BERIA ERFE CAPITAL LETTER AY 2898 return true; 2899 } 2900 if (codePoint >= 0x16EBB && codePoint <= 0x16ED3) { // BERIA ERFE SMALL LETTER ARKAB .. BERIA ERFE SMALL LETTER AY 2901 return true; 2902 } 2903 if (codePoint >= 0x16F00 && codePoint <= 0x16F4A) { // MIAO LETTER PA .. MIAO LETTER RTE 2904 return true; 2905 } 2906 if (codePoint >= 0x16F4F && codePoint <= 0x16F87) { // MIAO SIGN CONSONANT MODIFIER BAR .. MIAO VOWEL SIGN UI 2907 return true; 2908 } 2909 if (codePoint >= 0x16F8F && codePoint <= 0x16F9F) { // MIAO TONE RIGHT .. MIAO LETTER REFORMED TONE-8 2910 return true; 2911 } 2912 if (codePoint >= 0x16FE0 && codePoint <= 0x16FE1) { // TANGUT ITERATION MARK .. NUSHU ITERATION MARK 2913 return true; 2914 } 2915 if (codePoint >= 0x16FE3 && codePoint <= 0x16FE4) { // OLD CHINESE ITERATION MARK .. KHITAN SMALL SCRIPT FILLER 2916 return true; 2917 } 2918 if (codePoint >= 0x16FF0 && codePoint <= 0x16FF6) { // VIETNAMESE ALTERNATE READING MARK CA .. YANGQIN SIGN SLOW TWO BEATS 2919 return true; 2920 } 2921 if (codePoint >= 0x17000 && codePoint <= 0x18CD5) { // Tangut Ideograph .. KHITAN SMALL SCRIPT CHARACTER-18CD5 2922 return true; 2923 } 2924 if (codePoint >= 0x18CFF && codePoint <= 0x18D1E) { // KHITAN SMALL SCRIPT CHARACTER-18CFF .. Tangut Ideograph Supplement 2925 return true; 2926 } 2927 if (codePoint >= 0x18D80 && codePoint <= 0x18DF2) { // TANGUT COMPONENT-769 .. TANGUT COMPONENT-883 2928 return true; 2929 } 2930 if (codePoint >= 0x1AFF0 && codePoint <= 0x1AFF3) { // KATAKANA LETTER MINNAN TONE-2 .. KATAKANA LETTER MINNAN TONE-5 2931 return true; 2932 } 2933 if (codePoint >= 0x1AFF5 && codePoint <= 0x1AFFB) { // KATAKANA LETTER MINNAN TONE-7 .. KATAKANA LETTER MINNAN NASALIZED TONE-5 2934 return true; 2935 } 2936 if (codePoint >= 0x1AFFD && codePoint <= 0x1AFFE) { // KATAKANA LETTER MINNAN NASALIZED TONE-7 .. KATAKANA LETTER MINNAN NASALIZED TONE-8 2937 return true; 2938 } 2939 if (codePoint >= 0x1B000 && codePoint <= 0x1B122) { // KATAKANA LETTER ARCHAIC E .. KATAKANA LETTER ARCHAIC WU 2940 return true; 2941 } 2942 if (codePoint >= 0x1B132 && codePoint <= 0x1B132) { // HIRAGANA LETTER SMALL KO .. HIRAGANA LETTER SMALL KO 2943 return true; 2944 } 2945 if (codePoint >= 0x1B150 && codePoint <= 0x1B152) { // HIRAGANA LETTER SMALL WI .. HIRAGANA LETTER SMALL WO 2946 return true; 2947 } 2948 if (codePoint >= 0x1B155 && codePoint <= 0x1B155) { // KATAKANA LETTER SMALL KO .. KATAKANA LETTER SMALL KO 2949 return true; 2950 } 2951 if (codePoint >= 0x1B164 && codePoint <= 0x1B167) { // KATAKANA LETTER SMALL WI .. KATAKANA LETTER SMALL N 2952 return true; 2953 } 2954 if (codePoint >= 0x1B170 && codePoint <= 0x1B2FB) { // NUSHU CHARACTER-1B170 .. NUSHU CHARACTER-1B2FB 2955 return true; 2956 } 2957 if (codePoint >= 0x1BC00 && codePoint <= 0x1BC6A) { // DUPLOYAN LETTER H .. DUPLOYAN LETTER VOCALIC M 2958 return true; 2959 } 2960 if (codePoint >= 0x1BC70 && codePoint <= 0x1BC7C) { // DUPLOYAN AFFIX LEFT HORIZONTAL SECANT .. DUPLOYAN AFFIX ATTACHED TANGENT HOOK 2961 return true; 2962 } 2963 if (codePoint >= 0x1BC80 && codePoint <= 0x1BC88) { // DUPLOYAN AFFIX HIGH ACUTE .. DUPLOYAN AFFIX HIGH VERTICAL 2964 return true; 2965 } 2966 if (codePoint >= 0x1BC90 && codePoint <= 0x1BC99) { // DUPLOYAN AFFIX LOW ACUTE .. DUPLOYAN AFFIX LOW ARROW 2967 return true; 2968 } 2969 if (codePoint >= 0x1BC9D && codePoint <= 0x1BC9E) { // DUPLOYAN THICK LETTER SELECTOR .. DUPLOYAN DOUBLE MARK 2970 return true; 2971 } 2972 if (codePoint >= 0x1CCF0 && codePoint <= 0x1CCF9) { // OUTLINED DIGIT ZERO .. OUTLINED DIGIT NINE 2973 return true; 2974 } 2975 if (codePoint >= 0x1CF00 && codePoint <= 0x1CF2D) { // ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT .. ZNAMENNY COMBINING MARK KRYZH ON LEFT 2976 return true; 2977 } 2978 if (codePoint >= 0x1CF30 && codePoint <= 0x1CF46) { // ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO .. ZNAMENNY PRIZNAK MODIFIER ROG 2979 return true; 2980 } 2981 if (codePoint >= 0x1D165 && codePoint <= 0x1D169) { // MUSICAL SYMBOL COMBINING STEM .. MUSICAL SYMBOL COMBINING TREMOLO-3 2982 return true; 2983 } 2984 if (codePoint >= 0x1D16D && codePoint <= 0x1D172) { // MUSICAL SYMBOL COMBINING AUGMENTATION DOT .. MUSICAL SYMBOL COMBINING FLAG-5 2985 return true; 2986 } 2987 if (codePoint >= 0x1D17B && codePoint <= 0x1D182) { // MUSICAL SYMBOL COMBINING ACCENT .. MUSICAL SYMBOL COMBINING LOURE 2988 return true; 2989 } 2990 if (codePoint >= 0x1D185 && codePoint <= 0x1D18B) { // MUSICAL SYMBOL COMBINING DOIT .. MUSICAL SYMBOL COMBINING TRIPLE TONGUE 2991 return true; 2992 } 2993 if (codePoint >= 0x1D1AA && codePoint <= 0x1D1AD) { // MUSICAL SYMBOL COMBINING DOWN BOW .. MUSICAL SYMBOL COMBINING SNAP PIZZICATO 2994 return true; 2995 } 2996 if (codePoint >= 0x1D242 && codePoint <= 0x1D244) { // COMBINING GREEK MUSICAL TRISEME .. COMBINING GREEK MUSICAL PENTASEME 2997 return true; 2998 } 2999 if (codePoint >= 0x1D400 && codePoint <= 0x1D454) { // MATHEMATICAL BOLD CAPITAL A .. MATHEMATICAL ITALIC SMALL G 3000 return true; 3001 } 3002 if (codePoint >= 0x1D456 && codePoint <= 0x1D49C) { // MATHEMATICAL ITALIC SMALL I .. MATHEMATICAL SCRIPT CAPITAL A 3003 return true; 3004 } 3005 if (codePoint >= 0x1D49E && codePoint <= 0x1D49F) { // MATHEMATICAL SCRIPT CAPITAL C .. MATHEMATICAL SCRIPT CAPITAL D 3006 return true; 3007 } 3008 if (codePoint >= 0x1D4A2 && codePoint <= 0x1D4A2) { // MATHEMATICAL SCRIPT CAPITAL G .. MATHEMATICAL SCRIPT CAPITAL G 3009 return true; 3010 } 3011 if (codePoint >= 0x1D4A5 && codePoint <= 0x1D4A6) { // MATHEMATICAL SCRIPT CAPITAL J .. MATHEMATICAL SCRIPT CAPITAL K 3012 return true; 3013 } 3014 if (codePoint >= 0x1D4A9 && codePoint <= 0x1D4AC) { // MATHEMATICAL SCRIPT CAPITAL N .. MATHEMATICAL SCRIPT CAPITAL Q 3015 return true; 3016 } 3017 if (codePoint >= 0x1D4AE && codePoint <= 0x1D4B9) { // MATHEMATICAL SCRIPT CAPITAL S .. MATHEMATICAL SCRIPT SMALL D 3018 return true; 3019 } 3020 if (codePoint >= 0x1D4BB && codePoint <= 0x1D4BB) { // MATHEMATICAL SCRIPT SMALL F .. MATHEMATICAL SCRIPT SMALL F 3021 return true; 3022 } 3023 if (codePoint >= 0x1D4BD && codePoint <= 0x1D4C3) { // MATHEMATICAL SCRIPT SMALL H .. MATHEMATICAL SCRIPT SMALL N 3024 return true; 3025 } 3026 if (codePoint >= 0x1D4C5 && codePoint <= 0x1D505) { // MATHEMATICAL SCRIPT SMALL P .. MATHEMATICAL FRAKTUR CAPITAL B 3027 return true; 3028 } 3029 if (codePoint >= 0x1D507 && codePoint <= 0x1D50A) { // MATHEMATICAL FRAKTUR CAPITAL D .. MATHEMATICAL FRAKTUR CAPITAL G 3030 return true; 3031 } 3032 if (codePoint >= 0x1D50D && codePoint <= 0x1D514) { // MATHEMATICAL FRAKTUR CAPITAL J .. MATHEMATICAL FRAKTUR CAPITAL Q 3033 return true; 3034 } 3035 if (codePoint >= 0x1D516 && codePoint <= 0x1D51C) { // MATHEMATICAL FRAKTUR CAPITAL S .. MATHEMATICAL FRAKTUR CAPITAL Y 3036 return true; 3037 } 3038 if (codePoint >= 0x1D51E && codePoint <= 0x1D539) { // MATHEMATICAL FRAKTUR SMALL A .. MATHEMATICAL DOUBLE-STRUCK CAPITAL B 3039 return true; 3040 } 3041 if (codePoint >= 0x1D53B && codePoint <= 0x1D53E) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL D .. MATHEMATICAL DOUBLE-STRUCK CAPITAL G 3042 return true; 3043 } 3044 if (codePoint >= 0x1D540 && codePoint <= 0x1D544) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL I .. MATHEMATICAL DOUBLE-STRUCK CAPITAL M 3045 return true; 3046 } 3047 if (codePoint >= 0x1D546 && codePoint <= 0x1D546) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL O .. MATHEMATICAL DOUBLE-STRUCK CAPITAL O 3048 return true; 3049 } 3050 if (codePoint >= 0x1D54A && codePoint <= 0x1D550) { // MATHEMATICAL DOUBLE-STRUCK CAPITAL S .. MATHEMATICAL DOUBLE-STRUCK CAPITAL Y 3051 return true; 3052 } 3053 if (codePoint >= 0x1D552 && codePoint <= 0x1D6A5) { // MATHEMATICAL DOUBLE-STRUCK SMALL A .. MATHEMATICAL ITALIC SMALL DOTLESS J 3054 return true; 3055 } 3056 if (codePoint >= 0x1D6A8 && codePoint <= 0x1D6C0) { // MATHEMATICAL BOLD CAPITAL ALPHA .. MATHEMATICAL BOLD CAPITAL OMEGA 3057 return true; 3058 } 3059 if (codePoint >= 0x1D6C2 && codePoint <= 0x1D6DA) { // MATHEMATICAL BOLD SMALL ALPHA .. MATHEMATICAL BOLD SMALL OMEGA 3060 return true; 3061 } 3062 if (codePoint >= 0x1D6DC && codePoint <= 0x1D6FA) { // MATHEMATICAL BOLD EPSILON SYMBOL .. MATHEMATICAL ITALIC CAPITAL OMEGA 3063 return true; 3064 } 3065 if (codePoint >= 0x1D6FC && codePoint <= 0x1D714) { // MATHEMATICAL ITALIC SMALL ALPHA .. MATHEMATICAL ITALIC SMALL OMEGA 3066 return true; 3067 } 3068 if (codePoint >= 0x1D716 && codePoint <= 0x1D734) { // MATHEMATICAL ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD ITALIC CAPITAL OMEGA 3069 return true; 3070 } 3071 if (codePoint >= 0x1D736 && codePoint <= 0x1D74E) { // MATHEMATICAL BOLD ITALIC SMALL ALPHA .. MATHEMATICAL BOLD ITALIC SMALL OMEGA 3072 return true; 3073 } 3074 if (codePoint >= 0x1D750 && codePoint <= 0x1D76E) { // MATHEMATICAL BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA 3075 return true; 3076 } 3077 if (codePoint >= 0x1D770 && codePoint <= 0x1D788) { // MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA 3078 return true; 3079 } 3080 if (codePoint >= 0x1D78A && codePoint <= 0x1D7A8) { // MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL .. MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 3081 return true; 3082 } 3083 if (codePoint >= 0x1D7AA && codePoint <= 0x1D7C2) { // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA .. MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 3084 return true; 3085 } 3086 if (codePoint >= 0x1D7C4 && codePoint <= 0x1D7CB) { // MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL .. MATHEMATICAL BOLD SMALL DIGAMMA 3087 return true; 3088 } 3089 if (codePoint >= 0x1D7CE && codePoint <= 0x1D7FF) { // MATHEMATICAL BOLD DIGIT ZERO .. MATHEMATICAL MONOSPACE DIGIT NINE 3090 return true; 3091 } 3092 if (codePoint >= 0x1DA00 && codePoint <= 0x1DA36) { // SIGNWRITING HEAD RIM .. SIGNWRITING AIR SUCKING IN 3093 return true; 3094 } 3095 if (codePoint >= 0x1DA3B && codePoint <= 0x1DA6C) { // SIGNWRITING MOUTH CLOSED NEUTRAL .. SIGNWRITING EXCITEMENT 3096 return true; 3097 } 3098 if (codePoint >= 0x1DA75 && codePoint <= 0x1DA75) { // SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS .. SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS 3099 return true; 3100 } 3101 if (codePoint >= 0x1DA84 && codePoint <= 0x1DA84) { // SIGNWRITING LOCATION HEAD NECK .. SIGNWRITING LOCATION HEAD NECK 3102 return true; 3103 } 3104 if (codePoint >= 0x1DA9B && codePoint <= 0x1DA9F) { // SIGNWRITING FILL MODIFIER-2 .. SIGNWRITING FILL MODIFIER-6 3105 return true; 3106 } 3107 if (codePoint >= 0x1DAA1 && codePoint <= 0x1DAAF) { // SIGNWRITING ROTATION MODIFIER-2 .. SIGNWRITING ROTATION MODIFIER-16 3108 return true; 3109 } 3110 if (codePoint >= 0x1DF00 && codePoint <= 0x1DF1E) { // LATIN SMALL LETTER FENG DIGRAPH WITH TRILL .. LATIN SMALL LETTER S WITH CURL 3111 return true; 3112 } 3113 if (codePoint >= 0x1DF25 && codePoint <= 0x1DF2A) { // LATIN SMALL LETTER D WITH MID-HEIGHT LEFT HOOK .. LATIN SMALL LETTER T WITH MID-HEIGHT LEFT HOOK 3114 return true; 3115 } 3116 if (codePoint >= 0x1E000 && codePoint <= 0x1E006) { // COMBINING GLAGOLITIC LETTER AZU .. COMBINING GLAGOLITIC LETTER ZHIVETE 3117 return true; 3118 } 3119 if (codePoint >= 0x1E008 && codePoint <= 0x1E018) { // COMBINING GLAGOLITIC LETTER ZEMLJA .. COMBINING GLAGOLITIC LETTER HERU 3120 return true; 3121 } 3122 if (codePoint >= 0x1E01B && codePoint <= 0x1E021) { // COMBINING GLAGOLITIC LETTER SHTA .. COMBINING GLAGOLITIC LETTER YATI 3123 return true; 3124 } 3125 if (codePoint >= 0x1E023 && codePoint <= 0x1E024) { // COMBINING GLAGOLITIC LETTER YU .. COMBINING GLAGOLITIC LETTER SMALL YUS 3126 return true; 3127 } 3128 if (codePoint >= 0x1E026 && codePoint <= 0x1E02A) { // COMBINING GLAGOLITIC LETTER YO .. COMBINING GLAGOLITIC LETTER FITA 3129 return true; 3130 } 3131 if (codePoint >= 0x1E030 && codePoint <= 0x1E06D) { // MODIFIER LETTER CYRILLIC SMALL A .. MODIFIER LETTER CYRILLIC SMALL STRAIGHT U WITH STROKE 3132 return true; 3133 } 3134 if (codePoint >= 0x1E08F && codePoint <= 0x1E08F) { // COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I .. COMBINING CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I 3135 return true; 3136 } 3137 if (codePoint >= 0x1E100 && codePoint <= 0x1E12C) { // NYIAKENG PUACHUE HMONG LETTER MA .. NYIAKENG PUACHUE HMONG LETTER W 3138 return true; 3139 } 3140 if (codePoint >= 0x1E130 && codePoint <= 0x1E13D) { // NYIAKENG PUACHUE HMONG TONE-B .. NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 3141 return true; 3142 } 3143 if (codePoint >= 0x1E140 && codePoint <= 0x1E149) { // NYIAKENG PUACHUE HMONG DIGIT ZERO .. NYIAKENG PUACHUE HMONG DIGIT NINE 3144 return true; 3145 } 3146 if (codePoint >= 0x1E14E && codePoint <= 0x1E14E) { // NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ .. NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 3147 return true; 3148 } 3149 if (codePoint >= 0x1E290 && codePoint <= 0x1E2AE) { // TOTO LETTER PA .. TOTO SIGN RISING TONE 3150 return true; 3151 } 3152 if (codePoint >= 0x1E2C0 && codePoint <= 0x1E2F9) { // WANCHO LETTER AA .. WANCHO DIGIT NINE 3153 return true; 3154 } 3155 if (codePoint >= 0x1E4D0 && codePoint <= 0x1E4F9) { // NAG MUNDARI LETTER O .. NAG MUNDARI DIGIT NINE 3156 return true; 3157 } 3158 if (codePoint >= 0x1E5D0 && codePoint <= 0x1E5FA) { // OL ONAL LETTER O .. OL ONAL DIGIT NINE 3159 return true; 3160 } 3161 if (codePoint >= 0x1E6C0 && codePoint <= 0x1E6DE) { // TAI YO LETTER LOW KO .. TAI YO LETTER HIGH KVO 3162 return true; 3163 } 3164 if (codePoint >= 0x1E6E0 && codePoint <= 0x1E6F5) { // TAI YO LETTER AA .. TAI YO SIGN OM 3165 return true; 3166 } 3167 if (codePoint >= 0x1E6FE && codePoint <= 0x1E6FF) { // TAI YO SYMBOL MUEANG .. TAI YO XAM LAI 3168 return true; 3169 } 3170 if (codePoint >= 0x1E7E0 && codePoint <= 0x1E7E6) { // ETHIOPIC SYLLABLE HHYA .. ETHIOPIC SYLLABLE HHYO 3171 return true; 3172 } 3173 if (codePoint >= 0x1E7E8 && codePoint <= 0x1E7EB) { // ETHIOPIC SYLLABLE GURAGE HHWA .. ETHIOPIC SYLLABLE HHWE 3174 return true; 3175 } 3176 if (codePoint >= 0x1E7ED && codePoint <= 0x1E7EE) { // ETHIOPIC SYLLABLE GURAGE MWI .. ETHIOPIC SYLLABLE GURAGE MWEE 3177 return true; 3178 } 3179 if (codePoint >= 0x1E7F0 && codePoint <= 0x1E7FE) { // ETHIOPIC SYLLABLE GURAGE QWI .. ETHIOPIC SYLLABLE GURAGE PWEE 3180 return true; 3181 } 3182 if (codePoint >= 0x1E800 && codePoint <= 0x1E8C4) { // MENDE KIKAKUI SYLLABLE M001 KI .. MENDE KIKAKUI SYLLABLE M060 NYON 3183 return true; 3184 } 3185 if (codePoint >= 0x1E8D0 && codePoint <= 0x1E8D6) { // MENDE KIKAKUI COMBINING NUMBER TEENS .. MENDE KIKAKUI COMBINING NUMBER MILLIONS 3186 return true; 3187 } 3188 if (codePoint >= 0x1E900 && codePoint <= 0x1E94B) { // ADLAM CAPITAL LETTER ALIF .. ADLAM NASALIZATION MARK 3189 return true; 3190 } 3191 if (codePoint >= 0x1E950 && codePoint <= 0x1E959) { // ADLAM DIGIT ZERO .. ADLAM DIGIT NINE 3192 return true; 3193 } 3194 if (codePoint >= 0x1EE00 && codePoint <= 0x1EE03) { // ARABIC MATHEMATICAL ALEF .. ARABIC MATHEMATICAL DAL 3195 return true; 3196 } 3197 if (codePoint >= 0x1EE05 && codePoint <= 0x1EE1F) { // ARABIC MATHEMATICAL WAW .. ARABIC MATHEMATICAL DOTLESS QAF 3198 return true; 3199 } 3200 if (codePoint >= 0x1EE21 && codePoint <= 0x1EE22) { // ARABIC MATHEMATICAL INITIAL BEH .. ARABIC MATHEMATICAL INITIAL JEEM 3201 return true; 3202 } 3203 if (codePoint >= 0x1EE24 && codePoint <= 0x1EE24) { // ARABIC MATHEMATICAL INITIAL HEH .. ARABIC MATHEMATICAL INITIAL HEH 3204 return true; 3205 } 3206 if (codePoint >= 0x1EE27 && codePoint <= 0x1EE27) { // ARABIC MATHEMATICAL INITIAL HAH .. ARABIC MATHEMATICAL INITIAL HAH 3207 return true; 3208 } 3209 if (codePoint >= 0x1EE29 && codePoint <= 0x1EE32) { // ARABIC MATHEMATICAL INITIAL YEH .. ARABIC MATHEMATICAL INITIAL QAF 3210 return true; 3211 } 3212 if (codePoint >= 0x1EE34 && codePoint <= 0x1EE37) { // ARABIC MATHEMATICAL INITIAL SHEEN .. ARABIC MATHEMATICAL INITIAL KHAH 3213 return true; 3214 } 3215 if (codePoint >= 0x1EE39 && codePoint <= 0x1EE39) { // ARABIC MATHEMATICAL INITIAL DAD .. ARABIC MATHEMATICAL INITIAL DAD 3216 return true; 3217 } 3218 if (codePoint >= 0x1EE3B && codePoint <= 0x1EE3B) { // ARABIC MATHEMATICAL INITIAL GHAIN .. ARABIC MATHEMATICAL INITIAL GHAIN 3219 return true; 3220 } 3221 if (codePoint >= 0x1EE42 && codePoint <= 0x1EE42) { // ARABIC MATHEMATICAL TAILED JEEM .. ARABIC MATHEMATICAL TAILED JEEM 3222 return true; 3223 } 3224 if (codePoint >= 0x1EE47 && codePoint <= 0x1EE47) { // ARABIC MATHEMATICAL TAILED HAH .. ARABIC MATHEMATICAL TAILED HAH 3225 return true; 3226 } 3227 if (codePoint >= 0x1EE49 && codePoint <= 0x1EE49) { // ARABIC MATHEMATICAL TAILED YEH .. ARABIC MATHEMATICAL TAILED YEH 3228 return true; 3229 } 3230 if (codePoint >= 0x1EE4B && codePoint <= 0x1EE4B) { // ARABIC MATHEMATICAL TAILED LAM .. ARABIC MATHEMATICAL TAILED LAM 3231 return true; 3232 } 3233 if (codePoint >= 0x1EE4D && codePoint <= 0x1EE4F) { // ARABIC MATHEMATICAL TAILED NOON .. ARABIC MATHEMATICAL TAILED AIN 3234 return true; 3235 } 3236 if (codePoint >= 0x1EE51 && codePoint <= 0x1EE52) { // ARABIC MATHEMATICAL TAILED SAD .. ARABIC MATHEMATICAL TAILED QAF 3237 return true; 3238 } 3239 if (codePoint >= 0x1EE54 && codePoint <= 0x1EE54) { // ARABIC MATHEMATICAL TAILED SHEEN .. ARABIC MATHEMATICAL TAILED SHEEN 3240 return true; 3241 } 3242 if (codePoint >= 0x1EE57 && codePoint <= 0x1EE57) { // ARABIC MATHEMATICAL TAILED KHAH .. ARABIC MATHEMATICAL TAILED KHAH 3243 return true; 3244 } 3245 if (codePoint >= 0x1EE59 && codePoint <= 0x1EE59) { // ARABIC MATHEMATICAL TAILED DAD .. ARABIC MATHEMATICAL TAILED DAD 3246 return true; 3247 } 3248 if (codePoint >= 0x1EE5B && codePoint <= 0x1EE5B) { // ARABIC MATHEMATICAL TAILED GHAIN .. ARABIC MATHEMATICAL TAILED GHAIN 3249 return true; 3250 } 3251 if (codePoint >= 0x1EE5D && codePoint <= 0x1EE5D) { // ARABIC MATHEMATICAL TAILED DOTLESS NOON .. ARABIC MATHEMATICAL TAILED DOTLESS NOON 3252 return true; 3253 } 3254 if (codePoint >= 0x1EE5F && codePoint <= 0x1EE5F) { // ARABIC MATHEMATICAL TAILED DOTLESS QAF .. ARABIC MATHEMATICAL TAILED DOTLESS QAF 3255 return true; 3256 } 3257 if (codePoint >= 0x1EE61 && codePoint <= 0x1EE62) { // ARABIC MATHEMATICAL STRETCHED BEH .. ARABIC MATHEMATICAL STRETCHED JEEM 3258 return true; 3259 } 3260 if (codePoint >= 0x1EE64 && codePoint <= 0x1EE64) { // ARABIC MATHEMATICAL STRETCHED HEH .. ARABIC MATHEMATICAL STRETCHED HEH 3261 return true; 3262 } 3263 if (codePoint >= 0x1EE67 && codePoint <= 0x1EE6A) { // ARABIC MATHEMATICAL STRETCHED HAH .. ARABIC MATHEMATICAL STRETCHED KAF 3264 return true; 3265 } 3266 if (codePoint >= 0x1EE6C && codePoint <= 0x1EE72) { // ARABIC MATHEMATICAL STRETCHED MEEM .. ARABIC MATHEMATICAL STRETCHED QAF 3267 return true; 3268 } 3269 if (codePoint >= 0x1EE74 && codePoint <= 0x1EE77) { // ARABIC MATHEMATICAL STRETCHED SHEEN .. ARABIC MATHEMATICAL STRETCHED KHAH 3270 return true; 3271 } 3272 if (codePoint >= 0x1EE79 && codePoint <= 0x1EE7C) { // ARABIC MATHEMATICAL STRETCHED DAD .. ARABIC MATHEMATICAL STRETCHED DOTLESS BEH 3273 return true; 3274 } 3275 if (codePoint >= 0x1EE7E && codePoint <= 0x1EE7E) { // ARABIC MATHEMATICAL STRETCHED DOTLESS FEH .. ARABIC MATHEMATICAL STRETCHED DOTLESS FEH 3276 return true; 3277 } 3278 if (codePoint >= 0x1EE80 && codePoint <= 0x1EE89) { // ARABIC MATHEMATICAL LOOPED ALEF .. ARABIC MATHEMATICAL LOOPED YEH 3279 return true; 3280 } 3281 if (codePoint >= 0x1EE8B && codePoint <= 0x1EE9B) { // ARABIC MATHEMATICAL LOOPED LAM .. ARABIC MATHEMATICAL LOOPED GHAIN 3282 return true; 3283 } 3284 if (codePoint >= 0x1EEA1 && codePoint <= 0x1EEA3) { // ARABIC MATHEMATICAL DOUBLE-STRUCK BEH .. ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 3285 return true; 3286 } 3287 if (codePoint >= 0x1EEA5 && codePoint <= 0x1EEA9) { // ARABIC MATHEMATICAL DOUBLE-STRUCK WAW .. ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 3288 return true; 3289 } 3290 if (codePoint >= 0x1EEAB && codePoint <= 0x1EEBB) { // ARABIC MATHEMATICAL DOUBLE-STRUCK LAM .. ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 3291 return true; 3292 } 3293 if (codePoint >= 0x1FBF0 && codePoint <= 0x1FBF9) { // SEGMENTED DIGIT ZERO .. SEGMENTED DIGIT NINE 3294 return true; 3295 } 3296 if (codePoint >= 0x20000 && codePoint <= 0x2A6DF) { // CJK Ideograph Extension B .. CJK Ideograph Extension B 3297 return true; 3298 } 3299 if (codePoint >= 0x2A700 && codePoint <= 0x2B81D) { // CJK Ideograph Extension C .. CJK Ideograph Extension D 3300 return true; 3301 } 3302 if (codePoint >= 0x2B820 && codePoint <= 0x2CEAD) { // CJK Ideograph Extension E .. CJK Ideograph Extension E 3303 return true; 3304 } 3305 if (codePoint >= 0x2CEB0 && codePoint <= 0x2EBE0) { // CJK Ideograph Extension F .. CJK Ideograph Extension F 3306 return true; 3307 } 3308 if (codePoint >= 0x2EBF0 && codePoint <= 0x2EE5D) { // CJK Ideograph Extension I .. CJK Ideograph Extension I 3309 return true; 3310 } 3311 if (codePoint >= 0x2F800 && codePoint <= 0x2FA1D) { // CJK COMPATIBILITY IDEOGRAPH-2F800 .. CJK COMPATIBILITY IDEOGRAPH-2FA1D 3312 return true; 3313 } 3314 if (codePoint >= 0x30000 && codePoint <= 0x3134A) { // CJK Ideograph Extension G .. CJK Ideograph Extension G 3315 return true; 3316 } 3317 if (codePoint >= 0x31350 && codePoint <= 0x33479) { // CJK Ideograph Extension H .. CJK Ideograph Extension J 3318 return true; 3319 } 3320 if (codePoint >= 0xE0100 && codePoint <= 0xE01EF) { // VARIATION SELECTOR-17 .. VARIATION SELECTOR-256 3321 return true; 3322 } 3323 return false; 3324 } 3325 3326 bool 3327 js::unicode::ChangesWhenUpperCasedSpecialCasing(char16_t ch) 3328 { 3329 if (ch < 0x00DF || ch > 0xFB17) { 3330 return false; 3331 } 3332 if (ch <= 0x0587) { 3333 // U+00DF LATIN SMALL LETTER SHARP S 3334 // U+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N) 3335 // U+01F0 LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK) 3336 // U+0390 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) 3337 // U+03B0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) 3338 // U+0587 ARMENIAN SMALL LIGATURE ECH YIWN 3339 return ch == 0x00DF || ch == 0x0149 || ch == 0x01F0 || ch == 0x0390 || ch == 0x03B0 || 3340 ch == 0x0587; 3341 } 3342 if (ch <= 0x1FFC) { 3343 // U+1E96 LATIN SMALL LETTER H WITH LINE BELOW .. U+1E9A LATIN SMALL LETTER A WITH RIGHT HALF RING 3344 if (ch <= 0x1E9A) { 3345 return ch >= 0x1E96; 3346 } 3347 if (ch < 0x1F50) { 3348 return false; 3349 } 3350 // U+1F50 GREEK SMALL LETTER UPSILON WITH PSILI 3351 // U+1F52 GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 3352 // U+1F54 GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 3353 // U+1F56 GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 3354 // U+1F80 GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI .. U+1FAF GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3355 // U+1FB2 GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI .. U+1FB4 GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 3356 // U+1FB6 GREEK SMALL LETTER ALPHA WITH PERISPOMENI .. U+1FB7 GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 3357 // U+1FBC GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 3358 // U+1FC2 GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI .. U+1FC4 GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 3359 // U+1FC6 GREEK SMALL LETTER ETA WITH PERISPOMENI .. U+1FC7 GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 3360 // U+1FCC GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 3361 // U+1FD2 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA .. U+1FD3 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 3362 // U+1FD6 GREEK SMALL LETTER IOTA WITH PERISPOMENI .. U+1FD7 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 3363 // U+1FE2 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA .. U+1FE4 GREEK SMALL LETTER RHO WITH PSILI 3364 // U+1FE6 GREEK SMALL LETTER UPSILON WITH PERISPOMENI .. U+1FE7 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 3365 // U+1FF2 GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI .. U+1FF4 GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 3366 // U+1FF6 GREEK SMALL LETTER OMEGA WITH PERISPOMENI .. U+1FF7 GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 3367 // U+1FFC GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 3368 return ch == 0x1F50 || ch == 0x1F52 || ch == 0x1F54 || ch == 0x1F56 || 3369 (ch >= 0x1F80 && ch <= 0x1FAF) || (ch >= 0x1FB2 && ch <= 0x1FB4) || 3370 (ch >= 0x1FB6 && ch <= 0x1FB7) || ch == 0x1FBC || (ch >= 0x1FC2 && ch <= 0x1FC4) || 3371 (ch >= 0x1FC6 && ch <= 0x1FC7) || ch == 0x1FCC || (ch >= 0x1FD2 && ch <= 0x1FD3) || 3372 (ch >= 0x1FD6 && ch <= 0x1FD7) || (ch >= 0x1FE2 && ch <= 0x1FE4) || 3373 (ch >= 0x1FE6 && ch <= 0x1FE7) || (ch >= 0x1FF2 && ch <= 0x1FF4) || 3374 (ch >= 0x1FF6 && ch <= 0x1FF7) || ch == 0x1FFC; 3375 } 3376 if (ch < 0xFB00) { 3377 return false; 3378 } 3379 // U+FB00 LATIN SMALL LIGATURE FF .. U+FB06 LATIN SMALL LIGATURE ST 3380 // U+FB13 ARMENIAN SMALL LIGATURE MEN NOW .. U+FB17 ARMENIAN SMALL LIGATURE MEN XEH 3381 return (ch >= 0xFB00 && ch <= 0xFB06) || (ch >= 0xFB13 && ch <= 0xFB17); 3382 } 3383 3384 size_t 3385 js::unicode::LengthUpperCaseSpecialCasing(char16_t ch) 3386 { 3387 switch(ch) { 3388 case 0x00DF: return 2; // LATIN SMALL LETTER SHARP S 3389 case 0x0149: return 2; // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N) 3390 case 0x01F0: return 2; // LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK) 3391 case 0x0390: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) 3392 case 0x03B0: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) 3393 case 0x0587: return 2; // ARMENIAN SMALL LIGATURE ECH YIWN 3394 case 0x1E96: return 2; // LATIN SMALL LETTER H WITH LINE BELOW 3395 case 0x1E97: return 2; // LATIN SMALL LETTER T WITH DIAERESIS 3396 case 0x1E98: return 2; // LATIN SMALL LETTER W WITH RING ABOVE 3397 case 0x1E99: return 2; // LATIN SMALL LETTER Y WITH RING ABOVE 3398 case 0x1E9A: return 2; // LATIN SMALL LETTER A WITH RIGHT HALF RING 3399 case 0x1F50: return 2; // GREEK SMALL LETTER UPSILON WITH PSILI 3400 case 0x1F52: return 3; // GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 3401 case 0x1F54: return 3; // GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 3402 case 0x1F56: return 3; // GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 3403 case 0x1F80: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 3404 case 0x1F81: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 3405 case 0x1F82: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 3406 case 0x1F83: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 3407 case 0x1F84: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 3408 case 0x1F85: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 3409 case 0x1F86: return 2; // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 3410 case 0x1F87: return 2; // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 3411 case 0x1F88: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 3412 case 0x1F89: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 3413 case 0x1F8A: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 3414 case 0x1F8B: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 3415 case 0x1F8C: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 3416 case 0x1F8D: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 3417 case 0x1F8E: return 2; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 3418 case 0x1F8F: return 2; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3419 case 0x1F90: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 3420 case 0x1F91: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 3421 case 0x1F92: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 3422 case 0x1F93: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 3423 case 0x1F94: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 3424 case 0x1F95: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 3425 case 0x1F96: return 2; // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 3426 case 0x1F97: return 2; // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 3427 case 0x1F98: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 3428 case 0x1F99: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 3429 case 0x1F9A: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 3430 case 0x1F9B: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 3431 case 0x1F9C: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 3432 case 0x1F9D: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 3433 case 0x1F9E: return 2; // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 3434 case 0x1F9F: return 2; // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3435 case 0x1FA0: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 3436 case 0x1FA1: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 3437 case 0x1FA2: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 3438 case 0x1FA3: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 3439 case 0x1FA4: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 3440 case 0x1FA5: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 3441 case 0x1FA6: return 2; // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 3442 case 0x1FA7: return 2; // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 3443 case 0x1FA8: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 3444 case 0x1FA9: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 3445 case 0x1FAA: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 3446 case 0x1FAB: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 3447 case 0x1FAC: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 3448 case 0x1FAD: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 3449 case 0x1FAE: return 2; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 3450 case 0x1FAF: return 2; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3451 case 0x1FB2: return 2; // GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 3452 case 0x1FB3: return 2; // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 3453 case 0x1FB4: return 2; // GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 3454 case 0x1FB6: return 2; // GREEK SMALL LETTER ALPHA WITH PERISPOMENI 3455 case 0x1FB7: return 3; // GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 3456 case 0x1FBC: return 2; // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 3457 case 0x1FC2: return 2; // GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 3458 case 0x1FC3: return 2; // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 3459 case 0x1FC4: return 2; // GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 3460 case 0x1FC6: return 2; // GREEK SMALL LETTER ETA WITH PERISPOMENI 3461 case 0x1FC7: return 3; // GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 3462 case 0x1FCC: return 2; // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 3463 case 0x1FD2: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 3464 case 0x1FD3: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 3465 case 0x1FD6: return 2; // GREEK SMALL LETTER IOTA WITH PERISPOMENI 3466 case 0x1FD7: return 3; // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 3467 case 0x1FE2: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 3468 case 0x1FE3: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 3469 case 0x1FE4: return 2; // GREEK SMALL LETTER RHO WITH PSILI 3470 case 0x1FE6: return 2; // GREEK SMALL LETTER UPSILON WITH PERISPOMENI 3471 case 0x1FE7: return 3; // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 3472 case 0x1FF2: return 2; // GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 3473 case 0x1FF3: return 2; // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 3474 case 0x1FF4: return 2; // GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 3475 case 0x1FF6: return 2; // GREEK SMALL LETTER OMEGA WITH PERISPOMENI 3476 case 0x1FF7: return 3; // GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 3477 case 0x1FFC: return 2; // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 3478 case 0xFB00: return 2; // LATIN SMALL LIGATURE FF 3479 case 0xFB01: return 2; // LATIN SMALL LIGATURE FI 3480 case 0xFB02: return 2; // LATIN SMALL LIGATURE FL 3481 case 0xFB03: return 3; // LATIN SMALL LIGATURE FFI 3482 case 0xFB04: return 3; // LATIN SMALL LIGATURE FFL 3483 case 0xFB05: return 2; // LATIN SMALL LIGATURE LONG S T 3484 case 0xFB06: return 2; // LATIN SMALL LIGATURE ST 3485 case 0xFB13: return 2; // ARMENIAN SMALL LIGATURE MEN NOW 3486 case 0xFB14: return 2; // ARMENIAN SMALL LIGATURE MEN ECH 3487 case 0xFB15: return 2; // ARMENIAN SMALL LIGATURE MEN INI 3488 case 0xFB16: return 2; // ARMENIAN SMALL LIGATURE VEW NOW 3489 case 0xFB17: return 2; // ARMENIAN SMALL LIGATURE MEN XEH 3490 } 3491 3492 MOZ_ASSERT_UNREACHABLE("Bad character input."); 3493 return 0; 3494 } 3495 3496 void 3497 js::unicode::AppendUpperCaseSpecialCasing(char16_t ch, char16_t* elements, size_t* index) 3498 { 3499 switch(ch) { 3500 case 0x00DF: // LATIN SMALL LETTER SHARP S 3501 elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S 3502 elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S 3503 return; 3504 case 0x0149: // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N) 3505 elements[(*index)++] = 0x02BC; // MODIFIER LETTER APOSTROPHE 3506 elements[(*index)++] = 0x004E; // LATIN CAPITAL LETTER N 3507 return; 3508 case 0x01F0: // LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK) 3509 elements[(*index)++] = 0x004A; // LATIN CAPITAL LETTER J 3510 elements[(*index)++] = 0x030C; // COMBINING CARON (NON-SPACING HACEK) 3511 return; 3512 case 0x0390: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) 3513 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3514 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3515 elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE) 3516 return; 3517 case 0x03B0: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) 3518 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3519 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3520 elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE) 3521 return; 3522 case 0x0587: // ARMENIAN SMALL LIGATURE ECH YIWN 3523 elements[(*index)++] = 0x0535; // ARMENIAN CAPITAL LETTER ECH 3524 elements[(*index)++] = 0x0552; // ARMENIAN CAPITAL LETTER YIWN 3525 return; 3526 case 0x1E96: // LATIN SMALL LETTER H WITH LINE BELOW 3527 elements[(*index)++] = 0x0048; // LATIN CAPITAL LETTER H 3528 elements[(*index)++] = 0x0331; // COMBINING MACRON BELOW (NON-SPACING MACRON BELOW) 3529 return; 3530 case 0x1E97: // LATIN SMALL LETTER T WITH DIAERESIS 3531 elements[(*index)++] = 0x0054; // LATIN CAPITAL LETTER T 3532 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3533 return; 3534 case 0x1E98: // LATIN SMALL LETTER W WITH RING ABOVE 3535 elements[(*index)++] = 0x0057; // LATIN CAPITAL LETTER W 3536 elements[(*index)++] = 0x030A; // COMBINING RING ABOVE (NON-SPACING RING ABOVE) 3537 return; 3538 case 0x1E99: // LATIN SMALL LETTER Y WITH RING ABOVE 3539 elements[(*index)++] = 0x0059; // LATIN CAPITAL LETTER Y 3540 elements[(*index)++] = 0x030A; // COMBINING RING ABOVE (NON-SPACING RING ABOVE) 3541 return; 3542 case 0x1E9A: // LATIN SMALL LETTER A WITH RIGHT HALF RING 3543 elements[(*index)++] = 0x0041; // LATIN CAPITAL LETTER A 3544 elements[(*index)++] = 0x02BE; // MODIFIER LETTER RIGHT HALF RING 3545 return; 3546 case 0x1F50: // GREEK SMALL LETTER UPSILON WITH PSILI 3547 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3548 elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) 3549 return; 3550 case 0x1F52: // GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA 3551 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3552 elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) 3553 elements[(*index)++] = 0x0300; // COMBINING GRAVE ACCENT (NON-SPACING GRAVE) 3554 return; 3555 case 0x1F54: // GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA 3556 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3557 elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) 3558 elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE) 3559 return; 3560 case 0x1F56: // GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI 3561 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3562 elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) 3563 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3564 return; 3565 case 0x1F80: // GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI 3566 elements[(*index)++] = 0x1F08; // GREEK CAPITAL LETTER ALPHA WITH PSILI 3567 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3568 return; 3569 case 0x1F81: // GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI 3570 elements[(*index)++] = 0x1F09; // GREEK CAPITAL LETTER ALPHA WITH DASIA 3571 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3572 return; 3573 case 0x1F82: // GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI 3574 elements[(*index)++] = 0x1F0A; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA 3575 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3576 return; 3577 case 0x1F83: // GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI 3578 elements[(*index)++] = 0x1F0B; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA 3579 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3580 return; 3581 case 0x1F84: // GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI 3582 elements[(*index)++] = 0x1F0C; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA 3583 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3584 return; 3585 case 0x1F85: // GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI 3586 elements[(*index)++] = 0x1F0D; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA 3587 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3588 return; 3589 case 0x1F86: // GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 3590 elements[(*index)++] = 0x1F0E; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI 3591 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3592 return; 3593 case 0x1F87: // GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 3594 elements[(*index)++] = 0x1F0F; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI 3595 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3596 return; 3597 case 0x1F88: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI 3598 elements[(*index)++] = 0x1F08; // GREEK CAPITAL LETTER ALPHA WITH PSILI 3599 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3600 return; 3601 case 0x1F89: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI 3602 elements[(*index)++] = 0x1F09; // GREEK CAPITAL LETTER ALPHA WITH DASIA 3603 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3604 return; 3605 case 0x1F8A: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI 3606 elements[(*index)++] = 0x1F0A; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA 3607 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3608 return; 3609 case 0x1F8B: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI 3610 elements[(*index)++] = 0x1F0B; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA 3611 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3612 return; 3613 case 0x1F8C: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI 3614 elements[(*index)++] = 0x1F0C; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA 3615 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3616 return; 3617 case 0x1F8D: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI 3618 elements[(*index)++] = 0x1F0D; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA 3619 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3620 return; 3621 case 0x1F8E: // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 3622 elements[(*index)++] = 0x1F0E; // GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI 3623 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3624 return; 3625 case 0x1F8F: // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3626 elements[(*index)++] = 0x1F0F; // GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI 3627 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3628 return; 3629 case 0x1F90: // GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI 3630 elements[(*index)++] = 0x1F28; // GREEK CAPITAL LETTER ETA WITH PSILI 3631 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3632 return; 3633 case 0x1F91: // GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI 3634 elements[(*index)++] = 0x1F29; // GREEK CAPITAL LETTER ETA WITH DASIA 3635 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3636 return; 3637 case 0x1F92: // GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI 3638 elements[(*index)++] = 0x1F2A; // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA 3639 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3640 return; 3641 case 0x1F93: // GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI 3642 elements[(*index)++] = 0x1F2B; // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA 3643 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3644 return; 3645 case 0x1F94: // GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI 3646 elements[(*index)++] = 0x1F2C; // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA 3647 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3648 return; 3649 case 0x1F95: // GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI 3650 elements[(*index)++] = 0x1F2D; // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA 3651 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3652 return; 3653 case 0x1F96: // GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 3654 elements[(*index)++] = 0x1F2E; // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI 3655 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3656 return; 3657 case 0x1F97: // GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 3658 elements[(*index)++] = 0x1F2F; // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI 3659 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3660 return; 3661 case 0x1F98: // GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI 3662 elements[(*index)++] = 0x1F28; // GREEK CAPITAL LETTER ETA WITH PSILI 3663 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3664 return; 3665 case 0x1F99: // GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI 3666 elements[(*index)++] = 0x1F29; // GREEK CAPITAL LETTER ETA WITH DASIA 3667 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3668 return; 3669 case 0x1F9A: // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI 3670 elements[(*index)++] = 0x1F2A; // GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA 3671 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3672 return; 3673 case 0x1F9B: // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI 3674 elements[(*index)++] = 0x1F2B; // GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA 3675 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3676 return; 3677 case 0x1F9C: // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI 3678 elements[(*index)++] = 0x1F2C; // GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA 3679 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3680 return; 3681 case 0x1F9D: // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI 3682 elements[(*index)++] = 0x1F2D; // GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA 3683 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3684 return; 3685 case 0x1F9E: // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 3686 elements[(*index)++] = 0x1F2E; // GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI 3687 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3688 return; 3689 case 0x1F9F: // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3690 elements[(*index)++] = 0x1F2F; // GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI 3691 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3692 return; 3693 case 0x1FA0: // GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI 3694 elements[(*index)++] = 0x1F68; // GREEK CAPITAL LETTER OMEGA WITH PSILI 3695 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3696 return; 3697 case 0x1FA1: // GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI 3698 elements[(*index)++] = 0x1F69; // GREEK CAPITAL LETTER OMEGA WITH DASIA 3699 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3700 return; 3701 case 0x1FA2: // GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI 3702 elements[(*index)++] = 0x1F6A; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA 3703 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3704 return; 3705 case 0x1FA3: // GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI 3706 elements[(*index)++] = 0x1F6B; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA 3707 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3708 return; 3709 case 0x1FA4: // GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI 3710 elements[(*index)++] = 0x1F6C; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA 3711 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3712 return; 3713 case 0x1FA5: // GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI 3714 elements[(*index)++] = 0x1F6D; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA 3715 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3716 return; 3717 case 0x1FA6: // GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI 3718 elements[(*index)++] = 0x1F6E; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI 3719 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3720 return; 3721 case 0x1FA7: // GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI 3722 elements[(*index)++] = 0x1F6F; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI 3723 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3724 return; 3725 case 0x1FA8: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI 3726 elements[(*index)++] = 0x1F68; // GREEK CAPITAL LETTER OMEGA WITH PSILI 3727 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3728 return; 3729 case 0x1FA9: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI 3730 elements[(*index)++] = 0x1F69; // GREEK CAPITAL LETTER OMEGA WITH DASIA 3731 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3732 return; 3733 case 0x1FAA: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI 3734 elements[(*index)++] = 0x1F6A; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA 3735 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3736 return; 3737 case 0x1FAB: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI 3738 elements[(*index)++] = 0x1F6B; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA 3739 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3740 return; 3741 case 0x1FAC: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI 3742 elements[(*index)++] = 0x1F6C; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA 3743 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3744 return; 3745 case 0x1FAD: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI 3746 elements[(*index)++] = 0x1F6D; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA 3747 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3748 return; 3749 case 0x1FAE: // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI 3750 elements[(*index)++] = 0x1F6E; // GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI 3751 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3752 return; 3753 case 0x1FAF: // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI 3754 elements[(*index)++] = 0x1F6F; // GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI 3755 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3756 return; 3757 case 0x1FB2: // GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 3758 elements[(*index)++] = 0x1FBA; // GREEK CAPITAL LETTER ALPHA WITH VARIA 3759 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3760 return; 3761 case 0x1FB3: // GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI 3762 elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA 3763 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3764 return; 3765 case 0x1FB4: // GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI 3766 elements[(*index)++] = 0x0386; // GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS) 3767 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3768 return; 3769 case 0x1FB6: // GREEK SMALL LETTER ALPHA WITH PERISPOMENI 3770 elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA 3771 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3772 return; 3773 case 0x1FB7: // GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI 3774 elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA 3775 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3776 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3777 return; 3778 case 0x1FBC: // GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI 3779 elements[(*index)++] = 0x0391; // GREEK CAPITAL LETTER ALPHA 3780 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3781 return; 3782 case 0x1FC2: // GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI 3783 elements[(*index)++] = 0x1FCA; // GREEK CAPITAL LETTER ETA WITH VARIA 3784 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3785 return; 3786 case 0x1FC3: // GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI 3787 elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA 3788 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3789 return; 3790 case 0x1FC4: // GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI 3791 elements[(*index)++] = 0x0389; // GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS) 3792 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3793 return; 3794 case 0x1FC6: // GREEK SMALL LETTER ETA WITH PERISPOMENI 3795 elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA 3796 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3797 return; 3798 case 0x1FC7: // GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI 3799 elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA 3800 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3801 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3802 return; 3803 case 0x1FCC: // GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI 3804 elements[(*index)++] = 0x0397; // GREEK CAPITAL LETTER ETA 3805 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3806 return; 3807 case 0x1FD2: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA 3808 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3809 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3810 elements[(*index)++] = 0x0300; // COMBINING GRAVE ACCENT (NON-SPACING GRAVE) 3811 return; 3812 case 0x1FD3: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA 3813 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3814 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3815 elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE) 3816 return; 3817 case 0x1FD6: // GREEK SMALL LETTER IOTA WITH PERISPOMENI 3818 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3819 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3820 return; 3821 case 0x1FD7: // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI 3822 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3823 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3824 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3825 return; 3826 case 0x1FE2: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA 3827 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3828 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3829 elements[(*index)++] = 0x0300; // COMBINING GRAVE ACCENT (NON-SPACING GRAVE) 3830 return; 3831 case 0x1FE3: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA 3832 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3833 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3834 elements[(*index)++] = 0x0301; // COMBINING ACUTE ACCENT (NON-SPACING ACUTE) 3835 return; 3836 case 0x1FE4: // GREEK SMALL LETTER RHO WITH PSILI 3837 elements[(*index)++] = 0x03A1; // GREEK CAPITAL LETTER RHO 3838 elements[(*index)++] = 0x0313; // COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) 3839 return; 3840 case 0x1FE6: // GREEK SMALL LETTER UPSILON WITH PERISPOMENI 3841 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3842 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3843 return; 3844 case 0x1FE7: // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI 3845 elements[(*index)++] = 0x03A5; // GREEK CAPITAL LETTER UPSILON 3846 elements[(*index)++] = 0x0308; // COMBINING DIAERESIS (NON-SPACING DIAERESIS) 3847 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3848 return; 3849 case 0x1FF2: // GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI 3850 elements[(*index)++] = 0x1FFA; // GREEK CAPITAL LETTER OMEGA WITH VARIA 3851 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3852 return; 3853 case 0x1FF3: // GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 3854 elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA 3855 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3856 return; 3857 case 0x1FF4: // GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI 3858 elements[(*index)++] = 0x038F; // GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS) 3859 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3860 return; 3861 case 0x1FF6: // GREEK SMALL LETTER OMEGA WITH PERISPOMENI 3862 elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA 3863 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3864 return; 3865 case 0x1FF7: // GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI 3866 elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA 3867 elements[(*index)++] = 0x0342; // COMBINING GREEK PERISPOMENI 3868 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3869 return; 3870 case 0x1FFC: // GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI 3871 elements[(*index)++] = 0x03A9; // GREEK CAPITAL LETTER OMEGA 3872 elements[(*index)++] = 0x0399; // GREEK CAPITAL LETTER IOTA 3873 return; 3874 case 0xFB00: // LATIN SMALL LIGATURE FF 3875 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3876 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3877 return; 3878 case 0xFB01: // LATIN SMALL LIGATURE FI 3879 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3880 elements[(*index)++] = 0x0049; // LATIN CAPITAL LETTER I 3881 return; 3882 case 0xFB02: // LATIN SMALL LIGATURE FL 3883 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3884 elements[(*index)++] = 0x004C; // LATIN CAPITAL LETTER L 3885 return; 3886 case 0xFB03: // LATIN SMALL LIGATURE FFI 3887 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3888 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3889 elements[(*index)++] = 0x0049; // LATIN CAPITAL LETTER I 3890 return; 3891 case 0xFB04: // LATIN SMALL LIGATURE FFL 3892 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3893 elements[(*index)++] = 0x0046; // LATIN CAPITAL LETTER F 3894 elements[(*index)++] = 0x004C; // LATIN CAPITAL LETTER L 3895 return; 3896 case 0xFB05: // LATIN SMALL LIGATURE LONG S T 3897 elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S 3898 elements[(*index)++] = 0x0054; // LATIN CAPITAL LETTER T 3899 return; 3900 case 0xFB06: // LATIN SMALL LIGATURE ST 3901 elements[(*index)++] = 0x0053; // LATIN CAPITAL LETTER S 3902 elements[(*index)++] = 0x0054; // LATIN CAPITAL LETTER T 3903 return; 3904 case 0xFB13: // ARMENIAN SMALL LIGATURE MEN NOW 3905 elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN 3906 elements[(*index)++] = 0x0546; // ARMENIAN CAPITAL LETTER NOW 3907 return; 3908 case 0xFB14: // ARMENIAN SMALL LIGATURE MEN ECH 3909 elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN 3910 elements[(*index)++] = 0x0535; // ARMENIAN CAPITAL LETTER ECH 3911 return; 3912 case 0xFB15: // ARMENIAN SMALL LIGATURE MEN INI 3913 elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN 3914 elements[(*index)++] = 0x053B; // ARMENIAN CAPITAL LETTER INI 3915 return; 3916 case 0xFB16: // ARMENIAN SMALL LIGATURE VEW NOW 3917 elements[(*index)++] = 0x054E; // ARMENIAN CAPITAL LETTER VEW 3918 elements[(*index)++] = 0x0546; // ARMENIAN CAPITAL LETTER NOW 3919 return; 3920 case 0xFB17: // ARMENIAN SMALL LIGATURE MEN XEH 3921 elements[(*index)++] = 0x0544; // ARMENIAN CAPITAL LETTER MEN 3922 elements[(*index)++] = 0x053D; // ARMENIAN CAPITAL LETTER XEH 3923 return; 3924 } 3925 3926 MOZ_ASSERT_UNREACHABLE("Bad character input."); 3927 } 3928 3929 #define ____ false 3930 3931 /* 3932 * Identifier start chars: 3933 * - 36: $ 3934 * - 65..90: A..Z 3935 * - 95: _ 3936 * - 97..122: a..z 3937 */ 3938 const bool unicode::js_isidstart[] = { 3939 /* 0 1 2 3 4 5 6 7 8 9 */ 3940 /* 0 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3941 /* 1 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3942 /* 2 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3943 /* 3 */ ____, ____, ____, ____, ____, ____, true, ____, ____, ____, 3944 /* 4 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3945 /* 5 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3946 /* 6 */ ____, ____, ____, ____, ____, true, true, true, true, true, 3947 /* 7 */ true, true, true, true, true, true, true, true, true, true, 3948 /* 8 */ true, true, true, true, true, true, true, true, true, true, 3949 /* 9 */ true, ____, ____, ____, ____, true, ____, true, true, true, 3950 /* 10 */ true, true, true, true, true, true, true, true, true, true, 3951 /* 11 */ true, true, true, true, true, true, true, true, true, true, 3952 /* 12 */ true, true, true, ____, ____, ____, ____, ____, 3953 }; 3954 3955 /* 3956 * Identifier chars: 3957 * - 36: $ 3958 * - 48..57: 0..9 3959 * - 65..90: A..Z 3960 * - 95: _ 3961 * - 97..122: a..z 3962 */ 3963 const bool unicode::js_isident[] = { 3964 /* 0 1 2 3 4 5 6 7 8 9 */ 3965 /* 0 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3966 /* 1 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3967 /* 2 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3968 /* 3 */ ____, ____, ____, ____, ____, ____, true, ____, ____, ____, 3969 /* 4 */ ____, ____, ____, ____, ____, ____, ____, ____, true, true, 3970 /* 5 */ true, true, true, true, true, true, true, true, ____, ____, 3971 /* 6 */ ____, ____, ____, ____, ____, true, true, true, true, true, 3972 /* 7 */ true, true, true, true, true, true, true, true, true, true, 3973 /* 8 */ true, true, true, true, true, true, true, true, true, true, 3974 /* 9 */ true, ____, ____, ____, ____, true, ____, true, true, true, 3975 /* 10 */ true, true, true, true, true, true, true, true, true, true, 3976 /* 11 */ true, true, true, true, true, true, true, true, true, true, 3977 /* 12 */ true, true, true, ____, ____, ____, ____, ____, 3978 }; 3979 3980 /* Whitespace chars: '\t', '\n', '\v', '\f', '\r', ' '. */ 3981 const bool unicode::js_isspace[] = { 3982 /* 0 1 2 3 4 5 6 7 8 9 */ 3983 /* 0 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, true, 3984 /* 1 */ true, true, true, true, ____, ____, ____, ____, ____, ____, 3985 /* 2 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3986 /* 3 */ ____, ____, true, ____, ____, ____, ____, ____, ____, ____, 3987 /* 4 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3988 /* 5 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3989 /* 6 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3990 /* 7 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3991 /* 8 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3992 /* 9 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3993 /* 10 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3994 /* 11 */ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, 3995 /* 12 */ ____, ____, ____, ____, ____, ____, ____, ____, 3996 }; 3997 3998 #undef ____ 3999 4000 const JS::Latin1Char unicode::latin1ToLowerCaseTable[] = { 4001 /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ 4002 /* 0 */ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 4003 /* 1 */ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 4004 /* 2 */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 4005 /* 3 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 4006 /* 4 */ 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 4007 /* 5 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 4008 /* 6 */ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 4009 /* 7 */ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 4010 /* 8 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 4011 /* 9 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 4012 /* 10 */ 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 4013 /* 11 */ 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 4014 /* 12 */ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 4015 /* 13 */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xD7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF, 4016 /* 14 */ 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 4017 /* 15 */ 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF, 4018 };