[project @ 2005-03-14 15:22:51 by simonmar]
[ghc-base.git] / cbits / WCsubst.c
1 /*-------------------------------------------------------------------------
2 This is an automatically generated file: do not edit
3 Generated by udconfc at Mon Jan 31 23:37:36 EST 2005
4 -------------------------------------------------------------------------*/
5
6 #include "WCsubst.h"
7
8 /* Unicode general categories, listed in the same order as in the Unicode
9  * standard -- this must be the same order as in GHC.Unicode.
10  */
11
12 enum {
13     NUMCAT_LU,  /* Letter, Uppercase */
14     NUMCAT_LL,  /* Letter, Lowercase */
15     NUMCAT_LT,  /* Letter, Titlecase */
16     NUMCAT_LM,  /* Letter, Modifier */
17     NUMCAT_LO,  /* Letter, Other */
18     NUMCAT_MN,  /* Mark, Non-Spacing */
19     NUMCAT_MC,  /* Mark, Spacing Combining */
20     NUMCAT_ME,  /* Mark, Enclosing */
21     NUMCAT_ND,  /* Number, Decimal */
22     NUMCAT_NL,  /* Number, Letter */
23     NUMCAT_NO,  /* Number, Other */
24     NUMCAT_PC,  /* Punctuation, Connector */
25     NUMCAT_PD,  /* Punctuation, Dash */
26     NUMCAT_PS,  /* Punctuation, Open */
27     NUMCAT_PE,  /* Punctuation, Close */
28     NUMCAT_PI,  /* Punctuation, Initial quote */
29     NUMCAT_PF,  /* Punctuation, Final quote */
30     NUMCAT_PO,  /* Punctuation, Other */
31     NUMCAT_SM,  /* Symbol, Math */
32     NUMCAT_SC,  /* Symbol, Currency */
33     NUMCAT_SK,  /* Symbol, Modifier */
34     NUMCAT_SO,  /* Symbol, Other */
35     NUMCAT_ZS,  /* Separator, Space */
36     NUMCAT_ZL,  /* Separator, Line */
37     NUMCAT_ZP,  /* Separator, Paragraph */
38     NUMCAT_CC,  /* Other, Control */
39     NUMCAT_CF,  /* Other, Format */
40     NUMCAT_CS,  /* Other, Surrogate */
41     NUMCAT_CO,  /* Other, Private Use */
42     NUMCAT_CN   /* Other, Not Assigned */
43 };
44
45 struct _convrule_ 
46
47         unsigned int category;
48         unsigned int catnumber;
49         int possible;
50         int updist;
51         int lowdist; 
52         int titledist;
53 };
54
55 struct _charblock_ 
56
57         int start;
58         int length;
59         const struct _convrule_ *rule;
60 };
61
62 #define GENCAT_ZP 67108864
63 #define GENCAT_MC 8388608
64 #define GENCAT_NO 65536
65 #define GENCAT_SK 1024
66 #define GENCAT_CO 268435456
67 #define GENCAT_ME 4194304
68 #define GENCAT_ND 256
69 #define GENCAT_PO 4
70 #define GENCAT_LT 524288
71 #define GENCAT_PC 2048
72 #define GENCAT_SM 64
73 #define GENCAT_ZS 2
74 #define GENCAT_CC 1
75 #define GENCAT_LU 512
76 #define GENCAT_PD 128
77 #define GENCAT_SO 8192
78 #define GENCAT_PE 32
79 #define GENCAT_CS 134217728
80 #define GENCAT_PF 131072
81 #define GENCAT_CF 32768
82 #define GENCAT_PS 16
83 #define GENCAT_SC 8
84 #define GENCAT_LL 4096
85 #define GENCAT_ZL 33554432
86 #define GENCAT_LM 1048576
87 #define GENCAT_PI 16384
88 #define GENCAT_NL 16777216
89 #define GENCAT_MN 2097152
90 #define GENCAT_LO 262144
91 #define MAX_UNI_CHAR 1114109
92 #define NUM_BLOCKS 1916
93 #define NUM_CONVBLOCKS 835
94 #define NUM_SPACEBLOCKS 8
95 #define NUM_LAT1BLOCKS 63
96 #define NUM_RULES 126
97 static const struct _convrule_ rule116={GENCAT_LU, NUMCAT_LU, 1, 0, -8383, 0};
98 static const struct _convrule_ rule108={GENCAT_LU, NUMCAT_LU, 1, 0, -86, 0};
99 static const struct _convrule_ rule88={GENCAT_LU, NUMCAT_LU, 1, 0, 80, 0};
100 static const struct _convrule_ rule86={GENCAT_LL, NUMCAT_LL, 1, -96, 0, -96};
101 static const struct _convrule_ rule79={GENCAT_LU, NUMCAT_LU, 0, 0, 0, 0};
102 static const struct _convrule_ rule56={GENCAT_LL, NUMCAT_LL, 1, -203, 0, -203};
103 static const struct _convrule_ rule54={GENCAT_LL, NUMCAT_LL, 1, -205, 0, -205};
104 static const struct _convrule_ rule48={GENCAT_LL, NUMCAT_LL, 1, -79, 0, -79};
105 static const struct _convrule_ rule40={GENCAT_LU, NUMCAT_LU, 1, 0, 218, 0};
106 static const struct _convrule_ rule113={GENCAT_ZL, NUMCAT_ZL, 0, 0, 0, 0};
107 static const struct _convrule_ rule103={GENCAT_LT, NUMCAT_LT, 1, 0, -8, 0};
108 static const struct _convrule_ rule98={GENCAT_LL, NUMCAT_LL, 1, 86, 0, 86};
109 static const struct _convrule_ rule95={GENCAT_LL, NUMCAT_LL, 1, 8, 0, 8};
110 static const struct _convrule_ rule39={GENCAT_LU, NUMCAT_LU, 1, 0, 214, 0};
111 static const struct _convrule_ rule119={GENCAT_NL, NUMCAT_NL, 1, -16, 0, -16};
112 static const struct _convrule_ rule101={GENCAT_LL, NUMCAT_LL, 1, 112, 0, 112};
113 static const struct _convrule_ rule93={GENCAT_NL, NUMCAT_NL, 0, 0, 0, 0};
114 static const struct _convrule_ rule60={GENCAT_LL, NUMCAT_LL, 1, -213, 0, -213};
115 static const struct _convrule_ rule59={GENCAT_LL, NUMCAT_LL, 1, -211, 0, -211};
116 static const struct _convrule_ rule42={GENCAT_LU, NUMCAT_LU, 1, 0, 219, 0};
117 static const struct _convrule_ rule38={GENCAT_LL, NUMCAT_LL, 1, 130, 0, 130};
118 static const struct _convrule_ rule34={GENCAT_LL, NUMCAT_LL, 1, 97, 0, 97};
119 static const struct _convrule_ rule25={GENCAT_LU, NUMCAT_LU, 1, 0, -121, 0};
120 static const struct _convrule_ rule24={GENCAT_LL, NUMCAT_LL, 1, -232, 0, -232};
121 static const struct _convrule_ rule20={GENCAT_LL, NUMCAT_LL, 1, 121, 0, 121};
122 static const struct _convrule_ rule16={GENCAT_CF, NUMCAT_CF, 0, 0, 0, 0};
123 static const struct _convrule_ rule4={GENCAT_PS, NUMCAT_PS, 0, 0, 0, 0};
124 static const struct _convrule_ rule123={GENCAT_CO, NUMCAT_CO, 0, 0, 0, 0};
125 static const struct _convrule_ rule112={GENCAT_LU, NUMCAT_LU, 1, 0, -126, 0};
126 static const struct _convrule_ rule106={GENCAT_LT, NUMCAT_LT, 1, 0, -9, 0};
127 static const struct _convrule_ rule105={GENCAT_LU, NUMCAT_LU, 1, 0, -74, 0};
128 static const struct _convrule_ rule97={GENCAT_LL, NUMCAT_LL, 1, 74, 0, 74};
129 static const struct _convrule_ rule65={GENCAT_LM, NUMCAT_LM, 0, 0, 0, 0};
130 static const struct _convrule_ rule30={GENCAT_LU, NUMCAT_LU, 1, 0, 79, 0};
131 static const struct _convrule_ rule5={GENCAT_PE, NUMCAT_PE, 0, 0, 0, 0};
132 static const struct _convrule_ rule114={GENCAT_ZP, NUMCAT_ZP, 0, 0, 0, 0};
133 static const struct _convrule_ rule104={GENCAT_LL, NUMCAT_LL, 1, 9, 0, 9};
134 static const struct _convrule_ rule94={GENCAT_LL, NUMCAT_LL, 1, -59, 0, -59};
135 static const struct _convrule_ rule92={GENCAT_MC, NUMCAT_MC, 0, 0, 0, 0};
136 static const struct _convrule_ rule91={GENCAT_LL, NUMCAT_LL, 1, -48, 0, -48};
137 static const struct _convrule_ rule82={GENCAT_LL, NUMCAT_LL, 1, -86, 0, -86};
138 static const struct _convrule_ rule78={GENCAT_LL, NUMCAT_LL, 1, -57, 0, -57};
139 static const struct _convrule_ rule66={GENCAT_MN, NUMCAT_MN, 0, 0, 0, 0};
140 static const struct _convrule_ rule55={GENCAT_LL, NUMCAT_LL, 1, -202, 0, -202};
141 static const struct _convrule_ rule50={GENCAT_LU, NUMCAT_LU, 1, 0, -56, 0};
142 static const struct _convrule_ rule45={GENCAT_LU, NUMCAT_LU, 1, 0, 2, 1};
143 static const struct _convrule_ rule31={GENCAT_LU, NUMCAT_LU, 1, 0, 202, 0};
144 static const struct _convrule_ rule6={GENCAT_SM, NUMCAT_SM, 0, 0, 0, 0};
145 static const struct _convrule_ rule107={GENCAT_LL, NUMCAT_LL, 1, -7205, 0, -7205};
146 static const struct _convrule_ rule90={GENCAT_LU, NUMCAT_LU, 1, 0, 48, 0};
147 static const struct _convrule_ rule87={GENCAT_LU, NUMCAT_LU, 1, 0, -7, 0};
148 static const struct _convrule_ rule44={GENCAT_LL, NUMCAT_LL, 1, 56, 0, 56};
149 static const struct _convrule_ rule33={GENCAT_LU, NUMCAT_LU, 1, 0, 207, 0};
150 static const struct _convrule_ rule18={GENCAT_LL, NUMCAT_LL, 1, 743, 0, 743};
151 static const struct _convrule_ rule17={GENCAT_NO, NUMCAT_NO, 0, 0, 0, 0};
152 static const struct _convrule_ rule10={GENCAT_SK, NUMCAT_SK, 0, 0, 0, 0};
153 static const struct _convrule_ rule8={GENCAT_ND, NUMCAT_ND, 0, 0, 0, 0};
154 static const struct _convrule_ rule122={GENCAT_CS, NUMCAT_CS, 0, 0, 0, 0};
155 static const struct _convrule_ rule99={GENCAT_LL, NUMCAT_LL, 1, 100, 0, 100};
156 static const struct _convrule_ rule67={GENCAT_MN, NUMCAT_MN, 1, 84, 0, 84};
157 static const struct _convrule_ rule52={GENCAT_LL, NUMCAT_LL, 1, -210, 0, -210};
158 static const struct _convrule_ rule51={GENCAT_LU, NUMCAT_LU, 1, 0, -130, 0};
159 static const struct _convrule_ rule32={GENCAT_LU, NUMCAT_LU, 1, 0, 203, 0};
160 static const struct _convrule_ rule27={GENCAT_LU, NUMCAT_LU, 1, 0, 210, 0};
161 static const struct _convrule_ rule15={GENCAT_PI, NUMCAT_PI, 0, 0, 0, 0};
162 static const struct _convrule_ rule111={GENCAT_LU, NUMCAT_LU, 1, 0, -128, 0};
163 static const struct _convrule_ rule96={GENCAT_LU, NUMCAT_LU, 1, 0, -8, 0};
164 static const struct _convrule_ rule71={GENCAT_LU, NUMCAT_LU, 1, 0, 63, 0};
165 static const struct _convrule_ rule64={GENCAT_LL, NUMCAT_LL, 1, -219, 0, -219};
166 static const struct _convrule_ rule62={GENCAT_LL, NUMCAT_LL, 1, -218, 0, -218};
167 static const struct _convrule_ rule23={GENCAT_LU, NUMCAT_LU, 1, 0, -199, 0};
168 static const struct _convrule_ rule19={GENCAT_PF, NUMCAT_PF, 0, 0, 0, 0};
169 static const struct _convrule_ rule1={GENCAT_ZS, NUMCAT_ZS, 0, 0, 0, 0};
170 static const struct _convrule_ rule120={GENCAT_SO, NUMCAT_SO, 1, 0, 26, 0};
171 static const struct _convrule_ rule115={GENCAT_LU, NUMCAT_LU, 1, 0, -7517, 0};
172 static const struct _convrule_ rule83={GENCAT_LL, NUMCAT_LL, 1, -80, 0, -80};
173 static const struct _convrule_ rule81={GENCAT_LL, NUMCAT_LL, 1, -54, 0, -54};
174 static const struct _convrule_ rule80={GENCAT_LL, NUMCAT_LL, 1, -47, 0, -47};
175 static const struct _convrule_ rule77={GENCAT_LL, NUMCAT_LL, 1, -62, 0, -62};
176 static const struct _convrule_ rule76={GENCAT_LL, NUMCAT_LL, 1, -63, 0, -63};
177 static const struct _convrule_ rule75={GENCAT_LL, NUMCAT_LL, 1, -64, 0, -64};
178 static const struct _convrule_ rule73={GENCAT_LL, NUMCAT_LL, 1, -37, 0, -37};
179 static const struct _convrule_ rule72={GENCAT_LL, NUMCAT_LL, 1, -38, 0, -38};
180 static const struct _convrule_ rule35={GENCAT_LU, NUMCAT_LU, 1, 0, 211, 0};
181 static const struct _convrule_ rule14={GENCAT_LL, NUMCAT_LL, 0, 0, 0, 0};
182 static const struct _convrule_ rule11={GENCAT_PC, NUMCAT_PC, 0, 0, 0, 0};
183 static const struct _convrule_ rule3={GENCAT_SC, NUMCAT_SC, 0, 0, 0, 0};
184 static const struct _convrule_ rule2={GENCAT_PO, NUMCAT_PO, 0, 0, 0, 0};
185 static const struct _convrule_ rule70={GENCAT_LU, NUMCAT_LU, 1, 0, 64, 0};
186 static const struct _convrule_ rule58={GENCAT_LL, NUMCAT_LL, 1, -209, 0, -209};
187 static const struct _convrule_ rule57={GENCAT_LL, NUMCAT_LL, 1, -207, 0, -207};
188 static const struct _convrule_ rule53={GENCAT_LL, NUMCAT_LL, 1, -206, 0, -206};
189 static const struct _convrule_ rule46={GENCAT_LT, NUMCAT_LT, 1, -1, 1, 0};
190 static const struct _convrule_ rule36={GENCAT_LU, NUMCAT_LU, 1, 0, 209, 0};
191 static const struct _convrule_ rule26={GENCAT_LL, NUMCAT_LL, 1, -300, 0, -300};
192 static const struct _convrule_ rule9={GENCAT_LU, NUMCAT_LU, 1, 0, 32, 0};
193 static const struct _convrule_ rule121={GENCAT_SO, NUMCAT_SO, 1, -26, 0, -26};
194 static const struct _convrule_ rule117={GENCAT_LU, NUMCAT_LU, 1, 0, -8262, 0};
195 static const struct _convrule_ rule109={GENCAT_LU, NUMCAT_LU, 1, 0, -100, 0};
196 static const struct _convrule_ rule69={GENCAT_LU, NUMCAT_LU, 1, 0, 37, 0};
197 static const struct _convrule_ rule29={GENCAT_LU, NUMCAT_LU, 1, 0, 205, 0};
198 static const struct _convrule_ rule21={GENCAT_LU, NUMCAT_LU, 1, 0, 1, 0};
199 static const struct _convrule_ rule124={GENCAT_LU, NUMCAT_LU, 1, 0, 40, 0};
200 static const struct _convrule_ rule110={GENCAT_LU, NUMCAT_LU, 1, 0, -112, 0};
201 static const struct _convrule_ rule102={GENCAT_LL, NUMCAT_LL, 1, 126, 0, 126};
202 static const struct _convrule_ rule100={GENCAT_LL, NUMCAT_LL, 1, 128, 0, 128};
203 static const struct _convrule_ rule85={GENCAT_LU, NUMCAT_LU, 1, 0, -60, 0};
204 static const struct _convrule_ rule84={GENCAT_LL, NUMCAT_LL, 1, 7, 0, 7};
205 static const struct _convrule_ rule63={GENCAT_LL, NUMCAT_LL, 1, -217, 0, -217};
206 static const struct _convrule_ rule61={GENCAT_LL, NUMCAT_LL, 1, -214, 0, -214};
207 static const struct _convrule_ rule43={GENCAT_LO, NUMCAT_LO, 0, 0, 0, 0};
208 static const struct _convrule_ rule41={GENCAT_LU, NUMCAT_LU, 1, 0, 217, 0};
209 static const struct _convrule_ rule125={GENCAT_LL, NUMCAT_LL, 1, -40, 0, -40};
210 static const struct _convrule_ rule118={GENCAT_NL, NUMCAT_NL, 1, 0, 16, 0};
211 static const struct _convrule_ rule89={GENCAT_ME, NUMCAT_ME, 0, 0, 0, 0};
212 static const struct _convrule_ rule74={GENCAT_LL, NUMCAT_LL, 1, -31, 0, -31};
213 static const struct _convrule_ rule68={GENCAT_LU, NUMCAT_LU, 1, 0, 38, 0};
214 static const struct _convrule_ rule49={GENCAT_LU, NUMCAT_LU, 1, 0, -97, 0};
215 static const struct _convrule_ rule47={GENCAT_LL, NUMCAT_LL, 1, -2, 0, -1};
216 static const struct _convrule_ rule37={GENCAT_LU, NUMCAT_LU, 1, 0, 213, 0};
217 static const struct _convrule_ rule28={GENCAT_LU, NUMCAT_LU, 1, 0, 206, 0};
218 static const struct _convrule_ rule22={GENCAT_LL, NUMCAT_LL, 1, -1, 0, -1};
219 static const struct _convrule_ rule13={GENCAT_SO, NUMCAT_SO, 0, 0, 0, 0};
220 static const struct _convrule_ rule12={GENCAT_LL, NUMCAT_LL, 1, -32, 0, -32};
221 static const struct _convrule_ rule7={GENCAT_PD, NUMCAT_PD, 0, 0, 0, 0};
222 static const struct _convrule_ rule0={GENCAT_CC, NUMCAT_CC, 0, 0, 0, 0};
223 static const struct _charblock_ allchars[]={
224         {0, 32, &rule0},
225         {32, 1, &rule1},
226         {33, 3, &rule2},
227         {36, 1, &rule3},
228         {37, 3, &rule2},
229         {40, 1, &rule4},
230         {41, 1, &rule5},
231         {42, 1, &rule2},
232         {43, 1, &rule6},
233         {44, 1, &rule2},
234         {45, 1, &rule7},
235         {46, 2, &rule2},
236         {48, 10, &rule8},
237         {58, 2, &rule2},
238         {60, 3, &rule6},
239         {63, 2, &rule2},
240         {65, 26, &rule9},
241         {91, 1, &rule4},
242         {92, 1, &rule2},
243         {93, 1, &rule5},
244         {94, 1, &rule10},
245         {95, 1, &rule11},
246         {96, 1, &rule10},
247         {97, 26, &rule12},
248         {123, 1, &rule4},
249         {124, 1, &rule6},
250         {125, 1, &rule5},
251         {126, 1, &rule6},
252         {127, 33, &rule0},
253         {160, 1, &rule1},
254         {161, 1, &rule2},
255         {162, 4, &rule3},
256         {166, 2, &rule13},
257         {168, 1, &rule10},
258         {169, 1, &rule13},
259         {170, 1, &rule14},
260         {171, 1, &rule15},
261         {172, 1, &rule6},
262         {173, 1, &rule16},
263         {174, 1, &rule13},
264         {175, 1, &rule10},
265         {176, 1, &rule13},
266         {177, 1, &rule6},
267         {178, 2, &rule17},
268         {180, 1, &rule10},
269         {181, 1, &rule18},
270         {182, 1, &rule13},
271         {183, 1, &rule2},
272         {184, 1, &rule10},
273         {185, 1, &rule17},
274         {186, 1, &rule14},
275         {187, 1, &rule19},
276         {188, 3, &rule17},
277         {191, 1, &rule2},
278         {192, 23, &rule9},
279         {215, 1, &rule6},
280         {216, 7, &rule9},
281         {223, 1, &rule14},
282         {224, 23, &rule12},
283         {247, 1, &rule6},
284         {248, 7, &rule12},
285         {255, 1, &rule20},
286         {256, 1, &rule21},
287         {257, 1, &rule22},
288         {258, 1, &rule21},
289         {259, 1, &rule22},
290         {260, 1, &rule21},
291         {261, 1, &rule22},
292         {262, 1, &rule21},
293         {263, 1, &rule22},
294         {264, 1, &rule21},
295         {265, 1, &rule22},
296         {266, 1, &rule21},
297         {267, 1, &rule22},
298         {268, 1, &rule21},
299         {269, 1, &rule22},
300         {270, 1, &rule21},
301         {271, 1, &rule22},
302         {272, 1, &rule21},
303         {273, 1, &rule22},
304         {274, 1, &rule21},
305         {275, 1, &rule22},
306         {276, 1, &rule21},
307         {277, 1, &rule22},
308         {278, 1, &rule21},
309         {279, 1, &rule22},
310         {280, 1, &rule21},
311         {281, 1, &rule22},
312         {282, 1, &rule21},
313         {283, 1, &rule22},
314         {284, 1, &rule21},
315         {285, 1, &rule22},
316         {286, 1, &rule21},
317         {287, 1, &rule22},
318         {288, 1, &rule21},
319         {289, 1, &rule22},
320         {290, 1, &rule21},
321         {291, 1, &rule22},
322         {292, 1, &rule21},
323         {293, 1, &rule22},
324         {294, 1, &rule21},
325         {295, 1, &rule22},
326         {296, 1, &rule21},
327         {297, 1, &rule22},
328         {298, 1, &rule21},
329         {299, 1, &rule22},
330         {300, 1, &rule21},
331         {301, 1, &rule22},
332         {302, 1, &rule21},
333         {303, 1, &rule22},
334         {304, 1, &rule23},
335         {305, 1, &rule24},
336         {306, 1, &rule21},
337         {307, 1, &rule22},
338         {308, 1, &rule21},
339         {309, 1, &rule22},
340         {310, 1, &rule21},
341         {311, 1, &rule22},
342         {312, 1, &rule14},
343         {313, 1, &rule21},
344         {314, 1, &rule22},
345         {315, 1, &rule21},
346         {316, 1, &rule22},
347         {317, 1, &rule21},
348         {318, 1, &rule22},
349         {319, 1, &rule21},
350         {320, 1, &rule22},
351         {321, 1, &rule21},
352         {322, 1, &rule22},
353         {323, 1, &rule21},
354         {324, 1, &rule22},
355         {325, 1, &rule21},
356         {326, 1, &rule22},
357         {327, 1, &rule21},
358         {328, 1, &rule22},
359         {329, 1, &rule14},
360         {330, 1, &rule21},
361         {331, 1, &rule22},
362         {332, 1, &rule21},
363         {333, 1, &rule22},
364         {334, 1, &rule21},
365         {335, 1, &rule22},
366         {336, 1, &rule21},
367         {337, 1, &rule22},
368         {338, 1, &rule21},
369         {339, 1, &rule22},
370         {340, 1, &rule21},
371         {341, 1, &rule22},
372         {342, 1, &rule21},
373         {343, 1, &rule22},
374         {344, 1, &rule21},
375         {345, 1, &rule22},
376         {346, 1, &rule21},
377         {347, 1, &rule22},
378         {348, 1, &rule21},
379         {349, 1, &rule22},
380         {350, 1, &rule21},
381         {351, 1, &rule22},
382         {352, 1, &rule21},
383         {353, 1, &rule22},
384         {354, 1, &rule21},
385         {355, 1, &rule22},
386         {356, 1, &rule21},
387         {357, 1, &rule22},
388         {358, 1, &rule21},
389         {359, 1, &rule22},
390         {360, 1, &rule21},
391         {361, 1, &rule22},
392         {362, 1, &rule21},
393         {363, 1, &rule22},
394         {364, 1, &rule21},
395         {365, 1, &rule22},
396         {366, 1, &rule21},
397         {367, 1, &rule22},
398         {368, 1, &rule21},
399         {369, 1, &rule22},
400         {370, 1, &rule21},
401         {371, 1, &rule22},
402         {372, 1, &rule21},
403         {373, 1, &rule22},
404         {374, 1, &rule21},
405         {375, 1, &rule22},
406         {376, 1, &rule25},
407         {377, 1, &rule21},
408         {378, 1, &rule22},
409         {379, 1, &rule21},
410         {380, 1, &rule22},
411         {381, 1, &rule21},
412         {382, 1, &rule22},
413         {383, 1, &rule26},
414         {384, 1, &rule14},
415         {385, 1, &rule27},
416         {386, 1, &rule21},
417         {387, 1, &rule22},
418         {388, 1, &rule21},
419         {389, 1, &rule22},
420         {390, 1, &rule28},
421         {391, 1, &rule21},
422         {392, 1, &rule22},
423         {393, 2, &rule29},
424         {395, 1, &rule21},
425         {396, 1, &rule22},
426         {397, 1, &rule14},
427         {398, 1, &rule30},
428         {399, 1, &rule31},
429         {400, 1, &rule32},
430         {401, 1, &rule21},
431         {402, 1, &rule22},
432         {403, 1, &rule29},
433         {404, 1, &rule33},
434         {405, 1, &rule34},
435         {406, 1, &rule35},
436         {407, 1, &rule36},
437         {408, 1, &rule21},
438         {409, 1, &rule22},
439         {410, 2, &rule14},
440         {412, 1, &rule35},
441         {413, 1, &rule37},
442         {414, 1, &rule38},
443         {415, 1, &rule39},
444         {416, 1, &rule21},
445         {417, 1, &rule22},
446         {418, 1, &rule21},
447         {419, 1, &rule22},
448         {420, 1, &rule21},
449         {421, 1, &rule22},
450         {422, 1, &rule40},
451         {423, 1, &rule21},
452         {424, 1, &rule22},
453         {425, 1, &rule40},
454         {426, 2, &rule14},
455         {428, 1, &rule21},
456         {429, 1, &rule22},
457         {430, 1, &rule40},
458         {431, 1, &rule21},
459         {432, 1, &rule22},
460         {433, 2, &rule41},
461         {435, 1, &rule21},
462         {436, 1, &rule22},
463         {437, 1, &rule21},
464         {438, 1, &rule22},
465         {439, 1, &rule42},
466         {440, 1, &rule21},
467         {441, 1, &rule22},
468         {442, 1, &rule14},
469         {443, 1, &rule43},
470         {444, 1, &rule21},
471         {445, 1, &rule22},
472         {446, 1, &rule14},
473         {447, 1, &rule44},
474         {448, 4, &rule43},
475         {452, 1, &rule45},
476         {453, 1, &rule46},
477         {454, 1, &rule47},
478         {455, 1, &rule45},
479         {456, 1, &rule46},
480         {457, 1, &rule47},
481         {458, 1, &rule45},
482         {459, 1, &rule46},
483         {460, 1, &rule47},
484         {461, 1, &rule21},
485         {462, 1, &rule22},
486         {463, 1, &rule21},
487         {464, 1, &rule22},
488         {465, 1, &rule21},
489         {466, 1, &rule22},
490         {467, 1, &rule21},
491         {468, 1, &rule22},
492         {469, 1, &rule21},
493         {470, 1, &rule22},
494         {471, 1, &rule21},
495         {472, 1, &rule22},
496         {473, 1, &rule21},
497         {474, 1, &rule22},
498         {475, 1, &rule21},
499         {476, 1, &rule22},
500         {477, 1, &rule48},
501         {478, 1, &rule21},
502         {479, 1, &rule22},
503         {480, 1, &rule21},
504         {481, 1, &rule22},
505         {482, 1, &rule21},
506         {483, 1, &rule22},
507         {484, 1, &rule21},
508         {485, 1, &rule22},
509         {486, 1, &rule21},
510         {487, 1, &rule22},
511         {488, 1, &rule21},
512         {489, 1, &rule22},
513         {490, 1, &rule21},
514         {491, 1, &rule22},
515         {492, 1, &rule21},
516         {493, 1, &rule22},
517         {494, 1, &rule21},
518         {495, 1, &rule22},
519         {496, 1, &rule14},
520         {497, 1, &rule45},
521         {498, 1, &rule46},
522         {499, 1, &rule47},
523         {500, 1, &rule21},
524         {501, 1, &rule22},
525         {502, 1, &rule49},
526         {503, 1, &rule50},
527         {504, 1, &rule21},
528         {505, 1, &rule22},
529         {506, 1, &rule21},
530         {507, 1, &rule22},
531         {508, 1, &rule21},
532         {509, 1, &rule22},
533         {510, 1, &rule21},
534         {511, 1, &rule22},
535         {512, 1, &rule21},
536         {513, 1, &rule22},
537         {514, 1, &rule21},
538         {515, 1, &rule22},
539         {516, 1, &rule21},
540         {517, 1, &rule22},
541         {518, 1, &rule21},
542         {519, 1, &rule22},
543         {520, 1, &rule21},
544         {521, 1, &rule22},
545         {522, 1, &rule21},
546         {523, 1, &rule22},
547         {524, 1, &rule21},
548         {525, 1, &rule22},
549         {526, 1, &rule21},
550         {527, 1, &rule22},
551         {528, 1, &rule21},
552         {529, 1, &rule22},
553         {530, 1, &rule21},
554         {531, 1, &rule22},
555         {532, 1, &rule21},
556         {533, 1, &rule22},
557         {534, 1, &rule21},
558         {535, 1, &rule22},
559         {536, 1, &rule21},
560         {537, 1, &rule22},
561         {538, 1, &rule21},
562         {539, 1, &rule22},
563         {540, 1, &rule21},
564         {541, 1, &rule22},
565         {542, 1, &rule21},
566         {543, 1, &rule22},
567         {544, 1, &rule51},
568         {545, 1, &rule14},
569         {546, 1, &rule21},
570         {547, 1, &rule22},
571         {548, 1, &rule21},
572         {549, 1, &rule22},
573         {550, 1, &rule21},
574         {551, 1, &rule22},
575         {552, 1, &rule21},
576         {553, 1, &rule22},
577         {554, 1, &rule21},
578         {555, 1, &rule22},
579         {556, 1, &rule21},
580         {557, 1, &rule22},
581         {558, 1, &rule21},
582         {559, 1, &rule22},
583         {560, 1, &rule21},
584         {561, 1, &rule22},
585         {562, 1, &rule21},
586         {563, 1, &rule22},
587         {564, 3, &rule14},
588         {592, 3, &rule14},
589         {595, 1, &rule52},
590         {596, 1, &rule53},
591         {597, 1, &rule14},
592         {598, 2, &rule54},
593         {600, 1, &rule14},
594         {601, 1, &rule55},
595         {602, 1, &rule14},
596         {603, 1, &rule56},
597         {604, 4, &rule14},
598         {608, 1, &rule54},
599         {609, 2, &rule14},
600         {611, 1, &rule57},
601         {612, 4, &rule14},
602         {616, 1, &rule58},
603         {617, 1, &rule59},
604         {618, 5, &rule14},
605         {623, 1, &rule59},
606         {624, 2, &rule14},
607         {626, 1, &rule60},
608         {627, 2, &rule14},
609         {629, 1, &rule61},
610         {630, 10, &rule14},
611         {640, 1, &rule62},
612         {641, 2, &rule14},
613         {643, 1, &rule62},
614         {644, 4, &rule14},
615         {648, 1, &rule62},
616         {649, 1, &rule14},
617         {650, 2, &rule63},
618         {652, 6, &rule14},
619         {658, 1, &rule64},
620         {659, 29, &rule14},
621         {688, 18, &rule65},
622         {706, 4, &rule10},
623         {710, 12, &rule65},
624         {722, 14, &rule10},
625         {736, 5, &rule65},
626         {741, 9, &rule10},
627         {750, 1, &rule65},
628         {751, 17, &rule10},
629         {768, 69, &rule66},
630         {837, 1, &rule67},
631         {838, 18, &rule66},
632         {861, 19, &rule66},
633         {884, 2, &rule10},
634         {890, 1, &rule65},
635         {894, 1, &rule2},
636         {900, 2, &rule10},
637         {902, 1, &rule68},
638         {903, 1, &rule2},
639         {904, 3, &rule69},
640         {908, 1, &rule70},
641         {910, 2, &rule71},
642         {912, 1, &rule14},
643         {913, 17, &rule9},
644         {931, 9, &rule9},
645         {940, 1, &rule72},
646         {941, 3, &rule73},
647         {944, 1, &rule14},
648         {945, 17, &rule12},
649         {962, 1, &rule74},
650         {963, 9, &rule12},
651         {972, 1, &rule75},
652         {973, 2, &rule76},
653         {976, 1, &rule77},
654         {977, 1, &rule78},
655         {978, 3, &rule79},
656         {981, 1, &rule80},
657         {982, 1, &rule81},
658         {983, 1, &rule14},
659         {984, 1, &rule21},
660         {985, 1, &rule22},
661         {986, 1, &rule21},
662         {987, 1, &rule22},
663         {988, 1, &rule21},
664         {989, 1, &rule22},
665         {990, 1, &rule21},
666         {991, 1, &rule22},
667         {992, 1, &rule21},
668         {993, 1, &rule22},
669         {994, 1, &rule21},
670         {995, 1, &rule22},
671         {996, 1, &rule21},
672         {997, 1, &rule22},
673         {998, 1, &rule21},
674         {999, 1, &rule22},
675         {1000, 1, &rule21},
676         {1001, 1, &rule22},
677         {1002, 1, &rule21},
678         {1003, 1, &rule22},
679         {1004, 1, &rule21},
680         {1005, 1, &rule22},
681         {1006, 1, &rule21},
682         {1007, 1, &rule22},
683         {1008, 1, &rule82},
684         {1009, 1, &rule83},
685         {1010, 1, &rule84},
686         {1011, 1, &rule14},
687         {1012, 1, &rule85},
688         {1013, 1, &rule86},
689         {1014, 1, &rule6},
690         {1015, 1, &rule21},
691         {1016, 1, &rule22},
692         {1017, 1, &rule87},
693         {1018, 1, &rule21},
694         {1019, 1, &rule22},
695         {1024, 16, &rule88},
696         {1040, 32, &rule9},
697         {1072, 32, &rule12},
698         {1104, 16, &rule83},
699         {1120, 1, &rule21},
700         {1121, 1, &rule22},
701         {1122, 1, &rule21},
702         {1123, 1, &rule22},
703         {1124, 1, &rule21},
704         {1125, 1, &rule22},
705         {1126, 1, &rule21},
706         {1127, 1, &rule22},
707         {1128, 1, &rule21},
708         {1129, 1, &rule22},
709         {1130, 1, &rule21},
710         {1131, 1, &rule22},
711         {1132, 1, &rule21},
712         {1133, 1, &rule22},
713         {1134, 1, &rule21},
714         {1135, 1, &rule22},
715         {1136, 1, &rule21},
716         {1137, 1, &rule22},
717         {1138, 1, &rule21},
718         {1139, 1, &rule22},
719         {1140, 1, &rule21},
720         {1141, 1, &rule22},
721         {1142, 1, &rule21},
722         {1143, 1, &rule22},
723         {1144, 1, &rule21},
724         {1145, 1, &rule22},
725         {1146, 1, &rule21},
726         {1147, 1, &rule22},
727         {1148, 1, &rule21},
728         {1149, 1, &rule22},
729         {1150, 1, &rule21},
730         {1151, 1, &rule22},
731         {1152, 1, &rule21},
732         {1153, 1, &rule22},
733         {1154, 1, &rule13},
734         {1155, 4, &rule66},
735         {1160, 2, &rule89},
736         {1162, 1, &rule21},
737         {1163, 1, &rule22},
738         {1164, 1, &rule21},
739         {1165, 1, &rule22},
740         {1166, 1, &rule21},
741         {1167, 1, &rule22},
742         {1168, 1, &rule21},
743         {1169, 1, &rule22},
744         {1170, 1, &rule21},
745         {1171, 1, &rule22},
746         {1172, 1, &rule21},
747         {1173, 1, &rule22},
748         {1174, 1, &rule21},
749         {1175, 1, &rule22},
750         {1176, 1, &rule21},
751         {1177, 1, &rule22},
752         {1178, 1, &rule21},
753         {1179, 1, &rule22},
754         {1180, 1, &rule21},
755         {1181, 1, &rule22},
756         {1182, 1, &rule21},
757         {1183, 1, &rule22},
758         {1184, 1, &rule21},
759         {1185, 1, &rule22},
760         {1186, 1, &rule21},
761         {1187, 1, &rule22},
762         {1188, 1, &rule21},
763         {1189, 1, &rule22},
764         {1190, 1, &rule21},
765         {1191, 1, &rule22},
766         {1192, 1, &rule21},
767         {1193, 1, &rule22},
768         {1194, 1, &rule21},
769         {1195, 1, &rule22},
770         {1196, 1, &rule21},
771         {1197, 1, &rule22},
772         {1198, 1, &rule21},
773         {1199, 1, &rule22},
774         {1200, 1, &rule21},
775         {1201, 1, &rule22},
776         {1202, 1, &rule21},
777         {1203, 1, &rule22},
778         {1204, 1, &rule21},
779         {1205, 1, &rule22},
780         {1206, 1, &rule21},
781         {1207, 1, &rule22},
782         {1208, 1, &rule21},
783         {1209, 1, &rule22},
784         {1210, 1, &rule21},
785         {1211, 1, &rule22},
786         {1212, 1, &rule21},
787         {1213, 1, &rule22},
788         {1214, 1, &rule21},
789         {1215, 1, &rule22},
790         {1216, 1, &rule79},
791         {1217, 1, &rule21},
792         {1218, 1, &rule22},
793         {1219, 1, &rule21},
794         {1220, 1, &rule22},
795         {1221, 1, &rule21},
796         {1222, 1, &rule22},
797         {1223, 1, &rule21},
798         {1224, 1, &rule22},
799         {1225, 1, &rule21},
800         {1226, 1, &rule22},
801         {1227, 1, &rule21},
802         {1228, 1, &rule22},
803         {1229, 1, &rule21},
804         {1230, 1, &rule22},
805         {1232, 1, &rule21},
806         {1233, 1, &rule22},
807         {1234, 1, &rule21},
808         {1235, 1, &rule22},
809         {1236, 1, &rule21},
810         {1237, 1, &rule22},
811         {1238, 1, &rule21},
812         {1239, 1, &rule22},
813         {1240, 1, &rule21},
814         {1241, 1, &rule22},
815         {1242, 1, &rule21},
816         {1243, 1, &rule22},
817         {1244, 1, &rule21},
818         {1245, 1, &rule22},
819         {1246, 1, &rule21},
820         {1247, 1, &rule22},
821         {1248, 1, &rule21},
822         {1249, 1, &rule22},
823         {1250, 1, &rule21},
824         {1251, 1, &rule22},
825         {1252, 1, &rule21},
826         {1253, 1, &rule22},
827         {1254, 1, &rule21},
828         {1255, 1, &rule22},
829         {1256, 1, &rule21},
830         {1257, 1, &rule22},
831         {1258, 1, &rule21},
832         {1259, 1, &rule22},
833         {1260, 1, &rule21},
834         {1261, 1, &rule22},
835         {1262, 1, &rule21},
836         {1263, 1, &rule22},
837         {1264, 1, &rule21},
838         {1265, 1, &rule22},
839         {1266, 1, &rule21},
840         {1267, 1, &rule22},
841         {1268, 1, &rule21},
842         {1269, 1, &rule22},
843         {1272, 1, &rule21},
844         {1273, 1, &rule22},
845         {1280, 1, &rule21},
846         {1281, 1, &rule22},
847         {1282, 1, &rule21},
848         {1283, 1, &rule22},
849         {1284, 1, &rule21},
850         {1285, 1, &rule22},
851         {1286, 1, &rule21},
852         {1287, 1, &rule22},
853         {1288, 1, &rule21},
854         {1289, 1, &rule22},
855         {1290, 1, &rule21},
856         {1291, 1, &rule22},
857         {1292, 1, &rule21},
858         {1293, 1, &rule22},
859         {1294, 1, &rule21},
860         {1295, 1, &rule22},
861         {1329, 38, &rule90},
862         {1369, 1, &rule65},
863         {1370, 6, &rule2},
864         {1377, 38, &rule91},
865         {1415, 1, &rule14},
866         {1417, 1, &rule2},
867         {1418, 1, &rule7},
868         {1425, 17, &rule66},
869         {1443, 23, &rule66},
870         {1467, 3, &rule66},
871         {1470, 1, &rule2},
872         {1471, 1, &rule66},
873         {1472, 1, &rule2},
874         {1473, 2, &rule66},
875         {1475, 1, &rule2},
876         {1476, 1, &rule66},
877         {1488, 27, &rule43},
878         {1520, 3, &rule43},
879         {1523, 2, &rule2},
880         {1536, 4, &rule16},
881         {1548, 2, &rule2},
882         {1550, 2, &rule13},
883         {1552, 6, &rule66},
884         {1563, 1, &rule2},
885         {1567, 1, &rule2},
886         {1569, 26, &rule43},
887         {1600, 1, &rule65},
888         {1601, 10, &rule43},
889         {1611, 14, &rule66},
890         {1632, 10, &rule8},
891         {1642, 4, &rule2},
892         {1646, 2, &rule43},
893         {1648, 1, &rule66},
894         {1649, 99, &rule43},
895         {1748, 1, &rule2},
896         {1749, 1, &rule43},
897         {1750, 7, &rule66},
898         {1757, 1, &rule16},
899         {1758, 1, &rule89},
900         {1759, 6, &rule66},
901         {1765, 2, &rule65},
902         {1767, 2, &rule66},
903         {1769, 1, &rule13},
904         {1770, 4, &rule66},
905         {1774, 2, &rule43},
906         {1776, 10, &rule8},
907         {1786, 3, &rule43},
908         {1789, 2, &rule13},
909         {1791, 1, &rule43},
910         {1792, 14, &rule2},
911         {1807, 1, &rule16},
912         {1808, 1, &rule43},
913         {1809, 1, &rule66},
914         {1810, 30, &rule43},
915         {1840, 27, &rule66},
916         {1869, 3, &rule43},
917         {1920, 38, &rule43},
918         {1958, 11, &rule66},
919         {1969, 1, &rule43},
920         {2305, 2, &rule66},
921         {2307, 1, &rule92},
922         {2308, 54, &rule43},
923         {2364, 1, &rule66},
924         {2365, 1, &rule43},
925         {2366, 3, &rule92},
926         {2369, 8, &rule66},
927         {2377, 4, &rule92},
928         {2381, 1, &rule66},
929         {2384, 1, &rule43},
930         {2385, 4, &rule66},
931         {2392, 10, &rule43},
932         {2402, 2, &rule66},
933         {2404, 2, &rule2},
934         {2406, 10, &rule8},
935         {2416, 1, &rule2},
936         {2433, 1, &rule66},
937         {2434, 2, &rule92},
938         {2437, 8, &rule43},
939         {2447, 2, &rule43},
940         {2451, 22, &rule43},
941         {2474, 7, &rule43},
942         {2482, 1, &rule43},
943         {2486, 4, &rule43},
944         {2492, 1, &rule66},
945         {2493, 1, &rule43},
946         {2494, 3, &rule92},
947         {2497, 4, &rule66},
948         {2503, 2, &rule92},
949         {2507, 2, &rule92},
950         {2509, 1, &rule66},
951         {2519, 1, &rule92},
952         {2524, 2, &rule43},
953         {2527, 3, &rule43},
954         {2530, 2, &rule66},
955         {2534, 10, &rule8},
956         {2544, 2, &rule43},
957         {2546, 2, &rule3},
958         {2548, 6, &rule17},
959         {2554, 1, &rule13},
960         {2561, 2, &rule66},
961         {2563, 1, &rule92},
962         {2565, 6, &rule43},
963         {2575, 2, &rule43},
964         {2579, 22, &rule43},
965         {2602, 7, &rule43},
966         {2610, 2, &rule43},
967         {2613, 2, &rule43},
968         {2616, 2, &rule43},
969         {2620, 1, &rule66},
970         {2622, 3, &rule92},
971         {2625, 2, &rule66},
972         {2631, 2, &rule66},
973         {2635, 3, &rule66},
974         {2649, 4, &rule43},
975         {2654, 1, &rule43},
976         {2662, 10, &rule8},
977         {2672, 2, &rule66},
978         {2674, 3, &rule43},
979         {2689, 2, &rule66},
980         {2691, 1, &rule92},
981         {2693, 9, &rule43},
982         {2703, 3, &rule43},
983         {2707, 22, &rule43},
984         {2730, 7, &rule43},
985         {2738, 2, &rule43},
986         {2741, 5, &rule43},
987         {2748, 1, &rule66},
988         {2749, 1, &rule43},
989         {2750, 3, &rule92},
990         {2753, 5, &rule66},
991         {2759, 2, &rule66},
992         {2761, 1, &rule92},
993         {2763, 2, &rule92},
994         {2765, 1, &rule66},
995         {2768, 1, &rule43},
996         {2784, 2, &rule43},
997         {2786, 2, &rule66},
998         {2790, 10, &rule8},
999         {2801, 1, &rule3},
1000         {2817, 1, &rule66},
1001         {2818, 2, &rule92},
1002         {2821, 8, &rule43},
1003         {2831, 2, &rule43},
1004         {2835, 22, &rule43},
1005         {2858, 7, &rule43},
1006         {2866, 2, &rule43},
1007         {2869, 5, &rule43},
1008         {2876, 1, &rule66},
1009         {2877, 1, &rule43},
1010         {2878, 1, &rule92},
1011         {2879, 1, &rule66},
1012         {2880, 1, &rule92},
1013         {2881, 3, &rule66},
1014         {2887, 2, &rule92},
1015         {2891, 2, &rule92},
1016         {2893, 1, &rule66},
1017         {2902, 1, &rule66},
1018         {2903, 1, &rule92},
1019         {2908, 2, &rule43},
1020         {2911, 3, &rule43},
1021         {2918, 10, &rule8},
1022         {2928, 1, &rule13},
1023         {2929, 1, &rule43},
1024         {2946, 1, &rule66},
1025         {2947, 1, &rule43},
1026         {2949, 6, &rule43},
1027         {2958, 3, &rule43},
1028         {2962, 4, &rule43},
1029         {2969, 2, &rule43},
1030         {2972, 1, &rule43},
1031         {2974, 2, &rule43},
1032         {2979, 2, &rule43},
1033         {2984, 3, &rule43},
1034         {2990, 8, &rule43},
1035         {2999, 3, &rule43},
1036         {3006, 2, &rule92},
1037         {3008, 1, &rule66},
1038         {3009, 2, &rule92},
1039         {3014, 3, &rule92},
1040         {3018, 3, &rule92},
1041         {3021, 1, &rule66},
1042         {3031, 1, &rule92},
1043         {3047, 9, &rule8},
1044         {3056, 3, &rule17},
1045         {3059, 6, &rule13},
1046         {3065, 1, &rule3},
1047         {3066, 1, &rule13},
1048         {3073, 3, &rule92},
1049         {3077, 8, &rule43},
1050         {3086, 3, &rule43},
1051         {3090, 23, &rule43},
1052         {3114, 10, &rule43},
1053         {3125, 5, &rule43},
1054         {3134, 3, &rule66},
1055         {3137, 4, &rule92},
1056         {3142, 3, &rule66},
1057         {3146, 4, &rule66},
1058         {3157, 2, &rule66},
1059         {3168, 2, &rule43},
1060         {3174, 10, &rule8},
1061         {3202, 2, &rule92},
1062         {3205, 8, &rule43},
1063         {3214, 3, &rule43},
1064         {3218, 23, &rule43},
1065         {3242, 10, &rule43},
1066         {3253, 5, &rule43},
1067         {3260, 1, &rule66},
1068         {3261, 1, &rule43},
1069         {3262, 1, &rule92},
1070         {3263, 1, &rule66},
1071         {3264, 5, &rule92},
1072         {3270, 1, &rule66},
1073         {3271, 2, &rule92},
1074         {3274, 2, &rule92},
1075         {3276, 2, &rule66},
1076         {3285, 2, &rule92},
1077         {3294, 1, &rule43},
1078         {3296, 2, &rule43},
1079         {3302, 10, &rule8},
1080         {3330, 2, &rule92},
1081         {3333, 8, &rule43},
1082         {3342, 3, &rule43},
1083         {3346, 23, &rule43},
1084         {3370, 16, &rule43},
1085         {3390, 3, &rule92},
1086         {3393, 3, &rule66},
1087         {3398, 3, &rule92},
1088         {3402, 3, &rule92},
1089         {3405, 1, &rule66},
1090         {3415, 1, &rule92},
1091         {3424, 2, &rule43},
1092         {3430, 10, &rule8},
1093         {3458, 2, &rule92},
1094         {3461, 18, &rule43},
1095         {3482, 24, &rule43},
1096         {3507, 9, &rule43},
1097         {3517, 1, &rule43},
1098         {3520, 7, &rule43},
1099         {3530, 1, &rule66},
1100         {3535, 3, &rule92},
1101         {3538, 3, &rule66},
1102         {3542, 1, &rule66},
1103         {3544, 8, &rule92},
1104         {3570, 2, &rule92},
1105         {3572, 1, &rule2},
1106         {3585, 48, &rule43},
1107         {3633, 1, &rule66},
1108         {3634, 2, &rule43},
1109         {3636, 7, &rule66},
1110         {3647, 1, &rule3},
1111         {3648, 6, &rule43},
1112         {3654, 1, &rule65},
1113         {3655, 8, &rule66},
1114         {3663, 1, &rule2},
1115         {3664, 10, &rule8},
1116         {3674, 2, &rule2},
1117         {3713, 2, &rule43},
1118         {3716, 1, &rule43},
1119         {3719, 2, &rule43},
1120         {3722, 1, &rule43},
1121         {3725, 1, &rule43},
1122         {3732, 4, &rule43},
1123         {3737, 7, &rule43},
1124         {3745, 3, &rule43},
1125         {3749, 1, &rule43},
1126         {3751, 1, &rule43},
1127         {3754, 2, &rule43},
1128         {3757, 4, &rule43},
1129         {3761, 1, &rule66},
1130         {3762, 2, &rule43},
1131         {3764, 6, &rule66},
1132         {3771, 2, &rule66},
1133         {3773, 1, &rule43},
1134         {3776, 5, &rule43},
1135         {3782, 1, &rule65},
1136         {3784, 6, &rule66},
1137         {3792, 10, &rule8},
1138         {3804, 2, &rule43},
1139         {3840, 1, &rule43},
1140         {3841, 3, &rule13},
1141         {3844, 15, &rule2},
1142         {3859, 5, &rule13},
1143         {3864, 2, &rule66},
1144         {3866, 6, &rule13},
1145         {3872, 10, &rule8},
1146         {3882, 10, &rule17},
1147         {3892, 1, &rule13},
1148         {3893, 1, &rule66},
1149         {3894, 1, &rule13},
1150         {3895, 1, &rule66},
1151         {3896, 1, &rule13},
1152         {3897, 1, &rule66},
1153         {3898, 1, &rule4},
1154         {3899, 1, &rule5},
1155         {3900, 1, &rule4},
1156         {3901, 1, &rule5},
1157         {3902, 2, &rule92},
1158         {3904, 8, &rule43},
1159         {3913, 34, &rule43},
1160         {3953, 14, &rule66},
1161         {3967, 1, &rule92},
1162         {3968, 5, &rule66},
1163         {3973, 1, &rule2},
1164         {3974, 2, &rule66},
1165         {3976, 4, &rule43},
1166         {3984, 8, &rule66},
1167         {3993, 36, &rule66},
1168         {4030, 8, &rule13},
1169         {4038, 1, &rule66},
1170         {4039, 6, &rule13},
1171         {4047, 1, &rule13},
1172         {4096, 34, &rule43},
1173         {4131, 5, &rule43},
1174         {4137, 2, &rule43},
1175         {4140, 1, &rule92},
1176         {4141, 4, &rule66},
1177         {4145, 1, &rule92},
1178         {4146, 1, &rule66},
1179         {4150, 2, &rule66},
1180         {4152, 1, &rule92},
1181         {4153, 1, &rule66},
1182         {4160, 10, &rule8},
1183         {4170, 6, &rule2},
1184         {4176, 6, &rule43},
1185         {4182, 2, &rule92},
1186         {4184, 2, &rule66},
1187         {4256, 38, &rule79},
1188         {4304, 41, &rule43},
1189         {4347, 1, &rule2},
1190         {4352, 90, &rule43},
1191         {4447, 68, &rule43},
1192         {4520, 82, &rule43},
1193         {4608, 7, &rule43},
1194         {4616, 63, &rule43},
1195         {4680, 1, &rule43},
1196         {4682, 4, &rule43},
1197         {4688, 7, &rule43},
1198         {4696, 1, &rule43},
1199         {4698, 4, &rule43},
1200         {4704, 39, &rule43},
1201         {4744, 1, &rule43},
1202         {4746, 4, &rule43},
1203         {4752, 31, &rule43},
1204         {4784, 1, &rule43},
1205         {4786, 4, &rule43},
1206         {4792, 7, &rule43},
1207         {4800, 1, &rule43},
1208         {4802, 4, &rule43},
1209         {4808, 7, &rule43},
1210         {4816, 7, &rule43},
1211         {4824, 23, &rule43},
1212         {4848, 31, &rule43},
1213         {4880, 1, &rule43},
1214         {4882, 4, &rule43},
1215         {4888, 7, &rule43},
1216         {4896, 39, &rule43},
1217         {4936, 19, &rule43},
1218         {4961, 8, &rule2},
1219         {4969, 9, &rule8},
1220         {4978, 11, &rule17},
1221         {5024, 85, &rule43},
1222         {5121, 620, &rule43},
1223         {5741, 2, &rule2},
1224         {5743, 8, &rule43},
1225         {5760, 1, &rule1},
1226         {5761, 26, &rule43},
1227         {5787, 1, &rule4},
1228         {5788, 1, &rule5},
1229         {5792, 75, &rule43},
1230         {5867, 3, &rule2},
1231         {5870, 3, &rule93},
1232         {5888, 13, &rule43},
1233         {5902, 4, &rule43},
1234         {5906, 3, &rule66},
1235         {5920, 18, &rule43},
1236         {5938, 3, &rule66},
1237         {5941, 2, &rule2},
1238         {5952, 18, &rule43},
1239         {5970, 2, &rule66},
1240         {5984, 13, &rule43},
1241         {5998, 3, &rule43},
1242         {6002, 2, &rule66},
1243         {6016, 52, &rule43},
1244         {6068, 2, &rule16},
1245         {6070, 1, &rule92},
1246         {6071, 7, &rule66},
1247         {6078, 8, &rule92},
1248         {6086, 1, &rule66},
1249         {6087, 2, &rule92},
1250         {6089, 11, &rule66},
1251         {6100, 3, &rule2},
1252         {6103, 1, &rule65},
1253         {6104, 3, &rule2},
1254         {6107, 1, &rule3},
1255         {6108, 1, &rule43},
1256         {6109, 1, &rule66},
1257         {6112, 10, &rule8},
1258         {6128, 10, &rule17},
1259         {6144, 6, &rule2},
1260         {6150, 1, &rule7},
1261         {6151, 4, &rule2},
1262         {6155, 3, &rule66},
1263         {6158, 1, &rule1},
1264         {6160, 10, &rule8},
1265         {6176, 35, &rule43},
1266         {6211, 1, &rule65},
1267         {6212, 52, &rule43},
1268         {6272, 41, &rule43},
1269         {6313, 1, &rule66},
1270         {6400, 29, &rule43},
1271         {6432, 3, &rule66},
1272         {6435, 4, &rule92},
1273         {6439, 2, &rule66},
1274         {6441, 3, &rule92},
1275         {6448, 2, &rule92},
1276         {6450, 1, &rule66},
1277         {6451, 6, &rule92},
1278         {6457, 3, &rule66},
1279         {6464, 1, &rule13},
1280         {6468, 2, &rule2},
1281         {6470, 10, &rule8},
1282         {6480, 30, &rule43},
1283         {6512, 5, &rule43},
1284         {6624, 32, &rule13},
1285         {7424, 44, &rule14},
1286         {7468, 54, &rule65},
1287         {7522, 10, &rule14},
1288         {7680, 1, &rule21},
1289         {7681, 1, &rule22},
1290         {7682, 1, &rule21},
1291         {7683, 1, &rule22},
1292         {7684, 1, &rule21},
1293         {7685, 1, &rule22},
1294         {7686, 1, &rule21},
1295         {7687, 1, &rule22},
1296         {7688, 1, &rule21},
1297         {7689, 1, &rule22},
1298         {7690, 1, &rule21},
1299         {7691, 1, &rule22},
1300         {7692, 1, &rule21},
1301         {7693, 1, &rule22},
1302         {7694, 1, &rule21},
1303         {7695, 1, &rule22},
1304         {7696, 1, &rule21},
1305         {7697, 1, &rule22},
1306         {7698, 1, &rule21},
1307         {7699, 1, &rule22},
1308         {7700, 1, &rule21},
1309         {7701, 1, &rule22},
1310         {7702, 1, &rule21},
1311         {7703, 1, &rule22},
1312         {7704, 1, &rule21},
1313         {7705, 1, &rule22},
1314         {7706, 1, &rule21},
1315         {7707, 1, &rule22},
1316         {7708, 1, &rule21},
1317         {7709, 1, &rule22},
1318         {7710, 1, &rule21},
1319         {7711, 1, &rule22},
1320         {7712, 1, &rule21},
1321         {7713, 1, &rule22},
1322         {7714, 1, &rule21},
1323         {7715, 1, &rule22},
1324         {7716, 1, &rule21},
1325         {7717, 1, &rule22},
1326         {7718, 1, &rule21},
1327         {7719, 1, &rule22},
1328         {7720, 1, &rule21},
1329         {7721, 1, &rule22},
1330         {7722, 1, &rule21},
1331         {7723, 1, &rule22},
1332         {7724, 1, &rule21},
1333         {7725, 1, &rule22},
1334         {7726, 1, &rule21},
1335         {7727, 1, &rule22},
1336         {7728, 1, &rule21},
1337         {7729, 1, &rule22},
1338         {7730, 1, &rule21},
1339         {7731, 1, &rule22},
1340         {7732, 1, &rule21},
1341         {7733, 1, &rule22},
1342         {7734, 1, &rule21},
1343         {7735, 1, &rule22},
1344         {7736, 1, &rule21},
1345         {7737, 1, &rule22},
1346         {7738, 1, &rule21},
1347         {7739, 1, &rule22},
1348         {7740, 1, &rule21},
1349         {7741, 1, &rule22},
1350         {7742, 1, &rule21},
1351         {7743, 1, &rule22},
1352         {7744, 1, &rule21},
1353         {7745, 1, &rule22},
1354         {7746, 1, &rule21},
1355         {7747, 1, &rule22},
1356         {7748, 1, &rule21},
1357         {7749, 1, &rule22},
1358         {7750, 1, &rule21},
1359         {7751, 1, &rule22},
1360         {7752, 1, &rule21},
1361         {7753, 1, &rule22},
1362         {7754, 1, &rule21},
1363         {7755, 1, &rule22},
1364         {7756, 1, &rule21},
1365         {7757, 1, &rule22},
1366         {7758, 1, &rule21},
1367         {7759, 1, &rule22},
1368         {7760, 1, &rule21},
1369         {7761, 1, &rule22},
1370         {7762, 1, &rule21},
1371         {7763, 1, &rule22},
1372         {7764, 1, &rule21},
1373         {7765, 1, &rule22},
1374         {7766, 1, &rule21},
1375         {7767, 1, &rule22},
1376         {7768, 1, &rule21},
1377         {7769, 1, &rule22},
1378         {7770, 1, &rule21},
1379         {7771, 1, &rule22},
1380         {7772, 1, &rule21},
1381         {7773, 1, &rule22},
1382         {7774, 1, &rule21},
1383         {7775, 1, &rule22},
1384         {7776, 1, &rule21},
1385         {7777, 1, &rule22},
1386         {7778, 1, &rule21},
1387         {7779, 1, &rule22},
1388         {7780, 1, &rule21},
1389         {7781, 1, &rule22},
1390         {7782, 1, &rule21},
1391         {7783, 1, &rule22},
1392         {7784, 1, &rule21},
1393         {7785, 1, &rule22},
1394         {7786, 1, &rule21},
1395         {7787, 1, &rule22},
1396         {7788, 1, &rule21},
1397         {7789, 1, &rule22},
1398         {7790, 1, &rule21},
1399         {7791, 1, &rule22},
1400         {7792, 1, &rule21},
1401         {7793, 1, &rule22},
1402         {7794, 1, &rule21},
1403         {7795, 1, &rule22},
1404         {7796, 1, &rule21},
1405         {7797, 1, &rule22},
1406         {7798, 1, &rule21},
1407         {7799, 1, &rule22},
1408         {7800, 1, &rule21},
1409         {7801, 1, &rule22},
1410         {7802, 1, &rule21},
1411         {7803, 1, &rule22},
1412         {7804, 1, &rule21},
1413         {7805, 1, &rule22},
1414         {7806, 1, &rule21},
1415         {7807, 1, &rule22},
1416         {7808, 1, &rule21},
1417         {7809, 1, &rule22},
1418         {7810, 1, &rule21},
1419         {7811, 1, &rule22},
1420         {7812, 1, &rule21},
1421         {7813, 1, &rule22},
1422         {7814, 1, &rule21},
1423         {7815, 1, &rule22},
1424         {7816, 1, &rule21},
1425         {7817, 1, &rule22},
1426         {7818, 1, &rule21},
1427         {7819, 1, &rule22},
1428         {7820, 1, &rule21},
1429         {7821, 1, &rule22},
1430         {7822, 1, &rule21},
1431         {7823, 1, &rule22},
1432         {7824, 1, &rule21},
1433         {7825, 1, &rule22},
1434         {7826, 1, &rule21},
1435         {7827, 1, &rule22},
1436         {7828, 1, &rule21},
1437         {7829, 1, &rule22},
1438         {7830, 5, &rule14},
1439         {7835, 1, &rule94},
1440         {7840, 1, &rule21},
1441         {7841, 1, &rule22},
1442         {7842, 1, &rule21},
1443         {7843, 1, &rule22},
1444         {7844, 1, &rule21},
1445         {7845, 1, &rule22},
1446         {7846, 1, &rule21},
1447         {7847, 1, &rule22},
1448         {7848, 1, &rule21},
1449         {7849, 1, &rule22},
1450         {7850, 1, &rule21},
1451         {7851, 1, &rule22},
1452         {7852, 1, &rule21},
1453         {7853, 1, &rule22},
1454         {7854, 1, &rule21},
1455         {7855, 1, &rule22},
1456         {7856, 1, &rule21},
1457         {7857, 1, &rule22},
1458         {7858, 1, &rule21},
1459         {7859, 1, &rule22},
1460         {7860, 1, &rule21},
1461         {7861, 1, &rule22},
1462         {7862, 1, &rule21},
1463         {7863, 1, &rule22},
1464         {7864, 1, &rule21},
1465         {7865, 1, &rule22},
1466         {7866, 1, &rule21},
1467         {7867, 1, &rule22},
1468         {7868, 1, &rule21},
1469         {7869, 1, &rule22},
1470         {7870, 1, &rule21},
1471         {7871, 1, &rule22},
1472         {7872, 1, &rule21},
1473         {7873, 1, &rule22},
1474         {7874, 1, &rule21},
1475         {7875, 1, &rule22},
1476         {7876, 1, &rule21},
1477         {7877, 1, &rule22},
1478         {7878, 1, &rule21},
1479         {7879, 1, &rule22},
1480         {7880, 1, &rule21},
1481         {7881, 1, &rule22},
1482         {7882, 1, &rule21},
1483         {7883, 1, &rule22},
1484         {7884, 1, &rule21},
1485         {7885, 1, &rule22},
1486         {7886, 1, &rule21},
1487         {7887, 1, &rule22},
1488         {7888, 1, &rule21},
1489         {7889, 1, &rule22},
1490         {7890, 1, &rule21},
1491         {7891, 1, &rule22},
1492         {7892, 1, &rule21},
1493         {7893, 1, &rule22},
1494         {7894, 1, &rule21},
1495         {7895, 1, &rule22},
1496         {7896, 1, &rule21},
1497         {7897, 1, &rule22},
1498         {7898, 1, &rule21},
1499         {7899, 1, &rule22},
1500         {7900, 1, &rule21},
1501         {7901, 1, &rule22},
1502         {7902, 1, &rule21},
1503         {7903, 1, &rule22},
1504         {7904, 1, &rule21},
1505         {7905, 1, &rule22},
1506         {7906, 1, &rule21},
1507         {7907, 1, &rule22},
1508         {7908, 1, &rule21},
1509         {7909, 1, &rule22},
1510         {7910, 1, &rule21},
1511         {7911, 1, &rule22},
1512         {7912, 1, &rule21},
1513         {7913, 1, &rule22},
1514         {7914, 1, &rule21},
1515         {7915, 1, &rule22},
1516         {7916, 1, &rule21},
1517         {7917, 1, &rule22},
1518         {7918, 1, &rule21},
1519         {7919, 1, &rule22},
1520         {7920, 1, &rule21},
1521         {7921, 1, &rule22},
1522         {7922, 1, &rule21},
1523         {7923, 1, &rule22},
1524         {7924, 1, &rule21},
1525         {7925, 1, &rule22},
1526         {7926, 1, &rule21},
1527         {7927, 1, &rule22},
1528         {7928, 1, &rule21},
1529         {7929, 1, &rule22},
1530         {7936, 8, &rule95},
1531         {7944, 8, &rule96},
1532         {7952, 6, &rule95},
1533         {7960, 6, &rule96},
1534         {7968, 8, &rule95},
1535         {7976, 8, &rule96},
1536         {7984, 8, &rule95},
1537         {7992, 8, &rule96},
1538         {8000, 6, &rule95},
1539         {8008, 6, &rule96},
1540         {8016, 1, &rule14},
1541         {8017, 1, &rule95},
1542         {8018, 1, &rule14},
1543         {8019, 1, &rule95},
1544         {8020, 1, &rule14},
1545         {8021, 1, &rule95},
1546         {8022, 1, &rule14},
1547         {8023, 1, &rule95},
1548         {8025, 1, &rule96},
1549         {8027, 1, &rule96},
1550         {8029, 1, &rule96},
1551         {8031, 1, &rule96},
1552         {8032, 8, &rule95},
1553         {8040, 8, &rule96},
1554         {8048, 2, &rule97},
1555         {8050, 4, &rule98},
1556         {8054, 2, &rule99},
1557         {8056, 2, &rule100},
1558         {8058, 2, &rule101},
1559         {8060, 2, &rule102},
1560         {8064, 8, &rule95},
1561         {8072, 8, &rule103},
1562         {8080, 8, &rule95},
1563         {8088, 8, &rule103},
1564         {8096, 8, &rule95},
1565         {8104, 8, &rule103},
1566         {8112, 2, &rule95},
1567         {8114, 1, &rule14},
1568         {8115, 1, &rule104},
1569         {8116, 1, &rule14},
1570         {8118, 2, &rule14},
1571         {8120, 2, &rule96},
1572         {8122, 2, &rule105},
1573         {8124, 1, &rule106},
1574         {8125, 1, &rule10},
1575         {8126, 1, &rule107},
1576         {8127, 3, &rule10},
1577         {8130, 1, &rule14},
1578         {8131, 1, &rule104},
1579         {8132, 1, &rule14},
1580         {8134, 2, &rule14},
1581         {8136, 4, &rule108},
1582         {8140, 1, &rule106},
1583         {8141, 3, &rule10},
1584         {8144, 2, &rule95},
1585         {8146, 2, &rule14},
1586         {8150, 2, &rule14},
1587         {8152, 2, &rule96},
1588         {8154, 2, &rule109},
1589         {8157, 3, &rule10},
1590         {8160, 2, &rule95},
1591         {8162, 3, &rule14},
1592         {8165, 1, &rule84},
1593         {8166, 2, &rule14},
1594         {8168, 2, &rule96},
1595         {8170, 2, &rule110},
1596         {8172, 1, &rule87},
1597         {8173, 3, &rule10},
1598         {8178, 1, &rule14},
1599         {8179, 1, &rule104},
1600         {8180, 1, &rule14},
1601         {8182, 2, &rule14},
1602         {8184, 2, &rule111},
1603         {8186, 2, &rule112},
1604         {8188, 1, &rule106},
1605         {8189, 2, &rule10},
1606         {8192, 12, &rule1},
1607         {8204, 4, &rule16},
1608         {8208, 6, &rule7},
1609         {8214, 2, &rule2},
1610         {8216, 1, &rule15},
1611         {8217, 1, &rule19},
1612         {8218, 1, &rule4},
1613         {8219, 2, &rule15},
1614         {8221, 1, &rule19},
1615         {8222, 1, &rule4},
1616         {8223, 1, &rule15},
1617         {8224, 8, &rule2},
1618         {8232, 1, &rule113},
1619         {8233, 1, &rule114},
1620         {8234, 5, &rule16},
1621         {8239, 1, &rule1},
1622         {8240, 9, &rule2},
1623         {8249, 1, &rule15},
1624         {8250, 1, &rule19},
1625         {8251, 4, &rule2},
1626         {8255, 2, &rule11},
1627         {8257, 3, &rule2},
1628         {8260, 1, &rule6},
1629         {8261, 1, &rule4},
1630         {8262, 1, &rule5},
1631         {8263, 11, &rule2},
1632         {8274, 1, &rule6},
1633         {8275, 1, &rule2},
1634         {8276, 1, &rule11},
1635         {8279, 1, &rule2},
1636         {8287, 1, &rule1},
1637         {8288, 4, &rule16},
1638         {8298, 6, &rule16},
1639         {8304, 1, &rule17},
1640         {8305, 1, &rule14},
1641         {8308, 6, &rule17},
1642         {8314, 3, &rule6},
1643         {8317, 1, &rule4},
1644         {8318, 1, &rule5},
1645         {8319, 1, &rule14},
1646         {8320, 10, &rule17},
1647         {8330, 3, &rule6},
1648         {8333, 1, &rule4},
1649         {8334, 1, &rule5},
1650         {8352, 18, &rule3},
1651         {8400, 13, &rule66},
1652         {8413, 4, &rule89},
1653         {8417, 1, &rule66},
1654         {8418, 3, &rule89},
1655         {8421, 6, &rule66},
1656         {8448, 2, &rule13},
1657         {8450, 1, &rule79},
1658         {8451, 4, &rule13},
1659         {8455, 1, &rule79},
1660         {8456, 2, &rule13},
1661         {8458, 1, &rule14},
1662         {8459, 3, &rule79},
1663         {8462, 2, &rule14},
1664         {8464, 3, &rule79},
1665         {8467, 1, &rule14},
1666         {8468, 1, &rule13},
1667         {8469, 1, &rule79},
1668         {8470, 3, &rule13},
1669         {8473, 5, &rule79},
1670         {8478, 6, &rule13},
1671         {8484, 1, &rule79},
1672         {8485, 1, &rule13},
1673         {8486, 1, &rule115},
1674         {8487, 1, &rule13},
1675         {8488, 1, &rule79},
1676         {8489, 1, &rule13},
1677         {8490, 1, &rule116},
1678         {8491, 1, &rule117},
1679         {8492, 2, &rule79},
1680         {8494, 1, &rule13},
1681         {8495, 1, &rule14},
1682         {8496, 2, &rule79},
1683         {8498, 1, &rule13},
1684         {8499, 1, &rule79},
1685         {8500, 1, &rule14},
1686         {8501, 4, &rule43},
1687         {8505, 1, &rule14},
1688         {8506, 2, &rule13},
1689         {8509, 1, &rule14},
1690         {8510, 2, &rule79},
1691         {8512, 5, &rule6},
1692         {8517, 1, &rule79},
1693         {8518, 4, &rule14},
1694         {8522, 1, &rule13},
1695         {8523, 1, &rule6},
1696         {8531, 13, &rule17},
1697         {8544, 16, &rule118},
1698         {8560, 16, &rule119},
1699         {8576, 4, &rule93},
1700         {8592, 5, &rule6},
1701         {8597, 5, &rule13},
1702         {8602, 2, &rule6},
1703         {8604, 4, &rule13},
1704         {8608, 1, &rule6},
1705         {8609, 2, &rule13},
1706         {8611, 1, &rule6},
1707         {8612, 2, &rule13},
1708         {8614, 1, &rule6},
1709         {8615, 7, &rule13},
1710         {8622, 1, &rule6},
1711         {8623, 31, &rule13},
1712         {8654, 2, &rule6},
1713         {8656, 2, &rule13},
1714         {8658, 1, &rule6},
1715         {8659, 1, &rule13},
1716         {8660, 1, &rule6},
1717         {8661, 31, &rule13},
1718         {8692, 268, &rule6},
1719         {8960, 8, &rule13},
1720         {8968, 4, &rule6},
1721         {8972, 20, &rule13},
1722         {8992, 2, &rule6},
1723         {8994, 7, &rule13},
1724         {9001, 1, &rule4},
1725         {9002, 1, &rule5},
1726         {9003, 81, &rule13},
1727         {9084, 1, &rule6},
1728         {9085, 30, &rule13},
1729         {9115, 25, &rule6},
1730         {9140, 1, &rule4},
1731         {9141, 1, &rule5},
1732         {9142, 1, &rule2},
1733         {9143, 26, &rule13},
1734         {9216, 39, &rule13},
1735         {9280, 11, &rule13},
1736         {9312, 60, &rule17},
1737         {9372, 26, &rule13},
1738         {9398, 26, &rule120},
1739         {9424, 26, &rule121},
1740         {9450, 22, &rule17},
1741         {9472, 183, &rule13},
1742         {9655, 1, &rule6},
1743         {9656, 9, &rule13},
1744         {9665, 1, &rule6},
1745         {9666, 54, &rule13},
1746         {9720, 8, &rule6},
1747         {9728, 24, &rule13},
1748         {9753, 86, &rule13},
1749         {9839, 1, &rule6},
1750         {9840, 14, &rule13},
1751         {9856, 18, &rule13},
1752         {9888, 2, &rule13},
1753         {9985, 4, &rule13},
1754         {9990, 4, &rule13},
1755         {9996, 28, &rule13},
1756         {10025, 35, &rule13},
1757         {10061, 1, &rule13},
1758         {10063, 4, &rule13},
1759         {10070, 1, &rule13},
1760         {10072, 7, &rule13},
1761         {10081, 7, &rule13},
1762         {10088, 1, &rule4},
1763         {10089, 1, &rule5},
1764         {10090, 1, &rule4},
1765         {10091, 1, &rule5},
1766         {10092, 1, &rule4},
1767         {10093, 1, &rule5},
1768         {10094, 1, &rule4},
1769         {10095, 1, &rule5},
1770         {10096, 1, &rule4},
1771         {10097, 1, &rule5},
1772         {10098, 1, &rule4},
1773         {10099, 1, &rule5},
1774         {10100, 1, &rule4},
1775         {10101, 1, &rule5},
1776         {10102, 30, &rule17},
1777         {10132, 1, &rule13},
1778         {10136, 24, &rule13},
1779         {10161, 14, &rule13},
1780         {10192, 22, &rule6},
1781         {10214, 1, &rule4},
1782         {10215, 1, &rule5},
1783         {10216, 1, &rule4},
1784         {10217, 1, &rule5},
1785         {10218, 1, &rule4},
1786         {10219, 1, &rule5},
1787         {10224, 16, &rule6},
1788         {10240, 256, &rule13},
1789         {10496, 131, &rule6},
1790         {10627, 1, &rule4},
1791         {10628, 1, &rule5},
1792         {10629, 1, &rule4},
1793         {10630, 1, &rule5},
1794         {10631, 1, &rule4},
1795         {10632, 1, &rule5},
1796         {10633, 1, &rule4},
1797         {10634, 1, &rule5},
1798         {10635, 1, &rule4},
1799         {10636, 1, &rule5},
1800         {10637, 1, &rule4},
1801         {10638, 1, &rule5},
1802         {10639, 1, &rule4},
1803         {10640, 1, &rule5},
1804         {10641, 1, &rule4},
1805         {10642, 1, &rule5},
1806         {10643, 1, &rule4},
1807         {10644, 1, &rule5},
1808         {10645, 1, &rule4},
1809         {10646, 1, &rule5},
1810         {10647, 1, &rule4},
1811         {10648, 1, &rule5},
1812         {10649, 63, &rule6},
1813         {10712, 1, &rule4},
1814         {10713, 1, &rule5},
1815         {10714, 1, &rule4},
1816         {10715, 1, &rule5},
1817         {10716, 32, &rule6},
1818         {10748, 1, &rule4},
1819         {10749, 1, &rule5},
1820         {10750, 258, &rule6},
1821         {11008, 14, &rule13},
1822         {11904, 26, &rule13},
1823         {11931, 89, &rule13},
1824         {12032, 214, &rule13},
1825         {12272, 12, &rule13},
1826         {12288, 1, &rule1},
1827         {12289, 3, &rule2},
1828         {12292, 1, &rule13},
1829         {12293, 1, &rule65},
1830         {12294, 1, &rule43},
1831         {12295, 1, &rule93},
1832         {12296, 1, &rule4},
1833         {12297, 1, &rule5},
1834         {12298, 1, &rule4},
1835         {12299, 1, &rule5},
1836         {12300, 1, &rule4},
1837         {12301, 1, &rule5},
1838         {12302, 1, &rule4},
1839         {12303, 1, &rule5},
1840         {12304, 1, &rule4},
1841         {12305, 1, &rule5},
1842         {12306, 2, &rule13},
1843         {12308, 1, &rule4},
1844         {12309, 1, &rule5},
1845         {12310, 1, &rule4},
1846         {12311, 1, &rule5},
1847         {12312, 1, &rule4},
1848         {12313, 1, &rule5},
1849         {12314, 1, &rule4},
1850         {12315, 1, &rule5},
1851         {12316, 1, &rule7},
1852         {12317, 1, &rule4},
1853         {12318, 2, &rule5},
1854         {12320, 1, &rule13},
1855         {12321, 9, &rule93},
1856         {12330, 6, &rule66},
1857         {12336, 1, &rule7},
1858         {12337, 5, &rule65},
1859         {12342, 2, &rule13},
1860         {12344, 3, &rule93},
1861         {12347, 1, &rule65},
1862         {12348, 1, &rule43},
1863         {12349, 1, &rule2},
1864         {12350, 2, &rule13},
1865         {12353, 86, &rule43},
1866         {12441, 2, &rule66},
1867         {12443, 2, &rule10},
1868         {12445, 2, &rule65},
1869         {12447, 1, &rule43},
1870         {12448, 1, &rule7},
1871         {12449, 90, &rule43},
1872         {12539, 1, &rule11},
1873         {12540, 3, &rule65},
1874         {12543, 1, &rule43},
1875         {12549, 40, &rule43},
1876         {12593, 94, &rule43},
1877         {12688, 2, &rule13},
1878         {12690, 4, &rule17},
1879         {12694, 10, &rule13},
1880         {12704, 24, &rule43},
1881         {12784, 16, &rule43},
1882         {12800, 31, &rule13},
1883         {12832, 10, &rule17},
1884         {12842, 26, &rule13},
1885         {12880, 1, &rule13},
1886         {12881, 15, &rule17},
1887         {12896, 30, &rule13},
1888         {12927, 1, &rule13},
1889         {12928, 10, &rule17},
1890         {12938, 39, &rule13},
1891         {12977, 15, &rule17},
1892         {12992, 63, &rule13},
1893         {13056, 256, &rule13},
1894         {13312, 6582, &rule43},
1895         {19904, 64, &rule13},
1896         {19968, 20902, &rule43},
1897         {40960, 1165, &rule43},
1898         {42128, 55, &rule13},
1899         {44032, 11172, &rule43},
1900         {55296, 896, &rule122},
1901         {56192, 128, &rule122},
1902         {56320, 1024, &rule122},
1903         {57344, 6400, &rule123},
1904         {63744, 302, &rule43},
1905         {64048, 59, &rule43},
1906         {64256, 7, &rule14},
1907         {64275, 5, &rule14},
1908         {64285, 1, &rule43},
1909         {64286, 1, &rule66},
1910         {64287, 10, &rule43},
1911         {64297, 1, &rule6},
1912         {64298, 13, &rule43},
1913         {64312, 5, &rule43},
1914         {64318, 1, &rule43},
1915         {64320, 2, &rule43},
1916         {64323, 2, &rule43},
1917         {64326, 108, &rule43},
1918         {64467, 363, &rule43},
1919         {64830, 1, &rule4},
1920         {64831, 1, &rule5},
1921         {64848, 64, &rule43},
1922         {64914, 54, &rule43},
1923         {65008, 12, &rule43},
1924         {65020, 1, &rule3},
1925         {65021, 1, &rule13},
1926         {65024, 16, &rule66},
1927         {65056, 4, &rule66},
1928         {65072, 1, &rule2},
1929         {65073, 2, &rule7},
1930         {65075, 2, &rule11},
1931         {65077, 1, &rule4},
1932         {65078, 1, &rule5},
1933         {65079, 1, &rule4},
1934         {65080, 1, &rule5},
1935         {65081, 1, &rule4},
1936         {65082, 1, &rule5},
1937         {65083, 1, &rule4},
1938         {65084, 1, &rule5},
1939         {65085, 1, &rule4},
1940         {65086, 1, &rule5},
1941         {65087, 1, &rule4},
1942         {65088, 1, &rule5},
1943         {65089, 1, &rule4},
1944         {65090, 1, &rule5},
1945         {65091, 1, &rule4},
1946         {65092, 1, &rule5},
1947         {65093, 2, &rule2},
1948         {65095, 1, &rule4},
1949         {65096, 1, &rule5},
1950         {65097, 4, &rule2},
1951         {65101, 3, &rule11},
1952         {65104, 3, &rule2},
1953         {65108, 4, &rule2},
1954         {65112, 1, &rule7},
1955         {65113, 1, &rule4},
1956         {65114, 1, &rule5},
1957         {65115, 1, &rule4},
1958         {65116, 1, &rule5},
1959         {65117, 1, &rule4},
1960         {65118, 1, &rule5},
1961         {65119, 3, &rule2},
1962         {65122, 1, &rule6},
1963         {65123, 1, &rule7},
1964         {65124, 3, &rule6},
1965         {65128, 1, &rule2},
1966         {65129, 1, &rule3},
1967         {65130, 2, &rule2},
1968         {65136, 5, &rule43},
1969         {65142, 135, &rule43},
1970         {65279, 1, &rule16},
1971         {65281, 3, &rule2},
1972         {65284, 1, &rule3},
1973         {65285, 3, &rule2},
1974         {65288, 1, &rule4},
1975         {65289, 1, &rule5},
1976         {65290, 1, &rule2},
1977         {65291, 1, &rule6},
1978         {65292, 1, &rule2},
1979         {65293, 1, &rule7},
1980         {65294, 2, &rule2},
1981         {65296, 10, &rule8},
1982         {65306, 2, &rule2},
1983         {65308, 3, &rule6},
1984         {65311, 2, &rule2},
1985         {65313, 26, &rule9},
1986         {65339, 1, &rule4},
1987         {65340, 1, &rule2},
1988         {65341, 1, &rule5},
1989         {65342, 1, &rule10},
1990         {65343, 1, &rule11},
1991         {65344, 1, &rule10},
1992         {65345, 26, &rule12},
1993         {65371, 1, &rule4},
1994         {65372, 1, &rule6},
1995         {65373, 1, &rule5},
1996         {65374, 1, &rule6},
1997         {65375, 1, &rule4},
1998         {65376, 1, &rule5},
1999         {65377, 1, &rule2},
2000         {65378, 1, &rule4},
2001         {65379, 1, &rule5},
2002         {65380, 1, &rule2},
2003         {65381, 1, &rule11},
2004         {65382, 10, &rule43},
2005         {65392, 1, &rule65},
2006         {65393, 45, &rule43},
2007         {65438, 2, &rule65},
2008         {65440, 31, &rule43},
2009         {65474, 6, &rule43},
2010         {65482, 6, &rule43},
2011         {65490, 6, &rule43},
2012         {65498, 3, &rule43},
2013         {65504, 2, &rule3},
2014         {65506, 1, &rule6},
2015         {65507, 1, &rule10},
2016         {65508, 1, &rule13},
2017         {65509, 2, &rule3},
2018         {65512, 1, &rule13},
2019         {65513, 4, &rule6},
2020         {65517, 2, &rule13},
2021         {65529, 3, &rule16},
2022         {65532, 2, &rule13},
2023         {65536, 12, &rule43},
2024         {65549, 26, &rule43},
2025         {65576, 19, &rule43},
2026         {65596, 2, &rule43},
2027         {65599, 15, &rule43},
2028         {65616, 14, &rule43},
2029         {65664, 123, &rule43},
2030         {65792, 2, &rule2},
2031         {65794, 1, &rule13},
2032         {65799, 45, &rule17},
2033         {65847, 9, &rule13},
2034         {66304, 31, &rule43},
2035         {66336, 4, &rule17},
2036         {66352, 26, &rule43},
2037         {66378, 1, &rule93},
2038         {66432, 30, &rule43},
2039         {66463, 1, &rule2},
2040         {66560, 40, &rule124},
2041         {66600, 40, &rule125},
2042         {66640, 78, &rule43},
2043         {66720, 10, &rule8},
2044         {67584, 6, &rule43},
2045         {67592, 1, &rule43},
2046         {67594, 44, &rule43},
2047         {67639, 2, &rule43},
2048         {67644, 1, &rule43},
2049         {67647, 1, &rule43},
2050         {118784, 246, &rule13},
2051         {119040, 39, &rule13},
2052         {119082, 59, &rule13},
2053         {119141, 2, &rule92},
2054         {119143, 3, &rule66},
2055         {119146, 3, &rule13},
2056         {119149, 6, &rule92},
2057         {119155, 8, &rule16},
2058         {119163, 8, &rule66},
2059         {119171, 2, &rule13},
2060         {119173, 7, &rule66},
2061         {119180, 30, &rule13},
2062         {119210, 4, &rule66},
2063         {119214, 48, &rule13},
2064         {119552, 87, &rule13},
2065         {119808, 26, &rule79},
2066         {119834, 26, &rule14},
2067         {119860, 26, &rule79},
2068         {119886, 7, &rule14},
2069         {119894, 18, &rule14},
2070         {119912, 26, &rule79},
2071         {119938, 26, &rule14},
2072         {119964, 1, &rule79},
2073         {119966, 2, &rule79},
2074         {119970, 1, &rule79},
2075         {119973, 2, &rule79},
2076         {119977, 4, &rule79},
2077         {119982, 8, &rule79},
2078         {119990, 4, &rule14},
2079         {119995, 1, &rule14},
2080         {119997, 7, &rule14},
2081         {120005, 11, &rule14},
2082         {120016, 26, &rule79},
2083         {120042, 26, &rule14},
2084         {120068, 2, &rule79},
2085         {120071, 4, &rule79},
2086         {120077, 8, &rule79},
2087         {120086, 7, &rule79},
2088         {120094, 26, &rule14},
2089         {120120, 2, &rule79},
2090         {120123, 4, &rule79},
2091         {120128, 5, &rule79},
2092         {120134, 1, &rule79},
2093         {120138, 7, &rule79},
2094         {120146, 26, &rule14},
2095         {120172, 26, &rule79},
2096         {120198, 26, &rule14},
2097         {120224, 26, &rule79},
2098         {120250, 26, &rule14},
2099         {120276, 26, &rule79},
2100         {120302, 26, &rule14},
2101         {120328, 26, &rule79},
2102         {120354, 26, &rule14},
2103         {120380, 26, &rule79},
2104         {120406, 26, &rule14},
2105         {120432, 26, &rule79},
2106         {120458, 26, &rule14},
2107         {120488, 25, &rule79},
2108         {120513, 1, &rule6},
2109         {120514, 25, &rule14},
2110         {120539, 1, &rule6},
2111         {120540, 6, &rule14},
2112         {120546, 25, &rule79},
2113         {120571, 1, &rule6},
2114         {120572, 25, &rule14},
2115         {120597, 1, &rule6},
2116         {120598, 6, &rule14},
2117         {120604, 25, &rule79},
2118         {120629, 1, &rule6},
2119         {120630, 25, &rule14},
2120         {120655, 1, &rule6},
2121         {120656, 6, &rule14},
2122         {120662, 25, &rule79},
2123         {120687, 1, &rule6},
2124         {120688, 25, &rule14},
2125         {120713, 1, &rule6},
2126         {120714, 6, &rule14},
2127         {120720, 25, &rule79},
2128         {120745, 1, &rule6},
2129         {120746, 25, &rule14},
2130         {120771, 1, &rule6},
2131         {120772, 6, &rule14},
2132         {120782, 50, &rule8},
2133         {131072, 42711, &rule43},
2134         {194560, 542, &rule43},
2135         {917505, 1, &rule16},
2136         {917536, 96, &rule16},
2137         {917760, 240, &rule66},
2138         {983040, 65534, &rule123},
2139         {1048576, 65534, &rule123}
2140 };
2141 static const struct _charblock_ convchars[]={
2142         {65, 26, &rule9},
2143         {97, 26, &rule12},
2144         {181, 1, &rule18},
2145         {192, 23, &rule9},
2146         {216, 7, &rule9},
2147         {224, 23, &rule12},
2148         {248, 7, &rule12},
2149         {255, 1, &rule20},
2150         {256, 1, &rule21},
2151         {257, 1, &rule22},
2152         {258, 1, &rule21},
2153         {259, 1, &rule22},
2154         {260, 1, &rule21},
2155         {261, 1, &rule22},
2156         {262, 1, &rule21},
2157         {263, 1, &rule22},
2158         {264, 1, &rule21},
2159         {265, 1, &rule22},
2160         {266, 1, &rule21},
2161         {267, 1, &rule22},
2162         {268, 1, &rule21},
2163         {269, 1, &rule22},
2164         {270, 1, &rule21},
2165         {271, 1, &rule22},
2166         {272, 1, &rule21},
2167         {273, 1, &rule22},
2168         {274, 1, &rule21},
2169         {275, 1, &rule22},
2170         {276, 1, &rule21},
2171         {277, 1, &rule22},
2172         {278, 1, &rule21},
2173         {279, 1, &rule22},
2174         {280, 1, &rule21},
2175         {281, 1, &rule22},
2176         {282, 1, &rule21},
2177         {283, 1, &rule22},
2178         {284, 1, &rule21},
2179         {285, 1, &rule22},
2180         {286, 1, &rule21},
2181         {287, 1, &rule22},
2182         {288, 1, &rule21},
2183         {289, 1, &rule22},
2184         {290, 1, &rule21},
2185         {291, 1, &rule22},
2186         {292, 1, &rule21},
2187         {293, 1, &rule22},
2188         {294, 1, &rule21},
2189         {295, 1, &rule22},
2190         {296, 1, &rule21},
2191         {297, 1, &rule22},
2192         {298, 1, &rule21},
2193         {299, 1, &rule22},
2194         {300, 1, &rule21},
2195         {301, 1, &rule22},
2196         {302, 1, &rule21},
2197         {303, 1, &rule22},
2198         {304, 1, &rule23},
2199         {305, 1, &rule24},
2200         {306, 1, &rule21},
2201         {307, 1, &rule22},
2202         {308, 1, &rule21},
2203         {309, 1, &rule22},
2204         {310, 1, &rule21},
2205         {311, 1, &rule22},
2206         {313, 1, &rule21},
2207         {314, 1, &rule22},
2208         {315, 1, &rule21},
2209         {316, 1, &rule22},
2210         {317, 1, &rule21},
2211         {318, 1, &rule22},
2212         {319, 1, &rule21},
2213         {320, 1, &rule22},
2214         {321, 1, &rule21},
2215         {322, 1, &rule22},
2216         {323, 1, &rule21},
2217         {324, 1, &rule22},
2218         {325, 1, &rule21},
2219         {326, 1, &rule22},
2220         {327, 1, &rule21},
2221         {328, 1, &rule22},
2222         {330, 1, &rule21},
2223         {331, 1, &rule22},
2224         {332, 1, &rule21},
2225         {333, 1, &rule22},
2226         {334, 1, &rule21},
2227         {335, 1, &rule22},
2228         {336, 1, &rule21},
2229         {337, 1, &rule22},
2230         {338, 1, &rule21},
2231         {339, 1, &rule22},
2232         {340, 1, &rule21},
2233         {341, 1, &rule22},
2234         {342, 1, &rule21},
2235         {343, 1, &rule22},
2236         {344, 1, &rule21},
2237         {345, 1, &rule22},
2238         {346, 1, &rule21},
2239         {347, 1, &rule22},
2240         {348, 1, &rule21},
2241         {349, 1, &rule22},
2242         {350, 1, &rule21},
2243         {351, 1, &rule22},
2244         {352, 1, &rule21},
2245         {353, 1, &rule22},
2246         {354, 1, &rule21},
2247         {355, 1, &rule22},
2248         {356, 1, &rule21},
2249         {357, 1, &rule22},
2250         {358, 1, &rule21},
2251         {359, 1, &rule22},
2252         {360, 1, &rule21},
2253         {361, 1, &rule22},
2254         {362, 1, &rule21},
2255         {363, 1, &rule22},
2256         {364, 1, &rule21},
2257         {365, 1, &rule22},
2258         {366, 1, &rule21},
2259         {367, 1, &rule22},
2260         {368, 1, &rule21},
2261         {369, 1, &rule22},
2262         {370, 1, &rule21},
2263         {371, 1, &rule22},
2264         {372, 1, &rule21},
2265         {373, 1, &rule22},
2266         {374, 1, &rule21},
2267         {375, 1, &rule22},
2268         {376, 1, &rule25},
2269         {377, 1, &rule21},
2270         {378, 1, &rule22},
2271         {379, 1, &rule21},
2272         {380, 1, &rule22},
2273         {381, 1, &rule21},
2274         {382, 1, &rule22},
2275         {383, 1, &rule26},
2276         {385, 1, &rule27},
2277         {386, 1, &rule21},
2278         {387, 1, &rule22},
2279         {388, 1, &rule21},
2280         {389, 1, &rule22},
2281         {390, 1, &rule28},
2282         {391, 1, &rule21},
2283         {392, 1, &rule22},
2284         {393, 2, &rule29},
2285         {395, 1, &rule21},
2286         {396, 1, &rule22},
2287         {398, 1, &rule30},
2288         {399, 1, &rule31},
2289         {400, 1, &rule32},
2290         {401, 1, &rule21},
2291         {402, 1, &rule22},
2292         {403, 1, &rule29},
2293         {404, 1, &rule33},
2294         {405, 1, &rule34},
2295         {406, 1, &rule35},
2296         {407, 1, &rule36},
2297         {408, 1, &rule21},
2298         {409, 1, &rule22},
2299         {412, 1, &rule35},
2300         {413, 1, &rule37},
2301         {414, 1, &rule38},
2302         {415, 1, &rule39},
2303         {416, 1, &rule21},
2304         {417, 1, &rule22},
2305         {418, 1, &rule21},
2306         {419, 1, &rule22},
2307         {420, 1, &rule21},
2308         {421, 1, &rule22},
2309         {422, 1, &rule40},
2310         {423, 1, &rule21},
2311         {424, 1, &rule22},
2312         {425, 1, &rule40},
2313         {428, 1, &rule21},
2314         {429, 1, &rule22},
2315         {430, 1, &rule40},
2316         {431, 1, &rule21},
2317         {432, 1, &rule22},
2318         {433, 2, &rule41},
2319         {435, 1, &rule21},
2320         {436, 1, &rule22},
2321         {437, 1, &rule21},
2322         {438, 1, &rule22},
2323         {439, 1, &rule42},
2324         {440, 1, &rule21},
2325         {441, 1, &rule22},
2326         {444, 1, &rule21},
2327         {445, 1, &rule22},
2328         {447, 1, &rule44},
2329         {452, 1, &rule45},
2330         {453, 1, &rule46},
2331         {454, 1, &rule47},
2332         {455, 1, &rule45},
2333         {456, 1, &rule46},
2334         {457, 1, &rule47},
2335         {458, 1, &rule45},
2336         {459, 1, &rule46},
2337         {460, 1, &rule47},
2338         {461, 1, &rule21},
2339         {462, 1, &rule22},
2340         {463, 1, &rule21},
2341         {464, 1, &rule22},
2342         {465, 1, &rule21},
2343         {466, 1, &rule22},
2344         {467, 1, &rule21},
2345         {468, 1, &rule22},
2346         {469, 1, &rule21},
2347         {470, 1, &rule22},
2348         {471, 1, &rule21},
2349         {472, 1, &rule22},
2350         {473, 1, &rule21},
2351         {474, 1, &rule22},
2352         {475, 1, &rule21},
2353         {476, 1, &rule22},
2354         {477, 1, &rule48},
2355         {478, 1, &rule21},
2356         {479, 1, &rule22},
2357         {480, 1, &rule21},
2358         {481, 1, &rule22},
2359         {482, 1, &rule21},
2360         {483, 1, &rule22},
2361         {484, 1, &rule21},
2362         {485, 1, &rule22},
2363         {486, 1, &rule21},
2364         {487, 1, &rule22},
2365         {488, 1, &rule21},
2366         {489, 1, &rule22},
2367         {490, 1, &rule21},
2368         {491, 1, &rule22},
2369         {492, 1, &rule21},
2370         {493, 1, &rule22},
2371         {494, 1, &rule21},
2372         {495, 1, &rule22},
2373         {497, 1, &rule45},
2374         {498, 1, &rule46},
2375         {499, 1, &rule47},
2376         {500, 1, &rule21},
2377         {501, 1, &rule22},
2378         {502, 1, &rule49},
2379         {503, 1, &rule50},
2380         {504, 1, &rule21},
2381         {505, 1, &rule22},
2382         {506, 1, &rule21},
2383         {507, 1, &rule22},
2384         {508, 1, &rule21},
2385         {509, 1, &rule22},
2386         {510, 1, &rule21},
2387         {511, 1, &rule22},
2388         {512, 1, &rule21},
2389         {513, 1, &rule22},
2390         {514, 1, &rule21},
2391         {515, 1, &rule22},
2392         {516, 1, &rule21},
2393         {517, 1, &rule22},
2394         {518, 1, &rule21},
2395         {519, 1, &rule22},
2396         {520, 1, &rule21},
2397         {521, 1, &rule22},
2398         {522, 1, &rule21},
2399         {523, 1, &rule22},
2400         {524, 1, &rule21},
2401         {525, 1, &rule22},
2402         {526, 1, &rule21},
2403         {527, 1, &rule22},
2404         {528, 1, &rule21},
2405         {529, 1, &rule22},
2406         {530, 1, &rule21},
2407         {531, 1, &rule22},
2408         {532, 1, &rule21},
2409         {533, 1, &rule22},
2410         {534, 1, &rule21},
2411         {535, 1, &rule22},
2412         {536, 1, &rule21},
2413         {537, 1, &rule22},
2414         {538, 1, &rule21},
2415         {539, 1, &rule22},
2416         {540, 1, &rule21},
2417         {541, 1, &rule22},
2418         {542, 1, &rule21},
2419         {543, 1, &rule22},
2420         {544, 1, &rule51},
2421         {546, 1, &rule21},
2422         {547, 1, &rule22},
2423         {548, 1, &rule21},
2424         {549, 1, &rule22},
2425         {550, 1, &rule21},
2426         {551, 1, &rule22},
2427         {552, 1, &rule21},
2428         {553, 1, &rule22},
2429         {554, 1, &rule21},
2430         {555, 1, &rule22},
2431         {556, 1, &rule21},
2432         {557, 1, &rule22},
2433         {558, 1, &rule21},
2434         {559, 1, &rule22},
2435         {560, 1, &rule21},
2436         {561, 1, &rule22},
2437         {562, 1, &rule21},
2438         {563, 1, &rule22},
2439         {595, 1, &rule52},
2440         {596, 1, &rule53},
2441         {598, 2, &rule54},
2442         {601, 1, &rule55},
2443         {603, 1, &rule56},
2444         {608, 1, &rule54},
2445         {611, 1, &rule57},
2446         {616, 1, &rule58},
2447         {617, 1, &rule59},
2448         {623, 1, &rule59},
2449         {626, 1, &rule60},
2450         {629, 1, &rule61},
2451         {640, 1, &rule62},
2452         {643, 1, &rule62},
2453         {648, 1, &rule62},
2454         {650, 2, &rule63},
2455         {658, 1, &rule64},
2456         {837, 1, &rule67},
2457         {902, 1, &rule68},
2458         {904, 3, &rule69},
2459         {908, 1, &rule70},
2460         {910, 2, &rule71},
2461         {913, 17, &rule9},
2462         {931, 9, &rule9},
2463         {940, 1, &rule72},
2464         {941, 3, &rule73},
2465         {945, 17, &rule12},
2466         {962, 1, &rule74},
2467         {963, 9, &rule12},
2468         {972, 1, &rule75},
2469         {973, 2, &rule76},
2470         {976, 1, &rule77},
2471         {977, 1, &rule78},
2472         {981, 1, &rule80},
2473         {982, 1, &rule81},
2474         {984, 1, &rule21},
2475         {985, 1, &rule22},
2476         {986, 1, &rule21},
2477         {987, 1, &rule22},
2478         {988, 1, &rule21},
2479         {989, 1, &rule22},
2480         {990, 1, &rule21},
2481         {991, 1, &rule22},
2482         {992, 1, &rule21},
2483         {993, 1, &rule22},
2484         {994, 1, &rule21},
2485         {995, 1, &rule22},
2486         {996, 1, &rule21},
2487         {997, 1, &rule22},
2488         {998, 1, &rule21},
2489         {999, 1, &rule22},
2490         {1000, 1, &rule21},
2491         {1001, 1, &rule22},
2492         {1002, 1, &rule21},
2493         {1003, 1, &rule22},
2494         {1004, 1, &rule21},
2495         {1005, 1, &rule22},
2496         {1006, 1, &rule21},
2497         {1007, 1, &rule22},
2498         {1008, 1, &rule82},
2499         {1009, 1, &rule83},
2500         {1010, 1, &rule84},
2501         {1012, 1, &rule85},
2502         {1013, 1, &rule86},
2503         {1015, 1, &rule21},
2504         {1016, 1, &rule22},
2505         {1017, 1, &rule87},
2506         {1018, 1, &rule21},
2507         {1019, 1, &rule22},
2508         {1024, 16, &rule88},
2509         {1040, 32, &rule9},
2510         {1072, 32, &rule12},
2511         {1104, 16, &rule83},
2512         {1120, 1, &rule21},
2513         {1121, 1, &rule22},
2514         {1122, 1, &rule21},
2515         {1123, 1, &rule22},
2516         {1124, 1, &rule21},
2517         {1125, 1, &rule22},
2518         {1126, 1, &rule21},
2519         {1127, 1, &rule22},
2520         {1128, 1, &rule21},
2521         {1129, 1, &rule22},
2522         {1130, 1, &rule21},
2523         {1131, 1, &rule22},
2524         {1132, 1, &rule21},
2525         {1133, 1, &rule22},
2526         {1134, 1, &rule21},
2527         {1135, 1, &rule22},
2528         {1136, 1, &rule21},
2529         {1137, 1, &rule22},
2530         {1138, 1, &rule21},
2531         {1139, 1, &rule22},
2532         {1140, 1, &rule21},
2533         {1141, 1, &rule22},
2534         {1142, 1, &rule21},
2535         {1143, 1, &rule22},
2536         {1144, 1, &rule21},
2537         {1145, 1, &rule22},
2538         {1146, 1, &rule21},
2539         {1147, 1, &rule22},
2540         {1148, 1, &rule21},
2541         {1149, 1, &rule22},
2542         {1150, 1, &rule21},
2543         {1151, 1, &rule22},
2544         {1152, 1, &rule21},
2545         {1153, 1, &rule22},
2546         {1162, 1, &rule21},
2547         {1163, 1, &rule22},
2548         {1164, 1, &rule21},
2549         {1165, 1, &rule22},
2550         {1166, 1, &rule21},
2551         {1167, 1, &rule22},
2552         {1168, 1, &rule21},
2553         {1169, 1, &rule22},
2554         {1170, 1, &rule21},
2555         {1171, 1, &rule22},
2556         {1172, 1, &rule21},
2557         {1173, 1, &rule22},
2558         {1174, 1, &rule21},
2559         {1175, 1, &rule22},
2560         {1176, 1, &rule21},
2561         {1177, 1, &rule22},
2562         {1178, 1, &rule21},
2563         {1179, 1, &rule22},
2564         {1180, 1, &rule21},
2565         {1181, 1, &rule22},
2566         {1182, 1, &rule21},
2567         {1183, 1, &rule22},
2568         {1184, 1, &rule21},
2569         {1185, 1, &rule22},
2570         {1186, 1, &rule21},
2571         {1187, 1, &rule22},
2572         {1188, 1, &rule21},
2573         {1189, 1, &rule22},
2574         {1190, 1, &rule21},
2575         {1191, 1, &rule22},
2576         {1192, 1, &rule21},
2577         {1193, 1, &rule22},
2578         {1194, 1, &rule21},
2579         {1195, 1, &rule22},
2580         {1196, 1, &rule21},
2581         {1197, 1, &rule22},
2582         {1198, 1, &rule21},
2583         {1199, 1, &rule22},
2584         {1200, 1, &rule21},
2585         {1201, 1, &rule22},
2586         {1202, 1, &rule21},
2587         {1203, 1, &rule22},
2588         {1204, 1, &rule21},
2589         {1205, 1, &rule22},
2590         {1206, 1, &rule21},
2591         {1207, 1, &rule22},
2592         {1208, 1, &rule21},
2593         {1209, 1, &rule22},
2594         {1210, 1, &rule21},
2595         {1211, 1, &rule22},
2596         {1212, 1, &rule21},
2597         {1213, 1, &rule22},
2598         {1214, 1, &rule21},
2599         {1215, 1, &rule22},
2600         {1217, 1, &rule21},
2601         {1218, 1, &rule22},
2602         {1219, 1, &rule21},
2603         {1220, 1, &rule22},
2604         {1221, 1, &rule21},
2605         {1222, 1, &rule22},
2606         {1223, 1, &rule21},
2607         {1224, 1, &rule22},
2608         {1225, 1, &rule21},
2609         {1226, 1, &rule22},
2610         {1227, 1, &rule21},
2611         {1228, 1, &rule22},
2612         {1229, 1, &rule21},
2613         {1230, 1, &rule22},
2614         {1232, 1, &rule21},
2615         {1233, 1, &rule22},
2616         {1234, 1, &rule21},
2617         {1235, 1, &rule22},
2618         {1236, 1, &rule21},
2619         {1237, 1, &rule22},
2620         {1238, 1, &rule21},
2621         {1239, 1, &rule22},
2622         {1240, 1, &rule21},
2623         {1241, 1, &rule22},
2624         {1242, 1, &rule21},
2625         {1243, 1, &rule22},
2626         {1244, 1, &rule21},
2627         {1245, 1, &rule22},
2628         {1246, 1, &rule21},
2629         {1247, 1, &rule22},
2630         {1248, 1, &rule21},
2631         {1249, 1, &rule22},
2632         {1250, 1, &rule21},
2633         {1251, 1, &rule22},
2634         {1252, 1, &rule21},
2635         {1253, 1, &rule22},
2636         {1254, 1, &rule21},
2637         {1255, 1, &rule22},
2638         {1256, 1, &rule21},
2639         {1257, 1, &rule22},
2640         {1258, 1, &rule21},
2641         {1259, 1, &rule22},
2642         {1260, 1, &rule21},
2643         {1261, 1, &rule22},
2644         {1262, 1, &rule21},
2645         {1263, 1, &rule22},
2646         {1264, 1, &rule21},
2647         {1265, 1, &rule22},
2648         {1266, 1, &rule21},
2649         {1267, 1, &rule22},
2650         {1268, 1, &rule21},
2651         {1269, 1, &rule22},
2652         {1272, 1, &rule21},
2653         {1273, 1, &rule22},
2654         {1280, 1, &rule21},
2655         {1281, 1, &rule22},
2656         {1282, 1, &rule21},
2657         {1283, 1, &rule22},
2658         {1284, 1, &rule21},
2659         {1285, 1, &rule22},
2660         {1286, 1, &rule21},
2661         {1287, 1, &rule22},
2662         {1288, 1, &rule21},
2663         {1289, 1, &rule22},
2664         {1290, 1, &rule21},
2665         {1291, 1, &rule22},
2666         {1292, 1, &rule21},
2667         {1293, 1, &rule22},
2668         {1294, 1, &rule21},
2669         {1295, 1, &rule22},
2670         {1329, 38, &rule90},
2671         {1377, 38, &rule91},
2672         {7680, 1, &rule21},
2673         {7681, 1, &rule22},
2674         {7682, 1, &rule21},
2675         {7683, 1, &rule22},
2676         {7684, 1, &rule21},
2677         {7685, 1, &rule22},
2678         {7686, 1, &rule21},
2679         {7687, 1, &rule22},
2680         {7688, 1, &rule21},
2681         {7689, 1, &rule22},
2682         {7690, 1, &rule21},
2683         {7691, 1, &rule22},
2684         {7692, 1, &rule21},
2685         {7693, 1, &rule22},
2686         {7694, 1, &rule21},
2687         {7695, 1, &rule22},
2688         {7696, 1, &rule21},
2689         {7697, 1, &rule22},
2690         {7698, 1, &rule21},
2691         {7699, 1, &rule22},
2692         {7700, 1, &rule21},
2693         {7701, 1, &rule22},
2694         {7702, 1, &rule21},
2695         {7703, 1, &rule22},
2696         {7704, 1, &rule21},
2697         {7705, 1, &rule22},
2698         {7706, 1, &rule21},
2699         {7707, 1, &rule22},
2700         {7708, 1, &rule21},
2701         {7709, 1, &rule22},
2702         {7710, 1, &rule21},
2703         {7711, 1, &rule22},
2704         {7712, 1, &rule21},
2705         {7713, 1, &rule22},
2706         {7714, 1, &rule21},
2707         {7715, 1, &rule22},
2708         {7716, 1, &rule21},
2709         {7717, 1, &rule22},
2710         {7718, 1, &rule21},
2711         {7719, 1, &rule22},
2712         {7720, 1, &rule21},
2713         {7721, 1, &rule22},
2714         {7722, 1, &rule21},
2715         {7723, 1, &rule22},
2716         {7724, 1, &rule21},
2717         {7725, 1, &rule22},
2718         {7726, 1, &rule21},
2719         {7727, 1, &rule22},
2720         {7728, 1, &rule21},
2721         {7729, 1, &rule22},
2722         {7730, 1, &rule21},
2723         {7731, 1, &rule22},
2724         {7732, 1, &rule21},
2725         {7733, 1, &rule22},
2726         {7734, 1, &rule21},
2727         {7735, 1, &rule22},
2728         {7736, 1, &rule21},
2729         {7737, 1, &rule22},
2730         {7738, 1, &rule21},
2731         {7739, 1, &rule22},
2732         {7740, 1, &rule21},
2733         {7741, 1, &rule22},
2734         {7742, 1, &rule21},
2735         {7743, 1, &rule22},
2736         {7744, 1, &rule21},
2737         {7745, 1, &rule22},
2738         {7746, 1, &rule21},
2739         {7747, 1, &rule22},
2740         {7748, 1, &rule21},
2741         {7749, 1, &rule22},
2742         {7750, 1, &rule21},
2743         {7751, 1, &rule22},
2744         {7752, 1, &rule21},
2745         {7753, 1, &rule22},
2746         {7754, 1, &rule21},
2747         {7755, 1, &rule22},
2748         {7756, 1, &rule21},
2749         {7757, 1, &rule22},
2750         {7758, 1, &rule21},
2751         {7759, 1, &rule22},
2752         {7760, 1, &rule21},
2753         {7761, 1, &rule22},
2754         {7762, 1, &rule21},
2755         {7763, 1, &rule22},
2756         {7764, 1, &rule21},
2757         {7765, 1, &rule22},
2758         {7766, 1, &rule21},
2759         {7767, 1, &rule22},
2760         {7768, 1, &rule21},
2761         {7769, 1, &rule22},
2762         {7770, 1, &rule21},
2763         {7771, 1, &rule22},
2764         {7772, 1, &rule21},
2765         {7773, 1, &rule22},
2766         {7774, 1, &rule21},
2767         {7775, 1, &rule22},
2768         {7776, 1, &rule21},
2769         {7777, 1, &rule22},
2770         {7778, 1, &rule21},
2771         {7779, 1, &rule22},
2772         {7780, 1, &rule21},
2773         {7781, 1, &rule22},
2774         {7782, 1, &rule21},
2775         {7783, 1, &rule22},
2776         {7784, 1, &rule21},
2777         {7785, 1, &rule22},
2778         {7786, 1, &rule21},
2779         {7787, 1, &rule22},
2780         {7788, 1, &rule21},
2781         {7789, 1, &rule22},
2782         {7790, 1, &rule21},
2783         {7791, 1, &rule22},
2784         {7792, 1, &rule21},
2785         {7793, 1, &rule22},
2786         {7794, 1, &rule21},
2787         {7795, 1, &rule22},
2788         {7796, 1, &rule21},
2789         {7797, 1, &rule22},
2790         {7798, 1, &rule21},
2791         {7799, 1, &rule22},
2792         {7800, 1, &rule21},
2793         {7801, 1, &rule22},
2794         {7802, 1, &rule21},
2795         {7803, 1, &rule22},
2796         {7804, 1, &rule21},
2797         {7805, 1, &rule22},
2798         {7806, 1, &rule21},
2799         {7807, 1, &rule22},
2800         {7808, 1, &rule21},
2801         {7809, 1, &rule22},
2802         {7810, 1, &rule21},
2803         {7811, 1, &rule22},
2804         {7812, 1, &rule21},
2805         {7813, 1, &rule22},
2806         {7814, 1, &rule21},
2807         {7815, 1, &rule22},
2808         {7816, 1, &rule21},
2809         {7817, 1, &rule22},
2810         {7818, 1, &rule21},
2811         {7819, 1, &rule22},
2812         {7820, 1, &rule21},
2813         {7821, 1, &rule22},
2814         {7822, 1, &rule21},
2815         {7823, 1, &rule22},
2816         {7824, 1, &rule21},
2817         {7825, 1, &rule22},
2818         {7826, 1, &rule21},
2819         {7827, 1, &rule22},
2820         {7828, 1, &rule21},
2821         {7829, 1, &rule22},
2822         {7835, 1, &rule94},
2823         {7840, 1, &rule21},
2824         {7841, 1, &rule22},
2825         {7842, 1, &rule21},
2826         {7843, 1, &rule22},
2827         {7844, 1, &rule21},
2828         {7845, 1, &rule22},
2829         {7846, 1, &rule21},
2830         {7847, 1, &rule22},
2831         {7848, 1, &rule21},
2832         {7849, 1, &rule22},
2833         {7850, 1, &rule21},
2834         {7851, 1, &rule22},
2835         {7852, 1, &rule21},
2836         {7853, 1, &rule22},
2837         {7854, 1, &rule21},
2838         {7855, 1, &rule22},
2839         {7856, 1, &rule21},
2840         {7857, 1, &rule22},
2841         {7858, 1, &rule21},
2842         {7859, 1, &rule22},
2843         {7860, 1, &rule21},
2844         {7861, 1, &rule22},
2845         {7862, 1, &rule21},
2846         {7863, 1, &rule22},
2847         {7864, 1, &rule21},
2848         {7865, 1, &rule22},
2849         {7866, 1, &rule21},
2850         {7867, 1, &rule22},
2851         {7868, 1, &rule21},
2852         {7869, 1, &rule22},
2853         {7870, 1, &rule21},
2854         {7871, 1, &rule22},
2855         {7872, 1, &rule21},
2856         {7873, 1, &rule22},
2857         {7874, 1, &rule21},
2858         {7875, 1, &rule22},
2859         {7876, 1, &rule21},
2860         {7877, 1, &rule22},
2861         {7878, 1, &rule21},
2862         {7879, 1, &rule22},
2863         {7880, 1, &rule21},
2864         {7881, 1, &rule22},
2865         {7882, 1, &rule21},
2866         {7883, 1, &rule22},
2867         {7884, 1, &rule21},
2868         {7885, 1, &rule22},
2869         {7886, 1, &rule21},
2870         {7887, 1, &rule22},
2871         {7888, 1, &rule21},
2872         {7889, 1, &rule22},
2873         {7890, 1, &rule21},
2874         {7891, 1, &rule22},
2875         {7892, 1, &rule21},
2876         {7893, 1, &rule22},
2877         {7894, 1, &rule21},
2878         {7895, 1, &rule22},
2879         {7896, 1, &rule21},
2880         {7897, 1, &rule22},
2881         {7898, 1, &rule21},
2882         {7899, 1, &rule22},
2883         {7900, 1, &rule21},
2884         {7901, 1, &rule22},
2885         {7902, 1, &rule21},
2886         {7903, 1, &rule22},
2887         {7904, 1, &rule21},
2888         {7905, 1, &rule22},
2889         {7906, 1, &rule21},
2890         {7907, 1, &rule22},
2891         {7908, 1, &rule21},
2892         {7909, 1, &rule22},
2893         {7910, 1, &rule21},
2894         {7911, 1, &rule22},
2895         {7912, 1, &rule21},
2896         {7913, 1, &rule22},
2897         {7914, 1, &rule21},
2898         {7915, 1, &rule22},
2899         {7916, 1, &rule21},
2900         {7917, 1, &rule22},
2901         {7918, 1, &rule21},
2902         {7919, 1, &rule22},
2903         {7920, 1, &rule21},
2904         {7921, 1, &rule22},
2905         {7922, 1, &rule21},
2906         {7923, 1, &rule22},
2907         {7924, 1, &rule21},
2908         {7925, 1, &rule22},
2909         {7926, 1, &rule21},
2910         {7927, 1, &rule22},
2911         {7928, 1, &rule21},
2912         {7929, 1, &rule22},
2913         {7936, 8, &rule95},
2914         {7944, 8, &rule96},
2915         {7952, 6, &rule95},
2916         {7960, 6, &rule96},
2917         {7968, 8, &rule95},
2918         {7976, 8, &rule96},
2919         {7984, 8, &rule95},
2920         {7992, 8, &rule96},
2921         {8000, 6, &rule95},
2922         {8008, 6, &rule96},
2923         {8017, 1, &rule95},
2924         {8019, 1, &rule95},
2925         {8021, 1, &rule95},
2926         {8023, 1, &rule95},
2927         {8025, 1, &rule96},
2928         {8027, 1, &rule96},
2929         {8029, 1, &rule96},
2930         {8031, 1, &rule96},
2931         {8032, 8, &rule95},
2932         {8040, 8, &rule96},
2933         {8048, 2, &rule97},
2934         {8050, 4, &rule98},
2935         {8054, 2, &rule99},
2936         {8056, 2, &rule100},
2937         {8058, 2, &rule101},
2938         {8060, 2, &rule102},
2939         {8064, 8, &rule95},
2940         {8072, 8, &rule103},
2941         {8080, 8, &rule95},
2942         {8088, 8, &rule103},
2943         {8096, 8, &rule95},
2944         {8104, 8, &rule103},
2945         {8112, 2, &rule95},
2946         {8115, 1, &rule104},
2947         {8120, 2, &rule96},
2948         {8122, 2, &rule105},
2949         {8124, 1, &rule106},
2950         {8126, 1, &rule107},
2951         {8131, 1, &rule104},
2952         {8136, 4, &rule108},
2953         {8140, 1, &rule106},
2954         {8144, 2, &rule95},
2955         {8152, 2, &rule96},
2956         {8154, 2, &rule109},
2957         {8160, 2, &rule95},
2958         {8165, 1, &rule84},
2959         {8168, 2, &rule96},
2960         {8170, 2, &rule110},
2961         {8172, 1, &rule87},
2962         {8179, 1, &rule104},
2963         {8184, 2, &rule111},
2964         {8186, 2, &rule112},
2965         {8188, 1, &rule106},
2966         {8486, 1, &rule115},
2967         {8490, 1, &rule116},
2968         {8491, 1, &rule117},
2969         {8544, 16, &rule118},
2970         {8560, 16, &rule119},
2971         {9398, 26, &rule120},
2972         {9424, 26, &rule121},
2973         {65313, 26, &rule9},
2974         {65345, 26, &rule12},
2975         {66560, 40, &rule124},
2976         {66600, 40, &rule125}
2977 };
2978 static const struct _charblock_ spacechars[]={
2979         {32, 1, &rule1},
2980         {160, 1, &rule1},
2981         {5760, 1, &rule1},
2982         {6158, 1, &rule1},
2983         {8192, 12, &rule1},
2984         {8239, 1, &rule1},
2985         {8287, 1, &rule1},
2986         {12288, 1, &rule1}
2987 };
2988
2989 /*
2990         Obtain the reference to character rule by doing
2991         binary search over the specified array of blocks.
2992         To make checkattr shorter, the address of
2993         nullrule is returned if the search fails:
2994         this rule defines no category and no conversion
2995         distances. The compare function returns 0 when
2996         key->start is within the block. Otherwise
2997         result of comparison of key->start and start of the
2998         current block is returned as usual.
2999 */
3000
3001 static const struct _convrule_ nullrule={0,NUMCAT_CN,0,0,0,0};
3002
3003 int blkcmp(const void *vk,const void *vb)
3004 {
3005         const struct _charblock_ *key,*cur;
3006         key=vk;
3007         cur=vb;
3008         if((key->start>=cur->start)&&(key->start<(cur->start+cur->length)))
3009         {
3010                 return 0;
3011         }
3012         if(key->start>cur->start) return 1;
3013         return -1;
3014 }
3015
3016 static const struct _convrule_ *getrule(
3017         const struct _charblock_ *blocks,
3018         int numblocks,
3019         int unichar)
3020 {
3021         struct _charblock_ key={unichar,1,(void *)0};
3022         struct _charblock_ *cb=bsearch(&key,blocks,numblocks,sizeof(key),blkcmp);
3023         if(cb==(void *)0) return &nullrule;
3024         return cb->rule;
3025 }
3026         
3027
3028
3029 /*
3030         Check whether a character (internal code) has certain attributes.
3031         Attributes (category flags) may be ORed. The function ANDs
3032         character category flags and the mask and returns the result.
3033         If the character belongs to one of the categories requested,
3034         the result will be nonzero.
3035 */
3036
3037 inline static int checkattr(int c,unsigned int catmask)
3038 {
3039         return (catmask & (getrule(allchars,(c<256)?NUM_LAT1BLOCKS:NUM_BLOCKS,c)->category));
3040 }
3041
3042 inline static int checkattr_s(int c,unsigned int catmask)
3043 {
3044         return (catmask & (getrule(spacechars,NUM_SPACEBLOCKS,c)->category));
3045 }
3046
3047 /*
3048         Define predicate functions for some combinations of categories.
3049 */
3050
3051 #define unipred(p,m) \
3052 int p(int c) \
3053 { \
3054         return checkattr(c,m); \
3055 }
3056
3057 #define unipred_s(p,m) \
3058 int p(int c) \
3059 { \
3060         return checkattr_s(c,m); \
3061 }
3062
3063 /*
3064         Make these rules as close to Hugs as possible.
3065 */
3066
3067 unipred(u_iswcntrl,GENCAT_CC)
3068 unipred(u_iswprint,~(GENCAT_ZL|GENCAT_ZP|GENCAT_CC|GENCAT_CF|GENCAT_CS|GENCAT_CO))
3069 unipred_s(u_iswspace,GENCAT_ZS)
3070 unipred(u_iswupper,(GENCAT_LU|GENCAT_LT))
3071 unipred(u_iswlower,GENCAT_LL)
3072 unipred(u_iswalpha,(GENCAT_LL|GENCAT_LU|GENCAT_LT|GENCAT_LM|GENCAT_LO))
3073
3074 unipred(u_iswalnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO|
3075                     GENCAT_MC|GENCAT_ME|GENCAT_MN|
3076                     GENCAT_NO|GENCAT_ND|GENCAT_NL))
3077
3078 #define caseconv(p,to) \
3079 int p(int c) \
3080 { \
3081         const struct _convrule_ *rule=getrule(convchars,NUM_CONVBLOCKS,c);\
3082         if(rule==&nullrule) return c;\
3083         return c+rule->to;\
3084 }
3085
3086 caseconv(u_towupper,updist)
3087 caseconv(u_towlower,lowdist)
3088 caseconv(u_towtitle,titledist)
3089
3090 int u_gencat(int c)
3091 {
3092         return getrule(allchars,NUM_BLOCKS,c)->catnumber;
3093 }
3094