Coverage Report

Created: 2026-01-17 06:41

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cmark/src/utf8.c
Line
Count
Source
1
#include <stdlib.h>
2
#include <stdint.h>
3
#include <assert.h>
4
5
#include "cmark_ctype.h"
6
#include "utf8.h"
7
8
static const int8_t utf8proc_utf8class[256] = {
9
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
10
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
11
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
12
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
13
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
14
    1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
18
    2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
19
    4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0};
20
21
4.26M
static void encode_unknown(cmark_strbuf *buf) {
22
4.26M
  static const uint8_t repl[] = {239, 191, 189};
23
4.26M
  cmark_strbuf_put(buf, repl, 3);
24
4.26M
}
25
26
264M
static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) {
27
264M
  int length, i;
28
29
264M
  if (!str_len)
30
312
    return 0;
31
32
264M
  length = utf8proc_utf8class[str[0]];
33
34
264M
  if (!length)
35
404k
    return -1;
36
37
263M
  if (str_len >= 0 && (bufsize_t)length > str_len)
38
9.61k
    return -str_len;
39
40
470M
  for (i = 1; i < length; i++) {
41
206M
    if ((str[i] & 0xC0) != 0x80)
42
166k
      return -i;
43
206M
  }
44
45
263M
  return length;
46
263M
}
47
48
// Validate a single UTF-8 character according to RFC 3629.
49
53.7M
static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) {
50
53.7M
  int length = utf8proc_utf8class[str[0]];
51
52
53.7M
  if (!length)
53
2.77M
    return -1;
54
55
50.9M
  if ((bufsize_t)length > str_len)
56
10.0k
    return -str_len;
57
58
50.9M
  switch (length) {
59
792k
  case 2:
60
792k
    if ((str[1] & 0xC0) != 0x80)
61
662k
      return -1;
62
129k
    if (str[0] < 0xC2) {
63
      // Overlong
64
7.26k
      return -length;
65
7.26k
    }
66
122k
    break;
67
68
50.0M
  case 3:
69
50.0M
    if ((str[1] & 0xC0) != 0x80)
70
399k
      return -1;
71
49.6M
    if ((str[2] & 0xC0) != 0x80)
72
48.2k
      return -2;
73
49.5M
    if (str[0] == 0xE0) {
74
1.19k
      if (str[1] < 0xA0) {
75
        // Overlong
76
594
        return -length;
77
594
      }
78
49.5M
    } else if (str[0] == 0xED) {
79
1.05k
      if (str[1] >= 0xA0) {
80
        // Surrogate
81
536
        return -length;
82
536
      }
83
1.05k
    }
84
49.5M
    break;
85
86
49.5M
  case 4:
87
171k
    if ((str[1] & 0xC0) != 0x80)
88
126k
      return -1;
89
44.5k
    if ((str[2] & 0xC0) != 0x80)
90
24.6k
      return -2;
91
19.8k
    if ((str[3] & 0xC0) != 0x80)
92
6.82k
      return -3;
93
13.0k
    if (str[0] == 0xF0) {
94
5.70k
      if (str[1] < 0x90) {
95
        // Overlong
96
48
        return -length;
97
48
      }
98
7.36k
    } else if (str[0] >= 0xF4) {
99
1.08k
      if (str[0] > 0xF4 || str[1] >= 0x90) {
100
        // Above 0x10FFFF
101
999
        return -length;
102
999
      }
103
1.08k
    }
104
12.0k
    break;
105
50.9M
  }
106
107
49.7M
  return length;
108
50.9M
}
109
110
void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line,
111
594k
                          bufsize_t size) {
112
594k
  bufsize_t i = 0;
113
114
4.65M
  while (i < size) {
115
4.63M
    bufsize_t org = i;
116
4.63M
    int charlen = 0;
117
118
68.0M
    while (i < size) {
119
67.4M
      if (line[i] < 0x80 && line[i] != 0) {
120
13.7M
        i++;
121
53.7M
      } else if (line[i] >= 0x80) {
122
53.7M
        charlen = utf8proc_valid(line + i, size - i);
123
53.7M
        if (charlen < 0) {
124
4.06M
          charlen = -charlen;
125
4.06M
          break;
126
4.06M
        }
127
49.7M
        i += charlen;
128
49.7M
      } else if (line[i] == 0) {
129
        // ASCII NUL is technically valid but rejected
130
        // for security reasons.
131
0
        charlen = 1;
132
0
        break;
133
0
      }
134
67.4M
    }
135
136
4.63M
    if (i > org) {
137
1.91M
      cmark_strbuf_put(ob, line + org, i - org);
138
1.91M
    }
139
140
4.63M
    if (i >= size) {
141
572k
      break;
142
4.06M
    } else {
143
      // Invalid UTF-8
144
4.06M
      encode_unknown(ob);
145
4.06M
      i += charlen;
146
4.06M
    }
147
4.63M
  }
148
594k
}
149
150
int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len,
151
264M
                           int32_t *dst) {
152
264M
  int length;
153
264M
  int32_t uc = -1;
154
155
264M
  *dst = -1;
156
264M
  length = utf8proc_charlen(str, str_len);
157
264M
  if (length < 0)
158
580k
    return -1;
159
160
263M
  switch (length) {
161
160M
  case 1:
162
160M
    uc = str[0];
163
160M
    break;
164
388k
  case 2:
165
388k
    uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
166
388k
    if (uc < 0x80)
167
1.39k
      uc = -1;
168
388k
    break;
169
103M
  case 3:
170
103M
    uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F);
171
103M
    if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000))
