1 /*
2  * Do not edit this file!
3  * This file is generated from:
4  *    UnicodeData.txt (version 6.3.0)
5  *    DerivedCoreProperties.txt (version 6.3.0)
6  */
7 
8 #include <stddef.h>
9 #include <idn/utf32.h>
10 #include <idn/auto/combiningclass.h>
11 
12 /*
13  * Canonical combining class tables.
14  */
15 #define COMBININGCLASS_BITS_0	9
16 #define COMBININGCLASS_BITS_1	7
17 #define COMBININGCLASS_BITS_2	5
18 
19 static const unsigned short combiningclass_imap[] = {
20 	  272,   400,   528,   656,   784,   784,   784,   784,
21 	  784,   784,   912,   784,   784,   784,   784,  1040,
22 	 1168,  1296,   784,   784,   784,   784,   784,   784,
23 	  784,   784,   784,   784,   784,  1424,   784,   784,
24 	  784,   784,   784,   784,   784,   784,   784,   784,
25 	  784,   784,   784,   784,   784,   784,   784,   784,
26 	  784,   784,   784,   784,   784,   784,   784,   784,
27 	  784,   784,   784,   784,   784,   784,   784,   784,
28 	  784,   784,   784,   784,   784,   784,   784,   784,
29 	  784,   784,   784,   784,   784,   784,   784,   784,
30 	  784,   784,   784,   784,   784,   784,   784,   784,
31 	  784,   784,   784,   784,   784,   784,   784,   784,
32 	  784,   784,   784,   784,   784,   784,   784,   784,
33 	  784,   784,   784,   784,   784,   784,   784,   784,
34 	  784,   784,   784,   784,   784,   784,   784,   784,
35 	  784,   784,   784,   784,   784,   784,   784,   784,
36 	  784,   784,   784,   784,   784,   784,   784,   784,
37 	  784,   784,   784,   784,   784,   784,   784,   784,
38 	  784,   784,   784,   784,   784,   784,   784,   784,
39 	  784,   784,   784,   784,   784,   784,   784,   784,
40 	  784,   784,   784,   784,   784,   784,   784,   784,
41 	  784,   784,   784,   784,   784,   784,   784,   784,
42 	  784,   784,   784,   784,   784,   784,   784,   784,
43 	  784,   784,   784,   784,   784,   784,   784,   784,
44 	  784,   784,   784,   784,   784,   784,   784,   784,
45 	  784,   784,   784,   784,   784,   784,   784,   784,
46 	  784,   784,   784,   784,   784,   784,   784,   784,
47 	  784,   784,   784,   784,   784,   784,   784,   784,
48 	  784,   784,   784,   784,   784,   784,   784,   784,
49 	  784,   784,   784,   784,   784,   784,   784,   784,
50 	  784,   784,   784,   784,   784,   784,   784,   784,
51 	  784,   784,   784,   784,   784,   784,   784,   784,
52 	  784,   784,   784,   784,   784,   784,   784,   784,
53 	  784,   784,   784,   784,   784,   784,   784,   784,
54 	    0,     0,     0,     0,     0,     0,     0,     0,
55 	    0,     0,     0,     0,     0,     0,     0,     0,
56 	    0,     0,     0,     0,     0,     0,     0,     0,
57 	    1,     2,     3,     4,     0,     0,     0,     0,
58 	    0,     0,     0,     0,     5,     0,     0,     0,
59 	    0,     0,     0,     0,     6,     7,     8,     0,
60 	    9,     0,    10,    11,     0,     0,    12,    13,
61 	   14,    15,    16,     0,     0,     0,     0,    17,
62 	   18,    19,    20,     0,     0,     0,     0,    21,
63 	    0,    22,    23,     0,     0,    22,    24,     0,
64 	    0,    22,    24,     0,     0,    22,    24,     0,
65 	    0,    22,    24,     0,     0,     0,    24,     0,
66 	    0,     0,    25,     0,     0,    22,    24,     0,
67 	    0,     0,    24,     0,     0,     0,    26,     0,
68 	    0,    27,    28,     0,     0,    29,    30,     0,
69 	   31,    32,     0,    33,    34,     0,    35,     0,
70 	    0,    36,     0,     0,    37,     0,     0,     0,
71 	    0,     0,     0,     0,     0,     0,     0,     0,
72 	    0,     0,     0,     0,     0,     0,     0,     0,
73 	    0,     0,    38,     0,     0,     0,     0,     0,
74 	    0,     0,     0,     0,     0,     0,     0,     0,
75 	    0,     0,     0,     0,     0,     0,     0,     0,
76 	    0,     0,     0,     0,     0,     0,     0,     0,
77 	   39,    39,     0,     0,     0,     0,    40,     0,
78 	    0,     0,     0,     0,     0,    41,     0,     0,
79 	    0,    42,     0,     0,     0,     0,     0,     0,
80 	   43,     0,     0,    44,     0,     0,     0,     0,
81 	    0,    45,    46,    47,     0,    48,     0,    49,
82 	    0,    50,     0,     0,     0,     0,    51,    52,
83 	    0,     0,     0,     0,     0,     0,    53,    54,
84 	    0,     0,     0,     0,     0,     0,     0,     0,
85 	    0,     0,     0,     0,     0,     0,     0,     0,
86 	    0,     0,     0,     0,     0,     0,    55,    56,
87 	    0,     0,     0,     0,     0,     0,     0,     0,
88 	    0,     0,     0,     0,     0,     0,     0,     0,
89 	    0,     0,     0,     0,     0,     0,     0,     0,
90 	    0,     0,     0,     0,     0,     0,     0,     0,
91 	    0,     0,     0,     0,     0,     0,     0,     0,
92 	    0,     0,     0,     0,     0,     0,     0,     0,
93 	    0,     0,     0,     0,     0,     0,     0,     0,
94 	    0,     0,     0,     0,     0,     0,     0,     0,
95 	    0,     0,     0,     0,     0,     0,     0,     0,
96 	    0,     0,     0,     0,     0,     0,     0,     0,
97 	    0,     0,     0,     0,     0,     0,     0,     0,
98 	    0,     0,     0,     0,     0,     0,     0,    57,
99 	    0,     0,     0,    58,     0,     0,     0,    59,
100 	    0,     0,     0,     0,     0,     0,     0,     0,
101 	    0,     0,     0,     0,     0,     0,     0,     0,
102 	    0,    60,     0,     0,    61,     0,     0,     0,
103 	    0,     0,     0,     0,     0,     0,     0,     0,
104 	    0,     0,     0,     0,     0,     0,     0,     0,
105 	    0,     0,     0,     0,     0,     0,     0,     0,
106 	    0,     0,     0,     0,     0,     0,     0,     0,
107 	    0,     0,     0,     0,     0,     0,     0,     0,
108 	    0,     0,     0,     0,     0,     0,     0,     0,
109 	    0,     0,     0,     0,     0,     0,     0,     0,
110 	    0,     0,     0,     0,     0,     0,     0,     0,
111 	    0,     0,     0,     0,     0,     0,     0,     0,
112 	    0,     0,     0,     0,     0,     0,     0,     0,
113 	    0,     0,     0,     0,     0,     0,     0,     0,
114 	    0,     0,     0,     0,     0,     0,     0,     0,
115 	    0,     0,     0,     0,     0,     0,     0,     0,
116 	    0,     0,     0,     0,     0,     0,     0,     0,
117 	    0,     0,     0,     0,     0,     0,     0,     0,
118 	    0,     0,     0,     0,     0,     0,     0,     0,
119 	    0,     0,     0,     0,     0,     0,     0,     0,
120 	    0,     0,     0,     0,     0,     0,     0,     0,
121 	    0,     0,     0,     0,     0,     0,     0,     0,
122 	    0,     0,     0,     0,     0,     0,     0,     0,
123 	    0,     0,     0,     0,     0,     0,     0,     0,
124 	    0,     0,     0,     0,     0,     0,     0,     0,
125 	    0,     0,     0,     0,     0,     0,     0,     0,
126 	    0,     0,     0,     0,     0,     0,     0,     0,
127 	    0,     0,     0,     0,     0,     0,     0,     0,
128 	    0,     0,     0,     0,     0,     0,     0,     0,
129 	    0,     0,     0,     0,     0,     0,     0,     0,
130 	    0,     0,     0,     0,     0,     0,     0,     0,
131 	    0,     0,     0,     0,     0,     0,     0,     0,
132 	    0,     0,     0,     0,     0,     0,     0,     0,
133 	    0,     0,     0,     0,     0,     0,     0,     0,
134 	    0,     0,     0,     0,     0,     0,     0,     0,
135 	    0,     0,     0,     0,     0,     0,     0,     0,
136 	    0,     0,     0,     0,     0,     0,     0,     0,
137 	    0,     0,     0,     0,     0,     0,     0,     0,
138 	    0,     0,     0,     0,     0,     0,     0,     0,
139 	    0,     0,     0,     0,     0,     0,     0,     0,
140 	    0,     0,     0,    62,    63,     0,     0,    64,
141 	    0,     0,     0,     0,     0,     0,     0,     0,
142 	   65,     0,     0,     0,     0,     0,    46,    66,
143 	    0,    67,    68,     0,     0,    69,    70,     0,
144 	    0,     0,     0,     0,     0,    71,    72,    73,
145 	    0,     0,     0,     0,     0,     0,     0,    24,
146 	    0,     0,     0,     0,     0,     0,     0,     0,
147 	    0,     0,     0,     0,     0,     0,     0,     0,
148 	    0,     0,     0,     0,     0,     0,     0,     0,
149 	    0,     0,     0,     0,     0,     0,     0,     0,
150 	    0,     0,     0,     0,     0,     0,     0,     0,
151 	    0,     0,     0,     0,     0,     0,     0,     0,
152 	    0,     0,     0,     0,     0,     0,     0,     0,
153 	    0,     0,     0,     0,     0,     0,     0,     0,
154 	    0,     0,     0,     0,     0,     0,     0,     0,
155 	    0,     0,     0,     0,     0,     0,     0,     0,
156 	    0,     0,     0,     0,     0,     0,     0,     0,
157 	    0,     0,     0,     0,     0,     0,     0,     0,
158 	    0,     0,     0,     0,     0,     0,     0,     0,
159 	    0,     0,     0,     0,     0,     0,     0,     0,
160 	    0,     0,     0,     0,     0,     0,     0,     0,
161 	   74,     0,     0,     0,     0,     0,     0,     0,
162 	    0,     0,     0,     0,     0,     0,     0,     0,
163 	    0,     0,     0,     0,     0,     0,     0,     0,
164 	    0,    75,     0,     0,     0,     0,     0,     0,
165 	    0,     0,     0,     0,     0,     0,     0,     0,
166 	    0,     0,     0,     0,     0,     0,     0,     0,
167 	    0,     0,     0,     0,     0,     0,     0,    76,
168 	    0,     0,     0,     0,     0,     0,     0,     0,
169 	    0,     0,     0,     0,     0,     0,     0,     0,
170 	    0,     0,     0,     0,     0,     0,     0,     0,
171 	    0,     0,     0,     0,     0,     0,     0,     0,
172 	    0,     0,     0,     0,     0,     0,     0,     0,
173 	    0,     0,     0,     0,     0,     0,     0,     0,
174 	    0,     0,     0,     0,     0,     0,     0,     0,
175 	    0,     0,     0,     0,     0,     0,     0,     0,
176 	   77,    78,     0,     0,     0,     0,     0,     0,
177 	    0,     0,     0,     0,     0,     0,     0,     0,
178 	    0,     0,     0,     0,     0,     0,     0,     0,
179 	    0,     0,     0,     0,     0,     0,     0,     0,
180 	    0,     0,     0,     0,     0,     0,     0,     0,
181 	    0,     0,     0,     0,     0,     0,     0,     0,
182 	    0,     0,    65,     0,     0,    79,     0,     0,
183 	   80,    81,     0,     0,     0,     0,    70,     0,
184 	    0,     0,     0,     0,     0,     0,     0,     0,
185 	    0,     0,     0,     0,     0,     0,     0,     0,
186 	    0,     0,     0,     0,     0,     0,     0,     0,
187 	    0,     0,     0,     0,     0,     0,     0,     0,
188 	    0,     0,     0,     0,     0,    82,     0,     0,
189 	    0,     0,     0,     0,     0,     0,     0,     0,
190 	    0,     0,     0,     0,     0,     0,     0,     0,
191 	    0,     0,     0,     0,     0,     0,     0,     0,
192 	    0,     0,     0,     0,     0,     0,     0,     0,
193 	    0,     0,     0,     0,     0,     0,     0,     0,
194 	    0,     0,     0,     0,     0,     0,     0,     0,
195 	    0,     0,     0,     0,     0,     0,     0,     0,
196 	    0,     0,     0,     0,     0,     0,     0,     0,
197 	    0,     0,     0,     0,     0,     0,     0,     0,
198 	    0,     0,     0,     0,     0,     0,     0,     0,
199 	    0,     0,     0,    83,    84,    85,     0,     0,
200 	    0,     0,    86,     0,     0,     0,     0,     0,
201 	    0,     0,     0,     0,     0,     0,     0,     0,
202 	    0,     0,     0,     0,     0,     0,     0,     0,
203 	    0,     0,     0,     0,     0,     0,     0,     0,
204 	    0,     0,     0,     0,     0,     0,     0,     0,
205 	    0,     0,     0,     0,     0,     0,     0,     0,
206 	    0,     0,     0,     0,     0,     0,     0,     0,
207 	    0,     0,     0,     0,     0,     0,     0,     0,
208 	    0,     0,     0,     0,     0,     0,     0,     0,
209 	    0,     0,     0,     0,     0,     0,     0,     0,
210 	    0,     0,     0,     0,     0,     0,     0,     0,
211 	    0,     0,     0,     0,     0,     0,     0,     0,
212 	    0,     0,     0,     0,     0,     0,     0,     0,
213 	    0,     0,     0,     0,     0,     0,     0,     0,
214 };
215 
216 static const struct {
217 	unsigned char tbl[32];
218 } combiningclass_table[] = {
219 	{{
220 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
221 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
222 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
223 	}},
224 	{{
225 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
226 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  232,
227 	 220,  220,  220,  220,  232,  216,  220,  220,  220,  220,
228 	}},
229 	{{
230 	 220,  202,  202,  220,  220,  220,  220,  202,  202,  220,  220,
231 	 220,  220,  220,  220,  220,  220,  220,  220,  220,    1,    1,
232 	   1,    1,    1,  220,  220,  220,  220,  230,  230,  230,
233 	}},
234 	{{
235 	 230,  230,  230,  230,  230,  240,  230,  220,  220,  220,  230,
236 	 230,  230,  220,  220,    0,  230,  230,  230,  220,  220,  220,
237 	 220,  230,  232,  220,  220,  230,  233,  234,  234,  233,
238 	}},
239 	{{
240 	 234,  234,  233,  230,  230,  230,  230,  230,  230,  230,  230,
241 	 230,  230,  230,  230,  230,    0,    0,    0,    0,    0,    0,
242 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
243 	}},
244 	{{
245 	   0,    0,    0,  230,  230,  230,  230,  230,    0,    0,    0,
246 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
247 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
248 	}},
249 	{{
250 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
251 	   0,    0,    0,    0,    0,    0,  220,  230,  230,  230,  230,
252 	 220,  230,  230,  230,  222,  220,  230,  230,  230,  230,
253 	}},
254 	{{
255 	 230,  230,  220,  220,  220,  220,  220,  220,  230,  230,  220,
256 	 230,  230,  222,  228,  230,   10,   11,   12,   13,   14,   15,
257 	  16,   17,   18,   19,   19,   20,   21,   22,    0,   23,
258 	}},
259 	{{
260 	   0,   24,   25,    0,  230,  220,    0,   18,    0,    0,    0,
261 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
262 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
263 	}},
264 	{{
265 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
266 	   0,    0,    0,    0,    0,  230,  230,  230,  230,  230,  230,
267 	 230,  230,   30,   31,   32,    0,    0,    0,    0,    0,
268 	}},
269 	{{
270 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
271 	  27,   28,   29,   30,   31,   32,   33,   34,  230,  230,  220,
272 	 220,  230,  230,  230,  230,  230,  220,  230,  230,  220,
273 	}},
274 	{{
275 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
276 	   0,    0,    0,    0,    0,   35,    0,    0,    0,    0,    0,
277 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
278 	}},
279 	{{
280 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
281 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
282 	 230,  230,  230,  230,  230,  230,  230,    0,    0,  230,
283 	}},
284 	{{
285 	 230,  230,  230,  220,  230,    0,    0,  230,  230,    0,  220,
286 	 230,  230,  220,    0,    0,    0,    0,    0,    0,    0,    0,
287 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
288 	}},
289 	{{
290 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
291 	   0,    0,    0,    0,    0,    0,   36,    0,    0,    0,    0,
292 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
293 	}},
294 	{{
295 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
296 	   0,    0,    0,    0,    0,  230,  220,  230,  230,  220,  230,
297 	 230,  220,  220,  220,  230,  220,  220,  230,  220,  230,
298 	}},
299 	{{
300 	 230,  230,  220,  230,  220,  230,  220,  230,  220,  230,  230,
301 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
302 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
303 	}},
304 	{{
305 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
306 	 230,  230,  230,  230,  230,  230,  230,  220,  230,    0,    0,
307 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
308 	}},
309 	{{
310 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
311 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
312 	 230,  230,  230,  230,    0,  230,  230,  230,  230,  230,
313 	}},
314 	{{
315 	 230,  230,  230,  230,    0,  230,  230,  230,    0,  230,  230,
316 	 230,  230,  230,    0,    0,    0,    0,    0,    0,    0,    0,
317 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
318 	}},
319 	{{
320 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
321 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
322 	   0,    0,    0,  220,  220,  220,    0,    0,    0,    0,
323 	}},
324 	{{
325 	   0,    0,    0,    0,  230,  230,  220,  230,  230,  220,  230,
326 	 230,  230,  220,  220,  220,   27,   28,   29,  230,  230,  230,
327 	 220,  230,  230,  220,  220,  230,  230,  230,  230,    0,
328 	}},
329 	{{
330 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
331 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
332 	   0,    0,    0,    0,    0,    0,    7,    0,    0,    0,
333 	}},
334 	{{
335 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
336 	   0,    0,    9,    0,    0,    0,  230,  220,  230,  230,    0,
337 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
338 	}},
339 	{{
340 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
341 	   0,    0,    9,    0,    0,    0,    0,    0,    0,    0,    0,
342 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
343 	}},
344 	{{
345 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
346 	   0,    0,    9,    0,    0,    0,    0,    0,    0,    0,   84,
347 	  91,    0,    0,    0,    0,    0,    0,    0,    0,    0,
348 	}},
349 	{{
350 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
351 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
352 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
353 	}},
354 	{{
355 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
356 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
357 	   0,    0,  103,  103,    9,    0,    0,    0,    0,    0,
358 	}},
359 	{{
360 	   0,    0,    0,    0,    0,    0,    0,    0,  107,  107,  107,
361 	 107,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
362 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
363 	}},
364 	{{
365 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
366 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
367 	   0,    0,  118,  118,    0,    0,    0,    0,    0,    0,
368 	}},
369 	{{
370 	   0,    0,    0,    0,    0,    0,    0,    0,  122,  122,  122,
371 	 122,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
372 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
373 	}},
374 	{{
375 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
376 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
377 	   0,    0,  220,  220,    0,    0,    0,    0,    0,    0,
378 	}},
379 	{{
380 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
381 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,  220,
382 	   0,  220,    0,  216,    0,    0,    0,    0,    0,    0,
383 	}},
384 	{{
385 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
386 	   0,    0,    0,    0,    0,    0,  129,  130,    0,  132,    0,
387 	   0,    0,    0,    0,  130,  130,  130,  130,    0,    0,
388 	}},
389 	{{
390 	 130,    0,  230,  230,    9,    0,  230,  230,    0,    0,    0,
391 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
392 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
393 	}},
394 	{{
395 	   0,    0,    0,    0,    0,    0,  220,    0,    0,    0,    0,
396 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
397 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
398 	}},
399 	{{
400 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
401 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
402 	   0,    7,    0,    9,    9,    0,    0,    0,    0,    0,
403 	}},
404 	{{
405 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
406 	   0,    0,  220,    0,    0,    0,    0,    0,    0,    0,    0,
407 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
408 	}},
409 	{{
410 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
411 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
412 	   0,    0,    0,    0,    0,    0,    0,  230,  230,  230,
413 	}},
414 	{{
415 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
416 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    9,    0,
417 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
418 	}},
419 	{{
420 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
421 	   0,    0,    0,    0,    0,    0,    0,    9,    0,    0,    0,
422 	   0,    0,    0,    0,    0,    0,    0,  230,    0,    0,
423 	}},
424 	{{
425 	   0,    0,    0,    0,    0,    0,    0,    0,    0,  228,    0,
426 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
427 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
428 	}},
429 	{{
430 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
431 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
432 	   0,    0,    0,  222,  230,  220,    0,    0,    0,    0,
433 	}},
434 	{{
435 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
436 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
437 	   0,  230,  220,    0,    0,    0,    0,    0,    0,    0,
438 	}},
439 	{{
440 	   9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
441 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,  230,
442 	 230,  230,  230,  230,  230,  230,  230,    0,    0,  220,
443 	}},
444 	{{
445 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
446 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    7,    0,
447 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
448 	}},
449 	{{
450 	   0,    0,    0,    0,    9,    0,    0,    0,    0,    0,    0,
451 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
452 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
453 	}},
454 	{{
455 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
456 	 230,  220,  230,  230,  230,  230,  230,  230,  230,    0,    0,
457 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
458 	}},
459 	{{
460 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
461 	   9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
462 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
463 	}},
464 	{{
465 	   0,    0,    0,    0,    0,    0,    7,    0,    0,    0,    0,
466 	   0,    0,    0,    0,    0,    0,    0,    9,    9,    0,    0,
467 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
468 	}},
469 	{{
470 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
471 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
472 	   0,    7,    0,    0,    0,    0,    0,    0,    0,    0,
473 	}},
474 	{{
475 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
476 	   0,    0,    0,    0,    0,  230,  230,  230,    0,    1,  220,
477 	 220,  220,  220,  220,  230,  230,  220,  220,  220,  220,
478 	}},
479 	{{
480 	 230,    0,    1,    1,    1,    1,    1,    1,    1,    0,    0,
481 	   0,    0,  220,    0,    0,    0,    0,    0,    0,  230,    0,
482 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
483 	}},
484 	{{
485 	 230,  230,  220,  230,  230,  230,  230,  230,  230,  230,  220,
486 	 230,  230,  234,  214,  220,  202,  230,  230,  230,  230,  230,
487 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
488 	}},
489 	{{
490 	 230,  230,  230,  230,  230,  230,  230,    0,    0,    0,    0,
491 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
492 	   0,    0,    0,    0,    0,    0,  233,  220,  230,  220,
493 	}},
494 	{{
495 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
496 	   0,    0,    0,    0,    0,  230,  230,    1,    1,  230,  230,
497 	 230,  230,    1,    1,    1,  230,  230,    0,    0,    0,
498 	}},
499 	{{
500 	   0,  230,    0,    0,    0,    1,    1,  230,  220,  230,    1,
501 	   1,  220,  220,  220,  220,  230,    0,    0,    0,    0,    0,
502 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
503 	}},
504 	{{
505 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
506 	   0,    0,    0,    0,  230,  230,  230,    0,    0,    0,    0,
507 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
508 	}},
509 	{{
510 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
511 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
512 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
513 	}},
514 	{{
515 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
516 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
517 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
518 	}},
519 	{{
520 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,  218,
521 	 228,  232,  222,  224,  224,    0,    0,    0,    0,    0,    0,
522 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
523 	}},
524 	{{
525 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
526 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
527 	   0,    0,    0,    8,    8,    0,    0,    0,    0,    0,
528 	}},
529 	{{
530 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
531 	   0,    0,    0,    0,  230,    0,    0,    0,    0,  230,  230,
532 	 230,  230,  230,  230,  230,  230,  230,  230,    0,    0,
533 	}},
534 	{{
535 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
536 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
537 	   0,    0,    0,    0,    0,    0,    0,    0,    0,  230,
538 	}},
539 	{{
540 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
541 	   0,    0,    0,    0,    0,  230,  230,    0,    0,    0,    0,
542 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
543 	}},
544 	{{
545 	   0,    0,    0,    0,    0,    0,    9,    0,    0,    0,    0,
546 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
547 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
548 	}},
549 	{{
550 	 230,  230,  230,  230,  230,  230,  230,  230,  230,  230,  230,
551 	 230,  230,  230,  230,  230,  230,  230,    0,    0,    0,    0,
552 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
553 	}},
554 	{{
555 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
556 	 220,  220,  220,    0,    0,    0,    0,    0,    0,    0,    0,
557 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
558 	}},
559 	{{
560 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
561 	   0,    0,    0,    0,    0,    0,    0,    0,    9,    0,    0,
562 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
563 	}},
564 	{{
565 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
566 	   0,    0,    0,    0,    0,    0,    0,    0,    7,    0,    0,
567 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
568 	}},
569 	{{
570 	   9,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
571 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
572 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
573 	}},
574 	{{
575 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
576 	   0,    0,    0,    0,    0,  230,    0,  230,  230,  220,    0,
577 	   0,  230,  230,    0,    0,    0,    0,    0,  230,  230,
578 	}},
579 	{{
580 	   0,  230,    0,    0,    0,    0,    0,    0,    0,    0,    0,
581 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
582 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
583 	}},
584 	{{
585 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
586 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
587 	   9,    0,    0,    0,    0,    0,    0,    0,    0,    0,
588 	}},
589 	{{
590 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
591 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
592 	   0,    0,    0,    0,    0,    0,    0,    0,   26,    0,
593 	}},
594 	{{
595 	 230,  230,  230,  230,  230,  230,  230,    0,    0,    0,    0,
596 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
597 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
598 	}},
599 	{{
600 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
601 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
602 	   0,    0,    0,    0,    0,    0,    0,  220,    0,    0,
603 	}},
604 	{{
605 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
606 	   0,    0,  220,    0,  230,    0,    0,    0,    0,    0,    0,
607 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
608 	}},
609 	{{
610 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
611 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
612 	   0,    0,  230,    1,  220,    0,    0,    0,    0,    9,
613 	}},
614 	{{
615 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
616 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
617 	   0,    0,    0,    9,    7,    0,    0,    0,    0,    0,
618 	}},
619 	{{
620 	 230,  230,  230,    0,    0,    0,    0,    0,    0,    0,    0,
621 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
622 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
623 	}},
624 	{{
625 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
626 	   0,    0,    0,    0,    0,    0,    0,    0,    9,    9,    0,
627 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
628 	}},
629 	{{
630 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
631 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
632 	   9,    7,    0,    0,    0,    0,    0,    0,    0,    0,
633 	}},
634 	{{
635 	   0,    0,    0,    0,    0,  216,  216,    1,    1,    1,    0,
636 	   0,    0,  226,  216,  216,  216,  216,  216,    0,    0,    0,
637 	   0,    0,    0,    0,    0,  220,  220,  220,  220,  220,
638 	}},
639 	{{
640 	 220,  220,  220,    0,    0,  230,  230,  230,  230,  230,  220,
641 	 220,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
642 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
643 	}},
644 	{{
645 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,  230,
646 	 230,  230,  230,    0,    0,    0,    0,    0,    0,    0,    0,
647 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
648 	}},
649 	{{
650 	   0,    0,  230,  230,  230,    0,    0,    0,    0,    0,    0,
651 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
652 	   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
653 	}},
654 };
655 
656 /*
657  * Table accessor.
658  */
659 unsigned char
idn__sparsemap_getcombiningclass(unsigned long v)660 idn__sparsemap_getcombiningclass(unsigned long v) {
661 	int idx0, idx1, idx2;
662 
663 	if (v > UTF32_MAX)
664 		return (0);
665 	idx0 = v >> (COMBININGCLASS_BITS_1 + COMBININGCLASS_BITS_2);
666 	idx1 = (v >> COMBININGCLASS_BITS_2) & ((1 << COMBININGCLASS_BITS_1) - 1);
667 	idx2 = v & ((1 << COMBININGCLASS_BITS_2) - 1);
668 	return (unsigned char) combiningclass_table[combiningclass_imap[combiningclass_imap[idx0] + idx1]].tbl[idx2];
669 }
670