Coverage Report

Created: 2026-05-30 06:40

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/sudo/plugins/sudoers/toke.c
Line
Count
Source
1
#include <config.h>
2
3
#line 3 "toke.c"
4
5
#define  YY_INT_ALIGNED short int
6
7
/* A lexical scanner generated by flex */
8
9
0
#define yy_create_buffer sudoers_create_buffer
10
0
#define yy_delete_buffer sudoers_delete_buffer
11
0
#define yy_scan_buffer sudoers_scan_buffer
12
#define yy_scan_string sudoers_scan_string
13
0
#define yy_scan_bytes sudoers_scan_bytes
14
0
#define yy_init_buffer sudoers_init_buffer
15
0
#define yy_flush_buffer sudoers_flush_buffer
16
0
#define yy_load_buffer_state sudoers_load_buffer_state
17
0
#define yy_switch_to_buffer sudoers_switch_to_buffer
18
#define yypush_buffer_state sudoerspush_buffer_state
19
0
#define yypop_buffer_state sudoerspop_buffer_state
20
0
#define yyensure_buffer_stack sudoersensure_buffer_stack
21
0
#define yy_flex_debug sudoers_flex_debug
22
0
#define yyin sudoersin
23
0
#define yyleng sudoersleng
24
#define yylex sudoerslex
25
0
#define yylineno sudoerslineno
26
0
#define yyout sudoersout
27
0
#define yyrestart sudoersrestart
28
0
#define yytext sudoerstext
29
0
#define yywrap sudoerswrap
30
0
#define yyalloc sudoersalloc
31
0
#define yyrealloc sudoersrealloc
32
0
#define yyfree sudoersfree
33
34
#define FLEX_SCANNER
35
#define YY_FLEX_MAJOR_VERSION 2
36
#define YY_FLEX_MINOR_VERSION 6
37
#define YY_FLEX_SUBMINOR_VERSION 4
38
#if YY_FLEX_SUBMINOR_VERSION > 0
39
#define FLEX_BETA
40
#endif
41
42
#ifdef yy_create_buffer
43
#define sudoers_create_buffer_ALREADY_DEFINED
44
#else
45
#define yy_create_buffer sudoers_create_buffer
46
#endif
47
48
#ifdef yy_delete_buffer
49
#define sudoers_delete_buffer_ALREADY_DEFINED
50
#else
51
#define yy_delete_buffer sudoers_delete_buffer
52
#endif
53
54
#ifdef yy_scan_buffer
55
#define sudoers_scan_buffer_ALREADY_DEFINED
56
#else
57
#define yy_scan_buffer sudoers_scan_buffer
58
#endif
59
60
#ifdef yy_scan_string
61
#define sudoers_scan_string_ALREADY_DEFINED
62
#else
63
#define yy_scan_string sudoers_scan_string
64
#endif
65
66
#ifdef yy_scan_bytes
67
#define sudoers_scan_bytes_ALREADY_DEFINED
68
#else
69
#define yy_scan_bytes sudoers_scan_bytes
70
#endif
71
72
#ifdef yy_init_buffer
73
#define sudoers_init_buffer_ALREADY_DEFINED
74
#else
75
#define yy_init_buffer sudoers_init_buffer
76
#endif
77
78
#ifdef yy_flush_buffer
79
#define sudoers_flush_buffer_ALREADY_DEFINED
80
#else
81
#define yy_flush_buffer sudoers_flush_buffer
82
#endif
83
84
#ifdef yy_load_buffer_state
85
#define sudoers_load_buffer_state_ALREADY_DEFINED
86
#else
87
#define yy_load_buffer_state sudoers_load_buffer_state
88
#endif
89
90
#ifdef yy_switch_to_buffer
91
#define sudoers_switch_to_buffer_ALREADY_DEFINED
92
#else
93
#define yy_switch_to_buffer sudoers_switch_to_buffer
94
#endif
95
96
#ifdef yypush_buffer_state
97
#define sudoerspush_buffer_state_ALREADY_DEFINED
98
#else
99
#define yypush_buffer_state sudoerspush_buffer_state
100
#endif
101
102
#ifdef yypop_buffer_state
103
#define sudoerspop_buffer_state_ALREADY_DEFINED
104
#else
105
#define yypop_buffer_state sudoerspop_buffer_state
106
#endif
107
108
#ifdef yyensure_buffer_stack
109
#define sudoersensure_buffer_stack_ALREADY_DEFINED
110
#else
111
#define yyensure_buffer_stack sudoersensure_buffer_stack
112
#endif
113
114
#ifdef yylex
115
#define sudoerslex_ALREADY_DEFINED
116
#else
117
#define yylex sudoerslex
118
#endif
119
120
#ifdef yyrestart
121
#define sudoersrestart_ALREADY_DEFINED
122
#else
123
#define yyrestart sudoersrestart
124
#endif
125
126
#ifdef yylex_init
127
#define sudoerslex_init_ALREADY_DEFINED
128
#else
129
#define yylex_init sudoerslex_init
130
#endif
131
132
#ifdef yylex_init_extra
133
#define sudoerslex_init_extra_ALREADY_DEFINED
134
#else
135
#define yylex_init_extra sudoerslex_init_extra
136
#endif
137
138
#ifdef yylex_destroy
139
#define sudoerslex_destroy_ALREADY_DEFINED
140
#else
141
#define yylex_destroy sudoerslex_destroy
142
#endif
143
144
#ifdef yyget_debug
145
#define sudoersget_debug_ALREADY_DEFINED
146
#else
147
#define yyget_debug sudoersget_debug
148
#endif
149
150
#ifdef yyset_debug
151
#define sudoersset_debug_ALREADY_DEFINED
152
#else
153
#define yyset_debug sudoersset_debug
154
#endif
155
156
#ifdef yyget_extra
157
#define sudoersget_extra_ALREADY_DEFINED
158
#else
159
#define yyget_extra sudoersget_extra
160
#endif
161
162
#ifdef yyset_extra
163
#define sudoersset_extra_ALREADY_DEFINED
164
#else
165
#define yyset_extra sudoersset_extra
166
#endif
167
168
#ifdef yyget_in
169
#define sudoersget_in_ALREADY_DEFINED
170
#else
171
#define yyget_in sudoersget_in
172
#endif
173
174
#ifdef yyset_in
175
#define sudoersset_in_ALREADY_DEFINED
176
#else
177
#define yyset_in sudoersset_in
178
#endif
179
180
#ifdef yyget_out
181
#define sudoersget_out_ALREADY_DEFINED
182
#else
183
#define yyget_out sudoersget_out
184
#endif
185
186
#ifdef yyset_out
187
#define sudoersset_out_ALREADY_DEFINED
188
#else
189
#define yyset_out sudoersset_out
190
#endif
191
192
#ifdef yyget_leng
193
#define sudoersget_leng_ALREADY_DEFINED
194
#else
195
#define yyget_leng sudoersget_leng
196
#endif
197
198
#ifdef yyget_text
199
#define sudoersget_text_ALREADY_DEFINED
200
#else
201
#define yyget_text sudoersget_text
202
#endif
203
204
#ifdef yyget_lineno
205
#define sudoersget_lineno_ALREADY_DEFINED
206
#else
207
#define yyget_lineno sudoersget_lineno
208
#endif
209
210
#ifdef yyset_lineno
211
#define sudoersset_lineno_ALREADY_DEFINED
212
#else
213
#define yyset_lineno sudoersset_lineno
214
#endif
215
216
#ifdef yywrap
217
#define sudoerswrap_ALREADY_DEFINED
218
#else
219
#define yywrap sudoerswrap
220
#endif
221
222
#ifdef yyalloc
223
#define sudoersalloc_ALREADY_DEFINED
224
#else
225
#define yyalloc sudoersalloc
226
#endif
227
228
#ifdef yyrealloc
229
#define sudoersrealloc_ALREADY_DEFINED
230
#else
231
#define yyrealloc sudoersrealloc
232
#endif
233
234
#ifdef yyfree
235
#define sudoersfree_ALREADY_DEFINED
236
#else
237
#define yyfree sudoersfree
238
#endif
239
240
#ifdef yytext
241
#define sudoerstext_ALREADY_DEFINED
242
#else
243
#define yytext sudoerstext
244
#endif
245
246
#ifdef yyleng
247
#define sudoersleng_ALREADY_DEFINED
248
#else
249
#define yyleng sudoersleng
250
#endif
251
252
#ifdef yyin
253
#define sudoersin_ALREADY_DEFINED
254
#else
255
#define yyin sudoersin
256
#endif
257
258
#ifdef yyout
259
#define sudoersout_ALREADY_DEFINED
260
#else
261
#define yyout sudoersout
262
#endif
263
264
#ifdef yy_flex_debug
265
#define sudoers_flex_debug_ALREADY_DEFINED
266
#else
267
#define yy_flex_debug sudoers_flex_debug
268
#endif
269
270
#ifdef yylineno
271
#define sudoerslineno_ALREADY_DEFINED
272
#else
273
#define yylineno sudoerslineno
274
#endif
275
276
/* First, we deal with  platform-specific or compiler-specific issues. */
277
278
/* begin standard C headers. */
279
#include <stdio.h>
280
#include <string.h>
281
#include <errno.h>
282
#include <stdlib.h>
283
284
/* end standard C headers. */
285
286
/* flex integer type definitions */
287
288
#ifndef FLEXINT_H
289
#define FLEXINT_H
290
291
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
292
293
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
294
295
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
296
 * if you want the limit (max/min) macros for int types. 
297
 */
298
#ifndef __STDC_LIMIT_MACROS
299
#define __STDC_LIMIT_MACROS 1
300
#endif
301
302
#include <inttypes.h>
303
typedef int8_t flex_int8_t;
304
typedef uint8_t flex_uint8_t;
305
typedef int16_t flex_int16_t;
306
typedef uint16_t flex_uint16_t;
307
typedef int32_t flex_int32_t;
308
typedef uint32_t flex_uint32_t;
309
#else
310
typedef signed char flex_int8_t;
311
typedef short int flex_int16_t;
312
typedef int flex_int32_t;
313
typedef unsigned char flex_uint8_t; 
314
typedef unsigned short int flex_uint16_t;
315
typedef unsigned int flex_uint32_t;
316
317
/* Limits of integral types. */
318
#ifndef INT8_MIN
319
#define INT8_MIN               (-128)
320
#endif
321
#ifndef INT16_MIN
322
#define INT16_MIN              (-32767-1)
323
#endif
324
#ifndef INT32_MIN
325
#define INT32_MIN              (-2147483647-1)
326
#endif
327
#ifndef INT8_MAX
328
#define INT8_MAX               (127)
329
#endif
330
#ifndef INT16_MAX
331
#define INT16_MAX              (32767)
332
#endif
333
#ifndef INT32_MAX
334
#define INT32_MAX              (2147483647)
335
#endif
336
#ifndef UINT8_MAX
337
#define UINT8_MAX              (255U)
338
#endif
339
#ifndef UINT16_MAX
340
#define UINT16_MAX             (65535U)
341
#endif
342
#ifndef UINT32_MAX
343
#define UINT32_MAX             (4294967295U)
344
#endif
345
346
#ifndef SIZE_MAX
347
#define SIZE_MAX               (~(size_t)0)
348
#endif
349
350
#endif /* ! C99 */
351
352
#endif /* ! FLEXINT_H */
353
354
/* begin standard C++ headers. */
355
356
/* TODO: this is always defined, so inline it */
357
#define yyconst const
358
359
#if defined(__GNUC__) && __GNUC__ >= 3
360
#define yynoreturn __attribute__((__noreturn__))
361
#else
362
#define yynoreturn
363
#endif
364
365
/* Returned upon end-of-file. */
366
0
#define YY_NULL 0
367
368
/* Promotes a possibly negative, possibly signed char to an
369
 *   integer in range [0..255] for use as an array index.
370
 */
371
0
#define YY_SC_TO_UI(c) ((YY_CHAR) (c))
372
373
/* Enter a start condition.  This macro really ought to take a parameter,
374
 * but we do it the disgusting crufty way forced on us by the ()-less
375
 * definition of BEGIN.
376
 */
377
42.8k
#define BEGIN (yy_start) = 1 + 2 *
378
/* Translate the current start state into a value that can be later handed
379
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
380
 * compatibility.
381
 */
382
0
#define YY_START (((yy_start) - 1) / 2)
383
#define YYSTATE YY_START
384
/* Action number for EOF rule of a given start state. */
385
0
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
386
/* Special action meaning "start processing a new file". */
387
0
#define YY_NEW_FILE yyrestart( yyin  )
388
0
#define YY_END_OF_BUFFER_CHAR 0
389
390
/* Size of default input buffer. */
391
#ifndef YY_BUF_SIZE
392
#ifdef __ia64__
393
/* On IA-64, the buffer size is 16k, not 8k.
394
 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
395
 * Ditto for the __ia64__ case accordingly.
396
 */
397
#define YY_BUF_SIZE 32768
398
#else
399
0
#define YY_BUF_SIZE 16384
400
#endif /* __ia64__ */
401
#endif
402
403
/* The state buf must be large enough to hold one state per character in the main buffer.
404
 */
405
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
406
407
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
408
#define YY_TYPEDEF_YY_BUFFER_STATE
409
typedef struct yy_buffer_state *YY_BUFFER_STATE;
410
#endif
411
412
#ifndef YY_TYPEDEF_YY_SIZE_T
413
#define YY_TYPEDEF_YY_SIZE_T
414
typedef size_t yy_size_t;
415
#endif
416
417
extern int yyleng;
418
419
extern FILE *yyin, *yyout;
420
421
0
#define EOB_ACT_CONTINUE_SCAN 0
422
0
#define EOB_ACT_END_OF_FILE 1
423
0
#define EOB_ACT_LAST_MATCH 2
424
    
425
    #define YY_LESS_LINENO(n)
426
    #define YY_LINENO_REWIND_TO(ptr)
427
    
428
/* Return all but the first "n" matched characters back to the input stream. */
429
#define yyless(n) \
430
0
  do \
431
0
    { \
432
0
    /* Undo effects of setting up yytext. */ \
433
0
        int yyless_macro_arg = (n); \
434
0
        YY_LESS_LINENO(yyless_macro_arg);\
435
0
    *yy_cp = (yy_hold_char); \
436
0
    YY_RESTORE_YY_MORE_OFFSET \
437
0
    (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
438
0
    YY_DO_BEFORE_ACTION; /* set up yytext again */ \
439
0
    } \
440
0
  while ( 0 )
441
#define unput(c) yyunput( c, (yytext_ptr)  )
442
443
#ifndef YY_STRUCT_YY_BUFFER_STATE
444
#define YY_STRUCT_YY_BUFFER_STATE
445
struct yy_buffer_state
446
  {
447
  FILE *yy_input_file;
448
449
  char *yy_ch_buf;    /* input buffer */
450
  char *yy_buf_pos;   /* current position in input buffer */
451
452
  /* Size of input buffer in bytes, not including room for EOB
453
   * characters.
454
   */
455
  int yy_buf_size;
456
457
  /* Number of characters read into yy_ch_buf, not including EOB
458
   * characters.
459
   */
460
  int yy_n_chars;
461
462
  /* Whether we "own" the buffer - i.e., we know we created it,
463
   * and can realloc() it to grow it, and should free() it to
464
   * delete it.
465
   */
466
  int yy_is_our_buffer;
467
468
  /* Whether this is an "interactive" input source; if so, and
469
   * if we're using stdio for input, then we want to use getc()
470
   * instead of fread(), to make sure we stop fetching input after
471
   * each newline.
472
   */
473
  int yy_is_interactive;
474
475
  /* Whether we're considered to be at the beginning of a line.
476
   * If so, '^' rules will be active on the next match, otherwise
477
   * not.
478
   */
479
  int yy_at_bol;
480
481
    int yy_bs_lineno; /**< The line count. */
482
    int yy_bs_column; /**< The column count. */
483
484
  /* Whether to try to fill the input buffer when we reach the
485
   * end of it.
486
   */
487
  int yy_fill_buffer;
488
489
  int yy_buffer_status;
490
491
0
#define YY_BUFFER_NEW 0
492
0
#define YY_BUFFER_NORMAL 1
493
  /* When an EOF's been seen but there's still some text to process
494
   * then we mark the buffer as YY_EOF_PENDING, to indicate that we
495
   * shouldn't try reading from the input source any more.  We might
496
   * still have a bunch of tokens to match, though, because of
497
   * possible backing-up.
498
   *
499
   * When we actually see the EOF, we change the status to "new"
500
   * (via yyrestart()), so that the user can continue scanning by
501
   * just pointing yyin at a new input file.
502
   */
503
0
#define YY_BUFFER_EOF_PENDING 2
504
505
  };
506
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
507
508
/* Stack of input buffers. */
509
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
510
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
511
static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
512
513
/* We provide macros for accessing buffer states in case in the
514
 * future we want to put the buffer states in a more general
515
 * "scanner state".
516
 *
517
 * Returns the top of the stack, or NULL.
518
 */
519
0
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
520
0
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
521
0
                          : NULL)
522
/* Same as previous macro, but useful when we know that the buffer stack is not
523
 * NULL or when we need an lvalue. For internal use only.
524
 */
525
0
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
526
527
/* yy_hold_char holds the character lost when yytext is formed. */
528
static char yy_hold_char;
529
static int yy_n_chars;    /* number of characters read into yy_ch_buf */
530
int yyleng;
531
532
/* Points to current character in buffer. */
533
static char *yy_c_buf_p = NULL;
534
static int yy_init = 0;   /* whether we need to initialize */
535
static int yy_start = 0;  /* start state number */
536
537
/* Flag which is used to allow yywrap()'s to do buffer switches
538
 * instead of setting up a fresh yyin.  A bit of a hack ...
539
 */
540
static int yy_did_buffer_switch_on_eof;
541
542
void yyrestart ( FILE *input_file  );
543
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
544
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
545
void yy_delete_buffer ( YY_BUFFER_STATE b  );
546
void yy_flush_buffer ( YY_BUFFER_STATE b  );
547
void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
548
void yypop_buffer_state ( void );
549
550
static void yyensure_buffer_stack ( void );
551
static void yy_load_buffer_state ( void );
552
static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
553
#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )
554
555
YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
556
YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
557
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );
558
559
void *yyalloc ( yy_size_t  );
560
void *yyrealloc ( void *, yy_size_t  );
561
void yyfree ( void *  );
562
563
#define yy_new_buffer yy_create_buffer
564
#define yy_set_interactive(is_interactive) \
565
  { \
566
  if ( ! YY_CURRENT_BUFFER ){ \
567
        yyensure_buffer_stack (); \
568
    YY_CURRENT_BUFFER_LVALUE =    \
569
            yy_create_buffer( yyin, YY_BUF_SIZE ); \
570
  } \
571
  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
572
  }
573
#define yy_set_bol(at_bol) \
574
0
  { \
575
0
  if ( ! YY_CURRENT_BUFFER ){\
576
0
        yyensure_buffer_stack (); \
577
0
    YY_CURRENT_BUFFER_LVALUE =    \
578
0
            yy_create_buffer( yyin, YY_BUF_SIZE ); \
579
0
  } \
580
0
  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
581
0
  }
582
0
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
583
584
/* Begin user sect3 */
585
586
0
#define sudoerswrap() (/*CONSTCOND*/1)
587
#define YY_SKIP_YYWRAP
588
typedef flex_uint8_t YY_CHAR;
589
590
FILE *yyin = NULL, *yyout = NULL;
591
592
typedef int yy_state_type;
593
594
extern int yylineno;
595
int yylineno = 1;
596
597
extern char *yytext;
598
#ifdef yytext_ptr
599
#undef yytext_ptr
600
#endif
601
0
#define yytext_ptr yytext
602
603
static yy_state_type yy_get_previous_state ( void );
604
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
605
static int yy_get_next_buffer ( void );
606
static void yynoreturn yy_fatal_error ( const char* msg  );
607
608
/* Done after the current pattern has been matched and before the
609
 * corresponding action - sets up yytext.
610
 */
611
#define YY_DO_BEFORE_ACTION \
612
0
  (yytext_ptr) = yy_bp; \
613
0
  yyleng = (int) (yy_cp - yy_bp); \
614
0
  (yy_hold_char) = *yy_cp; \
615
0
  *yy_cp = '\0'; \
616
0
  (yy_c_buf_p) = yy_cp;
617
#define YY_NUM_RULES 89
618
0
#define YY_END_OF_BUFFER 90
619
/* This struct is not used in this scanner,
620
   but its presence is necessary. */
621
struct yy_trans_info
622
  {
623
  flex_int32_t yy_verify;
624
  flex_int32_t yy_nxt;
625
  };
626
static const flex_int16_t yy_accept[1244] =
627
    {   0,
628
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
629
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
630
        0,    0,   90,   75,   85,   84,   88,   83,   74,   87,
631
       46,   78,   79,   46,   80,   75,   75,   75,   75,   82,
632
       81,   88,   75,   64,   64,   64,   64,   64,   64,   64,
633
       64,   64,   64,   64,   64,   64,   64,   88,   75,   75,
634
       75,   85,   87,   64,   64,   64,   64,   64,    2,   88,
635
        1,   75,   64,   64,   64,   64,   75,   75,   17,   16,
636
       16,   17,   16,   16,   88,   21,   21,   19,   19,   21,
637
       19,   20,   88,   87,   88,    3,    9,    8,    9,    4,
638
639
        9,    5,   88,   13,   13,   13,   11,   12,   88,   23,
640
       23,   22,   22,   22,   23,   22,   22,   22,   22,   23,
641
       23,   23,   23,   23,   23,   23,   88,   22,   23,   23,
642
       76,   76,   77,   76,   71,   71,   71,   71,   71,   71,
643
       71,   64,   64,   64,   64,   64,   64,   64,   64,   64,
644
       64,   64,   88,   71,   71,   71,   75,    0,   85,   84,
645
       83,   87,   87,    0,    0,   75,   48,    0,   46,    0,
646
       47,    0,   72,   72,    0,   75,   75,    0,   75,   75,
647
       75,   75,    0,   51,   75,   64,   64,   64,   64,   64,
648
       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
649
650
       64,   64,   64,   64,    0,   86,   75,   75,   75,    0,
651
       73,    0,   75,   75,   85,    0,    0,    0,    0,    0,
652
       87,   75,   75,   75,   75,   75,    2,    1,    0,    1,
653
       65,   65,    0,   64,   75,    0,   65,    0,   75,   17,
654
       17,   15,    0,   14,   15,   21,   21,   21,   18,   18,
655
        0,    3,    9,    0,    6,    7,    9,    9,   13,    0,
656
       13,   13,    0,   10,    0,   48,    0,    0,   47,   23,
657
       23,    0,   23,    0,    0,   22,   22,   22,   22,   22,
658
       22,   23,   23,   64,   23,   23,   23,   23,   23,   23,
659
       23,   23,   73,    0,   23,   23,   76,   76,   76,   71,
660
661
        0,   48,    0,   47,    0,   71,   71,    0,   71,   71,
662
       71,   71,   71,   71,   64,   64,   64,   64,   64,   64,
663
       64,   64,   64,   64,   64,   71,   71,   71,   71,    0,
664
       71,   71,   87,   87,   87,    0,   48,   75,   75,   75,
665
       75,   75,    0,    0,   51,   51,   75,   64,   53,   64,
666
       64,   57,   64,   64,   64,   64,   64,   64,   64,   64,
667
       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
668
       64,   64,   73,   75,   75,   75,    0,    0,    0,    0,
669
        0,   87,   75,   75,   75,   75,   75,   75,    0,   65,
670
        0,   65,   75,   75,   10,    0,    0,    0,   22,   22,
671
672
       22,   23,   23,   23,   23,   23,   23,   23,   23,   23,
673
       23,   23,   23,   23,   23,   23,   73,   23,   23,    0,
674
       71,   71,   71,   71,   71,   64,   53,   64,   64,   64,
675
       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
676
       64,   71,   71,   71,   71,   87,   87,   87,   75,   75,
677
       75,   75,   75,   75,    0,   52,   52,   52,    0,    0,
678
       51,   51,   51,   51,   51,   51,   51,   75,   64,   64,
679
       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
680
       64,   64,   64,   64,   64,   64,   64,   64,   59,   64,
681
       64,   60,   75,   75,   75,   75,    0,    0,    0,    0,
682
683
        0,    0,   87,   75,   75,   75,   65,   75,    0,    0,
684
        0,    0,    0,   22,   22,   23,   23,   23,   64,   23,
685
       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
686
       23,   23,   23,   71,   71,   71,   71,   71,   71,   64,
687
       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
688
       64,   64,   64,   64,   71,   71,   71,   71,   75,   75,
689
       75,    0,    0,   52,   52,   52,    0,   51,   51,    0,
690
       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
691
       51,   75,   64,   64,    0,   33,   64,   64,   64,   64,
692
       64,    0,   42,   64,   64,   64,   64,   64,   64,   64,
693
694
       64,   64,   64,   62,   64,   64,   75,   75,   75,   75,
695
       75,    0,    0,    0,   87,   75,   75,   75,    0,    0,
696
        0,   22,   22,   23,   23,   64,   64,   23,   23,   23,
697
       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
698
       23,   71,   71,   71,   64,   64,   64,   64,   64,   64,
699
       64,   64,   64,   64,   64,   64,   64,   71,   71,   71,
700
       71,   71,   75,   75,   75,   75,   75,    0,   52,    0,
701
       51,   51,   51,    0,    0,    0,   51,   51,   51,   51,
702
       51,   51,   51,   51,   51,   51,   51,   51,   51,   75,
703
       64,   58,   64,   64,   64,   64,   64,   64,   64,   64,
704
705
       64,   64,   64,   64,   64,   64,   64,   64,   64,   66,
706
       67,   68,   69,   75,    0,    0,   87,   75,   75,   75,
707
        0,    0,    0,    0,    0,   23,   23,   64,   64,   23,
708
       23,   23,   64,   23,   23,   23,   23,   23,   23,   23,
709
       23,   23,   23,   71,   71,   71,   71,   71,   64,   64,
710
       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
711
       64,   66,   67,   68,   69,   71,   49,   49,   49,    0,
712
        0,   51,   51,   51,   51,   51,   51,   51,    0,    0,
713
        0,    0,    0,   51,   51,   51,   51,   51,   51,   51,
714
       51,   51,   51,   51,   51,   51,   51,   75,   64,    0,
715
716
       44,   64,   64,   64,   64,    0,   32,   64,   64,   64,
717
       64,    0,   43,   64,   64,   64,   64,    0,   31,    0,
718
       36,   54,   75,    0,    0,   87,   75,   75,   75,   49,
719
       49,   49,   23,   64,   64,   23,   23,   64,   64,   23,
720
       23,   23,   49,   49,   49,   64,   64,   64,   64,   64,
721
       64,   64,   64,   64,   71,   75,   49,   49,   49,   49,
722
        0,   51,    0,   51,   51,   51,   51,   51,   51,   51,
723
       51,   51,   51,   51,    0,    0,    0,   51,   51,   51,
724
       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
725
       24,   64,   64,   64,   64,   64,   64,   64,   64,   64,
726
727
       64,   64,   56,   64,   70,    0,    0,   87,   75,   28,
728
       65,    0,   49,   49,   49,   49,   23,   64,   64,   23,
729
       23,   64,   64,   23,   23,   23,   71,   49,   49,   49,
730
       49,   64,   64,   64,   64,   64,   64,   64,   64,   64,
731
       70,   50,   50,   50,   50,   51,    0,    0,    0,   51,
732
       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
733
       51,   51,    0,    0,    0,    0,    0,   51,   51,   51,
734
       51,   51,   51,   51,   51,   75,   64,   64,   64,   64,
735
       64,    0,   45,   64,   64,   64,    0,   30,    0,   37,
736
       55,    0,   28,   26,   87,   29,    0,   75,   50,   50,
737
738
       50,   50,   23,   64,   64,   23,   64,   64,   50,   50,
739
       50,   50,   64,   64,   64,   64,   64,   64,   75,   75,
740
       50,   50,   50,   50,    0,    0,    0,    0,    0,   51,
741
       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
742
       51,   51,   51,   51,   51,   51,   51,   51,   51,   75,
743
       64,    0,   34,   63,    0,   40,   64,   64,   64,   64,
744
       29,   26,   26,   26,   26,   87,   28,    0,    0,    0,
745
        0,    0,   28,    0,    0,    0,   50,   50,   50,   50,
746
       64,   23,   64,   64,   71,   71,   50,   50,   50,   50,
747
       64,   64,   64,   64,   75,   75,   75,    0,    0,    0,
748
749
       51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
750
       51,   51,   51,   51,   51,   51,   51,   51,   25,   64,
751
        0,   38,   64,   64,   64,   26,   87,    0,   28,    0,
752
        0,    0,   23,   64,   64,   71,   71,   71,   64,   64,
753
       64,   75,   75,   75,   75,   75,    0,    0,    0,    0,
754
        0,   51,   51,   51,   51,   51,   51,   51,   51,   64,
755
        0,   35,    0,   41,   64,   27,    0,    0,    0,    0,
756
        0,   64,   71,   71,   71,   71,   71,   64,   75,   75,
757
       75,   51,   51,   51,   51,   51,   51,   64,    0,   39,
758
       27,   27,   27,   27,    0,    0,    0,   71,   71,   71,
759
760
       75,   75,   75,   75,   75,   51,   51,   51,   51,   51,
761
       64,   27,    0,    0,    0,    0,    0,   71,   71,   71,
762
       71,   71,   49,   49,   49,   64,   49,   49,   49,   49,
763
       49,   49,   49,   49,   49,   61,   49,   49,   49,   49,
764
       49,   49,    0
765
    } ;
766
767
static const YY_CHAR yy_ec[256] =
768
    {   0,
769
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
770
        4,    4,    5,    1,    1,    1,    1,    1,    1,    1,
771
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
772
        1,    6,    7,    8,    9,   10,   11,    1,    1,   12,
773
       13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
774
       23,   24,   25,   26,   27,   28,   29,   30,    1,    1,
775
       31,   32,   14,   33,   34,   35,   36,   37,   38,   39,
776
       40,   41,   42,   43,   43,   44,   45,   46,   47,   48,
777
       43,   49,   50,   51,   52,   53,   54,   55,   56,   43,
778
       14,   57,   14,   58,   59,    1,   60,   61,   62,   63,
779
780
       64,   65,   66,   67,   68,   66,   66,   69,   70,   71,
781
       72,   66,   66,   73,   74,   75,   76,   66,   66,   66,
782
       66,   66,    1,    1,    1,    1,    1,    1,    1,    1,
783
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
784
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
785
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
786
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
787
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
788
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
789
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
790
791
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
792
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
793
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
794
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
795
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
796
        1,    1,    1,    1,    1
797
    } ;
798
799
static const YY_CHAR yy_meta[77] =
800
    {   0,
801
        1,    2,    3,    4,    3,    2,    5,    6,    7,    8,
802
        1,    9,    9,    1,   10,   11,    1,   12,   13,   14,
803
       14,   14,   14,   14,   14,   14,   14,   14,   14,   15,
804
       16,    9,    1,   14,   14,   14,   14,   14,   14,   17,
805
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
806
       17,   17,   17,   17,   17,   17,   18,    1,   19,   20,
807
       20,   20,   20,   20,   20,   21,   21,   21,   21,   21,
808
       21,   21,   21,   21,   21,   21
809
    } ;
810
811
static const flex_int16_t yy_base[1368] =
812
    {   0,
813
        0,   75,  126,  199,   83,   91,   99,  162,  180,  204,
814
      272,  347,  422,  478,  131,  147,  535,    0,  219,  260,
815
      611,    0, 6367, 6285,   76, 9534, 6337, 6332, 9534,  685,
816
      101, 9534, 9534, 6260, 9534,  294,  697,  262,  174, 6272,
817
     9534, 9534,   23,  762,   35,  103,  186,  132,  819, 6255,
818
       76, 6253, 6239,   92, 6238, 6246,   53,  883,  914,  337,
819
      179,  399,  969,  251,  194, 6205,   70, 6191,  238,  350,
820
      210,  434, 6214, 6214, 6213, 6215, 1036,  236,    0, 9534,
821
     6234, 6218, 9534,    0, 1092,    0,  247, 9534, 6176, 6156,
822
     9534, 9534,  308, 1148,  313,    0, 6103, 9534,  160, 9534,
823
824
      171, 9534,  322, 6102,  386,  174, 9534,  378,  425, 1177,
825
     1236, 1281,  436,  373, 1340, 1391, 6112,  215,  119, 1448,
826
     6109, 6098, 6109, 6060, 6060, 6044,  163,  449,    0,  184,
827
     6024,  265, 9534,  397, 5994,  459, 5993,  684, 1496,  476,
828
      490, 1561, 5982,  225,  250, 1618, 5979, 5976, 5977, 5963,
829
     5975, 5925, 1682, 1713,  499,  671, 5890,  737,  250, 9534,
830
     5937,  293, 9534, 5940,  848,  880, 5883,  911,  721,  945,
831
     5882,  994,  952, 5879, 1769,  993, 1784, 5895, 5889, 1007,
832
     1033,  509, 5867,  290,  311, 1849, 1906, 5852, 5829, 5827,
833
     5836, 5821, 5805, 5777, 5780, 5784, 5778, 1031, 5753, 5760,
834
835
     5757, 5732, 5730, 5720,  698, 9534,  387, 1081, 1970,  375,
836
     5710, 1100,  392,   62, 1083, 5695, 5700, 5684, 5679, 5669,
837
      847,  854,  427,   46,  699,  266,  964,  298, 1119,  385,
838
      955, 5659, 2026, 1116, 2057,  683, 5658, 1102,  632,    0,
839
     5706,  859, 5709, 9534, 9534,    0,  692, 5704, 9534,  976,
840
     1176,    0, 5646, 1207, 9534, 9534, 5631, 1123, 5615, 5655,
841
      891,  853, 1111,  746, 5580, 1106, 1122, 1250, 5525, 2114,
842
        0, 1377, 2173, 1536, 1204, 2215, 5563, 1250, 1263, 1197,
843
     2266, 2323, 5536,    0, 5535, 5526, 5518, 5494, 5491, 1451,
844
     5482, 5480, 9534, 1031, 5449, 5432, 5382,  892,  912, 5381,
845
846
     1725, 5357, 1756, 5356, 1824, 1536, 5354, 2387, 1643, 2402,
847
     5381, 1681, 1769, 1374, 2467, 2524, 5354, 5359, 5284, 5275,
848
     5267, 5253, 1908, 5236, 5234,  736, 1671, 2588, 5227, 1952,
849
      714,  866,  485,  503,  938, 1967, 1990, 2628, 2668, 2708,
850
     2746, 5247, 5232, 2792,  488, 2839,  885, 2904, 2961, 5226,
851
     5201,    0, 5204, 5195, 5180, 5175, 5141, 5148, 5136, 5121,
852
     5106, 5104, 5090, 5089, 5084,  730, 5071, 5060, 5068, 5060,
853
     5059, 5058, 3025, 3081, 1480,  794,  666, 5019, 5007, 5009,
854
     5005, 1075,  926,  948, 4997,   86, 1014,  931, 2020, 9534,
855
     1035, 3137, 3193,  951, 1045, 2054, 2072, 2084, 3231, 5012,
856
857
     3282, 3339, 4993, 4984, 4986, 4958, 4956, 4931, 4932, 4932,
858
     4917, 4929, 4928, 4901, 4872, 4883, 1157, 1160, 4848, 2120,
859
     3387, 3427, 3467, 3507, 4881, 3553,    0, 4851, 4835, 4840,
860
     4809, 4817, 4798, 4805, 4805, 4759, 4770, 4732, 4720, 4706,
861
     4680, 3617, 3673, 1636, 1046, 9534, 1060, 1181, 2132,  737,
862
     3713, 3753, 2119, 1034, 4680, 4679, 2172, 1239, 4678, 4665,
863
     1222, 1361, 3793, 2187, 1726, 3840, 2199, 1064, 3905,  829,
864
      403, 1498,  926, 1047, 1160, 1499, 1534, 1343, 1162, 1308,
865
      199, 1209,  339, 1341, 1449, 1468, 1394, 1215, 4645, 1234,
866
     1267, 4640, 1105, 1535, 1366, 1490, 4599, 4592, 4594, 4578,
867
868
     4582, 4542, 1755, 1155, 1697, 1423, 1517, 1513, 2235, 4586,
869
     2345, 2384, 2023, 3962, 4013, 4088, 1973, 1832, 1508, 2019,
870
     2132, 2562, 2563, 2440, 2569, 2449, 2572, 2575, 2601, 1469,
871
     4547, 4553, 4500, 2612, 1642, 4136, 4176, 2357, 1283, 4533,
872
     2173, 4515, 4486, 1650, 2268, 4496, 4489, 4473, 4483, 4480,
873
     4463, 4460, 4455, 4452, 1758, 1683, 1494, 1660, 4216, 4256,
874
     4296, 4460, 4456, 2638, 4443, 4434, 4433, 4387, 1656, 2650,
875
     1798, 2678, 1919, 4336,    0, 2690, 4384, 2718, 2143, 4431,
876
     2730, 1659, 1722, 1688, 2442, 9534, 1712, 1723, 1042, 1342,
877
     1104, 2443, 9534, 1821, 1163, 1797, 1925, 1692, 1909, 1935,
878
879
     1930, 1813, 1828, 4386, 1773, 1809, 1940, 1948, 1980, 1941,
880
     1967, 4381, 4319, 4313, 2057, 1983, 1997, 1998, 2768, 2814,
881
     2861, 4356, 4355, 2842, 3000, 4338, 4317, 3009, 2999, 3010,
882
     3012, 3048, 3045, 3047, 3066, 3056, 4344, 4341, 4326, 4305,
883
     4252, 4479, 4519, 4559, 4258, 4275, 4264, 4235, 4236, 4226,
884
     4230, 4176, 4188, 4181, 4157, 4155, 4138, 2029, 2059, 2060,
885
     2046, 2064, 3094, 2073, 4599, 4639, 3106, 4160, 4138, 4136,
886
     4110, 4677, 2116, 3152, 3164, 3190, 2199, 2253, 2439, 3206,
887
     2537, 4725,    0, 3136, 4773, 3216, 3112, 4820, 3253, 2125,
888
     1795, 4109, 2905, 1969, 2216, 2218, 1955, 3068, 2237, 2367,
889
890
     2405, 3074, 2269, 2404, 2326, 2368, 3284, 3387, 2118, 4064,
891
     4063, 4049, 4014, 2333, 4001, 3977, 2567, 2386, 2399, 2523,
892
     3359, 4027, 3400, 3412, 3439, 3389, 3440, 3982, 3978, 3467,
893
     3469, 3470, 1737, 3475, 3496, 3477, 3480, 3507,    0,    0,
894
        0,    0, 3953, 3536, 2216, 4868, 4908, 3577, 3509, 3982,
895
     3889, 3867, 3601, 3870, 3858, 2566, 3602, 3838, 3835, 3620,
896
     3633, 3794, 3789, 3768, 3752, 2553, 4947, 4986, 5025, 3772,
897
     3771, 3742, 3631, 5065, 3644, 3620, 5111, 3670, 3686, 3726,
898
     3698, 3725, 3737, 2596, 2597, 2876, 2879, 3763, 2974, 5159,
899
        0, 3775, 5207, 3813, 3743, 5254, 3862, 2396, 5319, 3726,
900
901
     9534, 1601, 2434, 1899, 2071, 3841, 9534, 2563, 2233, 2527,
902
     2530, 3842, 9534, 2384, 1520, 3653, 3638, 3843, 9534, 3891,
903
     9534, 3597, 2567, 3518, 3478, 2713, 2565, 2509, 2703, 3983,
904
     4076, 4109, 5381, 3486, 3474, 2633, 2561, 3475, 3466, 2750,
905
     2669, 3392, 5439, 5478, 5517, 5574, 2632, 3418, 2673, 2713,
906
     2716, 2671, 2843, 2751, 2748, 4149, 2625, 5632, 5671, 4122,
907
     3367, 3366, 4160, 2815, 4187, 2989, 5711,    0, 4199, 5724,
908
     4226, 3993, 5770, 4238, 4268, 4280, 4308, 2990, 2998, 3122,
909
     3269, 4318, 3536, 5818,    0, 4358, 5866, 4404, 4369, 4453,
910
     2853, 5931, 2861, 2993, 3008, 2951, 4508, 2209, 3025, 3010,
911
912
     4519, 4559, 3256, 2317, 3241, 3161, 3133, 3546, 3007, 4455,
913
     3141, 4414, 3123, 4531, 4571, 4507, 5993, 3055, 3049, 4599,
914
     3028, 3017, 2962, 4600, 4601,    0, 4612, 2744, 6051, 6090,
915
     4589, 6147, 2957, 2773, 4641, 3145, 2798, 2943, 4642, 4643,
916
     2879, 6206, 6246, 6286, 6326, 2887, 4656, 4699, 4747, 2883,
917
     3254, 3376, 4793, 3413, 6366,    0, 4842, 6379, 4803, 4495,
918
     6425, 4880, 4890, 2829, 4920, 4932, 4548, 3080, 3270, 3566,
919
     2832, 2852, 6473,    0, 4711, 3444, 3455, 4921, 3112, 4996,
920
     3049, 3906, 9534, 3458, 3145, 3535, 4269, 9534, 4775, 9534,
921
     2720, 2650, 4750, 3801, 3217, 2626, 4867, 4975, 4967, 5013,
922
923
     5038, 5050, 5112, 4995, 2592, 3012, 2576, 2509, 6485, 6525,
924
     6565, 6605, 5113, 5114, 2447, 3054, 2841, 3198, 5133, 3089,
925
     6645, 6685, 5181, 3107, 5187, 2457, 5229, 5276, 4998, 2431,
926
     2361, 3450, 3490, 5449, 3699, 6725,    0, 5087, 6738, 5459,
927
     4666, 6784, 5490, 5501, 5528, 5539, 3591, 2335, 3229, 3401,
928
     2985, 4997, 9534, 2265, 5257, 9534, 5671, 3339, 3561, 3488,
929
     9534, 2797, 3893, 9534, 3259, 3821, 5660, 5700, 5712, 5764,
930
     5658, 5319, 5772, 5574, 5790, 2160, 5840, 5888, 5288, 2131,
931
     5820, 2072, 2020, 1828, 6063, 3447, 6832, 6872, 6075, 3619,
932
     5821, 1645, 1600, 3288, 6912, 6952, 6992, 6113, 6218, 6230,
933
934
     1509, 1477, 4001, 4089, 6101, 4137, 7032,    0, 6258, 7045,
935
     6269, 5469, 6298, 1462, 6309, 6337, 5899, 1430, 1282, 4171,
936
     5868, 9534, 6339, 6474, 3577, 9534, 3908, 6350, 6399, 6497,
937
     6537, 6549, 6427, 5869, 1247, 7093, 7133, 7173, 6428, 6594,
938
     1191, 6581, 3620, 7213, 7253, 6593, 6445, 1082, 6631, 6657,
939
     6514, 1009,  925, 4239,  894,  869, 6669,    0, 4199, 3224,
940
     5931, 9534, 5932, 9534, 6538, 4346, 6695,  757, 6707, 6760,
941
     6619, 6147, 6805, 3643, 7293, 7333, 6817, 6861, 7373, 7413,
942
     7453, 6855, 6882, 6893,  669,    0,  408, 3106, 6148, 9534,
943
     3367, 5164, 9534, 3847, 6924, 6936, 6964, 7493, 7533, 7573,
944
945
     6974, 3644, 7613, 7653, 7018, 9534, 7065, 7075, 5702, 9534,
946
     1964, 9534, 7103,  290, 7115, 7145, 6772, 7155, 3751, 7693,
947
     7733, 7186, 7193, 7231, 7269, 3333, 7279, 7307, 7317, 7346,
948
     7356, 7394,  214, 7432, 7204,  144, 9534, 7470, 6081,   30,
949
     7480, 7386, 9534, 7790, 7811, 7832, 7853, 7874, 7895, 7916,
950
     7937, 7958, 7979, 8000, 3591, 8021, 8042, 8063, 8084, 8105,
951
     8126, 3974, 8147, 8168, 8189, 8210, 8231, 8252, 8273, 8294,
952
     8315, 8336, 8357, 8378, 8399, 8420, 8441, 8462, 8483, 8504,
953
     8525, 8546, 4469, 4764, 8555, 8575, 8596, 8617, 8638, 8659,
954
     8680, 8701, 8722, 4072, 8743, 8764, 8785, 8806, 8818, 8839,
955
956
     5247, 8860, 8881, 8902, 8923, 8944, 8965, 8986, 9007, 9028,
957
     9049, 5557, 9058, 9078, 9099, 9120, 9141, 5650, 5690, 5762,
958
     9150, 9158, 9178, 9199, 5308, 6285, 6417, 6724, 9208, 9217,
959
     6850, 6911, 6991, 9225, 9234, 7008, 7010, 9242, 9251, 9271,
960
     5657, 9283, 9304, 7012, 9314, 9322, 9331, 9351, 6852, 9363,
961
     9384, 7031, 9394, 9402, 9411, 9431, 9452, 9473, 7132, 9483,
962
     4857, 7172, 9492, 7248, 6132, 9512, 3664
963
    } ;
964
965
static const flex_int16_t yy_def[1368] =
966
    {   0,
967
     1243,    1,    1,    1, 1244, 1244, 1244, 1244, 1245, 1245,
968
     1246, 1246, 1247, 1247, 1248, 1248, 1243,   17, 1249, 1249,
969
     1243,   21, 1243, 1250, 1243, 1243, 1243, 1243, 1243, 1251,
970
     1252, 1243, 1243, 1253, 1243, 1254, 1250,   37,   37, 1255,
971
     1243, 1243, 1250, 1243,   44,   44,   44,   44,   44,   49,
972
       49,   49,   49,   49,   49,   49,   49, 1250, 1256,   37,
973
     1250, 1243, 1251,   44,   44,   49,   49,   49, 1243, 1243,
974
     1243, 1257,   44,   49,   49,   49, 1258, 1250, 1259, 1243,
975
     1243, 1259, 1243, 1259, 1243, 1260, 1260, 1243, 1243, 1260,
976
     1243, 1243, 1261, 1251, 1243, 1262, 1263, 1243, 1263, 1243,
977
978
     1263, 1243, 1264, 1265, 1265, 1265, 1243, 1243, 1266, 1267,
979
     1268, 1243,  112,  112,  112, 1243,  116,  116,  116,  116,
980
      120,  120,  120,  120,  120,  120, 1269,  112,  115,  115,
981
     1270, 1270, 1243, 1270, 1271, 1272, 1273, 1274, 1271,  139,
982
      139, 1243,  142,  142,  142,  142,  146,  146,  146,  146,
983
      146,  146, 1271, 1275,  139, 1271, 1276, 1276, 1243, 1243,
984
     1243, 1277, 1243, 1243, 1278, 1243, 1279, 1243, 1266, 1279,
985
     1280, 1280, 1281, 1282, 1276, 1276, 1276, 1283,  177,  177,
986
      177,  177, 1284, 1285, 1276, 1243,  186,  187,  187,  187,
987
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
988
989
      187,  187,  187,  187, 1243, 1243, 1276, 1276, 1286, 1287,
990
     1276, 1286, 1276, 1276, 1243, 1243, 1243, 1243, 1243, 1243,
991
     1277, 1276,  177, 1276, 1276, 1276, 1243, 1243, 1243, 1243,
992
     1288, 1289, 1276,  187, 1290, 1291, 1276, 1290, 1276, 1292,
993
     1292, 1243, 1243, 1243, 1243, 1293, 1293, 1293, 1243, 1243,
994
     1278, 1294, 1295, 1295, 1243, 1243, 1295, 1295, 1296, 1243,
995
     1296, 1296, 1243, 1243, 1243, 1266, 1266, 1266, 1297, 1298,
996
     1299, 1297, 1300, 1243, 1243, 1299,  276,  276,  276,  276,
997
     1243,  281,  282, 1301,  282,  282,  282,  282,  282,  282,
998
      282,  282, 1243, 1287, 1299, 1299, 1302, 1302, 1302, 1303,
999
1000
     1303, 1304, 1304, 1305, 1305, 1306, 1307, 1303, 1303, 1303,
1001
      310,  310,  310,  310, 1243,  315,  316,  316,  316,  316,
1002
      316,  316,  316,  316,  316, 1303, 1303, 1308, 1303, 1308,
1003
     1303, 1303, 1309, 1309, 1310, 1243, 1243, 1311, 1311, 1311,
1004
     1311,  341, 1312, 1243, 1313, 1243, 1311, 1243,  348,  349,
1005
      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
1006
      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
1007
      349,  349, 1314, 1314, 1311, 1311, 1243, 1243, 1243, 1243,
1008
     1243, 1309, 1311, 1311,  341, 1311, 1311, 1311, 1243, 1243,
1009
     1315, 1316, 1316, 1311, 1243, 1243, 1243, 1243, 1299,  399,
1010
1011
     1243,  401,  402,  402,  402,  402,  402,  402,  402,  402,
1012
      402,  402,  402,  402,  402,  402, 1317, 1299, 1299, 1243,
1013
     1303, 1303, 1303,  310,  424,  315,  316,  316,  316,  316,
1014
      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1015
      316, 1308, 1308, 1303, 1303, 1243, 1310, 1310, 1311, 1311,
1016
     1311, 1311, 1311, 1311, 1318, 1319, 1319,  457, 1320, 1319,
1017
     1321, 1322, 1243,  463,  463, 1243,  463, 1311, 1243,  469,
1018
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
1019
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
1020
      469,  469, 1311, 1311, 1311, 1311, 1243, 1243, 1243, 1243,
1021
1022
     1243, 1243, 1323, 1311, 1311, 1311, 1324, 1311, 1243, 1243,
1023
     1243, 1243, 1243, 1299, 1243,  515,  516,  516, 1325,  516,
1024
      516,  516,  516,  516,  516,  516,  516,  516,  516, 1299,
1025
     1299, 1299, 1299, 1303, 1303, 1303, 1303, 1303, 1303,  316,
1026
      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1027
      316,  316,  316,  316, 1303, 1303, 1303, 1303, 1311, 1311,
1028
     1311, 1243, 1326, 1326,  564, 1326, 1327, 1328, 1329, 1243,
1029
     1330,  466, 1330, 1243,  574, 1330, 1243,  577,  577, 1243,
1030
      577, 1311,  469,  469, 1243, 1243,  469,  469,  469,  469,
1031
      469, 1243, 1243,  469,  469,  469,  469,  469,  469,  469,
1032
1033
      469,  469,  469,  469,  469,  469, 1311, 1311, 1311, 1311,
1034
     1311, 1243, 1243, 1243, 1323, 1311, 1311, 1311, 1243, 1243,
1035
     1243,  514,  515,  516,  516, 1325, 1325,  516,  516,  516,
1036
      516,  516,  516,  516,  516,  516, 1299, 1299, 1299, 1299,
1037
     1299, 1303, 1303, 1303,  316,  316,  316,  316,  316,  316,
1038
      316,  316,  316,  316,  316,  316,  316, 1303, 1303, 1303,
1039
     1303, 1303, 1311, 1311, 1311, 1311, 1311, 1331, 1331, 1332,
1040
     1333, 1243, 1243, 1243, 1243, 1243, 1334, 1334, 1335,  580,
1041
     1335, 1243,  682, 1335, 1243,  685,  685, 1243,  685, 1311,
1042
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
1043
1044
      469,  469,  469,  469,  469,  469,  469,  469,  469, 1311,
1045
     1311, 1311, 1311, 1311, 1243, 1243, 1323, 1311, 1311, 1311,
1046
     1243, 1243, 1243, 1243, 1243,  516,  516, 1325, 1325,  516,
1047
      516,  516, 1325,  516,  516,  516,  516,  516, 1299, 1299,
1048
     1299, 1299, 1299, 1303, 1303, 1303, 1303, 1303,  316,  316,
1049
      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1050
      316, 1303, 1303, 1303, 1303, 1303, 1311, 1311, 1311, 1243,
1051
     1336, 1337,  672, 1243,  774,  774, 1243,  774, 1243, 1243,
1052
     1243, 1243, 1243, 1243, 1338, 1338, 1339,  688, 1339, 1243,
1053
      790, 1339, 1243,  793,  793, 1243,  793, 1311, 1243, 1243,
1054
1055
     1243,  799,  799,  799,  799, 1243, 1243,  799,  799,  799,
1056
      799, 1243, 1243,  799,  799,  799,  799, 1243, 1243, 1243,
1057
     1243,  799, 1311, 1243, 1243, 1340, 1311, 1311, 1311, 1243,
1058
     1243, 1243, 1243, 1341, 1341,  833,  833, 1341, 1341,  833,
1059
      833, 1342, 1343, 1343, 1343, 1243,  846,  846,  846,  846,
1060
      846,  846,  846,  846, 1343, 1311, 1311, 1311, 1311, 1311,
1061
     1243, 1344, 1243, 1345,  777, 1345, 1345,  867, 1345, 1243,
1062
      870,  870, 1243,  870, 1243, 1243, 1243, 1243, 1346, 1346,
1063
     1347,  796, 1347, 1243,  884, 1347, 1243,  887,  887,  887,
1064
     1311, 1243,  892,  892,  892,  892,  892,  892,  892,  892,
1065
1066
      892,  892,  892,  892, 1311, 1243, 1243, 1348, 1311, 1311,
1067
     1311, 1243, 1243, 1243, 1243, 1243, 1243, 1349, 1349,  917,
1068
      917, 1349, 1349,  917,  917, 1350, 1351, 1351, 1351, 1351,
1069
     1351, 1243,  932,  932,  932,  932,  932,  932,  932,  932,
1070
     1351, 1311, 1311, 1311, 1311, 1243, 1243, 1243, 1243, 1352,
1071
     1352, 1353,  873, 1353, 1353,  955, 1353, 1243,  958,  958,
1072
     1243,  958, 1243, 1243, 1243, 1243, 1243, 1243, 1354, 1354,
1073
     1355, 1355, 1355,  973, 1355, 1311,  892,  892,  892,  892,
1074
      892, 1243, 1243,  892,  892,  892, 1243, 1243, 1243, 1243,
1075
      892, 1243, 1243, 1356, 1348, 1311, 1357, 1358, 1243, 1243,
1076
1077
     1243, 1243,  917, 1349, 1349,  917, 1349, 1349, 1351, 1351,
1078
     1351, 1351,  932,  932,  932,  932,  932,  932, 1311, 1311,
1079
     1311, 1311, 1311, 1311, 1243, 1243, 1243, 1243, 1243, 1243,
1080
     1359, 1359, 1360,  961, 1360, 1360, 1036, 1360, 1243, 1039,
1081
     1039, 1243, 1039, 1243, 1243, 1243, 1243, 1361, 1361, 1311,
1082
      892, 1243, 1243,  892, 1243, 1243,  892,  892,  892,  892,
1083
     1243, 1356, 1356, 1243, 1356, 1348, 1357, 1357, 1357, 1357,
1084
     1243, 1357, 1358, 1358, 1243, 1243, 1243, 1243, 1243, 1243,
1085
     1349,  917, 1349, 1349, 1351, 1351, 1351, 1351, 1351, 1351,
1086
      932,  932,  932,  932, 1311, 1311, 1311, 1243, 1243, 1243,
1087
1088
     1243, 1362, 1362, 1363, 1042, 1363, 1363, 1107, 1363, 1243,
1089
     1110, 1110, 1110, 1243, 1243, 1243, 1243, 1243, 1311,  892,
1090
     1243, 1243,  892,  892,  892, 1243, 1348, 1243, 1243, 1243,
1091
     1243, 1243,  917, 1349, 1349, 1351, 1351, 1351,  932,  932,
1092
      932, 1311, 1311, 1311, 1311, 1311, 1243, 1243, 1243, 1243,
1093
     1243, 1243, 1364, 1364, 1365, 1365, 1365, 1157, 1157,  892,
1094
     1243, 1243, 1243, 1243,  892, 1366, 1243, 1243, 1243, 1243,
1095
     1243, 1349, 1351, 1351, 1351, 1351, 1351,  932, 1311, 1311,
1096
     1311, 1243, 1243, 1243, 1243, 1367, 1367,  892, 1243, 1243,
1097
     1366, 1366, 1243, 1366, 1243, 1243, 1243, 1351, 1351, 1351,
1098
1099
     1311, 1311, 1311, 1311, 1311, 1243, 1243, 1243, 1243, 1243,
1100
      892, 1243, 1243, 1243, 1243, 1243, 1243, 1351, 1351, 1351,
1101
     1351, 1351, 1311, 1311, 1311,  892, 1243, 1243, 1243, 1351,
1102
     1351, 1351, 1311, 1311, 1311,  892, 1243, 1243, 1243, 1351,
1103
     1351, 1351,    0, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1104
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1105
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1106
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1107
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1108
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1109
1110
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1111
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1112
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1113
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1114
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1115
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1116
     1243, 1243, 1243, 1243, 1243, 1243, 1243
1117
    } ;
1118
1119
static const flex_int16_t yy_nxt[9611] =
1120
    {   0,
1121
       24,   25,   26,   24,   27,   25,   28,   29,   30,   24,
1122
       31,   32,   33,   24,   34,   35,   24,   24,   36,   37,
1123
       38,   39,   37,   37,   37,   37,   37,   37,   37,   40,
1124
       41,   42,   43,   44,   45,   46,   45,   47,   48,   49,
1125
       49,   50,   49,   51,   52,   53,   49,   54,   55,   56,
1126
       57,   49,   49,   49,   49,   49,   58,   59,   24,   60,
1127
       60,   60,   60,   60,   60,   24,   24,   24,   24,   24,
1128
       24,   24,   24,   61,   24,   24,   62,  159,  187,  158,
1129
       62,  159,  187,   63,   25,   80,  301,   81,   25,   82,
1130
      185,   83,   25,   80,  203,   81,   25,   82,   83,   83,
1131
1132
       25,   80,  158,   81,   25,   82,   83,   83,  204,  168,
1133
       64,   65,   83,   84,   83,   66,  201,  195,  158,  386,
1134
       83,   84,  196,   67,  376,  199,   68,   69,   83,   84,
1135
      169,   69,  105,   26,   70,   27,  105,  106,  107,   85,
1136
      200,   71,  158,  190,   72,  225,  187,   85,  105,   26,
1137
      187,   27,  105,  106,  107,   85,  191,  170,   24,   73,
1138
      383,   45,  282,   25,   80,  286,   81,   25,   82,   74,
1139
       83,   75,  293,   76,   49,  187,   49,   83,  193,  187,
1140
      262,   87,   88,   77,   89,   87,   90,  108,   91,   92,
1141
      255,   83,   84,  181,  181,  181,  181,  181,  182,   78,
1142
1143
       69,  256,  187,  108,   69,   87,   88,   70,   89,   87,
1144
       90,  230,   91,   92,   71,  230,  254,   72,   85,  294,
1145
       25,   26,   42,   27,   25,  132,  133,  254, 1243,  187,
1146
      260,   24,   73,  187,   45,  158,   93,  187,  597,  227,
1147
      192,  187,   74,  227,   75,  213,   76,   49,  247,   49,
1148
      295,  159,  247,  228,  214,  159,   77,  223,  282,  296,
1149
       93,   25,   26,   42,   27,   25,  132,  133,  316,  285,
1150
      158,  299,   78,   25,   26,  134,   27,   25,   28,  318,
1151
       94,  180,  180,  180,  180,  180,  180,  180,  180,  180,
1152
      180,  190,  158,  316,  187,  163,  319,  334,  187,  230,
1153
1154
      174,  174,  213,  230,  191,  174,  174, 1213,  344,  250,
1155
      206,  239,  243,  250,  205,  206,  134,  243,  205,  346,
1156
      222,  298,  158,  258,  206,  174,  243,  258,   95,  388,
1157
       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
1158
       96,   96,   96,   96,   96,   96,   96,   96,   25,   26,
1159
      175,   27,   25,   28,  157,   94,  179,  179,  179,  179,
1160
      179,  179,  179,  179,  179,  179,  229,  158, 1243,  166,
1161
      166,  166,  166,  166,  166,  166,  166,  166,  166,  263,
1162
      264,  347,  265,  263,  293,  259,  230,  261,  599,  206,
1163
      230,  261,  279,  279,  279,  279,  279,  280,  205,  206,
1164
1165
      215,  243,  205,   95,  215,   96,   96,   96,   96,   96,
1166
       96,   96,   96,   96,   96,   96,   96,   96,   96,   96,
1167
       96,   96,   96,   25,   26,  863,   27,   25,   28,   98,
1168
       94,  294, 1243,  168,  216,  217,   99,  100,  101,  218,
1169
      232,  232,  260,  158,  157,  232,  232,  219,  158,  584,
1170
      220,  375,  102,  298,  267,  278,  278,  278,  278,  278,
1171
      278,  278,  278,  278,  278,  232, 1243,  168,  277,  277,
1172
      277,  277,  277,  277,  277,  277,  277,  277,  103,   25,
1173
       26,  268,   27,   25,   28,   98,   94,  163,  267,  334,
1174
      233,  385,   99,  100,  101,  312,  312,  312,  312,  312,
1175
1176
      312,  312,  312,  312,  312,  446,  344,  334,  102,  313,
1177
      313,  313,  313,  313,  314,  303,  300,  462,  311,  311,
1178
      311,  311,  311,  311,  311,  311,  311,  311,  342,  342,
1179
      342,  342,  342,  342,  103,   42,   25,   26,   42,   27,
1180
       25,   28,   42,   42,   42,  109,   32,   33,   42,  110,
1181
       35,   42,   42,  111,  112,  113,  114,  112,  112,  112,
1182
      112,  112,  112,  112,   40,  115,   42,   42,  116,  117,
1183
      117,  117,  118,  119,  120,  120,  121,  120,  122,  123,
1184
      124,  120,  125,  120,  126,  120,  120,  120,  120,  120,
1185
      120,   95,  127,   42,  128,  128,  128,  128,  128,  128,
1186
1187
      129,  129,  129,  129,  129,  129,  129,  129,  130,  129,
1188
      129,  135,   25,   26,  135,   27,   25,   28,   29,   42,
1189
      135,  136,   32,   33,  135,  137,   35,  135,  135,  138,
1190
      139,  140,  141,  139,  139,  139,  139,  139,  139,  139,
1191
       40,   41,   42,  135,  142,  143,  143,  143,  144,  145,
1192
      146,  146,  147,  146,  148,  149,  150,  146,  151,  146,
1193
      152,  146,  146,  146,  146,  146,  146,  153,  154,  135,
1194
      155,  155,  155,  155,  155,  155,  135,  135,  135,  135,
1195
      135,  135,  135,  135,  156,  135,  135,  163,  158,  164,
1196
      307,  307,  390,  247,  394,  307,  307,  247, 1105,  205,
1197
1198
      206,  165,  243,  205,  166,  166,  166,  166,  166,  166,
1199
      166,  166,  166,  166,  176,  307,  177,  177,  177,  177,
1200
      177,  177,  177,  177,  177,  177,  178,  301,  497,  168,
1201
      179,  179,  179,  179,  179,  179,  498,  331,  206,  391,
1202
      308,  157,  157,  157,  157,  157,  332,  395,  157,  157,
1203
     1243,  395,  157,  158,  449,  158,  179,  179,  179,  179,
1204
      179,  179,  157,  485,  486,  157,  157,  157,  157,  387,
1205
      301,  157,  157,  444, 1167,  157,  157,  268,  157,  157,
1206
      157,  186,  186,  186,  186,  186,  186,  186,  186,  186,
1207
      186,  178,  301,  158,  157,  186,  186,  186,  186,  186,
1208
1209
      186,  187,  187,  187,  187,  188,  187,  187,  187,  189,
1210
      187,  187,  187,  187,  187,  187,  187,  187,  158,  157,
1211
      187,  179,  179,  179,  179,  179,  179,  157,  157,  157,
1212
      157,  157,  157,  157,  157,  157,  157,  157,  187,  187,
1213
      187,  187,  187,  187,  187,  187,  187,  187, 1243,  163,
1214
      158,  334,  187,  187,  187,  187,  187,  187, 1243,  262,
1215
      205,  206,  187,  243,  205,  496,  187,  166,  166,  166,
1216
      166,  166,  166,  166,  166,  166,  166,  583,  157,  157,
1217
      157,  157,  157,  157,  205,  206, 1243,  207,  208,  157,
1218
      157,  157,  261,  297,  157,  157,  261,  297,  157,  166,
1219
1220
      166,  166,  166,  166,  166,  166,  166,  166,  166,  260,
1221
      158,  863,  157,  157,  157,  210,  383,  382,  299,  210,
1222
      210,  210,  301,  211,  384,  210,  210,  336,  445,  210,
1223
      337,  337,  337,  337,  337,  337,  337,  337,  337,  337,
1224
      163,  158,  448,  210,  210,  210,  468,  260,  298,  167,
1225
      167,  167,  167,  167, 1105, 1243,  167,  167,  174,  174,
1226
      167,  232,  232,  174,  174,  227,  232,  232,  298,  227,
1227
      212,  163,  587,  164,  167,  167,  167,  205,  206,  228,
1228
      243,  205,  158,  174,  504,  165,  232,  158,  166,  166,
1229
      166,  166,  166,  166,  166,  166,  166,  166,  171,  171,
1230
1231
      171,  171,  171,  383,  158,  171,  171,  158,  175,  171,
1232
      383,  233,  338,  339,  340,  338,  338,  338,  338,  338,
1233
      338,  338,  508,  171,  171,  171,  342,  342,  342,  342,
1234
      342,  342,  342,  342,  342,  342,  221,  236, 1034,  210,
1235
      417,  236,  236,  236,  507,  237,  395,  236,  236,  158,
1236
      395,  236,  342,  342,  342,  342,  342,  342,  342,  342,
1237
      342,  342,  163,  178,  448,  236,  236,  236,  359,  360,
1238
      158, 1243,  361,  506,  362,  363, 1243,  163,  364,  334,
1239
      365,  366,  205,  206,  215,  243,  205,  294,  215,  695,
1240
      158,  391,  238,  242,  206,  588,  243,  242,  244, 1147,
1241
1242
      245,  210,  301,  236,  157,  244,  157,  245,  209,  373,
1243
      235,  392,  263,  264, 1243,  265,  263,  558,  216,  217,
1244
      158,  245,  245,  218,  205,  206,  607,  243,  205,  608,
1245
      168,  219,  582, 1243,  220, 1243,  503,  158,  166,  166,
1246
      166,  166,  166,  166,  166,  166,  166,  166,  245,  244,
1247
      163, 1243,  164,  359,  360,  697,  374,  361,  393,  362,
1248
      363,  158,  268,  364,  251,  365,  293, 1243, 1243, 1243,
1249
     1243, 1243, 1243, 1243, 1243, 1243, 1243,  269,  268,  254,
1250
      269,  530,  531,  446,  532,  448,  269,  269,  616, 1243,
1251
      269, 1243, 1243,  269,  269, 1243, 1243, 1243, 1243, 1243,
1252
1253
     1243, 1243, 1243, 1243, 1243,  595,  699,  271,  253,  269,
1254
      589,  158,  253,  294,  253,  253,  400,  400,  400,  400,
1255
      400,  400,  253,  396,  397,  398,  396,  396,  396,  396,
1256
      396,  396,  396,  272,  269,  269,  174,  253, 1243,  174,
1257
      344, 1178,  174,  174, 1243,  174,  174,  174,  174,  174,
1258
      598,  462,  174,  174,  266,  266,  266,  266,  566,  566,
1259
      566,  266,  266, 1243,  604,  266,  271,  174,  174,  400,
1260
      400,  400,  400,  400,  400,  400,  400,  400,  400,  605,
1261
      266,  266,  400,  400,  400,  400,  400,  400,  400,  400,
1262
      400,  400,  274,  174,  174,  271, 1243, 1172,  275,  271,
1263
1264
      276,  276,  276,  276,  276,  276,  276,  276,  276,  276,
1265
      178,  271,  178,  606,  277,  277,  277,  277,  277,  277,
1266
      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,
1267
      271,  271,  271,  271,  271,  271,  271, 1243,  158,  301,
1268
      277,  277,  277,  277,  277,  277,  271,  271,  271,  271,
1269
      271,  271,  271,  271,  271,  271,  271, 1243,  596,  271,
1270
      271,  271,  271,  271,  271,  271,  271,  271,  271, 1243,
1271
     1243, 1243, 1243,  271,  271,  271,  271,  271,  271,  344,
1272
      594,  269,  269,  269,  269,  269,  610,  696,  269,  269,
1273
      466,  600,  269,  425,  425,  425,  425,  425,  425,  271,
1274
1275
      271,  271,  271,  271,  271,  271,  269,  269,  269,  271,
1276
      281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
1277
      178,  271,  158, 1243,  281,  281,  281,  281,  281,  281,
1278
      282,  282,  282,  282,  283,  282,  282,  282,  282,  282,
1279
      282,  282,  282,  282,  282,  282,  282,  603,  344,  284,
1280
      277,  277,  277,  277,  277,  277,  271,  271,  271,  271,
1281
      271,  271,  271,  271,  271,  271,  271,  282,  282,  282,
1282
      282,  282,  282,  282,  282,  282,  282, 1243, 1243,  158,
1283
      344,  282,  282,  282,  282,  282,  282,  601,  408,  409,
1284
      637,  282,  410,  638,  411,  412,  383, 1243,  413,  585,
1285
1286
      414,  493,  494,  585,  495,  602, 1034,  271,  271,  271,
1287
      271,  271,  271,  309,  661,  310,  310,  310,  310,  310,
1288
      310,  310,  310,  310,  310,  178,  390,  586, 1243,  311,
1289
      311,  311,  311,  311,  311,  592,  158,  174,  953,  592,
1290
      590,  174,  307,  307,  174,  591,  158,  307,  307,  626,
1291
      301,  174,  301,  611,  627,  311,  311,  311,  311,  311,
1292
      311,  300,  609,  593,  300,  174,  174,  307,  187,  158,
1293
      300,  300,  902,  391,  300,  300,  618,  300,  300,  300,
1294
      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
1295
      178,  158,  308,  300,  315,  315,  315,  315,  315,  315,
1296
1297
      316,  316,  316,  316,  317,  316,  316,  316,  316,  316,
1298
      316,  316,  316,  316,  316,  316,  316,  301,  300,  316,
1299
      311,  311,  311,  311,  311,  311,  300,  300,  300,  300,
1300
      300,  300,  300,  300,  300,  300,  300,  316,  316,  316,
1301
      316,  316,  316,  316,  316,  316,  316, 1243,  893,  187,
1302
     1140,  316,  316,  316,  316,  316,  316,  555,  556,  534,
1303
      557,  316,  421,  422,  423,  421,  421,  421,  421,  421,
1304
      421,  421,  205,  206,  344,  243,  205,  300,  300,  300,
1305
      300,  300,  300,  205,  206,  462,  326,  327,  300,  300,
1306
      300,  647,  301,  300,  300, 1139,  648,  300,  301,  301,
1307
1308
      425,  425,  425,  425,  425,  425,  425,  425,  425,  425,
1309
      660,  300,  300,  300,  210,  158,  301, 1243,  210,  210,
1310
      210, 1243,  329,  662,  210,  210,  178,  301,  210,  300,
1311
      300,  300,  300,  300,  690,  702,  300,  300,  692,  301,
1312
      300, 1243,  210,  210,  210,  575,  575,  575,  575,  575,
1313
      576, 1243, 1243,  158,  300,  300,  300,  163,  694,  334,
1314
      302,  302,  302,  302,  302,  693,  691,  302,  302,  330,
1315
      174,  302,  617,  157,  173,  157,  157,  173,  838,  658,
1316
      157,  157,  659,  839,  173,  302,  302,  302,  425,  425,
1317
      425,  425,  425,  425,  425,  425,  425,  425,  173,  173,
1318
1319
      157,  176, 1243,  341,  341,  341,  341,  341,  341,  341,
1320
      341,  341,  341,  178,  301,  570,  344,  341,  341,  341,
1321
      341,  341,  341,  615, 1243,  708, 1243,  572,  304,  304,
1322
      304,  304,  304, 1243,  700,  304,  304, 1243, 1243,  304,
1323
      158,  799, 1243,  341,  341,  341,  341,  341,  341,  157,
1324
     1243,  706,  157,  304,  304,  304,  698, 1243,  157,  157,
1325
      709, 1243,  157,  157,  707,  157,  157,  157,  348,  348,
1326
      348,  348,  348,  348,  348,  348,  348,  348,  178, 1135,
1327
      625,  157,  348,  348,  348,  348,  348,  348,  187,  187,
1328
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1329
1330
      187,  187,  187,  187,  187,  158,  157,  187,  341,  341,
1331
      341,  341,  341,  341,  157,  157,  157,  157,  157,  157,
1332
      157,  157,  157,  157,  157,  187,  187,  187,  187,  187,
1333
      187,  187,  187,  187,  187, 1243, 1243,  344, 1243,  187,
1334
      187,  187,  187,  187,  187,  433,  434,  187,  572,  435,
1335
      895,  436,  437,  210, 1243,  438,  300,  439,  703, 1243,
1336
      328,  442,  713,  710, 1243,  157,  157,  157,  157,  157,
1337
      157,  210,  704,  711, 1243,  210,  210,  210, 1243,  211,
1338
      705,  210,  210,  701, 1243,  210,  337,  337,  337,  337,
1339
      337,  337,  337,  337,  337,  337,  158,  158, 1243,  210,
1340
1341
      210,  210, 1243,  712,  158,  805,  802, 1226,  443,  337,
1342
      337,  337,  337,  337,  337,  337,  337,  337,  337,  624,
1343
      592,  232,  187,  158,  592,  232,  212,  232,  232,  714,
1344
      157,  231,  157,  157,  231,  232,  158,  157,  157,  158,
1345
      509,  231,  510,  510,  510,  510,  510,  510,  593,  232,
1346
      232,  718,  762,  158,  158,  231,  231,  157,  236,  163,
1347
      720,  334,  236,  236,  236,  719,  237,  765,  236,  236,
1348
     1134,  509,  236,  510,  510,  510,  510,  510,  510,  510,
1349
      510,  510,  510,  764,  763,  301,  236,  236,  236,  509,
1350
      663,  511,  511,  511,  511,  511,  511,  511,  511,  511,
1351
1352
      511,  509,  301,  512,  512,  512,  512,  512,  513,  510,
1353
      510,  510,  510,  238,  269,  301,  301,  269,  896,  187,
1354
      301,  307, 1133,  269,  269,  307,  766,  269,  307,  158,
1355
      269,  269,  717, 1243,  344,  307,  449, 1243,  450,  450,
1356
      450,  450,  450,  450,  271,  462,  269, 1243, 1075,  307,
1357
      307,  559,  560,  561,  559,  559,  559,  559,  559,  559,
1358
      559, 1243,  683,  683,  683,  683,  683,  684,  822,  628,
1359
      272,  269,  269,  174,  585,  158,  174, 1075,  585,  174,
1360
      174,  158,  174,  174,  174,  174,  174,  798,  158,  174,
1361
      174,  564,  564,  565,  566,  566,  566,  566,  566,  566,
1362
1363
      566,  459,  586,  271,  174,  174,  574,  574,  574,  574,
1364
      574,  574,  574,  574,  574,  574, 1243,  344,  573,  573,
1365
      573,  573,  573,  573,  573,  573,  573,  573,  572,  274,
1366
      174,  174,  275,  744,  399,  399,  399,  399,  399,  399,
1367
      399,  399,  399,  399,  178, 1243,  984, 1243,  399,  399,
1368
      399,  399,  399,  399,  619,  620,  621,  619,  619,  619,
1369
      619,  619,  619,  619,  803,  804, 1243,  187,  898,  592,
1370
      570,  344,  301,  592,  399,  399,  399,  399,  399,  399,
1371
      271,  187,  572,  808,  271,  401,  401,  401,  401,  401,
1372
      401,  401,  401,  401,  401,  178,  271,  593, 1243,  401,
1373
1374
      401,  401,  401,  401,  401,  282,  282,  282,  282,  282,
1375
      282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
1376
      282,  282,  814,  187,  284,  399,  399,  399,  399,  399,
1377
      399,  271,  271,  271,  271,  271,  271,  271,  271,  271,
1378
      271,  271,  282,  282,  282,  282,  282,  282,  282,  282,
1379
      282,  282, 1243,  344,  991, 1243,  282,  282,  282,  282,
1380
      282,  282,  509,  816,  510,  510,  510,  510,  510,  510,
1381
      510,  510,  510,  510,  534,  187,  535,  535,  535,  535,
1382
      535,  535,  271,  271,  271,  271,  271,  271,  307,  158,
1383
      953,  300,  306,  300,  300,  306, 1243, 1243,  300,  300,
1384
1385
      823,  509,  306,  510,  510,  510,  510,  510,  510,  510,
1386
      510,  510,  510,  301,  817,  809,  306,  306,  300,  309,
1387
      901,  424,  424,  424,  424,  424,  424,  424,  424,  424,
1388
      424,  178,  187, 1243, 1243,  424,  424,  424,  424,  424,
1389
      424, 1243,  158,  585,  592, 1243,  810,  585,  592,  815,
1390
     1243,  811,  158,  827, 1243,  158,  570,  344,  301,  891,
1391
      865,  424,  424,  424,  424,  424,  424,  300,  680, 1243,
1392
      300,  586,  593,  828, 1025,  894,  300,  300, 1243,  631,
1393
      300,  300,  187,  300,  300,  300,  426,  426,  426,  426,
1394
      426,  426,  426,  426,  426,  426,  178, 1091,  633,  300,
1395
1396
      426,  426,  426,  426,  426,  426,  316,  316,  316,  316,
1397
      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1398
      316,  316,  316,  301,  300,  316,  424,  424,  424,  424,
1399
      424,  424,  300,  300,  300,  300,  300,  300,  300,  300,
1400
      300,  300,  300,  316,  316,  316,  316,  316,  316,  316,
1401
      316,  316,  316, 1243, 1243,  344, 1084,  316,  316,  316,
1402
      316,  316,  316, 1243, 1243,  158,  680, 1243, 1243,  163,
1403
     1243,  334,  899, 1243, 1243,  187, 1243, 1243,  187,  158,
1404
     1243,  900,  910,  300,  300,  300,  300,  300,  300,  210,
1405
      829, 1243, 1243,  210,  210,  210,  921,  329, 1243,  210,
1406
1407
      210, 1243, 1243,  210, 1243,  629, 1243,  851,  282,  301,
1408
      632,  187,  852,  630,  344,  344,  897,  210,  210,  210,
1409
      855,  158,  634,  158,  909,  572,  680, 1083,  635,  826,
1410
     1243,  642,  643,  644,  642,  642,  642,  642,  642,  642,
1411
      642,  905, 1081,  856,  330,  449,  636,  450,  450,  450,
1412
      450,  450,  450,  450,  450,  450,  450,  669,  669,  669,
1413
      669,  669,  669,  669,  669,  669,  669,  459,  301,  674,
1414
      675,  676,  674,  674,  674,  674,  674,  674,  674,  316,
1415
      282,  158,  158,  933,  158,  449,  920,  451,  451,  451,
1416
      451,  451,  451,  451,  451,  451,  451,  581,  581,  581,
1417
1418
      581,  581,  581,  581,  581,  581,  581,  570,  344,  678,
1419
      678,  678,  678,  678,  678,  163,  282,  334,  316,  572,
1420
      316,  925,  938, 1061,  158,  449,  935,  452,  452,  452,
1421
      452,  452,  453,  450,  450,  450,  450,  682,  682,  682,
1422
      682,  682,  682,  682,  682,  682,  682, 1243,  936,  681,
1423
      681,  681,  681,  681,  681,  681,  681,  681,  681,  158,
1424
      316,  937,  927,  316,  158,  454,  454,  454,  454,  454,
1425
      454,  454,  454,  454,  454,  178,  908,  911,  187,  454,
1426
      454,  454,  454,  454,  454,  721,  924,  722,  722,  722,
1427
      722,  722,  722,  722,  722,  722,  722,  282,  316, 1064,
1428
1429
      301, 1065,  158,  940,  301,  454,  454,  454,  454,  454,
1430
      454,  456,  457,  458,  458,  458,  458,  458,  458,  458,
1431
      458,  459,  941,  316, 1015,  460,  460,  460,  460,  460,
1432
      460,  721,  863,  723,  723,  723,  723,  723,  723,  723,
1433
      723,  723,  723, 1243,  865, 1017,  963, 1243,  316,  570,
1434
      344,  460,  460,  460,  460,  460,  460,  344,  463,  464,
1435
      465,  463,  463,  463,  463,  463,  463,  463,  466, 1243,
1436
      344, 1243,  467,  467,  467,  467,  467,  467,  721,  939,
1437
      724,  724,  724,  724,  724,  725,  722,  722,  722,  722,
1438
      316,  316, 1093,  570,  344,  726,  570,  344,  467,  467,
1439
1440
      467,  467,  467,  467,  157,  680,  800,  157,  788,  158,
1441
      800,  978,  865,  157,  157,  976,  773,  157,  157,  187,
1442
      157,  157,  157,  469,  469,  469,  469,  469,  469,  469,
1443
      469,  469,  469,  178,  801,  301,  157,  469,  469,  469,
1444
      469,  469,  469,  187,  187,  187,  187,  187,  187,  187,
1445
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1446
      158,  157,  187,  454,  454,  454,  454,  454,  454,  157,
1447
      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1448
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1449
     1243, 1243,  344, 1018,  187,  187,  187,  187,  187,  187,
1450
1451
     1243, 1243,  981,  788, 1243, 1243, 1243, 1014,  344,  187,
1452
     1243, 1243, 1008, 1243, 1243, 1243,  344, 1243,  865,  680,
1453
      157,  157,  157,  157,  157,  157,  210,  788, 1243, 1243,
1454
      210,  210,  210, 1120,  211,  727,  210,  210, 1243, 1243,
1455
      210, 1243,  731,  187,  730,  979, 1243,  732, 1243, 1243,
1456
     1243,  187, 1243, 1243,  210,  210,  210, 1243,  980, 1082,
1457
      986, 1243,  282,  158, 1007, 1006,  187, 1243,  187,  806,
1458
      733, 1243,  985,  806, 1243,  812, 1243, 1243,  282,  812,
1459
      996,  212,  210,  187,  736, 1243,  210,  210,  210,  210,
1460
      373,  734,  210,  210,  735, 1243,  210,  807,  344, 1057,
1461
1462
     1005, 1092,  737,  813,  316, 1004, 1019,  187,  738,  788,
1463
      210,  210,  210,  767,  768,  769,  767,  767,  767,  767,
1464
      767,  767,  767,  663, 1019,  664,  664,  664,  664,  664,
1465
      664,  791,  791,  791,  791,  791,  792,  212,  236,  570,
1466
      344,  912,  236,  236,  236,  158,  237, 1211,  236,  236,
1467
      158,  788,  236,  570,  344,  786,  786,  786,  786,  786,
1468
      786, 1054,  158,  158,  187,  680,  236,  236,  236,  779,
1469
      187,  780,  780,  780,  780,  780,  780,  780,  780,  780,
1470
      780,  779, 1016,  781,  781,  781,  781,  781,  781,  781,
1471
      781,  781,  781,  238,  236,  316, 1059,  158,  236,  236,
1472
1473
      236,  236,  392,  187,  236,  236,  993,  779,  236,  782,
1474
      782,  782,  782,  782,  783,  780,  780,  780,  780,  163,
1475
      992,  334,  236,  236,  236,  689,  689,  689,  689,  689,
1476
      689,  689,  689,  689,  689,  790,  790,  790,  790,  790,
1477
      790,  790,  790,  790,  790, 1094,  570,  344,  316,  238,
1478
      514,  514,  514,  514,  514,  514,  514,  514,  514,  514,
1479
      178, 1126, 1188, 1065,  514,  514,  514,  514,  514,  514,
1480
     1243,  863,  789,  789,  789,  789,  789,  789,  789,  789,
1481
      789,  789,  187,  865, 1066,  818,  570,  344,  344,  818,
1482
      514,  514,  514,  514,  514,  514,  271,  158,  882,  882,
1483
1484
      271,  515,  515,  515,  515,  515,  515,  515,  515,  515,
1485
      515,  178,  271,  819,  187,  515,  515,  515,  515,  515,
1486
      515,  282,  282,  282,  282,  282,  282,  282,  282,  282,
1487
      282,  282,  282,  282,  282,  282,  282,  282,  316, 1141,
1488
      284,  514,  514,  514,  514,  514,  514,  271,  271,  271,
1489
      271,  271,  271,  271,  271,  271,  271,  271,  282,  282,
1490
      282,  282,  282,  282,  282,  282,  282,  282, 1243, 1193,
1491
     1236, 1194,  282,  282,  282,  282,  282,  282,  830,  831,
1492
      832,  830,  830,  830,  830,  830,  830,  830,  820, 1123,
1493
      800,  187,  820,  863,  800,  773,  568,  187,  271,  271,
1494
1495
      271,  271,  271,  271,  534,  953,  535,  535,  535,  535,
1496
      535,  535,  535,  535,  535,  535,  821,  721,  801,  722,
1497
      722,  722,  722,  722,  722,  722,  722,  722,  722,  721,
1498
     1243,  722,  722,  722,  722,  722,  722,  722,  722,  722,
1499
      722, 1243,  953,  301,  534, 1243,  536,  536,  536,  536,
1500
      536,  536,  536,  536,  536,  536,  721,  158,  722,  722,
1501
      722,  722,  722,  722, 1085,  934,  926,  863,  806, 1243,
1502
     1243, 1243,  806, 1119, 1243, 1243,  812,  833, 1243,  953,
1503
      812,  818, 1243,  301,  534,  818,  537,  537,  537,  537,
1504
      537,  538,  535,  535,  535,  535,  807, 1243, 1243, 1243,
1505
1506
      158, 1243, 1051,  301,  813, 1058, 1243,  863,  820,  819,
1507
      800, 1050,  820,  187,  800,  836,  187,  923,  837, 1034,
1508
      922,  919,  841,  301,  300, 1243,  539,  539,  539,  539,
1509
      539,  539,  539,  539,  539,  539,  821,  918,  801, 1125,
1510
      539,  539,  539,  539,  539,  539,  187,  994,  163,  840,
1511
      334,  994,  907, 1243,  344,  843,  844,  845,  843,  843,
1512
      843,  843,  843,  843,  843,  882,  539,  539,  539,  539,
1513
      539,  539,  540,  540,  540,  540,  540,  540,  540,  540,
1514
      540,  540, 1060,  570,  344,  906,  540,  540,  540,  540,
1515
      540,  540,  301,  187,  744,  882,  745,  745,  745,  745,
1516
1517
      745,  745,  806,  812,  183,  183,  806,  812,  995,  344,
1518
      183, 1124,  539,  539,  539,  539,  539,  539,  210,  187,
1519
      882,  818,  210,  210,  210,  818,  329, 1165,  210,  210,
1520
      807,  813,  210,  301,  820,  187, 1085, 1142,  820,  868,
1521
      868,  868,  868,  868,  869,  187,  210,  210,  210,  819,
1522
      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
1523
     1173, 1201,  821,  867,  867,  867,  867,  867,  867,  867,
1524
      867,  867,  867,  330,  210,  301,  158, 1210,  210,  210,
1525
      210,  210,  442, 1210,  210,  210,  904, 1243,  210,  866,
1526
      866,  866,  866,  866,  866,  866,  866,  866,  866,  301,
1527
1528
      158,  903,  210,  210,  210,  875,  876,  877,  875,  875,
1529
      875,  875,  875,  875,  875,  779, 1243,  780,  780,  780,
1530
      780,  780,  780,  780,  780,  780,  780,  800, 1034,  330,
1531
      449,  800,  450,  450,  450,  450,  450,  450,  450,  450,
1532
      450,  450,  779,  779,  780,  780,  780,  780,  780,  780,
1533
      780,  780,  780,  780,  779,  801,  780,  780,  780,  780,
1534
      780,  780,  885,  885,  885,  885,  885,  886, 1218,  158,
1535
      449,  773,  450,  450,  450,  450,  450,  450,  450,  450,
1536
      450,  450,  797,  797,  797,  797,  797,  797,  797,  797,
1537
      797,  797,  570,  344,  880,  880,  880,  880,  880,  880,
1538
1539
      568,  459, 1063, 1064,  788, 1065, 1063,  301,  301,  158,
1540
      570,  344,  571,  571,  571,  571,  571,  571,  571,  571,
1541
      571,  571,  572,  163,  301,  334,  573,  573,  573,  573,
1542
      573,  573,  884,  884,  884,  884,  884,  884,  884,  884,
1543
      884,  884,  806,  812,  818,  301,  806,  812,  818, 1212,
1544
      301, 1194,  573,  573,  573,  573,  573,  573,  344,  577,
1545
      578,  579,  577,  577,  577,  577,  577,  577,  577,  580,
1546
      807,  813,  819,  581,  581,  581,  581,  581,  581, 1243,
1547
      854,  883,  883,  883,  883,  883,  883,  883,  883,  883,
1548
      883,  853,  820, 1127, 1063, 1064,  820, 1065, 1063,  581,
1549
1550
      581,  581,  581,  581,  581,  157,  850,  982,  157, 1166,
1551
      163,  982,  334, 1166,  157,  157,  849,  848,  157,  157,
1552
      821,  157,  157,  157,  187,  187,  187,  187,  187,  187,
1553
      187,  187,  187,  187,  178,  983,  847,  157,  187,  187,
1554
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1555
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1556
      187,  158,  157,  187,  157,  157,  157,  157,  157,  157,
1557
      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1558
      157,  622,  622,  622,  622,  622,  622,  622,  622,  622,
1559
      622,  178,  252,  252,  252,  622,  622,  622,  622,  622,
1560
1561
      622,  912,  913,  913,  913,  913,  913,  913,  913,  913,
1562
      913,  913,  956,  956,  956,  956,  956,  957,  863,  846,
1563
      842,  622,  622,  622,  622,  622,  622,  271,  835,  834,
1564
     1034,  271,  623,  623,  623,  623,  623,  623,  623,  623,
1565
      623,  623,  178,  271,  721,  825,  623,  623,  623,  623,
1566
      623,  623,  282,  282,  282,  282,  282,  282,  282,  282,
1567
      282,  282,  282,  282,  282,  282,  282,  282,  282,  824,
1568
      158,  284,  622,  622,  622,  622,  622,  622,  271,  271,
1569
      271,  271,  271,  271,  271,  271,  271,  271,  271,  585,
1570
      252,  252,  252,  585,  912,  914,  914,  914,  914,  914,
1571
1572
      914,  914,  914,  914,  914,  158,  863,  282,  282,  282,
1573
      282,  282,  282,  282,  282,  282,  282,  586, 1105,  158,
1574
      158,  282,  282,  282,  282,  282,  282,  912,  915,  915,
1575
      915,  915,  915,  916,  913,  913,  913,  913, 1243,  773,
1576
      856,  857,  857,  857,  857,  857,  857,  271,  271,  271,
1577
      271,  271,  271,  534, 1243,  535,  535,  535,  535,  535,
1578
      535,  535,  535,  535,  535,  568, 1105,  459,  942,  943,
1579
      944,  945,  942,  942,  942,  942,  942,  942,  158,  947,
1580
      948,  949,  947,  947,  947,  947,  947,  947,  947,  459,
1581
      761,  760,  301,  534,  759,  535,  535,  535,  535,  535,
1582
1583
      535,  535,  535,  535,  535,  158,  874,  874,  874,  874,
1584
      874,  874,  874,  874,  874,  874,  863, 1160,  951,  951,
1585
      951,  951,  951,  951, 1186, 1186, 1186, 1186,  865,  187,
1586
      758,  757,  301,  663,  756,  664,  664,  664,  664,  664,
1587
      664,  664,  664,  664,  664,  955,  955,  955,  955,  955,
1588
      955,  955,  955,  955,  955, 1243,  863,  954,  954,  954,
1589
      954,  954,  954,  954,  954,  954,  954,  755, 1105,  754,
1590
      987,  753,  158,  663,  987,  665,  665,  665,  665,  665,
1591
      665,  665,  665,  665,  665,  963,  752,  964,  964,  964,
1592
      964,  964,  964,  964,  964,  964,  964,  963,  988,  965,
1593
1594
      965,  965,  965,  965,  965,  965,  965,  965,  965,  751,
1595
      750,  749,  158,  663,  743,  666,  666,  666,  666,  666,
1596
      667,  664,  664,  664,  664,  963,  742,  966,  966,  966,
1597
      966,  966,  967,  964,  964,  964,  964,  890,  890,  890,
1598
      890,  890,  890,  890,  890,  890,  890, 1192, 1193,  741,
1599
     1194, 1192,  158,  570,  344,  678,  678,  678,  678,  678,
1600
      678,  678,  678,  678,  678,  572,  740,  739,  729,  677,
1601
      677,  677,  677,  677,  677,  570,  344,  970,  970,  970,
1602
      970,  970,  970,  728, 1243, 1243,  497,  882,  974,  974,
1603
      974,  974,  974,  975,  716,  677,  677,  677,  677,  677,
1604
1605
      677,  570,  344,  679,  679,  679,  679,  679,  679,  679,
1606
      679,  679,  679,  680,  715, 1243,  672,  681,  681,  681,
1607
      681,  681,  681,  973,  973,  973,  973,  973,  973,  973,
1608
      973,  973,  973,  999, 1000, 1001, 1002,  999,  999,  999,
1609
      999,  999,  999,  681,  681,  681,  681,  681,  681,  344,
1610
      685,  686,  687,  685,  685,  685,  685,  685,  685,  685,
1611
      688,  997,  568,  459,  689,  689,  689,  689,  689,  689,
1612
     1243,  668,  972,  972,  972,  972,  972,  972,  972,  972,
1613
      972,  972,  183,  183,  997,  459,  997,  998,  183,  184,
1614
      689,  689,  689,  689,  689,  689,  744,  657,  745,  745,
1615
1616
      745,  745,  745,  745,  745,  745,  745,  745,  656,  982,
1617
      655,  158,  654,  982, 1037, 1037, 1037, 1037, 1037, 1038,
1618
      987,  653,  652,  651,  987,  912,  913,  913,  913,  913,
1619
      913,  913,  650,  649,  646,  301,  744,  983,  746,  746,
1620
      746,  746,  746,  746,  746,  746,  746,  746,  988,  912,
1621
      913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
1622
      989,  645,  178,  641,  989,  963,  187,  964,  964,  964,
1623
      964,  964,  964,  640,  639,  301,  744,  187,  747,  747,
1624
      747,  747,  747,  748,  745,  745,  745,  745,  990,  912,
1625
      913,  913,  913,  913,  913,  913,  913,  913,  913,  913,
1626
1627
      982,  987,  989,  509,  982,  987,  989,  927,  928,  928,
1628
      928,  928,  928,  928,  497,  301,  663,  187,  664,  664,
1629
      664,  664,  664,  664,  664,  664,  664,  664,  983,  988,
1630
      990, 1009, 1010, 1011, 1012, 1009, 1009, 1009, 1009, 1009,
1631
     1009,  614,  982,  987,  989,  301,  982,  987,  989,  282,
1632
      282,  282,  497,  613,  497,  158,  663,  612,  664,  664,
1633
      664,  664,  664,  664,  664,  664,  664,  664,  301, 1243,
1634
      983,  988,  990, 1025, 1243, 1026, 1026, 1026, 1026, 1026,
1635
     1026, 1026, 1026, 1026, 1026, 1108, 1108, 1108, 1108, 1108,
1636
     1109,  316,  316,  316,  459,  158,  774,  775,  776,  774,
1637
1638
      774,  774,  774,  774,  774,  774,  777,  568,  459,  184,
1639
      778,  778,  778,  778,  778,  778, 1025,  554, 1027, 1027,
1640
     1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,  570,  344,
1641
     1049, 1049, 1049, 1049, 1049, 1049,  778,  778,  778,  778,
1642
      778,  778,  570,  344,  786,  786,  786,  786,  786,  786,
1643
      786,  786,  786,  786,  680,  553,  997,  552,  785,  785,
1644
      785,  785,  785,  785, 1025,  551, 1028, 1028, 1028, 1028,
1645
     1028, 1029, 1026, 1026, 1026, 1026,  989,  343,  343,  997,
1646
      989,  997,  997,  343,  785,  785,  785,  785,  785,  785,
1647
      570,  344,  787,  787,  787,  787,  787,  787,  787,  787,
1648
1649
      787,  787,  788,  550,  990,  549,  789,  789,  789,  789,
1650
      789,  789,  962,  962,  962,  962,  962,  962,  962,  962,
1651
      962,  962, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036,
1652
     1036, 1036,  789,  789,  789,  789,  789,  789,  344,  793,
1653
      794,  795,  793,  793,  793,  793,  793,  793,  793,  796,
1654
      548,  547,  546,  797,  797,  797,  797,  797,  797,  863,
1655
      545, 1032, 1032, 1032, 1032, 1032, 1032,  544, 1068, 1118,
1656
     1118,  953, 1068, 1069, 1070, 1071, 1118,  543,  542,  797,
1657
      797,  797,  797,  797,  797,  744,  541,  745,  745,  745,
1658
      745,  745,  745,  745,  745,  745,  745, 1243,  309, 1035,
1659
1660
     1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1044,
1661
     1045, 1046, 1044, 1044, 1044, 1044, 1044, 1044, 1044,  533,
1662
      529,  528, 1052, 1072,  301,  744, 1052,  745,  745,  745,
1663
      745,  745,  745,  745,  745,  745,  745,  963,  527,  964,
1664
      964,  964,  964,  964,  964,  964,  964,  964,  964,  963,
1665
     1053,  964,  964,  964,  964,  964,  964,  964,  964,  964,
1666
      964,  526,  525,  524,  301,  856,  857,  857,  857,  857,
1667
      857,  857,  857,  857,  857,  857, 1068,  523,  522,  187,
1668
     1068, 1069, 1070, 1071, 1075,  521, 1076, 1076, 1076, 1076,
1669
     1076, 1076, 1076, 1076, 1076, 1076, 1055, 1055, 1052,  520,
1670
1671
     1055, 1055, 1052,  158,  856,  858,  858,  858,  858,  858,
1672
      858,  858,  858,  858,  858, 1025,  519, 1026, 1026, 1026,
1673
     1026, 1026, 1026,  518, 1056, 1056, 1053,  517,  516,  275,
1674
     1075, 1074, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077,
1675
     1077, 1077,  158,  856,  859,  859,  859,  859,  859,  860,
1676
      857,  857,  857,  857,  187, 1075,  505, 1078, 1078, 1078,
1677
     1078, 1078, 1079, 1080, 1080, 1080, 1080, 1075,  502, 1080,
1678
     1080, 1080, 1076, 1076, 1076, 1076, 1076, 1076, 1076,  501,
1679
      500,  158,  863,  499,  864,  864,  864,  864,  864,  864,
1680
      864,  864,  864,  864,  865,  492,  491,  490,  866,  866,
1681
1682
      866,  866,  866,  866,  863,  489, 1103, 1103, 1103, 1103,
1683
     1103, 1103,  488, 1052, 1052, 1055, 1034, 1052, 1052, 1055,
1684
      487,  484,  483,  482,  866,  866,  866,  866,  866,  866,
1685
      870,  871,  872,  870,  870,  870,  870,  870,  870,  870,
1686
      873, 1053, 1053, 1056,  874,  874,  874,  874,  874,  874,
1687
      481,  480, 1095, 1096, 1097, 1095, 1095, 1095, 1095, 1095,
1688
     1095, 1095,  282,  316,  316, 1192, 1193,  479, 1194, 1192,
1689
      874,  874,  874,  874,  874,  874,  570,  344,  880,  880,
1690
      880,  880,  880,  880,  880,  880,  880,  880,  788,  158,
1691
      478,  477,  879,  879,  879,  879,  879,  879, 1019,  476,
1692
1693
     1020, 1020, 1020, 1020, 1020, 1020, 1098, 1099, 1100, 1098,
1694
     1098, 1098, 1098, 1098, 1098, 1098,  475,  474,  879,  879,
1695
      879,  879,  879,  879,  570,  344,  881,  881,  881,  881,
1696
      881,  881,  881,  881,  881,  881,  882,  158,  473,  472,
1697
      883,  883,  883,  883,  883,  883, 1025,  471, 1026, 1026,
1698
     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1055,  470,
1699
      284,  184, 1055,  284,  176,  284,  883,  883,  883,  883,
1700
      883,  883,  344,  887,  888,  889,  887,  887,  887,  887,
1701
      887,  887,  887,  301,  441,  440, 1056,  890,  890,  890,
1702
      890,  890,  890, 1025,  432, 1026, 1026, 1026, 1026, 1026,
1703
1704
     1026, 1026, 1026, 1026, 1026, 1075,  431, 1076, 1076, 1076,
1705
     1076, 1076, 1076,  890,  890,  890,  890,  890,  890,  157,
1706
     1243,  284,  157, 1067,  284,  430,  284,  429,  157,  157,
1707
     1067, 1067,  157,  157, 1067,  157,  157,  157,  187,  187,
1708
      187,  187,  187,  187,  187,  187,  187,  187, 1067, 1067,
1709
     1067,  157,  187,  187,  187,  187,  187,  187,  187,  187,
1710
      187,  187,  187,  187,  187,  187,  187,  892,  187,  187,
1711
      187,  187,  187,  187,  187,  158,  157,  187,  157,  157,
1712
      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1713
      157,  157,  157,  157,  157,  271,  428,  427,  300,  271,
1714
1715
      282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
1716
      420,  271,  305,  303,  282,  282,  282,  282,  282,  282,
1717
      282,  282,  282,  282,  282,  282,  282,  282,  917,  282,
1718
      282,  282,  282,  282,  282,  282,  282,  301,  298,  284,
1719
      271,  271,  271,  271,  271,  271,  271,  271,  271,  271,
1720
      271,  271,  271,  271,  271,  271,  271,  927,  928,  928,
1721
      928,  928,  928,  928,  928,  928,  928,  928, 1043, 1043,
1722
     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1107, 1107,
1723
     1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1158, 1158,
1724
     1158, 1158, 1158, 1159,  419,  301,  927,  929,  929,  929,
1725
1726
      929,  929,  929,  929,  929,  929,  929, 1243,  418, 1106,
1727
     1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106,  344,
1728
     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
1729
      416,  415,  407,  406,  301,  927,  930,  930,  930,  930,
1730
      930,  931,  928,  928,  928,  928,  344, 1115, 1115, 1115,
1731
     1115, 1115, 1115, 1115, 1115, 1115, 1115,  344, 1116, 1116,
1732
     1116, 1116, 1116, 1117, 1114, 1114, 1114, 1114,  405,  404,
1733
      455,  455,  403,  301,  300, 1243,  455,  300, 1073,  402,
1734
     1243,  272,  264,  300,  300, 1073, 1073,  300,  300, 1073,
1735
      300,  300,  300,  316,  316,  316,  316,  316,  316,  316,
1736
1737
      316,  316,  316, 1073, 1073, 1073,  300,  316,  316,  316,
1738
      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1739
      316,  932,  316,  316,  316,  316,  316,  316,  316,  316,
1740
      301,  300,  316,  300,  300,  300,  300,  300,  300,  300,
1741
      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
1742
      856,  857,  857,  857,  857,  857,  857,  857,  857,  857,
1743
      857, 1243,  259,  562,  562, 1243, 1243, 1243, 1243,  562,
1744
      284,  260, 1121,  284, 1128,  284, 1121, 1129, 1129, 1129,
1745
     1129, 1129, 1129, 1129, 1129, 1129, 1129,  254,  158,  856,
1746
      857,  857,  857,  857,  857,  857,  857,  857,  857,  857,
1747
1748
     1122, 1068,  254,  563,  563, 1068, 1069, 1070, 1071,  563,
1749
      248,  206,  241, 1243,  158,  389, 1072, 1243, 1069, 1070,
1750
     1071, 1206, 1206, 1206, 1206, 1206, 1206,  158,  863,  187,
1751
      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
1752
      865,  863,  381,  952,  952,  952,  952,  952,  952,  952,
1753
      952,  952,  952,  953,  380,  379, 1072,  954,  954,  954,
1754
      954,  954,  954,  378,  377, 1243,  158,  372, 1072, 1243,
1755
     1243, 1243, 1071, 1243,  371,  567,  567, 1243, 1243, 1243,
1756
     1243,  567,  370,  954,  954,  954,  954,  954,  954,  958,
1757
      959,  960,  958,  958,  958,  958,  958,  958,  958,  961,
1758
1759
      369,  368,  367,  962,  962,  962,  962,  962,  962, 1130,
1760
     1131, 1132, 1130, 1130, 1130, 1130, 1130, 1130, 1130,  358,
1761
     1072, 1121, 1121,  357,  356, 1121, 1121,  355, 1074,  962,
1762
      962,  962,  962,  962,  962,  570,  344,  970,  970,  970,
1763
      970,  970,  970,  970,  970,  970,  970,  882,  354, 1122,
1764
     1122,  969,  969,  969,  969,  969,  969, 1075,  353, 1076,
1765
     1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1121,
1766
     1163,  316,  352, 1121, 1163,  351,  350,  969,  969,  969,
1767
      969,  969,  969,  570,  344,  971,  971,  971,  971,  971,
1768
      971,  971,  971,  971,  971,  349,  184, 1122, 1164,  972,
1769
1770
      972,  972,  972,  972,  972, 1075,  157, 1076, 1076, 1076,
1771
     1076, 1076, 1076, 1076, 1076, 1076, 1076,  344, 1114, 1114,
1772
     1114, 1114, 1114, 1114,  184,  972,  972,  972,  972,  972,
1773
      972,  157, 1161, 1163,  157,  274, 1161, 1163,  172,  170,
1774
      157,  157,  163,  161,  157,  157,  158,  157,  157,  157,
1775
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1776
     1162, 1164,  325,  157,  187,  187,  187,  187,  187,  187,
1777
      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
1778
      187,  187,  187,  187,  187,  187,  187,  158,  157,  977,
1779
      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1780
1781
      157,  157,  157,  157,  157,  157,  157,  271,  324,  323,
1782
      322,  271,  282,  282,  282,  282,  282,  282,  282,  282,
1783
      282,  282,  321,  271,  320,  316,  282,  282,  282,  282,
1784
      282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
1785
      282,  282,  282, 1003,  282,  282,  282,  282,  282,  305,
1786
      301,  284,  271,  271,  271,  271,  271,  271,  271,  271,
1787
      271,  271,  271,  271,  271,  271,  271,  271,  271,  927,
1788
      928,  928,  928,  928,  928,  928,  928,  928,  928,  928,
1789
      298,  292, 1136, 1137, 1138, 1136, 1136, 1136, 1136, 1136,
1790
     1136, 1136, 1085,  291, 1086, 1086, 1086, 1086, 1086, 1086,
1791
1792
     1237, 1237, 1237, 1237, 1237, 1237,  290,  301,  927,  928,
1793
      928,  928,  928,  928,  928,  928,  928,  928,  928,  301,
1794
     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113,
1795
     1147,  301, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
1796
     1148, 1148,  289, 1186,  288, 1186,  301,  300, 1189, 1189,
1797
      300, 1186, 1189, 1189,  287,  282,  300,  300,  260,  254,
1798
      300,  300,  248,  300,  300,  300,  316,  316,  316,  316,
1799
      316,  316,  316,  316,  316,  316, 1190, 1190,  160,  300,
1800
      316,  316,  316,  316,  316,  316,  316,  316,  316,  316,
1801
      316,  316,  316,  316,  316,  316,  316, 1013,  316,  316,
1802
1803
      316,  316,  316,  301,  300,  316,  300,  300,  300,  300,
1804
      300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
1805
      300,  300,  300, 1019,  241, 1020, 1020, 1020, 1020, 1020,
1806
     1020, 1020, 1020, 1020, 1020, 1147,  160, 1149, 1149, 1149,
1807
     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1147,  199, 1150,
1808
     1150, 1150, 1150, 1150, 1151, 1148, 1148, 1148, 1148,  234,
1809
      196,  187,  158, 1019,  226, 1021, 1021, 1021, 1021, 1021,
1810
     1021, 1021, 1021, 1021, 1021,  863,  224, 1154, 1154, 1154,
1811
     1154, 1154, 1154,  202,  201,  198,  197, 1105, 1157, 1157,
1812
     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,  668,  668,
1813
1814
      194,  184,  158, 1019,  668, 1022, 1022, 1022, 1022, 1022,
1815
     1023, 1024, 1024, 1024, 1024, 1243,  172, 1156, 1156, 1156,
1816
     1156, 1156, 1156, 1156, 1156, 1156, 1156,  344, 1114, 1114,
1817
     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,  161,  160,
1818
     1161,  158,  158, 1019, 1161, 1024, 1024, 1024, 1020, 1020,
1819
     1020, 1020, 1020, 1020, 1020,  344, 1114, 1114, 1114, 1114,
1820
     1114, 1114, 1114, 1114, 1114, 1114, 1243, 1243, 1162, 1129,
1821
     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1243,
1822
     1243, 1243,  158,  863, 1243, 1032, 1032, 1032, 1032, 1032,
1823
     1032, 1032, 1032, 1032, 1032,  953,  863,  187, 1033, 1033,
1824
1825
     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1034, 1243,
1826
     1243, 1243, 1035, 1035, 1035, 1035, 1035, 1035, 1129, 1129,
1827
     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1161, 1161,
1828
      670,  670, 1161, 1161, 1243, 1243,  670, 1243, 1035, 1035,
1829
     1035, 1035, 1035, 1035, 1039, 1040, 1041, 1039, 1039, 1039,
1830
     1039, 1039, 1039, 1039, 1042, 1243, 1162, 1162, 1043, 1043,
1831
     1043, 1043, 1043, 1043, 1182, 1183, 1184, 1182, 1182, 1182,
1832
     1182, 1182, 1182, 1182, 1243, 1163, 1243,  282,  316, 1163,
1833
     1243, 1243, 1243, 1243, 1043, 1043, 1043, 1043, 1043, 1043,
1834
      570,  344, 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049,
1835
1836
     1049, 1049, 1085, 1164, 1086, 1086, 1086, 1086, 1086, 1086,
1837
     1086, 1086, 1086, 1086, 1167, 1243, 1168, 1168, 1168, 1168,
1838
     1168, 1168, 1168, 1168, 1168, 1168, 1243, 1243, 1243, 1243,
1839
     1243, 1147,  187, 1148, 1148, 1148, 1148, 1148, 1148, 1189,
1840
     1243,  301, 1085, 1189, 1087, 1087, 1087, 1087, 1087, 1087,
1841
     1087, 1087, 1087, 1087, 1167, 1243, 1169, 1169, 1169, 1169,
1842
     1169, 1169, 1169, 1169, 1169, 1169, 1167, 1190, 1170, 1170,
1843
     1170, 1170, 1170, 1171, 1168, 1168, 1168, 1168, 1243, 1243,
1844
     1243,  301, 1085, 1243, 1088, 1088, 1088, 1088, 1088, 1089,
1845
     1090, 1090, 1090, 1090, 1243, 1163,  187, 1243, 1243, 1163,
1846
1847
     1179, 1180, 1181, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
1848
     1142, 1243, 1143, 1143, 1143, 1143, 1143, 1143, 1243, 1243,
1849
     1243,  301, 1085, 1164, 1090, 1090, 1090, 1086, 1086, 1086,
1850
     1086, 1086, 1086, 1086, 1243, 1243, 1167,  158, 1168, 1168,
1851
     1168, 1168, 1168, 1168,  316, 1243, 1243, 1243, 1147,  158,
1852
     1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
1853
     1243,  301, 1019, 1243, 1020, 1020, 1020, 1020, 1020, 1020,
1854
     1020, 1020, 1020, 1020, 1147, 1243, 1148, 1148, 1148, 1148,
1855
     1148, 1148, 1148, 1148, 1148, 1148,  863, 1243, 1187, 1187,
1856
     1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1243, 1243,
1857
1858
     1243,  158, 1019, 1243, 1020, 1020, 1020, 1020, 1020, 1020,
1859
     1020, 1020, 1020, 1020, 1195, 1196, 1197, 1195, 1195, 1195,
1860
     1195, 1195, 1195, 1195, 1167, 1243, 1168, 1168, 1168, 1168,
1861
     1168, 1168, 1168, 1168, 1168, 1168, 1243,  671,  671, 1243,
1862
     1243,  158,  863,  671, 1103, 1103, 1103, 1103, 1103, 1103,
1863
     1103, 1103, 1103, 1103, 1034,  863, 1243, 1104, 1104, 1104,
1864
     1104, 1104, 1104, 1104, 1104, 1104, 1104, 1105, 1243, 1243,
1865
     1243, 1106, 1106, 1106, 1106, 1106, 1106, 1167, 1243, 1168,
1866
     1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1213,
1867
     1243, 1214, 1214, 1214, 1214, 1214, 1214, 1106, 1106, 1106,
1868
1869
     1106, 1106, 1106, 1110, 1111, 1112, 1110, 1110, 1110, 1110,
1870
     1110, 1110, 1110, 1243, 1243, 1243, 1243, 1113, 1113, 1113,
1871
     1113, 1113, 1113, 1243, 1198, 1199, 1200, 1198, 1198, 1198,
1872
     1198, 1198, 1198, 1198, 1173, 1243, 1174, 1174, 1174, 1174,
1873
     1174, 1174, 1243, 1113, 1113, 1113, 1113, 1113, 1113, 1085,
1874
     1243, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1875
     1086,  301, 1189,  770,  770,  284, 1189, 1243,  284,  770,
1876
      284, 1243, 1243,  301, 1206, 1206, 1206, 1206, 1206, 1206,
1877
     1206, 1206, 1206, 1206, 1243, 1243, 1243, 1243,  301, 1085,
1878
     1190, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086,
1879
1880
     1086, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
1881
     1207,  316, 1208, 1208, 1208, 1208, 1208, 1209, 1206, 1206,
1882
     1206, 1206, 1243, 1243,  771,  771, 1243, 1243,  301, 1142,
1883
      771, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
1884
     1143, 1213, 1243, 1214, 1214, 1214, 1214, 1214, 1214, 1214,
1885
     1214, 1214, 1214, 1213, 1243, 1215, 1215, 1215, 1215, 1215,
1886
     1215, 1215, 1215, 1215, 1215, 1243, 1243, 1243,  158, 1142,
1887
     1243, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
1888
     1144, 1213, 1243, 1216, 1216, 1216, 1216, 1216, 1217, 1214,
1889
     1214, 1214, 1214, 1223, 1224, 1225, 1223, 1223, 1223, 1223,
1890
1891
     1223, 1223, 1223, 1243,  772,  772, 1243, 1243,  158, 1142,
1892
      772, 1145, 1145, 1145, 1145, 1145, 1146, 1143, 1143, 1143,
1893
     1143,  861,  861,  862,  862,  946,  946,  861, 1243,  862,
1894
      158,  946, 1243, 1243, 1243, 1201, 1243, 1202, 1202, 1202,
1895
     1202, 1202, 1202, 1243, 1030, 1030, 1243, 1243,  158,  863,
1896
     1030, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
1897
     1154, 1105,  863, 1243, 1155, 1155, 1155, 1155, 1155, 1155,
1898
     1155, 1155, 1155, 1155,  158, 1243, 1243, 1243, 1156, 1156,
1899
     1156, 1156, 1156, 1156, 1206, 1206, 1206, 1206, 1206, 1206,
1900
     1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206,
1901
1902
     1206, 1206, 1206, 1206, 1156, 1156, 1156, 1156, 1156, 1156,
1903
     1173, 1243, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
1904
     1174, 1174, 1227, 1228, 1229, 1227, 1227, 1227, 1227, 1227,
1905
     1227, 1227, 1213, 1243, 1214, 1214, 1214, 1214, 1214, 1214,
1906
     1214, 1214, 1214, 1214, 1243, 1101, 1101, 1243, 1243,  301,
1907
     1173, 1101, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
1908
     1175, 1175, 1213, 1243, 1214, 1214, 1214, 1214, 1214, 1214,
1909
     1214, 1214, 1214, 1214, 1230, 1231, 1232, 1230, 1230, 1230,
1910
     1230, 1230, 1230, 1230, 1243, 1152, 1152, 1243, 1243,  301,
1911
     1173, 1152, 1176, 1176, 1176, 1176, 1176, 1177, 1174, 1174,
1912
1913
     1174, 1174, 1243, 1218, 1243, 1219, 1219, 1219, 1219, 1219,
1914
     1219,  301, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
1915
     1233, 1233, 1243, 1233, 1233, 1233, 1233, 1233, 1233,  301,
1916
     1142, 1243, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
1917
     1143, 1143,  301, 1243, 1243, 1243, 1243, 1243, 1243,  158,
1918
     1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
1919
      158, 1185, 1185, 1243, 1243, 1243, 1243, 1185, 1243,  158,
1920
     1142, 1243, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
1921
     1143, 1143, 1243, 1243, 1243, 1243, 1243,  158, 1234, 1234,
1922
     1234, 1234, 1234, 1235, 1233, 1233, 1233, 1233, 1237, 1237,
1923
1924
     1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1243,  158,
1925
     1173, 1243, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
1926
     1174, 1174, 1243, 1243, 1243,  158, 1227, 1227, 1227, 1227,
1927
     1227, 1227, 1227, 1227, 1227, 1227, 1238, 1238, 1238, 1238,
1928
     1238, 1239, 1237, 1237, 1237, 1237, 1243, 1243, 1243,  301,
1929
     1173, 1243, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
1930
     1174, 1174, 1243, 1243, 1243, 1240, 1240, 1240, 1240, 1240,
1931
     1240, 1240, 1240, 1240, 1240, 1230, 1230, 1230, 1230, 1230,
1932
     1230, 1230, 1230, 1230, 1230, 1243, 1243, 1243, 1243,  301,
1933
     1201, 1243, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
1934
1935
     1202, 1202,  301, 1243, 1243, 1240, 1240, 1240, 1240, 1240,
1936
     1240, 1243,  301, 1241, 1241, 1241, 1241, 1241, 1242, 1240,
1937
     1240, 1240, 1240, 1243, 1243, 1243, 1243, 1243, 1243,  158,
1938
     1201, 1243, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
1939
     1203, 1203,  301, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1940
      301, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
1941
     1233, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  158,
1942
     1201, 1243, 1204, 1204, 1204, 1204, 1204, 1205, 1202, 1202,
1943
     1202, 1202, 1243, 1243, 1243, 1243, 1243, 1243,  158, 1237,
1944
     1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1240,
1945
1946
     1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,  158,
1947
     1218, 1243, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
1948
     1219, 1219, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1949
     1243, 1243, 1243, 1243, 1243, 1243,  301, 1243, 1243, 1243,
1950
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  301,
1951
     1218, 1243, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
1952
     1220, 1220, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1953
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1954
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  301,
1955
     1218, 1243, 1221, 1221, 1221, 1221, 1221, 1222, 1219, 1219,
1956
1957
     1219, 1219, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1958
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1959
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  301,
1960
     1201, 1243, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
1961
     1202, 1202, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1962
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1963
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  158,
1964
     1201, 1243, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202,
1965
     1202, 1202, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1966
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1967
1968
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  158,
1969
     1218, 1243, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
1970
     1219, 1219, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1971
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1972
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  301,
1973
     1218, 1243, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1219,
1974
     1219, 1219, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1975
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
1976
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,  301,
1977
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
1978
1979
       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
1980
       79,   86,   86,   86,   86,   86,   86,   86,   86,   86,
1981
       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
1982
       86,   86,   42,   42,   42,   42,   42,   42,   42,   42,
1983
       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
1984
       42,   42,   42,   97,   97,   97,   97,   97,   97,   97,
1985
       97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
1986
       97,   97,   97,   97,  104,  104,  104,  104,  104,  104,
1987
      104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
1988
      104,  104,  104,  104,  104,  131,  131,  131,  131,  131,
1989
1990
      131,  131,  131,  131,  131,  131,  131,  131,  131,  131,
1991
      131,  131,  131,  131,  131,  131,  157, 1243, 1243,  157,
1992
     1243, 1243, 1243,  157, 1243,  157, 1243,  157,  157,  157,
1993
     1243, 1243,  157,  157,  157,  157,  157,  162,  162,  162,
1994
      162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
1995
      162,  162,  162,  162,  162,  162,  162,  162,  167, 1243,
1996
     1243,  167, 1243, 1243,  167,  167, 1243,  167, 1243,  167,
1997
      167,  167,  167, 1243,  167,  167,  167,  167,  167,  171,
1998
     1243, 1243,  171, 1243, 1243, 1243,  171, 1243,  171, 1243,
1999
      171,  171,  171, 1243, 1243,  171,  171,  171,  171,  171,
2000
2001
      173, 1243, 1243,  173,  173,  173, 1243,  173,  173,  173,
2002
     1243,  173,  173,  173, 1243, 1243,  173,  173,  173,  173,
2003
      173,  209,  209, 1243,  209,  209,  209, 1243,  209,  209,
2004
      209,  209,  209,  209,  209,  209,  209,  209,  209,  209,
2005
      209,  209,  231, 1243, 1243,  231,  231,  231, 1243,  231,
2006
      231,  231, 1243,  231,  231,  231, 1243, 1243,  231,  231,
2007
      231,  231,  231,  235,  235, 1243,  235,  235,  235, 1243,
2008
      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
2009
      235,  235,  235,  235,  240, 1243, 1243,  240,  240,  240,
2010
     1243,  240,  240,  240, 1243,  240,  240,  240, 1243,  240,
2011
2012
      240, 1243,  240,  240,  240,  246,  246, 1243,  246,  246,
2013
      246, 1243, 1243,  246,  246,  246,  246,  246,  246,  246,
2014
      246,  246, 1243,  246,  246,  246,  249,  249,  249,  249,
2015
      249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
2016
      249,  249,  249,  249,  249,  249,  249,  253, 1243, 1243,
2017
      253,  253, 1243, 1243,  253,  253,  253, 1243,  253,  253,
2018
      253,  253, 1243,  253,  253,  253,  253,  253,  257,  257,
2019
      257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
2020
      257,  257,  257,  257,  257,  257,  257,  257,  257,  259,
2021
      259, 1243,  259,  259, 1243,  259,  259,  259,  259,  259,
2022
2023
      259,  259,  259,  259,  259,  259,  259,  259,  259,  259,
2024
      266, 1243, 1243,  266, 1243, 1243,  266,  266, 1243,  266,
2025
     1243,  266,  266,  266,  266, 1243,  266,  266,  266,  266,
2026
      266,  270, 1243, 1243,  270, 1243, 1243, 1243,  270, 1243,
2027
      270, 1243,  270,  270,  270, 1243,  270,  270,  270,  270,
2028
      270,  270,  273, 1243, 1243,  273,  273,  273, 1243,  273,
2029
      273,  273, 1243,  273,  273,  273, 1243,  273,  273,  273,
2030
      273,  273,  273,  210,  210, 1243,  210,  210,  210, 1243,
2031
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
2032
      210,  210,  210,  210,  297, 1243, 1243, 1243,  297,  297,
2033
2034
      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
2035
      297,  297,  297,  297,  297,  300, 1243, 1243,  300, 1243,
2036
     1243, 1243,  300, 1243,  300, 1243,  300,  300,  300, 1243,
2037
     1243,  300,  300,  300,  300,  300,  302, 1243, 1243,  302,
2038
     1243, 1243,  302,  302, 1243,  302, 1243,  302,  302,  302,
2039
      302, 1243,  302,  302,  302,  302,  302,  304, 1243, 1243,
2040
      304, 1243, 1243, 1243,  304, 1243,  304, 1243,  304,  304,
2041
      304, 1243, 1243,  304,  304,  304,  304,  304,  306, 1243,
2042
     1243,  306,  306,  306, 1243,  306,  306,  306, 1243,  306,
2043
      306,  306, 1243, 1243,  306,  306,  306,  306,  306,  328,
2044
2045
      328, 1243,  328,  328,  328, 1243,  328,  328,  328,  328,
2046
      328,  328,  328,  328,  328,  328,  328,  328,  328,  328,
2047
      157, 1243, 1243,  157, 1243, 1243, 1243,  157, 1243,  157,
2048
     1243,  157,  157,  157, 1243, 1243,  157,  157,  157,  157,
2049
      157,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2050
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2051
      333,  333,  335,  335, 1243,  335,  335,  335,  335,  335,
2052
      335,  335,  335,  335,  335,  335,  335,  335,  335,  335,
2053
      335,  335,  335,  167, 1243, 1243,  167, 1243, 1243, 1243,
2054
      167, 1243,  167, 1243,  167,  167,  167, 1243, 1243,  167,
2055
2056
      167,  167,  167,  167,  171, 1243, 1243,  171, 1243, 1243,
2057
     1243,  171, 1243,  171, 1243,  171,  171,  171, 1243, 1243,
2058
      171,  171,  171,  171,  171,  173, 1243, 1243,  173,  173,
2059
      173, 1243,  173,  173,  173, 1243,  173,  173,  173, 1243,
2060
     1243,  173,  173,  173,  173,  173,  174, 1243, 1243,  174,
2061
      174,  174, 1243,  174,  174,  174, 1243,  174,  174,  174,
2062
     1243, 1243,  174,  174,  174,  174,  174,  345,  345,  345,
2063
     1243, 1243, 1243, 1243,  345,  209,  209, 1243,  209,  209,
2064
      209, 1243,  209,  209,  209,  209,  209,  209,  209,  209,
2065
      209,  209,  209,  209,  209,  209,  210,  210, 1243,  210,
2066
2067
      210,  210, 1243,  210,  210,  210,  210,  210,  210,  210,
2068
      210,  210,  210,  210,  210,  210,  210,  231, 1243, 1243,
2069
      231,  231,  231, 1243,  231,  231,  231, 1243,  231,  231,
2070
      231, 1243, 1243,  231,  231,  231,  231,  231,  232, 1243,
2071
     1243,  232,  232,  232, 1243,  232,  232,  232, 1243,  232,
2072
      232,  232, 1243, 1243,  232,  232,  232,  232,  232,  235,
2073
      235, 1243,  235,  235,  235, 1243,  235,  235,  235,  235,
2074
      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
2075
      236,  236, 1243,  236,  236,  236, 1243,  236,  236,  236,
2076
      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
2077
2078
      236,  240, 1243, 1243,  240,  240,  240, 1243,  240,  240,
2079
      240, 1243,  240,  240,  240, 1243,  240,  240, 1243,  240,
2080
      240,  240,  246,  246, 1243,  246,  246,  246, 1243, 1243,
2081
      246,  246,  246,  246,  246,  246,  246,  246,  246, 1243,
2082
      246,  246,  246,  253, 1243, 1243,  253,  253, 1243, 1243,
2083
      253,  253,  253, 1243,  253,  253,  253,  253, 1243,  253,
2084
      253,  253,  253,  253,  259,  259, 1243,  259,  259, 1243,
2085
      259,  259,  259,  259,  259,  259,  259,  259,  259,  259,
2086
      259,  259,  259,  259,  259,  269, 1243, 1243,  269, 1243,
2087
     1243, 1243,  269, 1243,  269, 1243,  269,  269,  269, 1243,
2088
2089
     1243,  269,  269,  269,  269,  269,  270, 1243, 1243,  270,
2090
     1243, 1243, 1243,  270, 1243,  270, 1243,  270,  270,  270,
2091
     1243,  270,  270,  270,  270,  270,  270,  271, 1243, 1243,
2092
      271,  271, 1243,  271,  271, 1243, 1243,  271,  271,  273,
2093
     1243, 1243,  273,  273,  273, 1243,  273,  273,  273, 1243,
2094
      273,  273,  273, 1243,  273,  273,  273,  273,  273,  273,
2095
      297, 1243, 1243, 1243,  297,  297,  297,  297,  297,  297,
2096
      297,  297,  297,  297,  297,  297,  297,  297,  297,  297,
2097
      297,  300, 1243, 1243,  300, 1243, 1243, 1243,  300, 1243,
2098
      300, 1243,  300,  300,  300, 1243, 1243,  300,  300,  300,
2099
2100
      300,  300,  302, 1243, 1243,  302, 1243, 1243, 1243,  302,
2101
     1243,  302, 1243,  302,  302,  302, 1243, 1243,  302,  302,
2102
      302,  302,  302,  304, 1243, 1243,  304, 1243, 1243, 1243,
2103
      304, 1243,  304, 1243,  304,  304,  304, 1243, 1243,  304,
2104
      304,  304,  304,  304,  306, 1243, 1243,  306,  306,  306,
2105
     1243,  306,  306,  306, 1243,  306,  306,  306, 1243, 1243,
2106
      306,  306,  306,  306,  306,  307, 1243, 1243,  307,  307,
2107
      307, 1243,  307,  307,  307, 1243,  307,  307,  307, 1243,
2108
     1243,  307,  307,  307,  307,  307,  328,  328, 1243,  328,
2109
      328,  328, 1243,  328,  328,  328,  328,  328,  328,  328,
2110
2111
      328,  328,  328,  328,  328,  328,  328,  333,  333,  333,
2112
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2113
      333,  333,  333,  333,  333,  333,  333,  333,  447,  447,
2114
      447,  447,  447,  447,  447,  447,  447,  447,  447,  447,
2115
      447,  447,  447,  447,  447,  447,  447,  447,  447,  157,
2116
     1243, 1243,  157, 1243, 1243, 1243,  157, 1243,  157, 1243,
2117
      157,  157,  157, 1243, 1243,  157,  157,  157,  157,  157,
2118
      461,  461,  461, 1243, 1243, 1243, 1243,  461,  209,  209,
2119
     1243,  209,  209,  209, 1243,  209,  209,  209,  209,  209,
2120
      209,  209,  209,  209,  209,  209,  209,  209,  209,  236,
2121
2122
      236, 1243,  236,  236,  236,  236,  236,  236,  236,  236,
2123
      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
2124
      235,  235, 1243,  235,  235,  235, 1243,  235,  235,  235,
2125
      235,  235,  235,  235,  235,  235,  235,  235,  235,  235,
2126
      235,  210,  210, 1243,  210,  210,  210, 1243,  210,  210,
2127
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
2128
      210,  210,  569,  569,  569, 1243, 1243, 1243, 1243,  569,
2129
      467,  467,  467, 1243, 1243, 1243, 1243,  467,  333,  333,
2130
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2131
      333,  333,  333,  333,  333,  333,  333,  333,  333,  236,
2132
2133
      236, 1243,  236,  236,  236, 1243,  236,  236,  236,  236,
2134
      236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
2135
      673,  673,  673, 1243, 1243, 1243, 1243,  673,  677,  677,
2136
      677,  677, 1243, 1243, 1243, 1243,  677,  784,  784,  784,
2137
     1243, 1243, 1243, 1243,  784,  785,  785,  785,  785, 1243,
2138
     1243, 1243, 1243,  785,  878,  878,  878, 1243, 1243, 1243,
2139
     1243,  878,  879,  879,  879,  879, 1243, 1243, 1243, 1243,
2140
      879,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2141
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2142
      333,  333,  271, 1243, 1243,  271,  271, 1243,  271,  271,
2143
2144
     1243, 1243,  271,  271,  300, 1243, 1243,  300, 1243, 1243,
2145
     1243,  300, 1243,  300, 1243,  300,  300,  300, 1243, 1243,
2146
      300,  300,  300,  300,  300,  950, 1243,  950,  950, 1243,
2147
     1243, 1243, 1243,  950,  968,  968,  968, 1243, 1243, 1243,
2148
     1243,  968,  969,  969,  969,  969, 1243, 1243, 1243, 1243,
2149
      969,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2150
      333,  333,  333,  333,  333,  333,  333,  333,  333,  333,
2151
      333,  333,  271, 1243, 1243,  271,  271, 1243,  271,  271,
2152
     1243, 1243,  271,  271,  300, 1243, 1243,  300, 1243, 1243,
2153
     1243,  300, 1243,  300, 1243,  300,  300,  300, 1243, 1243,
2154
2155
      300,  300,  300,  300,  300, 1031, 1243, 1031, 1031, 1243,
2156
     1243, 1243, 1243, 1031, 1047, 1047, 1047, 1243, 1243, 1243,
2157
     1243, 1047, 1048, 1048, 1048, 1243, 1243, 1243, 1243, 1243,
2158
     1048, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
2159
     1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062,
2160
     1062, 1062, 1067, 1067, 1243, 1067, 1067, 1067, 1067, 1067,
2161
     1243, 1067, 1243, 1067, 1067, 1067, 1243, 1243, 1067, 1067,
2162
     1067, 1067, 1067, 1073, 1073, 1243, 1073, 1073, 1073, 1073,
2163
     1073, 1243, 1073, 1243, 1073, 1073, 1073, 1243, 1243, 1073,
2164
     1073, 1073, 1073, 1073, 1102, 1243, 1102, 1102, 1243, 1243,
2165
2166
     1243, 1243, 1102, 1153, 1243, 1153, 1153, 1243, 1243, 1243,
2167
     1243, 1153, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
2168
     1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191,
2169
     1191, 1191, 1191,   23, 1243, 1243, 1243, 1243, 1243, 1243,
2170
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
2171
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
2172
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
2173
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
2174
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
2175
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
2176
2177
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243
2178
    } ;
2179
2180
static const flex_int16_t yy_chk[9611] =
2181
    {   0,
2182
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2183
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2184
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2185
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2186
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2187
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2188
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
2189
        1,    1,    1,    1,    1,    1,    2,   25,   45,   43,
2190
        2,   25,   45,    2,    5,    5, 1240,    5,    5,    5,
2191
       43,    5,    6,    6,   57,    6,    6,    6,    5,    6,
2192
2193
        7,    7,  224,    7,    7,    7,    6,    7,   57,   31,
2194
        2,    2,    5,    5,    7,    2,   67,   51,  214,  224,
2195
        6,    6,   51,    2,  214,   54,    2,    3,    7,    7,
2196
       31,    3,   15,   15,    3,   15,   15,   15,   15,    5,
2197
       54,    3,  386,   46,    3,   67,   46,    6,   16,   16,
2198
       46,   16,   16,   16,   16,    7,   46,   31,    3,    3,
2199
      386,    3,  119,    8,    8,  119,    8,    8,    8,    3,
2200
        8,    3,  127,    3,    3,   48,    3,    8,   48,   48,
2201
      106,    9,    9,    3,    9,    9,    9,   15,    9,    9,
2202
       99,    8,    8,   39,   39,   39,   39,   39,   39,    3,
2203
2204
        4,  101, 1236,   16,    4,   10,   10,    4,   10,   10,
2205
       10,   71,   10,   10,    4,   71,   99,    4,    8,  127,
2206
       19,   19,   19,   19,   19,   19,   19,  101,  481,   47,
2207
      106,    4,    4,   47,    4,   61,    9,   65,  481,   69,
2208
       47,   65,    4,   69,    4,   61,    4,    4,   87,    4,
2209
      130,  159,   87,   69,   61,  159,    4,   65,  118,  130,
2210
       10,   20,   20,   20,   20,   20,   20,   20,  144,  118,
2211
     1233,  132,    4,   11,   11,   19,   11,   11,   11,  144,
2212
       11,   38,   38,   38,   38,   38,   38,   38,   38,   38,
2213
       38,   64,   78,  145,   64,  162,  145,  162,   64,  228,
2214
2215
       36,   36,   78,  228,   64,   36,   36, 1214,  184,   93,
2216
       93,   78,   93,   93,   95,   95,   20,   95,   95,  184,
2217
       64,  132,  226,  103,  103,   36,  103,  103,   11,  226,
2218
       11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
2219
       11,   11,   11,   11,   11,   11,   11,   11,   12,   12,
2220
       36,   12,   12,   12,   60,   12,   60,   60,   60,   60,
2221
       60,   60,   60,   60,   60,   60,   70,  185,  483,   70,
2222
       70,   70,   70,   70,   70,   70,   70,   70,   70,  108,
2223
      108,  185,  108,  108,  210,  108,  230,  105,  483,  207,
2224
      230,  105,  114,  114,  114,  114,  114,  114,  134,  134,
2225
2226
       62,  134,  134,   12,   62,   12,   12,   12,   12,   12,
2227
       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
2228
       12,   12,   12,   13,   13, 1187,   13,   13,   13,   13,
2229
       13,  210,  471,  109,   62,   62,   13,   13,   13,   62,
2230
       72,   72,  105,  207,  223,   72,   72,   62,  213,  471,
2231
       62,  213,   13,  134,  109,  113,  113,  113,  113,  113,
2232
      113,  113,  113,  113,  113,   72,  128,  136,  128,  128,
2233
      128,  128,  128,  128,  128,  128,  128,  128,   13,   14,
2234
       14,  109,   14,   14,   14,   14,   14,  333,  136,  333,
2235
       72,  223,   14,   14,   14,  140,  140,  140,  140,  140,
2236
2237
      140,  140,  140,  140,  140,  334,  345,  334,   14,  141,
2238
      141,  141,  141,  141,  141,  136,  155,  345,  155,  155,
2239
      155,  155,  155,  155,  155,  155,  155,  155,  182,  182,
2240
      182,  182,  182,  182,   14,   17,   17,   17,   17,   17,
2241
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2242
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2243
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2244
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2245
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2246
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2247
2248
       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2249
       17,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2250
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2251
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2252
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2253
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2254
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2255
       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
2256
       21,   21,   21,   21,   21,   21,   21,   30,  239,   30,
2257
      138,  138,  236,  247,  239,  138,  138,  247, 1185,  205,
2258
2259
      205,   30,  205,  205,   30,   30,   30,   30,   30,   30,
2260
       30,   30,   30,   30,   37,  138,   37,   37,   37,   37,
2261
       37,   37,   37,   37,   37,   37,   37,  156,  377,  169,
2262
       37,   37,   37,   37,   37,   37,  377,  156,  326,  236,
2263
      138,  158,  158,  158,  158,  158,  156,  264,  158,  158,
2264
      169,  264,  158,   37,  450,  225,   37,   37,   37,   37,
2265
       37,   37,   44,  366,  366,   44,  158,  158,  158,  225,
2266
      331,   44,   44,  331, 1168,   44,   44,  169,   44,   44,
2267
       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
2268
       44,   44,  326,  450,   44,   44,   44,   44,   44,   44,
2269
2270
       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
2271
       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
2272
       44,   44,   44,   44,   44,   44,   44,   44,   44,   44,
2273
       44,   44,   44,   44,   44,   44,   44,   44,   49,   49,
2274
       49,   49,   49,   49,   49,   49,   49,   49,   49,  221,
2275
      376,  221,   49,   49,   49,   49,   49,   49,  470,  262,
2276
      242,  242,   49,  242,  242,  376,   49,  165,  165,  165,
2277
      165,  165,  165,  165,  165,  165,  165,  470,   49,   49,
2278
       49,   49,   49,   49,   58,   58, 1156,   58,   58,   58,
2279
       58,   58,  261,  298,   58,   58,  261,  298,   58,  166,
2280
2281
      166,  166,  166,  166,  166,  166,  166,  166,  166,  262,
2282
      222, 1155,   58,   58,   58,   59,  222,  221,  299,   59,
2283
       59,   59,  332,   59,  222,   59,   59,  168,  332,   59,
2284
      168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
2285
      335,  347,  335,   59,   59,   59,  347,  261,  298,  170,
2286
      170,  170,  170,  170, 1153,  473,  170,  170,  173,  173,
2287
      170,  231,  231,  173,  173,  227,  231,  231,  299,  227,
2288
       59,   63,  473,   63,  170,  170,  170,  250,  250,  227,
2289
      250,  250,  383,  173,  383,   63,  231,  388,   63,   63,
2290
       63,   63,   63,   63,   63,   63,   63,   63,  172,  172,
2291
2292
      172,  172,  172,  388,  384,  172,  172,  394,  173,  172,
2293
      384,  231,  176,  176,  176,  176,  176,  176,  176,  176,
2294
      176,  176,  394,  172,  172,  172,  180,  180,  180,  180,
2295
      180,  180,  180,  180,  180,  180,   63,   77, 1152,  294,
2296
      294,   77,   77,   77,  391,   77,  395,   77,   77,  176,
2297
      395,   77,  181,  181,  181,  181,  181,  181,  181,  181,
2298
      181,  181,  447,  454,  447,   77,   77,   77,  198,  198,
2299
      387,  589,  198,  387,  198,  198,  474,  382,  198,  382,
2300
      198,  198,  208,  208,  215,  208,  208,  294,  215,  589,
2301
      454,  391,   77,   85,   85,  474,   85,   85,   85, 1148,
2302
2303
       85,  212,  445,  238,  212,   85,  238,   85,  212,  212,
2304
      238,  238,  263,  263,  266,  263,  263,  445,  215,  215,
2305
      468,   85,   85,  215,  258,  258,  493,  258,  258,  493,
2306
      267,  215,  468,  591,  215,  266,  382,  208,  229,  229,
2307
      229,  229,  229,  229,  229,  229,  229,  229,   85,   85,
2308
       94,  267,   94,  234,  234,  591,  212,  234,  238,  234,
2309
      234,  493,  266,  234,   94,  234,  417,   94,   94,   94,
2310
       94,   94,   94,   94,   94,   94,   94,  110,  267,  258,
2311
      110,  418,  418,  448,  418,  448,  110,  110,  504,  475,
2312
      110,  479,  595,  110,  110,  251,  251,  251,  251,  251,
2313
2314
      251,  251,  251,  251,  251,  479,  595,  110,  254,  110,
2315
      475,  504,  254,  417,  254,  254,  280,  280,  280,  280,
2316
      280,  280,  254,  275,  275,  275,  275,  275,  275,  275,
2317
      275,  275,  275,  110,  110,  110,  111,  254,  482,  111,
2318
      461, 1141,  111,  111,  488,  111,  111,  111,  111,  111,
2319
      482,  461,  111,  111,  268,  268,  268,  268,  458,  458,
2320
      458,  268,  268,  490,  488,  268,  111,  111,  111,  278,
2321
      278,  278,  278,  278,  278,  278,  278,  278,  278,  490,
2322
      268,  268,  279,  279,  279,  279,  279,  279,  279,  279,
2323
      279,  279,  111,  111,  111,  112,  491, 1135,  112,  112,
2324
2325
      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
2326
      112,  112,  539,  491,  112,  112,  112,  112,  112,  112,
2327
      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
2328
      112,  112,  112,  112,  112,  112,  112,  480, 1119,  539,
2329
      112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
2330
      112,  112,  112,  112,  112,  112,  112,  115,  480,  115,
2331
      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
2332
      484,  590,  478,  115,  115,  115,  115,  115,  115,  462,
2333
      478,  272,  272,  272,  272,  272,  495,  590,  272,  272,
2334
      462,  484,  272,  314,  314,  314,  314,  314,  314,  115,
2335
2336
      115,  115,  115,  115,  115,  116,  272,  272,  272,  116,
2337
      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
2338
      116,  116,  495,  487,  116,  116,  116,  116,  116,  116,
2339
      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
2340
      116,  116,  116,  116,  116,  116,  116,  487, 1118,  116,
2341
      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
2342
      116,  116,  116,  116,  116,  116,  116,  120,  120,  120,
2343
      120,  120,  120,  120,  120,  120,  120,  120,  485,  506,
2344
     1114,  120,  120,  120,  120,  120,  120,  485,  290,  290,
2345
      530,  120,  290,  530,  290,  290,  506,  486,  290,  472,
2346
2347
      290,  375,  375,  472,  375,  486, 1102,  120,  120,  120,
2348
      120,  120,  120,  139,  557,  139,  139,  139,  139,  139,
2349
      139,  139,  139,  139,  139,  139,  507,  472,  476,  139,
2350
      139,  139,  139,  139,  139,  477,  375,  274, 1101,  477,
2351
      476,  274,  306,  306,  274,  476,  496,  306,  306,  519,
2352
      557,  274,  139,  496,  519,  139,  139,  139,  139,  139,
2353
      139,  142,  494,  477,  142,  274,  274,  306,  815,  508,
2354
      142,  142,  815,  507,  142,  142,  508,  142,  142,  142,
2355
      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
2356
      142,  494,  306,  142,  142,  142,  142,  142,  142,  142,
2357
2358
      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
2359
      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
2360
      142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
2361
      142,  142,  142,  142,  142,  142,  142,  146,  146,  146,
2362
      146,  146,  146,  146,  146,  146,  146,  146,  802,  802,
2363
     1093,  146,  146,  146,  146,  146,  146,  444,  444,  535,
2364
      444,  146,  309,  309,  309,  309,  309,  309,  309,  309,
2365
      309,  309,  327,  327,  569,  327,  327,  146,  146,  146,
2366
      146,  146,  146,  153,  153,  569,  153,  153,  153,  153,
2367
      153,  544,  444,  153,  153, 1092,  544,  153,  535,  309,
2368
2369
      312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
2370
      556,  153,  153,  153,  154,  582,  558,  584,  154,  154,
2371
      154,  598,  154,  558,  154,  154,  505,  327,  154,  301,
2372
      301,  301,  301,  301,  582,  598,  301,  301,  584,  556,
2373
      301,  587,  154,  154,  154,  465,  465,  465,  465,  465,
2374
      465,  583,  588,  505,  301,  301,  301,  503,  588,  503,
2375
      303,  303,  303,  303,  303,  587,  583,  303,  303,  154,
2376
      175,  303,  505,  175,  175,  175,  175,  175,  733,  555,
2377
      175,  175,  555,  733,  175,  303,  303,  303,  313,  313,
2378
      313,  313,  313,  313,  313,  313,  313,  313,  175,  175,
2379
2380
      175,  177,  605,  177,  177,  177,  177,  177,  177,  177,
2381
      177,  177,  177,  177,  555,  571,  571,  177,  177,  177,
2382
      177,  177,  177,  503,  691,  605,  596,  571,  305,  305,
2383
      305,  305,  305,  518,  596,  305,  305,  518,  606,  305,
2384
      177,  691,  602,  177,  177,  177,  177,  177,  177,  186,
2385
      594,  602,  186,  305,  305,  305,  594,  603,  186,  186,
2386
      606,  518,  186,  186,  603,  186,  186,  186,  186,  186,
2387
      186,  186,  186,  186,  186,  186,  186,  186,  186, 1084,
2388
      518,  186,  186,  186,  186,  186,  186,  186,  186,  186,
2389
      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
2390
2391
      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
2392
      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
2393
      186,  186,  186,  186,  186,  187,  187,  187,  187,  187,
2394
      187,  187,  187,  187,  187,  187,  573,  573,  599,  187,
2395
      187,  187,  187,  187,  187,  323,  323,  804,  573,  323,
2396
      804,  323,  323,  330,  597,  323,  330,  323,  599,  601,
2397
      330,  330,  610,  607,  600,  187,  187,  187,  187,  187,
2398
      187,  209,  600,  608,  517,  209,  209,  209,  517,  209,
2399
      601,  209,  209,  597,  697,  209,  336,  336,  336,  336,
2400
      336,  336,  336,  336,  336,  336,  607,  610,  694,  209,
2401
2402
      209,  209,  517,  609,  608,  697,  694, 1211,  330,  337,
2403
      337,  337,  337,  337,  337,  337,  337,  337,  337,  517,
2404
      520,  389, 1211,  611,  520,  389,  209,  233,  389,  611,
2405
      233,  233,  233,  233,  233,  389,  609,  233,  233,  616,
2406
      513,  233,  513,  513,  513,  513,  513,  513,  520,  389,
2407
      389,  616,  658,  617,  618,  233,  233,  233,  235,  615,
2408
      618,  615,  235,  235,  235,  617,  235,  661,  235,  235,
2409
     1083,  396,  235,  396,  396,  396,  396,  396,  396,  396,
2410
      396,  396,  396,  660,  659,  658,  235,  235,  235,  397,
2411
      664,  397,  397,  397,  397,  397,  397,  397,  397,  397,
2412
2413
      397,  398,  661,  398,  398,  398,  398,  398,  398,  398,
2414
      398,  398,  398,  235,  270,  659,  660,  270,  805,  805,
2415
      662,  420, 1082,  270,  270,  420,  662,  270,  420,  664,
2416
      270,  270,  615,  521,  673,  420,  453,  521,  453,  453,
2417
      453,  453,  453,  453,  270,  673,  270,  709, 1080,  420,
2418
      420,  449,  449,  449,  449,  449,  449,  449,  449,  449,
2419
      449,  521,  579,  579,  579,  579,  579,  579,  709,  521,
2420
      270,  270,  270,  273,  541,  453,  273, 1076,  541,  273,
2421
      273,  690,  273,  273,  273,  273,  273,  690,  449,  273,
2422
      273,  457,  457,  457,  457,  457,  457,  457,  457,  457,
2423
2424
      457,  457,  541,  273,  273,  273,  464,  464,  464,  464,
2425
      464,  464,  464,  464,  464,  464,  467,  677,  467,  467,
2426
      467,  467,  467,  467,  467,  467,  467,  467,  677,  273,
2427
      273,  273,  276,  745,  276,  276,  276,  276,  276,  276,
2428
      276,  276,  276,  276,  276,  695,  898,  696,  276,  276,
2429
      276,  276,  276,  276,  509,  509,  509,  509,  509,  509,
2430
      509,  509,  509,  509,  695,  696,  699,  898,  809,  545,
2431
      678,  678,  745,  545,  276,  276,  276,  276,  276,  276,
2432
      281,  809,  678,  699,  281,  281,  281,  281,  281,  281,
2433
      281,  281,  281,  281,  281,  281,  281,  545,  703,  281,
2434
2435
      281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
2436
      281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
2437
      281,  281,  703, 1054,  281,  281,  281,  281,  281,  281,
2438
      281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
2439
      281,  281,  282,  282,  282,  282,  282,  282,  282,  282,
2440
      282,  282,  282, 1048,  904,  705,  282,  282,  282,  282,
2441
      282,  282,  511,  705,  511,  511,  511,  511,  511,  511,
2442
      511,  511,  511,  511,  538,  904,  538,  538,  538,  538,
2443
      538,  538,  282,  282,  282,  282,  282,  282,  308,  714,
2444
     1031,  308,  308,  308,  308,  308,  700,  706,  308,  308,
2445
2446
      714,  512,  308,  512,  512,  512,  512,  512,  512,  512,
2447
      512,  512,  512,  538,  706,  700,  308,  308,  308,  310,
2448
      814,  310,  310,  310,  310,  310,  310,  310,  310,  310,
2449
      310,  310,  814,  704,  701,  310,  310,  310,  310,  310,
2450
      310,  524,  718,  585,  592,  524,  701,  585,  592,  704,
2451
      526,  701,  798,  718,  526,  719,  679,  679,  310,  798,
2452
     1030,  310,  310,  310,  310,  310,  310,  315,  679,  524,
2453
      315,  585,  592,  719, 1026,  803,  315,  315,  526,  524,
2454
      315,  315,  803,  315,  315,  315,  315,  315,  315,  315,
2455
      315,  315,  315,  315,  315,  315,  315, 1015,  526,  315,
2456
2457
      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
2458
      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
2459
      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
2460
      315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
2461
      315,  315,  315,  316,  316,  316,  316,  316,  316,  316,
2462
      316,  316,  316,  316,  681,  681, 1008,  316,  316,  316,
2463
      316,  316,  316,  522,  523,  828,  681,  522,  523,  717,
2464
      525,  717,  810,  527,  525,  810,  528,  527,  811,  720,
2465
      528,  811,  828,  316,  316,  316,  316,  316,  316,  328,
2466
      720,  522,  523,  328,  328,  328,  837,  328,  525,  328,
2467
2468
      328,  527,  529,  328,  528,  522,  529,  756,  837,  766,
2469
      525,  808,  756,  523,  784,  785,  808,  328,  328,  328,
2470
      766,  827,  527,  823,  827,  784,  785, 1007,  528,  717,
2471
      529,  534,  534,  534,  534,  534,  534,  534,  534,  534,
2472
      534,  823, 1005,  857,  328,  338,  529,  338,  338,  338,
2473
      338,  338,  338,  338,  338,  338,  338,  564,  564,  564,
2474
      564,  564,  564,  564,  564,  564,  564,  564,  534,  570,
2475
      570,  570,  570,  570,  570,  570,  570,  570,  570,  847,
2476
      836,  857,  996,  847,  338,  339,  836,  339,  339,  339,
2477
      339,  339,  339,  339,  339,  339,  339,  572,  572,  572,
2478
2479
      572,  572,  572,  572,  572,  572,  572,  576,  576,  576,
2480
      576,  576,  576,  576,  576,  826,  841,  826,  852,  576,
2481
      849,  841,  852,  992,  339,  340,  849,  340,  340,  340,
2482
      340,  340,  340,  340,  340,  340,  340,  578,  578,  578,
2483
      578,  578,  578,  578,  578,  578,  578,  581,  850,  581,
2484
      581,  581,  581,  581,  581,  581,  581,  581,  581,  829,
2485
      850,  851,  928,  851,  340,  341,  341,  341,  341,  341,
2486
      341,  341,  341,  341,  341,  341,  826,  829,  991,  341,
2487
      341,  341,  341,  341,  341,  619,  840,  619,  619,  619,
2488
      619,  619,  619,  619,  619,  619,  619,  840,  854, 1062,
2489
2490
      928, 1062,  341,  854,  855,  341,  341,  341,  341,  341,
2491
      341,  344,  344,  344,  344,  344,  344,  344,  344,  344,
2492
      344,  344,  855,  934,  934,  344,  344,  344,  344,  344,
2493
      344,  620,  864,  620,  620,  620,  620,  620,  620,  620,
2494
      620,  620,  620,  624,  864,  937,  964,  624,  937,  971,
2495
      971,  344,  344,  344,  344,  344,  344,  346,  346,  346,
2496
      346,  346,  346,  346,  346,  346,  346,  346,  346,  972,
2497
      972,  624,  346,  346,  346,  346,  346,  346,  621,  853,
2498
      621,  621,  621,  621,  621,  621,  621,  621,  621,  621,
2499
      853, 1017, 1017,  786,  786,  624,  787,  787,  346,  346,
2500
2501
      346,  346,  346,  346,  348,  786,  693,  348,  787,  891,
2502
      693,  893,  950,  348,  348,  891,  946,  348,  348,  893,
2503
      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
2504
      348,  348,  348,  348,  693,  941,  348,  348,  348,  348,
2505
      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
2506
      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
2507
      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
2508
      348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
2509
      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
2510
      349,  789,  789,  938,  349,  349,  349,  349,  349,  349,
2511
2512
      629,  625,  896,  789,  629,  625,  866,  933,  878,  896,
2513
      628,  630,  923,  631,  628,  630,  879,  631,  866,  878,
2514
      349,  349,  349,  349,  349,  349,  373,  879,  629,  625,
2515
      373,  373,  373, 1051,  373,  625,  373,  373,  628,  630,
2516
      373,  631,  629, 1051,  628,  894,  633,  630,  634,  632,
2517
      633,  894,  634,  632,  373,  373,  373,  636,  895, 1006,
2518
      900,  636, 1006,  909,  922,  921,  895,  635,  900,  698,
2519
      631,  635,  899,  698,  633,  702,  634,  632,  921,  702,
2520
      909,  373,  374,  899,  634,  636,  374,  374,  374,  374,
2521
      374,  632,  374,  374,  633,  635,  374,  698,  968,  981,
2522
2523
      919, 1016,  635,  702, 1016,  918, 1020,  981,  636,  968,
2524
      374,  374,  374,  663,  663,  663,  663,  663,  663,  663,
2525
      663,  663,  663,  667, 1024,  667,  667,  667,  667,  667,
2526
      667,  687,  687,  687,  687,  687,  687,  374,  392,  880,
2527
      880,  913,  392,  392,  392, 1020,  392, 1188,  392,  392,
2528
      663,  880,  392,  684,  684,  684,  684,  684,  684,  684,
2529
      684,  979,  667, 1024, 1188,  684,  392,  392,  392,  674,
2530
      979,  674,  674,  674,  674,  674,  674,  674,  674,  674,
2531
      674,  675,  936,  675,  675,  675,  675,  675,  675,  675,
2532
      675,  675,  675,  392,  393,  936,  985,  911,  393,  393,
2533
2534
      393,  393,  393,  985,  393,  393,  907,  676,  393,  676,
2535
      676,  676,  676,  676,  676,  676,  676,  676,  676,  995,
2536
      906,  995,  393,  393,  393,  680,  680,  680,  680,  680,
2537
      680,  680,  680,  680,  680,  686,  686,  686,  686,  686,
2538
      686,  686,  686,  686,  686, 1018, 1049, 1049, 1018,  393,
2539
      399,  399,  399,  399,  399,  399,  399,  399,  399,  399,
2540
      399, 1065, 1160, 1065,  399,  399,  399,  399,  399,  399,
2541
      689,  951,  689,  689,  689,  689,  689,  689,  689,  689,
2542
      689,  689, 1160,  951,  995,  707,  881,  881,  969,  707,
2543
      399,  399,  399,  399,  399,  399,  401,  905,  881,  969,
2544
2545
      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
2546
      401,  401,  401,  707,  903,  401,  401,  401,  401,  401,
2547
      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
2548
      401,  401,  401,  401,  401,  401,  401,  401, 1094, 1094,
2549
      401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
2550
      401,  401,  401,  401,  401,  401,  401,  401,  402,  402,
2551
      402,  402,  402,  402,  402,  402,  402,  402,  402, 1191,
2552
     1226, 1191,  402,  402,  402,  402,  402,  402,  721,  721,
2553
      721,  721,  721,  721,  721,  721,  721,  721,  708, 1058,
2554
      726, 1226,  708,  952,  726,  862,  861, 1058,  402,  402,
2555
2556
      402,  402,  402,  402,  421,  952,  421,  421,  421,  421,
2557
      421,  421,  421,  421,  421,  421,  708,  723,  726,  723,
2558
      723,  723,  723,  723,  723,  723,  723,  723,  723,  724,
2559
      954,  724,  724,  724,  724,  724,  724,  724,  724,  724,
2560
      724,  727,  954,  421,  422,  727,  422,  422,  422,  422,
2561
      422,  422,  422,  422,  422,  422,  725, 1050,  725,  725,
2562
      725,  725,  725,  725, 1086,  848,  842, 1032,  730,  727,
2563
      731,  732,  730, 1050,  731,  732,  734,  727,  736, 1032,
2564
      734,  737,  736,  422,  423,  737,  423,  423,  423,  423,
2565
      423,  423,  423,  423,  423,  423,  730,  735,  731,  732,
2566
2567
      976,  735,  977, 1086,  734,  984,  736, 1033,  738,  737,
2568
      749,  976,  738,  977,  749,  731,  984,  839,  732, 1033,
2569
      838,  835,  736,  423,  424,  735,  424,  424,  424,  424,
2570
      424,  424,  424,  424,  424,  424,  738,  834,  749, 1060,
2571
      424,  424,  424,  424,  424,  424, 1060,  908,  908,  735,
2572
      908,  908,  825,  883,  883,  744,  744,  744,  744,  744,
2573
      744,  744,  744,  744,  744,  883,  424,  424,  424,  424,
2574
      424,  424,  426,  426,  426,  426,  426,  426,  426,  426,
2575
      426,  426,  986,  970,  970,  824,  426,  426,  426,  426,
2576
      426,  426,  744,  986,  748,  970,  748,  748,  748,  748,
2577
2578
      748,  748,  753,  757, 1255, 1255,  753,  757,  908, 1047,
2579
     1255, 1059,  426,  426,  426,  426,  426,  426,  442, 1059,
2580
     1047,  760,  442,  442,  442,  760,  442, 1125,  442,  442,
2581
      753,  757,  442,  748,  761, 1125, 1090, 1143,  761,  776,
2582
      776,  776,  776,  776,  776,  822,  442,  442,  442,  760,
2583
      773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
2584
     1174, 1202,  761,  775,  775,  775,  775,  775,  775,  775,
2585
      775,  775,  775,  442,  443, 1090, 1143, 1367,  443,  443,
2586
      443,  443,  443, 1367,  443,  443,  817,  778,  443,  778,
2587
      778,  778,  778,  778,  778,  778,  778,  778,  778, 1174,
2588
2589
     1202,  816,  443,  443,  443,  779,  779,  779,  779,  779,
2590
      779,  779,  779,  779,  779,  781, 1035,  781,  781,  781,
2591
      781,  781,  781,  781,  781,  781,  781,  800, 1035,  443,
2592
      451,  800,  451,  451,  451,  451,  451,  451,  451,  451,
2593
      451,  451,  782,  780,  782,  782,  782,  782,  782,  782,
2594
      782,  782,  782,  782,  783,  800,  783,  783,  783,  783,
2595
      783,  783,  795,  795,  795,  795,  795,  795, 1219,  451,
2596
      452,  772,  452,  452,  452,  452,  452,  452,  452,  452,
2597
      452,  452,  788,  788,  788,  788,  788,  788,  788,  788,
2598
      788,  788,  792,  792,  792,  792,  792,  792,  792,  792,
2599
2600
      771,  770,  994,  994,  792,  994,  994, 1219,  765,  452,
2601
      463,  463,  463,  463,  463,  463,  463,  463,  463,  463,
2602
      463,  463,  463, 1066,  764, 1066,  463,  463,  463,  463,
2603
      463,  463,  794,  794,  794,  794,  794,  794,  794,  794,
2604
      794,  794,  806,  812,  818,  763,  806,  812,  818, 1194,
2605
      762, 1194,  463,  463,  463,  463,  463,  463,  466,  466,
2606
      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
2607
      806,  812,  818,  466,  466,  466,  466,  466,  466,  797,
2608
      759,  797,  797,  797,  797,  797,  797,  797,  797,  797,
2609
      797,  758,  820, 1066, 1063, 1063,  820, 1063, 1063,  466,
2610
2611
      466,  466,  466,  466,  466,  469,  755,  982,  469, 1127,
2612
     1127,  982, 1127, 1127,  469,  469,  754,  752,  469,  469,
2613
      820,  469,  469,  469,  469,  469,  469,  469,  469,  469,
2614
      469,  469,  469,  469,  469,  982,  751,  469,  469,  469,
2615
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
2616
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
2617
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
2618
      469,  469,  469,  469,  469,  469,  469,  469,  469,  469,
2619
      469,  514,  514,  514,  514,  514,  514,  514,  514,  514,
2620
      514,  514, 1262, 1262, 1262,  514,  514,  514,  514,  514,
2621
2622
      514,  830,  830,  830,  830,  830,  830,  830,  830,  830,
2623
      830,  830,  872,  872,  872,  872,  872,  872, 1103,  750,
2624
      743,  514,  514,  514,  514,  514,  514,  515,  729,  728,
2625
     1103,  515,  515,  515,  515,  515,  515,  515,  515,  515,
2626
      515,  515,  515,  515,  722,  716,  515,  515,  515,  515,
2627
      515,  515,  515,  515,  515,  515,  515,  515,  515,  515,
2628
      515,  515,  515,  515,  515,  515,  515,  515,  515,  715,
2629
      713,  515,  515,  515,  515,  515,  515,  515,  515,  515,
2630
      515,  515,  515,  515,  515,  515,  515,  515,  515,  516,
2631
     1294, 1294, 1294,  516,  831,  831,  831,  831,  831,  831,
2632
2633
      831,  831,  831,  831,  831,  712, 1104,  516,  516,  516,
2634
      516,  516,  516,  516,  516,  516,  516,  516, 1104,  711,
2635
      710,  516,  516,  516,  516,  516,  516,  832,  832,  832,
2636
      832,  832,  832,  832,  832,  832,  832,  832,  692,  671,
2637
      860,  860,  860,  860,  860,  860,  860,  516,  516,  516,
2638
      516,  516,  516,  536, 1106,  536,  536,  536,  536,  536,
2639
      536,  536,  536,  536,  536,  670, 1106,  669,  856,  856,
2640
      856,  856,  856,  856,  856,  856,  856,  856,  860,  863,
2641
      863,  863,  863,  863,  863,  863,  863,  863,  863,  668,
2642
      657,  656,  536,  537,  655,  537,  537,  537,  537,  537,
2643
2644
      537,  537,  537,  537,  537,  856,  865,  865,  865,  865,
2645
      865,  865,  865,  865,  865,  865,  869, 1120,  869,  869,
2646
      869,  869,  869,  869, 1159, 1159, 1159, 1159,  869, 1120,
2647
      654,  653,  537,  559,  652,  559,  559,  559,  559,  559,
2648
      559,  559,  559,  559,  559,  871,  871,  871,  871,  871,
2649
      871,  871,  871,  871,  871,  874, 1154,  874,  874,  874,
2650
      874,  874,  874,  874,  874,  874,  874,  651, 1154,  650,
2651
      987,  649,  559,  560,  987,  560,  560,  560,  560,  560,
2652
      560,  560,  560,  560,  560,  875,  648,  875,  875,  875,
2653
      875,  875,  875,  875,  875,  875,  875,  876,  987,  876,
2654
2655
      876,  876,  876,  876,  876,  876,  876,  876,  876,  647,
2656
      646,  645,  560,  561,  641,  561,  561,  561,  561,  561,
2657
      561,  561,  561,  561,  561,  877,  640,  877,  877,  877,
2658
      877,  877,  877,  877,  877,  877,  877,  882,  882,  882,
2659
      882,  882,  882,  882,  882,  882,  882, 1166, 1166,  639,
2660
     1166, 1166,  561,  574,  574,  574,  574,  574,  574,  574,
2661
      574,  574,  574,  574,  574,  574,  638,  637,  627,  574,
2662
      574,  574,  574,  574,  574,  886,  886,  886,  886,  886,
2663
      886,  886,  886,  626,  623,  622,  614,  886,  889,  889,
2664
      889,  889,  889,  889,  613,  574,  574,  574,  574,  574,
2665
2666
      574,  577,  577,  577,  577,  577,  577,  577,  577,  577,
2667
      577,  577,  577,  577,  612,  604,  568,  577,  577,  577,
2668
      577,  577,  577,  888,  888,  888,  888,  888,  888,  888,
2669
      888,  888,  888,  912,  912,  912,  912,  912,  912,  912,
2670
      912,  912,  912,  577,  577,  577,  577,  577,  577,  580,
2671
      580,  580,  580,  580,  580,  580,  580,  580,  580,  580,
2672
      580,  910,  567,  566,  580,  580,  580,  580,  580,  580,
2673
      890,  565,  890,  890,  890,  890,  890,  890,  890,  890,
2674
      890,  890, 1283, 1283,  910,  563,  910,  910, 1283,  562,
2675
      580,  580,  580,  580,  580,  580,  642,  554,  642,  642,
2676
2677
      642,  642,  642,  642,  642,  642,  642,  642,  553,  897,
2678
      552,  910,  551,  897,  960,  960,  960,  960,  960,  960,
2679
      901,  550,  549,  548,  901,  916,  916,  916,  916,  916,
2680
      916,  916,  547,  546,  543,  642,  643,  897,  643,  643,
2681
      643,  643,  643,  643,  643,  643,  643,  643,  901,  914,
2682
      914,  914,  914,  914,  914,  914,  914,  914,  914,  914,
2683
      902,  542,  540,  533,  902,  967,  897,  967,  967,  967,
2684
      967,  967,  967,  532,  531,  643,  644,  901,  644,  644,
2685
      644,  644,  644,  644,  644,  644,  644,  644,  902,  915,
2686
      915,  915,  915,  915,  915,  915,  915,  915,  915,  915,
2687
2688
      920,  924,  925,  510,  920,  924,  925,  931,  931,  931,
2689
      931,  931,  931,  931,  502,  644,  665,  902,  665,  665,
2690
      665,  665,  665,  665,  665,  665,  665,  665,  920,  924,
2691
      925,  927,  927,  927,  927,  927,  927,  927,  927,  927,
2692
      927,  501,  935,  939,  940,  931,  935,  939,  940,  920,
2693
      924,  925,  500,  499,  498,  665,  666,  497,  666,  666,
2694
      666,  666,  666,  666,  666,  666,  666,  666,  927,  492,
2695
      935,  939,  940,  947,  489,  947,  947,  947,  947,  947,
2696
      947,  947,  947,  947,  947, 1041, 1041, 1041, 1041, 1041,
2697
     1041,  935,  939,  940,  460,  666,  672,  672,  672,  672,
2698
2699
      672,  672,  672,  672,  672,  672,  672,  459,  456,  455,
2700
      672,  672,  672,  672,  672,  672,  948,  441,  948,  948,
2701
      948,  948,  948,  948,  948,  948,  948,  948,  975,  975,
2702
      975,  975,  975,  975,  975,  975,  672,  672,  672,  672,
2703
      672,  672,  682,  682,  682,  682,  682,  682,  682,  682,
2704
      682,  682,  682,  682,  682,  440,  993,  439,  682,  682,
2705
      682,  682,  682,  682,  949,  438,  949,  949,  949,  949,
2706
      949,  949,  949,  949,  949,  949,  989, 1284, 1284,  993,
2707
      989,  993,  993, 1284,  682,  682,  682,  682,  682,  682,
2708
      685,  685,  685,  685,  685,  685,  685,  685,  685,  685,
2709
2710
      685,  685,  685,  437,  989,  436,  685,  685,  685,  685,
2711
      685,  685,  953,  953,  953,  953,  953,  953,  953,  953,
2712
      953,  953,  959,  959,  959,  959,  959,  959,  959,  959,
2713
      959,  959,  685,  685,  685,  685,  685,  685,  688,  688,
2714
      688,  688,  688,  688,  688,  688,  688,  688,  688,  688,
2715
      435,  434,  433,  688,  688,  688,  688,  688,  688,  957,
2716
      432,  957,  957,  957,  957,  957,  957,  431,  997, 1361,
2717
     1361,  957,  997,  997,  997,  997, 1361,  430,  429,  688,
2718
      688,  688,  688,  688,  688,  746,  428,  746,  746,  746,
2719
      746,  746,  746,  746,  746,  746,  746,  962,  425,  962,
2720
2721
      962,  962,  962,  962,  962,  962,  962,  962,  962,  963,
2722
      963,  963,  963,  963,  963,  963,  963,  963,  963,  419,
2723
      416,  415,  978,  997,  746,  747,  978,  747,  747,  747,
2724
      747,  747,  747,  747,  747,  747,  747,  965,  414,  965,
2725
      965,  965,  965,  965,  965,  965,  965,  965,  965,  966,
2726
      978,  966,  966,  966,  966,  966,  966,  966,  966,  966,
2727
      966,  413,  412,  411,  747,  767,  767,  767,  767,  767,
2728
      767,  767,  767,  767,  767,  767,  998,  410,  409,  978,
2729
      998,  998,  998,  998,  999,  408,  999,  999,  999,  999,
2730
      999,  999,  999,  999,  999,  999, 1004,  980, 1052,  407,
2731
2732
     1004,  980, 1052,  767,  768,  768,  768,  768,  768,  768,
2733
      768,  768,  768,  768,  768, 1029,  406, 1029, 1029, 1029,
2734
     1029, 1029, 1029,  405, 1004,  980, 1052,  404,  403,  400,
2735
     1000,  998, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000,
2736
     1000, 1000,  768,  769,  769,  769,  769,  769,  769,  769,
2737
      769,  769,  769,  769,  980, 1001,  385, 1001, 1001, 1001,
2738
     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002,  381, 1002,
2739
     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002,  380,
2740
      379,  769,  774,  378,  774,  774,  774,  774,  774,  774,
2741
      774,  774,  774,  774,  774,  372,  371,  370,  774,  774,
2742
2743
      774,  774,  774,  774, 1038,  369, 1038, 1038, 1038, 1038,
2744
     1038, 1038,  368, 1003, 1013, 1014, 1038, 1003, 1013, 1014,
2745
      367,  365,  364,  363,  774,  774,  774,  774,  774,  774,
2746
      777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
2747
      777, 1003, 1013, 1014,  777,  777,  777,  777,  777,  777,
2748
      362,  361, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019,
2749
     1019, 1019, 1003, 1013, 1014, 1192, 1192,  360, 1192, 1192,
2750
      777,  777,  777,  777,  777,  777,  790,  790,  790,  790,
2751
      790,  790,  790,  790,  790,  790,  790,  790,  790, 1019,
2752
      359,  358,  790,  790,  790,  790,  790,  790, 1023,  357,
2753
2754
     1023, 1023, 1023, 1023, 1023, 1023, 1025, 1025, 1025, 1025,
2755
     1025, 1025, 1025, 1025, 1025, 1025,  356,  355,  790,  790,
2756
      790,  790,  790,  790,  793,  793,  793,  793,  793,  793,
2757
      793,  793,  793,  793,  793,  793,  793, 1023,  354,  353,
2758
      793,  793,  793,  793,  793,  793, 1027,  351, 1027, 1027,
2759
     1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1055,  350,
2760
     1301,  343, 1055, 1301,  342, 1301,  793,  793,  793,  793,
2761
      793,  793,  796,  796,  796,  796,  796,  796,  796,  796,
2762
      796,  796,  796,  329,  325,  324, 1055,  796,  796,  796,
2763
      796,  796,  796, 1028,  322, 1028, 1028, 1028, 1028, 1028,
2764
2765
     1028, 1028, 1028, 1028, 1028, 1079,  321, 1079, 1079, 1079,
2766
     1079, 1079, 1079,  796,  796,  796,  796,  796,  796,  799,
2767
     1072, 1325,  799, 1072, 1325,  320, 1325,  319,  799,  799,
2768
     1072, 1072,  799,  799, 1072,  799,  799,  799,  799,  799,
2769
      799,  799,  799,  799,  799,  799,  799,  799, 1072, 1072,
2770
     1072,  799,  799,  799,  799,  799,  799,  799,  799,  799,
2771
      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
2772
      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
2773
      799,  799,  799,  799,  799,  799,  799,  799,  799,  799,
2774
      799,  799,  799,  799,  799,  833,  318,  317,  311,  833,
2775
2776
      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
2777
      307,  833,  304,  302,  833,  833,  833,  833,  833,  833,
2778
      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
2779
      833,  833,  833,  833,  833,  833,  833,  300,  297,  833,
2780
      833,  833,  833,  833,  833,  833,  833,  833,  833,  833,
2781
      833,  833,  833,  833,  833,  833,  833,  843,  843,  843,
2782
      843,  843,  843,  843,  843,  843,  843,  843, 1034, 1034,
2783
     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1040, 1040,
2784
     1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1112, 1112,
2785
     1112, 1112, 1112, 1112,  296,  843,  844,  844,  844,  844,
2786
2787
      844,  844,  844,  844,  844,  844,  844, 1043,  295, 1043,
2788
     1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1044,
2789
     1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044,
2790
      292,  291,  289,  288,  844,  845,  845,  845,  845,  845,
2791
      845,  845,  845,  845,  845,  845, 1045, 1045, 1045, 1045,
2792
     1045, 1045, 1045, 1045, 1045, 1045, 1045, 1046, 1046, 1046,
2793
     1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046,  287,  286,
2794
     1312, 1312,  285,  845,  846, 1074, 1312,  846, 1074,  283,
2795
      277,  269,  265,  846,  846, 1074, 1074,  846,  846, 1074,
2796
      846,  846,  846,  846,  846,  846,  846,  846,  846,  846,
2797
2798
      846,  846,  846, 1074, 1074, 1074,  846,  846,  846,  846,
2799
      846,  846,  846,  846,  846,  846,  846,  846,  846,  846,
2800
      846,  846,  846,  846,  846,  846,  846,  846,  846,  846,
2801
      846,  846,  846,  846,  846,  846,  846,  846,  846,  846,
2802
      846,  846,  846,  846,  846,  846,  846,  846,  846,  846,
2803
      858,  858,  858,  858,  858,  858,  858,  858,  858,  858,
2804
      858, 1067,  260, 1318, 1318, 1067, 1067, 1067, 1067, 1318,
2805
     1341,  259, 1057, 1341, 1071, 1341, 1057, 1071, 1071, 1071,
2806
     1071, 1071, 1071, 1071, 1071, 1071, 1071,  257,  858,  859,
2807
      859,  859,  859,  859,  859,  859,  859,  859,  859,  859,
2808
2809
     1057, 1068,  253, 1319, 1319, 1068, 1068, 1068, 1068, 1319,
2810
      248,  243,  241, 1069,  237,  232, 1067, 1069, 1069, 1069,
2811
     1069, 1209, 1209, 1209, 1209, 1209, 1209,  859,  867, 1057,
2812
      867,  867,  867,  867,  867,  867,  867,  867,  867,  867,
2813
      867,  870,  220,  870,  870,  870,  870,  870,  870,  870,
2814
      870,  870,  870,  870,  219,  218, 1068,  870,  870,  870,
2815
      870,  870,  870,  217,  216, 1070,  211,  204, 1069, 1070,
2816
     1070, 1070, 1070, 1073,  203, 1320, 1320, 1073, 1073, 1073,
2817
     1073, 1320,  202,  870,  870,  870,  870,  870,  870,  873,
2818
      873,  873,  873,  873,  873,  873,  873,  873,  873,  873,
2819
2820
      201,  200,  199,  873,  873,  873,  873,  873,  873, 1075,
2821
     1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075,  197,
2822
     1070, 1081, 1091,  196,  195, 1081, 1091,  194, 1073,  873,
2823
      873,  873,  873,  873,  873,  884,  884,  884,  884,  884,
2824
      884,  884,  884,  884,  884,  884,  884,  884,  193, 1081,
2825
     1091,  884,  884,  884,  884,  884,  884, 1077,  192, 1077,
2826
     1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1121,
2827
     1134, 1091,  191, 1121, 1134,  190,  189,  884,  884,  884,
2828
      884,  884,  884,  887,  887,  887,  887,  887,  887,  887,
2829
      887,  887,  887,  887,  887,  188,  183, 1121, 1134,  887,
2830
2831
      887,  887,  887,  887,  887, 1078,  179, 1078, 1078, 1078,
2832
     1078, 1078, 1078, 1078, 1078, 1078, 1078, 1117, 1117, 1117,
2833
     1117, 1117, 1117, 1117,  178,  887,  887,  887,  887,  887,
2834
      887,  892, 1161, 1163,  892,  174, 1161, 1163,  171,  167,
2835
      892,  892,  164,  161,  892,  892,  157,  892,  892,  892,
2836
      892,  892,  892,  892,  892,  892,  892,  892,  892,  892,
2837
     1161, 1163,  152,  892,  892,  892,  892,  892,  892,  892,
2838
      892,  892,  892,  892,  892,  892,  892,  892,  892,  892,
2839
      892,  892,  892,  892,  892,  892,  892,  892,  892,  892,
2840
      892,  892,  892,  892,  892,  892,  892,  892,  892,  892,
2841
2842
      892,  892,  892,  892,  892,  892,  892,  917,  151,  150,
2843
      149,  917,  917,  917,  917,  917,  917,  917,  917,  917,
2844
      917,  917,  148,  917,  147,  143,  917,  917,  917,  917,
2845
      917,  917,  917,  917,  917,  917,  917,  917,  917,  917,
2846
      917,  917,  917,  917,  917,  917,  917,  917,  917,  137,
2847
      135,  917,  917,  917,  917,  917,  917,  917,  917,  917,
2848
      917,  917,  917,  917,  917,  917,  917,  917,  917,  929,
2849
      929,  929,  929,  929,  929,  929,  929,  929,  929,  929,
2850
      131,  126, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085,
2851
     1085, 1085, 1089,  125, 1089, 1089, 1089, 1089, 1089, 1089,
2852
2853
     1239, 1239, 1239, 1239, 1239, 1239,  124,  929,  930,  930,
2854
      930,  930,  930,  930,  930,  930,  930,  930,  930, 1085,
2855
     1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105,
2856
     1098, 1089, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098,
2857
     1098, 1098,  123, 1365,  122, 1365,  930,  932, 1172, 1189,
2858
      932, 1365, 1172, 1189,  121,  117,  932,  932,  104,   97,
2859
      932,  932,   90,  932,  932,  932,  932,  932,  932,  932,
2860
      932,  932,  932,  932,  932,  932, 1172, 1189,   89,  932,
2861
      932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
2862
      932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
2863
2864
      932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
2865
      932,  932,  932,  932,  932,  932,  932,  932,  932,  932,
2866
      932,  932,  932,  942,   82,  942,  942,  942,  942,  942,
2867
      942,  942,  942,  942,  942, 1099,   81, 1099, 1099, 1099,
2868
     1099, 1099, 1099, 1099, 1099, 1099, 1099, 1100,   76, 1100,
2869
     1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100,   75,
2870
       74,   73,  942,  943,   68,  943,  943,  943,  943,  943,
2871
      943,  943,  943,  943,  943, 1109,   66, 1109, 1109, 1109,
2872
     1109, 1109, 1109,   56,   55,   53,   52, 1109, 1111, 1111,
2873
     1111, 1111, 1111, 1111, 1111, 1111, 1111, 1111, 1326, 1326,
2874
2875
       50,   40,  943,  944, 1326,  944,  944,  944,  944,  944,
2876
      944,  944,  944,  944,  944, 1113,   34, 1113, 1113, 1113,
2877
     1113, 1113, 1113, 1113, 1113, 1113, 1113, 1115, 1115, 1115,
2878
     1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,   28,   27,
2879
     1123,   24,  944,  945, 1123,  945,  945,  945,  945,  945,
2880
      945,  945,  945,  945,  945, 1116, 1116, 1116, 1116, 1116,
2881
     1116, 1116, 1116, 1116, 1116, 1116,   23,    0, 1123, 1128,
2882
     1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128,    0,
2883
        0,    0,  945,  955,    0,  955,  955,  955,  955,  955,
2884
      955,  955,  955,  955,  955,  955,  958, 1123,  958,  958,
2885
2886
      958,  958,  958,  958,  958,  958,  958,  958,  958,    0,
2887
        0,    0,  958,  958,  958,  958,  958,  958, 1129, 1129,
2888
     1129, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1133, 1139,
2889
     1327, 1327, 1133, 1139,    0,    0, 1327,    0,  958,  958,
2890
      958,  958,  958,  958,  961,  961,  961,  961,  961,  961,
2891
      961,  961,  961,  961,  961,    0, 1133, 1139,  961,  961,
2892
      961,  961,  961,  961, 1147, 1147, 1147, 1147, 1147, 1147,
2893
     1147, 1147, 1147, 1147,    0, 1124,    0, 1133, 1139, 1124,
2894
        0,    0,    0,    0,  961,  961,  961,  961,  961,  961,
2895
      973,  973,  973,  973,  973,  973,  973,  973,  973,  973,
2896
2897
      973,  973, 1009, 1124, 1009, 1009, 1009, 1009, 1009, 1009,
2898
     1009, 1009, 1009, 1009, 1130,    0, 1130, 1130, 1130, 1130,
2899
     1130, 1130, 1130, 1130, 1130, 1130,    0,    0,    0,    0,
2900
        0, 1151, 1124, 1151, 1151, 1151, 1151, 1151, 1151, 1165,
2901
        0, 1009, 1010, 1165, 1010, 1010, 1010, 1010, 1010, 1010,
2902
     1010, 1010, 1010, 1010, 1131,    0, 1131, 1131, 1131, 1131,
2903
     1131, 1131, 1131, 1131, 1131, 1131, 1132, 1165, 1132, 1132,
2904
     1132, 1132, 1132, 1132, 1132, 1132, 1132, 1132,    0,    0,
2905
        0, 1010, 1011,    0, 1011, 1011, 1011, 1011, 1011, 1011,
2906
     1011, 1011, 1011, 1011,    0, 1140, 1165,    0,    0, 1140,
2907
2908
     1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
2909
     1146,    0, 1146, 1146, 1146, 1146, 1146, 1146,    0,    0,
2910
        0, 1011, 1012, 1140, 1012, 1012, 1012, 1012, 1012, 1012,
2911
     1012, 1012, 1012, 1012,    0,    0, 1171, 1142, 1171, 1171,
2912
     1171, 1171, 1171, 1171, 1140,    0,    0,    0, 1149, 1146,
2913
     1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
2914
        0, 1012, 1021,    0, 1021, 1021, 1021, 1021, 1021, 1021,
2915
     1021, 1021, 1021, 1021, 1150,    0, 1150, 1150, 1150, 1150,
2916
     1150, 1150, 1150, 1150, 1150, 1150, 1157,    0, 1157, 1157,
2917
     1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,    0,    0,
2918
2919
        0, 1021, 1022,    0, 1022, 1022, 1022, 1022, 1022, 1022,
2920
     1022, 1022, 1022, 1022, 1167, 1167, 1167, 1167, 1167, 1167,
2921
     1167, 1167, 1167, 1167, 1169,    0, 1169, 1169, 1169, 1169,
2922
     1169, 1169, 1169, 1169, 1169, 1169,    0, 1328, 1328,    0,
2923
        0, 1022, 1036, 1328, 1036, 1036, 1036, 1036, 1036, 1036,
2924
     1036, 1036, 1036, 1036, 1036, 1039,    0, 1039, 1039, 1039,
2925
     1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039,    0,    0,
2926
        0, 1039, 1039, 1039, 1039, 1039, 1039, 1170,    0, 1170,
2927
     1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1217,
2928
        0, 1217, 1217, 1217, 1217, 1217, 1217, 1039, 1039, 1039,
2929
2930
     1039, 1039, 1039, 1042, 1042, 1042, 1042, 1042, 1042, 1042,
2931
     1042, 1042, 1042,    0,    0,    0,    0, 1042, 1042, 1042,
2932
     1042, 1042, 1042,    0, 1173, 1173, 1173, 1173, 1173, 1173,
2933
     1173, 1173, 1173, 1173, 1177,    0, 1177, 1177, 1177, 1177,
2934
     1177, 1177,    0, 1042, 1042, 1042, 1042, 1042, 1042, 1087,
2935
        0, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087,
2936
     1087, 1173, 1178, 1331, 1331, 1349, 1178,    0, 1349, 1331,
2937
     1349,    0,    0, 1177, 1182, 1182, 1182, 1182, 1182, 1182,
2938
     1182, 1182, 1182, 1182,    0,    0,    0,    0, 1087, 1088,
2939
     1178, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088,
2940
2941
     1088, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
2942
     1183, 1178, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
2943
     1184, 1184,    0,    0, 1332, 1332,    0,    0, 1088, 1095,
2944
     1332, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
2945
     1095, 1195,    0, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
2946
     1195, 1195, 1195, 1196,    0, 1196, 1196, 1196, 1196, 1196,
2947
     1196, 1196, 1196, 1196, 1196,    0,    0,    0, 1095, 1096,
2948
        0, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096,
2949
     1096, 1197,    0, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
2950
     1197, 1197, 1197, 1201, 1201, 1201, 1201, 1201, 1201, 1201,
2951
2952
     1201, 1201, 1201,    0, 1333, 1333,    0,    0, 1096, 1097,
2953
     1333, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097,
2954
     1097, 1336, 1336, 1337, 1337, 1344, 1344, 1336,    0, 1337,
2955
     1201, 1344,    0,    0,    0, 1205,    0, 1205, 1205, 1205,
2956
     1205, 1205, 1205,    0, 1352, 1352,    0,    0, 1097, 1107,
2957
     1352, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107,
2958
     1107, 1107, 1110,    0, 1110, 1110, 1110, 1110, 1110, 1110,
2959
     1110, 1110, 1110, 1110, 1205,    0,    0,    0, 1110, 1110,
2960
     1110, 1110, 1110, 1110, 1207, 1207, 1207, 1207, 1207, 1207,
2961
     1207, 1207, 1207, 1207, 1208, 1208, 1208, 1208, 1208, 1208,
2962
2963
     1208, 1208, 1208, 1208, 1110, 1110, 1110, 1110, 1110, 1110,
2964
     1136,    0, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2965
     1136, 1136, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
2966
     1213, 1213, 1215,    0, 1215, 1215, 1215, 1215, 1215, 1215,
2967
     1215, 1215, 1215, 1215,    0, 1359, 1359,    0,    0, 1136,
2968
     1137, 1359, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
2969
     1137, 1137, 1216,    0, 1216, 1216, 1216, 1216, 1216, 1216,
2970
     1216, 1216, 1216, 1216, 1218, 1218, 1218, 1218, 1218, 1218,
2971
     1218, 1218, 1218, 1218,    0, 1362, 1362,    0,    0, 1137,
2972
     1138, 1362, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
2973
2974
     1138, 1138,    0, 1222,    0, 1222, 1222, 1222, 1222, 1222,
2975
     1222, 1218, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
2976
     1223, 1223,    0, 1235, 1235, 1235, 1235, 1235, 1235, 1138,
2977
     1144,    0, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
2978
     1144, 1144, 1222,    0,    0,    0,    0,    0,    0, 1223,
2979
     1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224,
2980
     1235, 1364, 1364,    0,    0,    0,    0, 1364,    0, 1144,
2981
     1145,    0, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
2982
     1145, 1145,    0,    0,    0,    0,    0, 1224, 1225, 1225,
2983
     1225, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 1227, 1227,
2984
2985
     1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,    0, 1145,
2986
     1175,    0, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
2987
     1175, 1175,    0,    0,    0, 1225, 1228, 1228, 1228, 1228,
2988
     1228, 1228, 1228, 1228, 1228, 1228, 1229, 1229, 1229, 1229,
2989
     1229, 1229, 1229, 1229, 1229, 1229,    0,    0,    0, 1175,
2990
     1176,    0, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
2991
     1176, 1176,    0,    0,    0, 1230, 1230, 1230, 1230, 1230,
2992
     1230, 1230, 1230, 1230, 1230, 1231, 1231, 1231, 1231, 1231,
2993
     1231, 1231, 1231, 1231, 1231,    0,    0,    0,    0, 1176,
2994
     1179,    0, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
2995
2996
     1179, 1179, 1230,    0,    0, 1242, 1242, 1242, 1242, 1242,
2997
     1242,    0, 1231, 1232, 1232, 1232, 1232, 1232, 1232, 1232,
2998
     1232, 1232, 1232,    0,    0,    0,    0,    0,    0, 1179,
2999
     1180,    0, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
3000
     1180, 1180, 1242,    0,    0,    0,    0,    0,    0,    0,
3001
     1232, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
3002
     1234,    0,    0,    0,    0,    0,    0,    0,    0, 1180,
3003
     1181,    0, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
3004
     1181, 1181,    0,    0,    0,    0,    0,    0, 1234, 1238,
3005
     1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1241,
3006
3007
     1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1181,
3008
     1198,    0, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
3009
     1198, 1198,    0,    0,    0,    0,    0,    0,    0,    0,
3010
        0,    0,    0,    0,    0,    0, 1241,    0,    0,    0,
3011
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1198,
3012
     1199,    0, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
3013
     1199, 1199,    0,    0,    0,    0,    0,    0,    0,    0,
3014
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
3015
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1199,
3016
     1200,    0, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
3017
3018
     1200, 1200,    0,    0,    0,    0,    0,    0,    0,    0,
3019
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
3020
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1200,
3021
     1203,    0, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
3022
     1203, 1203,    0,    0,    0,    0,    0,    0,    0,    0,
3023
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
3024
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1203,
3025
     1204,    0, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
3026
     1204, 1204,    0,    0,    0,    0,    0,    0,    0,    0,
3027
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
3028
3029
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1204,
3030
     1220,    0, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220,
3031
     1220, 1220,    0,    0,    0,    0,    0,    0,    0,    0,
3032
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
3033
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1220,
3034
     1221,    0, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
3035
     1221, 1221,    0,    0,    0,    0,    0,    0,    0,    0,
3036
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
3037
        0,    0,    0,    0,    0,    0,    0,    0,    0, 1221,
3038
     1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244,
3039
3040
     1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244,
3041
     1244, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245,
3042
     1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245,
3043
     1245, 1245, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
3044
     1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246, 1246,
3045
     1246, 1246, 1246, 1247, 1247, 1247, 1247, 1247, 1247, 1247,
3046
     1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247,
3047
     1247, 1247, 1247, 1247, 1248, 1248, 1248, 1248, 1248, 1248,
3048
     1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248,
3049
     1248, 1248, 1248, 1248, 1248, 1249, 1249, 1249, 1249, 1249,
3050
3051
     1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
3052
     1249, 1249, 1249, 1249, 1249, 1249, 1250,    0,    0, 1250,
3053
        0,    0,    0, 1250,    0, 1250,    0, 1250, 1250, 1250,
3054
        0,    0, 1250, 1250, 1250, 1250, 1250, 1251, 1251, 1251,
3055
     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
3056
     1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1252,    0,
3057
        0, 1252,    0,    0, 1252, 1252,    0, 1252,    0, 1252,
3058
     1252, 1252, 1252,    0, 1252, 1252, 1252, 1252, 1252, 1253,
3059
        0,    0, 1253,    0,    0,    0, 1253,    0, 1253,    0,
3060
     1253, 1253, 1253,    0,    0, 1253, 1253, 1253, 1253, 1253,
3061
3062
     1254,    0,    0, 1254, 1254, 1254,    0, 1254, 1254, 1254,
3063
        0, 1254, 1254, 1254,    0,    0, 1254, 1254, 1254, 1254,
3064
     1254, 1256, 1256,    0, 1256, 1256, 1256,    0, 1256, 1256,
3065
     1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256,
3066
     1256, 1256, 1257,    0,    0, 1257, 1257, 1257,    0, 1257,
3067
     1257, 1257,    0, 1257, 1257, 1257,    0,    0, 1257, 1257,
3068
     1257, 1257, 1257, 1258, 1258,    0, 1258, 1258, 1258,    0,
3069
     1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 1258,
3070
     1258, 1258, 1258, 1258, 1259,    0,    0, 1259, 1259, 1259,
3071
        0, 1259, 1259, 1259,    0, 1259, 1259, 1259,    0, 1259,
3072
3073
     1259,    0, 1259, 1259, 1259, 1260, 1260,    0, 1260, 1260,
3074
     1260,    0,    0, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
3075
     1260, 1260,    0, 1260, 1260, 1260, 1261, 1261, 1261, 1261,
3076
     1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261,
3077
     1261, 1261, 1261, 1261, 1261, 1261, 1261, 1263,    0,    0,
3078
     1263, 1263,    0,    0, 1263, 1263, 1263,    0, 1263, 1263,
3079
     1263, 1263,    0, 1263, 1263, 1263, 1263, 1263, 1264, 1264,
3080
     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264,
3081
     1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1265,
3082
     1265,    0, 1265, 1265,    0, 1265, 1265, 1265, 1265, 1265,
3083
3084
     1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
3085
     1266,    0,    0, 1266,    0,    0, 1266, 1266,    0, 1266,
3086
        0, 1266, 1266, 1266, 1266,    0, 1266, 1266, 1266, 1266,
3087
     1266, 1267,    0,    0, 1267,    0,    0,    0, 1267,    0,
3088
     1267,    0, 1267, 1267, 1267,    0, 1267, 1267, 1267, 1267,
3089
     1267, 1267, 1268,    0,    0, 1268, 1268, 1268,    0, 1268,
3090
     1268, 1268,    0, 1268, 1268, 1268,    0, 1268, 1268, 1268,
3091
     1268, 1268, 1268, 1269, 1269,    0, 1269, 1269, 1269,    0,
3092
     1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
3093
     1269, 1269, 1269, 1269, 1270,    0,    0,    0, 1270, 1270,
3094
3095
     1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270,
3096
     1270, 1270, 1270, 1270, 1270, 1271,    0,    0, 1271,    0,
3097
        0,    0, 1271,    0, 1271,    0, 1271, 1271, 1271,    0,
3098
        0, 1271, 1271, 1271, 1271, 1271, 1272,    0,    0, 1272,
3099
        0,    0, 1272, 1272,    0, 1272,    0, 1272, 1272, 1272,
3100
     1272,    0, 1272, 1272, 1272, 1272, 1272, 1273,    0,    0,
3101
     1273,    0,    0,    0, 1273,    0, 1273,    0, 1273, 1273,
3102
     1273,    0,    0, 1273, 1273, 1273, 1273, 1273, 1274,    0,
3103
        0, 1274, 1274, 1274,    0, 1274, 1274, 1274,    0, 1274,
3104
     1274, 1274,    0,    0, 1274, 1274, 1274, 1274, 1274, 1275,
3105
3106
     1275,    0, 1275, 1275, 1275,    0, 1275, 1275, 1275, 1275,
3107
     1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
3108
     1276,    0,    0, 1276,    0,    0,    0, 1276,    0, 1276,
3109
        0, 1276, 1276, 1276,    0,    0, 1276, 1276, 1276, 1276,
3110
     1276, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
3111
     1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
3112
     1277, 1277, 1278, 1278,    0, 1278, 1278, 1278, 1278, 1278,
3113
     1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278,
3114
     1278, 1278, 1278, 1279,    0,    0, 1279,    0,    0,    0,
3115
     1279,    0, 1279,    0, 1279, 1279, 1279,    0,    0, 1279,
3116
3117
     1279, 1279, 1279, 1279, 1280,    0,    0, 1280,    0,    0,
3118
        0, 1280,    0, 1280,    0, 1280, 1280, 1280,    0,    0,
3119
     1280, 1280, 1280, 1280, 1280, 1281,    0,    0, 1281, 1281,
3120
     1281,    0, 1281, 1281, 1281,    0, 1281, 1281, 1281,    0,
3121
        0, 1281, 1281, 1281, 1281, 1281, 1282,    0,    0, 1282,
3122
     1282, 1282,    0, 1282, 1282, 1282,    0, 1282, 1282, 1282,
3123
        0,    0, 1282, 1282, 1282, 1282, 1282, 1285, 1285, 1285,
3124
        0,    0,    0,    0, 1285, 1286, 1286,    0, 1286, 1286,
3125
     1286,    0, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
3126
     1286, 1286, 1286, 1286, 1286, 1286, 1287, 1287,    0, 1287,
3127
3128
     1287, 1287,    0, 1287, 1287, 1287, 1287, 1287, 1287, 1287,
3129
     1287, 1287, 1287, 1287, 1287, 1287, 1287, 1288,    0,    0,
3130
     1288, 1288, 1288,    0, 1288, 1288, 1288,    0, 1288, 1288,
3131
     1288,    0,    0, 1288, 1288, 1288, 1288, 1288, 1289,    0,
3132
        0, 1289, 1289, 1289,    0, 1289, 1289, 1289,    0, 1289,
3133
     1289, 1289,    0,    0, 1289, 1289, 1289, 1289, 1289, 1290,
3134
     1290,    0, 1290, 1290, 1290,    0, 1290, 1290, 1290, 1290,
3135
     1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,
3136
     1291, 1291,    0, 1291, 1291, 1291,    0, 1291, 1291, 1291,
3137
     1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
3138
3139
     1291, 1292,    0,    0, 1292, 1292, 1292,    0, 1292, 1292,
3140
     1292,    0, 1292, 1292, 1292,    0, 1292, 1292,    0, 1292,
3141
     1292, 1292, 1293, 1293,    0, 1293, 1293, 1293,    0,    0,
3142
     1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293, 1293,    0,
3143
     1293, 1293, 1293, 1295,    0,    0, 1295, 1295,    0,    0,
3144
     1295, 1295, 1295,    0, 1295, 1295, 1295, 1295,    0, 1295,
3145
     1295, 1295, 1295, 1295, 1296, 1296,    0, 1296, 1296,    0,
3146
     1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296, 1296,
3147
     1296, 1296, 1296, 1296, 1296, 1297,    0,    0, 1297,    0,
3148
        0,    0, 1297,    0, 1297,    0, 1297, 1297, 1297,    0,
3149
3150
        0, 1297, 1297, 1297, 1297, 1297, 1298,    0,    0, 1298,
3151
        0,    0,    0, 1298,    0, 1298,    0, 1298, 1298, 1298,
3152
        0, 1298, 1298, 1298, 1298, 1298, 1298, 1299,    0,    0,
3153
     1299, 1299,    0, 1299, 1299,    0,    0, 1299, 1299, 1300,
3154
        0,    0, 1300, 1300, 1300,    0, 1300, 1300, 1300,    0,
3155
     1300, 1300, 1300,    0, 1300, 1300, 1300, 1300, 1300, 1300,
3156
     1302,    0,    0,    0, 1302, 1302, 1302, 1302, 1302, 1302,
3157
     1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302,
3158
     1302, 1303,    0,    0, 1303,    0,    0,    0, 1303,    0,
3159
     1303,    0, 1303, 1303, 1303,    0,    0, 1303, 1303, 1303,
3160
3161
     1303, 1303, 1304,    0,    0, 1304,    0,    0,    0, 1304,
3162
        0, 1304,    0, 1304, 1304, 1304,    0,    0, 1304, 1304,
3163
     1304, 1304, 1304, 1305,    0,    0, 1305,    0,    0,    0,
3164
     1305,    0, 1305,    0, 1305, 1305, 1305,    0,    0, 1305,
3165
     1305, 1305, 1305, 1305, 1306,    0,    0, 1306, 1306, 1306,
3166
        0, 1306, 1306, 1306,    0, 1306, 1306, 1306,    0,    0,
3167
     1306, 1306, 1306, 1306, 1306, 1307,    0,    0, 1307, 1307,
3168
     1307,    0, 1307, 1307, 1307,    0, 1307, 1307, 1307,    0,
3169
        0, 1307, 1307, 1307, 1307, 1307, 1308, 1308,    0, 1308,
3170
     1308, 1308,    0, 1308, 1308, 1308, 1308, 1308, 1308, 1308,
3171
3172
     1308, 1308, 1308, 1308, 1308, 1308, 1308, 1309, 1309, 1309,
3173
     1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
3174
     1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1310, 1310,
3175
     1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310,
3176
     1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1311,
3177
        0,    0, 1311,    0,    0,    0, 1311,    0, 1311,    0,
3178
     1311, 1311, 1311,    0,    0, 1311, 1311, 1311, 1311, 1311,
3179
     1313, 1313, 1313,    0,    0,    0,    0, 1313, 1314, 1314,
3180
        0, 1314, 1314, 1314,    0, 1314, 1314, 1314, 1314, 1314,
3181
     1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1315,
3182
3183
     1315,    0, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
3184
     1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315,
3185
     1316, 1316,    0, 1316, 1316, 1316,    0, 1316, 1316, 1316,
3186
     1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
3187
     1316, 1317, 1317,    0, 1317, 1317, 1317,    0, 1317, 1317,
3188
     1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317,
3189
     1317, 1317, 1321, 1321, 1321,    0,    0,    0,    0, 1321,
3190
     1322, 1322, 1322,    0,    0,    0,    0, 1322, 1323, 1323,
3191
     1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323,
3192
     1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1324,
3193
3194
     1324,    0, 1324, 1324, 1324,    0, 1324, 1324, 1324, 1324,
3195
     1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324,
3196
     1329, 1329, 1329,    0,    0,    0,    0, 1329, 1330, 1330,
3197
     1330, 1330,    0,    0,    0,    0, 1330, 1334, 1334, 1334,
3198
        0,    0,    0,    0, 1334, 1335, 1335, 1335, 1335,    0,
3199
        0,    0,    0, 1335, 1338, 1338, 1338,    0,    0,    0,
3200
        0, 1338, 1339, 1339, 1339, 1339,    0,    0,    0,    0,
3201
     1339, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
3202
     1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
3203
     1340, 1340, 1342,    0,    0, 1342, 1342,    0, 1342, 1342,
3204
3205
        0,    0, 1342, 1342, 1343,    0,    0, 1343,    0,    0,
3206
        0, 1343,    0, 1343,    0, 1343, 1343, 1343,    0,    0,
3207
     1343, 1343, 1343, 1343, 1343, 1345,    0, 1345, 1345,    0,
3208
        0,    0,    0, 1345, 1346, 1346, 1346,    0,    0,    0,
3209
        0, 1346, 1347, 1347, 1347, 1347,    0,    0,    0,    0,
3210
     1347, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
3211
     1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
3212
     1348, 1348, 1350,    0,    0, 1350, 1350,    0, 1350, 1350,
3213
        0,    0, 1350, 1350, 1351,    0,    0, 1351,    0,    0,
3214
        0, 1351,    0, 1351,    0, 1351, 1351, 1351,    0,    0,
3215
3216
     1351, 1351, 1351, 1351, 1351, 1353,    0, 1353, 1353,    0,
3217
        0,    0,    0, 1353, 1354, 1354, 1354,    0,    0,    0,
3218
        0, 1354, 1355, 1355, 1355,    0,    0,    0,    0,    0,
3219
     1355, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
3220
     1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356,
3221
     1356, 1356, 1357, 1357,    0, 1357, 1357, 1357, 1357, 1357,
3222
        0, 1357,    0, 1357, 1357, 1357,    0,    0, 1357, 1357,
3223
     1357, 1357, 1357, 1358, 1358,    0, 1358, 1358, 1358, 1358,
3224
     1358,    0, 1358,    0, 1358, 1358, 1358,    0,    0, 1358,
3225
     1358, 1358, 1358, 1358, 1360,    0, 1360, 1360,    0,    0,
3226
3227
        0,    0, 1360, 1363,    0, 1363, 1363,    0,    0,    0,
3228
        0, 1363, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
3229
     1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366,
3230
     1366, 1366, 1366, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3231
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3232
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3233
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3234
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3235
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3236
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243,
3237
3238
     1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243
3239
    } ;
3240
3241
static yy_state_type yy_last_accepting_state;
3242
static char *yy_last_accepting_cpos;
3243
3244
extern int yy_flex_debug;
3245
int yy_flex_debug = 0;
3246
3247
/* The intent behind this definition is that it'll catch
3248
 * any uses of REJECT which flex missed.
3249
 */
3250
#define REJECT reject_used_but_not_detected
3251
#define yymore() yymore_used_but_not_detected
3252
0
#define YY_MORE_ADJ 0
3253
#define YY_RESTORE_YY_MORE_OFFSET
3254
char *yytext;
3255
#line 1 "toke.l"
3256
#line 2 "toke.l"
3257
/*
3258
 * SPDX-License-Identifier: ISC
3259
 *
3260
 * Copyright (c) 1996, 1998-2005, 2007-2026
3261
 *  Todd C. Miller <Todd.Miller@sudo.ws>
3262
 *
3263
 * Permission to use, copy, modify, and distribute this software for any
3264
 * purpose with or without fee is hereby granted, provided that the above
3265
 * copyright notice and this permission notice appear in all copies.
3266
 *
3267
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3268
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3269
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3270
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3271
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3272
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3273
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3274
 *
3275
 * Sponsored in part by the Defense Advanced Research Projects
3276
 * Agency (DARPA) and Air Force Research Laboratory, Air Force
3277
 * Materiel Command, USAF, under agreement number F39502-99-1-0512.
3278
 */
3279
3280
#include <config.h>
3281
3282
#include <sys/types.h>
3283
#include <sys/stat.h>
3284
#include <stdio.h>
3285
#include <stdlib.h>
3286
#include <string.h>
3287
#if defined(HAVE_STDINT_H)
3288
# include <stdint.h>
3289
#elif defined(HAVE_INTTYPES_H)
3290
# include <inttypes.h>
3291
#endif
3292
#include <unistd.h>
3293
#include <dirent.h>
3294
#include <errno.h>
3295
#include <ctype.h>
3296
#include <sudoers.h>
3297
#include <toke.h>
3298
#include <gram.h>
3299
#include <sudo_digest.h>
3300
#include <sudo_lbuf.h>
3301
3302
#if defined(HAVE_STRUCT_DIRENT_D_NAMLEN) && HAVE_STRUCT_DIRENT_D_NAMLEN
3303
# define NAMLEN(dirent) (dirent)->d_namlen
3304
#else
3305
0
# define NAMLEN(dirent) strlen((dirent)->d_name)
3306
#endif
3307
3308
// PVS Studio suppression
3309
// -V::519, 547, 1004, 1037, 1048
3310
3311
int sudolineno;     /* current sudoers line number. */
3312
char *sudoers;      /* sudoers file being parsed. */
3313
char *sudoers_search_path;  /* colon-separated path of sudoers files. */
3314
const char *sudoers_errstr; /* description of last error from lexer. */
3315
struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */
3316
3317
static bool continued, sawspace;
3318
static int prev_state;
3319
static unsigned int digest_type = SUDO_DIGEST_INVALID;
3320
3321
static bool pop_include(void);
3322
static int sudoers_input(char *buf, yy_size_t max_size);
3323
3324
#ifndef TRACELEXER
3325
static struct sudo_lbuf trace_lbuf;
3326
#endif
3327
3328
int (*trace_print)(const char *msg) = sudoers_trace_print;
3329
3330
0
#define ECHO  ignore_result(fwrite(sudoerstext, (size_t)sudoersleng, 1, sudoersout))
3331
3332
0
#define YY_INPUT(buf, result, max_size) (result) = sudoers_input(buf, (yy_size_t)(max_size))
3333
3334
0
#define YY_USER_ACTION do {         \
3335
0
  sudolinebuf.toke_start = sudolinebuf.toke_end;    \
3336
0
  sudolinebuf.toke_end += (size_t)sudoersleng;    \
3337
0
} while (0);
3338
3339
0
#define sudoersless(n) do {         \
3340
0
  sudolinebuf.toke_end = sudolinebuf.toke_start + (size_t)(n);  \
3341
0
  yyless((int)n);           \
3342
0
} while (0);
3343
3344
#define CHECK_EDIT_ARG              \
3345
0
    if (YY_START == GOTEDIT && sudoerstext[0] != '/' &&     \
3346
0
      (sudoerslval.command.args == NULL || sawspace)) {   \
3347
0
  sudoers_errstr = N_("invalid sudoedit file name");   \
3348
0
  LEXTRACE("ERROR ");           \
3349
0
  return ERROR;             \
3350
0
    }
3351
3352
#line 3352 "toke.c"
3353
#define YY_NO_INPUT 1
3354
3355
#line 3355 "toke.c"
3356
3357
85.6k
#define INITIAL 0
3358
0
#define GOTDEFS 1
3359
0
#define GOTCMND 2
3360
0
#define GOTEDIT 3
3361
0
#define GOTREGEX 4
3362
0
#define STARTDEFS 5
3363
0
#define INDEFS 6
3364
0
#define INSTR 7
3365
0
#define WANTDIGEST 8
3366
0
#define GOTINC 9
3367
0
#define EXPECTPATH 10
3368
3369
#ifndef YY_NO_UNISTD_H
3370
/* Special case for "unistd.h", since it is non-ANSI. We include it way
3371
 * down here because we want the user's section 1 to have been scanned first.
3372
 * The user has a chance to override it with an option.
3373
 */
3374
#include <unistd.h>
3375
#endif
3376
3377
#ifndef YY_EXTRA_TYPE
3378
#define YY_EXTRA_TYPE void *
3379
#endif
3380
3381
static int yy_init_globals ( void );
3382
3383
/* Accessor methods to globals.
3384
   These are made visible to non-reentrant scanners for convenience. */
3385
3386
int yylex_destroy ( void );
3387
3388
int yyget_debug ( void );
3389
3390
void yyset_debug ( int debug_flag  );
3391
3392
YY_EXTRA_TYPE yyget_extra ( void );
3393
3394
void yyset_extra ( YY_EXTRA_TYPE user_defined  );
3395
3396
FILE *yyget_in ( void );
3397
3398
void yyset_in  ( FILE * _in_str  );
3399
3400
FILE *yyget_out ( void );
3401
3402
void yyset_out  ( FILE * _out_str  );
3403
3404
      int yyget_leng ( void );
3405
3406
char *yyget_text ( void );
3407
3408
int yyget_lineno ( void );
3409
3410
void yyset_lineno ( int _line_number  );
3411
3412
/* Macros after this point can all be overridden by user definitions in
3413
 * section 1.
3414
 */
3415
3416
#ifndef YY_SKIP_YYWRAP
3417
#ifdef __cplusplus
3418
extern "C" int yywrap ( void );
3419
#else
3420
extern int yywrap ( void );
3421
#endif
3422
#endif
3423
3424
#ifndef YY_NO_UNPUT
3425
    
3426
#endif
3427
3428
#ifndef yytext_ptr
3429
static void yy_flex_strncpy ( char *, const char *, int );
3430
#endif
3431
3432
#ifdef YY_NEED_STRLEN
3433
static int yy_flex_strlen ( const char * );
3434
#endif
3435
3436
#ifndef YY_NO_INPUT
3437
#ifdef __cplusplus
3438
static int yyinput ( void );
3439
#else
3440
static int input ( void );
3441
#endif
3442
3443
#endif
3444
3445
/* Amount of stuff to slurp up with each read. */
3446
#ifndef YY_READ_BUF_SIZE
3447
#ifdef __ia64__
3448
/* On IA-64, the buffer size is 16k, not 8k */
3449
#define YY_READ_BUF_SIZE 16384
3450
#else
3451
0
#define YY_READ_BUF_SIZE 8192
3452
#endif /* __ia64__ */
3453
#endif
3454
3455
/* Copy whatever the last rule matched to the standard output. */
3456
#ifndef ECHO
3457
/* This used to be an fputs(), but since the string might contain NUL's,
3458
 * we now use fwrite().
3459
 */
3460
#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
3461
#endif
3462
3463
/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
3464
 * is returned in "result".
3465
 */
3466
#ifndef YY_INPUT
3467
#define YY_INPUT(buf,result,max_size) \
3468
  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
3469
    { \
3470
    int c = '*'; \
3471
    int n; \
3472
    for ( n = 0; n < max_size && \
3473
           (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
3474
      buf[n] = (char) c; \
3475
    if ( c == '\n' ) \
3476
      buf[n++] = (char) c; \
3477
    if ( c == EOF && ferror( yyin ) ) \
3478
      YY_FATAL_ERROR( "input in flex scanner failed" ); \
3479
    result = n; \
3480
    } \
3481
  else \
3482
    { \
3483
    errno=0; \
3484
    while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
3485
      { \
3486
      if( errno != EINTR) \
3487
        { \
3488
        YY_FATAL_ERROR( "input in flex scanner failed" ); \
3489
        break; \
3490
        } \
3491
      errno=0; \
3492
      clearerr(yyin); \
3493
      } \
3494
    }\
3495
\
3496
3497
#endif
3498
3499
/* No semi-colon after return; correct usage is to write "yyterminate();" -
3500
 * we don't want an extra ';' after the "return" because that will cause
3501
 * some compilers to complain about unreachable statements.
3502
 */
3503
#ifndef yyterminate
3504
0
#define yyterminate() return YY_NULL
3505
#endif
3506
3507
/* Number of entries by which start-condition stack grows. */
3508
#ifndef YY_START_STACK_INCR
3509
#define YY_START_STACK_INCR 25
3510
#endif
3511
3512
/* Report a fatal error. */
3513
#ifndef YY_FATAL_ERROR
3514
0
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
3515
#endif
3516
3517
/* end tables serialization structures and prototypes */
3518
3519
/* Default declaration of generated scanner - a define so the user can
3520
 * easily add parameters.
3521
 */
3522
#ifndef YY_DECL
3523
#define YY_DECL_IS_OURS 1
3524
3525
extern int yylex (void);
3526
3527
#define YY_DECL int yylex (void)
3528
#endif /* !YY_DECL */
3529
3530
/* Code executed at the beginning of each rule, after yytext and yyleng
3531
 * have been set up.
3532
 */
3533
#ifndef YY_USER_ACTION
3534
#define YY_USER_ACTION
3535
#endif
3536
3537
/* Code executed at the end of each rule. */
3538
#ifndef YY_BREAK
3539
0
#define YY_BREAK /*LINTED*/break;
3540
#endif
3541
3542
#define YY_RULE_SETUP \
3543
0
  if ( yyleng > 0 ) \
3544
0
    YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
3545
0
        (yytext[yyleng - 1] == '\n'); \
3546
0
  YY_USER_ACTION
3547
3548
/** The main scanner function which does all the work.
3549
 */
3550
YY_DECL
3551
0
{
3552
0
  yy_state_type yy_current_state;
3553
0
  char *yy_cp, *yy_bp;
3554
0
  int yy_act;
3555
    
3556
0
  if ( !(yy_init) )
3557
0
    {
3558
0
    (yy_init) = 1;
3559
3560
#ifdef YY_USER_INIT
3561
    YY_USER_INIT;
3562
#endif
3563
3564
0
    if ( ! (yy_start) )
3565
0
      (yy_start) = 1; /* first start state */
3566
3567
0
    if ( ! yyin )
3568
0
      yyin = stdin;
3569
3570
0
    if ( ! yyout )
3571
0
      yyout = stdout;
3572
3573
0
    if ( ! YY_CURRENT_BUFFER ) {
3574
0
      yyensure_buffer_stack ();
3575
0
      YY_CURRENT_BUFFER_LVALUE =
3576
0
        yy_create_buffer( yyin, YY_BUF_SIZE );
3577
0
    }
3578
3579
0
    yy_load_buffer_state(  );
3580
0
    }
3581
3582
0
  {
3583
0
#line 128 "toke.l"
3584
3585
0
#line 3585 "toke.c"
3586
3587
0
  while ( /*CONSTCOND*/1 )    /* loops until end-of-file is reached */
3588
0
    {
3589
0
    yy_cp = (yy_c_buf_p);
3590
3591
    /* Support of yytext. */
3592
0
    *yy_cp = (yy_hold_char);
3593
3594
    /* yy_bp points to the position in yy_ch_buf of the start of
3595
     * the current run.
3596
     */
3597
0
    yy_bp = yy_cp;
3598
3599
0
    yy_current_state = (yy_start);
3600
0
    yy_current_state += YY_AT_BOL();
3601
0
yy_match:
3602
0
    do
3603
0
      {
3604
0
      YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
3605
0
      if ( yy_accept[yy_current_state] )
3606
0
        {
3607
0
        (yy_last_accepting_state) = yy_current_state;
3608
0
        (yy_last_accepting_cpos) = yy_cp;
3609
0
        }
3610
0
      while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3611
0
        {
3612
0
        yy_current_state = (int) yy_def[yy_current_state];
3613
0
        if ( yy_current_state >= 1244 )
3614
0
          yy_c = yy_meta[yy_c];
3615
0
        }
3616
0
      yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
3617
0
      ++yy_cp;
3618
0
      }
3619
0
    while ( yy_base[yy_current_state] != 9534 );
3620
3621
0
yy_find_action:
3622
0
    yy_act = yy_accept[yy_current_state];
3623
0
    if ( yy_act == 0 )
3624
0
      { /* have to back up */
3625
0
      yy_cp = (yy_last_accepting_cpos);
3626
0
      yy_current_state = (yy_last_accepting_state);
3627
0
      yy_act = yy_accept[yy_current_state];
3628
0
      }
3629
3630
0
    YY_DO_BEFORE_ACTION;
3631
3632
0
do_action:  /* This label is used only to access EOF actions. */
3633
3634
0
    switch ( yy_act )
3635
0
  { /* beginning of action switch */
3636
0
      case 0: /* must back up */
3637
      /* undo the effects of YY_DO_BEFORE_ACTION */
3638
0
      *yy_cp = (yy_hold_char);
3639
0
      yy_cp = (yy_last_accepting_cpos);
3640
0
      yy_current_state = (yy_last_accepting_state);
3641
0
      goto yy_find_action;
3642
3643
0
case 1:
3644
0
YY_RULE_SETUP
3645
0
#line 129 "toke.l"
3646
0
{
3647
0
          LEXTRACE(", ");
3648
0
          return ',';
3649
0
      }     /* return ',' */
3650
0
  YY_BREAK
3651
0
case 2:
3652
0
YY_RULE_SETUP
3653
0
#line 134 "toke.l"
3654
0
BEGIN STARTDEFS;
3655
0
  YY_BREAK
3656
0
case 3:
3657
0
YY_RULE_SETUP
3658
0
#line 136 "toke.l"
3659
0
{
3660
0
          BEGIN INDEFS;
3661
0
          LEXTRACE("DEFVAR ");
3662
0
          if (!fill(sudoerstext, sudoersleng))
3663
0
        yyterminate();
3664
0
          return DEFVAR;
3665
0
      }
3666
0
  YY_BREAK
3667
3668
0
case 4:
3669
0
YY_RULE_SETUP
3670
0
#line 145 "toke.l"
3671
0
{
3672
0
          BEGIN STARTDEFS;
3673
0
          LEXTRACE(", ");
3674
0
          return ',';
3675
0
      }     /* return ',' */
3676
0
  YY_BREAK
3677
0
case 5:
3678
0
YY_RULE_SETUP
3679
0
#line 151 "toke.l"
3680
0
{
3681
0
          LEXTRACE("= ");
3682
0
          return '=';
3683
0
      }     /* return '=' */
3684
0
  YY_BREAK
3685
0
case 6:
3686
0
YY_RULE_SETUP
3687
0
#line 156 "toke.l"
3688
0
{
3689
0
          LEXTRACE("+= ");
3690
0
          return '+';
3691
0
      }     /* return '+' */
3692
0
  YY_BREAK
3693
0
case 7:
3694
0
YY_RULE_SETUP
3695
0
#line 161 "toke.l"
3696
0
{
3697
0
          LEXTRACE("-= ");
3698
0
          return '-';
3699
0
      }     /* return '-' */
3700
0
  YY_BREAK
3701
0
case 8:
3702
0
YY_RULE_SETUP
3703
0
#line 166 "toke.l"
3704
0
{
3705
0
          LEXTRACE("BEGINSTR ");
3706
0
          sudoerslval.string = NULL;
3707
0
          prev_state = YY_START;
3708
0
          BEGIN INSTR;
3709
0
      }
3710
0
  YY_BREAK
3711
0
case 9:
3712
0
YY_RULE_SETUP
3713
0
#line 173 "toke.l"
3714
0
{
3715
0
          LEXTRACE("WORD(2) ");
3716
0
          if (!fill(sudoerstext, sudoersleng))
3717
0
        yyterminate();
3718
0
          return WORD;
3719
0
      }
3720
0
  YY_BREAK
3721
3722
3723
0
case 10:
3724
/* rule 10 can match eol */
3725
0
YY_RULE_SETUP
3726
0
#line 182 "toke.l"
3727
0
{
3728
          /* Line continuation char followed by newline. */
3729
0
          sudolineno++;
3730
0
          continued = true;
3731
0
      }
3732
0
  YY_BREAK
3733
0
case 11:
3734
0
YY_RULE_SETUP
3735
0
#line 188 "toke.l"
3736
0
{
3737
0
          LEXTRACE("ENDSTR ");
3738
0
          BEGIN prev_state;
3739
3740
0
          if (sudoerslval.string == NULL) {
3741
0
        sudoers_errstr = N_("empty string");
3742
0
        LEXTRACE("ERROR ");
3743
0
        return ERROR;
3744
0
          }
3745
0
          if (prev_state == INITIAL || prev_state == GOTDEFS) {
3746
0
        switch (sudoerslval.string[0]) {
3747
0
        case '%':
3748
0
            if (sudoerslval.string[1] == '\0' ||
3749
0
          (sudoerslval.string[1] == ':' &&
3750
0
          sudoerslval.string[2] == '\0')) {
3751
0
          parser_leak_remove(LEAK_PTR, sudoerslval.string);
3752
0
          free(sudoerslval.string);
3753
0
          sudoers_errstr = N_("empty group");
3754
0
          LEXTRACE("ERROR ");
3755
0
          return ERROR;
3756
0
            }
3757
0
            LEXTRACE("USERGROUP ");
3758
0
            return USERGROUP;
3759
0
        case '+':
3760
0
            if (sudoerslval.string[1] == '\0') {
3761
0
          parser_leak_remove(LEAK_PTR, sudoerslval.string);
3762
0
          free(sudoerslval.string);
3763
0
          sudoers_errstr = N_("empty netgroup");
3764
0
          LEXTRACE("ERROR ");
3765
0
          return ERROR;
3766
0
            }
3767
0
            LEXTRACE("NETGROUP ");
3768
0
            return NETGROUP;
3769
0
        }
3770
0
          }
3771
0
          LEXTRACE("WORD(4) ");
3772
0
          return WORD;
3773
0
      }
3774
0
  YY_BREAK
3775
0
case 12:
3776
0
YY_RULE_SETUP
3777
0
#line 227 "toke.l"
3778
0
{
3779
0
          LEXTRACE("BACKSLASH ");
3780
0
          if (!append(sudoerstext, sudoersleng))
3781
0
        yyterminate();
3782
0
      }
3783
0
  YY_BREAK
3784
0
case 13:
3785
0
YY_RULE_SETUP
3786
0
#line 233 "toke.l"
3787
0
{
3788
0
          LEXTRACE("STRBODY ");
3789
0
          if (!append(sudoerstext, sudoersleng))
3790
0
        yyterminate();
3791
0
      }
3792
0
  YY_BREAK
3793
3794
3795
0
case 14:
3796
0
YY_RULE_SETUP
3797
0
#line 241 "toke.l"
3798
0
{
3799
          /* quoted fnmatch glob char, pass verbatim */
3800
0
          CHECK_EDIT_ARG
3801
0
          LEXTRACE("QUOTEDCHAR ");
3802
0
          if (!fill_args(sudoerstext, 2, sawspace))
3803
0
        yyterminate();
3804
0
          sawspace = false;
3805
0
      }
3806
0
  YY_BREAK
3807
0
case 15:
3808
0
YY_RULE_SETUP
3809
0
#line 250 "toke.l"
3810
0
{
3811
          /* quoted sudoers special char, strip backslash */
3812
0
          CHECK_EDIT_ARG
3813
0
          LEXTRACE("QUOTEDCHAR ");
3814
0
          if (!fill_args(sudoerstext + 1, 1, sawspace))
3815
0
        yyterminate();
3816
0
          sawspace = false;
3817
0
      }
3818
0
  YY_BREAK
3819
0
case 16:
3820
/* rule 16 can match eol */
3821
0
YY_RULE_SETUP
3822
0
#line 259 "toke.l"
3823
0
{
3824
0
          BEGIN INITIAL;
3825
0
          sudoersless(0);
3826
0
          yy_set_bol(0);
3827
0
          return COMMAND;
3828
0
      }     /* end of command line args */
3829
0
  YY_BREAK
3830
0
case 17:
3831
0
YY_RULE_SETUP
3832
0
#line 266 "toke.l"
3833
0
{
3834
0
          if (sudoerslval.command.args == NULL && sudoerstext[0] == '^') {
3835
0
        LEXTRACE("ARG REGEX ");
3836
0
        BEGIN GOTREGEX;
3837
0
        sudoersless(0);
3838
0
        yy_set_bol(0);
3839
0
          } else {
3840
0
        CHECK_EDIT_ARG
3841
0
        LEXTRACE("ARG ");
3842
0
        if (!fill_args(sudoerstext, sudoersleng,
3843
0
          sawspace))
3844
0
            yyterminate();
3845
0
        sawspace = false;
3846
0
          }
3847
0
      }     /* a command line arg */
3848
0
  YY_BREAK
3849
3850
3851
0
case 18:
3852
0
YY_RULE_SETUP
3853
0
#line 284 "toke.l"
3854
0
{
3855
          /* quoted character, pass verbatim */
3856
0
          LEXTRACE("QUOTEDCHAR ");
3857
0
          if (!fill_args(sudoerstext, 2, false))
3858
0
        yyterminate();
3859
0
      }
3860
0
  YY_BREAK
3861
0
case 19:
3862
/* rule 19 can match eol */
3863
0
YY_RULE_SETUP
3864
0
#line 291 "toke.l"
3865
0
{
3866
          /* Let the parser attempt to recover. */
3867
0
          sudoersless(0);
3868
0
          yy_set_bol(0);
3869
0
          BEGIN INITIAL;
3870
3871
0
          sudoers_errstr = N_("unterminated regular expression");
3872
0
          LEXTRACE("ERROR ");
3873
0
          return ERROR;
3874
0
      }     /* illegal inside regex */
3875
0
  YY_BREAK
3876
0
case 20:
3877
0
YY_RULE_SETUP
3878
0
#line 302 "toke.l"
3879
0
{
3880
0
          if (!fill_args("$", 1, false))
3881
0
        yyterminate();
3882
0
          BEGIN INITIAL;
3883
0
          continued = false;
3884
0
          if (sudoers_strict()) {
3885
0
        if (!sudo_regex_compile(NULL, sudoerstext,
3886
0
          &sudoers_errstr)) {
3887
0
            LEXTRACE("ERROR ");
3888
0
            return ERROR;
3889
0
        }
3890
0
          }
3891
0
          return COMMAND;
3892
0
      }
3893
0
  YY_BREAK
3894
0
case 21:
3895
0
YY_RULE_SETUP
3896
0
#line 317 "toke.l"
3897
0
{
3898
0
          if (continued) {
3899
        /* remove whitespace after line continuation */
3900
0
        while (isblank((unsigned char)*sudoerstext)) {
3901
0
            sudoerstext++;
3902
0
            sudoersleng--;
3903
0
        }
3904
0
        continued = false;
3905
0
          }
3906
0
          if (sudoersleng != 0) {
3907
0
        if (!fill_args(sudoerstext, sudoersleng, false))
3908
0
            yyterminate();
3909
0
          }
3910
0
      }
3911
0
  YY_BREAK
3912
3913
0
case 22:
3914
0
YY_RULE_SETUP
3915
0
#line 333 "toke.l"
3916
0
{
3917
          /* Only return DIGEST if the length is correct. */
3918
0
          size_t digest_len =
3919
0
        sudo_digest_getlen(digest_type);
3920
0
          if ((size_t)sudoersleng == digest_len * 2) {
3921
0
        if (!fill(sudoerstext, sudoersleng))
3922
0
            yyterminate();
3923
0
        BEGIN INITIAL;
3924
0
        LEXTRACE("DIGEST ");
3925
0
        return DIGEST;
3926
0
          }
3927
0
          BEGIN INITIAL;
3928
0
          sudoersless(sudoersleng);
3929
0
      } /* hex digest */
3930
0
  YY_BREAK
3931
0
case 23:
3932
0
YY_RULE_SETUP
3933
0
#line 348 "toke.l"
3934
0
{
3935
          /* Only return DIGEST if the length is correct. */
3936
0
          size_t len, digest_len =
3937
0
        sudo_digest_getlen(digest_type);
3938
0
          if (sudoerstext[sudoersleng - 1] == '=') {
3939
        /* use padding */
3940
0
        len = 4 * ((digest_len + 2) / 3);
3941
0
          } else {
3942
        /* no padding */
3943
0
        len = (4 * digest_len + 2) / 3;
3944
0
          }
3945
0
          if ((size_t)sudoersleng == len) {
3946
0
        if (!fill(sudoerstext, sudoersleng))
3947
0
            yyterminate();
3948
0
        BEGIN INITIAL;
3949
0
        LEXTRACE("DIGEST ");
3950
0
        return DIGEST;
3951
0
          }
3952
0
          BEGIN INITIAL;
3953
0
          sudoersless(sudoersleng);
3954
0
      } /* base64 digest */
3955
0
  YY_BREAK
3956
0
case 24:
3957
0
YY_RULE_SETUP
3958
0
#line 370 "toke.l"
3959
0
{
3960
0
          if (continued) {
3961
0
        sudoers_errstr = N_("invalid line continuation");
3962
0
        LEXTRACE("ERROR ");
3963
0
        return ERROR;
3964
0
          }
3965
3966
0
          BEGIN GOTINC;
3967
0
          LEXTRACE("INCLUDE ");
3968
0
          return INCLUDE;
3969
0
      }
3970
0
  YY_BREAK
3971
0
case 25:
3972
0
YY_RULE_SETUP
3973
0
#line 382 "toke.l"
3974
0
{
3975
0
          if (continued) {
3976
0
        sudoers_errstr = N_("invalid line continuation");
3977
0
        LEXTRACE("ERROR ");
3978
0
        return ERROR;
3979
0
          }
3980
3981
0
          BEGIN GOTINC;
3982
0
          LEXTRACE("INCLUDEDIR ");
3983
0
          return INCLUDEDIR;
3984
0
      }
3985
0
  YY_BREAK
3986
0
case 26:
3987
/* rule 26 can match eol */
3988
0
YY_RULE_SETUP
3989
0
#line 394 "toke.l"
3990
0
{
3991
0
          if (continued) {
3992
0
        sudoers_errstr = N_("invalid line continuation");
3993
0
        LEXTRACE("ERROR ");
3994
0
        return ERROR;
3995
0
          }
3996
3997
          /* only consume #include */
3998
0
          sudoersless(sizeof("#include") - 1);
3999
0
          yy_set_bol(0);
4000
4001
0
          BEGIN GOTINC;
4002
0
          LEXTRACE("INCLUDE ");
4003
0
          return INCLUDE;
4004
0
      }
4005
0
  YY_BREAK
4006
0
case 27:
4007
/* rule 27 can match eol */
4008
0
YY_RULE_SETUP
4009
0
#line 410 "toke.l"
4010
0
{
4011
0
          if (continued) {
4012
0
        sudoers_errstr = N_("invalid line continuation");
4013
0
        LEXTRACE("ERROR ");
4014
0
        return ERROR;
4015
0
          }
4016
4017
          /* only consume #includedir */
4018
0
          sudoersless(sizeof("#includedir") - 1);
4019
0
          yy_set_bol(0);
4020
4021
0
          BEGIN GOTINC;
4022
0
          LEXTRACE("INCLUDEDIR ");
4023
0
          return INCLUDEDIR;
4024
0
      }
4025
0
  YY_BREAK
4026
0
case 28:
4027
0
YY_RULE_SETUP
4028
0
#line 426 "toke.l"
4029
0
{
4030
0
          char deftype;
4031
0
          size_t n;
4032
4033
0
          if (continued) {
4034
0
        sudoers_errstr = N_("invalid line continuation");
4035
0
        LEXTRACE("ERROR ");
4036
0
        return ERROR;
4037
0
          }
4038
4039
0
          for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
4040
0
        continue;
4041
0
          n += sizeof("Defaults") - 1;
4042
0
          if ((deftype = sudoerstext[n++]) != '\0') {
4043
0
        while (isblank((unsigned char)sudoerstext[n]))
4044
0
            n++;
4045
0
          }
4046
0
          BEGIN GOTDEFS;
4047
0
          switch (deftype) {
4048
0
        case ':':
4049
0
            sudoersless(n);
4050
0
            LEXTRACE("DEFAULTS_USER ");
4051
0
            return DEFAULTS_USER;
4052
0
        case '>':
4053
0
            sudoersless(n);
4054
0
            LEXTRACE("DEFAULTS_RUNAS ");
4055
0
            return DEFAULTS_RUNAS;
4056
0
        case '@':
4057
0
            sudoersless(n);
4058
0
            LEXTRACE("DEFAULTS_HOST ");
4059
0
            return DEFAULTS_HOST;
4060
0
        case '!':
4061
0
            sudoersless(n);
4062
0
            LEXTRACE("DEFAULTS_CMND ");
4063
0
            return DEFAULTS_CMND;
4064
0
        default:
4065
0
            LEXTRACE("DEFAULTS ");
4066
0
            return DEFAULTS;
4067
0
          }
4068
0
      }
4069
0
  YY_BREAK
4070
0
case 29:
4071
0
YY_RULE_SETUP
4072
0
#line 467 "toke.l"
4073
0
{
4074
0
          size_t n;
4075
4076
0
          if (continued) {
4077
0
        sudoers_errstr = N_("invalid line continuation");
4078
0
        LEXTRACE("ERROR ");
4079
0
        return ERROR;
4080
0
          }
4081
4082
0
          for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
4083
0
        continue;
4084
0
          switch (sudoerstext[n]) {
4085
0
        case 'H':
4086
0
            LEXTRACE("HOSTALIAS ");
4087
0
            return HOSTALIAS;
4088
0
        case 'C':
4089
0
            LEXTRACE("CMNDALIAS ");
4090
0
            return CMNDALIAS;
4091
0
        case 'U':
4092
0
            LEXTRACE("USERALIAS ");
4093
0
            return USERALIAS;
4094
0
        case 'R':
4095
0
            LEXTRACE("RUNASALIAS ");
4096
0
            return RUNASALIAS;
4097
0
          }
4098
0
      }
4099
0
  YY_BREAK
4100
0
case 30:
4101
0
YY_RULE_SETUP
4102
0
#line 494 "toke.l"
4103
0
{
4104
        /* cmnd does not require passwd for this user */
4105
0
            LEXTRACE("NOPASSWD ");
4106
0
            return NOPASSWD;
4107
0
      }
4108
0
  YY_BREAK
4109
0
case 31:
4110
0
YY_RULE_SETUP
4111
0
#line 500 "toke.l"
4112
0
{
4113
        /* cmnd requires passwd for this user */
4114
0
            LEXTRACE("PASSWD ");
4115
0
            return PASSWD;
4116
0
      }
4117
0
  YY_BREAK
4118
0
case 32:
4119
0
YY_RULE_SETUP
4120
0
#line 506 "toke.l"
4121
0
{
4122
0
            LEXTRACE("NOEXEC ");
4123
0
            return NOEXEC;
4124
0
      }
4125
0
  YY_BREAK
4126
0
case 33:
4127
0
YY_RULE_SETUP
4128
0
#line 511 "toke.l"
4129
0
{
4130
0
            LEXTRACE("EXEC ");
4131
0
            return EXEC;
4132
0
      }
4133
0
  YY_BREAK
4134
0
case 34:
4135
0
YY_RULE_SETUP
4136
0
#line 516 "toke.l"
4137
0
{
4138
0
            LEXTRACE("INTERCEPT ");
4139
0
            return INTERCEPT;
4140
0
      }
4141
0
  YY_BREAK
4142
0
case 35:
4143
0
YY_RULE_SETUP
4144
0
#line 521 "toke.l"
4145
0
{
4146
0
            LEXTRACE("NOINTERCEPT ");
4147
0
            return NOINTERCEPT;
4148
0
      }
4149
0
  YY_BREAK
4150
0
case 36:
4151
0
YY_RULE_SETUP
4152
0
#line 526 "toke.l"
4153
0
{
4154
0
            LEXTRACE("SETENV ");
4155
0
            return SETENV;
4156
0
      }
4157
0
  YY_BREAK
4158
0
case 37:
4159
0
YY_RULE_SETUP
4160
0
#line 531 "toke.l"
4161
0
{
4162
0
            LEXTRACE("NOSETENV ");
4163
0
            return NOSETENV;
4164
0
      }
4165
0
  YY_BREAK
4166
0
case 38:
4167
0
YY_RULE_SETUP
4168
0
#line 536 "toke.l"
4169
0
{
4170
0
            LEXTRACE("LOG_OUTPUT ");
4171
0
            return LOG_OUTPUT;
4172
0
      }
4173
0
  YY_BREAK
4174
0
case 39:
4175
0
YY_RULE_SETUP
4176
0
#line 541 "toke.l"
4177
0
{
4178
0
            LEXTRACE("NOLOG_OUTPUT ");
4179
0
            return NOLOG_OUTPUT;
4180
0
      }
4181
0
  YY_BREAK
4182
0
case 40:
4183
0
YY_RULE_SETUP
4184
0
#line 546 "toke.l"
4185
0
{
4186
0
            LEXTRACE("LOG_INPUT ");
4187
0
            return LOG_INPUT;
4188
0
      }
4189
0
  YY_BREAK
4190
0
case 41:
4191
0
YY_RULE_SETUP
4192
0
#line 551 "toke.l"
4193
0
{
4194
0
            LEXTRACE("NOLOG_INPUT ");
4195
0
            return NOLOG_INPUT;
4196
0
      }
4197
0
  YY_BREAK
4198
0
case 42:
4199
0
YY_RULE_SETUP
4200
0
#line 556 "toke.l"
4201
0
{
4202
0
            LEXTRACE("MAIL ");
4203
0
            return MAIL;
4204
0
      }
4205
0
  YY_BREAK
4206
0
case 43:
4207
0
YY_RULE_SETUP
4208
0
#line 561 "toke.l"
4209
0
{
4210
0
            LEXTRACE("NOMAIL ");
4211
0
            return NOMAIL;
4212
0
      }
4213
0
  YY_BREAK
4214
0
case 44:
4215
0
YY_RULE_SETUP
4216
0
#line 566 "toke.l"
4217
0
{
4218
0
            LEXTRACE("FOLLOW ");
4219
0
            return FOLLOWLNK;
4220
0
      }
4221
0
  YY_BREAK
4222
0
case 45:
4223
0
YY_RULE_SETUP
4224
0
#line 571 "toke.l"
4225
0
{
4226
0
            LEXTRACE("NOFOLLOW ");
4227
0
            return NOFOLLOWLNK;
4228
0
      }
4229
0
  YY_BREAK
4230
0
case 46:
4231
0
YY_RULE_SETUP
4232
0
#line 576 "toke.l"
4233
0
{
4234
0
          if (sudoerstext[0] == '+')
4235
0
        sudoers_errstr = N_("empty netgroup");
4236
0
          else
4237
0
        sudoers_errstr = N_("empty group");
4238
0
          LEXTRACE("ERROR ");
4239
0
          return ERROR;
4240
0
      }
4241
0
  YY_BREAK
4242
0
case 47:
4243
0
YY_RULE_SETUP
4244
0
#line 585 "toke.l"
4245
0
{
4246
          /* netgroup */
4247
0
          if (!fill(sudoerstext, sudoersleng))
4248
0
        yyterminate();
4249
0
          LEXTRACE("NETGROUP ");
4250
0
          return NETGROUP;
4251
0
      }
4252
0
  YY_BREAK
4253
0
case 48:
4254
0
YY_RULE_SETUP
4255
0
#line 593 "toke.l"
4256
0
{
4257
          /* group */
4258
0
          if (!fill(sudoerstext, sudoersleng))
4259
0
        yyterminate();
4260
0
          LEXTRACE("USERGROUP ");
4261
0
          return USERGROUP;
4262
0
      }
4263
0
  YY_BREAK
4264
0
case 49:
4265
0
YY_RULE_SETUP
4266
0
#line 601 "toke.l"
4267
0
{
4268
0
          if (!fill(sudoerstext, sudoersleng))
4269
0
        yyterminate();
4270
0
          LEXTRACE("NTWKADDR ");
4271
0
          return NTWKADDR;
4272
0
      }
4273
0
  YY_BREAK
4274
0
case 50:
4275
0
YY_RULE_SETUP
4276
0
#line 608 "toke.l"
4277
0
{
4278
0
          if (!fill(sudoerstext, sudoersleng))
4279
0
        yyterminate();
4280
0
          LEXTRACE("NTWKADDR ");
4281
0
          return NTWKADDR;
4282
0
      }
4283
0
  YY_BREAK
4284
0
case 51:
4285
0
YY_RULE_SETUP
4286
0
#line 615 "toke.l"
4287
0
{
4288
0
          if (!ipv6_valid(sudoerstext)) {
4289
0
        sudoers_errstr = N_("invalid IPv6 address");
4290
0
        LEXTRACE("ERROR ");
4291
0
        return ERROR;
4292
0
          }
4293
0
          if (!fill(sudoerstext, sudoersleng))
4294
0
        yyterminate();
4295
0
          LEXTRACE("NTWKADDR ");
4296
0
          return NTWKADDR;
4297
0
      }
4298
0
  YY_BREAK
4299
0
case 52:
4300
0
YY_RULE_SETUP
4301
0
#line 627 "toke.l"
4302
0
{
4303
0
          if (!ipv6_valid(sudoerstext)) {
4304
0
        sudoers_errstr = N_("invalid IPv6 address");
4305
0
        LEXTRACE("ERROR ");
4306
0
        return ERROR;
4307
0
          }
4308
0
          if (!fill(sudoerstext, sudoersleng))
4309
0
        yyterminate();
4310
0
          LEXTRACE("NTWKADDR ");
4311
0
          return NTWKADDR;
4312
0
      }
4313
0
  YY_BREAK
4314
0
case 53:
4315
0
YY_RULE_SETUP
4316
0
#line 639 "toke.l"
4317
0
{
4318
0
          LEXTRACE("ALL ");
4319
0
          return ALL;
4320
4321
0
      }
4322
0
  YY_BREAK
4323
0
case 54:
4324
0
YY_RULE_SETUP
4325
0
#line 645 "toke.l"
4326
0
{
4327
0
          LEXTRACE("CMND_TIMEOUT ");
4328
0
          return CMND_TIMEOUT;
4329
0
      }
4330
0
  YY_BREAK
4331
0
case 55:
4332
0
YY_RULE_SETUP
4333
0
#line 650 "toke.l"
4334
0
{
4335
0
          LEXTRACE("NOTBEFORE ");
4336
0
          return NOTBEFORE;
4337
0
      }
4338
0
  YY_BREAK
4339
0
case 56:
4340
0
YY_RULE_SETUP
4341
0
#line 655 "toke.l"
4342
0
{
4343
0
          LEXTRACE("NOTAFTER ");
4344
0
          return NOTAFTER;
4345
0
      }
4346
0
  YY_BREAK
4347
0
case 57:
4348
0
YY_RULE_SETUP
4349
0
#line 660 "toke.l"
4350
0
{
4351
0
          LEXTRACE("CWD ");
4352
0
          prev_state = YY_START;
4353
0
          BEGIN EXPECTPATH;
4354
0
          return CWD;
4355
0
      }
4356
0
  YY_BREAK
4357
0
case 58:
4358
0
YY_RULE_SETUP
4359
0
#line 667 "toke.l"
4360
0
{
4361
0
          LEXTRACE("CHROOT ");
4362
0
          prev_state = YY_START;
4363
0
          BEGIN EXPECTPATH;
4364
0
          return CHROOT;
4365
0
      }
4366
0
  YY_BREAK
4367
0
case 59:
4368
0
YY_RULE_SETUP
4369
0
#line 674 "toke.l"
4370
0
{
4371
0
          LEXTRACE("ROLE ");
4372
0
          return ROLE;
4373
0
      }
4374
0
  YY_BREAK
4375
0
case 60:
4376
0
YY_RULE_SETUP
4377
0
#line 679 "toke.l"
4378
0
{
4379
0
          LEXTRACE("TYPE ");
4380
0
          return TYPE;
4381
0
      }
4382
0
  YY_BREAK
4383
0
case 61:
4384
0
YY_RULE_SETUP
4385
0
#line 683 "toke.l"
4386
0
{
4387
0
          LEXTRACE("APPARMOR_PROFILE ");
4388
0
          return APPARMOR_PROFILE;
4389
0
      }
4390
0
  YY_BREAK
4391
0
case 62:
4392
0
YY_RULE_SETUP
4393
0
#line 687 "toke.l"
4394
0
{
4395
0
          LEXTRACE("PRIVS ");
4396
0
          return PRIVS;
4397
0
      }
4398
0
  YY_BREAK
4399
0
case 63:
4400
0
YY_RULE_SETUP
4401
0
#line 692 "toke.l"
4402
0
{
4403
0
          LEXTRACE("LIMITPRIVS ");
4404
0
          return LIMITPRIVS;
4405
0
      }
4406
0
  YY_BREAK
4407
0
case 64:
4408
0
YY_RULE_SETUP
4409
0
#line 697 "toke.l"
4410
0
{
4411
0
          if (!fill(sudoerstext, sudoersleng))
4412
0
        yyterminate();
4413
0
          LEXTRACE("ALIAS ");
4414
0
          return ALIAS;
4415
0
      }
4416
0
  YY_BREAK
4417
0
case 65:
4418
0
YY_RULE_SETUP
4419
0
#line 704 "toke.l"
4420
0
{
4421
          /* XXX - no way to specify digest for command */
4422
          /* no command args allowed for Defaults!/path */
4423
0
          if (!fill_cmnd(sudoerstext, sudoersleng))
4424
0
        yyterminate();
4425
0
          LEXTRACE("COMMAND ");
4426
0
          return COMMAND;
4427
0
      }
4428
0
  YY_BREAK
4429
0
case 66:
4430
0
YY_RULE_SETUP
4431
0
#line 713 "toke.l"
4432
0
{
4433
0
          digest_type = SUDO_DIGEST_SHA224;
4434
0
          BEGIN WANTDIGEST;
4435
0
          LEXTRACE("SHA224_TOK ");
4436
0
          return SHA224_TOK;
4437
0
      }
4438
0
  YY_BREAK
4439
0
case 67:
4440
0
YY_RULE_SETUP
4441
0
#line 720 "toke.l"
4442
0
{
4443
0
          digest_type = SUDO_DIGEST_SHA256;
4444
0
          BEGIN WANTDIGEST;
4445
0
          LEXTRACE("SHA256_TOK ");
4446
0
          return SHA256_TOK;
4447
0
      }
4448
0
  YY_BREAK
4449
0
case 68:
4450
0
YY_RULE_SETUP
4451
0
#line 727 "toke.l"
4452
0
{
4453
0
          digest_type = SUDO_DIGEST_SHA384;
4454
0
          BEGIN WANTDIGEST;
4455
0
          LEXTRACE("SHA384_TOK ");
4456
0
          return SHA384_TOK;
4457
0
      }
4458
0
  YY_BREAK
4459
0
case 69:
4460
0
YY_RULE_SETUP
4461
0
#line 734 "toke.l"
4462
0
{
4463
0
          digest_type = SUDO_DIGEST_SHA512;
4464
0
          BEGIN WANTDIGEST;
4465
0
          LEXTRACE("SHA512_TOK ");
4466
0
          return SHA512_TOK;
4467
0
      }
4468
0
  YY_BREAK
4469
0
case 70:
4470
0
YY_RULE_SETUP
4471
0
#line 741 "toke.l"
4472
0
{
4473
0
          BEGIN GOTEDIT;
4474
0
          LEXTRACE("COMMAND ");
4475
0
          if (!fill_cmnd(sudoerstext, sudoersleng))
4476
0
        yyterminate();
4477
0
      }     /* sudo -e */
4478
0
  YY_BREAK
4479
0
case 71:
4480
0
YY_RULE_SETUP
4481
0
#line 748 "toke.l"
4482
0
{
4483
0
        BEGIN prev_state;
4484
0
        if (!fill(sudoerstext, sudoersleng))
4485
0
            yyterminate();
4486
0
        LEXTRACE("WORD(5) ");
4487
0
        return WORD;
4488
0
      }
4489
0
  YY_BREAK
4490
0
case 72:
4491
0
YY_RULE_SETUP
4492
0
#line 756 "toke.l"
4493
0
{
4494
          /* directories can't have args... */
4495
0
          if (sudoerstext[sudoersleng - 1] == '/') {
4496
0
        LEXTRACE("COMMAND ");
4497
0
        if (!fill_cmnd(sudoerstext, sudoersleng))
4498
0
            yyterminate();
4499
0
        return COMMAND;
4500
0
          }
4501
0
          BEGIN GOTCMND;
4502
0
          LEXTRACE("COMMAND ");
4503
0
          if (!fill_cmnd(sudoerstext, sudoersleng))
4504
0
        yyterminate();
4505
0
      }     /* a pathname */
4506
0
  YY_BREAK
4507
0
case 73:
4508
0
YY_RULE_SETUP
4509
0
#line 770 "toke.l"
4510
0
{
4511
0
          if (sudoers_strict()) {
4512
0
        if (!sudo_regex_compile(NULL, sudoerstext,
4513
0
          &sudoers_errstr)) {
4514
0
            LEXTRACE("ERROR ");
4515
0
            return ERROR;
4516
0
        }
4517
0
          }
4518
0
          BEGIN GOTCMND;
4519
0
          LEXTRACE("COMMAND ");
4520
0
          if (!fill_cmnd(sudoerstext, sudoersleng))
4521
0
        yyterminate();
4522
0
      }     /* a regex */
4523
0
  YY_BREAK
4524
0
case 74:
4525
0
YY_RULE_SETUP
4526
0
#line 784 "toke.l"
4527
0
{
4528
0
          LEXTRACE("BEGINSTR ");
4529
0
          sudoerslval.string = NULL;
4530
0
          if (YY_START != EXPECTPATH)
4531
0
        prev_state = YY_START;
4532
0
          BEGIN INSTR;
4533
0
      }
4534
0
  YY_BREAK
4535
0
case 75:
4536
0
YY_RULE_SETUP
4537
0
#line 792 "toke.l"
4538
0
{
4539
          /* a word */
4540
0
          if (!fill(sudoerstext, sudoersleng))
4541
0
        yyterminate();
4542
0
          LEXTRACE("WORD(6) ");
4543
0
          return WORD;
4544
0
      }
4545
0
  YY_BREAK
4546
4547
0
case 76:
4548
0
YY_RULE_SETUP
4549
0
#line 801 "toke.l"
4550
0
{
4551
          /* include file/directory */
4552
0
          if (!fill(sudoerstext, sudoersleng))
4553
0
        yyterminate();
4554
0
          BEGIN INITIAL;
4555
0
          LEXTRACE("WORD(7) ");
4556
0
          return WORD;
4557
0
      }
4558
0
  YY_BREAK
4559
0
case 77:
4560
0
YY_RULE_SETUP
4561
0
#line 810 "toke.l"
4562
0
{
4563
0
          LEXTRACE("BEGINSTR ");
4564
0
          sudoerslval.string = NULL;
4565
0
          prev_state = INITIAL;
4566
0
          BEGIN INSTR;
4567
0
      }
4568
0
  YY_BREAK
4569
4570
0
case 78:
4571
0
YY_RULE_SETUP
4572
0
#line 818 "toke.l"
4573
0
{
4574
0
          LEXTRACE("( ");
4575
0
          return '(';
4576
0
      }
4577
0
  YY_BREAK
4578
0
case 79:
4579
0
YY_RULE_SETUP
4580
0
#line 823 "toke.l"
4581
0
{
4582
0
          LEXTRACE(") ");
4583
0
          return ')';
4584
0
      }
4585
0
  YY_BREAK
4586
0
case 80:
4587
0
YY_RULE_SETUP
4588
0
#line 828 "toke.l"
4589
0
{
4590
0
          LEXTRACE(", ");
4591
0
          return ',';
4592
0
      }     /* return ',' */
4593
0
  YY_BREAK
4594
0
case 81:
4595
0
YY_RULE_SETUP
4596
0
#line 833 "toke.l"
4597
0
{
4598
0
          LEXTRACE("= ");
4599
0
          return '=';
4600
0
      }     /* return '=' */
4601
0
  YY_BREAK
4602
0
case 82:
4603
0
YY_RULE_SETUP
4604
0
#line 838 "toke.l"
4605
0
{
4606
0
          LEXTRACE(": ");
4607
0
          return ':';
4608
0
      }     /* return ':' */
4609
0
  YY_BREAK
4610
0
case 83:
4611
0
YY_RULE_SETUP
4612
0
#line 843 "toke.l"
4613
0
{
4614
0
          if (sudoersleng & 1) {
4615
0
        LEXTRACE("!");
4616
0
        return '!'; /* return '!' */
4617
0
          }
4618
0
      }
4619
0
  YY_BREAK
4620
0
case 84:
4621
/* rule 84 can match eol */
4622
0
YY_RULE_SETUP
4623
0
#line 850 "toke.l"
4624
0
{
4625
0
          if (YY_START == INSTR) {
4626
        /* throw away old string */
4627
0
        parser_leak_remove(LEAK_PTR, sudoerslval.string);
4628
0
        free(sudoerslval.string);
4629
        /* re-scan after changing state */
4630
0
        BEGIN INITIAL;
4631
0
        sudoersless(0);
4632
0
        sudoers_errstr = N_("unexpected line break in string");
4633
0
        LEXTRACE("ERROR ");
4634
0
        return ERROR;
4635
0
          }
4636
0
          BEGIN INITIAL;
4637
0
          sudolineno++;
4638
0
          continued = false;
4639
0
          LEXTRACE("\n");
4640
0
          return '\n';
4641
0
      }     /* return newline */
4642
0
  YY_BREAK
4643
0
case 85:
4644
0
YY_RULE_SETUP
4645
0
#line 869 "toke.l"
4646
0
{     /* throw away space/tabs */
4647
0
          sawspace = true; /* but remember for fill_args */
4648
0
      }
4649
0
  YY_BREAK
4650
0
case 86:
4651
/* rule 86 can match eol */
4652
0
YY_RULE_SETUP
4653
0
#line 873 "toke.l"
4654
0
{
4655
0
          sawspace = true; /* remember for fill_args */
4656
0
          sudolineno++;
4657
0
          continued = true;
4658
0
      }     /* throw away EOL after \ */
4659
0
  YY_BREAK
4660
0
case 87:
4661
/* rule 87 can match eol */
4662
0
YY_RULE_SETUP
4663
0
#line 879 "toke.l"
4664
0
{
4665
0
          if (sudoerstext[sudoersleng - 1] == '\n') {
4666
        /* comment ending in a newline */
4667
0
        BEGIN INITIAL;
4668
0
        sudolineno++;
4669
0
        continued = false;
4670
0
          } else if (!feof(sudoersin)) {
4671
0
        sudoers_errstr = strerror(errno);
4672
0
        LEXTRACE("ERROR ");
4673
0
        return ERROR;
4674
0
          }
4675
0
          LEXTRACE("#\n");
4676
0
          return '\n';
4677
0
      }     /* comment, not uid/gid */
4678
0
  YY_BREAK
4679
0
case 88:
4680
0
YY_RULE_SETUP
4681
0
#line 894 "toke.l"
4682
0
{
4683
0
          LEXTRACE("NOMATCH ");
4684
0
          return NOMATCH;
4685
0
      } /* parse error, no matching token */
4686
0
  YY_BREAK
4687
0
case YY_STATE_EOF(INITIAL):
4688
0
case YY_STATE_EOF(GOTDEFS):
4689
0
case YY_STATE_EOF(GOTCMND):
4690
0
case YY_STATE_EOF(GOTEDIT):
4691
0
case YY_STATE_EOF(GOTREGEX):
4692
0
case YY_STATE_EOF(STARTDEFS):
4693
0
case YY_STATE_EOF(INDEFS):
4694
0
case YY_STATE_EOF(INSTR):
4695
0
case YY_STATE_EOF(WANTDIGEST):
4696
0
case YY_STATE_EOF(GOTINC):
4697
0
case YY_STATE_EOF(EXPECTPATH):
4698
0
#line 899 "toke.l"
4699
0
{
4700
0
          if (!pop_include())
4701
0
        yyterminate();
4702
0
      }
4703
0
  YY_BREAK
4704
0
case 89:
4705
0
YY_RULE_SETUP
4706
0
#line 904 "toke.l"
4707
0
ECHO;
4708
0
  YY_BREAK
4709
0
#line 4709 "toke.c"
4710
4711
0
  case YY_END_OF_BUFFER:
4712
0
    {
4713
    /* Amount of text matched not including the EOB char. */
4714
0
    int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
4715
4716
    /* Undo the effects of YY_DO_BEFORE_ACTION. */
4717
0
    *yy_cp = (yy_hold_char);
4718
0
    YY_RESTORE_YY_MORE_OFFSET
4719
4720
0
    if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
4721
0
      {
4722
      /* We're scanning a new file or input source.  It's
4723
       * possible that this happened because the user
4724
       * just pointed yyin at a new source and called
4725
       * yylex().  If so, then we have to assure
4726
       * consistency between YY_CURRENT_BUFFER and our
4727
       * globals.  Here is the right place to do so, because
4728
       * this is the first action (other than possibly a
4729
       * back-up) that will match for the new input source.
4730
       */
4731
0
      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
4732
0
      YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
4733
0
      YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
4734
0
      }
4735
4736
    /* Note that here we test for yy_c_buf_p "<=" to the position
4737
     * of the first EOB in the buffer, since yy_c_buf_p will
4738
     * already have been incremented past the NUL character
4739
     * (since all states make transitions on EOB to the
4740
     * end-of-buffer state).  Contrast this with the test
4741
     * in input().
4742
     */
4743
0
    if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
4744
0
      { /* This was really a NUL. */
4745
0
      yy_state_type yy_next_state;
4746
4747
0
      (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
4748
4749
0
      yy_current_state = yy_get_previous_state(  );
4750
4751
      /* Okay, we're now positioned to make the NUL
4752
       * transition.  We couldn't have
4753
       * yy_get_previous_state() go ahead and do it
4754
       * for us because it doesn't know how to deal
4755
       * with the possibility of jamming (and we don't
4756
       * want to build jamming into it because then it
4757
       * will run more slowly).
4758
       */
4759
4760
0
      yy_next_state = yy_try_NUL_trans( yy_current_state );
4761
4762
0
      yy_bp = (yytext_ptr) + YY_MORE_ADJ;
4763
4764
0
      if ( yy_next_state )
4765
0
        {
4766
        /* Consume the NUL. */
4767
0
        yy_cp = ++(yy_c_buf_p);
4768
0
        yy_current_state = yy_next_state;
4769
0
        goto yy_match;
4770
0
        }
4771
4772
0
      else
4773
0
        {
4774
0
        yy_cp = (yy_c_buf_p);
4775
0
        goto yy_find_action;
4776
0
        }
4777
0
      }
4778
4779
0
    else switch ( yy_get_next_buffer(  ) )
4780
0
      {
4781
0
      case EOB_ACT_END_OF_FILE:
4782
0
        {
4783
0
        (yy_did_buffer_switch_on_eof) = 0;
4784
4785
0
        if ( yywrap(  ) )
4786
0
          {
4787
          /* Note: because we've taken care in
4788
           * yy_get_next_buffer() to have set up
4789
           * yytext, we can now set up
4790
           * yy_c_buf_p so that if some total
4791
           * hoser (like flex itself) wants to
4792
           * call the scanner after we return the
4793
           * YY_NULL, it'll still work - another
4794
           * YY_NULL will get returned.
4795
           */
4796
0
          (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
4797
4798
0
          yy_act = YY_STATE_EOF(YY_START);
4799
0
          goto do_action;
4800
0
          }
4801
4802
0
        else
4803
0
          {
4804
0
          if ( ! (yy_did_buffer_switch_on_eof) )
4805
0
            YY_NEW_FILE;
4806
0
          }
4807
0
        break;
4808
0
        }
4809
4810
0
      case EOB_ACT_CONTINUE_SCAN:
4811
0
        (yy_c_buf_p) =
4812
0
          (yytext_ptr) + yy_amount_of_matched_text;
4813
4814
0
        yy_current_state = yy_get_previous_state(  );
4815
4816
0
        yy_cp = (yy_c_buf_p);
4817
0
        yy_bp = (yytext_ptr) + YY_MORE_ADJ;
4818
0
        goto yy_match;
4819
4820
0
      case EOB_ACT_LAST_MATCH:
4821
0
        (yy_c_buf_p) =
4822
0
        &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
4823
4824
0
        yy_current_state = yy_get_previous_state(  );
4825
4826
0
        yy_cp = (yy_c_buf_p);
4827
0
        yy_bp = (yytext_ptr) + YY_MORE_ADJ;
4828
0
        goto yy_find_action;
4829
0
      }
4830
0
    break;
4831
0
    }
4832
4833
0
  default:
4834
0
    YY_FATAL_ERROR(
4835
0
      "fatal flex scanner internal error--no action found" );
4836
0
  } /* end of action switch */
4837
0
    } /* end of scanning one token */
4838
0
  } /* end of user's declarations */
4839
0
} /* end of yylex */
4840
4841
/* yy_get_next_buffer - try to read in a new buffer
4842
 *
4843
 * Returns a code representing an action:
4844
 *  EOB_ACT_LAST_MATCH -
4845
 *  EOB_ACT_CONTINUE_SCAN - continue scanning from current position
4846
 *  EOB_ACT_END_OF_FILE - end of file
4847
 */
4848
static int yy_get_next_buffer (void)
4849
0
{
4850
0
      char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
4851
0
  char *source = (yytext_ptr);
4852
0
  int number_to_move, i;
4853
0
  int ret_val;
4854
4855
0
  if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
4856
0
    YY_FATAL_ERROR(
4857
0
    "fatal flex scanner internal error--end of buffer missed" );
4858
4859
0
  if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
4860
0
    { /* Don't try to fill the buffer, so this is an EOF. */
4861
0
    if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
4862
0
      {
4863
      /* We matched a single character, the EOB, so
4864
       * treat this as a final EOF.
4865
       */
4866
0
      return EOB_ACT_END_OF_FILE;
4867
0
      }
4868
4869
0
    else
4870
0
      {
4871
      /* We matched some text prior to the EOB, first
4872
       * process it.
4873
       */
4874
0
      return EOB_ACT_LAST_MATCH;
4875
0
      }
4876
0
    }
4877
4878
  /* Try to read more data. */
4879
4880
  /* First move last chars to start of buffer. */
4881
0
  number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);
4882
4883
0
  for ( i = 0; i < number_to_move; ++i )
4884
0
    *(dest++) = *(source++);
4885
4886
0
  if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
4887
    /* don't do the read, it's not guaranteed to return an EOF,
4888
     * just force an EOF
4889
     */
4890
0
    YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
4891
4892
0
  else
4893
0
    {
4894
0
      int num_to_read =
4895
0
      YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
4896
4897
0
    while ( num_to_read <= 0 )
4898
0
      { /* Not enough room in the buffer - grow it. */
4899
4900
      /* just a shorter name for the current buffer */
4901
0
      YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
4902
4903
0
      int yy_c_buf_p_offset =
4904
0
        (int) ((yy_c_buf_p) - b->yy_ch_buf);
4905
4906
0
      if ( b->yy_is_our_buffer )
4907
0
        {
4908
0
        int new_size = b->yy_buf_size * 2;
4909
4910
0
        if ( new_size <= 0 )
4911
0
          b->yy_buf_size += b->yy_buf_size / 8;
4912
0
        else
4913
0
          b->yy_buf_size *= 2;
4914
4915
0
        b->yy_ch_buf = (char *)
4916
          /* Include room in for 2 EOB chars. */
4917
0
          yyrealloc( (void *) b->yy_ch_buf,
4918
0
               (yy_size_t) (b->yy_buf_size + 2)  );
4919
0
        }
4920
0
      else
4921
        /* Can't grow it, we don't own it. */
4922
0
        b->yy_ch_buf = NULL;
4923
4924
0
      if ( ! b->yy_ch_buf )
4925
0
        YY_FATAL_ERROR(
4926
0
        "fatal error - scanner input buffer overflow" );
4927
4928
0
      (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
4929
4930
0
      num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
4931
0
            number_to_move - 1;
4932
4933
0
      }
4934
4935
0
    if ( num_to_read > YY_READ_BUF_SIZE )
4936
0
      num_to_read = YY_READ_BUF_SIZE;
4937
4938
    /* Read in more data. */
4939
0
    YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
4940
0
      (yy_n_chars), num_to_read );
4941
4942
0
    YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
4943
0
    }
4944
4945
0
  if ( (yy_n_chars) == 0 )
4946
0
    {
4947
0
    if ( number_to_move == YY_MORE_ADJ )
4948
0
      {
4949
0
      ret_val = EOB_ACT_END_OF_FILE;
4950
0
      yyrestart( yyin  );
4951
0
      }
4952
4953
0
    else
4954
0
      {
4955
0
      ret_val = EOB_ACT_LAST_MATCH;
4956
0
      YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
4957
0
        YY_BUFFER_EOF_PENDING;
4958
0
      }
4959
0
    }
4960
4961
0
  else
4962
0
    ret_val = EOB_ACT_CONTINUE_SCAN;
4963
4964
0
  if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
4965
    /* Extend the array by 50%, plus the number we really need. */
4966
0
    int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
4967
0
    YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
4968
0
      (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
4969
0
    if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
4970
0
      YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
4971
    /* "- 2" to take care of EOB's */
4972
0
    YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
4973
0
  }
4974
4975
0
  (yy_n_chars) += number_to_move;
4976
0
  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
4977
0
  YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
4978
4979
0
  (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
4980
4981
0
  return ret_val;
4982
0
}
4983
4984
/* yy_get_previous_state - get the state just before the EOB char was reached */
4985
4986
    static yy_state_type yy_get_previous_state (void)
4987
0
{
4988
0
  yy_state_type yy_current_state;
4989
0
  char *yy_cp;
4990
    
4991
0
  yy_current_state = (yy_start);
4992
0
  yy_current_state += YY_AT_BOL();
4993
4994
0
  for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
4995
0
    {
4996
0
    YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
4997
0
    if ( yy_accept[yy_current_state] )
4998
0
      {
4999
0
      (yy_last_accepting_state) = yy_current_state;
5000
0
      (yy_last_accepting_cpos) = yy_cp;
5001
0
      }
5002
0
    while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
5003
0
      {
5004
0
      yy_current_state = (int) yy_def[yy_current_state];
5005
0
      if ( yy_current_state >= 1244 )
5006
0
        yy_c = yy_meta[yy_c];
5007
0
      }
5008
0
    yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
5009
0
    }
5010
5011
0
  return yy_current_state;
5012
0
}
5013
5014
/* yy_try_NUL_trans - try to make a transition on the NUL character
5015
 *
5016
 * synopsis
5017
 *  next_state = yy_try_NUL_trans( current_state );
5018
 */
5019
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
5020
0
{
5021
0
  int yy_is_jam;
5022
0
      char *yy_cp = (yy_c_buf_p);
5023
5024
0
  YY_CHAR yy_c = 1;
5025
0
  if ( yy_accept[yy_current_state] )
5026
0
    {
5027
0
    (yy_last_accepting_state) = yy_current_state;
5028
0
    (yy_last_accepting_cpos) = yy_cp;
5029
0
    }
5030
0
  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
5031
0
    {
5032
0
    yy_current_state = (int) yy_def[yy_current_state];
5033
0
    if ( yy_current_state >= 1244 )
5034
0
      yy_c = yy_meta[yy_c];
5035
0
    }
5036
0
  yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
5037
0
  yy_is_jam = (yy_current_state == 1243);
5038
5039
0
    return yy_is_jam ? 0 : yy_current_state;
5040
0
}
5041
5042
#ifndef YY_NO_UNPUT
5043
5044
#endif
5045
5046
#ifndef YY_NO_INPUT
5047
#ifdef __cplusplus
5048
    static int yyinput (void)
5049
#else
5050
    static int input  (void)
5051
#endif
5052
5053
{
5054
  int c;
5055
    
5056
  *(yy_c_buf_p) = (yy_hold_char);
5057
5058
  if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
5059
    {
5060
    /* yy_c_buf_p now points to the character we want to return.
5061
     * If this occurs *before* the EOB characters, then it's a
5062
     * valid NUL; if not, then we've hit the end of the buffer.
5063
     */
5064
    if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
5065
      /* This was really a NUL. */
5066
      *(yy_c_buf_p) = '\0';
5067
5068
    else
5069
      { /* need more input */
5070
      int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
5071
      ++(yy_c_buf_p);
5072
5073
      switch ( yy_get_next_buffer(  ) )
5074
        {
5075
        case EOB_ACT_LAST_MATCH:
5076
          /* This happens because yy_g_n_b()
5077
           * sees that we've accumulated a
5078
           * token and flags that we need to
5079
           * try matching the token before
5080
           * proceeding.  But for input(),
5081
           * there's no matching to consider.
5082
           * So convert the EOB_ACT_LAST_MATCH
5083
           * to EOB_ACT_END_OF_FILE.
5084
           */
5085
5086
          /* Reset buffer status. */
5087
          yyrestart( yyin );
5088
5089
          FALLTHROUGH;
5090
5091
        case EOB_ACT_END_OF_FILE:
5092
          {
5093
          if ( yywrap(  ) )
5094
            return 0;
5095
5096
          if ( ! (yy_did_buffer_switch_on_eof) )
5097
            YY_NEW_FILE;
5098
#ifdef __cplusplus
5099
          return yyinput();
5100
#else
5101
          return input();
5102
#endif
5103
          }
5104
5105
        case EOB_ACT_CONTINUE_SCAN:
5106
          (yy_c_buf_p) = (yytext_ptr) + offset;
5107
          break;
5108
        }
5109
      }
5110
    }
5111
5112
  c = *(unsigned char *) (yy_c_buf_p);  /* cast for 8-bit char's */
5113
  *(yy_c_buf_p) = '\0'; /* preserve yytext */
5114
  (yy_hold_char) = *++(yy_c_buf_p);
5115
5116
  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
5117
5118
  return c;
5119
}
5120
#endif  /* ifndef YY_NO_INPUT */
5121
5122
/** Immediately switch to a different input stream.
5123
 * @param input_file A readable stream.
5124
 * 
5125
 * @note This function does not reset the start condition to @c INITIAL .
5126
 */
5127
    void yyrestart  (FILE * input_file )
5128
0
{
5129
    
5130
0
  if ( ! YY_CURRENT_BUFFER ){
5131
0
        yyensure_buffer_stack ();
5132
0
    YY_CURRENT_BUFFER_LVALUE =
5133
0
            yy_create_buffer( yyin, YY_BUF_SIZE );
5134
0
  }
5135
5136
0
  yy_init_buffer( YY_CURRENT_BUFFER, input_file );
5137
0
  yy_load_buffer_state(  );
5138
0
}
5139
5140
/** Switch to a different input buffer.
5141
 * @param new_buffer The new input buffer.
5142
 * 
5143
 */
5144
    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
5145
0
{
5146
    
5147
  /* TODO. We should be able to replace this entire function body
5148
   * with
5149
   *    yypop_buffer_state();
5150
   *    yypush_buffer_state(new_buffer);
5151
     */
5152
0
  yyensure_buffer_stack ();
5153
0
  if ( YY_CURRENT_BUFFER == new_buffer )
5154
0
    return;
5155
5156
0
  if ( YY_CURRENT_BUFFER )
5157
0
    {
5158
    /* Flush out information for old buffer. */
5159
0
    *(yy_c_buf_p) = (yy_hold_char);
5160
0
    YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
5161
0
    YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
5162
0
    }
5163
5164
0
  YY_CURRENT_BUFFER_LVALUE = new_buffer;
5165
0
  yy_load_buffer_state(  );
5166
5167
  /* We don't actually know whether we did this switch during
5168
   * EOF (yywrap()) processing, but the only time this flag
5169
   * is looked at is after yywrap() is called, so it's safe
5170
   * to go ahead and always set it.
5171
   */
5172
0
  (yy_did_buffer_switch_on_eof) = 1;
5173
0
}
5174
5175
static void yy_load_buffer_state  (void)
5176
0
{
5177
0
      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
5178
0
  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
5179
0
  yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
5180
0
  (yy_hold_char) = *(yy_c_buf_p);
5181
0
}
5182
5183
/** Allocate and initialize an input buffer state.
5184
 * @param file A readable stream.
5185
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
5186
 * 
5187
 * @return the allocated buffer state.
5188
 */
5189
    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
5190
0
{
5191
0
  YY_BUFFER_STATE b;
5192
    
5193
0
  b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
5194
0
  if ( ! b )
5195
0
    YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
5196
5197
0
  b->yy_buf_size = size;
5198
5199
  /* yy_ch_buf has to be 2 characters longer than the size given because
5200
   * we need to put in 2 end-of-buffer characters.
5201
   */
5202
0
  b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
5203
0
  if ( ! b->yy_ch_buf )
5204
0
    YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
5205
5206
0
  b->yy_is_our_buffer = 1;
5207
5208
0
  yy_init_buffer( b, file );
5209
5210
0
  return b;
5211
0
}
5212
5213
/** Destroy the buffer.
5214
 * @param b a buffer created with yy_create_buffer()
5215
 * 
5216
 */
5217
    void yy_delete_buffer (YY_BUFFER_STATE  b )
5218
0
{
5219
    
5220
0
  if ( ! b )
5221
0
    return;
5222
5223
0
  if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
5224
0
    YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
5225
5226
0
  if ( b->yy_is_our_buffer )
5227
0
    yyfree( (void *) b->yy_ch_buf  );
5228
5229
0
  yyfree( (void *) b  );
5230
0
}
5231
5232
/* Initializes or reinitializes a buffer.
5233
 * This function is sometimes called more than once on the same buffer,
5234
 * such as during a yyrestart() or at EOF.
5235
 */
5236
    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
5237
5238
0
{
5239
0
  int oerrno = errno;
5240
    
5241
0
  yy_flush_buffer( b );
5242
5243
0
  b->yy_input_file = file;
5244
0
  b->yy_fill_buffer = 1;
5245
5246
    /* If b is the current buffer, then yy_init_buffer was _probably_
5247
     * called from yyrestart() or through yy_get_next_buffer.
5248
     * In that case, we don't want to reset the lineno or column.
5249
     */
5250
0
    if (b != YY_CURRENT_BUFFER){
5251
0
        b->yy_bs_lineno = 1;
5252
0
        b->yy_bs_column = 0;
5253
0
    }
5254
5255
0
        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
5256
    
5257
0
  errno = oerrno;
5258
0
}
5259
5260
/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
5261
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
5262
 * 
5263
 */
5264
    void yy_flush_buffer (YY_BUFFER_STATE  b )
5265
0
{
5266
0
      if ( ! b )
5267
0
    return;
5268
5269
0
  b->yy_n_chars = 0;
5270
5271
  /* We always need two end-of-buffer characters.  The first causes
5272
   * a transition to the end-of-buffer state.  The second causes
5273
   * a jam in that state.
5274
   */
5275
0
  b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
5276
0
  b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
5277
5278
0
  b->yy_buf_pos = &b->yy_ch_buf[0];
5279
5280
0
  b->yy_at_bol = 1;
5281
0
  b->yy_buffer_status = YY_BUFFER_NEW;
5282
5283
0
  if ( b == YY_CURRENT_BUFFER )
5284
0
    yy_load_buffer_state(  );
5285
0
}
5286
5287
/** Pushes the new state onto the stack. The new state becomes
5288
 *  the current state. This function will allocate the stack
5289
 *  if necessary.
5290
 *  @param new_buffer The new state.
5291
 *  
5292
 */
5293
void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
5294
0
{
5295
0
      if (new_buffer == NULL)
5296
0
    return;
5297
5298
0
  yyensure_buffer_stack();
5299
5300
  /* This block is copied from yy_switch_to_buffer. */
5301
0
  if ( YY_CURRENT_BUFFER )
5302
0
    {
5303
    /* Flush out information for old buffer. */
5304
0
    *(yy_c_buf_p) = (yy_hold_char);
5305
0
    YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
5306
0
    YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
5307
0
    }
5308
5309
  /* Only push if top exists. Otherwise, replace top. */
5310
0
  if (YY_CURRENT_BUFFER)
5311
0
    (yy_buffer_stack_top)++;
5312
0
  YY_CURRENT_BUFFER_LVALUE = new_buffer;
5313
5314
  /* copied from yy_switch_to_buffer. */
5315
0
  yy_load_buffer_state(  );
5316
0
  (yy_did_buffer_switch_on_eof) = 1;
5317
0
}
5318
5319
/** Removes and deletes the top of the stack, if present.
5320
 *  The next element becomes the new top.
5321
 *  
5322
 */
5323
void yypop_buffer_state (void)
5324
0
{
5325
0
      if (!YY_CURRENT_BUFFER)
5326
0
    return;
5327
5328
0
  yy_delete_buffer(YY_CURRENT_BUFFER );
5329
0
  YY_CURRENT_BUFFER_LVALUE = NULL;
5330
0
  if ((yy_buffer_stack_top) > 0)
5331
0
    --(yy_buffer_stack_top);
5332
5333
0
  if (YY_CURRENT_BUFFER) {
5334
0
    yy_load_buffer_state(  );
5335
0
    (yy_did_buffer_switch_on_eof) = 1;
5336
0
  }
5337
0
}
5338
5339
/* Allocates the stack if it does not exist.
5340
 *  Guarantees space for at least one push.
5341
 */
5342
static void yyensure_buffer_stack (void)
5343
0
{
5344
0
  yy_size_t num_to_alloc;
5345
    
5346
0
  if (!(yy_buffer_stack)) {
5347
5348
    /* First allocation is just for 2 elements, since we don't know if this
5349
     * scanner will even need a stack. We use 2 instead of 1 to avoid an
5350
     * immediate realloc on the next call.
5351
         */
5352
0
      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
5353
0
    (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
5354
0
                (num_to_alloc * sizeof(struct yy_buffer_state*)
5355
0
                );
5356
0
    if ( ! (yy_buffer_stack) )
5357
0
      YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
5358
5359
0
    memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
5360
5361
0
    (yy_buffer_stack_max) = num_to_alloc;
5362
0
    (yy_buffer_stack_top) = 0;
5363
0
    return;
5364
0
  }
5365
5366
0
  if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
5367
5368
    /* Increase the buffer to prepare for a possible push. */
5369
0
    yy_size_t grow_size = 8 /* arbitrary grow size */;
5370
5371
0
    num_to_alloc = (yy_buffer_stack_max) + grow_size;
5372
0
    (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
5373
0
                ((yy_buffer_stack),
5374
0
                num_to_alloc * sizeof(struct yy_buffer_state*)
5375
0
                );
5376
0
    if ( ! (yy_buffer_stack) )
5377
0
      YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
5378
5379
    /* zero only the new slots.*/
5380
0
    memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
5381
0
    (yy_buffer_stack_max) = num_to_alloc;
5382
0
  }
5383
0
}
5384
5385
/** Setup the input buffer state to scan directly from a user-specified character buffer.
5386
 * @param base the character buffer
5387
 * @param size the size in bytes of the character buffer
5388
 * 
5389
 * @return the newly allocated buffer state object.
5390
 */
5391
YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
5392
0
{
5393
0
  YY_BUFFER_STATE b;
5394
    
5395
0
  if ( size < 2 ||
5396
0
       base[size-2] != YY_END_OF_BUFFER_CHAR ||
5397
0
       base[size-1] != YY_END_OF_BUFFER_CHAR )
5398
    /* They forgot to leave room for the EOB's. */
5399
0
    return NULL;
5400
5401
0
  b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
5402
0
  if ( ! b )
5403
0
    YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
5404
5405
0
  b->yy_buf_size = (int) (size - 2);  /* "- 2" to take care of EOB's */
5406
0
  b->yy_buf_pos = b->yy_ch_buf = base;
5407
0
  b->yy_is_our_buffer = 0;
5408
0
  b->yy_input_file = NULL;
5409
0
  b->yy_n_chars = b->yy_buf_size;
5410
0
  b->yy_is_interactive = 0;
5411
0
  b->yy_at_bol = 1;
5412
0
  b->yy_fill_buffer = 0;
5413
0
  b->yy_buffer_status = YY_BUFFER_NEW;
5414
5415
0
  yy_switch_to_buffer( b  );
5416
5417
0
  return b;
5418
0
}
5419
5420
/** Setup the input buffer state to scan a string. The next call to yylex() will
5421
 * scan from a @e copy of @a str.
5422
 * @param yystr a NUL-terminated string to scan
5423
 * 
5424
 * @return the newly allocated buffer state object.
5425
 * @note If you want to scan bytes that may contain NUL values, then use
5426
 *       yy_scan_bytes() instead.
5427
 */
5428
YY_BUFFER_STATE yy_scan_string (const char * yystr )
5429
0
{
5430
    
5431
0
  return yy_scan_bytes( yystr, (int) strlen(yystr) );
5432
0
}
5433
5434
/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
5435
 * scan from a @e copy of @a bytes.
5436
 * @param yybytes the byte buffer to scan
5437
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
5438
 * 
5439
 * @return the newly allocated buffer state object.
5440
 */
5441
YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
5442
0
{
5443
0
  YY_BUFFER_STATE b;
5444
0
  char *buf;
5445
0
  yy_size_t n;
5446
0
  int i;
5447
    
5448
  /* Get memory for full buffer, including space for trailing EOB's. */
5449
0
  n = (yy_size_t) (_yybytes_len + 2);
5450
0
  buf = (char *) yyalloc( n  );
5451
0
  if ( ! buf )
5452
0
    YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
5453
5454
0
  for ( i = 0; i < _yybytes_len; ++i )
5455
0
    buf[i] = yybytes[i];
5456
5457
0
  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
5458
5459
0
  b = yy_scan_buffer( buf, n );
5460
0
  if ( ! b )
5461
0
    YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
5462
5463
  /* It's okay to grow etc. this buffer, and we should throw it
5464
   * away when we're done.
5465
   */
5466
0
  b->yy_is_our_buffer = 1;
5467
5468
0
  return b;
5469
0
}
5470
5471
#ifndef YY_EXIT_FAILURE
5472
0
#define YY_EXIT_FAILURE 2
5473
#endif
5474
5475
static void yynoreturn yy_fatal_error (const char* msg )
5476
0
{
5477
0
      fprintf( stderr, "%s\n", msg );
5478
0
  exit( YY_EXIT_FAILURE );
5479
0
}
5480
5481
/* Redefine yyless() so it works in section 3 code. */
5482
5483
#undef yyless
5484
#define yyless(n) \
5485
  do \
5486
    { \
5487
    /* Undo effects of setting up yytext. */ \
5488
        int yyless_macro_arg = (n); \
5489
        YY_LESS_LINENO(yyless_macro_arg);\
5490
    yytext[yyleng] = (yy_hold_char); \
5491
    (yy_c_buf_p) = yytext + yyless_macro_arg; \
5492
    (yy_hold_char) = *(yy_c_buf_p); \
5493
    *(yy_c_buf_p) = '\0'; \
5494
    yyleng = yyless_macro_arg; \
5495
    } \
5496
  while ( 0 )
5497
5498
/* Accessor  methods (get/set functions) to struct members. */
5499
5500
/** Get the current line number.
5501
 * 
5502
 */
5503
int yyget_lineno  (void)
5504
0
{
5505
    
5506
0
    return yylineno;
5507
0
}
5508
5509
/** Get the input stream.
5510
 * 
5511
 */
5512
FILE *yyget_in  (void)
5513
0
{
5514
0
        return yyin;
5515
0
}
5516
5517
/** Get the output stream.
5518
 * 
5519
 */
5520
FILE *yyget_out  (void)
5521
0
{
5522
0
        return yyout;
5523
0
}
5524
5525
/** Get the length of the current token.
5526
 * 
5527
 */
5528
int yyget_leng  (void)
5529
0
{
5530
0
        return yyleng;
5531
0
}
5532
5533
/** Get the current token.
5534
 * 
5535
 */
5536
5537
char *yyget_text  (void)
5538
0
{
5539
0
        return yytext;
5540
0
}
5541
5542
/** Set the current line number.
5543
 * @param _line_number line number
5544
 * 
5545
 */
5546
void yyset_lineno (int  _line_number )
5547
0
{
5548
    
5549
0
    yylineno = _line_number;
5550
0
}
5551
5552
/** Set the input stream. This does not discard the current
5553
 * input buffer.
5554
 * @param _in_str A readable stream.
5555
 * 
5556
 * @see yy_switch_to_buffer
5557
 */
5558
void yyset_in (FILE *  _in_str )
5559
0
{
5560
0
        yyin = _in_str ;
5561
0
}
5562
5563
void yyset_out (FILE *  _out_str )
5564
0
{
5565
0
        yyout = _out_str ;
5566
0
}
5567
5568
int yyget_debug  (void)
5569
0
{
5570
0
        return yy_flex_debug;
5571
0
}
5572
5573
void yyset_debug (int  _bdebug )
5574
0
{
5575
0
        yy_flex_debug = _bdebug ;
5576
0
}
5577
5578
static int yy_init_globals (void)
5579
0
{
5580
        /* Initialization is the same as for the non-reentrant scanner.
5581
     * This function is called from yylex_destroy(), so don't allocate here.
5582
     */
5583
5584
0
    (yy_buffer_stack) = NULL;
5585
0
    (yy_buffer_stack_top) = 0;
5586
0
    (yy_buffer_stack_max) = 0;
5587
0
    (yy_c_buf_p) = NULL;
5588
0
    (yy_init) = 0;
5589
0
    (yy_start) = 0;
5590
5591
/* Defined in main.c */
5592
#ifdef YY_STDINIT
5593
    yyin = stdin;
5594
    yyout = stdout;
5595
#else
5596
0
    yyin = NULL;
5597
0
    yyout = NULL;
5598
0
#endif
5599
5600
    /* For future reference: Set errno on error, since we are called by
5601
     * yylex_init()
5602
     */
5603
0
    return 0;
5604
0
}
5605
5606
/* yylex_destroy is for both reentrant and non-reentrant scanners. */
5607
int yylex_destroy  (void)
5608
0
{
5609
    
5610
    /* Pop the buffer stack, destroying each element. */
5611
0
  while(YY_CURRENT_BUFFER){
5612
0
    yy_delete_buffer( YY_CURRENT_BUFFER  );
5613
0
    YY_CURRENT_BUFFER_LVALUE = NULL;
5614
0
    yypop_buffer_state();
5615
0
  }
5616
5617
  /* Destroy the stack itself. */
5618
0
  yyfree((yy_buffer_stack) );
5619
0
  (yy_buffer_stack) = NULL;
5620
5621
    /* Reset the globals. This is important in a non-reentrant scanner so the next time
5622
     * yylex() is called, initialization will occur. */
5623
0
    yy_init_globals( );
5624
5625
0
    return 0;
5626
0
}
5627
5628
/*
5629
 * Internal utility routines.
5630
 */
5631
5632
#ifndef yytext_ptr
5633
static void yy_flex_strncpy (char* s1, const char * s2, int n )
5634
{
5635
    
5636
  int i;
5637
  for ( i = 0; i < n; ++i )
5638
    s1[i] = s2[i];
5639
}
5640
#endif
5641
5642
#ifdef YY_NEED_STRLEN
5643
static int yy_flex_strlen (const char * s )
5644
{
5645
  int n;
5646
  for ( n = 0; s[n]; ++n )
5647
    ;
5648
5649
  return n;
5650
}
5651
#endif
5652
5653
void *yyalloc (yy_size_t  size )
5654
0
{
5655
0
      return malloc(size);
5656
0
}
5657
5658
void *yyrealloc  (void * ptr, yy_size_t  size )
5659
0
{
5660
    
5661
  /* The cast to (char *) in the following accommodates both
5662
   * implementations that use char* generic pointers, and those
5663
   * that use void* generic pointers.  It works with the latter
5664
   * because both ANSI C and C++ allow castless assignment from
5665
   * any pointer type to void*, and deal with argument conversions
5666
   * as though doing an assignment.
5667
   */
5668
0
  return realloc(ptr, size);
5669
0
}
5670
5671
void yyfree (void * ptr )
5672
0
{
5673
0
      free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
5674
0
}
5675
5676
#define YYTABLES_NAME "yytables"
5677
5678
#line 904 "toke.l"
5679
5680
struct path_list {
5681
    SLIST_ENTRY(path_list) entries;
5682
    char *path;
5683
};
5684
5685
SLIST_HEAD(path_list_head, path_list);
5686
5687
struct include_stack {
5688
    struct sudolinebuf line;
5689
    YY_BUFFER_STATE bs;
5690
    char *path; /* search path */
5691
    char *file;
5692
    struct path_list_head more; /* more files in case of includedir */
5693
    int lineno;
5694
    bool keepopen;
5695
};
5696
5697
/*
5698
 * Compare two struct path_list structs in reverse order.
5699
 */
5700
static int
5701
pl_compare(const void *v1, const void *v2)
5702
0
{
5703
0
    const struct path_list * const *p1 = v1;
5704
0
    const struct path_list * const *p2 = v2;
5705
5706
0
    return strcmp((*p2)->path, (*p1)->path);
5707
0
}
5708
5709
/*
5710
 * Open dirpath and fill in pathsp with an array of regular files
5711
 * that do not end in '~' or contain a '.'.
5712
 * Returns the number of files or SIZE_MAX (-1) on error.
5713
 * If zero files are found, NULL is stored in pathsp.
5714
 */
5715
static size_t
5716
read_dir_files(const char *dirpath, struct path_list ***pathsp, int verbose)
5717
0
{
5718
0
    DIR *dir;
5719
0
    size_t i, count = 0;
5720
0
    size_t max_paths = 32;
5721
0
    struct dirent *dent;
5722
0
    struct path_list **paths = NULL;
5723
0
    const size_t dirlen = strlen(dirpath);
5724
0
    debug_decl(read_dir_files, SUDOERS_DEBUG_PARSER);
5725
5726
    /* XXX - fdopendir */
5727
0
    dir = opendir(dirpath);
5728
0
    if (dir == NULL) {
5729
0
  if (errno == ENOENT)
5730
0
      goto done;
5731
0
  sudo_warn("%s", dirpath);
5732
0
  goto bad;
5733
0
    }
5734
0
    paths = reallocarray(NULL, max_paths, sizeof(*paths));
5735
0
    if (paths == NULL)
5736
0
  goto oom;
5737
0
    while ((dent = readdir(dir)) != NULL) {
5738
0
  const size_t namelen = NAMLEN(dent);
5739
0
  const char *name = dent->d_name;
5740
0
  struct path_list *pl;
5741
0
  struct stat sb;
5742
0
  size_t len;
5743
0
  char *path;
5744
5745
  /* Ignore files that end in '~' or have a '.' in them. */
5746
0
  if (namelen == 0 || name[namelen - 1] == '~' || strchr(name, '.') != NULL) {
5747
      /* Warn about ignored files not starting with '.' if verbose. */
5748
0
      if (namelen > 0 && name[0] != '.' && verbose > 1) {
5749
0
    if (name[namelen - 1] == '~' ||
5750
0
      (namelen > 4 && strcmp(&name[namelen - 4], ".bak") == 0)) {
5751
0
        fprintf(stderr, U_("%s/%s: %s"), dirpath, name,
5752
0
      U_("ignoring editor backup file"));
5753
0
    } else {
5754
0
        fprintf(stderr, U_("%s/%s: %s"), dirpath, name,
5755
0
      U_("ignoring file name containing '.'"));
5756
0
    }
5757
0
    fputc('\n', stderr);
5758
0
      }
5759
0
      continue;
5760
0
  }
5761
0
  len = dirlen + 1 + namelen;
5762
0
  if ((path = sudo_rcstr_alloc(len)) == NULL)
5763
0
      goto oom;
5764
0
  if ((size_t)snprintf(path, len + 1, "%s/%s", dirpath, name) != len) {
5765
0
      sudo_warnx(U_("internal error, %s overflow"), __func__);
5766
0
      sudo_rcstr_delref(path);
5767
0
      goto bad;
5768
0
  }
5769
0
  if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) {
5770
0
      sudo_rcstr_delref(path);
5771
0
      continue;
5772
0
  }
5773
0
  pl = malloc(sizeof(*pl));
5774
0
  if (pl == NULL) {
5775
0
      sudo_rcstr_delref(path);
5776
0
      goto oom;
5777
0
  }
5778
0
  pl->path = path;
5779
0
  if (count >= max_paths) {
5780
0
      struct path_list **tmp;
5781
0
      max_paths <<= 1;
5782
0
      tmp = reallocarray(paths, max_paths, sizeof(*paths));
5783
0
      if (tmp == NULL) {
5784
0
    sudo_rcstr_delref(path);
5785
0
    free(pl);
5786
0
    goto oom;
5787
0
      }
5788
0
      paths = tmp;
5789
0
  }
5790
0
  paths[count++] = pl;
5791
0
    }
5792
0
    closedir(dir);
5793
0
    if (count == 0) {
5794
0
  free(paths);
5795
0
  paths = NULL;
5796
0
    }
5797
0
done:
5798
0
    *pathsp = paths;
5799
0
    debug_return_size_t(count);
5800
0
oom:
5801
0
    sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
5802
0
bad:
5803
0
    sudoerserror(NULL);
5804
0
    if (dir != NULL)
5805
0
  closedir(dir);
5806
0
    for (i = 0; i < count; i++) {
5807
0
  sudo_rcstr_delref(paths[i]->path);
5808
0
  free(paths[i]);
5809
0
    }
5810
0
    free(paths);
5811
0
    debug_return_size_t(SIZE_MAX);
5812
0
}
5813
5814
/*
5815
 * Push a list of all files in dirpath onto stack.
5816
 * Returns the number of files or -1 on error.
5817
 */
5818
static size_t
5819
switch_dir(struct include_stack *stack, char *dirpath, int verbose)
5820
0
{
5821
0
    struct path_list **paths = NULL;
5822
0
    size_t count, i;
5823
0
    debug_decl(switch_dir, SUDOERS_DEBUG_PARSER);
5824
5825
0
    count = read_dir_files(dirpath, &paths, verbose);
5826
0
    if (count > 0 && count != SIZE_MAX) {
5827
  /* Sort the list as an array in reverse order. */
5828
0
  qsort(paths, count, sizeof(*paths), pl_compare);
5829
5830
  /* Build up the list in sorted order. */
5831
0
  for (i = 0; i < count; i++) {
5832
0
      SLIST_INSERT_HEAD(&stack->more, paths[i], entries);
5833
0
  }
5834
0
  free(paths);
5835
0
    }
5836
5837
0
    debug_return_size_t(count);
5838
0
}
5839
5840
0
#define MAX_SUDOERS_DEPTH 128
5841
0
#define SUDOERS_STACK_INCREMENT 16
5842
5843
static size_t istacksize, idepth;
5844
static struct include_stack *istack;
5845
static bool keepopen;
5846
5847
void
5848
init_lexer(void)
5849
42.8k
{
5850
42.8k
    struct path_list *pl;
5851
42.8k
    debug_decl(init_lexer, SUDOERS_DEBUG_PARSER);
5852
5853
42.8k
#ifndef TRACELEXER
5854
42.8k
    free(trace_lbuf.buf);
5855
42.8k
    sudo_lbuf_init(&trace_lbuf, NULL, 0, NULL, 0);
5856
42.8k
#endif
5857
5858
42.8k
    while (idepth) {
5859
0
  idepth--;
5860
0
  while ((pl = SLIST_FIRST(&istack[idepth].more)) != NULL) {
5861
0
      SLIST_REMOVE_HEAD(&istack[idepth].more, entries);
5862
0
      sudo_rcstr_delref(pl->path);
5863
0
      free(pl);
5864
0
  }
5865
0
  sudo_rcstr_delref(istack[idepth].path);
5866
0
  if (idepth && !istack[idepth].keepopen)
5867
0
      fclose(istack[idepth].bs->yy_input_file);
5868
0
  sudoers_delete_buffer(istack[idepth].bs);
5869
0
  free(istack[idepth].line.buf);
5870
0
    }
5871
42.8k
    free(istack);
5872
42.8k
    istack = NULL;
5873
42.8k
    istacksize = idepth = 0;
5874
42.8k
    free(sudolinebuf.buf);
5875
42.8k
    memset(&sudolinebuf, 0, sizeof(sudolinebuf));
5876
42.8k
    sudolineno = 1;
5877
42.8k
    keepopen = false;
5878
42.8k
    sawspace = false;
5879
42.8k
    continued = false;
5880
42.8k
    digest_type = SUDO_DIGEST_INVALID;
5881
42.8k
    prev_state = INITIAL;
5882
42.8k
    BEGIN INITIAL;
5883
5884
42.8k
    debug_return;
5885
42.8k
}
5886
5887
/*
5888
 * Like strlcpy() but expand %h escapes.
5889
 */
5890
static size_t
5891
strlcpy_expand_host(char * restrict dst, const char * restrict src,
5892
    const char * restrict host, size_t size)
5893
0
{
5894
0
    size_t len = 0;
5895
0
    char ch;
5896
0
    debug_decl(strlcpy_expand_host, SUDOERS_DEBUG_PARSER);
5897
5898
0
    while ((ch = *src++) != '\0') {
5899
0
  if (ch == '%' && *src == 'h') {
5900
0
      size_t n = strlcpy(dst, host, size);
5901
0
      len += n;
5902
0
      if (n >= size) {
5903
    /* truncated */
5904
0
    n = size ? size - 1 : 0;
5905
0
      }
5906
0
      dst += n;
5907
0
      size -= n;
5908
0
      src++;
5909
0
      continue;
5910
0
  }
5911
0
  if (size > 1) {
5912
0
      *dst++ = ch;
5913
0
      size--;
5914
0
      len++;
5915
0
  }
5916
0
    }
5917
0
    if (size > 0)
5918
0
  *dst = '\0';
5919
5920
0
    debug_return_size_t(len);
5921
0
}
5922
5923
/*
5924
 * Expand any embedded %h (host) escapes in the given path and makes
5925
 * a relative path fully-qualified based on the current sudoers file.
5926
 * Returns a reference-counted string on success or NULL on failure.
5927
 */
5928
static char *
5929
expand_include(const char *src, const char *host)
5930
0
{
5931
0
    const char *path = sudoers_search_path ? sudoers_search_path : sudoers;
5932
0
    const char *path_end = path + strlen(path);
5933
0
    char *dst, *dst0 = NULL, *dynamic_host = NULL;
5934
0
    const char *cp, *ep;
5935
0
    size_t dst_size, src_len;
5936
0
    size_t nhost = 0;
5937
0
    debug_decl(expand_include, SUDOERS_DEBUG_PARSER);
5938
5939
    /* Strip double quotes if present. */
5940
0
    src_len = strlen(src);
5941
0
    if (src_len > 1 && src[0] == '"' && src[src_len - 1] == '"') {
5942
0
  src++;
5943
0
  src_len -= 2;
5944
0
    }
5945
0
    if (src_len == 0)
5946
0
  debug_return_ptr(NULL);
5947
5948
    /* Check for %h escapes in src. */
5949
0
    cp = src;
5950
0
    ep = src + src_len;
5951
0
    while (cp < ep) {
5952
0
  if (cp[0] == '%' && cp[1] == 'h') {
5953
0
      nhost++;
5954
0
      cp += 2;
5955
0
      continue;
5956
0
  }
5957
0
  cp++;
5958
0
    }
5959
5960
    /* Check for a path separator in the host name, replace with '_'. */
5961
0
    if (nhost != 0 && strchr(host, '/') != NULL) {
5962
0
  dynamic_host = malloc(strlen(host) + 1);
5963
0
  if (dynamic_host == NULL) {
5964
0
      sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
5965
0
      goto bad;
5966
0
  }
5967
0
  for (dst = dynamic_host; *host != '\0'; host++) {
5968
0
      if (*host == '/') {
5969
0
    *dst++ = '_';
5970
0
    continue;
5971
0
      }
5972
0
      *dst++ = *host;
5973
0
  }
5974
0
  *dst = '\0';
5975
0
  host = dynamic_host;
5976
0
    }
5977
5978
0
    if (*src == '/') {
5979
  /* Fully-qualified path, make a copy and expand %h escapes. */
5980
0
  dst_size = src_len + (nhost * strlen(host)) - (nhost * 2) + 1;
5981
0
  dst0 = sudo_rcstr_alloc(dst_size - 1);
5982
0
  if (dst0 == NULL) {
5983
0
      sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
5984
0
      goto bad;
5985
0
  }
5986
0
  if (strlcpy_expand_host(dst0, src, host, dst_size) >= dst_size)
5987
0
      goto oflow;
5988
0
  goto done;
5989
0
    }
5990
5991
    /*
5992
     * Relative paths are located in the same dir as the sudoers file.
5993
     * If the current sudoers file was opened via a colon-separated path,
5994
     * use the same path when opening src.
5995
     */
5996
0
    dst_size = 1;
5997
0
    for (cp = sudo_strsplit(path, path_end, ":", &ep); cp != NULL;
5998
0
      cp = sudo_strsplit(NULL, path_end, ":", &ep)) {
5999
0
  char *dirend = memrchr(cp, '/', (size_t)(ep - cp));
6000
0
  if (dirend != NULL) {
6001
      /* Include space for trailing '/' separator. */
6002
0
      dst_size += (size_t)(dirend - cp) + 1;
6003
0
  }
6004
  /* Includes space for expanded host and ':' separator. */
6005
0
  dst_size += src_len + (nhost * strlen(host)) - (nhost * 2) + 1;
6006
0
    }
6007
6008
    /* Make a copy of the fully-qualified path and return it. */
6009
0
    dst = dst0 = sudo_rcstr_alloc(dst_size - 1);
6010
0
    if (dst0 == NULL) {
6011
0
  sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
6012
0
  goto bad;
6013
0
    }
6014
0
    for (cp = sudo_strsplit(path, path_end, ":", &ep); cp != NULL;
6015
0
      cp = sudo_strsplit(NULL, path_end, ":", &ep)) {
6016
0
  size_t len;
6017
0
  char *dirend;
6018
6019
0
  if (cp != path) {
6020
0
      if (dst_size < 2)
6021
0
    goto oflow;
6022
0
      *dst++ = ':';
6023
0
      dst_size--;
6024
0
  }
6025
6026
0
  dirend = memrchr(cp, '/', (size_t)(ep - cp));
6027
0
  if (dirend != NULL) {
6028
0
      len = (size_t)(dirend - cp) + 1;
6029
0
      if (len >= dst_size)
6030
0
    goto oflow;
6031
0
      memcpy(dst, cp, len);
6032
0
      dst += len;
6033
0
      dst_size -= len;
6034
0
  }
6035
6036
0
  len = strlcpy_expand_host(dst, src, host, dst_size);
6037
0
  if (len >= dst_size)
6038
0
      goto oflow;
6039
0
  dst += len;
6040
0
  dst_size -= len;
6041
0
    }
6042
0
    *dst = '\0';
6043
6044
0
done:
6045
0
    free(dynamic_host);
6046
0
    debug_return_str(dst0);
6047
0
oflow:
6048
0
    sudo_warnx(U_("internal error, %s overflow"), __func__);
6049
0
bad:
6050
0
    sudoerserror(NULL);
6051
0
    free(dynamic_host);
6052
0
    free(dst0);
6053
0
    debug_return_str(NULL);
6054
0
}
6055
6056
/*
6057
 * Open an include file (or file from a directory), push the old
6058
 * sudoers file buffer and switch to the new one.
6059
 * A missing or insecure include dir is simply ignored.
6060
 * Returns false on error, else true.
6061
 */
6062
static bool
6063
push_include_int(const char *opath, const char *host, bool isdir,
6064
     struct sudoers_parser_config *conf)
6065
0
{
6066
0
    struct path_list *pl;
6067
0
    char *file = NULL, *path;
6068
0
    FILE *fp;
6069
0
    debug_decl(push_include, SUDOERS_DEBUG_PARSER);
6070
6071
0
    if ((path = expand_include(opath, host)) == NULL)
6072
0
  debug_return_bool(false);
6073
6074
    /* push current state onto stack */
6075
0
    if (idepth >= istacksize) {
6076
0
  struct include_stack *new_istack;
6077
6078
0
  if (idepth > MAX_SUDOERS_DEPTH) {
6079
0
      if (conf->verbose > 0) {
6080
0
    fprintf(stderr, U_("%s: %s"), path,
6081
0
        U_("too many levels of includes"));
6082
0
    fputc('\n', stderr);
6083
0
      }
6084
0
      sudoerserror(NULL);
6085
0
      sudo_rcstr_delref(path);
6086
0
      debug_return_bool(false);
6087
0
  }
6088
0
  istacksize += SUDOERS_STACK_INCREMENT;
6089
0
  new_istack = reallocarray(istack, istacksize, sizeof(*istack));
6090
0
  if (new_istack == NULL) {
6091
0
      sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory"));
6092
0
      sudoerserror(NULL);
6093
0
      sudo_rcstr_delref(path);
6094
0
      debug_return_bool(false);
6095
0
  }
6096
0
  istack = new_istack;
6097
0
    }
6098
0
    SLIST_INIT(&istack[idepth].more);
6099
0
    if (isdir) {
6100
0
  struct stat sb;
6101
0
  char dname[PATH_MAX];
6102
0
  int fd, status;
6103
0
  size_t count;
6104
6105
0
  fd = sudo_open_conf_path(path, dname, sizeof(dname), NULL);
6106
0
  if (conf->ignore_perms) {
6107
      /* Skip sudoers security checks when ignore_perms is set. */
6108
0
      if (fd == -1 || fstat(fd, &sb) == -1)
6109
0
    status = SUDO_PATH_MISSING;
6110
0
      else
6111
0
    status = SUDO_PATH_SECURE;
6112
0
  } else {
6113
0
      status = sudo_secure_fd(fd, S_IFDIR, sudoers_file_uid(),
6114
0
    sudoers_file_gid(), &sb);
6115
0
  }
6116
0
  if (fd != -1)
6117
0
      close(fd); /* XXX use in read_dir_files? */
6118
0
  if (status != SUDO_PATH_SECURE) {
6119
0
      if (conf->verbose > 0) {
6120
0
    switch (status) {
6121
0
    case SUDO_PATH_BAD_TYPE:
6122
0
        errno = ENOTDIR;
6123
0
        sudo_warn("%s", path);
6124
0
        break;
6125
0
    case SUDO_PATH_WRONG_OWNER:
6126
0
        sudo_warnx(U_("%s is owned by uid %u, should be %u"),   
6127
0
      path, (unsigned int) sb.st_uid,
6128
0
      (unsigned int) sudoers_file_uid());
6129
0
        break;
6130
0
    case SUDO_PATH_WORLD_WRITABLE:
6131
0
        sudo_warnx(U_("%s is world writable"), path);
6132
0
        break;
6133
0
    case SUDO_PATH_GROUP_WRITABLE:
6134
0
        sudo_warnx(U_("%s is owned by gid %u, should be %u"),
6135
0
      path, (unsigned int) sb.st_gid,
6136
0
      (unsigned int) sudoers_file_gid());
6137
0
        break;
6138
0
    default:
6139
0
        break;
6140
0
    }
6141
0
      }
6142
      /* A missing or insecure include dir is not a fatal error. */
6143
0
      sudo_rcstr_delref(path);
6144
0
      debug_return_bool(true);
6145
0
  }
6146
0
  count = switch_dir(&istack[idepth], dname, conf->verbose);
6147
0
  switch (count) {
6148
0
  case SIZE_MAX:
6149
0
  case 0:
6150
      /* switch_dir() called sudoerserror() for us */
6151
0
      sudo_rcstr_delref(path);
6152
0
      debug_return_bool(count ? false : true);
6153
0
  }
6154
6155
  /* Parse the first dir entry we can open, leave the rest for later. */
6156
0
  do {
6157
0
      sudo_rcstr_delref(file);
6158
0
      sudo_rcstr_delref(path);
6159
0
      if ((pl = SLIST_FIRST(&istack[idepth].more)) == NULL) {
6160
    /* Unable to open any files in include dir, not an error. */
6161
0
    debug_return_bool(true);
6162
0
      }
6163
0
      SLIST_REMOVE_HEAD(&istack[idepth].more, entries);
6164
0
      path = pl->path;
6165
0
      free(pl);
6166
      /* The file and path and the same for sudoers.d files. */
6167
0
      file = path;
6168
0
      sudo_rcstr_addref(file);
6169
0
  } while ((fp = open_sudoers(file, NULL, false, &keepopen)) == NULL);
6170
0
    } else {
6171
0
  if ((fp = open_sudoers(path, &file, true, &keepopen)) == NULL) {
6172
      /* The error was already printed by open_sudoers() */
6173
0
      sudoerserror(NULL);
6174
0
      sudo_rcstr_delref(path);
6175
0
      debug_return_bool(false);
6176
0
  }
6177
0
    }
6178
    /*
6179
     * Push the old (current) file and open the new one.
6180
     * We use the existing refs of sudoers and sudoers_search_path.
6181
     */
6182
0
    istack[idepth].file = sudoers;
6183
0
    istack[idepth].path = sudoers_search_path;
6184
0
    istack[idepth].line = sudolinebuf;
6185
0
    istack[idepth].bs = YY_CURRENT_BUFFER;
6186
0
    istack[idepth].lineno = sudolineno;
6187
0
    istack[idepth].keepopen = keepopen;
6188
0
    idepth++;
6189
0
    sudolineno = 1;
6190
0
    sudoers = file;
6191
0
    sudoers_search_path = path;
6192
0
    sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
6193
0
    memset(&sudolinebuf, 0, sizeof(sudolinebuf));
6194
6195
0
    debug_return_bool(true);
6196
0
}
6197
6198
bool
6199
push_include(const char *opath, const char *host,
6200
     struct sudoers_parser_config *conf)
6201
0
{
6202
0
    return push_include_int(opath, host, false, conf);
6203
0
}
6204
6205
bool
6206
push_includedir(const char *opath, const char *host,
6207
     struct sudoers_parser_config *conf)
6208
0
{
6209
0
    return push_include_int(opath, host, true, conf);
6210
0
}
6211
6212
/*
6213
 * Restore the previous sudoers file and buffer, or, in the case
6214
 * of an includedir, switch to the next file in the dir.
6215
 * Returns false if there is nothing to pop, else true.
6216
 */
6217
static bool
6218
pop_include(void)
6219
0
{
6220
0
    struct path_list *pl;
6221
0
    FILE *fp;
6222
0
    debug_decl(pop_include, SUDOERS_DEBUG_PARSER);
6223
6224
0
    if (idepth == 0 || YY_CURRENT_BUFFER == NULL)
6225
0
  debug_return_bool(false);
6226
6227
0
    if (!keepopen)
6228
0
  fclose(YY_CURRENT_BUFFER->yy_input_file);
6229
0
    sudoers_delete_buffer(YY_CURRENT_BUFFER);
6230
    /* If we are in an include dir, move to the next file. */
6231
0
    while ((pl = SLIST_FIRST(&istack[idepth - 1].more)) != NULL) {
6232
0
  SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries);
6233
0
  fp = open_sudoers(pl->path, NULL, false, &keepopen);
6234
0
  if (fp != NULL) {
6235
0
      sudolinebuf.len = sudolinebuf.off = 0;
6236
0
      sudolinebuf.toke_start = sudolinebuf.toke_end = 0;
6237
0
      sudo_rcstr_delref(sudoers);
6238
0
      sudo_rcstr_delref(sudoers_search_path);
6239
0
      sudoers_search_path = pl->path;
6240
0
      sudoers = sudoers_search_path;
6241
0
      sudo_rcstr_addref(sudoers);
6242
0
      sudolineno = 1;
6243
0
      sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
6244
0
      free(pl);
6245
0
      break;
6246
0
  }
6247
  /* Unable to open path in include dir, go to next one. */
6248
0
  sudo_rcstr_delref(pl->path);
6249
0
  free(pl);
6250
0
    }
6251
    /* If no path list, just pop the last dir on the stack. */
6252
0
    if (pl == NULL) {
6253
0
  idepth--;
6254
0
  sudoers_switch_to_buffer(istack[idepth].bs);
6255
0
  free(sudolinebuf.buf);
6256
0
  sudolinebuf = istack[idepth].line;
6257
0
  sudo_rcstr_delref(sudoers);
6258
0
  sudoers = istack[idepth].file;
6259
0
  sudo_rcstr_delref(sudoers_search_path);
6260
0
  sudoers_search_path = istack[idepth].path;
6261
0
  sudolineno = istack[idepth].lineno;
6262
0
  keepopen = istack[idepth].keepopen;
6263
0
    }
6264
0
    debug_return_bool(true);
6265
0
}
6266
6267
#ifdef TRACELEXER
6268
int
6269
sudoers_trace_print(const char *msg)
6270
{
6271
    return fputs(msg, stderr);
6272
}
6273
#else
6274
int
6275
sudoers_trace_print(const char *msg)
6276
0
{
6277
0
    debug_decl_vars(sudoers_trace_print, SUDOERS_DEBUG_PARSER);
6278
6279
0
    if (sudo_debug_needed(SUDO_DEBUG_DEBUG)) {
6280
0
  sudo_lbuf_append(&trace_lbuf, "%s", msg);
6281
0
  if (strchr(msg, '\n') != NULL)
6282
0
  {
6283
      /* We already parsed the newline so sudolineno is off by one. */
6284
0
      sudo_debug_printf2(NULL, NULL, 0,
6285
0
    sudo_debug_subsys|SUDO_DEBUG_DEBUG, "sudoerslex: %s:%d: %s",
6286
0
    sudoers, sudolineno - 1, trace_lbuf.buf);
6287
0
      trace_lbuf.len = 0;
6288
0
  }
6289
0
    }
6290
0
    return 0;
6291
0
}
6292
#endif /* TRACELEXER */
6293
6294
/*
6295
 * Custom input function that uses getdelim(3) and stores the buffer
6296
 * where the error functions can access it for better reporting.
6297
 * On success, buf is guaranteed to end in a newline and not contain
6298
 * embedded NULs.  Calls YY_FATAL_ERROR on error.
6299
 */
6300
static int
6301
sudoers_input(char *buf, yy_size_t max_size)
6302
0
{
6303
0
    char *cp;
6304
0
    size_t avail = sudolinebuf.len - sudolinebuf.off;
6305
0
    debug_decl(sudoers_input, SUDOERS_DEBUG_PARSER);
6306
6307
    /* Refill line buffer if needed. */
6308
0
    if (avail == 0) {
6309
  /*
6310
   * Some getdelim(3) implementations write NUL to buf on EOF.
6311
   * We peek ahead one char to detect EOF and skip the getdelim() call.
6312
   * This will preserve the original value of the last line read.
6313
   */
6314
0
  int ch = getc(sudoersin);
6315
0
  if (ch == EOF)
6316
0
      goto sudoers_eof;
6317
0
  ungetc(ch, sudoersin);
6318
0
  avail = (size_t)getdelim(&sudolinebuf.buf, &sudolinebuf.size, '\n', sudoersin);
6319
0
  if (avail == (size_t)-1) {
6320
0
sudoers_eof:
6321
      /* EOF or error. */
6322
0
      if (feof(sudoersin))
6323
0
    debug_return_int(0);
6324
0
      YY_FATAL_ERROR("input in flex scanner failed");
6325
0
  }
6326
6327
  /* getdelim() can return embedded NULs, truncate if we find one. */
6328
0
  cp = memchr(sudolinebuf.buf, '\0', avail);
6329
0
  if (cp != NULL) {
6330
0
      *cp++ = '\n';
6331
0
      *cp = '\0';
6332
0
      avail = (size_t)(cp - sudolinebuf.buf);
6333
0
  }
6334
6335
  /* Add trailing newline if it is missing. */
6336
0
  if (sudolinebuf.buf[avail - 1] != '\n') {
6337
0
      if (avail + 2 >= sudolinebuf.size) {
6338
0
    cp = realloc(sudolinebuf.buf, avail + 2);
6339
0
    if (cp == NULL) {
6340
0
        YY_FATAL_ERROR("unable to allocate memory");
6341
0
        debug_return_int(0);
6342
0
    }
6343
0
    sudolinebuf.buf = cp;
6344
0
    sudolinebuf.size = avail + 2;
6345
0
      }
6346
0
      sudolinebuf.buf[avail++] = '\n';
6347
0
      sudolinebuf.buf[avail] = '\0';
6348
0
  }
6349
6350
0
  sudo_debug_printf(SUDO_DEBUG_DEBUG, "%s:%d: %.*s", sudoers, sudolineno,
6351
0
      (int)(avail -1), sudolinebuf.buf);
6352
6353
0
  sudolinebuf.len = avail;
6354
0
  sudolinebuf.off = 0;
6355
0
  sudolinebuf.toke_start = sudolinebuf.toke_end = 0;
6356
0
    }
6357
6358
0
    if (avail > max_size)
6359
0
  avail = max_size;
6360
0
    memcpy(buf, sudolinebuf.buf + sudolinebuf.off, avail);
6361
0
    sudolinebuf.off += avail;
6362
6363
0
    debug_return_int((int)avail);
6364
0
}
6365