172
163
      uc = -1;
173
103M
    break;
174
97.6k
  case 4:
175
97.6k
    uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) +
176
97.6k
         ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
177
97.6k
    if (uc < 0x10000 || uc >= 0x110000)
178
205
      uc = -1;
179
97.6k
    break;
180
263M
  }
181
182
263M
  if (uc < 0)
183
2.07k
    return -1;
184
185
263M
  *dst = uc;
186
263M
  return length;
187
263M
}
188
189
258M
void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
190
258M
  uint8_t dst[4];
191
258M
  bufsize_t len = 0;
192
193
258M
  assert(uc >= 0);
194
195
258M
  if (uc < 0x80) {
196
155M
    dst[0] = (uint8_t)(uc);
197
155M
    len = 1;
198
155M
  } else if (uc < 0x800) {
199
367k
    dst[0] = (uint8_t)(0xC0 + (uc >> 6));
200
367k
    dst[1] = 0x80 + (uc & 0x3F);
201
367k
    len = 2;
202
102M
  } else if (uc < 0x10000) {
203
102M
    dst[0] = (uint8_t)(0xE0 + (uc >> 12));
204
102M
    dst[1] = 0x80 + ((uc >> 6) & 0x3F);
205
102M
    dst[2] = 0x80 + (uc & 0x3F);
206
102M
    len = 3;
207
102M
  } else if (uc < 0x110000) {
208
94.6k
    dst[0] = (uint8_t)(0xF0 + (uc >> 18));
209
94.6k
    dst[1] = 0x80 + ((uc >> 12) & 0x3F);
210
94.6k
    dst[2] = 0x80 + ((uc >> 6) & 0x3F);
211
94.6k
    dst[3] = 0x80 + (uc & 0x3F);
212
94.6k
    len = 4;
213
94.6k
  } else {
214
0
    encode_unknown(buf);
215
0
    return;
216
0
  }
217
218
258M
  cmark_strbuf_put(buf, dst, len);
219
258M
}
220
221
#include "case_fold.inc"
222
223
1.07M
int cf_compare(const void *v1, const void *v2) {
224
1.07M
  uint32_t entry1 = *(uint32_t *) v1;
225
1.07M
  uint32_t entry2 = *(uint32_t *) v2;
226
227
1.07M
  return (int32_t) CF_CODE_POINT(entry1) - (int32_t) CF_CODE_POINT(entry2);
228
1.07M
}
229
230
void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
231
13.4k
                              bufsize_t len) {
232
13.4k
  int32_t c;
233
234
691k
  while (len > 0) {
235
677k
    bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c);
236
237
677k
    if (char_len == 1) {
238
364k
      if (c >= 'A' && c <= 'Z')
239
75.8k
        c += 'a' - 'A';
240
364k
      cmark_strbuf_putc(dest, c);
241
364k
    } else if (c >= CF_MAX) {
242
753
        cmark_strbuf_put(dest, str, char_len);
243
312k
    } else if (char_len >= 0) {
244
106k
      uint32_t key = c;
245
106k
      uint32_t *entry = bsearch(&key, cf_table,
246
106k
                                CF_TABLE_SIZE, sizeof(uint32_t),
247
106k
                                cf_compare);
248
106k
      if (entry == NULL) {
249
92.5k
        cmark_strbuf_put(dest, str, char_len);
250
92.5k
      } else {
251
14.2k
        cmark_strbuf_put(dest, cf_repl + CF_REPL_IDX(*entry),
252
14.2k
                         CF_REPL_SIZE(*entry));
253
14.2k
      }
254
205k
    } else {
255
205k
      encode_unknown(dest);
256
205k
      char_len = -char_len;
257
205k
    }
258
259
677k
    str += char_len;
260
677k
    len -= char_len;
261
677k
  }
