1 /* A lexical scanner generated by flex */
3 /* Scanner skeleton version:
4 * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
29 /* Use prototypes in function declarations. */
32 /* The "const" storage-class-modifier is valid. */
35 #else /* ! __cplusplus */
43 #endif /* ! __cplusplus */
62 #define YY_PROTO(proto) proto
64 #define YY_PROTO(proto) ()
68 /* Returned upon end-of-file. */
71 /* Promotes a possibly negative, possibly signed char to an unsigned
72 * integer for use as an array index. If the signed char is negative,
73 * we want to instead treat it as an 8-bit unsigned char, hence the
76 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
78 /* Enter a start condition. This macro really ought to take a parameter,
79 * but we do it the disgusting crufty way forced on us by the ()-less
80 * definition of BEGIN.
82 #define BEGIN yy_start = 1 + 2 *
84 /* Translate the current start state into a value that can be later handed
85 * to BEGIN to return to the state. The YYSTATE alias is for lex
88 #define YY_START ((yy_start - 1) / 2)
89 #define YYSTATE YY_START
91 /* Action number for EOF rule of a given start state. */
92 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
94 /* Special action meaning "start processing a new file". */
95 #define YY_NEW_FILE yyrestart( yyin )
97 #define YY_END_OF_BUFFER_CHAR 0
99 /* Size of default input buffer. */
100 #define YY_BUF_SIZE 16384
102 typedef struct yy_buffer_state *YY_BUFFER_STATE;
105 extern FILE *yyin, *yyout;
107 #define EOB_ACT_CONTINUE_SCAN 0
108 #define EOB_ACT_END_OF_FILE 1
109 #define EOB_ACT_LAST_MATCH 2
111 /* The funky do-while in the following #define is used to turn the definition
112 * int a single C statement (which needs a semi-colon terminator). This
113 * avoids problems with code like:
115 * if ( condition_holds )
118 * do_something_else();
120 * Prior to using the do-while the compiler would get upset at the
121 * "else" because it interpreted the "if" statement as being all
122 * done when it reached the ';' after the yyless() call.
125 /* Return all but the first 'n' matched characters back to the input stream. */
130 /* Undo effects of setting up yytext. */ \
131 *yy_cp = yy_hold_char; \
132 YY_RESTORE_YY_MORE_OFFSET \
133 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
134 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
138 #define unput(c) yyunput( c, yytext_ptr )
140 /* The following is because we cannot portably get our hands on size_t
141 * (without autoconf's help, which isn't available because we want
142 * flex-generated scanners to compile on their own).
144 typedef unsigned int yy_size_t;
147 struct yy_buffer_state
151 char *yy_ch_buf; /* input buffer */
152 char *yy_buf_pos; /* current position in input buffer */
154 /* Size of input buffer in bytes, not including room for EOB
157 yy_size_t yy_buf_size;
159 /* Number of characters read into yy_ch_buf, not including EOB
164 /* Whether we "own" the buffer - i.e., we know we created it,
165 * and can realloc() it to grow it, and should free() it to
168 int yy_is_our_buffer;
170 /* Whether this is an "interactive" input source; if so, and
171 * if we're using stdio for input, then we want to use getc()
172 * instead of fread(), to make sure we stop fetching input after
175 int yy_is_interactive;
177 /* Whether we're considered to be at the beginning of a line.
178 * If so, '^' rules will be active on the next match, otherwise
183 /* Whether to try to fill the input buffer when we reach the
188 int yy_buffer_status;
189 #define YY_BUFFER_NEW 0
190 #define YY_BUFFER_NORMAL 1
191 /* When an EOF's been seen but there's still some text to process
192 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
193 * shouldn't try reading from the input source any more. We might
194 * still have a bunch of tokens to match, though, because of
195 * possible backing-up.
197 * When we actually see the EOF, we change the status to "new"
198 * (via yyrestart()), so that the user can continue scanning by
199 * just pointing yyin at a new input file.
201 #define YY_BUFFER_EOF_PENDING 2
204 static YY_BUFFER_STATE yy_current_buffer = 0;
206 /* We provide macros for accessing buffer states in case in the
207 * future we want to put the buffer states in a more general
210 #define YY_CURRENT_BUFFER yy_current_buffer
213 /* yy_hold_char holds the character lost when yytext is formed. */
214 static char yy_hold_char;
216 static int yy_n_chars; /* number of characters read into yy_ch_buf */
221 /* Points to current character in buffer. */
222 static char *yy_c_buf_p = (char *) 0;
223 static int yy_init = 1; /* whether we need to initialize */
224 static int yy_start = 0; /* start state number */
226 /* Flag which is used to allow yywrap()'s to do buffer switches
227 * instead of setting up a fresh yyin. A bit of a hack ...
229 static int yy_did_buffer_switch_on_eof;
231 void yyrestart YY_PROTO(( FILE *input_file ));
233 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
234 void yy_load_buffer_state YY_PROTO(( void ));
235 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
236 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
237 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
238 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
239 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
241 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
242 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
243 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
245 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
246 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
247 static void yy_flex_free YY_PROTO(( void * ));
249 #define yy_new_buffer yy_create_buffer
251 #define yy_set_interactive(is_interactive) \
253 if ( ! yy_current_buffer ) \
254 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
255 yy_current_buffer->yy_is_interactive = is_interactive; \
258 #define yy_set_bol(at_bol) \
260 if ( ! yy_current_buffer ) \
261 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
262 yy_current_buffer->yy_at_bol = at_bol; \
265 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
268 #define YY_USES_REJECT
269 typedef unsigned char YY_CHAR;
270 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
271 typedef int yy_state_type;
273 #define yytext_ptr yytext
275 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
276 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
277 static int yy_get_next_buffer YY_PROTO(( void ));
278 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
280 /* Done after the current pattern has been matched and before the
281 * corresponding action - sets up yytext.
283 #define YY_DO_BEFORE_ACTION \
284 yytext_ptr = yy_bp; \
285 yyleng = (int) (yy_cp - yy_bp); \
286 yy_hold_char = *yy_cp; \
290 #define YY_NUM_RULES 42
291 #define YY_END_OF_BUFFER 43
292 static yyconst short int yy_acclist[650] =
294 43, 41, 42, 41, 42, 41, 42, 40, 41, 42,
295 41, 42, 25, 41, 42, 41, 42, 40, 41, 42,
296 40, 41, 42,16410, 40, 41, 42,16410, 41, 42,
297 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
298 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
299 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
300 40, 41, 42, 41, 42, 40, 41, 42, 40, 41,
301 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
302 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
303 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
305 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
306 40, 41, 42, 40, 41, 42, 41, 42, 41, 42,
307 40, 41, 42, 40, 41, 42, 40, 41, 42,16410,
308 40, 41, 42,16410, 41, 42, 40, 41, 42, 40,
309 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
310 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
311 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
312 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
313 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
314 40, 41, 42, 40, 41, 42, 40, 41, 42, 40,
316 41, 42, 40, 41, 42, 40, 41, 42, 40, 41,
317 42, 40, 41, 42, 40, 41, 42, 40, 41, 42,
318 41, 42, 33, 40, 17, 40, 9, 40, 40, 40,
319 16410, 8218, 40, 35, 40, 40, 40, 40, 40, 40,
320 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
321 40, 40, 36, 40, 3, 40, 40, 4, 40, 40,
322 40, 40, 40, 40, 9, 40, 40, 40, 34, 40,
323 40, 9, 40, 40, 40,16410, 8218, 40, 40, 40,
324 40, 40, 40, 40, 40, 40, 40, 40, 40, 9,
325 40, 40, 40, 40, 40, 40, 40, 3, 40, 40,
327 4, 40, 40, 40, 40, 40, 40, 9, 40, 40,
328 40, 15, 9, 40, 23, 40, 23, 8, 40, 8218,
329 22, 40, 22, 24, 40, 40, 40, 6, 40, 40,
330 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
331 20, 40, 4, 40, 40, 3, 3, 40, 3, 40,
332 40, 4, 5, 40, 4, 4, 40, 40, 40, 40,
333 9, 40, 40, 34, 39, 9, 40, 23, 40, 8,
334 40, 22, 40, 35, 40, 40, 40, 6, 40, 40,
335 40, 40, 40, 40, 40, 9, 40, 40, 40, 40,
336 20, 40, 4, 40, 40, 3, 40, 3, 40, 40,
338 5, 40, 4, 40, 40, 40, 40, 9, 40, 40,
339 38, 38, 37, 25, 25, 6, 40, 10, 6, 40,
340 7, 40, 6, 40, 6, 40, 40, 40, 19, 40,
341 40, 21, 40, 16, 40, 40, 40, 40, 40, 20,
342 20, 40, 20, 40, 36, 3, 3, 2, 40, 5,
343 4, 5, 5, 40, 40, 4, 4, 40, 40, 25,
344 39, 40, 6, 40, 7, 40, 40, 40, 40, 40,
345 19, 40, 40, 21, 40, 16, 40, 40, 40, 40,
346 40, 20, 40, 20, 20, 40, 2, 40, 5, 40,
347 40, 4, 40, 40, 7, 7, 1, 40, 40, 40,
349 19, 40, 40, 40, 21, 21, 40, 21, 40, 40,
350 40, 40, 30, 36, 2, 2, 2, 40, 5, 5,
351 5, 40, 39, 1, 40, 40, 40, 19, 40, 40,
352 40, 21, 40, 21, 21, 40, 40, 40, 40, 20,
353 39, 2, 40, 5, 40, 27, 38, 1, 23, 23,
354 22, 22, 24, 24, 1, 1, 40, 20, 21, 40,
355 40, 40, 11, 40, 40, 28, 36, 30, 2, 2,
356 27, 34, 39, 39, 1, 40, 40, 40, 40, 21,
357 39, 11, 40, 40, 20, 39, 18, 1, 24, 1,
358 20, 21, 19, 40, 40, 40, 11, 40, 40, 40,
360 40, 21, 39, 40, 11, 40, 40, 12, 40, 40,
361 40, 40, 12, 40, 40, 14, 40, 40, 40, 14,
362 40, 40, 40, 39, 40, 40, 40, 40, 39, 39,
363 40, 40, 31, 40, 39, 39, 31, 40, 13, 31,
364 32, 32, 35, 39, 39, 31, 39, 34, 29
367 static yyconst short int yy_accept[698] =
369 1, 1, 1, 2, 4, 6, 8, 11, 13, 16,
370 18, 21, 25, 29, 31, 34, 37, 40, 43, 46,
371 49, 52, 55, 58, 61, 64, 66, 69, 72, 75,
372 78, 81, 84, 87, 90, 93, 96, 99, 102, 105,
373 108, 111, 114, 117, 119, 121, 124, 127, 131, 135,
374 137, 140, 143, 146, 149, 152, 155, 158, 161, 164,
375 167, 170, 173, 176, 179, 182, 185, 188, 191, 194,
376 197, 200, 203, 206, 209, 212, 215, 218, 221, 223,
377 223, 224, 225, 225, 225, 225, 225, 226, 226, 226,
378 226, 227, 227, 229, 229, 229, 229, 230, 230, 230,
380 232, 232, 234, 234, 235, 235, 236, 236, 237, 237,
381 238, 238, 239, 240, 241, 242, 243, 244, 245, 246,
382 248, 249, 250, 251, 252, 253, 253, 253, 253, 253,
383 254, 255, 257, 257, 258, 260, 261, 262, 263, 264,
384 265, 267, 268, 269, 269, 269, 269, 270, 270, 271,
385 271, 272, 274, 274, 275, 277, 277, 279, 279, 280,
386 281, 281, 282, 283, 284, 285, 286, 287, 288, 289,
387 290, 292, 293, 294, 295, 296, 297, 298, 300, 300,
388 301, 303, 304, 305, 306, 307, 308, 310, 311, 312,
389 312, 312, 312, 312, 312, 312, 312, 312, 312, 312,
391 312, 313, 313, 313, 313, 313, 313, 315, 317, 318,
392 320, 321, 321, 321, 321, 323, 324, 325, 325, 326,
393 326, 327, 327, 328, 328, 330, 330, 330, 330, 330,
394 331, 332, 333, 334, 335, 336, 338, 339, 340, 341,
395 343, 343, 343, 343, 343, 345, 345, 346, 346, 347,
396 349, 351, 352, 353, 353, 355, 356, 358, 359, 360,
397 361, 363, 364, 365, 365, 365, 365, 365, 366, 368,
398 370, 372, 374, 374, 375, 375, 376, 377, 377, 378,
399 380, 381, 382, 383, 384, 385, 386, 388, 389, 390,
400 391, 393, 395, 396, 396, 398, 400, 401, 403, 405,
402 406, 407, 408, 410, 411, 411, 411, 412, 413, 413,
403 413, 414, 414, 414, 415, 415, 416, 416, 417, 417,
404 417, 417, 418, 418, 418, 418, 418, 418, 418, 418,
405 419, 421, 421, 423, 424, 425, 425, 426, 427, 427,
406 427, 427, 427, 428, 429, 431, 431, 432, 434, 436,
407 437, 438, 439, 440, 441, 443, 445, 445, 445, 445,
408 445, 446, 447, 447, 448, 450, 451, 452, 452, 452,
409 453, 455, 456, 457, 457, 459, 460, 460, 461, 461,
410 461, 461, 461, 462, 462, 463, 463, 463, 465, 467,
411 468, 468, 469, 470, 471, 473, 474, 476, 478, 479,
413 480, 481, 482, 484, 485, 487, 489, 491, 492, 494,
414 495, 495, 495, 495, 495, 496, 496, 496, 496, 496,
415 496, 496, 496, 496, 496, 497, 499, 499, 499, 499,
416 499, 500, 501, 501, 503, 503, 504, 505, 506, 508,
417 510, 511, 512, 513, 513, 513, 515, 515, 515, 516,
418 516, 517, 519, 520, 520, 521, 521, 523, 523, 523,
419 523, 523, 523, 523, 523, 524, 524, 524, 526, 527,
420 528, 530, 531, 532, 534, 535, 537, 538, 539, 540,
421 542, 544, 546, 546, 546, 548, 548, 549, 549, 550,
422 550, 551, 551, 552, 552, 553, 553, 554, 554, 555,
424 555, 555, 555, 556, 558, 558, 558, 560, 560, 561,
425 561, 561, 561, 561, 561, 562, 563, 565, 566, 568,
426 568, 569, 570, 571, 571, 571, 573, 573, 573, 574,
427 575, 575, 575, 577, 578, 579, 580, 582, 584, 585,
428 587, 587, 588, 588, 588, 589, 589, 590, 591, 591,
429 591, 591, 593, 593, 593, 594, 594, 594, 594, 594,
430 595, 596, 597, 599, 600, 600, 600, 600, 600, 600,
431 601, 602, 604, 605, 607, 608, 608, 608, 608, 608,
432 608, 608, 609, 609, 609, 609, 609, 610, 611, 611,
433 611, 611, 611, 612, 613, 613, 613, 613, 613, 614,
435 614, 614, 614, 615, 616, 618, 618, 618, 618, 618,
436 619, 619, 620, 622, 622, 622, 622, 622, 623, 624,
437 624, 624, 624, 624, 625, 626, 627, 627, 627, 627,
438 627, 627, 628, 629, 629, 629, 629, 629, 630, 631,
439 632, 633, 633, 633, 633, 633, 633, 635, 635, 635,
440 635, 635, 636, 637, 639, 639, 639, 640, 640, 641,
441 641, 642, 642, 642, 644, 644, 645, 646, 646, 646,
442 646, 646, 648, 648, 648, 648, 648, 648, 648, 648,
443 648, 648, 648, 648, 648, 648, 648, 648, 648, 648,
444 648, 648, 648, 648, 649, 650, 650
448 static yyconst int yy_ec[256] =
450 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
451 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
452 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
453 1, 4, 1, 5, 6, 7, 8, 1, 9, 10,
454 11, 12, 13, 1, 14, 15, 16, 17, 18, 19,
455 20, 20, 20, 20, 20, 20, 20, 21, 22, 1,
456 23, 1, 1, 24, 25, 26, 27, 28, 29, 30,
457 31, 32, 33, 33, 34, 35, 36, 37, 38, 34,
458 34, 39, 40, 33, 41, 33, 42, 43, 33, 33,
459 44, 1, 45, 1, 46, 1, 47, 48, 49, 50,
461 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
462 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
463 71, 68, 72, 1, 73, 1, 1, 1, 1, 1,
464 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
465 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
466 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
467 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
468 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
469 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
470 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
472 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
473 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
474 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
475 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
480 static yyconst int yy_meta[74] =
482 1, 2, 3, 2, 1, 1, 1, 1, 4, 5,
483 6, 1, 7, 8, 1, 1, 9, 9, 9, 9,
484 10, 1, 11, 1, 12, 12, 12, 12, 12, 12,
485 12, 12, 13, 12, 13, 13, 12, 12, 12, 13,
486 13, 12, 14, 1, 1, 1, 15, 15, 15, 15,
487 16, 15, 15, 15, 15, 15, 15, 15, 17, 18,
488 18, 18, 18, 18, 17, 17, 17, 17, 17, 19,
492 static yyconst short int yy_base[784] =
494 0, 73, 2729, 4517, 122, 131, 0, 142, 2724, 140,
495 151, 171, 162, 2724, 231, 159, 2672, 2661, 119, 2660,
496 2673, 143, 2668, 2652, 211, 301, 361, 212, 209, 279,
497 243, 284, 301, 286, 221, 303, 309, 329, 2670, 239,
498 2665, 2649, 338, 403, 2710, 149, 380, 475, 348, 190,
499 538, 240, 2659, 2648, 236, 2650, 2663, 157, 2658, 2642,
500 379, 600, 314, 353, 377, 395, 401, 413, 382, 408,
501 513, 424, 516, 423, 562, 448, 544, 607, 612, 2654,
502 468, 0, 2696, 309, 617, 174, 4517, 2692, 672, 246,
503 353, 2686, 2686, 2680, 517, 661, 2680, 576, 280, 655,
505 2679, 0, 2692, 4517, 0, 696, 0, 741, 0, 580,
506 644, 586, 622, 2645, 2640, 2592, 2592, 692, 2617, 2616,
507 714, 2606, 680, 720, 2592, 2606, 811, 537, 884, 4517,
508 911, 961, 0, 986, 1035, 687, 753, 757, 2584, 2588,
509 2587, 2582, 2591, 318, 2568, 825, 2636, 2635, 430, 2634,
510 747, 820, 253, 830, 1085, 160, 563, 455, 1148, 1193,
511 2633, 784, 843, 850, 760, 603, 692, 844, 854, 2596,
512 657, 858, 893, 862, 893, 658, 1217, 1267, 2629, 1292,
513 1342, 913, 926, 1157, 831, 894, 915, 918, 895, 845,
514 2568, 464, 487, 538, 2620, 556, 1162, 1073, 2619, 2556,
516 4517, 1146, 1209, 2624, 2623, 2622, 2611, 2620, 2619, 0,
517 4517, 2618, 2616, 2615, 2614, 2613, 384, 1029, 1062, 1078,
518 1367, 1147, 1145, 1167, 1412, 2558, 2551, 2564, 2559, 1240,
519 1422, 2540, 756, 651, 2557, 2593, 2551, 2547, 1214, 1482,
520 722, 1208, 761, 1555, 1619, 0, 1624, 0, 2594, 2592,
521 2591, 1174, 1426, 1490, 1673, 2591, 2589, 560, 2550, 2549,
522 2583, 2530, 4517, 1499, 1039, 2591, 725, 2587, 928, 845,
523 592, 917, 642, 2585, 1156, 1503, 1716, 2584, 1516, 1761,
524 1531, 1564, 1470, 1565, 1464, 1429, 1580, 1490, 1566, 1598,
525 1831, 1896, 1901, 2583, 1582, 2573, 1613, 1950, 1587, 1676,
527 1588, 1614, 1581, 1149, 1539, 2528, 4517, 775, 799, 2562,
528 4517, 1709, 2557, 2556, 2493, 2492, 1202, 1709, 2546, 2545,
529 2544, 2544, 615, 2543, 744, 2542, 1099, 1674, 832, 4517,
530 2535, 1719, 2534, 2533, 1955, 1622, 4517, 1410, 2490, 2490,
531 2487, 2487, 2494, 2493, 778, 892, 920, 2013, 0, 2511,
532 2495, 2496, 2495, 0, 2086, 2159, 940, 1210, 1233, 1309,
533 2540, 2533, 1434, 4517, 1776, 1424, 2529, 910, 1615, 1616,
534 2528, 1173, 4517, 2476, 0, 2476, 1842, 2532, 1727, 1735,
535 2488, 2473, 2530, 1003, 1736, 904, 599, 1216, 1523, 2186,
536 2528, 1847, 1726, 1767, 1880, 1771, 2244, 1522, 1813, 1849,
538 1848, 1862, 2317, 2527, 2390, 2029, 1869, 1879, 1713, 2021,
539 1747, 2479, 2517, 1595, 2500, 1809, 2511, 2443, 2504, 2441,
540 2500, 2433, 2460, 1869, 4517, 2454, 2427, 2423, 2423, 2418,
541 2468, 1049, 2006, 2467, 1075, 2440, 2410, 0, 2497, 2570,
542 2400, 2394, 2448, 1341, 1756, 4517, 2446, 1803, 1343, 1491,
543 1768, 2439, 2438, 1416, 4517, 2386, 0, 2425, 1871, 2421,
544 1240, 2416, 2373, 2366, 1454, 1718, 1473, 2635, 1888, 2044,
545 1889, 2042, 2023, 2678, 2425, 1990, 1886, 2052, 2063, 2425,
546 1870, 1899, 1958, 1000, 4517, 2095, 1777, 2416, 2415, 2351,
547 2350, 2411, 2410, 2347, 2346, 2407, 2406, 2343, 2342, 2393,
549 2388, 1840, 2017, 2382, 2320, 2326, 2011, 2298, 2303, 2338,
550 2296, 2275, 2316, 2293, 2302, 2270, 2018, 2264, 4517, 2117,
551 4517, 2296, 4517, 2290, 2119, 2300, 2251, 2231, 2282, 1960,
552 1445, 289, 2107, 2108, 2114, 2068, 2281, 2125, 2131, 2280,
553 2139, 4517, 2227, 2176, 2262, 2267, 2258, 4517, 2187, 2173,
554 2177, 4517, 2166, 2214, 2211, 2157, 2198, 2148, 2103, 2111,
555 2085, 2098, 0, 2077, 2196, 2071, 2002, 827, 1575, 2168,
556 2135, 2063, 2170, 2136, 2164, 2203, 2000, 2014, 1683, 1939,
557 1931, 2030, 1944, 1630, 1954, 1906, 2751, 1919, 1917, 1913,
558 1385, 1565, 2824, 2249, 2204, 1850, 1863, 1832, 4517, 1806,
560 1637, 1912, 2897, 1920, 0, 1775, 1762, 1585, 945, 2970,
561 2096, 1949, 2188, 2207, 1772, 1743, 2250, 1745, 1677, 1563,
562 1551, 1686, 681, 2260, 1568, 1502, 2258, 1408, 1406, 2243,
563 2170, 1358, 1313, 1240, 1258, 1751, 1127, 2261, 2312, 1072,
564 926, 2279, 2133, 809, 1969, 2073, 0, 855, 705, 711,
565 1429, 2317, 2305, 0, 2284, 631, 4517, 546, 2094, 480,
566 4517, 413, 392, 4517, 1794, 2351, 2357, 2298, 325, 206,
567 1884, 2303, 2352, 203, 1915, 365, 2138, 2221, 2364, 2365,
568 2369, 2370, 2371, 2372, 2373, 2427, 2444, 2451, 2452, 2453,
569 2454, 2456, 2296, 179, 4517, 4517, 3040, 3059, 3072, 3086,
571 3105, 3124, 3140, 3159, 3178, 3196, 1267, 1342, 1671, 3214,
572 3233, 1702, 3252, 3271, 3290, 3309, 3328, 3347, 3366, 3385,
573 3404, 3416, 3435, 3454, 3473, 3492, 3511, 3519, 1896, 3529,
574 3545, 3564, 3580, 3599, 3618, 3637, 3656, 3675, 3694, 3713,
575 3732, 3744, 3763, 3782, 3801, 3820, 3839, 3858, 3877, 3893,
576 3908, 3924, 3943, 3962, 3981, 3997, 4016, 4035, 4054, 4073,
577 4092, 4111, 4130, 4149, 4168, 4187, 4206, 4225, 4244, 4259,
578 4278, 4297, 4316, 4331, 4345, 4364, 4383, 4402, 4421, 4440,
582 static yyconst short int yy_def[784] =
584 696, 696, 696, 696, 696, 696, 697, 698, 696, 699,
585 697, 696, 12, 700, 697, 15, 15, 15, 15, 15,
586 15, 15, 15, 15, 15, 701, 697, 27, 27, 27,
587 27, 27, 27, 27, 27, 27, 27, 27, 697, 697,
588 697, 697, 697, 702, 696, 703, 703, 696, 48, 700,
589 703, 51, 51, 51, 51, 51, 51, 51, 51, 51,
590 51, 703, 62, 62, 62, 62, 62, 62, 62, 62,
591 62, 62, 62, 703, 703, 703, 703, 703, 702, 696,
592 696, 697, 704, 705, 704, 696, 696, 696, 696, 696,
593 697, 696, 697, 696, 706, 706, 697, 706, 696, 12,
595 696, 697, 700, 696, 707, 697, 708, 697, 709, 108,
596 696, 108, 108, 697, 697, 697, 697, 108, 106, 697,
597 108, 697, 108, 108, 697, 710, 701, 710, 711, 696,
598 697, 696, 712, 697, 697, 697, 697, 697, 697, 697,
599 697, 697, 697, 702, 713, 702, 696, 714, 703, 696,
600 703, 703, 696, 703, 696, 696, 703, 715, 703, 159,
601 709, 160, 160, 160, 703, 703, 703, 703, 160, 159,
602 703, 160, 703, 160, 160, 703, 159, 696, 712, 159,
603 696, 703, 703, 703, 703, 703, 703, 703, 703, 702,
604 696, 716, 717, 717, 718, 719, 716, 716, 720, 721,
606 696, 722, 722, 696, 696, 696, 697, 697, 696, 697,
607 696, 696, 696, 696, 697, 696, 696, 696, 697, 696,
608 697, 722, 697, 696, 697, 696, 696, 696, 696, 697,
609 697, 697, 697, 697, 697, 697, 697, 697, 697, 723,
610 724, 725, 726, 727, 697, 728, 697, 729, 728, 697,
611 247, 697, 730, 730, 697, 254, 697, 697, 697, 697,
612 697, 697, 696, 702, 696, 731, 696, 732, 733, 733,
613 733, 733, 734, 731, 735, 733, 733, 222, 733, 277,
614 733, 733, 733, 733, 733, 733, 733, 733, 733, 733,
615 736, 733, 277, 729, 733, 293, 733, 292, 733, 733,
617 733, 733, 733, 733, 702, 696, 696, 737, 737, 738,
618 696, 739, 740, 740, 741, 741, 696, 742, 696, 696,
619 696, 697, 696, 696, 696, 696, 696, 696, 696, 696,
620 697, 742, 697, 696, 697, 332, 696, 697, 696, 696,
621 696, 696, 697, 697, 697, 696, 697, 743, 697, 697,
622 697, 697, 697, 744, 745, 745, 746, 746, 747, 748,
623 749, 696, 696, 696, 750, 751, 696, 696, 751, 751,
624 697, 697, 696, 696, 697, 697, 702, 696, 696, 696,
625 696, 696, 752, 696, 733, 753, 753, 733, 733, 293,
626 336, 733, 733, 733, 733, 733, 754, 733, 733, 733,
628 733, 733, 755, 744, 755, 756, 733, 733, 733, 733,
629 702, 696, 757, 758, 696, 696, 759, 760, 761, 762,
630 763, 764, 696, 696, 696, 697, 696, 696, 696, 696,
631 697, 697, 696, 697, 696, 697, 697, 765, 766, 766,
632 697, 697, 697, 767, 768, 696, 769, 696, 770, 770,
633 770, 697, 696, 696, 696, 696, 697, 696, 702, 696,
634 696, 696, 696, 696, 771, 772, 772, 733, 733, 733,
635 733, 733, 733, 754, 765, 474, 733, 733, 733, 773,
636 733, 733, 702, 696, 696, 758, 774, 759, 759, 760,
637 760, 761, 761, 762, 762, 763, 763, 764, 764, 696,
639 696, 774, 774, 697, 696, 696, 696, 696, 697, 775,
640 696, 696, 696, 696, 697, 697, 697, 697, 696, 696,
641 696, 696, 696, 696, 702, 696, 696, 696, 771, 771,
642 772, 772, 733, 733, 733, 733, 776, 733, 733, 773,
643 702, 696, 696, 758, 696, 696, 696, 696, 696, 696,
644 696, 696, 696, 775, 775, 696, 696, 696, 696, 697,
645 697, 697, 697, 697, 702, 696, 696, 772, 772, 733,
646 733, 776, 733, 733, 733, 702, 696, 696, 696, 696,
647 696, 696, 696, 696, 696, 696, 777, 697, 696, 696,
648 772, 772, 778, 733, 702, 696, 696, 696, 696, 696,
650 779, 779, 777, 603, 697, 696, 696, 772, 772, 778,
651 779, 610, 733, 702, 696, 696, 779, 603, 603, 696,
652 696, 772, 772, 780, 610, 610, 702, 696, 696, 779,
653 779, 603, 603, 696, 696, 772, 772, 780, 780, 610,
654 610, 702, 696, 696, 779, 779, 603, 781, 696, 782,
655 772, 780, 780, 610, 702, 696, 696, 696, 779, 781,
656 696, 696, 782, 696, 772, 780, 780, 702, 696, 696,
657 772, 780, 702, 696, 772, 702, 783, 783, 783, 783,
658 783, 783, 783, 783, 783, 783, 783, 783, 783, 783,
659 783, 783, 783, 696, 696, 0, 696, 696, 696, 696,
661 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
662 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
663 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
664 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
665 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
666 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
667 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
668 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
672 static yyconst short int yy_nxt[4591] =
674 4, 4, 4, 5, 4, 4, 6, 4, 7, 8,
675 4, 9, 10, 7, 4, 4, 11, 12, 13, 13,
676 4, 14, 4, 4, 15, 16, 17, 18, 15, 15,
677 19, 15, 15, 15, 20, 21, 15, 22, 23, 24,
678 15, 25, 15, 26, 4, 4, 27, 28, 29, 30,
679 31, 32, 33, 34, 35, 36, 37, 38, 39, 7,
680 40, 7, 7, 41, 42, 7, 7, 7, 43, 7,
681 7, 44, 4, 4, 4, 4, 5, 4, 45, 6,
682 45, 7, 8, 4, 9, 10, 46, 4, 4, 47,
683 48, 49, 49, 4, 50, 4, 4, 51, 52, 53,
685 54, 51, 51, 55, 51, 51, 51, 56, 57, 51,
686 58, 59, 60, 51, 61, 51, 26, 4, 4, 62,
687 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
688 73, 74, 46, 75, 46, 46, 76, 77, 46, 46,
689 46, 78, 46, 46, 79, 4, 80, 81, 81, 81,
690 81, 84, 87, 88, 90, 115, 119, 82, 85, 85,
691 85, 85, 111, 268, 91, 95, 92, 93, 80, 150,
692 170, 94, 95, 95, 96, 82, 216, 696, 116, 82,
693 120, 695, 696, 199, 97, 98, 99, 100, 100, 100,
694 100, 101, 104, 158, 171, 102, 102, 102, 102, 102,
696 102, 102, 102, 82, 102, 82, 82, 102, 102, 102,
697 82, 82, 102, 82, 111, 111, 112, 102, 102, 102,
698 102, 102, 102, 102, 102, 102, 102, 102, 102, 82,
699 102, 102, 102, 102, 102, 82, 82, 82, 82, 82,
700 82, 82, 105, 111, 106, 200, 107, 108, 108, 108,
701 108, 109, 140, 648, 105, 136, 268, 135, 135, 204,
702 135, 205, 138, 674, 123, 124, 206, 136, 136, 137,
703 209, 125, 166, 106, 135, 135, 135, 110, 110, 110,
704 110, 110, 110, 110, 110, 110, 110, 110, 110, 136,
705 136, 104, 135, 135, 135, 167, 216, 163, 217, 141,
707 106, 126, 127, 127, 127, 126, 126, 126, 126, 126,
708 126, 126, 126, 126, 128, 126, 126, 111, 195, 196,
709 145, 126, 126, 126, 126, 136, 136, 135, 135, 135,
710 136, 136, 136, 136, 135, 135, 135, 115, 135, 135,
711 135, 111, 114, 569, 126, 130, 126, 136, 136, 136,
712 136, 95, 135, 135, 135, 136, 136, 135, 135, 135,
713 116, 149, 181, 696, 135, 135, 135, 677, 150, 207,
714 208, 183, 126, 126, 131, 136, 136, 132, 132, 132,
715 132, 133, 111, 90, 542, 135, 135, 328, 82, 117,
716 147, 143, 125, 151, 664, 92, 152, 329, 125, 182,
718 153, 181, 181, 134, 329, 145, 184, 135, 135, 136,
719 136, 136, 136, 136, 136, 136, 136, 136, 136, 146,
720 146, 146, 146, 182, 182, 181, 181, 181, 182, 182,
721 134, 82, 174, 175, 181, 181, 181, 147, 82, 176,
722 165, 182, 182, 150, 181, 181, 181, 182, 182, 166,
723 150, 181, 181, 181, 182, 182, 82, 274, 275, 182,
724 182, 181, 181, 181, 181, 181, 181, 670, 150, 185,
725 182, 182, 167, 193, 307, 147, 95, 95, 96, 181,
726 181, 181, 661, 82, 81, 81, 81, 81, 154, 98,
727 99, 155, 155, 155, 155, 156, 195, 308, 188, 157,
729 157, 157, 157, 157, 157, 157, 157, 149, 157, 149,
730 149, 157, 157, 157, 149, 149, 157, 149, 95, 95,
731 95, 157, 157, 157, 157, 157, 157, 157, 157, 157,
732 157, 157, 157, 149, 157, 157, 157, 157, 157, 149,
733 149, 149, 149, 149, 149, 149, 82, 195, 308, 105,
734 241, 159, 82, 107, 160, 160, 160, 160, 161, 182,
735 182, 105, 182, 182, 150, 310, 311, 181, 181, 181,
736 82, 82, 181, 181, 374, 186, 168, 95, 95, 95,
737 159, 130, 150, 150, 162, 162, 162, 162, 162, 162,
738 162, 162, 162, 162, 162, 162, 225, 225, 225, 225,
740 82, 104, 225, 225, 225, 225, 669, 159, 82, 173,
741 111, 82, 150, 177, 145, 82, 178, 178, 178, 178,
742 179, 375, 187, 150, 417, 190, 193, 150, 146, 146,
743 146, 146, 230, 197, 197, 197, 197, 198, 225, 225,
744 225, 225, 180, 284, 274, 275, 181, 181, 182, 182,
745 182, 182, 182, 182, 182, 182, 182, 182, 95, 467,
746 189, 176, 95, 95, 95, 82, 82, 176, 82, 180,
747 696, 226, 231, 227, 212, 696, 213, 150, 150, 228,
748 657, 214, 229, 104, 147, 109, 418, 107, 202, 202,
749 202, 202, 109, 226, 271, 227, 225, 225, 225, 225,
751 82, 348, 228, 255, 255, 255, 255, 229, 225, 225,
752 225, 225, 150, 664, 109, 348, 348, 291, 203, 203,
753 203, 203, 203, 203, 203, 203, 203, 203, 203, 203,
754 225, 225, 225, 225, 239, 358, 225, 225, 225, 225,
755 637, 109, 219, 219, 219, 219, 219, 219, 219, 219,
756 219, 219, 219, 219, 221, 82, 662, 235, 284, 346,
757 216, 222, 217, 269, 270, 360, 130, 150, 82, 255,
758 255, 255, 255, 255, 255, 255, 255, 381, 237, 240,
759 150, 433, 347, 221, 310, 311, 382, 223, 223, 223,
760 223, 223, 223, 223, 223, 223, 223, 223, 223, 259,
762 280, 280, 280, 280, 347, 361, 283, 260, 310, 311,
763 221, 126, 127, 127, 127, 126, 126, 126, 126, 126,
764 126, 126, 126, 126, 126, 126, 126, 145, 82, 104,
765 591, 126, 126, 126, 126, 423, 271, 434, 82, 82,
766 150, 146, 146, 146, 146, 264, 272, 145, 323, 424,
767 150, 150, 82, 82, 126, 130, 126, 661, 305, 280,
768 280, 280, 280, 658, 150, 150, 280, 280, 280, 280,
769 280, 280, 280, 280, 280, 280, 280, 280, 280, 280,
770 280, 280, 126, 126, 126, 242, 242, 242, 243, 281,
771 126, 126, 126, 126, 126, 126, 286, 147, 126, 126,
773 282, 82, 82, 82, 126, 126, 104, 126, 285, 280,
774 280, 280, 280, 150, 150, 150, 290, 147, 435, 286,
775 327, 82, 288, 82, 374, 82, 82, 126, 130, 298,
776 298, 298, 298, 150, 82, 150, 82, 150, 150, 289,
777 435, 385, 298, 298, 298, 298, 150, 104, 150, 304,
778 466, 436, 291, 358, 303, 126, 126, 245, 245, 245,
779 245, 245, 245, 245, 245, 245, 245, 245, 245, 82,
780 246, 373, 301, 437, 247, 271, 654, 82, 82, 82,
781 82, 248, 288, 249, 130, 250, 250, 250, 250, 250,
782 250, 250, 250, 250, 250, 250, 250, 250, 250, 250,
784 250, 250, 250, 251, 465, 623, 465, 252, 252, 252,
785 252, 252, 252, 252, 252, 252, 252, 252, 252, 82,
786 82, 82, 82, 82, 82, 82, 82, 82, 82, 82,
787 247, 82, 135, 135, 135, 135, 135, 135, 135, 135,
788 135, 135, 135, 135, 254, 330, 330, 330, 330, 542,
789 378, 255, 255, 255, 255, 379, 380, 256, 543, 257,
790 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
791 257, 257, 257, 257, 257, 257, 257, 257, 331, 331,
792 331, 331, 193, 307, 509, 258, 95, 95, 95, 312,
793 312, 312, 312, 82, 332, 332, 332, 332, 149, 98,
795 654, 155, 155, 155, 155, 150, 513, 509, 419, 157,
796 157, 157, 157, 157, 157, 157, 157, 149, 157, 149,
797 149, 157, 157, 157, 149, 149, 157, 149, 514, 104,
798 651, 157, 157, 157, 157, 157, 157, 157, 157, 157,
799 157, 157, 157, 149, 157, 157, 157, 157, 157, 149,
800 149, 149, 149, 149, 149, 149, 82, 82, 104, 222,
801 696, 333, 333, 333, 333, 82, 222, 696, 150, 150,
802 420, 193, 307, 298, 298, 298, 298, 150, 197, 197,
803 197, 197, 198, 334, 334, 334, 334, 456, 222, 696,
804 365, 365, 365, 365, 276, 276, 276, 276, 276, 276,
806 276, 276, 276, 276, 276, 276, 277, 302, 386, 242,
807 242, 242, 243, 278, 402, 222, 696, 387, 415, 415,
808 415, 415, 222, 444, 82, 318, 318, 318, 318, 222,
809 333, 333, 333, 333, 457, 277, 150, 360, 337, 279,
810 279, 279, 279, 279, 279, 279, 279, 279, 279, 279,
811 279, 222, 130, 212, 130, 213, 333, 333, 333, 333,
812 214, 649, 277, 292, 292, 292, 292, 292, 292, 292,
813 292, 292, 292, 292, 292, 82, 246, 361, 222, 353,
814 293, 218, 218, 149, 149, 149, 149, 294, 343, 249,
815 648, 295, 295, 295, 295, 295, 295, 295, 295, 295,
817 295, 295, 295, 295, 295, 295, 295, 295, 295, 296,
818 445, 445, 445, 297, 297, 297, 297, 297, 297, 297,
819 297, 297, 297, 297, 297, 149, 149, 149, 149, 149,
820 149, 149, 149, 149, 149, 149, 293, 149, 181, 181,
821 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
822 82, 254, 450, 446, 444, 149, 220, 220, 298, 298,
823 298, 298, 150, 647, 256, 451, 299, 299, 299, 299,
824 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
825 299, 299, 299, 299, 299, 519, 647, 104, 149, 149,
826 149, 149, 300, 149, 149, 149, 149, 149, 149, 149,
828 149, 149, 149, 149, 149, 149, 149, 149, 149, 149,
829 149, 149, 149, 223, 223, 223, 223, 223, 223, 223,
830 223, 223, 223, 223, 223, 335, 426, 426, 426, 426,
831 456, 104, 336, 369, 337, 254, 608, 82, 333, 333,
832 333, 333, 366, 366, 366, 366, 370, 104, 256, 150,
833 449, 449, 449, 449, 335, 530, 384, 530, 338, 338,
834 338, 338, 338, 338, 338, 338, 338, 338, 338, 338,
835 344, 644, 82, 643, 454, 104, 368, 455, 82, 398,
836 665, 335, 354, 354, 150, 354, 354, 354, 354, 354,
837 150, 354, 354, 354, 354, 568, 354, 354, 82, 696,
839 696, 145, 354, 354, 354, 354, 696, 696, 696, 696,
840 150, 82, 696, 696, 397, 377, 377, 377, 377, 388,
841 388, 388, 388, 150, 82, 354, 354, 354, 397, 397,
842 82, 82, 389, 389, 389, 389, 150, 532, 395, 82,
843 696, 145, 150, 150, 400, 425, 356, 389, 389, 389,
844 389, 150, 411, 354, 354, 126, 242, 242, 242, 243,
845 641, 126, 126, 126, 126, 126, 126, 104, 346, 126,
846 126, 147, 82, 82, 82, 126, 126, 104, 126, 393,
847 389, 389, 389, 389, 150, 150, 150, 104, 82, 82,
848 82, 396, 364, 399, 410, 82, 82, 373, 126, 130,
850 150, 150, 150, 640, 193, 485, 82, 150, 150, 486,
851 635, 147, 394, 396, 389, 389, 389, 389, 150, 609,
852 634, 82, 82, 401, 696, 369, 126, 126, 254, 406,
853 406, 406, 406, 150, 150, 696, 393, 696, 696, 622,
854 592, 256, 696, 257, 257, 257, 257, 257, 257, 257,
855 257, 257, 257, 257, 257, 257, 257, 257, 257, 257,
856 257, 257, 394, 402, 696, 696, 696, 617, 511, 258,
857 252, 252, 252, 252, 252, 252, 252, 252, 252, 252,
858 252, 252, 369, 421, 82, 224, 224, 329, 104, 617,
859 374, 696, 421, 511, 329, 370, 150, 371, 371, 371,
861 371, 371, 371, 371, 371, 371, 371, 371, 371, 371,
862 371, 371, 371, 371, 371, 371, 253, 253, 193, 307,
863 104, 82, 336, 372, 82, 414, 414, 414, 414, 336,
864 90, 337, 336, 150, 82, 633, 150, 409, 461, 336,
865 460, 696, 92, 636, 82, 422, 150, 94, 462, 145,
866 99, 336, 271, 104, 422, 101, 150, 445, 445, 445,
867 483, 336, 279, 279, 279, 279, 279, 279, 279, 279,
868 279, 279, 279, 279, 390, 82, 531, 450, 336, 82,
869 632, 391, 469, 337, 82, 450, 502, 150, 336, 82,
870 696, 150, 82, 82, 82, 82, 104, 629, 451, 503,
872 446, 650, 472, 390, 520, 520, 520, 392, 392, 392,
873 392, 392, 392, 392, 392, 392, 392, 392, 392, 147,
874 628, 82, 621, 470, 473, 487, 487, 487, 487, 620,
875 390, 354, 354, 150, 354, 354, 354, 354, 354, 355,
876 354, 354, 354, 354, 145, 354, 354, 521, 671, 696,
877 271, 404, 354, 354, 354, 82, 82, 82, 459, 459,
878 459, 459, 696, 468, 468, 468, 468, 150, 150, 150,
879 82, 616, 500, 145, 354, 354, 354, 82, 82, 455,
880 523, 599, 150, 433, 501, 525, 104, 82, 82, 150,
881 150, 111, 433, 456, 82, 405, 82, 82, 478, 150,
883 150, 477, 354, 354, 82, 254, 150, 82, 150, 150,
884 363, 363, 479, 615, 147, 542, 150, 104, 256, 150,
885 299, 299, 299, 299, 299, 299, 299, 299, 299, 299,
886 299, 299, 299, 299, 299, 299, 299, 299, 299, 471,
887 482, 675, 617, 526, 618, 538, 300, 297, 297, 297,
888 297, 297, 297, 297, 297, 297, 297, 297, 297, 369,
889 145, 530, 384, 530, 617, 650, 619, 607, 606, 605,
890 601, 541, 370, 625, 407, 407, 407, 407, 407, 407,
891 407, 407, 407, 407, 407, 407, 407, 407, 407, 407,
892 407, 407, 407, 601, 600, 626, 582, 659, 597, 617,
894 408, 338, 338, 338, 338, 338, 338, 338, 338, 338,
895 338, 338, 338, 438, 438, 510, 438, 438, 438, 438,
896 438, 617, 438, 438, 438, 438, 502, 438, 438, 82,
897 147, 82, 547, 438, 438, 438, 438, 82, 450, 696,
898 476, 150, 149, 150, 511, 149, 149, 149, 149, 150,
899 82, 451, 82, 512, 476, 476, 438, 438, 438, 596,
900 82, 551, 150, 440, 150, 384, 111, 590, 562, 511,
901 535, 82, 150, 536, 589, 552, 82, 440, 440, 534,
902 598, 271, 563, 150, 438, 438, 354, 354, 150, 354,
903 354, 354, 354, 354, 599, 354, 354, 354, 354, 624,
905 354, 354, 534, 617, 193, 307, 354, 354, 354, 354,
906 539, 544, 544, 544, 544, 82, 82, 548, 520, 520,
907 520, 145, 82, 659, 617, 617, 617, 150, 150, 354,
908 354, 354, 571, 82, 150, 565, 565, 565, 565, 82,
909 679, 145, 588, 82, 82, 150, 617, 563, 617, 587,
910 587, 150, 576, 570, 185, 150, 150, 354, 354, 354,
911 354, 521, 354, 354, 354, 354, 354, 586, 354, 354,
912 354, 354, 82, 354, 354, 573, 82, 575, 82, 354,
913 354, 354, 354, 656, 150, 193, 485, 585, 150, 574,
914 150, 147, 544, 544, 544, 544, 82, 657, 145, 593,
916 617, 584, 354, 354, 354, 145, 145, 593, 150, 145,
917 263, 147, 565, 565, 565, 565, 595, 614, 583, 574,
918 627, 555, 617, 679, 555, 582, 552, 581, 646, 594,
919 354, 354, 392, 392, 392, 392, 392, 392, 392, 392,
920 392, 392, 392, 392, 438, 438, 580, 438, 438, 438,
921 438, 438, 439, 438, 438, 438, 438, 82, 438, 438,
922 145, 579, 384, 384, 475, 438, 438, 438, 526, 150,
923 578, 642, 548, 617, 630, 147, 147, 577, 645, 147,
924 617, 145, 384, 384, 384, 567, 145, 438, 438, 438,
925 639, 639, 655, 263, 476, 617, 631, 668, 679, 613,
927 145, 566, 617, 265, 455, 384, 523, 384, 476, 476,
928 564, 673, 639, 639, 384, 438, 438, 354, 354, 384,
929 354, 354, 354, 354, 354, 355, 354, 354, 354, 354,
930 147, 354, 354, 639, 561, 639, 652, 404, 354, 354,
931 354, 560, 639, 559, 558, 557, 556, 639, 555, 139,
932 553, 147, 666, 384, 145, 639, 147, 639, 653, 384,
933 354, 354, 354, 667, 639, 676, 679, 679, 694, 639,
934 147, 679, 679, 679, 679, 679, 550, 680, 681, 672,
935 549, 639, 682, 683, 684, 685, 686, 639, 354, 354,
936 354, 354, 548, 354, 354, 354, 354, 354, 355, 354,
938 354, 354, 354, 639, 354, 354, 547, 672, 546, 639,
939 404, 354, 354, 354, 499, 499, 497, 497, 495, 495,
940 493, 493, 491, 491, 147, 489, 489, 384, 537, 679,
941 528, 527, 216, 354, 354, 354, 263, 263, 209, 373,
942 687, 263, 263, 263, 263, 263, 679, 524, 455, 523,
943 448, 111, 518, 679, 679, 679, 679, 688, 679, 517,
944 516, 354, 354, 502, 689, 690, 691, 692, 515, 693,
945 433, 111, 508, 507, 506, 505, 503, 424, 504, 504,
946 504, 504, 504, 504, 504, 504, 504, 504, 504, 504,
947 504, 504, 504, 504, 504, 504, 504, 438, 438, 263,
949 438, 438, 438, 438, 438, 499, 438, 438, 438, 438,
950 497, 438, 438, 495, 493, 491, 263, 438, 438, 438,
951 438, 489, 425, 263, 263, 263, 263, 196, 263, 484,
952 480, 268, 384, 464, 463, 86, 210, 458, 455, 373,
953 438, 438, 438, 364, 448, 443, 442, 441, 210, 432,
954 431, 430, 429, 428, 427, 337, 425, 337, 216, 216,
955 210, 209, 209, 209, 316, 316, 314, 314, 438, 438,
956 438, 438, 196, 438, 438, 438, 438, 438, 412, 438,
957 438, 438, 438, 364, 438, 438, 268, 268, 267, 384,
958 438, 438, 438, 438, 267, 353, 376, 344, 343, 373,
960 254, 364, 364, 246, 352, 351, 350, 349, 345, 342,
961 341, 340, 339, 438, 438, 438, 327, 327, 326, 325,
962 440, 324, 323, 323, 322, 321, 320, 319, 316, 314,
963 307, 306, 268, 287, 440, 440, 268, 268, 267, 265,
964 263, 438, 438, 82, 502, 262, 237, 210, 261, 235,
965 130, 240, 238, 210, 236, 150, 234, 503, 233, 533,
966 533, 533, 533, 533, 533, 533, 533, 533, 533, 533,
967 533, 533, 533, 533, 533, 533, 533, 533, 438, 438,
968 233, 438, 438, 438, 438, 438, 439, 438, 438, 438,
969 438, 232, 438, 438, 104, 216, 215, 209, 475, 438,
971 438, 438, 210, 209, 201, 193, 191, 173, 172, 169,
972 168, 165, 164, 148, 122, 142, 139, 122, 121, 118,
973 117, 438, 438, 438, 114, 113, 104, 86, 696, 696,
974 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
975 696, 696, 696, 696, 696, 696, 696, 696, 696, 438,
976 438, 602, 602, 696, 602, 602, 602, 602, 602, 696,
977 602, 602, 602, 602, 696, 602, 602, 696, 696, 696,
978 696, 602, 602, 602, 602, 696, 696, 696, 696, 696,
979 696, 604, 696, 696, 696, 696, 696, 696, 696, 696,
980 696, 696, 696, 696, 602, 602, 602, 696, 696, 696,
982 696, 696, 696, 604, 696, 696, 696, 696, 696, 696,
983 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
984 696, 696, 602, 602, 602, 602, 696, 602, 602, 602,
985 602, 602, 603, 602, 602, 602, 602, 696, 602, 602,
986 696, 696, 696, 696, 611, 602, 602, 602, 696, 696,
987 696, 696, 696, 696, 612, 696, 696, 696, 696, 696,
988 696, 696, 696, 696, 696, 696, 696, 602, 602, 602,
989 696, 696, 696, 696, 696, 696, 612, 696, 696, 696,
990 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
991 696, 696, 696, 696, 696, 602, 602, 602, 602, 696,
993 602, 602, 602, 602, 602, 696, 602, 602, 602, 602,
994 696, 602, 602, 696, 696, 696, 696, 602, 602, 602,
995 602, 696, 696, 696, 696, 696, 696, 604, 696, 696,
996 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
997 602, 602, 602, 696, 696, 696, 696, 696, 696, 604,
998 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
999 696, 696, 696, 696, 696, 696, 696, 696, 602, 602,
1000 602, 602, 696, 602, 602, 602, 602, 602, 603, 602,
1001 602, 602, 602, 696, 602, 602, 696, 696, 696, 696,
1002 611, 602, 602, 602, 696, 696, 696, 696, 696, 696,
1004 612, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1005 696, 696, 696, 602, 602, 602, 696, 696, 696, 696,
1006 696, 696, 612, 696, 696, 696, 696, 696, 696, 696,
1007 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1008 696, 602, 602, 82, 696, 696, 696, 82, 82, 696,
1009 696, 82, 82, 82, 82, 82, 82, 82, 82, 83,
1010 83, 83, 83, 83, 696, 83, 83, 83, 83, 83,
1011 83, 83, 83, 83, 83, 83, 83, 83, 89, 89,
1012 696, 696, 696, 89, 89, 89, 103, 103, 103, 103,
1013 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1015 103, 103, 103, 103, 103, 129, 129, 129, 129, 129,
1016 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
1017 129, 129, 129, 129, 144, 144, 144, 144, 144, 144,
1018 144, 144, 144, 144, 144, 144, 144, 144, 144, 144,
1019 144, 144, 144, 149, 696, 696, 696, 149, 149, 149,
1020 696, 149, 149, 149, 149, 149, 149, 149, 149, 192,
1021 192, 192, 192, 192, 696, 192, 192, 192, 192, 192,
1022 192, 192, 192, 192, 192, 192, 192, 192, 194, 194,
1023 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
1024 194, 194, 194, 194, 194, 194, 194, 211, 211, 696,
1026 696, 696, 696, 696, 696, 696, 696, 211, 696, 696,
1027 211, 211, 696, 211, 126, 126, 126, 126, 126, 126,
1028 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1029 126, 126, 126, 244, 244, 244, 244, 244, 244, 244,
1030 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
1031 244, 244, 145, 145, 145, 145, 145, 145, 145, 145,
1032 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
1033 145, 266, 266, 266, 266, 266, 266, 266, 266, 266,
1034 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
1035 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
1037 273, 273, 273, 273, 273, 273, 273, 273, 273, 192,
1038 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
1039 192, 192, 192, 192, 192, 192, 192, 192, 194, 194,
1040 194, 194, 194, 194, 194, 194, 194, 194, 194, 194,
1041 194, 194, 194, 194, 194, 194, 194, 195, 195, 195,
1042 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
1043 195, 195, 195, 195, 195, 195, 309, 309, 309, 309,
1044 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1045 309, 309, 309, 309, 309, 313, 313, 696, 313, 313,
1046 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
1048 313, 313, 313, 313, 315, 315, 696, 315, 315, 315,
1049 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
1050 315, 315, 315, 317, 696, 317, 696, 696, 696, 317,
1051 317, 317, 696, 696, 317, 355, 355, 696, 355, 355,
1052 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
1053 355, 355, 355, 355, 357, 357, 357, 357, 357, 357,
1054 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1055 357, 357, 357, 126, 126, 126, 126, 126, 126, 126,
1056 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1057 126, 126, 359, 359, 359, 359, 359, 359, 359, 359,
1059 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
1060 359, 244, 244, 244, 244, 244, 244, 244, 244, 244,
1061 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
1062 362, 362, 362, 367, 696, 696, 696, 367, 696, 367,
1063 367, 367, 367, 696, 367, 266, 266, 266, 266, 266,
1064 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
1065 266, 266, 266, 266, 383, 383, 383, 383, 383, 383,
1066 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
1067 383, 383, 383, 149, 696, 696, 696, 149, 149, 149,
1068 696, 149, 149, 149, 149, 149, 149, 149, 149, 273,
1070 273, 273, 273, 273, 273, 273, 273, 273, 273, 273,
1071 273, 273, 273, 273, 273, 273, 273, 273, 103, 103,
1072 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1073 103, 103, 103, 103, 103, 103, 103, 403, 403, 696,
1074 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1075 403, 403, 403, 403, 403, 403, 309, 309, 309, 309,
1076 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
1077 309, 309, 309, 309, 309, 413, 413, 413, 413, 696,
1078 413, 413, 413, 413, 413, 413, 413, 413, 413, 413,
1079 413, 413, 413, 413, 192, 192, 192, 192, 192, 192,
1081 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
1082 192, 192, 192, 313, 313, 696, 313, 313, 313, 313,
1083 313, 313, 313, 313, 313, 313, 313, 313, 313, 313,
1084 313, 313, 315, 315, 696, 315, 315, 315, 315, 315,
1085 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
1086 315, 416, 696, 416, 416, 696, 696, 416, 416, 416,
1087 696, 696, 416, 439, 439, 696, 439, 439, 439, 439,
1088 439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
1089 439, 439, 354, 354, 696, 354, 354, 354, 354, 354,
1090 354, 354, 354, 354, 354, 354, 354, 354, 354, 354,
1092 354, 355, 355, 696, 355, 355, 355, 355, 355, 355,
1093 355, 355, 355, 355, 355, 355, 355, 355, 355, 355,
1094 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1095 357, 357, 357, 357, 357, 357, 357, 357, 357, 359,
1096 359, 359, 359, 359, 359, 359, 359, 359, 359, 359,
1097 359, 359, 359, 359, 359, 359, 359, 359, 126, 126,
1098 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1099 126, 126, 126, 126, 126, 126, 126, 447, 447, 447,
1100 447, 447, 447, 447, 447, 447, 447, 447, 447, 447,
1101 447, 447, 447, 447, 447, 447, 452, 452, 696, 696,
1103 452, 452, 696, 452, 452, 452, 452, 452, 452, 452,
1104 452, 452, 453, 696, 696, 696, 696, 696, 453, 453,
1105 453, 453, 696, 453, 383, 383, 383, 383, 383, 383,
1106 383, 383, 383, 383, 383, 383, 383, 383, 383, 383,
1107 383, 383, 383, 103, 103, 103, 103, 103, 103, 103,
1108 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1109 103, 103, 474, 474, 696, 474, 474, 474, 474, 474,
1110 474, 474, 474, 474, 474, 474, 474, 474, 474, 474,
1111 474, 403, 403, 696, 403, 403, 403, 403, 403, 403,
1112 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1114 481, 481, 696, 696, 481, 481, 481, 481, 481, 481,
1115 481, 481, 481, 481, 481, 481, 413, 413, 413, 413,
1116 696, 413, 413, 413, 413, 413, 413, 413, 413, 413,
1117 413, 413, 413, 413, 413, 192, 192, 192, 192, 192,
1118 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
1119 192, 192, 192, 192, 488, 488, 696, 488, 488, 488,
1120 488, 488, 488, 488, 488, 488, 488, 488, 488, 488,
1121 488, 488, 488, 490, 490, 696, 490, 490, 490, 490,
1122 490, 490, 490, 490, 490, 490, 490, 490, 490, 490,
1123 490, 490, 492, 492, 696, 492, 492, 492, 492, 492,
1125 492, 492, 492, 492, 492, 492, 492, 492, 492, 492,
1126 492, 494, 494, 696, 494, 494, 494, 494, 494, 494,
1127 494, 494, 494, 494, 494, 494, 494, 494, 494, 494,
1128 496, 496, 696, 496, 496, 496, 496, 496, 496, 496,
1129 496, 496, 496, 496, 496, 496, 496, 496, 496, 498,
1130 498, 696, 498, 498, 498, 498, 498, 498, 498, 498,
1131 498, 498, 498, 498, 498, 498, 498, 498, 438, 438,
1132 696, 438, 438, 438, 438, 438, 438, 438, 438, 438,
1133 438, 438, 438, 438, 438, 438, 438, 439, 439, 696,
1134 439, 439, 439, 439, 439, 439, 439, 439, 439, 439,
1136 439, 439, 439, 439, 439, 439, 357, 357, 357, 357,
1137 357, 357, 357, 357, 357, 357, 357, 357, 357, 357,
1138 357, 357, 357, 357, 357, 126, 126, 126, 126, 126,
1139 126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1140 126, 126, 126, 126, 447, 447, 447, 447, 447, 447,
1141 447, 447, 447, 447, 447, 447, 447, 447, 447, 447,
1142 447, 447, 447, 522, 696, 696, 696, 696, 696, 522,
1143 522, 522, 522, 522, 522, 522, 522, 522, 529, 529,
1144 529, 529, 529, 529, 529, 529, 529, 529, 529, 529,
1145 529, 529, 529, 529, 529, 529, 529, 103, 103, 103,
1147 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
1148 103, 103, 103, 103, 103, 103, 540, 540, 540, 540,
1149 540, 540, 540, 540, 540, 540, 540, 540, 540, 540,
1150 540, 540, 540, 540, 540, 545, 696, 696, 696, 696,
1151 696, 545, 545, 545, 545, 554, 554, 696, 554, 554,
1152 554, 554, 554, 554, 554, 554, 554, 554, 554, 554,
1153 554, 554, 554, 554, 572, 572, 572, 572, 572, 572,
1154 572, 572, 572, 572, 572, 572, 572, 572, 572, 572,
1155 572, 572, 572, 603, 603, 696, 603, 603, 603, 603,
1156 603, 603, 603, 603, 603, 603, 603, 603, 603, 603,
1158 603, 603, 610, 610, 696, 610, 610, 610, 610, 610,
1159 610, 610, 610, 610, 610, 610, 610, 610, 610, 610,
1160 610, 602, 602, 696, 602, 602, 602, 602, 602, 602,
1161 602, 602, 602, 602, 602, 602, 602, 602, 602, 602,
1162 638, 638, 638, 638, 638, 638, 638, 638, 638, 638,
1163 638, 638, 638, 638, 638, 638, 638, 638, 638, 660,
1164 660, 660, 660, 660, 660, 660, 660, 660, 660, 660,
1165 660, 660, 660, 660, 660, 660, 660, 660, 663, 663,
1166 663, 663, 663, 663, 663, 663, 663, 663, 663, 663,
1167 663, 663, 663, 663, 663, 663, 663, 678, 678, 678,
1169 678, 678, 678, 678, 678, 678, 678, 678, 678, 678,
1170 678, 678, 678, 678, 678, 678, 3, 696, 696, 696,
1171 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1172 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1173 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1174 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1175 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1176 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1177 696, 696, 696, 696, 696, 696, 696, 696, 696, 696
1180 static yyconst short int yy_chk[4591] =
1182 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1183 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1184 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1185 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1186 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1187 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1188 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1189 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
1190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1194 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1195 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1196 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1197 2, 2, 2, 2, 2, 2, 5, 6, 6, 6,
1198 6, 8, 10, 10, 11, 19, 22, 46, 8, 8,
1199 8, 8, 16, 156, 11, 13, 11, 11, 5, 46,
1200 58, 11, 12, 12, 12, 13, 156, 13, 19, 12,
1201 22, 694, 13, 86, 12, 12, 12, 12, 12, 12,
1202 12, 12, 50, 50, 58, 12, 12, 12, 12, 12,
1204 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1205 12, 12, 12, 12, 25, 28, 16, 12, 12, 12,
1206 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1207 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
1208 12, 12, 15, 52, 15, 86, 15, 15, 15, 15,
1209 15, 15, 40, 674, 15, 29, 153, 29, 29, 90,
1210 28, 90, 29, 670, 25, 25, 90, 35, 35, 28,
1211 153, 25, 55, 15, 35, 35, 35, 15, 15, 15,
1212 15, 15, 15, 15, 15, 15, 15, 15, 15, 31,
1213 31, 532, 31, 31, 31, 55, 99, 52, 99, 40,
1215 15, 26, 26, 26, 26, 26, 26, 26, 26, 26,
1216 26, 26, 26, 26, 26, 26, 26, 63, 84, 84,
1217 144, 26, 26, 26, 26, 30, 30, 30, 30, 30,
1218 32, 32, 34, 34, 32, 32, 32, 33, 34, 34,
1219 34, 43, 30, 532, 26, 26, 26, 33, 33, 36,
1220 36, 49, 33, 33, 33, 37, 37, 36, 36, 36,
1221 33, 49, 63, 49, 37, 37, 37, 676, 49, 91,
1222 91, 63, 26, 26, 27, 38, 38, 27, 27, 27,
1223 27, 27, 61, 47, 669, 38, 38, 217, 47, 38,
1224 144, 43, 43, 47, 663, 47, 47, 217, 43, 64,
1226 47, 64, 64, 27, 217, 44, 64, 27, 27, 27,
1227 27, 27, 27, 27, 27, 27, 27, 27, 27, 44,
1228 44, 44, 44, 65, 65, 65, 65, 65, 69, 69,
1229 27, 74, 61, 61, 69, 69, 69, 676, 149, 61,
1230 65, 66, 66, 74, 66, 66, 66, 67, 67, 68,
1231 149, 67, 67, 67, 70, 70, 76, 158, 158, 68,
1232 68, 70, 70, 70, 68, 68, 68, 662, 76, 74,
1233 72, 72, 68, 192, 192, 44, 48, 48, 48, 72,
1234 72, 72, 660, 48, 81, 81, 81, 81, 48, 48,
1235 48, 48, 48, 48, 48, 48, 193, 193, 76, 48,
1237 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1238 48, 48, 48, 48, 48, 48, 48, 48, 95, 95,
1239 95, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1240 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
1241 48, 48, 48, 48, 48, 48, 51, 194, 194, 51,
1242 128, 51, 77, 51, 51, 51, 51, 51, 51, 71,
1243 71, 51, 73, 73, 77, 196, 196, 71, 71, 71,
1244 75, 157, 73, 73, 258, 75, 73, 98, 98, 98,
1245 51, 128, 75, 157, 51, 51, 51, 51, 51, 51,
1246 51, 51, 51, 51, 51, 51, 110, 110, 110, 110,
1248 271, 387, 112, 112, 112, 112, 658, 51, 62, 77,
1249 78, 166, 271, 62, 79, 78, 62, 62, 62, 62,
1250 62, 258, 75, 166, 323, 79, 85, 78, 79, 79,
1251 79, 79, 112, 85, 85, 85, 85, 85, 113, 113,
1252 113, 113, 62, 166, 273, 273, 62, 62, 62, 62,
1253 62, 62, 62, 62, 62, 62, 62, 62, 100, 387,
1254 78, 78, 96, 96, 96, 171, 176, 78, 100, 62,
1255 100, 111, 113, 111, 96, 100, 96, 171, 176, 111,
1256 656, 96, 111, 623, 79, 89, 323, 89, 89, 89,
1257 89, 89, 89, 111, 171, 111, 123, 123, 123, 123,
1259 167, 234, 111, 136, 136, 136, 136, 111, 118, 118,
1260 118, 118, 167, 650, 89, 234, 234, 176, 89, 89,
1261 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
1262 121, 121, 121, 121, 123, 241, 124, 124, 124, 124,
1263 623, 89, 106, 106, 106, 106, 106, 106, 106, 106,
1264 106, 106, 106, 106, 108, 151, 649, 118, 167, 233,
1265 325, 108, 325, 151, 151, 243, 241, 151, 165, 137,
1266 137, 137, 137, 138, 138, 138, 138, 267, 121, 124,
1267 165, 345, 233, 108, 308, 308, 267, 108, 108, 108,
1268 108, 108, 108, 108, 108, 108, 108, 108, 108, 137,
1270 162, 162, 162, 162, 233, 243, 165, 138, 309, 309,
1271 108, 127, 127, 127, 127, 127, 127, 127, 127, 127,
1272 127, 127, 127, 127, 127, 127, 127, 146, 152, 568,
1273 568, 127, 127, 127, 127, 329, 152, 345, 154, 185,
1274 152, 146, 146, 146, 146, 146, 154, 190, 270, 329,
1275 154, 185, 168, 270, 127, 127, 127, 648, 190, 163,
1276 163, 163, 163, 644, 168, 270, 164, 164, 164, 164,
1277 169, 169, 169, 169, 172, 172, 172, 172, 174, 174,
1278 174, 174, 127, 127, 129, 129, 129, 129, 129, 163,
1279 129, 129, 129, 129, 129, 129, 185, 146, 129, 129,
1281 164, 173, 186, 189, 129, 129, 386, 129, 168, 175,
1282 175, 175, 175, 173, 186, 189, 174, 190, 346, 169,
1283 272, 182, 172, 187, 368, 272, 188, 129, 129, 182,
1284 182, 182, 182, 182, 183, 187, 269, 272, 188, 173,
1285 346, 269, 183, 183, 183, 183, 183, 609, 269, 189,
1286 386, 347, 175, 357, 186, 129, 129, 131, 131, 131,
1287 131, 131, 131, 131, 131, 131, 131, 131, 131, 132,
1288 132, 368, 183, 347, 132, 187, 641, 132, 132, 132,
1289 132, 132, 188, 132, 357, 132, 132, 132, 132, 132,
1290 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
1292 132, 132, 132, 132, 384, 609, 384, 132, 132, 132,
1293 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
1294 132, 132, 132, 132, 132, 132, 132, 132, 132, 132,
1295 132, 132, 134, 134, 134, 134, 134, 134, 134, 134,
1296 134, 134, 134, 134, 135, 218, 218, 218, 218, 484,
1297 265, 135, 135, 135, 135, 265, 265, 135, 484, 135,
1298 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,
1299 135, 135, 135, 135, 135, 135, 135, 135, 219, 219,
1300 219, 219, 198, 198, 432, 135, 155, 155, 155, 198,
1301 198, 198, 198, 155, 220, 220, 220, 220, 155, 155,
1303 640, 155, 155, 155, 155, 155, 435, 432, 327, 155,
1304 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1305 155, 155, 155, 155, 155, 155, 155, 155, 435, 637,
1306 637, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1307 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
1308 155, 155, 155, 155, 155, 155, 159, 304, 275, 202,
1309 222, 223, 223, 223, 223, 184, 202, 222, 159, 304,
1310 327, 197, 197, 184, 184, 184, 184, 184, 197, 197,
1311 197, 197, 197, 224, 224, 224, 224, 372, 202, 222,
1312 252, 252, 252, 252, 159, 159, 159, 159, 159, 159,
1314 159, 159, 159, 159, 159, 159, 160, 184, 275, 242,
1315 242, 242, 242, 160, 304, 202, 222, 275, 317, 317,
1316 317, 317, 203, 358, 388, 203, 203, 203, 203, 203,
1317 239, 239, 239, 239, 372, 160, 388, 359, 388, 160,
1318 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
1319 160, 203, 242, 461, 358, 461, 230, 230, 230, 230,
1320 461, 635, 160, 177, 177, 177, 177, 177, 177, 177,
1321 177, 177, 177, 177, 177, 178, 178, 359, 203, 239,
1322 178, 707, 707, 178, 178, 178, 178, 178, 230, 178,
1323 634, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1325 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1326 360, 360, 360, 178, 178, 178, 178, 178, 178, 178,
1327 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1328 178, 178, 178, 178, 178, 178, 178, 178, 180, 180,
1329 180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
1330 181, 181, 449, 360, 444, 181, 708, 708, 181, 181,
1331 181, 181, 181, 633, 181, 449, 181, 181, 181, 181,
1332 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1333 181, 181, 181, 181, 181, 444, 632, 591, 181, 181,
1334 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1336 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1337 181, 181, 181, 221, 221, 221, 221, 221, 221, 221,
1338 221, 221, 221, 221, 221, 225, 338, 338, 338, 338,
1339 454, 651, 225, 366, 225, 253, 591, 286, 231, 231,
1340 231, 231, 253, 253, 253, 253, 366, 531, 253, 286,
1341 363, 363, 363, 363, 225, 465, 465, 465, 225, 225,
1342 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1343 231, 629, 285, 628, 366, 467, 253, 454, 283, 286,
1344 651, 225, 240, 240, 285, 240, 240, 240, 240, 240,
1345 283, 240, 240, 240, 240, 531, 240, 240, 288, 254,
1347 450, 264, 240, 240, 240, 240, 254, 254, 254, 254,
1348 288, 276, 254, 450, 285, 264, 264, 264, 264, 276,
1349 276, 276, 276, 276, 279, 240, 240, 240, 285, 285,
1350 398, 389, 279, 279, 279, 279, 279, 467, 283, 281,
1351 254, 305, 398, 389, 288, 389, 240, 281, 281, 281,
1352 281, 281, 305, 240, 240, 244, 244, 244, 244, 244,
1353 626, 244, 244, 244, 244, 244, 244, 592, 284, 244,
1354 244, 264, 282, 284, 289, 244, 244, 569, 244, 281,
1355 282, 282, 282, 282, 282, 284, 289, 608, 287, 303,
1356 295, 284, 295, 287, 303, 299, 301, 299, 244, 244,
1358 287, 303, 295, 625, 414, 414, 290, 299, 301, 414,
1359 621, 305, 282, 284, 290, 290, 290, 290, 290, 592,
1360 620, 297, 302, 289, 369, 370, 244, 244, 245, 297,
1361 297, 297, 297, 297, 302, 336, 301, 369, 370, 608,
1362 569, 245, 336, 245, 245, 245, 245, 245, 245, 245,
1363 245, 245, 245, 245, 245, 245, 245, 245, 245, 245,
1364 245, 245, 302, 290, 336, 369, 370, 601, 584, 245,
1365 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
1366 247, 247, 255, 328, 300, 709, 709, 328, 622, 601,
1367 300, 336, 579, 584, 328, 255, 300, 255, 255, 255,
1369 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
1370 255, 255, 255, 255, 255, 255, 712, 712, 312, 312,
1371 466, 409, 318, 255, 277, 312, 312, 312, 312, 318,
1372 379, 318, 332, 409, 393, 619, 277, 300, 380, 332,
1373 379, 332, 379, 622, 385, 328, 393, 379, 380, 411,
1374 380, 318, 385, 636, 579, 380, 385, 445, 445, 445,
1375 411, 332, 277, 277, 277, 277, 277, 277, 277, 277,
1376 277, 277, 277, 277, 280, 394, 466, 451, 318, 396,
1377 618, 280, 393, 280, 365, 365, 487, 394, 332, 365,
1378 451, 396, 365, 365, 365, 365, 665, 616, 365, 487,
1380 445, 636, 396, 280, 448, 448, 448, 280, 280, 280,
1381 280, 280, 280, 280, 280, 280, 280, 280, 280, 411,
1382 615, 399, 607, 394, 396, 416, 416, 416, 416, 606,
1383 280, 291, 291, 399, 291, 291, 291, 291, 291, 291,
1384 291, 291, 291, 291, 377, 291, 291, 448, 665, 502,
1385 399, 291, 291, 291, 291, 392, 401, 400, 377, 377,
1386 377, 377, 502, 392, 392, 392, 392, 392, 401, 400,
1387 402, 600, 424, 459, 291, 291, 291, 407, 481, 407,
1388 481, 598, 402, 395, 424, 459, 671, 408, 395, 407,
1389 481, 469, 471, 408, 477, 291, 469, 471, 401, 408,
1391 395, 400, 291, 291, 292, 292, 477, 482, 469, 471,
1392 729, 729, 402, 597, 377, 596, 292, 675, 292, 482,
1393 292, 292, 292, 292, 292, 292, 292, 292, 292, 292,
1394 292, 292, 292, 292, 292, 292, 292, 292, 292, 395,
1395 408, 671, 602, 459, 604, 477, 292, 293, 293, 293,
1396 293, 293, 293, 293, 293, 293, 293, 293, 293, 298,
1397 483, 530, 530, 530, 602, 675, 604, 590, 589, 588,
1398 586, 483, 298, 612, 298, 298, 298, 298, 298, 298,
1399 298, 298, 298, 298, 298, 298, 298, 298, 298, 298,
1400 298, 298, 298, 585, 583, 612, 581, 645, 580, 645,
1402 298, 335, 335, 335, 335, 335, 335, 335, 335, 335,
1403 335, 335, 335, 348, 348, 433, 348, 348, 348, 348,
1404 348, 645, 348, 348, 348, 348, 503, 348, 348, 410,
1405 483, 473, 578, 348, 348, 348, 348, 406, 406, 503,
1406 476, 410, 406, 473, 433, 406, 406, 406, 406, 406,
1407 472, 406, 470, 433, 476, 476, 348, 348, 348, 577,
1408 478, 507, 472, 348, 470, 572, 479, 567, 517, 433,
1409 472, 479, 478, 473, 566, 507, 536, 348, 348, 470,
1410 582, 410, 517, 479, 348, 348, 355, 355, 536, 355,
1411 355, 355, 355, 355, 582, 355, 355, 355, 355, 611,
1413 355, 355, 470, 646, 486, 486, 355, 355, 355, 355,
1414 478, 486, 486, 486, 486, 533, 534, 533, 520, 520,
1415 520, 525, 535, 646, 659, 646, 611, 533, 534, 355,
1416 355, 355, 536, 538, 535, 525, 525, 525, 525, 539,
1417 677, 541, 564, 571, 574, 538, 659, 562, 611, 561,
1418 560, 539, 541, 535, 534, 571, 574, 355, 355, 356,
1419 356, 520, 356, 356, 356, 356, 356, 559, 356, 356,
1420 356, 356, 575, 356, 356, 538, 570, 539, 573, 356,
1421 356, 356, 356, 643, 575, 544, 544, 558, 570, 538,
1422 573, 525, 544, 544, 544, 544, 613, 643, 565, 571,
1424 631, 557, 356, 356, 356, 576, 595, 570, 613, 614,
1425 677, 541, 565, 565, 565, 565, 576, 595, 556, 573,
1426 614, 555, 631, 678, 554, 553, 551, 550, 631, 575,
1427 356, 356, 390, 390, 390, 390, 390, 390, 390, 390,
1428 390, 390, 390, 390, 397, 397, 549, 397, 397, 397,
1429 397, 397, 397, 397, 397, 397, 397, 594, 397, 397,
1430 627, 547, 624, 638, 397, 397, 397, 397, 565, 594,
1431 546, 627, 545, 630, 617, 576, 595, 543, 630, 614,
1432 617, 642, 540, 537, 529, 528, 655, 397, 397, 397,
1433 624, 638, 642, 678, 397, 630, 617, 655, 693, 594,
1435 668, 527, 617, 526, 524, 672, 522, 653, 397, 397,
1436 518, 668, 624, 638, 639, 397, 397, 403, 403, 652,
1437 403, 403, 403, 403, 403, 403, 403, 403, 403, 403,
1438 627, 403, 403, 672, 516, 653, 639, 403, 403, 403,
1439 403, 515, 639, 514, 513, 512, 511, 652, 510, 509,
1440 508, 642, 652, 666, 673, 672, 655, 653, 639, 667,
1441 403, 403, 403, 653, 639, 673, 679, 680, 693, 652,
1442 668, 681, 682, 683, 684, 685, 506, 679, 680, 666,
1443 505, 666, 681, 682, 683, 684, 685, 667, 403, 403,
1444 405, 405, 504, 405, 405, 405, 405, 405, 405, 405,
1446 405, 405, 405, 666, 405, 405, 501, 667, 500, 667,
1447 405, 405, 405, 405, 499, 498, 497, 496, 495, 494,
1448 493, 492, 491, 490, 673, 489, 488, 480, 475, 686,
1449 464, 463, 462, 405, 405, 405, 679, 680, 460, 458,
1450 686, 681, 682, 683, 684, 685, 687, 456, 453, 452,
1451 447, 443, 442, 688, 689, 690, 691, 687, 692, 441,
1452 437, 405, 405, 426, 688, 689, 690, 691, 436, 692,
1453 434, 431, 430, 429, 428, 427, 426, 423, 426, 426,
1454 426, 426, 426, 426, 426, 426, 426, 426, 426, 426,
1455 426, 426, 426, 426, 426, 426, 426, 439, 439, 686,
1457 439, 439, 439, 439, 439, 422, 439, 439, 439, 439,
1458 421, 439, 439, 420, 419, 418, 687, 439, 439, 439,
1459 439, 417, 415, 688, 689, 690, 691, 413, 692, 412,
1460 404, 391, 383, 382, 381, 378, 376, 374, 371, 367,
1461 439, 439, 439, 362, 361, 353, 352, 351, 350, 344,
1462 343, 342, 341, 340, 339, 334, 333, 331, 326, 324,
1463 322, 321, 320, 319, 316, 315, 314, 313, 439, 439,
1464 440, 440, 310, 440, 440, 440, 440, 440, 306, 440,
1465 440, 440, 440, 296, 440, 440, 294, 278, 274, 268,
1466 440, 440, 440, 440, 266, 262, 261, 260, 259, 257,
1468 256, 251, 250, 249, 238, 237, 236, 235, 232, 229,
1469 228, 227, 226, 440, 440, 440, 216, 215, 214, 213,
1470 440, 212, 209, 208, 207, 206, 205, 204, 200, 199,
1471 195, 191, 179, 170, 440, 440, 161, 150, 148, 147,
1472 145, 440, 440, 468, 468, 143, 142, 141, 140, 139,
1473 126, 125, 122, 120, 119, 468, 117, 468, 116, 468,
1474 468, 468, 468, 468, 468, 468, 468, 468, 468, 468,
1475 468, 468, 468, 468, 468, 468, 468, 468, 474, 474,
1476 115, 474, 474, 474, 474, 474, 474, 474, 474, 474,
1477 474, 114, 474, 474, 103, 101, 97, 94, 474, 474,
1479 474, 474, 93, 92, 88, 83, 80, 60, 59, 57,
1480 56, 54, 53, 45, 42, 41, 39, 24, 23, 21,
1481 20, 474, 474, 474, 18, 17, 14, 9, 3, 0,
1482 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1483 0, 0, 0, 0, 0, 0, 0, 0, 0, 474,
1484 474, 587, 587, 0, 587, 587, 587, 587, 587, 0,
1485 587, 587, 587, 587, 0, 587, 587, 0, 0, 0,
1486 0, 587, 587, 587, 587, 0, 0, 0, 0, 0,
1487 0, 587, 0, 0, 0, 0, 0, 0, 0, 0,
1488 0, 0, 0, 0, 587, 587, 587, 0, 0, 0,
1490 0, 0, 0, 587, 0, 0, 0, 0, 0, 0,
1491 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1492 0, 0, 587, 587, 593, 593, 0, 593, 593, 593,
1493 593, 593, 593, 593, 593, 593, 593, 0, 593, 593,
1494 0, 0, 0, 0, 593, 593, 593, 593, 0, 0,
1495 0, 0, 0, 0, 593, 0, 0, 0, 0, 0,
1496 0, 0, 0, 0, 0, 0, 0, 593, 593, 593,
1497 0, 0, 0, 0, 0, 0, 593, 0, 0, 0,
1498 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1499 0, 0, 0, 0, 0, 593, 593, 603, 603, 0,
1501 603, 603, 603, 603, 603, 0, 603, 603, 603, 603,
1502 0, 603, 603, 0, 0, 0, 0, 603, 603, 603,
1503 603, 0, 0, 0, 0, 0, 0, 603, 0, 0,
1504 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1505 603, 603, 603, 0, 0, 0, 0, 0, 0, 603,
1506 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1507 0, 0, 0, 0, 0, 0, 0, 0, 603, 603,
1508 610, 610, 0, 610, 610, 610, 610, 610, 610, 610,
1509 610, 610, 610, 0, 610, 610, 0, 0, 0, 0,
1510 610, 610, 610, 610, 0, 0, 0, 0, 0, 0,
1512 610, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1513 0, 0, 0, 610, 610, 610, 0, 0, 0, 0,
1514 0, 0, 610, 0, 0, 0, 0, 0, 0, 0,
1515 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1516 0, 610, 610, 697, 0, 0, 0, 697, 697, 0,
1517 0, 697, 697, 697, 697, 697, 697, 697, 697, 698,
1518 698, 698, 698, 698, 0, 698, 698, 698, 698, 698,
1519 698, 698, 698, 698, 698, 698, 698, 698, 699, 699,
1520 0, 0, 0, 699, 699, 699, 700, 700, 700, 700,
1521 700, 700, 700, 700, 700, 700, 700, 700, 700, 700,
1523 700, 700, 700, 700, 700, 701, 701, 701, 701, 701,
1524 701, 701, 701, 701, 701, 701, 701, 701, 701, 701,
1525 701, 701, 701, 701, 702, 702, 702, 702, 702, 702,
1526 702, 702, 702, 702, 702, 702, 702, 702, 702, 702,
1527 702, 702, 702, 703, 0, 0, 0, 703, 703, 703,
1528 0, 703, 703, 703, 703, 703, 703, 703, 703, 704,
1529 704, 704, 704, 704, 0, 704, 704, 704, 704, 704,
1530 704, 704, 704, 704, 704, 704, 704, 704, 705, 705,
1531 705, 705, 705, 705, 705, 705, 705, 705, 705, 705,
1532 705, 705, 705, 705, 705, 705, 705, 706, 706, 0,
1534 0, 0, 0, 0, 0, 0, 0, 706, 0, 0,
1535 706, 706, 0, 706, 710, 710, 710, 710, 710, 710,
1536 710, 710, 710, 710, 710, 710, 710, 710, 710, 710,
1537 710, 710, 710, 711, 711, 711, 711, 711, 711, 711,
1538 711, 711, 711, 711, 711, 711, 711, 711, 711, 711,
1539 711, 711, 713, 713, 713, 713, 713, 713, 713, 713,
1540 713, 713, 713, 713, 713, 713, 713, 713, 713, 713,
1541 713, 714, 714, 714, 714, 714, 714, 714, 714, 714,
1542 714, 714, 714, 714, 714, 714, 714, 714, 714, 714,
1543 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
1545 715, 715, 715, 715, 715, 715, 715, 715, 715, 716,
1546 716, 716, 716, 716, 716, 716, 716, 716, 716, 716,
1547 716, 716, 716, 716, 716, 716, 716, 716, 717, 717,
1548 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
1549 717, 717, 717, 717, 717, 717, 717, 718, 718, 718,
1550 718, 718, 718, 718, 718, 718, 718, 718, 718, 718,
1551 718, 718, 718, 718, 718, 718, 719, 719, 719, 719,
1552 719, 719, 719, 719, 719, 719, 719, 719, 719, 719,
1553 719, 719, 719, 719, 719, 720, 720, 0, 720, 720,
1554 720, 720, 720, 720, 720, 720, 720, 720, 720, 720,
1556 720, 720, 720, 720, 721, 721, 0, 721, 721, 721,
1557 721, 721, 721, 721, 721, 721, 721, 721, 721, 721,
1558 721, 721, 721, 722, 0, 722, 0, 0, 0, 722,
1559 722, 722, 0, 0, 722, 723, 723, 0, 723, 723,
1560 723, 723, 723, 723, 723, 723, 723, 723, 723, 723,
1561 723, 723, 723, 723, 724, 724, 724, 724, 724, 724,
1562 724, 724, 724, 724, 724, 724, 724, 724, 724, 724,
1563 724, 724, 724, 725, 725, 725, 725, 725, 725, 725,
1564 725, 725, 725, 725, 725, 725, 725, 725, 725, 725,
1565 725, 725, 726, 726, 726, 726, 726, 726, 726, 726,
1567 726, 726, 726, 726, 726, 726, 726, 726, 726, 726,
1568 726, 727, 727, 727, 727, 727, 727, 727, 727, 727,
1569 727, 727, 727, 727, 727, 727, 727, 727, 727, 727,
1570 728, 728, 728, 730, 0, 0, 0, 730, 0, 730,
1571 730, 730, 730, 0, 730, 731, 731, 731, 731, 731,
1572 731, 731, 731, 731, 731, 731, 731, 731, 731, 731,
1573 731, 731, 731, 731, 732, 732, 732, 732, 732, 732,
1574 732, 732, 732, 732, 732, 732, 732, 732, 732, 732,
1575 732, 732, 732, 733, 0, 0, 0, 733, 733, 733,
1576 0, 733, 733, 733, 733, 733, 733, 733, 733, 734,
1578 734, 734, 734, 734, 734, 734, 734, 734, 734, 734,
1579 734, 734, 734, 734, 734, 734, 734, 734, 735, 735,
1580 735, 735, 735, 735, 735, 735, 735, 735, 735, 735,
1581 735, 735, 735, 735, 735, 735, 735, 736, 736, 0,
1582 736, 736, 736, 736, 736, 736, 736, 736, 736, 736,
1583 736, 736, 736, 736, 736, 736, 737, 737, 737, 737,
1584 737, 737, 737, 737, 737, 737, 737, 737, 737, 737,
1585 737, 737, 737, 737, 737, 738, 738, 738, 738, 0,
1586 738, 738, 738, 738, 738, 738, 738, 738, 738, 738,
1587 738, 738, 738, 738, 739, 739, 739, 739, 739, 739,
1589 739, 739, 739, 739, 739, 739, 739, 739, 739, 739,
1590 739, 739, 739, 740, 740, 0, 740, 740, 740, 740,
1591 740, 740, 740, 740, 740, 740, 740, 740, 740, 740,
1592 740, 740, 741, 741, 0, 741, 741, 741, 741, 741,
1593 741, 741, 741, 741, 741, 741, 741, 741, 741, 741,
1594 741, 742, 0, 742, 742, 0, 0, 742, 742, 742,
1595 0, 0, 742, 743, 743, 0, 743, 743, 743, 743,
1596 743, 743, 743, 743, 743, 743, 743, 743, 743, 743,
1597 743, 743, 744, 744, 0, 744, 744, 744, 744, 744,
1598 744, 744, 744, 744, 744, 744, 744, 744, 744, 744,
1600 744, 745, 745, 0, 745, 745, 745, 745, 745, 745,
1601 745, 745, 745, 745, 745, 745, 745, 745, 745, 745,
1602 746, 746, 746, 746, 746, 746, 746, 746, 746, 746,
1603 746, 746, 746, 746, 746, 746, 746, 746, 746, 747,
1604 747, 747, 747, 747, 747, 747, 747, 747, 747, 747,
1605 747, 747, 747, 747, 747, 747, 747, 747, 748, 748,
1606 748, 748, 748, 748, 748, 748, 748, 748, 748, 748,
1607 748, 748, 748, 748, 748, 748, 748, 749, 749, 749,
1608 749, 749, 749, 749, 749, 749, 749, 749, 749, 749,
1609 749, 749, 749, 749, 749, 749, 750, 750, 0, 0,
1611 750, 750, 0, 750, 750, 750, 750, 750, 750, 750,
1612 750, 750, 751, 0, 0, 0, 0, 0, 751, 751,
1613 751, 751, 0, 751, 752, 752, 752, 752, 752, 752,
1614 752, 752, 752, 752, 752, 752, 752, 752, 752, 752,
1615 752, 752, 752, 753, 753, 753, 753, 753, 753, 753,
1616 753, 753, 753, 753, 753, 753, 753, 753, 753, 753,
1617 753, 753, 754, 754, 0, 754, 754, 754, 754, 754,
1618 754, 754, 754, 754, 754, 754, 754, 754, 754, 754,
1619 754, 755, 755, 0, 755, 755, 755, 755, 755, 755,
1620 755, 755, 755, 755, 755, 755, 755, 755, 755, 755,
1622 756, 756, 0, 0, 756, 756, 756, 756, 756, 756,
1623 756, 756, 756, 756, 756, 756, 757, 757, 757, 757,
1624 0, 757, 757, 757, 757, 757, 757, 757, 757, 757,
1625 757, 757, 757, 757, 757, 758, 758, 758, 758, 758,
1626 758, 758, 758, 758, 758, 758, 758, 758, 758, 758,
1627 758, 758, 758, 758, 759, 759, 0, 759, 759, 759,
1628 759, 759, 759, 759, 759, 759, 759, 759, 759, 759,
1629 759, 759, 759, 760, 760, 0, 760, 760, 760, 760,
1630 760, 760, 760, 760, 760, 760, 760, 760, 760, 760,
1631 760, 760, 761, 761, 0, 761, 761, 761, 761, 761,
1633 761, 761, 761, 761, 761, 761, 761, 761, 761, 761,
1634 761, 762, 762, 0, 762, 762, 762, 762, 762, 762,
1635 762, 762, 762, 762, 762, 762, 762, 762, 762, 762,
1636 763, 763, 0, 763, 763, 763, 763, 763, 763, 763,
1637 763, 763, 763, 763, 763, 763, 763, 763, 763, 764,
1638 764, 0, 764, 764, 764, 764, 764, 764, 764, 764,
1639 764, 764, 764, 764, 764, 764, 764, 764, 765, 765,
1640 0, 765, 765, 765, 765, 765, 765, 765, 765, 765,
1641 765, 765, 765, 765, 765, 765, 765, 766, 766, 0,
1642 766, 766, 766, 766, 766, 766, 766, 766, 766, 766,
1644 766, 766, 766, 766, 766, 766, 767, 767, 767, 767,
1645 767, 767, 767, 767, 767, 767, 767, 767, 767, 767,
1646 767, 767, 767, 767, 767, 768, 768, 768, 768, 768,
1647 768, 768, 768, 768, 768, 768, 768, 768, 768, 768,
1648 768, 768, 768, 768, 769, 769, 769, 769, 769, 769,
1649 769, 769, 769, 769, 769, 769, 769, 769, 769, 769,
1650 769, 769, 769, 770, 0, 0, 0, 0, 0, 770,
1651 770, 770, 770, 770, 770, 770, 770, 770, 771, 771,
1652 771, 771, 771, 771, 771, 771, 771, 771, 771, 771,
1653 771, 771, 771, 771, 771, 771, 771, 772, 772, 772,
1655 772, 772, 772, 772, 772, 772, 772, 772, 772, 772,
1656 772, 772, 772, 772, 772, 772, 773, 773, 773, 773,
1657 773, 773, 773, 773, 773, 773, 773, 773, 773, 773,
1658 773, 773, 773, 773, 773, 774, 0, 0, 0, 0,
1659 0, 774, 774, 774, 774, 775, 775, 0, 775, 775,
1660 775, 775, 775, 775, 775, 775, 775, 775, 775, 775,
1661 775, 775, 775, 775, 776, 776, 776, 776, 776, 776,
1662 776, 776, 776, 776, 776, 776, 776, 776, 776, 776,
1663 776, 776, 776, 777, 777, 0, 777, 777, 777, 777,
1664 777, 777, 777, 777, 777, 777, 777, 777, 777, 777,
1666 777, 777, 778, 778, 0, 778, 778, 778, 778, 778,
1667 778, 778, 778, 778, 778, 778, 778, 778, 778, 778,
1668 778, 779, 779, 0, 779, 779, 779, 779, 779, 779,
1669 779, 779, 779, 779, 779, 779, 779, 779, 779, 779,
1670 780, 780, 780, 780, 780, 780, 780, 780, 780, 780,
1671 780, 780, 780, 780, 780, 780, 780, 780, 780, 781,
1672 781, 781, 781, 781, 781, 781, 781, 781, 781, 781,
1673 781, 781, 781, 781, 781, 781, 781, 781, 782, 782,
1674 782, 782, 782, 782, 782, 782, 782, 782, 782, 782,
1675 782, 782, 782, 782, 782, 782, 782, 783, 783, 783,
1677 783, 783, 783, 783, 783, 783, 783, 783, 783, 783,
1678 783, 783, 783, 783, 783, 783, 696, 696, 696, 696,
1679 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1680 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1681 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1682 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1683 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1684 696, 696, 696, 696, 696, 696, 696, 696, 696, 696,
1685 696, 696, 696, 696, 696, 696, 696, 696, 696, 696
1688 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1689 static char *yy_full_match;
1691 static int yy_looking_for_trail_begin = 0;
1692 static int yy_full_lp;
1693 static int *yy_full_state;
1694 #define YY_TRAILING_MASK 0x2000
1695 #define YY_TRAILING_HEAD_MASK 0x4000
1698 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1699 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1700 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1701 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1702 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1706 #define yymore() yymore_used_but_not_detected
1707 #define YY_MORE_ADJ 0
1708 #define YY_RESTORE_YY_MORE_OFFSET
1712 * parser.l -- lex parser of algebraic chess moves for XBoard
1713 * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
1715 * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
1716 * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
1718 * The following terms apply to Digital Equipment Corporation's copyright
1719 * interest in XBoard:
1720 * ------------------------------------------------------------------------
1721 * All Rights Reserved
1723 * Permission to use, copy, modify, and distribute this software and its
1724 * documentation for any purpose and without fee is hereby granted,
1725 * provided that the above copyright notice appear in all copies and that
1726 * both that copyright notice and this permission notice appear in
1727 * supporting documentation, and that the name of Digital not be
1728 * used in advertising or publicity pertaining to distribution of the
1729 * software without specific, written prior permission.
1731 * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1732 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1733 * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1734 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1735 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1736 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1738 * ------------------------------------------------------------------------
1740 * The following terms apply to the enhanced version of XBoard distributed
1741 * by the Free Software Foundation:
1742 * ------------------------------------------------------------------------
1743 * This program is free software; you can redistribute it and/or modify
1744 * it under the terms of the GNU General Public License as published by
1745 * the Free Software Foundation; either version 2 of the License, or
1746 * (at your option) any later version.
1748 * This program is distributed in the hope that it will be useful,
1749 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1750 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1751 * GNU General Public License for more details.
1753 * You should have received a copy of the GNU General Public License
1754 * along with this program; if not, write to the Free Software
1755 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1756 * ------------------------------------------------------------------------
1759 /* This parser handles all forms of promotion.
1760 * The parser resolves ambiguous moves by searching and check-testing.
1761 * It also parses comments of the form [anything] or (anything).
1763 * [HGM] Parser extensively modified for bigger boards, Shogi-like syntax,
1764 * and unknow pieces. All pieces are now mandatory upper case, but can be
1765 * any letter A-Z. Files must be lower case (as before), but can run upto 'l'.
1766 * Ranks can be 0-9. The parser returns 0 for off-board files and ranks.
1767 * For an unknown piece (as mover or promotion piece) it returns
1768 * IllegalMove, like it does when the piece doesn't match.
1769 * Promotions can now also be appended Shogi-style, a bare '=' or '+',
1770 * and this is then returned as promotion character. The piece indicator
1771 * can be prefixed by a '+' to indicate it is a promoted piece.
1776 #define NO_CONSTRAINT -1
1779 #define UNPUT_BUF_SIZE YYLMAX
1782 /* yytext is probably a char*, but could be a char[]. yy_text is set
1783 in YY_DECL below, because if yytext is a char*, its value is not
1786 #else /*!FLEX_SCANNER*/
1787 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1788 char *yy_text = (char *) yytext;
1793 /* [AP] use prototypes in function declarations */
1794 #define YY_USE_PROTOS
1796 #ifdef YY_USE_PROTOS
1797 #define YY_PROTO(proto) proto
1799 #define YY_PROTO(proto) ()
1801 /* end of [AP] fix */
1804 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1807 int _yylex YY_PROTO((void)); \
1808 int yylex YY_PROTO((void)) \
1810 int result = _yylex(); \
1811 yy_text = (char *) yytext; \
1814 int _yylex YY_PROTO((void))
1822 /* The includes must be here, below the #undef input */
1827 # include <stdlib.h>
1828 # include <string.h>
1829 #else /* not STDC_HEADERS */
1831 # include <string.h>
1832 # else /* not HAVE_STRING_H */
1833 # include <strings.h>
1834 # endif /* not HAVE_STRING_H */
1835 #endif /* not STDC_HEADERS */
1838 # include <unistd.h>
1841 #if defined(_amigados)
1844 # include <fcntl.h> /* isatty() prototype */
1845 # endif /* HAVE_FCNTL_H */
1846 #endif /* defined(_amigados) */
1849 #include "backend.h"
1850 #include "frontend.h"
1854 extern int PosFlags P((int));
1856 extern Board boards[MAX_MOVES];
1858 int yyskipmoves = FALSE;
1859 char currentMoveString[YYLMAX];
1860 #ifndef FLEX_SCANNER
1861 char unputBuffer[UNPUT_BUF_SIZE];
1866 void my_yy_input P((char *buf, int *result, int max_size));
1867 #else /*!FLEX_SCANNER*/
1868 static int input P((void));
1869 static void output P((int ch));
1870 static void unput P((int ch));
1871 int yylook P((void));
1872 int yyback P((int *, int));
1875 int yywrap P((void));
1876 extern void CopyBoard P((Board to, Board from));
1879 /* Macros after this point can all be overridden by user definitions in
1883 #ifndef YY_SKIP_YYWRAP
1885 extern "C" int yywrap YY_PROTO(( void ));
1887 extern int yywrap YY_PROTO(( void ));
1892 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1896 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1899 #ifdef YY_NEED_STRLEN
1900 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1905 static int yyinput YY_PROTO(( void ));
1907 static int input YY_PROTO(( void ));
1912 static int yy_start_stack_ptr = 0;
1913 static int yy_start_stack_depth = 0;
1914 static int *yy_start_stack = 0;
1915 #ifndef YY_NO_PUSH_STATE
1916 static void yy_push_state YY_PROTO(( int new_state ));
1918 #ifndef YY_NO_POP_STATE
1919 static void yy_pop_state YY_PROTO(( void ));
1921 #ifndef YY_NO_TOP_STATE
1922 static int yy_top_state YY_PROTO(( void ));
1926 #define YY_NO_PUSH_STATE 1
1927 #define YY_NO_POP_STATE 1
1928 #define YY_NO_TOP_STATE 1
1931 #ifdef YY_MALLOC_DECL
1939 /* Just try to get by without declaring the routines. This will fail
1940 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1941 * or sizeof(void*) != sizeof(int).
1946 /* Amount of stuff to slurp up with each read. */
1947 #ifndef YY_READ_BUF_SIZE
1948 #define YY_READ_BUF_SIZE 8192
1951 /* Copy whatever the last rule matched to the standard output. */
1954 /* This used to be an fputs(), but since the string might contain NUL's,
1955 * we now use fwrite().
1957 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1960 /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
1961 * is returned in "result".
1964 #define YY_INPUT(buf,result,max_size) \
1965 if ( yy_current_buffer->yy_is_interactive ) \
1968 for ( n = 0; n < max_size && \
1969 (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1970 buf[n] = (char) c; \
1972 buf[n++] = (char) c; \
1973 if ( c == EOF && ferror( yyin ) ) \
1974 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1980 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
1982 if( errno != EINTR) \
1984 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1993 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1994 * we don't want an extra ';' after the "return" because that will cause
1995 * some compilers to complain about unreachable statements.
1998 #define yyterminate() return YY_NULL
2001 /* Number of entries by which start-condition stack grows. */
2002 #ifndef YY_START_STACK_INCR
2003 #define YY_START_STACK_INCR 25
2006 /* Report a fatal error. */
2007 #ifndef YY_FATAL_ERROR
2008 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2011 /* Default declaration of generated scanner - a define so the user can
2012 * easily add parameters.
2015 #define YY_DECL int yylex YY_PROTO(( void ))
2018 /* Code executed at the beginning of each rule, after yytext and yyleng
2021 #ifndef YY_USER_ACTION
2022 #define YY_USER_ACTION
2025 /* Code executed at the end of each rule. */
2027 #define YY_BREAK break;
2030 #define YY_RULE_SETUP \
2032 yy_current_buffer->yy_at_bol = \
2033 (yytext[yyleng - 1] == '\n'); \
2038 register yy_state_type yy_current_state;
2039 register char *yy_cp, *yy_bp;
2040 register int yy_act;
2054 yy_start = 1; /* first start state */
2062 if ( ! yy_current_buffer )
2064 yy_create_buffer( yyin, YY_BUF_SIZE );
2066 yy_load_buffer_state();
2069 while ( 1 ) /* loops until end-of-file is reached */
2073 /* Support of yytext. */
2074 *yy_cp = yy_hold_char;
2076 /* yy_bp points to the position in yy_ch_buf of the start of
2081 yy_current_state = yy_start;
2082 yy_current_state += YY_AT_BOL();
2083 yy_state_ptr = yy_state_buf;
2084 *yy_state_ptr++ = yy_current_state;
2088 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2089 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2091 yy_current_state = (int) yy_def[yy_current_state];
2092 if ( yy_current_state >= 697 )
2093 yy_c = yy_meta[(unsigned int) yy_c];
2095 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2096 *yy_state_ptr++ = yy_current_state;
2099 while ( yy_base[yy_current_state] != 4517 );
2102 yy_current_state = *--yy_state_ptr;
2103 yy_lp = yy_accept[yy_current_state];
2104 find_rule: /* we branch to this label when backing up */
2105 for ( ; ; ) /* until we find what rule we matched */
2107 if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2109 yy_act = yy_acclist[yy_lp];
2110 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2111 yy_looking_for_trail_begin )
2113 if ( yy_act == yy_looking_for_trail_begin )
2115 yy_looking_for_trail_begin = 0;
2116 yy_act &= ~YY_TRAILING_HEAD_MASK;
2120 else if ( yy_act & YY_TRAILING_MASK )
2122 yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2123 yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2127 yy_full_match = yy_cp;
2128 yy_full_state = yy_state_ptr;
2136 yy_current_state = *--yy_state_ptr;
2137 yy_lp = yy_accept[yy_current_state];
2140 YY_DO_BEFORE_ACTION;
2143 do_action: /* This label is used only to access EOF actions. */
2147 { /* beginning of action switch */
2152 * Fully-qualified algebraic move, possibly with promotion
2154 int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;
2159 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2161 if (yytext[0] == '+') skip1 = skip3 = promoted = 1; /* [HGM] Shogi promoted */
2164 if (yytext[1+skip1] == '/') skip1++;
2166 /* remove the [xX:-] */
2167 if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2168 (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2170 currentMoveString[0] = yytext[1+skip1];
2171 currentMoveString[1] = yytext[2+skip1];
2172 currentMoveString[2] = yytext[3+skip1+skip2];
2173 currentMoveString[3] = yytext[4+skip1+skip2];
2174 currentMoveString[4] = NULLCHAR;
2176 if (appData.debugMode) {
2177 fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",
2181 if (yyleng-skip1-skip2 > 5) { char c;
2182 if (yytext[yyleng-1] == ')') {
2183 c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2185 c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2187 currentMoveString[5] = NULLCHAR;
2188 if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2189 return IllegalMove; /* [HGM] promotion to invalid piece */
2192 if (appData.debugMode) {
2193 fprintf(debugFP, "parser: %s\n", currentMoveString);
2195 /* [HGM] do not allow values beyond board size */
2196 if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2197 currentMoveString[1] - ONE < 0 ||
2198 currentMoveString[0] - AAA >= BOARD_RGHT ||
2199 currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2200 currentMoveString[3] - ONE < 0 ||
2201 currentMoveString[2] - AAA >= BOARD_RGHT ||
2202 currentMoveString[0] - AAA < BOARD_LEFT ||
2203 currentMoveString[2] - AAA < BOARD_LEFT )
2206 piece = boards[yyboardindex]
2207 [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
2208 if(promoted) piece = (ChessSquare) (DEMOTED piece);
2209 c = PieceToChar(piece);
2210 if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));
2211 if (ToLower(yytext[skip3]) != ToLower(c))
2212 return (int) IllegalMove;
2214 result = LegalityTest(boards[yyboardindex],
2215 PosFlags(yyboardindex), EP_UNKNOWN,
2216 initialRights, /* [HGM] assume all castlings allowed */
2217 currentMoveString[1] - ONE,
2218 currentMoveString[0] - AAA,
2219 currentMoveString[3] - ONE,
2220 currentMoveString[2] - AAA,
2221 currentMoveString[4]);
2223 if (currentMoveString[4] == NULLCHAR &&
2224 (result == WhitePromotionKnight || result == BlackPromotionKnight ||
2225 result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2226 currentMoveString[4] = PieceToChar(BlackQueen);
2227 currentMoveString[5] = NULLCHAR;
2230 return (int) result;
2237 * Simple algebraic move, possibly with promotion
2238 * [HGM] Engine moves are received in this format, with lower-case promoChar!
2243 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2245 /* remove the [xX:-] */
2246 if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2247 (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2249 currentMoveString[0] = yytext[0];
2250 currentMoveString[1] = yytext[1];
2251 currentMoveString[2] = yytext[2+skip];
2252 currentMoveString[3] = yytext[3+skip];
2253 currentMoveString[4] = NULLCHAR;
2255 if (yyleng-skip > 4) { char c;
2256 if (yytext[yyleng-1] == ')') {
2257 c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2259 c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2261 currentMoveString[5] = NULLCHAR;
2262 if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2266 /* [HGM] do not allow values beyond board size */
2267 if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2268 currentMoveString[1] - ONE < 0 ||
2269 currentMoveString[0] - AAA >= BOARD_RGHT ||
2270 currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2271 currentMoveString[3] - ONE < 0 ||
2272 currentMoveString[2] - AAA >= BOARD_RGHT ||
2273 currentMoveString[0] - AAA < BOARD_LEFT ||
2274 currentMoveString[2] - AAA < BOARD_LEFT )
2277 result = LegalityTest(boards[yyboardindex],
2278 PosFlags(yyboardindex), EP_UNKNOWN,
2279 initialRights, /* [HGM] assume all castlings allowed */
2280 currentMoveString[1] - ONE,
2281 currentMoveString[0] - AAA,
2282 currentMoveString[3] - ONE,
2283 currentMoveString[2] - AAA,
2284 currentMoveString[4]);
2286 if (currentMoveString[4] == NULLCHAR &&
2287 (result == WhitePromotionKnight || result == BlackPromotionKnight ||
2288 result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2289 if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
2290 currentMoveString[4] = PieceToChar(BlackFerz);
2291 else if(gameInfo.variant == VariantGreat)
2292 currentMoveString[4] = PieceToChar(BlackMan);
2294 currentMoveString[4] = PieceToChar(BlackQueen);
2295 currentMoveString[5] = NULLCHAR;
2298 return (int) result;
2305 * Pawn move, possibly with promotion
2307 DisambiguateClosure cl;
2308 int skip = 0; char c;
2310 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2312 /* remove the =() */
2313 if (yytext[2] == '=' && yytext[3] != NULLCHAR) skip++;
2314 if (yytext[2+skip] == '(') skip++;
2316 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2318 cl.ffIn = yytext[0] - AAA;
2319 cl.rtIn = yytext[1] - ONE;
2320 cl.ftIn = yytext[0] - AAA;
2321 c = cl.promoCharIn = yytext[2+skip];
2323 /* [HGM] do not allow values beyond board size */
2324 if(cl.rtIn >= BOARD_HEIGHT ||
2326 cl.ffIn >= BOARD_RGHT ||
2327 cl.ftIn < BOARD_LEFT )
2330 if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2334 Disambiguate(boards[yyboardindex],
2335 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2337 currentMoveString[0] = cl.ff + AAA;
2338 currentMoveString[1] = cl.rf + ONE;
2339 currentMoveString[2] = cl.ft + AAA;
2340 currentMoveString[3] = cl.rt + ONE;
2341 currentMoveString[4] = cl.promoChar;
2342 currentMoveString[5] = NULLCHAR;
2344 return (int) cl.kind;
2351 * Pawn capture, possibly with promotion, possibly ambiguous
2353 DisambiguateClosure cl;
2354 int skip1 = 0, skip2 = 0; char c;
2356 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2358 /* remove trailing ep or e.p. (nonstandard PGN) */
2359 if (yytext[yyleng-1] == 'p') {
2361 yytext[yyleng] = NULLCHAR;
2362 } else if (yytext[yyleng-1] == '.') {
2364 yytext[yyleng] = NULLCHAR;
2367 /* remove the [xX:-] and =() */
2368 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2369 || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2370 if (yytext[2+skip1] == '=' && yytext[3+skip1] != NULLCHAR) skip2++;
2371 if (yytext[2+skip1+skip2] == '(') skip2++;
2373 cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2375 cl.ffIn = yytext[0] - AAA;
2377 cl.ftIn = yytext[1+skip1] - AAA;
2378 c = cl.promoCharIn = yytext[2+skip1+skip2];
2380 /* [HGM] do not allow values beyond board size */
2381 if(cl.ffIn >= BOARD_RGHT ||
2382 cl.ffIn < BOARD_LEFT ||
2383 cl.ftIn >= BOARD_RGHT ||
2384 cl.ftIn < BOARD_LEFT )
2387 if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2390 Disambiguate(boards[yyboardindex],
2391 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2393 currentMoveString[0] = cl.ff + AAA;
2394 currentMoveString[1] = cl.rf + ONE;
2395 currentMoveString[2] = cl.ft + AAA;
2396 currentMoveString[3] = cl.rt + ONE;
2397 currentMoveString[4] = cl.promoChar;
2398 currentMoveString[5] = NULLCHAR;
2400 return (int) cl.kind;
2407 * unambiguously abbreviated Pawn capture, possibly with promotion
2410 ChessMove result; char c;
2412 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2414 /* remove trailing ep or e.p. (nonstandard PGN) */
2415 if (yytext[yyleng-1] == 'p') {
2417 yytext[yyleng] = NULLCHAR;
2418 } else if (yytext[yyleng-1] == '.') {
2420 yytext[yyleng] = NULLCHAR;
2423 /* remove the [xX:-] */
2424 if ((yytext[1] == 'x') || (yytext[1] == 'X')
2425 || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2427 currentMoveString[0] = yytext[0];
2428 currentMoveString[2] = yytext[1+skip];
2429 currentMoveString[3] = yytext[2+skip];
2431 /* [HGM] do not allow values beyond board size */
2432 if(currentMoveString[0] - AAA >= BOARD_RGHT ||
2433 currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2434 currentMoveString[3] - ONE < 0 ||
2435 currentMoveString[2] - AAA >= BOARD_RGHT ||
2436 currentMoveString[0] - AAA < BOARD_LEFT ||
2437 currentMoveString[2] - AAA < BOARD_LEFT )
2440 if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
2441 currentMoveString[0] != currentMoveString[2] ) {
2442 currentMoveString[1] = yytext[2+skip];
2444 if (WhiteOnMove(yyboardindex)) {
2445 if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
2446 currentMoveString[1] = yytext[2+skip] - 1;
2448 currentMoveString[1] = currentMoveString[3] + 1;
2449 if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
2451 if (yyleng-skip > 3) {
2452 if (yytext[yyleng-1] == ')')
2453 c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2455 c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2456 currentMoveString[5] = NULLCHAR;
2457 if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2460 currentMoveString[4] = NULLCHAR;
2463 result = LegalityTest(boards[yyboardindex],
2464 PosFlags(yyboardindex), EP_UNKNOWN,
2465 initialRights, /* [HGM] assume all castlings allowed */
2466 currentMoveString[1] - ONE,
2467 currentMoveString[0] - AAA,
2468 currentMoveString[3] - ONE,
2469 currentMoveString[2] - AAA,
2470 currentMoveString[4]);
2472 if (currentMoveString[4] == NULLCHAR &&
2473 (result == WhitePromotionQueen || result == BlackPromotionQueen ||
2474 result == WhitePromotionKnight || result == BlackPromotionKnight)) {
2475 currentMoveString[4] = PieceToChar(BlackQueen);
2476 // [HGM] shatranj: take care of variants without Queen
2477 if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
2478 currentMoveString[4] = PieceToChar(BlackFerz);
2479 if(gameInfo.variant == VariantGreat)
2480 currentMoveString[4] = PieceToChar(BlackMan);
2481 currentMoveString[5] = NULLCHAR;
2484 if (result != IllegalMove) return (int) result;
2486 /* Special case: improperly written en passant capture */
2487 if (WhiteOnMove(yyboardindex)) {
2488 if (currentMoveString[3] == '5') {
2489 currentMoveString[1] = '5';
2490 currentMoveString[3] = '6';
2492 return (int) IllegalMove;
2495 if (currentMoveString[3] == '4') {
2496 currentMoveString[1] = '4';
2497 currentMoveString[3] = '3';
2499 return (int) IllegalMove;
2503 result = LegalityTest(boards[yyboardindex],
2504 PosFlags(yyboardindex), EP_UNKNOWN,
2505 initialRights, /* [HGM] assume all castlings allowed */
2506 currentMoveString[1] - ONE,
2507 currentMoveString[0] - AAA,
2508 currentMoveString[3] - ONE,
2509 currentMoveString[2] - AAA,
2510 currentMoveString[4]);
2512 if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2513 return (int) result;
2515 return (int) IllegalMove;
2522 * piece move, possibly ambiguous
2524 DisambiguateClosure cl;
2525 int skip = 0, skip2 = 0, promoted = 0;
2527 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2529 if(yytext[0] == '+') promoted = skip = skip2 = 1;
2531 /* remove the [xX:-] */
2532 if ((yytext[1+skip] == 'x') || (yytext[1+skip] == 'X')
2533 || (yytext[1+skip] == ':') || (yytext[1+skip] == '-')) skip++;
2535 if (WhiteOnMove(yyboardindex)) {
2536 cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2538 cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2540 if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2544 cl.rtIn = yytext[2+skip] - ONE;
2545 cl.ftIn = yytext[1+skip] - AAA;
2546 cl.promoCharIn = NULLCHAR;
2548 if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */
2549 cl.promoCharIn = yytext[yyleng-1];
2551 if (appData.debugMode) {
2552 fprintf(debugFP, "Parser Qa1: yyleng=%d, %d(%d,%d)-(%d,%d) = %d (%c)\n",
2554 cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');
2557 /* [HGM] but do not allow values beyond board size */
2558 if(cl.rtIn >= BOARD_HEIGHT ||
2560 cl.ftIn >= BOARD_RGHT ||
2561 cl.ftIn < BOARD_LEFT )
2564 Disambiguate(boards[yyboardindex],
2565 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2567 currentMoveString[0] = cl.ff + AAA;
2568 currentMoveString[1] = cl.rf + ONE;
2569 currentMoveString[2] = cl.ft + AAA;
2570 currentMoveString[3] = cl.rt + ONE;
2571 currentMoveString[4] = cl.promoChar;
2572 currentMoveString[5] = NULLCHAR;
2574 return (int) cl.kind;
2581 * piece move with rank or file disambiguator
2583 DisambiguateClosure cl;
2584 int skip = 0, skip2 = 0; int promoted=0;
2586 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2588 if(yytext[0]=='+') promoted = skip = skip2 = 1;
2590 /* remove the [xX:-] */
2591 if ((yytext[2+skip] == 'x') || (yytext[2+skip] == 'X')
2592 || (yytext[2+skip] == ':') || (yytext[2+skip] == '-')) skip++;
2594 if (WhiteOnMove(yyboardindex)) {
2595 cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2597 cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2599 if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2601 if (isalpha(yytext[1+skip2])) {
2603 cl.ffIn = yytext[1+skip2] - AAA;
2605 if(cl.ffIn >= BOARD_RGHT ||
2606 cl.ffIn < BOARD_LEFT ) return 0;
2608 cl.rfIn = yytext[1+skip2] - ONE;
2610 if(cl.rfIn >= BOARD_HEIGHT ||
2611 cl.rfIn < 0) return 0;
2613 cl.rtIn = yytext[3+skip] - ONE;
2614 cl.ftIn = yytext[2+skip] - AAA;
2615 cl.promoCharIn = NULLCHAR;
2617 if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */
2618 cl.promoCharIn = yytext[yyleng-1];
2620 /* [HGM] do not allow values beyond board size */
2621 if(cl.rtIn >= BOARD_HEIGHT ||
2623 cl.ftIn >= BOARD_RGHT ||
2624 cl.ftIn < BOARD_LEFT )
2627 Disambiguate(boards[yyboardindex],
2628 PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2630 currentMoveString[0] = cl.ff + AAA;
2631 currentMoveString[1] = cl.rf + ONE;
2632 currentMoveString[2] = cl.ft + AAA;
2633 currentMoveString[3] = cl.rt + ONE;
2634 currentMoveString[4] = cl.promoChar;
2635 currentMoveString[5] = NULLCHAR;
2637 return (int) cl.kind;
2645 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2647 /* [HGM] all squares referenced to board edges in stead of absolute */
2648 if (WhiteOnMove(yyboardindex)) {
2649 if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2650 /* ICS wild castling */
2652 ff = (BOARD_WIDTH-1)>>1;
2657 ff = BOARD_WIDTH>>1;
2662 if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2663 /* ICS wild castling */
2664 rf = BOARD_HEIGHT-1;
2665 ff = (BOARD_WIDTH-1)>>1;
2666 rt = BOARD_HEIGHT-1;
2669 rf = BOARD_HEIGHT-1;
2670 ff = BOARD_WIDTH>>1;
2671 rt = BOARD_HEIGHT-1;
2675 if(gameInfo.variant == VariantFischeRandom) {
2676 if (WhiteOnMove(yyboardindex)) {
2677 ff = initialRights[2];
2678 ft = initialRights[1];
2680 ff = initialRights[5];
2681 ft = initialRights[4];
2683 fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);
2684 if(ff < 0 || ft < 0) return 0;
2686 sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2687 if (appData.debugMode) {
2688 fprintf(debugFP, "long castling %d %d\n", ff, ft);
2690 return (int) LegalityTest(boards[yyboardindex],
2691 PosFlags(yyboardindex), EP_UNKNOWN,
2692 castlingRights[yyboardindex], /* [HGM] use true castling rights */
2693 rf, ff, rt, ft, NULLCHAR);
2701 if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2703 if (WhiteOnMove(yyboardindex)) {
2704 if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2705 /* ICS wild castling */
2707 ff = (BOARD_WIDTH-1)>>1;
2712 ff = BOARD_WIDTH>>1;
2717 if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2718 /* ICS wild castling */
2719 rf = BOARD_HEIGHT-1;
2720 ff = (BOARD_WIDTH-1)>>1;
2721 rt = BOARD_HEIGHT-1;
2724 rf = BOARD_HEIGHT-1;
2725 ff = BOARD_WIDTH>>1;
2726 rt = BOARD_HEIGHT-1;
2730 if(gameInfo.variant == VariantFischeRandom) {
2731 if (WhiteOnMove(yyboardindex)) {
2732 ff = initialRights[2];
2733 ft = initialRights[0];
2735 ff = initialRights[5];
2736 ft = initialRights[3];
2738 if (appData.debugMode) {
2739 fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);
2741 if(ff < 0 || ft < 0) return 0;
2743 sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2744 if (appData.debugMode) {
2745 fprintf(debugFP, "short castling %d %d\n", ff, ft);
2748 return (int) LegalityTest(boards[yyboardindex],
2749 PosFlags(yyboardindex), EP_UNKNOWN,
2750 castlingRights[yyboardindex], /* [HGM] use true castling rights */
2751 rf, ff, rt, ft, NULLCHAR);
2757 /* Bughouse piece drop. No legality checking for now. */
2758 currentMoveString[1] = '@';
2759 currentMoveString[2] = yytext[2];
2760 currentMoveString[3] = yytext[3];
2761 currentMoveString[4] = NULLCHAR;
2763 if (appData.debugMode) {
2764 fprintf(debugFP, "Drop: %s\n", currentMoveString);
2766 /* [HGM] do not allow values beyond board size */
2767 if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2768 currentMoveString[2] - AAA >= BOARD_WIDTH )
2771 if (WhiteOnMove(yyboardindex)) {
2772 currentMoveString[0] = ToUpper(yytext[0]);
2773 return (int) WhiteDrop;
2775 currentMoveString[0] = ToLower(yytext[0]);
2776 return (int) BlackDrop;
2783 if (WhiteOnMove(yyboardindex))
2784 return (int) BlackWins;
2786 return (int) WhiteWins;
2792 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2798 return (int) GameUnfinished;
2804 return (int) GameIsDrawn;
2810 return (int) GameIsDrawn;
2816 if (WhiteOnMove(yyboardindex))
2817 return (int) BlackWins;
2819 return (int) WhiteWins;
2825 if (WhiteOnMove(yyboardindex))
2826 return (int) BlackWins;
2828 return (int) WhiteWins;
2834 return (int) GameIsDrawn;
2840 return (int) GameIsDrawn;
2846 return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2852 return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2858 return (int) WhiteWins;
2864 return (int) BlackWins;
2870 return (int) GameIsDrawn;
2876 return (int) GameUnfinished;
2883 if ((yyleng == 1) && (yytext[0] == '1'))
2884 return (int) MoveNumberOne;
2890 /* elapsed time indication, e.g. (0:12) or {10:21.071} */
2891 return (int) ElapsedTime;
2897 /* position diagram enclosed in [-- --] */
2898 return (int) PositionDiagram;
2902 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2903 yy_c_buf_p = yy_cp -= 1;
2904 YY_DO_BEFORE_ACTION; /* set up yytext again */
2907 /* position diagram enclosed in {-- --} */
2908 return (int) PositionDiagram;
2914 return (int) PGNTag;
2920 return (int) GNUChessGame;
2924 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2925 yy_c_buf_p = yy_cp -= 1;
2926 YY_DO_BEFORE_ACTION; /* set up yytext again */
2929 return (int) XBoardGame;
2934 { /* numeric annotation glyph */
2940 { /* anything in {} */
2941 return (int) Comment;
2945 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2946 yy_c_buf_p = yy_cp -= 1;
2947 YY_DO_BEFORE_ACTION; /* set up yytext again */
2949 { /* ; to end of line */
2950 return (int) Comment;
2955 { /* anything in [] */
2956 return (int) Comment;
2962 return (int) Comment;
2967 { /* >=2 chars in () */
2968 return (int) Comment;
2974 /* Skip mail headers */
2980 /* Skip random words */
2986 /* Skip everything else */
2993 case YY_STATE_EOF(INITIAL):
2996 case YY_END_OF_BUFFER:
2998 /* Amount of text matched not including the EOB char. */
2999 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
3001 /* Undo the effects of YY_DO_BEFORE_ACTION. */
3002 *yy_cp = yy_hold_char;
3003 YY_RESTORE_YY_MORE_OFFSET
3005 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
3007 /* We're scanning a new file or input source. It's
3008 * possible that this happened because the user
3009 * just pointed yyin at a new source and called
3010 * yylex(). If so, then we have to assure
3011 * consistency between yy_current_buffer and our
3012 * globals. Here is the right place to do so, because
3013 * this is the first action (other than possibly a
3014 * back-up) that will match for the new input source.
3016 yy_n_chars = yy_current_buffer->yy_n_chars;
3017 yy_current_buffer->yy_input_file = yyin;
3018 yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
3021 /* Note that here we test for yy_c_buf_p "<=" to the position
3022 * of the first EOB in the buffer, since yy_c_buf_p will
3023 * already have been incremented past the NUL character
3024 * (since all states make transitions on EOB to the
3025 * end-of-buffer state). Contrast this with the test
3028 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3029 { /* This was really a NUL. */
3030 yy_state_type yy_next_state;
3032 yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
3034 yy_current_state = yy_get_previous_state();
3036 /* Okay, we're now positioned to make the NUL
3037 * transition. We couldn't have
3038 * yy_get_previous_state() go ahead and do it
3039 * for us because it doesn't know how to deal
3040 * with the possibility of jamming (and we don't
3041 * want to build jamming into it because then it
3042 * will run more slowly).
3045 yy_next_state = yy_try_NUL_trans( yy_current_state );
3047 yy_bp = yytext_ptr + YY_MORE_ADJ;
3049 if ( yy_next_state )
3051 /* Consume the NUL. */
3052 yy_cp = ++yy_c_buf_p;
3053 yy_current_state = yy_next_state;
3060 goto yy_find_action;
3064 else switch ( yy_get_next_buffer() )
3066 case EOB_ACT_END_OF_FILE:
3068 yy_did_buffer_switch_on_eof = 0;
3072 /* Note: because we've taken care in
3073 * yy_get_next_buffer() to have set up
3074 * yytext, we can now set up
3075 * yy_c_buf_p so that if some total
3076 * hoser (like flex itself) wants to
3077 * call the scanner after we return the
3078 * YY_NULL, it'll still work - another
3079 * YY_NULL will get returned.
3081 yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
3083 yy_act = YY_STATE_EOF(YY_START);
3089 if ( ! yy_did_buffer_switch_on_eof )
3095 case EOB_ACT_CONTINUE_SCAN:
3097 yytext_ptr + yy_amount_of_matched_text;
3099 yy_current_state = yy_get_previous_state();
3102 yy_bp = yytext_ptr + YY_MORE_ADJ;
3105 case EOB_ACT_LAST_MATCH:
3107 &yy_current_buffer->yy_ch_buf[yy_n_chars];
3109 yy_current_state = yy_get_previous_state();
3112 yy_bp = yytext_ptr + YY_MORE_ADJ;
3113 goto yy_find_action;
3120 "fatal flex scanner internal error--no action found" );
3121 } /* end of action switch */
3122 } /* end of scanning one token */
3123 } /* end of yylex */
3126 /* yy_get_next_buffer - try to read in a new buffer
3128 * Returns a code representing an action:
3129 * EOB_ACT_LAST_MATCH -
3130 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3131 * EOB_ACT_END_OF_FILE - end of file
3134 static int yy_get_next_buffer()
3136 register char *dest = yy_current_buffer->yy_ch_buf;
3137 register char *source = yytext_ptr;
3138 register int number_to_move, i;
3141 if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
3143 "fatal flex scanner internal error--end of buffer missed" );
3145 if ( yy_current_buffer->yy_fill_buffer == 0 )
3146 { /* Don't try to fill the buffer, so this is an EOF. */
3147 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
3149 /* We matched a single character, the EOB, so
3150 * treat this as a final EOF.
3152 return EOB_ACT_END_OF_FILE;
3157 /* We matched some text prior to the EOB, first
3160 return EOB_ACT_LAST_MATCH;
3164 /* Try to read more data. */
3166 /* First move last chars to start of buffer. */
3167 number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
3169 for ( i = 0; i < number_to_move; ++i )
3170 *(dest++) = *(source++);
3172 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3173 /* don't do the read, it's not guaranteed to return an EOF,
3176 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
3181 yy_current_buffer->yy_buf_size - number_to_move - 1;
3183 while ( num_to_read <= 0 )
3184 { /* Not enough room in the buffer - grow it. */
3185 #ifdef YY_USES_REJECT
3187 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3190 /* just a shorter name for the current buffer */
3191 YY_BUFFER_STATE b = yy_current_buffer;
3193 int yy_c_buf_p_offset =
3194 (int) (yy_c_buf_p - b->yy_ch_buf);
3196 if ( b->yy_is_our_buffer )
3198 int new_size = b->yy_buf_size * 2;
3200 if ( new_size <= 0 )
3201 b->yy_buf_size += b->yy_buf_size / 8;
3203 b->yy_buf_size *= 2;
3205 b->yy_ch_buf = (char *)
3206 /* Include room in for 2 EOB chars. */
3207 yy_flex_realloc( (void *) b->yy_ch_buf,
3208 b->yy_buf_size + 2 );
3211 /* Can't grow it, we don't own it. */
3214 if ( ! b->yy_ch_buf )
3216 "fatal error - scanner input buffer overflow" );
3218 yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
3220 num_to_read = yy_current_buffer->yy_buf_size -
3225 if ( num_to_read > YY_READ_BUF_SIZE )
3226 num_to_read = YY_READ_BUF_SIZE;
3228 /* Read in more data. */
3229 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
3230 yy_n_chars, num_to_read );
3232 yy_current_buffer->yy_n_chars = yy_n_chars;
3235 if ( yy_n_chars == 0 )
3237 if ( number_to_move == YY_MORE_ADJ )
3239 ret_val = EOB_ACT_END_OF_FILE;
3245 ret_val = EOB_ACT_LAST_MATCH;
3246 yy_current_buffer->yy_buffer_status =
3247 YY_BUFFER_EOF_PENDING;
3252 ret_val = EOB_ACT_CONTINUE_SCAN;
3254 yy_n_chars += number_to_move;
3255 yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3256 yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3258 yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3264 /* yy_get_previous_state - get the state just before the EOB char was reached */
3266 static yy_state_type yy_get_previous_state()
3268 register yy_state_type yy_current_state;
3269 register char *yy_cp;
3271 yy_current_state = yy_start;
3272 yy_current_state += YY_AT_BOL();
3273 yy_state_ptr = yy_state_buf;
3274 *yy_state_ptr++ = yy_current_state;
3276 for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3278 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3279 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3281 yy_current_state = (int) yy_def[yy_current_state];
3282 if ( yy_current_state >= 697 )
3283 yy_c = yy_meta[(unsigned int) yy_c];
3285 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3286 *yy_state_ptr++ = yy_current_state;
3289 return yy_current_state;
3293 /* yy_try_NUL_trans - try to make a transition on the NUL character
3296 * next_state = yy_try_NUL_trans( current_state );
3299 #ifdef YY_USE_PROTOS
3300 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3302 static yy_state_type yy_try_NUL_trans( yy_current_state )
3303 yy_state_type yy_current_state;
3306 register int yy_is_jam;
3308 register YY_CHAR yy_c = 1;
3309 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3311 yy_current_state = (int) yy_def[yy_current_state];
3312 if ( yy_current_state >= 697 )
3313 yy_c = yy_meta[(unsigned int) yy_c];
3315 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3316 yy_is_jam = (yy_current_state == 696);
3318 *yy_state_ptr++ = yy_current_state;
3320 return yy_is_jam ? 0 : yy_current_state;
3325 #ifdef YY_USE_PROTOS
3326 static void yyunput( int c, register char *yy_bp )
3328 static void yyunput( c, yy_bp )
3330 register char *yy_bp;
3333 register char *yy_cp = yy_c_buf_p;
3335 /* undo effects of setting up yytext */
3336 *yy_cp = yy_hold_char;
3338 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3339 { /* need to shift things up to make room */
3340 /* +2 for EOB chars. */
3341 register int number_to_move = yy_n_chars + 2;
3342 register char *dest = &yy_current_buffer->yy_ch_buf[
3343 yy_current_buffer->yy_buf_size + 2];
3344 register char *source =
3345 &yy_current_buffer->yy_ch_buf[number_to_move];
3347 while ( source > yy_current_buffer->yy_ch_buf )
3348 *--dest = *--source;
3350 yy_cp += (int) (dest - source);
3351 yy_bp += (int) (dest - source);
3352 yy_current_buffer->yy_n_chars =
3353 yy_n_chars = yy_current_buffer->yy_buf_size;
3355 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3356 YY_FATAL_ERROR( "flex scanner push-back overflow" );
3359 *--yy_cp = (char) c;
3363 yy_hold_char = *yy_cp;
3366 #endif /* ifndef YY_NO_UNPUT */
3370 static int yyinput()
3377 *yy_c_buf_p = yy_hold_char;
3379 if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3381 /* yy_c_buf_p now points to the character we want to return.
3382 * If this occurs *before* the EOB characters, then it's a
3383 * valid NUL; if not, then we've hit the end of the buffer.
3385 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3386 /* This was really a NUL. */
3390 { /* need more input */
3391 int offset = yy_c_buf_p - yytext_ptr;
3394 switch ( yy_get_next_buffer() )
3396 case EOB_ACT_LAST_MATCH:
3397 /* This happens because yy_g_n_b()
3398 * sees that we've accumulated a
3399 * token and flags that we need to
3400 * try matching the token before
3401 * proceeding. But for input(),
3402 * there's no matching to consider.
3403 * So convert the EOB_ACT_LAST_MATCH
3404 * to EOB_ACT_END_OF_FILE.
3407 /* Reset buffer status. */
3412 case EOB_ACT_END_OF_FILE:
3417 if ( ! yy_did_buffer_switch_on_eof )
3426 case EOB_ACT_CONTINUE_SCAN:
3427 yy_c_buf_p = yytext_ptr + offset;
3433 c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
3434 *yy_c_buf_p = '\0'; /* preserve yytext */
3435 yy_hold_char = *++yy_c_buf_p;
3437 yy_current_buffer->yy_at_bol = (c == '\n');
3443 #ifdef YY_USE_PROTOS
3444 void yyrestart( FILE *input_file )
3446 void yyrestart( input_file )
3450 if ( ! yy_current_buffer )
3451 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3453 yy_init_buffer( yy_current_buffer, input_file );
3454 yy_load_buffer_state();
3458 #ifdef YY_USE_PROTOS
3459 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3461 void yy_switch_to_buffer( new_buffer )
3462 YY_BUFFER_STATE new_buffer;
3465 if ( yy_current_buffer == new_buffer )
3468 if ( yy_current_buffer )
3470 /* Flush out information for old buffer. */
3471 *yy_c_buf_p = yy_hold_char;
3472 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3473 yy_current_buffer->yy_n_chars = yy_n_chars;
3476 yy_current_buffer = new_buffer;
3477 yy_load_buffer_state();
3479 /* We don't actually know whether we did this switch during
3480 * EOF (yywrap()) processing, but the only time this flag
3481 * is looked at is after yywrap() is called, so it's safe
3482 * to go ahead and always set it.
3484 yy_did_buffer_switch_on_eof = 1;
3488 #ifdef YY_USE_PROTOS
3489 void yy_load_buffer_state( void )
3491 void yy_load_buffer_state()
3494 yy_n_chars = yy_current_buffer->yy_n_chars;
3495 yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3496 yyin = yy_current_buffer->yy_input_file;
3497 yy_hold_char = *yy_c_buf_p;
3501 #ifdef YY_USE_PROTOS
3502 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3504 YY_BUFFER_STATE yy_create_buffer( file, size )
3511 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3513 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3515 b->yy_buf_size = size;
3517 /* yy_ch_buf has to be 2 characters longer than the size given because
3518 * we need to put in 2 end-of-buffer characters.
3520 b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3521 if ( ! b->yy_ch_buf )
3522 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3524 b->yy_is_our_buffer = 1;
3526 yy_init_buffer( b, file );
3532 #ifdef YY_USE_PROTOS
3533 void yy_delete_buffer( YY_BUFFER_STATE b )
3535 void yy_delete_buffer( b )
3542 if ( b == yy_current_buffer )
3543 yy_current_buffer = (YY_BUFFER_STATE) 0;
3545 if ( b->yy_is_our_buffer )
3546 yy_flex_free( (void *) b->yy_ch_buf );
3548 yy_flex_free( (void *) b );
3555 #ifndef YY_ALWAYS_INTERACTIVE
3556 #ifndef YY_NEVER_INTERACTIVE
3557 extern int isatty YY_PROTO(( int ));
3562 #ifdef YY_USE_PROTOS
3563 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3565 void yy_init_buffer( b, file )
3572 yy_flush_buffer( b );
3574 b->yy_input_file = file;
3575 b->yy_fill_buffer = 1;
3577 #if YY_ALWAYS_INTERACTIVE
3578 b->yy_is_interactive = 1;
3580 #if YY_NEVER_INTERACTIVE
3581 b->yy_is_interactive = 0;
3583 b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3589 #ifdef YY_USE_PROTOS
3590 void yy_flush_buffer( YY_BUFFER_STATE b )
3592 void yy_flush_buffer( b )
3602 /* We always need two end-of-buffer characters. The first causes
3603 * a transition to the end-of-buffer state. The second causes
3604 * a jam in that state.
3606 b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3607 b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3609 b->yy_buf_pos = &b->yy_ch_buf[0];
3612 b->yy_buffer_status = YY_BUFFER_NEW;
3614 if ( b == yy_current_buffer )
3615 yy_load_buffer_state();
3619 #ifndef YY_NO_SCAN_BUFFER
3620 #ifdef YY_USE_PROTOS
3621 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3623 YY_BUFFER_STATE yy_scan_buffer( base, size )
3631 base[size-2] != YY_END_OF_BUFFER_CHAR ||
3632 base[size-1] != YY_END_OF_BUFFER_CHAR )
3633 /* They forgot to leave room for the EOB's. */
3636 b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3638 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3640 b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
3641 b->yy_buf_pos = b->yy_ch_buf = base;
3642 b->yy_is_our_buffer = 0;
3643 b->yy_input_file = 0;
3644 b->yy_n_chars = b->yy_buf_size;
3645 b->yy_is_interactive = 0;
3647 b->yy_fill_buffer = 0;
3648 b->yy_buffer_status = YY_BUFFER_NEW;
3650 yy_switch_to_buffer( b );
3657 #ifndef YY_NO_SCAN_STRING
3658 #ifdef YY_USE_PROTOS
3659 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3661 YY_BUFFER_STATE yy_scan_string( yy_str )
3662 yyconst char *yy_str;
3666 for ( len = 0; yy_str[len]; ++len )
3669 return yy_scan_bytes( yy_str, len );
3674 #ifndef YY_NO_SCAN_BYTES
3675 #ifdef YY_USE_PROTOS
3676 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3678 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3679 yyconst char *bytes;
3688 /* Get memory for full buffer, including space for trailing EOB's. */
3690 buf = (char *) yy_flex_alloc( n );
3692 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3694 for ( i = 0; i < len; ++i )
3697 buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3699 b = yy_scan_buffer( buf, n );
3701 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3703 /* It's okay to grow etc. this buffer, and we should throw it
3704 * away when we're done.
3706 b->yy_is_our_buffer = 1;
3713 #ifndef YY_NO_PUSH_STATE
3714 #ifdef YY_USE_PROTOS
3715 static void yy_push_state( int new_state )
3717 static void yy_push_state( new_state )
3721 if ( yy_start_stack_ptr >= yy_start_stack_depth )
3725 yy_start_stack_depth += YY_START_STACK_INCR;
3726 new_size = yy_start_stack_depth * sizeof( int );
3728 if ( ! yy_start_stack )
3729 yy_start_stack = (int *) yy_flex_alloc( new_size );
3732 yy_start_stack = (int *) yy_flex_realloc(
3733 (void *) yy_start_stack, new_size );
3735 if ( ! yy_start_stack )
3737 "out of memory expanding start-condition stack" );
3740 yy_start_stack[yy_start_stack_ptr++] = YY_START;
3747 #ifndef YY_NO_POP_STATE
3748 static void yy_pop_state()
3750 if ( --yy_start_stack_ptr < 0 )
3751 YY_FATAL_ERROR( "start-condition stack underflow" );
3753 BEGIN(yy_start_stack[yy_start_stack_ptr]);
3758 #ifndef YY_NO_TOP_STATE
3759 static int yy_top_state()
3761 return yy_start_stack[yy_start_stack_ptr - 1];
3765 #ifndef YY_EXIT_FAILURE
3766 #define YY_EXIT_FAILURE 2
3769 #ifdef YY_USE_PROTOS
3770 static void yy_fatal_error( yyconst char msg[] )
3772 static void yy_fatal_error( msg )
3776 (void) fprintf( stderr, "%s\n", msg );
3777 exit( YY_EXIT_FAILURE );
3782 /* Redefine yyless() so it works in section 3 code. */
3788 /* Undo effects of setting up yytext. */ \
3789 yytext[yyleng] = yy_hold_char; \
3790 yy_c_buf_p = yytext + n; \
3791 yy_hold_char = *yy_c_buf_p; \
3792 *yy_c_buf_p = '\0'; \
3798 /* Internal utility routines. */
3801 #ifdef YY_USE_PROTOS
3802 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3804 static void yy_flex_strncpy( s1, s2, n )
3811 for ( i = 0; i < n; ++i )
3816 #ifdef YY_NEED_STRLEN
3817 #ifdef YY_USE_PROTOS
3818 static int yy_flex_strlen( yyconst char *s )
3820 static int yy_flex_strlen( s )
3825 for ( n = 0; s[n]; ++n )
3833 #ifdef YY_USE_PROTOS
3834 static void *yy_flex_alloc( yy_size_t size )
3836 static void *yy_flex_alloc( size )
3840 return (void *) malloc( size );
3843 #ifdef YY_USE_PROTOS
3844 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3846 static void *yy_flex_realloc( ptr, size )
3851 /* The cast to (char *) in the following accommodates both
3852 * implementations that use char* generic pointers, and those
3853 * that use void* generic pointers. It works with the latter
3854 * because both ANSI C and C++ allow castless assignment from
3855 * any pointer type to void*, and deal with argument conversions
3856 * as though doing an assignment.
3858 return (void *) realloc( (char *) ptr, size );
3861 #ifdef YY_USE_PROTOS
3862 static void yy_flex_free( void *ptr )
3864 static void yy_flex_free( ptr )
3881 static char *StringToLex;
3883 #ifndef FLEX_SCANNER
3890 if (StringToLex != NULL) {
3892 if (ret == NULLCHAR)
3896 } else if (unputCount > 0) {
3897 ret = unputBuffer[--unputCount];
3909 * Return offset of next pattern within current file
3913 int offset = ftell(lexFP) - unputCount;
3921 static void output(ch)
3924 fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
3928 static void unput(ch)
3931 if (ch == 0) return;
3932 if (StringToLex != NULL) {
3935 if (unputCount >= UNPUT_BUF_SIZE)
3936 fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
3938 unputBuffer[unputCount++] = ch;
3942 /* Get ready to lex from a new file. Kludge below sticks
3943 an artificial newline at the front of the file, which the
3944 above grammar ignores, but which makes ^ at start of pattern
3945 match at the real start of the file.
3953 unput('\n'); /* kludge */
3956 /* Get ready to lex from a string. ^ at start of pattern WON'T
3957 match at the start of the string!
3966 #endif /*!FLEX_SCANNER*/
3969 void my_yy_input(buf, result, max_size)
3976 if (StringToLex != NULL) {
3978 while (*StringToLex != NULLCHAR) {
3979 *buf++ = *StringToLex++;
3985 count = fread(buf, 1, max_size, yyin);
3995 static YY_BUFFER_STATE my_file_buffer = NULL;
3998 Return offset of next pattern in the current file.
4002 int pos = yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf;
4004 return(ftell(YY_CURRENT_BUFFER->yy_input_file) -
4012 if (my_file_buffer != NULL)
4013 yy_delete_buffer(my_file_buffer);
4015 my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4016 yy_switch_to_buffer(my_file_buffer);
4022 if (my_file_buffer != NULL)
4023 yy_delete_buffer(my_file_buffer);
4025 my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
4026 yy_switch_to_buffer(my_file_buffer);
4028 #endif /*FLEX_SCANNER*/
4035 /* Parse a move from the given string s */
4036 /* ^ at start of pattern WON'T work here unless using flex */
4037 ChessMove yylexstr(boardIndex, s)
4042 char *oldStringToLex;
4044 YY_BUFFER_STATE buffer, oldBuffer;
4047 yyboardindex = boardIndex;
4048 oldStringToLex = StringToLex;
4051 buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4052 oldBuffer = YY_CURRENT_BUFFER;
4053 yy_switch_to_buffer(buffer);
4054 #endif /*FLEX_SCANNER*/
4056 ret = (ChessMove) yylex();
4059 if (oldBuffer != NULL)
4060 yy_switch_to_buffer(oldBuffer);
4061 yy_delete_buffer(buffer);
4062 #endif /*FLEX_SCANNER*/
4063 StringToLex = oldStringToLex;