1 /* Copyright (C) 2009 Trend Micro Inc.
4 * This program is a free software; you can redistribute it
5 * and/or modify it under the terms of the GNU General Public
6 * License (version 2) as published by the FSF - Free Software
11 #include "os_regex_internal.h"
14 * Available chars: a-z, A-Z, 0-9, -, _, ., @ /
16 const unsigned char hostname_map[256] = {
17 0, 0, 2, 3, 4, 5, 6, 7,
18 8, 9, 10, 11, 12, 13, 14, 15,
19 16, 17, 18, 19, 20, 21, 22, 23,
20 24, 25, 26, 27, 28, 29, 30, 31,
21 32, 33, 34, 35, 36, 37, 38, 39,
22 1, 1, 42, 43, 44, 1, 1, 1,
23 1, 1, 1, 1, 1, 1, 1, 1,
24 1, 1, 58, 59, 60, 61, 62, 63,
25 1, 1, 1, 1, 1, 1, 1, 1,
26 1, 1, 1, 1, 1, 1, 1, 1,
27 1, 1, 1, 1, 1, 1, 1, 1,
28 1, 1, 1, 91, 92, 93, 94, 1,
29 96, 1, 1, 1, 1, 1, 1, 1,
30 1, 1, 1, 1, 1, 1, 1, 1,
31 1, 1, 1, 1, 1, 1, 1, 1,
32 1, 1, 1, 123, 124, 125, 126, 127,
33 128, 129, 130, 131, 132, 133, 134, 135,
34 136, 137, 138, 139, 140, 141, 142, 143,
35 144, 145, 146, 147, 148, 149, 150, 151,
36 152, 153, 154, 155, 156, 157, 158, 159,
37 160, 161, 162, 163, 164, 165, 166, 167,
38 168, 169, 170, 171, 172, 173, 174, 175,
39 176, 177, 178, 179, 180, 181, 182, 183,
40 184, 185, 186, 187, 188, 189, 190, 191,
41 192, 193, 194, 195, 196, 197, 198, 199,
42 200, 201, 202, 203, 204, 205, 206, 207,
43 208, 209, 210, 211, 212, 213, 214, 215,
44 216, 217, 218, 219, 220, 221, 222, 223,
45 224, 225, 226, 227, 228, 229, 230, 231,
46 232, 233, 234, 235, 236, 237, 238, 239,
47 240, 241, 242, 243, 244, 245, 246, 247,
48 240, 241, 242, 243, 244, 245, 246, 247,
51 const unsigned char charmap[256] = {
52 0, 1, 2, 3, 4, 5, 6, 7,
53 8, 9, 10, 11, 12, 13, 14, 15,
54 16, 17, 18, 19, 20, 21, 22, 23,
55 24, 25, 26, 27, 28, 29, 30, 31,
56 32, 33, 34, 35, 36, 37, 38, 39,
57 40, 41, 42, 43, 44, 45, 46, 47,
58 48, 49, 50, 51, 52, 53, 54, 55,
59 56, 57, 58, 59, 60, 61, 62, 63,
60 64, 97, 98, 99, 100, 101, 102, 103,
61 104, 105, 106, 107, 108, 109, 110, 111,
62 112, 113, 114, 115, 116, 117, 118, 119,
63 120, 121, 122, 91, 92, 93, 94, 95,
64 96, 97, 98, 99, 100, 101, 102, 103,
65 104, 105, 106, 107, 108, 109, 110, 111,
66 112, 113, 114, 115, 116, 117, 118, 119,
67 120, 121, 122, 123, 124, 125, 126, 127,
68 128, 129, 130, 131, 132, 133, 134, 135,
69 136, 137, 138, 139, 140, 141, 142, 143,
70 144, 145, 146, 147, 148, 149, 150, 151,
71 152, 153, 154, 155, 156, 157, 158, 159,
72 160, 161, 162, 163, 164, 165, 166, 167,
73 168, 169, 170, 171, 172, 173, 174, 175,
74 176, 177, 178, 179, 180, 181, 182, 183,
75 184, 185, 186, 187, 188, 189, 190, 191,
76 192, 193, 194, 195, 196, 197, 198, 199,
77 200, 201, 202, 203, 204, 205, 206, 207,
78 208, 209, 210, 211, 212, 213, 214, 215,
79 216, 217, 218, 219, 220, 221, 222, 223,
80 224, 225, 226, 227, 228, 229, 230, 231,
81 232, 233, 234, 235, 236, 237, 238, 239,
82 240, 241, 242, 243, 244, 245, 246, 247,
83 248, 249, 250, 251, 252, 253, 254, 255,
86 const unsigned char regexmap[][256] = {
88 0, 0, 0, 0, 0, 0, 0, 0,
89 0, 0, 0, 0, 0, 0, 0, 0,
90 0, 0, 0, 0, 0, 0, 0, 0,
91 0, 0, 0, 0, 0, 0, 0, 0,
92 0, 0, 0, 0, 0, 0, 0, 0,
93 0, 0, 0, 0, 0, 0, 0, 0,
94 1, 1, 1, 1, 1, 1, 1, 1,
95 1, 1, 0, 59, 60, 61, 62, 63,
96 64, 97, 98, 99, 100, 101, 102, 103,
97 104, 105, 106, 107, 108, 109, 110, 111,
98 112, 113, 114, 115, 116, 117, 118, 119,
99 120, 121, 122, 91, 92, 93, 94, 95,
100 96, 97, 98, 99, 100, 101, 102, 103,
101 104, 105, 106, 107, 108, 109, 110, 111,
102 112, 113, 114, 115, 116, 117, 118, 119,
103 120, 121, 122, 123, 124, 125, 126, 127,
104 128, 129, 130, 131, 132, 133, 134, 135,
105 136, 137, 138, 139, 140, 141, 142, 143,
106 144, 145, 146, 147, 148, 149, 150, 151,
107 152, 153, 154, 155, 156, 157, 158, 159,
108 160, 161, 162, 163, 164, 165, 166, 167,
109 168, 169, 170, 171, 172, 173, 174, 175,
110 176, 177, 178, 179, 180, 181, 182, 183,
111 184, 185, 186, 187, 188, 189, 190, 191,
112 192, 193, 194, 195, 196, 197, 198, 199,
113 200, 201, 202, 203, 204, 205, 206, 207,
114 208, 209, 210, 211, 212, 213, 214, 215,
115 216, 217, 218, 219, 220, 221, 222, 223,
116 224, 225, 226, 227, 228, 229, 230, 231,
117 232, 233, 234, 235, 236, 237, 238, 239,
118 240, 241, 242, 243, 244, 245, 246, 247,
119 248, 249, 250, 251, 252, 253, 254, 255,
122 0, 0, 0, 0, 0, 0, 0, 0,
123 0, 0, 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0, 0, 0, 0,
125 0, 0, 0, 0, 0, 0, 0, 0,
126 0, 0, 0, 0, 0, 0, 0, 0,
127 0, 0, 0, 0, 0, 0, 0, 0,
128 1, 1, 1, 1, 1, 1, 1, 1,
129 1, 1, 0, 59, 60, 61, 62, 63,
130 64, 97, 98, 99, 100, 101, 102, 103,
131 104, 105, 106, 107, 108, 109, 110, 111,
132 112, 113, 114, 115, 116, 117, 118, 119,
133 120, 121, 122, 91, 92, 93, 94, 95,
134 96, 97, 98, 99, 100, 101, 102, 103,
135 104, 105, 106, 107, 108, 109, 110, 111,
136 112, 113, 114, 115, 116, 117, 118, 119,
137 120, 121, 122, 123, 124, 125, 126, 127,
138 128, 129, 130, 131, 132, 133, 134, 135,
139 136, 137, 138, 139, 140, 141, 142, 143,
140 144, 145, 146, 147, 148, 149, 150, 151,
141 152, 153, 154, 155, 156, 157, 158, 159,
142 160, 161, 162, 163, 164, 165, 166, 167,
143 168, 169, 170, 171, 172, 173, 174, 175,
144 176, 177, 178, 179, 180, 181, 182, 183,
145 184, 185, 186, 187, 188, 189, 190, 191,
146 192, 193, 194, 195, 196, 197, 198, 199,
147 200, 201, 202, 203, 204, 205, 206, 207,
148 208, 209, 210, 211, 212, 213, 214, 215,
149 216, 217, 218, 219, 220, 221, 222, 223,
150 224, 225, 226, 227, 228, 229, 230, 231,
151 232, 233, 234, 235, 236, 237, 238, 239,
152 240, 241, 242, 243, 244, 245, 246, 247,
153 248, 249, 250, 251, 252, 253, 254, 255,
156 0, 0, 2, 3, 4, 5, 6, 7,
157 8, 9, 10, 11, 12, 13, 14, 15,
158 16, 17, 18, 19, 20, 21, 22, 23,
159 24, 25, 26, 27, 28, 29, 30, 31,
160 32, 33, 34, 35, 36, 37, 38, 39,
161 40, 41, 42, 43, 44, 1, 46, 47,
162 1, 1, 1, 1, 1, 1, 1, 1,
163 1, 1, 58, 59, 60, 61, 62, 63,
164 1, 1, 1, 1, 1, 1, 1, 1,
165 1, 1, 1, 1, 1, 1, 1, 1,
166 1, 1, 1, 1, 1, 1, 1, 1,
167 1, 1, 1, 91, 92, 93, 94, 1,
168 96, 1, 1, 1, 1, 1, 1, 1,
169 1, 1, 1, 1, 1, 1, 1, 1,
170 1, 1, 1, 1, 1, 1, 1, 1,
171 1, 1, 1, 123, 124, 125, 126, 127,
172 128, 129, 130, 131, 132, 133, 134, 135,
173 136, 137, 138, 139, 140, 141, 142, 143,
174 144, 145, 146, 147, 148, 149, 150, 151,
175 152, 153, 154, 155, 156, 157, 158, 159,
176 160, 161, 162, 163, 164, 165, 166, 167,
177 168, 169, 170, 171, 172, 173, 174, 175,
178 176, 177, 178, 179, 180, 181, 182, 183,
179 184, 185, 186, 187, 188, 189, 190, 191,
180 192, 193, 194, 195, 196, 197, 198, 199,
181 200, 201, 202, 203, 204, 205, 206, 207,
182 208, 209, 210, 211, 212, 213, 214, 215,
183 216, 217, 218, 219, 220, 221, 222, 223,
184 224, 225, 226, 227, 228, 229, 230, 231,
185 232, 233, 234, 235, 236, 237, 238, 239,
186 240, 241, 242, 243, 244, 245, 246, 247,
187 240, 241, 242, 243, 244, 245, 246, 247,
190 0, 0, 2, 3, 4, 5, 6, 7,
191 8, 9, 10, 11, 12, 13, 14, 15,
192 16, 17, 18, 19, 20, 21, 22, 23,
193 24, 25, 26, 27, 28, 29, 30, 31,
194 1, 33, 34, 35, 36, 37, 38, 39,
195 40, 41, 42, 43, 44, 45, 46, 47,
196 48, 49, 50, 51, 52, 53, 54, 55,
197 56, 57, 58, 59, 60, 61, 62, 63,
198 64, 97, 98, 99, 100, 101, 102, 103,
199 104, 105, 106, 107, 108, 109, 110, 111,
200 112, 113, 114, 115, 116, 117, 118, 119,
201 120, 121, 122, 91, 92, 93, 94, 95,
202 96, 97, 98, 99, 100, 101, 102, 103,
203 104, 105, 106, 107, 108, 109, 110, 111,
204 112, 113, 114, 115, 116, 117, 118, 119,
205 120, 121, 122, 123, 124, 125, 126, 127,
206 128, 129, 130, 131, 132, 133, 134, 135,
207 136, 137, 138, 139, 140, 141, 142, 143,
208 144, 145, 146, 147, 148, 149, 150, 151,
209 152, 153, 154, 155, 156, 157, 158, 159,
210 160, 161, 162, 163, 164, 165, 166, 167,
211 168, 169, 170, 171, 172, 173, 174, 175,
212 176, 177, 178, 179, 180, 181, 182, 183,
213 184, 185, 186, 187, 188, 189, 190, 191,
214 192, 193, 194, 195, 196, 197, 198, 199,
215 200, 201, 202, 203, 204, 205, 206, 207,
216 208, 209, 210, 211, 212, 213, 214, 215,
217 216, 217, 218, 219, 220, 221, 222, 223,
218 224, 225, 226, 227, 228, 229, 230, 231,
219 232, 233, 234, 235, 236, 237, 238, 239,
220 240, 241, 242, 243, 244, 245, 246, 247,
221 248, 249, 250, 251, 252, 253, 254, 255,
224 0, 0, 2, 3, 4, 5, 6, 7,
225 8, 9, 10, 11, 12, 13, 14, 15,
226 16, 17, 18, 19, 20, 21, 22, 23,
227 24, 25, 26, 27, 28, 29, 30, 31,
228 32, 1, 1, 1, 1, 1, 1, 1,
229 1, 1, 1, 1, 1, 1, 1, 47,
230 48, 49, 50, 51, 52, 53, 54, 55,
231 56, 57, 1, 1, 1, 1, 1, 1,
232 64, 97, 98, 99, 100, 101, 102, 103,
233 104, 105, 106, 107, 108, 109, 110, 111,
234 112, 113, 114, 115, 116, 117, 118, 119,
235 120, 121, 122, 1, 0, 1, 94, 95,
236 96, 97, 98, 99, 100, 101, 102, 103,
237 104, 105, 106, 107, 108, 109, 110, 111,
238 112, 113, 114, 115, 116, 117, 118, 119,
239 120, 121, 122, 1, 1, 1, 126, 127,
240 128, 129, 130, 131, 132, 133, 134, 135,
241 136, 137, 138, 139, 140, 141, 142, 143,
242 144, 145, 146, 147, 148, 149, 150, 151,
243 152, 153, 154, 155, 156, 157, 158, 159,
244 160, 161, 162, 163, 164, 165, 166, 167,
245 168, 169, 170, 171, 172, 173, 174, 175,
246 176, 177, 178, 179, 180, 181, 182, 183,
247 184, 185, 186, 187, 188, 189, 190, 191,
248 192, 193, 194, 195, 196, 197, 198, 199,
249 200, 201, 202, 203, 204, 205, 206, 207,
250 208, 209, 210, 211, 212, 213, 214, 215,
251 216, 217, 218, 219, 220, 221, 222, 223,
252 224, 225, 226, 227, 228, 229, 230, 231,
253 232, 233, 234, 235, 236, 237, 238, 239,
254 240, 241, 242, 243, 244, 245, 246, 247,
255 248, 249, 250, 251, 252, 253, 254, 255,
258 0, 0, 0, 0, 0, 0, 0, 0,
259 0, 0, 0, 0, 0, 0, 0, 0,
260 0, 0, 0, 0, 0, 0, 0, 0,
261 0, 0, 0, 0, 0, 0, 0, 0,
262 0, 0, 0, 0, 0, 0, 0, 0,
263 1, 0, 0, 0, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 0, 0, 0,
265 0, 0, 0, 0, 0, 0, 0, 0,
266 0, 0, 0, 0, 0, 0, 0, 0,
267 0, 0, 0, 0, 0, 0, 0, 0,
268 0, 0, 0, 0, 0, 0, 0, 0,
269 0, 0, 0, 0, 0, 0, 0, 0,
270 0, 0, 0, 0, 0, 0, 0, 0,
271 0, 0, 0, 0, 0, 0, 0, 0,
272 0, 0, 0, 0, 0, 0, 0, 0,
273 0, 0, 0, 0, 0, 0, 0, 0,
274 0, 0, 0, 0, 0, 0, 0, 0,
275 0, 0, 0, 0, 0, 0, 0, 0,
276 0, 0, 0, 0, 0, 0, 0, 0,
277 0, 0, 0, 0, 0, 0, 0, 0,
278 0, 0, 0, 0, 0, 0, 0, 0,
279 0, 0, 0, 0, 0, 0, 0, 0,
280 0, 0, 0, 0, 0, 0, 0, 0,
281 0, 0, 0, 0, 0, 0, 0, 0,
282 0, 0, 0, 0, 0, 0, 0, 0,
283 0, 0, 0, 0, 0, 0, 0, 0,
284 0, 0, 0, 0, 0, 0, 0, 0,
285 0, 0, 0, 0, 0, 0, 0, 0,
286 0, 0, 0, 0, 0, 0, 0, 0,
287 0, 0, 0, 0, 0, 0, 0, 0,
288 0, 0, 0, 0, 0, 0, 0, 0,
289 0, 0, 0, 0, 0, 0, 0, 0,
292 0, 0, 0, 0, 0, 0, 0, 0,
293 0, 0, 0, 0, 0, 0, 0, 0,
294 0, 0, 0, 0, 0, 0, 0, 0,
295 0, 0, 0, 0, 0, 0, 0, 0,
296 0, 0, 0, 0, 0, 0, 0, 0,
297 0, 1, 0, 0, 0, 0, 0, 0,
298 0, 0, 0, 0, 0, 0, 0, 0,
299 0, 0, 0, 0, 0, 0, 0, 0,
300 0, 0, 0, 0, 0, 0, 0, 0,
301 0, 0, 0, 0, 0, 0, 0, 0,
302 0, 0, 0, 0, 0, 0, 0, 0,
303 0, 0, 0, 0, 0, 0, 0, 0,
304 0, 0, 0, 0, 0, 0, 0, 0,
305 0, 0, 0, 0, 0, 0, 0, 0,
306 0, 0, 0, 0, 0, 0, 0, 0,
307 0, 0, 0, 0, 0, 0, 0, 0,
308 0, 0, 0, 0, 0, 0, 0, 0,
309 0, 0, 0, 0, 0, 0, 0, 0,
310 0, 0, 0, 0, 0, 0, 0, 0,
311 0, 0, 0, 0, 0, 0, 0, 0,
312 0, 0, 0, 0, 0, 0, 0, 0,
313 0, 0, 0, 0, 0, 0, 0, 0,
314 0, 0, 0, 0, 0, 0, 0, 0,
315 0, 0, 0, 0, 0, 0, 0, 0,
316 0, 0, 0, 0, 0, 0, 0, 0,
317 0, 0, 0, 0, 0, 0, 0, 0,
318 0, 0, 0, 0, 0, 0, 0, 0,
319 0, 0, 0, 0, 0, 0, 0, 0,
320 0, 0, 0, 0, 0, 0, 0, 0,
321 0, 0, 0, 0, 0, 0, 0, 0,
322 0, 0, 0, 0, 0, 0, 0, 0,
323 0, 0, 0, 0, 0, 0, 0, 0,
326 0, 0, 0, 0, 0, 0, 0, 0,
327 0, 0, 0, 0, 0, 0, 0, 0,
328 0, 0, 0, 0, 0, 0, 0, 0,
329 0, 0, 0, 0, 0, 0, 0, 0,
330 0, 0, 0, 0, 0, 0, 0, 0,
331 0, 0, 0, 0, 0, 0, 0, 0,
332 0, 0, 0, 0, 0, 0, 0, 0,
333 0, 0, 0, 0, 0, 0, 0, 0,
334 0, 0, 0, 0, 0, 0, 0, 0,
335 0, 0, 0, 0, 0, 0, 0, 0,
336 0, 0, 0, 0, 0, 0, 0, 0,
337 0, 0, 0, 0, 1, 0, 0, 0,
338 0, 0, 0, 0, 0, 0, 0, 0,
339 0, 0, 0, 0, 0, 0, 0, 0,
340 0, 0, 0, 0, 0, 0, 0, 0,
341 0, 0, 0, 0, 0, 0, 0, 0,
342 0, 0, 0, 0, 0, 0, 0, 0,
343 0, 0, 0, 0, 0, 0, 0, 0,
344 0, 0, 0, 0, 0, 0, 0, 0,
345 0, 0, 0, 0, 0, 0, 0, 0,
346 0, 0, 0, 0, 0, 0, 0, 0,
347 0, 0, 0, 0, 0, 0, 0, 0,
348 0, 0, 0, 0, 0, 0, 0, 0,
349 0, 0, 0, 0, 0, 0, 0, 0,
350 0, 0, 0, 0, 0, 0, 0, 0,
351 0, 0, 0, 0, 0, 0, 0, 0,
352 0, 0, 0, 0, 0, 0, 0, 0,
353 0, 0, 0, 0, 0, 0, 0, 0,
354 0, 0, 0, 0, 0, 0, 0, 0,
355 0, 0, 0, 0, 0, 0, 0, 0,
356 0, 0, 0, 0, 0, 0, 0, 0,
357 0, 0, 0, 0, 0, 0, 0, 0,
360 1, 1, 1, 1, 1, 1, 1, 1,
361 1, 1, 1, 1, 1, 1, 1, 1,
362 1, 1, 1, 1, 1, 1, 1, 1,
363 1, 1, 1, 1, 1, 1, 1, 1,
364 1, 1, 1, 1, 1, 1, 1, 1,
365 1, 1, 1, 1, 1, 1, 1, 1,
366 0, 0, 0, 0, 0, 0, 0, 0,
367 0, 0, 1, 1, 1, 1, 1, 1,
368 1, 1, 1, 1, 1, 1, 1, 1,
369 1, 1, 1, 1, 1, 1, 1, 1,
370 1, 1, 1, 1, 1, 1, 1, 1,
371 1, 1, 1, 1, 1, 1, 1, 1,
372 1, 1, 1, 1, 1, 1, 1, 1,
373 1, 1, 1, 1, 1, 1, 1, 1,
374 1, 1, 1, 1, 1, 1, 1, 1,
375 1, 1, 1, 1, 1, 1, 1, 1,
376 1, 1, 1, 1, 1, 1, 1, 1,
377 1, 1, 1, 1, 1, 1, 1, 1,
378 1, 1, 1, 1, 1, 1, 1, 1,
379 1, 1, 1, 1, 1, 1, 1, 1,
380 1, 1, 1, 1, 1, 1, 1, 1,
381 1, 1, 1, 1, 1, 1, 1, 1,
382 1, 1, 1, 1, 1, 1, 1, 1,
383 1, 1, 1, 1, 1, 1, 1, 1,
384 1, 1, 1, 1, 1, 1, 1, 1,
385 1, 1, 1, 1, 1, 1, 1, 1,
386 1, 1, 1, 1, 1, 1, 1, 1,
387 1, 1, 1, 1, 1, 1, 1, 1,
388 1, 1, 1, 1, 1, 1, 1, 1,
389 1, 1, 1, 1, 1, 1, 1, 1,
390 1, 1, 1, 1, 1, 1, 1, 1,
391 1, 1, 1, 1, 1, 1, 1, 1,
394 1, 1, 1, 1, 1, 1, 1, 1,
395 1, 1, 1, 1, 1, 1, 1, 1,
396 1, 1, 1, 1, 1, 1, 1, 1,
397 1, 1, 1, 1, 1, 1, 1, 1,
398 1, 1, 1, 1, 1, 1, 1, 1,
399 1, 1, 1, 1, 1, 0, 1, 1,
400 0, 0, 0, 0, 0, 0, 0, 0,
401 0, 0, 1, 1, 1, 1, 1, 1,
402 0, 0, 0, 0, 0, 0, 0, 0,
403 0, 0, 0, 0, 0, 0, 0, 0,
404 0, 0, 0, 0, 0, 0, 0, 0,
405 0, 0, 0, 1, 1, 1, 1, 0,
406 1, 0, 0, 0, 0, 0, 0, 0,
407 0, 0, 0, 0, 0, 0, 0, 0,
408 0, 0, 0, 0, 0, 0, 0, 0,
409 0, 0, 0, 1, 1, 1, 1, 1,
410 1, 1, 1, 1, 1, 1, 1, 1,
411 1, 1, 1, 1, 1, 1, 1, 1,
412 1, 1, 1, 1, 1, 1, 1, 1,
413 1, 1, 1, 1, 1, 1, 1, 1,
414 1, 1, 1, 1, 1, 1, 1, 1,
415 1, 1, 1, 1, 1, 1, 1, 1,
416 1, 1, 1, 1, 1, 1, 1, 1,
417 1, 1, 1, 1, 1, 1, 1, 1,
418 1, 1, 1, 1, 1, 1, 1, 1,
419 1, 1, 1, 1, 1, 1, 1, 1,
420 1, 1, 1, 1, 1, 1, 1, 1,
421 1, 1, 1, 1, 1, 1, 1, 1,
422 1, 1, 1, 1, 1, 1, 1, 1,
423 1, 1, 1, 1, 1, 1, 1, 1,
424 1, 1, 1, 1, 1, 1, 1, 1,
425 1, 1, 1, 1, 1, 1, 1, 1,
428 1, 1, 1, 1, 1, 1, 1, 1,
429 1, 1, 1, 1, 1, 1, 1, 1,
430 1, 1, 1, 1, 1, 1, 1, 1,
431 1, 1, 1, 1, 1, 1, 1, 1,
432 0, 1, 1, 1, 1, 1, 1, 1,
433 1, 1, 1, 1, 1, 1, 1, 1,
434 1, 1, 1, 1, 1, 1, 1, 1,
435 1, 1, 1, 1, 1, 1, 1, 1,
436 1, 1, 1, 1, 1, 1, 1, 1,
437 1, 1, 1, 1, 1, 1, 1, 1,
438 1, 1, 1, 1, 1, 1, 1, 1,
439 1, 1, 1, 1, 1, 1, 1, 1,
440 1, 1, 1, 1, 1, 1, 1, 1,
441 1, 1, 1, 1, 1, 1, 1, 1,
442 1, 1, 1, 1, 1, 1, 1, 1,
443 1, 1, 1, 1, 1, 1, 1, 1,
444 1, 1, 1, 1, 1, 1, 1, 1,
445 1, 1, 1, 1, 1, 1, 1, 1,
446 1, 1, 1, 1, 1, 1, 1, 1,
447 1, 1, 1, 1, 1, 1, 1, 1,
448 1, 1, 1, 1, 1, 1, 1, 1,
449 1, 1, 1, 1, 1, 1, 1, 1,
450 1, 1, 1, 1, 1, 1, 1, 1,
451 1, 1, 1, 1, 1, 1, 1, 1,
452 1, 1, 1, 1, 1, 1, 1, 1,
453 1, 1, 1, 1, 1, 1, 1, 1,
454 1, 1, 1, 1, 1, 1, 1, 1,
455 1, 1, 1, 1, 1, 1, 1, 1,
456 1, 1, 1, 1, 1, 1, 1, 1,
457 1, 1, 1, 1, 1, 1, 1, 1,
458 1, 1, 1, 1, 1, 1, 1, 1,
459 1, 1, 1, 1, 1, 1, 1, 1,
462 1, 1, 1, 1, 1, 1, 1, 1,
463 1, 1, 1, 1, 1, 1, 1, 1,
464 1, 1, 1, 1, 1, 1, 1, 1,
465 1, 1, 1, 1, 1, 1, 1, 1,
466 1, 1, 1, 1, 1, 1, 1, 1,
467 1, 1, 1, 1, 1, 1, 1, 1,
468 1, 1, 1, 1, 1, 1, 1, 1,
469 1, 1, 1, 1, 1, 1, 1, 1,
470 1, 1, 1, 1, 1, 1, 1, 1,
471 1, 1, 1, 1, 1, 1, 1, 1,
472 1, 1, 1, 1, 1, 1, 1, 1,
473 1, 1, 1, 1, 1, 1, 1, 1,
474 1, 1, 1, 1, 1, 1, 1, 1,
475 1, 1, 1, 1, 1, 1, 1, 1,
476 1, 1, 1, 1, 1, 1, 1, 1,
477 1, 1, 1, 1, 1, 1, 1, 1,
478 1, 1, 1, 1, 1, 1, 1, 1,
479 1, 1, 1, 1, 1, 1, 1, 1,
480 1, 1, 1, 1, 1, 1, 1, 1,
481 1, 1, 1, 1, 1, 1, 1, 1,
482 1, 1, 1, 1, 1, 1, 1, 1,
483 1, 1, 1, 1, 1, 1, 1, 1,
484 1, 1, 1, 1, 1, 1, 1, 1,
485 1, 1, 1, 1, 1, 1, 1, 1,
486 1, 1, 1, 1, 1, 1, 1, 1,
487 1, 1, 1, 1, 1, 1, 1, 1,
488 1, 1, 1, 1, 1, 1, 1, 1,
489 1, 1, 1, 1, 1, 1, 1, 1,
490 1, 1, 1, 1, 1, 1, 1, 1,
491 1, 1, 1, 1, 1, 1, 1, 1,
492 1, 1, 1, 1, 1, 1, 1, 1,
493 1, 1, 1, 1, 1, 1, 1, 1,
496 0, 0, 2, 3, 4, 5, 6, 7,
497 8, 1, 10, 11, 12, 13, 14, 15,
498 16, 17, 18, 19, 20, 21, 22, 23,
499 24, 25, 26, 27, 28, 29, 30, 31,
500 32, 33, 34, 35, 36, 37, 38, 39,
501 40, 41, 42, 43, 44, 45, 46, 47,
502 48, 49, 50, 51, 52, 53, 54, 55,
503 56, 57, 58, 59, 60, 61, 62, 63,
504 64, 97, 98, 99, 100, 101, 102, 103,
505 104, 105, 106, 107, 108, 109, 110, 111,
506 112, 113, 114, 115, 116, 117, 118, 119,
507 120, 121, 122, 91, 92, 93, 94, 95,
508 96, 97, 98, 99, 100, 101, 102, 103,
509 104, 105, 106, 107, 108, 109, 110, 111,
510 112, 113, 114, 115, 116, 117, 118, 119,
511 120, 121, 122, 123, 124, 125, 126, 127,
512 128, 129, 130, 131, 132, 133, 134, 135,
513 136, 137, 138, 139, 140, 141, 142, 143,
514 144, 145, 146, 147, 148, 149, 150, 151,
515 152, 153, 154, 155, 156, 157, 158, 159,
516 160, 161, 162, 163, 164, 165, 166, 167,
517 168, 169, 170, 171, 172, 173, 174, 175,
518 176, 177, 178, 179, 180, 181, 182, 183,
519 184, 185, 186, 187, 188, 189, 190, 191,
520 192, 193, 194, 195, 196, 197, 198, 199,
521 200, 201, 202, 203, 204, 205, 206, 207,
522 208, 209, 210, 211, 212, 213, 214, 215,
523 216, 217, 218, 219, 220, 221, 222, 223,
524 224, 225, 226, 227, 228, 229, 230, 231,
525 232, 233, 234, 235, 236, 237, 238, 239,
526 240, 241, 242, 243, 244, 245, 246, 247,
527 248, 249, 250, 251, 252, 253, 254, 255,
530 0, 0, 2, 3, 4, 5, 6, 7,
531 8, 10, 10, 11, 12, 13, 14, 15,
532 16, 17, 18, 19, 20, 21, 22, 23,
533 24, 25, 26, 27, 28, 29, 30, 31,
534 32, 33, 34, 35, 1, 37, 38, 39,
535 40, 41, 42, 43, 44, 45, 46, 47,
536 48, 49, 50, 51, 52, 53, 54, 55,
537 56, 57, 58, 59, 60, 61, 62, 63,
538 64, 97, 98, 99, 100, 101, 102, 103,
539 104, 105, 106, 107, 108, 109, 110, 111,
540 112, 113, 114, 115, 116, 117, 118, 119,
541 120, 121, 122, 91, 92, 93, 94, 95,
542 96, 97, 98, 99, 100, 101, 102, 103,
543 104, 105, 106, 107, 108, 109, 110, 111,
544 112, 113, 114, 115, 116, 117, 118, 119,
545 120, 121, 122, 123, 124, 125, 126, 127,
546 128, 129, 130, 131, 132, 133, 134, 135,
547 136, 137, 138, 139, 140, 141, 142, 143,
548 144, 145, 146, 147, 148, 149, 150, 151,
549 152, 153, 154, 155, 156, 157, 158, 159,
550 160, 161, 162, 163, 164, 165, 166, 167,
551 168, 169, 170, 171, 172, 173, 174, 175,
552 176, 177, 178, 179, 180, 181, 182, 183,
553 184, 185, 186, 187, 188, 189, 190, 191,
554 192, 193, 194, 195, 196, 197, 198, 199,
555 200, 201, 202, 203, 204, 205, 206, 207,
556 208, 209, 210, 211, 212, 213, 214, 215,
557 216, 217, 218, 219, 220, 221, 222, 223,
558 224, 225, 226, 227, 228, 229, 230, 231,
559 232, 233, 234, 235, 236, 237, 238, 239,
560 240, 241, 242, 243, 244, 245, 246, 247,
561 248, 249, 250, 251, 252, 253, 254, 255,
564 0, 0, 2, 3, 4, 5, 6, 7,
565 8, 10, 10, 11, 12, 13, 14, 15,
566 16, 17, 18, 19, 20, 21, 22, 23,
567 24, 25, 26, 27, 28, 29, 30, 31,
568 32, 33, 34, 35, 36, 37, 38, 39,
569 40, 41, 42, 43, 44, 45, 46, 47,
570 48, 49, 50, 51, 52, 53, 54, 55,
571 56, 57, 58, 59, 60, 61, 62, 63,
572 64, 97, 98, 99, 100, 101, 102, 103,
573 104, 105, 106, 107, 108, 109, 110, 111,
574 112, 113, 114, 115, 116, 117, 118, 119,
575 120, 121, 122, 91, 92, 93, 94, 95,
576 96, 97, 98, 99, 100, 101, 102, 103,
577 104, 105, 106, 107, 108, 109, 110, 111,
578 112, 113, 114, 115, 116, 117, 118, 119,
579 120, 121, 122, 123, 1, 125, 126, 127,
580 128, 129, 130, 131, 132, 133, 134, 135,
581 136, 137, 138, 139, 140, 141, 142, 143,
582 144, 145, 146, 147, 148, 149, 150, 151,
583 152, 153, 154, 155, 156, 157, 158, 159,
584 160, 161, 162, 163, 164, 165, 166, 167,
585 168, 169, 170, 171, 172, 173, 174, 175,
586 176, 177, 178, 179, 180, 181, 182, 183,
587 184, 185, 186, 187, 188, 189, 190, 191,
588 192, 193, 194, 195, 196, 197, 198, 199,
589 200, 201, 202, 203, 204, 205, 206, 207,
590 208, 209, 210, 211, 212, 213, 214, 215,
591 216, 217, 218, 219, 220, 221, 222, 223,
592 224, 225, 226, 227, 228, 229, 230, 231,
593 232, 233, 234, 235, 236, 237, 238, 239,
594 240, 241, 242, 243, 244, 245, 246, 247,
595 248, 249, 250, 251, 252, 253, 254, 255,
600 0, 0, 2, 3, 4, 5, 6, 7,
601 8, 10, 10, 11, 12, 13, 14, 15,
602 16, 17, 18, 19, 20, 21, 22, 23,
603 24, 25, 26, 27, 28, 29, 30, 31,
604 32, 33, 34, 35, 36, 37, 38, 39,
605 40, 41, 42, 43, 44, 45, 46, 47,
606 48, 49, 50, 51, 52, 53, 54, 55,
607 56, 57, 58, 59, 1, 61, 62, 63,
608 64, 97, 98, 99, 100, 101, 102, 103,
609 104, 105, 106, 107, 108, 109, 110, 111,
610 112, 113, 114, 115, 116, 117, 118, 119,
611 120, 121, 122, 91, 92, 93, 94, 95,
612 96, 97, 98, 99, 100, 101, 102, 103,
613 104, 105, 106, 107, 108, 109, 110, 111,
614 112, 113, 114, 115, 116, 117, 118, 119,
615 120, 121, 122, 123, 124, 125, 126, 127,
616 128, 129, 130, 131, 132, 133, 134, 135,
617 136, 137, 138, 139, 140, 141, 142, 143,
618 144, 145, 146, 147, 148, 149, 150, 151,
619 152, 153, 154, 155, 156, 157, 158, 159,
620 160, 161, 162, 163, 164, 165, 166, 167,
621 168, 169, 170, 171, 172, 173, 174, 175,
622 176, 177, 178, 179, 180, 181, 182, 183,
623 184, 185, 186, 187, 188, 189, 190, 191,
624 192, 193, 194, 195, 196, 197, 198, 199,
625 200, 201, 202, 203, 204, 205, 206, 207,
626 208, 209, 210, 211, 212, 213, 214, 215,
627 216, 217, 218, 219, 220, 221, 222, 223,
628 224, 225, 226, 227, 228, 229, 230, 231,
629 232, 233, 234, 235, 236, 237, 238, 239,
630 240, 241, 242, 243, 244, 245, 246, 247,
631 248, 249, 250, 251, 252, 253, 254, 255,