262
13.4k
}
263
264
// matches anything in the Zs class, plus LF, CR, TAB, FF.
265
868k
int cmark_utf8proc_is_space(int32_t uc) {
266
868k
  return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 ||
267
837k
          uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 ||
268
837k
          uc == 8287 || uc == 12288);
269
868k
}
270
271
// matches anything in the P or S classes.
272
861k
int cmark_utf8proc_is_punctuation_or_symbol(int32_t uc) {
273
861k
  if (uc < 128) {
274
791k
    return cmark_ispunct((char)uc);
275
791k
  } else {
276
70.4k
    return (
277
70.4k
        uc > 128 &&
278
70.4k
        ((uc >= 161 && uc <= 169) || (uc >= 171 && uc <= 172) ||
279
70.4k
         (uc >= 174 && uc <= 177) || (uc == 180) || (uc >= 182 && uc <= 184) ||
280
70.4k
         (uc == 187) || (uc == 191) || (uc == 215) || (uc == 247) ||
281
70.4k
         (uc >= 706 && uc <= 709) || (uc >= 722 && uc <= 735) ||
282
70.3k
         (uc >= 741 && uc <= 747) || (uc == 749) || (uc >= 751 && uc <= 767) ||
283
70.3k
         (uc == 885) || (uc == 894) || (uc >= 900 && uc <= 901) ||
284
70.3k
         (uc == 903) || (uc == 1014) || (uc == 1154) ||
285
70.3k
         (uc >= 1370 && uc <= 1375) || (uc >= 1417 && uc <= 1418) ||
286
70.3k
         (uc >= 1421 && uc <= 1423) || (uc == 1470) || (uc == 1472) ||
287
70.3k
         (uc == 1475) || (uc == 1478) || (uc >= 1523 && uc <= 1524) ||
288
70.3k
         (uc >= 1542 && uc <= 1551) || (uc == 1563) ||
289
69.9k
         (uc >= 1565 && uc <= 1567) || (uc >= 1642 && uc <= 1645) ||
290
69.9k
         (uc == 1748) || (uc == 1758) || (uc == 1769) ||
291
69.9k
         (uc >= 1789 && uc <= 1790) || (uc >= 1792 && uc <= 1805) ||
292
69.9k
         (uc >= 2038 && uc <= 2041) || (uc >= 2046 && uc <= 2047) ||
293
69.9k
         (uc >= 2096 && uc <= 2110) || (uc == 2142) || (uc == 2184) ||
294
69.9k
         (uc >= 2404 && uc <= 2405) || (uc == 2416) ||
295
69.9k
         (uc >= 2546 && uc <= 2547) || (uc >= 2554 && uc <= 2555) ||
296
69.9k
         (uc == 2557) || (uc == 2678) || (uc >= 2800 && uc <= 2801) ||
297
69.9k
         (uc == 2928) || (uc >= 3059 && uc <= 3066) || (uc == 3191) ||
298
69.9k
         (uc == 3199) || (uc == 3204) || (uc == 3407) || (uc == 3449) ||
299
69.9k
         (uc == 3572) || (uc == 3647) || (uc == 3663) ||
300
69.9k
         (uc >= 3674 && uc <= 3675) || (uc >= 3841 && uc <= 3863) ||
301
69.9k
         (uc >= 3866 && uc <= 3871) || (uc == 3892) || (uc == 3894) ||
302
69.9k
         (uc == 3896) || (uc >= 3898 && uc <= 3901) || (uc == 3973) ||
303
69.9k
         (uc >= 4030 && uc <= 4037) || (uc >= 4039 && uc <= 4044) ||
304
69.9k
         (uc >= 4046 && uc <= 4058) || (uc >= 4170 && uc <= 4175) ||
305
69.9k
         (uc >= 4254 && uc <= 4255) || (uc == 4347) ||
306
69.9k
         (uc >= 4960 && uc <= 4968) || (uc >= 5008 && uc <= 5017) ||
307
68.8k
         (uc == 5120) || (uc >= 5741 && uc <= 5742) ||
308
68.8k
         (uc >= 5787 && uc <= 5788) || (uc >= 5867 && uc <= 5869) ||
309
68.8k
         (uc >= 5941 && uc <= 5942) || (uc >= 6100 && uc <= 6102) ||
310
68.8k
         (uc >= 6104 && uc <= 6107) || (uc >= 6144 && uc <= 6154) ||
311
68.7k
         (uc == 6464) || (uc >= 6468 && uc <= 6469) ||
312
68.7k
         (uc >= 6622 && uc <= 6655) || (uc >= 6686 && uc <= 6687) ||
313
68.7k
         (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) ||
314
68.7k
         (uc >= 7002 && uc <= 7018) || (uc >= 7028 && uc <= 7038) ||
315
68.7k
         (uc >= 7164 && uc <= 7167) || (uc >= 7227 && uc <= 7231) ||
316
68.6k
         (uc >= 7294 && uc <= 7295) || (uc >= 7360 && uc <= 7367) ||
317
68.6k
         (uc == 7379) || (uc == 8125) || (uc >= 8127 && uc <= 8129) ||
318
68.6k
         (uc >= 8141 && uc <= 8143) || (uc >= 8157 && uc <= 8159) ||
319
68.6k
         (uc >= 8173 && uc <= 8175) || (uc >= 8189 && uc <= 8190) ||
320
68.6k
         (uc >= 8208 && uc <= 8231) || (uc >= 8240 && uc <= 8286) ||
321
68.6k
         (uc >= 8314 && uc <= 8318) || (uc >= 8330 && uc <= 8334) ||
322
68.6k
         (uc >= 8352 && uc <= 8384) || (uc >= 8448 && uc <= 8449) ||
323
68.6k
         (uc >= 8451 && uc <= 8454) || (uc >= 8456 && uc <= 8457) ||
324
68.5k
         (uc == 8468) || (uc >= 8470 && uc <= 8472) ||
325
68.5k
         (uc >= 8478 && uc <= 8483) || (uc == 8485) || (uc == 8487) ||
326
68.5k
         (uc == 8489) || (uc == 8494) || (uc >= 8506 && uc <= 8507) ||
327
68.5k
         (uc >= 8512 && uc <= 8516) || (uc >= 8522 && uc <= 8525) ||
328
67.9k
         (uc == 8527) || (uc >= 8586 && uc <= 8587) ||
329
67.9k
         (uc >= 8592 && uc <= 9254) || (uc >= 9280 && uc <= 9290) ||
330
67.9k
         (uc >= 9372 && uc <= 9449) || (uc >= 9472 && uc <= 10101) ||
331
67.9k
         (uc >= 10132 && uc <= 11123) || (uc >= 11126 && uc <= 11157) ||
332
67.8k
         (uc >= 11159 && uc <= 11263) || (uc >= 11493 && uc <= 11498) ||
333
67.8k
         (uc >= 11513 && uc <= 11516) || (uc >= 11518 && uc <= 11519) ||
334
67.8k
         (uc == 11632) || (uc >= 11776 && uc <= 11822) ||
335
67.8k
         (uc >= 11824 && uc <= 11869) || (uc >= 11904 && uc <= 11929) ||
336
67.8k
         (uc >= 11931 && uc <= 12019) || (uc >= 12032 && uc <= 12245) ||
337
67.8k
         (uc >= 12272 && uc <= 12283) || (uc >= 12289 && uc <= 12292) ||
338
67.8k
         (uc >= 12296 && uc <= 12320) || (uc == 12336) ||
339
67.6k
         (uc >= 12342 && uc <= 12343) || (uc >= 12349 && uc <= 12351) ||
340
67.6k
         (uc >= 12443 && uc <= 12444) || (uc == 12448) || (uc == 12539) ||
341
67.5k
         (uc >= 12688 && uc <= 12689) || (uc >= 12694 && uc <= 12703) ||
342
67.5k
         (uc >= 12736 && uc <= 12771) || (uc >= 12800 && uc <= 12830) ||
343
67.5k
         (uc >= 12842 && uc <= 12871) || (uc == 12880) ||
344
67.5k
         (uc >= 12896 && uc <= 12927) || (uc >= 12938 && uc <= 12976) ||
345
67.5k
         (uc >= 12992 && uc <= 13311) || (uc >= 19904 && uc <= 19967) ||
346
67.5k
         (uc >= 42128 && uc <= 42182) || (uc >= 42238 && uc <= 42239) ||
347
67.2k
         (uc >= 42509 && uc <= 42511) || (uc == 42611) || (uc == 42622) ||
348
67.2k
         (uc >= 42738 && uc <= 42743) || (uc >= 42752 && uc <= 42774) ||
349
67.2k
         (uc >= 42784 && uc <= 42785) || (uc >= 42889 && uc <= 42890) ||
350
67.2k
         (uc >= 43048 && uc <= 43051) || (uc >= 43062 && uc <= 43065) ||
351
67.2k
         (uc >= 43124 && uc <= 43127) || (uc >= 43214 && uc <= 43215) ||
352
67.2k
         (uc >= 43256 && uc <= 43258) || (uc == 43260) ||
353
67.2k
         (uc >= 43310 && uc <= 43311) || (uc == 43359) ||
354
67.2k
         (uc >= 43457 && uc <= 43469) || (uc >= 43486 && uc <= 43487) ||
355
67.2k
         (uc >= 43612 && uc <= 43615) || (uc >= 43639 && uc <= 43641) ||
356
67.2k
         (uc >= 43742 && uc <= 43743) || (uc >= 43760 && uc <= 43761) ||
357
67.2k
         (uc == 43867) || (uc >= 43882 && uc <= 43883) || (uc == 44011) ||
358
67.2k
         (uc == 64297) || (uc >= 64434 && uc <= 64450) ||
359
67.2k
         (uc >= 64830 && uc <= 64847) || (uc == 64975) ||
360
67.2k
         (uc >= 65020 && uc <= 65023) || (uc >= 65040 && uc <= 65049) ||
361
67.2k
         (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65126) ||
362
67.2k
         (uc >= 65128 && uc <= 65131) || (uc >= 65281 && uc <= 65295) ||
363
67.2k
         (uc >= 65306 && uc <= 65312) || (uc >= 65339 && uc <= 65344) ||
364
67.1k
         (uc >= 65371 && uc <= 65381) || (uc >= 65504 && uc <= 65510) ||
365
67.1k
         (uc >= 65512 && uc <= 65518) || (uc >= 65532 && uc <= 65533) ||
366
10.4k
         (uc >= 65792 && uc <= 65794) || (uc >= 65847 && uc <= 65855) ||
367
10.4k
         (uc >= 65913 && uc <= 65929) || (uc >= 65932 && uc <= 65934) ||
368
10.4k
         (uc >= 65936 && uc <= 65948) || (uc == 65952) ||
369
10.4k
         (uc >= 66000 && uc <= 66044) || (uc == 66463) || (uc == 66512) ||
370
10.4k
         (uc == 66927) || (uc == 67671) || (uc >= 67703 && uc <= 67704) ||
371
10.4k
         (uc == 67871) || (uc == 67903) || (uc >= 68176 && uc <= 68184) ||
372
10.4k
         (uc == 68223) || (uc == 68296) || (uc >= 68336 && uc <= 68342) ||
373
8.80k
         (uc >= 68409 && uc <= 68415) || (uc >= 68505 && uc <= 68508) ||
374
8.80k
         (uc == 69293) || (uc >= 69461 && uc <= 69465) ||
375
8.80k
         (uc >= 69510 && uc <= 69513) || (uc >= 69703 && uc <= 69709) ||
376
8.80k
         (uc >= 69819 && uc <= 69820) || (uc >= 69822 && uc <= 69825) ||
377
8.80k
         (uc >= 69952 && uc <= 69955) || (uc >= 70004 && uc <= 70005) ||
378
8.80k
         (uc >= 70085 && uc <= 70088) || (uc == 70093) || (uc == 70107) ||
379
8.80k
         (uc >= 70109 && uc <= 70111) || (uc >= 70200 && uc <= 70205) ||
380
8.80k
         (uc == 70313) || (uc >= 70731 && uc <= 70735) ||
381
8.80k
         (uc >= 70746 && uc <= 70747) || (uc == 70749) || (uc == 70854) ||
382
8.80k
         (uc >= 71105 && uc <= 71127) || (uc >= 71233 && uc <= 71235) ||
383
8.80k
         (uc >= 71264 && uc <= 71276) || (uc == 71353) ||
384
8.80k
         (uc >= 71484 && uc <= 71487) || (uc == 71739) ||
385
8.79k
         (uc >= 72004 && uc <= 72006) || (uc == 72162) ||
386
8.73k
         (uc >= 72255 && uc <= 72262) || (uc >= 72346 && uc <= 72348) ||
387
8.73k
         (uc >= 72350 && uc <= 72354) || (uc >= 72448 && uc <= 72457) ||
388
8.73k
         (uc >= 72769 && uc <= 72773) || (uc >= 72816 && uc <= 72817) ||
389
8.73k
         (uc >= 73463 && uc <= 73464) || (uc >= 73539 && uc <= 73551) ||
390
8.73k
         (uc >= 73685 && uc <= 73713) || (uc == 73727) ||
391
8.73k
         (uc >= 74864 && uc <= 74868) || (uc >= 77809 && uc <= 77810) ||
392
8.73k
         (uc >= 92782 && uc <= 92783) || (uc == 92917) ||
393
8.73k
         (uc >= 92983 && uc <= 92991) || (uc >= 92996 && uc <= 92997) ||
394
8.73k
         (uc >= 93847 && uc <= 93850) || (uc == 94178) || (uc == 113820) ||
395
8.71k
         (uc == 113823) || (uc >= 118608 && uc <= 118723) ||
396
8.71k
         (uc >= 118784 && uc <= 119029) || (uc >= 119040 && uc <= 119078) ||
397
8.71k
         (uc >= 119081 && uc <= 119140) || (uc >= 119146 && uc <= 119148) ||
398
8.71k
         (uc >= 119171 && uc <= 119172) || (uc >= 119180 && uc <= 119209) ||
399
8.71k
         (uc >= 119214 && uc <= 119274) || (uc >= 119296 && uc <= 119361) ||
400
8.71k
         (uc == 119365) || (uc >= 119552 && uc <= 119638) || (uc == 120513) ||
401
8.70k
         (uc == 120539) || (uc == 120571) || (uc == 120597) || (uc == 120629) ||
402
8.70k
         (uc == 120655) || (uc == 120687) || (uc == 120713) || (uc == 120745) ||
403
8.70k
         (uc == 120771) || (uc >= 120832 && uc <= 121343) ||
404
8.70k
         (uc >= 121399 && uc <= 121402) || (uc >= 121453 && uc <= 121460) ||
405
8.01k
         (uc >= 121462 && uc <= 121475) || (uc >= 121477 && uc <= 121483) ||
406
8.01k
         (uc == 123215) || (uc == 123647) || (uc >= 125278 && uc <= 125279) ||
407
8.01k
         (uc == 126124) || (uc == 126128) || (uc == 126254) ||
408
8.01k
         (uc >= 126704 && uc <= 126705) || (uc >= 126976 && uc <= 127019) ||
409
8.01k
         (uc >= 127024 && uc <= 127123) || (uc >= 127136 && uc <= 127150) ||
410
8.01k
         (uc >= 127153 && uc <= 127167) || (uc >= 127169 && uc <= 127183) ||
411
8.01k
         (uc >= 127185 && uc <= 127221) || (uc >= 127245 && uc <= 127405) ||
412
8.00k
         (uc >= 127462 && uc <= 127490) || (uc >= 127504 && uc <= 127547) ||
413
8.00k
         (uc >= 127552 && uc <= 127560) || (uc >= 127568 && uc <= 127569) ||
414
8.00k
         (uc >= 127584 && uc <= 127589) || (uc >= 127744 && uc <= 128727) ||
415
7.98k
         (uc >= 128732 && uc <= 128748) || (uc >= 128752 && uc <= 128764) ||
416
7.98k
         (uc >= 128768 && uc <= 128886) || (uc >= 128891 && uc <= 128985) ||
417
7.46k
         (uc >= 128992 && uc <= 129003) || (uc == 129008) ||
418
7.46k
         (uc >= 129024 && uc <= 129035) || (uc >= 129040 && uc <= 129095) ||
419
7.46k
         (uc >= 129104 && uc <= 129113) || (uc >= 129120 && uc <= 129159) ||
420
7.46k
         (uc >= 129168 && uc <= 129197) || (uc >= 129200 && uc <= 129201) ||
421
7.46k
         (uc >= 129280 && uc <= 129619) || (uc >= 129632 && uc <= 129645) ||
422
7.46k
         (uc >= 129648 && uc <= 129660) || (uc >= 129664 && uc <= 129672) ||
423
7.46k
         (uc >= 129680 && uc <= 129725) || (uc >= 129727 && uc <= 129733) ||
424
7.46k
         (uc >= 129742 && uc <= 129755) || (uc >= 129760 && uc <= 129768) ||
425
7.46k
         (uc >= 129776 && uc <= 129784) || (uc >= 129792 && uc <= 129938) ||
426
7.46k
         (uc >= 129940 && uc <= 129994)));
427
70.4k
  }
428
861k
}