File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / plugins / sudoers / toke.c
Revision 1.1.1.5 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 16:12:54 2014 UTC (10 years, 2 months ago) by misho
Branches: sudo, MAIN
CVS tags: v1_8_10p3_0, v1_8_10p3, HEAD
sudo v 1.8.10p3

    1: #include <config.h>
    2: #define yy_create_buffer sudoers_create_buffer
    3: #define yy_delete_buffer sudoers_delete_buffer
    4: #define yy_scan_buffer sudoers_scan_buffer
    5: #define yy_scan_string sudoers_scan_string
    6: #define yy_scan_bytes sudoers_scan_bytes
    7: #define yy_flex_debug sudoers_flex_debug
    8: #define yy_init_buffer sudoers_init_buffer
    9: #define yy_flush_buffer sudoers_flush_buffer
   10: #define yy_load_buffer_state sudoers_load_buffer_state
   11: #define yy_switch_to_buffer sudoers_switch_to_buffer
   12: #define yyin sudoersin
   13: #define yyleng sudoersleng
   14: #define yylex sudoerslex
   15: #define yyout sudoersout
   16: #define yyrestart sudoersrestart
   17: #define yytext sudoerstext
   18: 
   19: /*	$OpenBSD: flex.skl,v 1.12 2013/11/04 17:03:32 millert Exp $	*/
   20: 
   21: /* A lexical scanner generated by flex */
   22: 
   23: /* Scanner skeleton version:
   24:  * $Header: /usr/local/www/users/anoncvs/cvs/embedaddon/sudo/plugins/sudoers/toke.c,v 1.1.1.5 2014/06/15 16:12:54 misho Exp $
   25:  */
   26: 
   27: #define FLEX_SCANNER
   28: #define YY_FLEX_MAJOR_VERSION 2
   29: #define YY_FLEX_MINOR_VERSION 5
   30: 
   31: #include <stdio.h>
   32: #include <errno.h>
   33: 
   34: 
   35: /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
   36: #ifdef c_plusplus
   37: #ifndef __cplusplus
   38: #define __cplusplus
   39: #endif
   40: #endif
   41: 
   42: 
   43: #ifdef __cplusplus
   44: 
   45: #include <stdlib.h>
   46: #include <unistd.h>
   47: 
   48: /* Use prototypes in function declarations. */
   49: #define YY_USE_PROTOS
   50: 
   51: /* The "const" storage-class-modifier is valid. */
   52: #define YY_USE_CONST
   53: 
   54: #else	/* ! __cplusplus */
   55: 
   56: #ifdef __STDC__
   57: 
   58: #define YY_USE_PROTOS
   59: #define YY_USE_CONST
   60: 
   61: #endif	/* __STDC__ */
   62: #endif	/* ! __cplusplus */
   63: 
   64: #ifdef __TURBOC__
   65:  #pragma warn -rch
   66:  #pragma warn -use
   67: #include <io.h>
   68: #include <stdlib.h>
   69: #define YY_USE_CONST
   70: #define YY_USE_PROTOS
   71: #endif
   72: 
   73: #ifdef YY_USE_CONST
   74: #define yyconst const
   75: #else
   76: #define yyconst
   77: #endif
   78: 
   79: 
   80: #ifdef YY_USE_PROTOS
   81: #define YY_PROTO(proto) proto
   82: #else
   83: #define YY_PROTO(proto) ()
   84: #endif
   85: 
   86: /* Returned upon end-of-file. */
   87: #define YY_NULL 0
   88: 
   89: /* Promotes a possibly negative, possibly signed char to an unsigned
   90:  * integer for use as an array index.  If the signed char is negative,
   91:  * we want to instead treat it as an 8-bit unsigned char, hence the
   92:  * double cast.
   93:  */
   94: #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
   95: 
   96: /* Enter a start condition.  This macro really ought to take a parameter,
   97:  * but we do it the disgusting crufty way forced on us by the ()-less
   98:  * definition of BEGIN.
   99:  */
  100: #define BEGIN yy_start = 1 + 2 *
  101: 
  102: /* Translate the current start state into a value that can be later handed
  103:  * to BEGIN to return to the state.  The YYSTATE alias is for lex
  104:  * compatibility.
  105:  */
  106: #define YY_START ((yy_start - 1) / 2)
  107: #define YYSTATE YY_START
  108: 
  109: /* Action number for EOF rule of a given start state. */
  110: #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
  111: 
  112: /* Special action meaning "start processing a new file". */
  113: #define YY_NEW_FILE yyrestart( yyin )
  114: 
  115: #define YY_END_OF_BUFFER_CHAR 0
  116: 
  117: /* Size of default input buffer. */
  118: #define YY_BUF_SIZE 16384
  119: 
  120: typedef struct yy_buffer_state *YY_BUFFER_STATE;
  121: 
  122: extern int yyleng;
  123: extern FILE *yyin, *yyout;
  124: 
  125: #define EOB_ACT_CONTINUE_SCAN 0
  126: #define EOB_ACT_END_OF_FILE 1
  127: #define EOB_ACT_LAST_MATCH 2
  128: 
  129: /* The funky do-while in the following #define is used to turn the definition
  130:  * int a single C statement (which needs a semi-colon terminator).  This
  131:  * avoids problems with code like:
  132:  *
  133:  * 	if ( condition_holds )
  134:  *		yyless( 5 );
  135:  *	else
  136:  *		do_something_else();
  137:  *
  138:  * Prior to using the do-while the compiler would get upset at the
  139:  * "else" because it interpreted the "if" statement as being all
  140:  * done when it reached the ';' after the yyless() call.
  141:  */
  142: 
  143: /* Return all but the first 'n' matched characters back to the input stream. */
  144: 
  145: #define yyless(n) \
  146: 	do \
  147: 		{ \
  148: 		/* Undo effects of setting up yytext. */ \
  149: 		*yy_cp = yy_hold_char; \
  150: 		YY_RESTORE_YY_MORE_OFFSET \
  151: 		yy_cp = yy_bp + n - YY_MORE_ADJ; \
  152: 		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
  153: 		} \
  154: 	while ( 0 )
  155: 
  156: #define unput(c) yyunput( c, yytext_ptr )
  157: 
  158: /* The following is because we cannot portably get our hands on size_t
  159:  * (without autoconf's help, which isn't available because we want
  160:  * flex-generated scanners to compile on their own).
  161:  */
  162: typedef unsigned int yy_size_t;
  163: 
  164: 
  165: struct yy_buffer_state
  166: 	{
  167: 	FILE *yy_input_file;
  168: 
  169: 	char *yy_ch_buf;		/* input buffer */
  170: 	char *yy_buf_pos;		/* current position in input buffer */
  171: 
  172: 	/* Size of input buffer in bytes, not including room for EOB
  173: 	 * characters.
  174: 	 */
  175: 	yy_size_t yy_buf_size;
  176: 
  177: 	/* Number of characters read into yy_ch_buf, not including EOB
  178: 	 * characters.
  179: 	 */
  180: 	int yy_n_chars;
  181: 
  182: 	/* Whether we "own" the buffer - i.e., we know we created it,
  183: 	 * and can realloc() it to grow it, and should free() it to
  184: 	 * delete it.
  185: 	 */
  186: 	int yy_is_our_buffer;
  187: 
  188: 	/* Whether this is an "interactive" input source; if so, and
  189: 	 * if we're using stdio for input, then we want to use getc()
  190: 	 * instead of fread(), to make sure we stop fetching input after
  191: 	 * each newline.
  192: 	 */
  193: 	int yy_is_interactive;
  194: 
  195: 	/* Whether we're considered to be at the beginning of a line.
  196: 	 * If so, '^' rules will be active on the next match, otherwise
  197: 	 * not.
  198: 	 */
  199: 	int yy_at_bol;
  200: 
  201: 	/* Whether to try to fill the input buffer when we reach the
  202: 	 * end of it.
  203: 	 */
  204: 	int yy_fill_buffer;
  205: 
  206: 	int yy_buffer_status;
  207: #define YY_BUFFER_NEW 0
  208: #define YY_BUFFER_NORMAL 1
  209: 	/* When an EOF's been seen but there's still some text to process
  210: 	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
  211: 	 * shouldn't try reading from the input source any more.  We might
  212: 	 * still have a bunch of tokens to match, though, because of
  213: 	 * possible backing-up.
  214: 	 *
  215: 	 * When we actually see the EOF, we change the status to "new"
  216: 	 * (via yyrestart()), so that the user can continue scanning by
  217: 	 * just pointing yyin at a new input file.
  218: 	 */
  219: #define YY_BUFFER_EOF_PENDING 2
  220: 	};
  221: 
  222: static YY_BUFFER_STATE yy_current_buffer = 0;
  223: 
  224: /* We provide macros for accessing buffer states in case in the
  225:  * future we want to put the buffer states in a more general
  226:  * "scanner state".
  227:  */
  228: #define YY_CURRENT_BUFFER yy_current_buffer
  229: 
  230: 
  231: /* yy_hold_char holds the character lost when yytext is formed. */
  232: static char yy_hold_char;
  233: 
  234: static int yy_n_chars;		/* number of characters read into yy_ch_buf */
  235: 
  236: 
  237: int yyleng;
  238: 
  239: /* Points to current character in buffer. */
  240: static char *yy_c_buf_p = (char *) 0;
  241: static int yy_init = 1;		/* whether we need to initialize */
  242: static int yy_start = 0;	/* start state number */
  243: 
  244: /* Flag which is used to allow yywrap()'s to do buffer switches
  245:  * instead of setting up a fresh yyin.  A bit of a hack ...
  246:  */
  247: static int yy_did_buffer_switch_on_eof;
  248: 
  249: void yyrestart YY_PROTO(( FILE *input_file ));
  250: 
  251: void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
  252: void yy_load_buffer_state YY_PROTO(( void ));
  253: YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
  254: void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  255: void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
  256: void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
  257: #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
  258: 
  259: YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
  260: YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
  261: YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
  262: 
  263: static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
  264: static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
  265: static void yy_flex_free YY_PROTO(( void * ));
  266: 
  267: #define yy_new_buffer yy_create_buffer
  268: 
  269: #define yy_set_interactive(is_interactive) \
  270: 	{ \
  271: 	if ( ! yy_current_buffer ) \
  272: 		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
  273: 	yy_current_buffer->yy_is_interactive = is_interactive; \
  274: 	}
  275: 
  276: #define yy_set_bol(at_bol) \
  277: 	{ \
  278: 	if ( ! yy_current_buffer ) \
  279: 		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
  280: 	yy_current_buffer->yy_at_bol = at_bol; \
  281: 	}
  282: 
  283: #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
  284: 
  285: 
  286: #define yywrap() 1
  287: #define YY_SKIP_YYWRAP
  288: typedef unsigned char YY_CHAR;
  289: FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
  290: typedef int yy_state_type;
  291: extern char *yytext;
  292: #define yytext_ptr yytext
  293: 
  294: static yy_state_type yy_get_previous_state YY_PROTO(( void ));
  295: static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
  296: static int yy_get_next_buffer YY_PROTO(( void ));
  297: static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
  298: 
  299: /* Done after the current pattern has been matched and before the
  300:  * corresponding action - sets up yytext.
  301:  */
  302: #define YY_DO_BEFORE_ACTION \
  303: 	yytext_ptr = yy_bp; \
  304: 	yyleng = (int) (yy_cp - yy_bp); \
  305: 	yy_hold_char = *yy_cp; \
  306: 	*yy_cp = '\0'; \
  307: 	yy_c_buf_p = yy_cp;
  308: 
  309: #define YY_NUM_RULES 67
  310: #define YY_END_OF_BUFFER 68
  311: static yyconst short int yy_accept[814] =
  312:     {   0,
  313:         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  314:         0,    0,    0,    0,   68,   55,   63,   62,   61,   54,
  315:        65,   34,   56,   57,   34,   58,   55,   55,   55,   55,
  316:        60,   59,   66,   46,   46,   46,   46,   46,   46,   46,
  317:        46,   46,   46,   66,   55,   55,   63,   65,   46,   46,
  318:        46,   46,   46,    2,   66,    1,   55,   46,   46,   55,
  319:        17,   16,   17,   16,   16,   66,   65,   66,    3,    9,
  320:         8,    9,    4,    9,    5,   66,   13,   13,   13,   11,
  321:        12,   66,   19,   19,   18,   18,   18,   19,   18,   18,
  322:        18,   19,   19,   19,   19,   19,   18,   19,   19,   55,
  323: 
  324:         0,   63,   61,   65,   65,    0,   55,   36,    0,   34,
  325:         0,   35,    0,   53,   53,    0,   55,   55,    0,   55,
  326:        55,   55,   55,    0,   39,   46,   46,   46,   46,   46,
  327:        46,   46,   46,   46,   46,   46,   46,   55,   64,   55,
  328:        55,   63,    0,    0,    0,    0,    0,   65,   55,   55,
  329:        55,   55,   55,    2,    1,    0,    1,   47,   47,    0,
  330:        55,   17,   17,   15,   14,   15,    0,    0,    3,    9,
  331:         0,    6,    7,    9,    9,   13,    0,   13,   13,    0,
  332:        10,   36,    0,    0,   35,   19,   19,    0,   19,    0,
  333:         0,   18,   18,   18,   18,   18,   18,   19,   19,   46,
  334: 
  335:        19,   19,   19,   19,   19,   19,   19,   65,   65,    0,
  336:        36,   55,   55,   55,   55,   55,    0,    0,   39,   39,
  337:        46,   41,   46,   46,   46,   46,   46,   46,   46,   46,
  338:        46,   46,   46,   46,   55,   55,    0,    0,    0,    0,
  339:         0,   65,   55,   55,   55,   55,   55,    0,   55,   10,
  340:         0,    0,    0,   18,   18,   18,   19,   19,   19,   19,
  341:        19,   19,   19,   19,   19,   19,   19,   65,   55,   55,
  342:        55,   55,   55,   55,    0,   40,   40,   40,    0,    0,
  343:        39,   39,   39,   39,   39,   39,   39,   46,   46,   46,
  344:        46,   46,   46,   46,   46,   46,   46,   42,   46,   43,
  345: 
  346:        55,   55,   55,   55,    0,    0,    0,    0,    0,   65,
  347:        55,   55,   55,   55,    0,    0,    0,    0,    0,   18,
  348:        18,   19,   46,   19,   19,   19,   19,   19,   19,   19,
  349:        19,   19,   19,   55,   55,   55,    0,    0,   40,   40,
  350:        40,    0,   39,   39,    0,   39,   39,   39,   39,   39,
  351:        39,   39,   39,   39,   39,   39,    0,   27,   46,   46,
  352:        46,   46,   46,   46,   46,   46,   44,   46,   55,   55,
  353:        55,   55,   55,    0,    0,    0,   65,   55,   55,   55,
  354:         0,    0,    0,   18,   18,   46,   46,   19,   19,   19,
  355:        19,   19,   19,   19,   19,   19,   19,   19,   55,   55,
  356: 
  357:        55,   55,   55,    0,   40,    0,   39,   39,   39,    0,
  358:         0,    0,   39,   39,   39,   39,   39,   39,   39,   39,
  359:        39,   39,   39,   39,   39,   46,   46,   46,   46,   46,
  360:        46,   46,   46,   46,   48,   49,   50,   51,   55,    0,
  361:         0,   65,   55,   55,   55,    0,    0,    0,    0,    0,
  362:        46,   46,   19,   46,   19,   19,   19,   19,   19,   19,
  363:        19,   19,   19,   37,   37,   37,    0,    0,   39,   39,
  364:        39,   39,   39,   39,   39,    0,    0,    0,    0,    0,
  365:        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
  366:        39,   39,   39,   39,   46,   46,   46,    0,   26,   46,
  367: 
  368:        46,   46,   46,    0,   25,    0,   28,   55,    0,    0,
  369:        65,   55,   55,   55,   37,   37,   37,   46,   46,   46,
  370:        46,   19,   19,   19,   55,   37,   37,   37,   37,    0,
  371:        39,    0,   39,   39,   39,   39,   39,   39,   39,   39,
  372:        39,   39,   39,    0,    0,    0,   39,   39,   39,   39,
  373:        39,   39,   39,   39,   39,   39,   39,   39,   39,   46,
  374:        46,   46,   46,   46,   46,   46,   52,    0,    0,   65,
  375:        55,   22,   47,    0,   37,   37,   37,   37,   46,   46,
  376:        46,   46,   19,   19,   19,   38,   38,   38,   38,   39,
  377:         0,    0,    0,   39,   39,   39,   39,   39,   39,   39,
  378: 
  379:        39,   39,   39,   39,   39,   39,    0,    0,    0,    0,
  380:         0,   39,   39,   39,   39,   39,   39,   39,   39,   46,
  381:        46,   46,   46,   46,    0,   24,    0,   29,    0,   22,
  382:        65,   65,   55,    0,   55,   38,   38,   38,   38,   46,
  383:        46,   46,   46,   55,   55,   38,   38,   38,   38,    0,
  384:         0,    0,    0,    0,   39,   39,   39,   39,   39,   39,
  385:        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
  386:        39,   39,   39,   39,   45,    0,   32,   46,   46,   46,
  387:         0,   65,   65,   20,   65,   23,   22,    0,    0,    0,
  388:         0,    0,   22,    0,    0,    0,   38,   38,   38,   38,
  389: 
  390:        46,   46,   46,   55,   55,   55,    0,    0,    0,   39,
  391:        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
  392:        39,   39,   39,   39,   39,   39,   39,    0,   30,   46,
  393:        46,   23,   65,    0,   22,    0,    0,    0,   46,   46,
  394:        55,   55,   55,   55,   55,    0,    0,    0,    0,    0,
  395:        39,   39,   39,   39,   39,   39,   39,   39,    0,   33,
  396:        46,   65,    0,    0,    0,    0,    0,   46,   55,   55,
  397:        55,   39,   39,   39,   39,   39,   39,    0,   31,   65,
  398:        65,   21,    0,    0,    0,   55,   55,   55,   55,   55,
  399:        39,   39,   39,   39,   39,    0,    0,    0,    0,    0,
  400: 
  401:        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
  402:        37,   37,    0
  403:     } ;
  404: 
  405: static yyconst int yy_ec[256] =
  406:     {   0,
  407:         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
  408:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  409:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  410:         1,    2,    4,    5,    6,    1,    7,    1,    1,    8,
  411:         9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
  412:        19,   20,   21,   22,   23,   24,   25,   26,    1,    1,
  413:        27,   28,   10,   29,   30,   31,   32,   33,   34,   31,
  414:        35,   36,   37,   38,   38,   39,   40,   41,   42,   43,
  415:        38,   44,   45,   46,   47,   48,   49,   50,   51,   38,
  416:        10,   52,   10,    1,   53,    1,   54,   55,   56,   57,
  417: 
  418:        58,   59,   60,   61,   62,   60,   60,   63,   64,   65,
  419:        66,   60,   60,   67,   68,   69,   70,   60,   60,   60,
  420:        60,   60,    1,    1,    1,    1,    1,    1,    1,    1,
  421:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  422:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  423:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  424:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  425:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  426:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  427:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  428: 
  429:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  430:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  431:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  432:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  433:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  434:         1,    1,    1,    1,    1
  435:     } ;
  436: 
  437: static yyconst int yy_meta[71] =
  438:     {   0,
  439:         1,    2,    3,    4,    5,    6,    1,    7,    7,    1,
  440:         8,    9,   10,   11,   12,   13,   13,   13,   13,   13,
  441:        13,   13,   13,   13,   13,   14,   15,    7,    1,   16,
  442:        16,   16,   16,   16,   17,   17,   17,   17,   17,   17,
  443:        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
  444:        17,   18,   19,   20,   20,   20,   20,   20,   20,   21,
  445:        21,   21,   21,   21,   21,   21,   21,   21,   21,   21
  446:     } ;
  447: 
  448: static yyconst short int yy_base[931] =
  449:     {   0,
  450:         0,   69,   71,   79,   94,  124,  175,  244,  153,  197,
  451:        85,  130,  314,    0, 4514, 4461, 4510, 5604, 4507, 5604,
  452:       382,   86, 5604, 5604, 4458, 5604,  140,  394,  195,  153,
  453:      4483, 5604, 5604,  453, 4383,   43,  508,   37, 4379,   65,
  454:      4378, 4385, 4367,  566,  581,   91,  151,  604,   39,   41,
  455:      4351,   34, 4348,  117, 4402, 4412,  428, 4371, 4382,  136,
  456:         0, 5604, 4407, 5604,    0,  606,  664,  105,    0, 4358,
  457:      5604,  115, 5604,  133, 5604,  138, 4357,  152,  171, 5604,
  458:       188,  383,  641,  694,  737,  235,  245,  794,  843, 4369,
  459:       157,  898, 4365, 4364, 4375, 4370,  944,    0,  206, 4351,
  460: 
  461:       266, 4400, 4397, 4397, 5604,  263,  532,  585, 4386,  608,
  462:       707, 4346,  829,  648, 4345,  968,  981, 1018, 4359, 4370,
  463:       563,  708,  422, 4357,  371, 1062, 1106, 4343, 4347, 4340,
  464:      4344,  596, 4333, 4340, 4337, 4329, 4331,  644, 5604,  237,
  465:       137,  946, 4309, 4314, 4305, 4300, 4301,  121,  225,  530,
  466:       377,  369,  335,  445, 4366,  720, 4365,  931, 4314, 1018,
  467:       169,    0, 4361,  160, 5604, 5604,  991,  388,    0, 4312,
  468:       638, 5604, 5604, 4311,  661, 4310, 4356,  392,  221,  420,
  469:      4358,  653,  665, 1139, 4296, 1145,    0, 1173, 1201, 1210,
  470:      1037, 1239, 4333, 1081, 1170,  826, 1288, 1343, 4307,    0,
  471: 
  472:      4311, 4309,  899, 4298, 4296, 4287, 4283, 4336, 4335, 1222,
  473:      1258, 1389, 1362,  968, 1428, 4323, 4310, 1472,  520, 1517,
  474:      1561, 1605, 4303, 4297, 4280, 4282, 4289, 4300, 4295, 4283,
  475:      4279, 4292, 4291, 4290,  654,  493, 4258, 4252, 4242, 4244,
  476:      4250,  534,  579, 4253,  491,  407,  506, 1413,  626, 4304,
  477:      4251, 4239, 1651, 1661, 4227, 1705,    0, 4197, 4164, 4155,
  478:      4151, 4151, 4135, 4112, 4111,  811, 4067, 4122, 1749,  378,
  479:         0,    0, 1041,  243, 4098, 4097, 1786,  805, 4096, 4095,
  480:       623, 1410, 1799, 1447, 1091, 1844, 1890, 4094,  429, 4073,
  481:       632, 4084, 4082, 4056, 4054, 4050, 4053,    0, 4046,    0,
  482: 
  483:       929,  638,  544,  561, 4022, 4024, 4008, 4022, 4008,  746,
  484:       524, 1063,  413,  662, 1491, 4060, 4059, 4058, 1270, 1900,
  485:      1944,  763,  904, 4037, 4020, 4009, 4007, 3992, 3988,  818,
  486:      3993, 3988, 3912, 1990, 2002, 2014, 3930, 3929, 2024, 3929,
  487:      3912, 3911, 3910,  919, 1536, 1003, 1580, 1142, 2037,    0,
  488:      1626, 2083, 1680, 1372, 2128, 2174,  764, 5604, 3892, 3877,
  489:      3870, 3884, 3862, 3869, 3879, 3879,    0, 3863,  698,  593,
  490:       820,  973, 1093, 3857, 3824, 3825,  922,  897,  969, 1097,
  491:      3866, 3858, 2186, 2196, 3829, 3807, 3800, 3814, 3778, 3784,
  492:      3794, 3793, 3747, 3726, 3716, 3711, 3696, 3656, 2240, 1017,
  493: 
  494:      2279, 2291, 1637, 3686, 3662, 3648, 3646, 2301, 1127, 3642,
  495:      3641, 2347, 1154, 1205, 1209, 1724, 1761, 2359,    0, 1763,
  496:      2405, 1774, 1457, 2450, 2496, 2521, 1024, 1127, 1181, 1190,
  497:      1169, 1207, 1224, 1392, 3602, 3584, 3577, 3560, 1240, 3581,
  498:      3547, 1313, 1391,  874, 1774, 1821, 3584, 3576, 3569, 1503,
  499:      3523, 3519,  869, 1379, 3515, 3511,  949, 1045,    0,    0,
  500:         0,    0, 3478, 2577, 1863, 1546, 3510, 3509, 3506, 1919,
  501:      2616, 1963, 1590, 2660, 2706, 2056, 3517, 3509, 3487, 1692,
  502:      1879, 1979, 2096, 2104, 2147, 2106, 2718,    0, 2217, 2764,
  503:      2250, 1734, 2809, 2855, 2880, 2086, 1133, 1088, 5604,  421,
  504: 
  505:      2087, 1184, 2088, 1369, 5604, 1370, 5604, 1197, 3418, 3389,
  506:      1282, 2127, 1249, 1368, 3442, 3427, 2936, 3386, 3320, 3309,
  507:      3295, 2951, 1219, 3272, 3006, 1181, 3044,    0, 1709, 3290,
  508:      3263, 2260,   58, 2320, 1774, 3083,    0, 2380, 3129, 2424,
  509:      1831, 3173, 3219, 3270, 3265, 3231, 2336, 2462, 2464, 2471,
  510:      3256, 2477, 3243,    0, 2589, 3289, 2600, 1929, 3335, 3360,
  511:      1376, 1087, 1847, 1409, 1542, 1586, 3218, 3184, 3166, 1832,
  512:      1427, 2060, 3174, 2635, 3210, 3186, 3185, 2435, 3129, 3111,
  513:      3114, 3066, 3429, 1454,    0, 3486, 2679, 2737, 1483, 3085,
  514:      2989, 2839, 3525, 2819, 2003, 2280, 2783, 2381, 3537,    0,
  515: 
  516:      2830, 3583, 3016, 2157, 3627, 3673, 3026, 2821, 2801, 2750,
  517:      2228, 2472, 2474, 2695, 1189, 1531, 3685,    0, 2647, 1848,
  518:      1925, 1602, 1522, 1849, 1587, 5604, 1664, 5604, 2692, 1967,
  519:      1630, 2177, 2014, 2406, 2761, 2674, 2630, 3731, 2272, 1926,
  520:      2155, 2500, 1927, 3741, 2076, 3780,    0, 1967, 2277, 3054,
  521:      2598, 2535, 2509, 2841, 2470, 2431, 2485, 2600, 3064, 2617,
  522:      3819,    0, 3104, 3865, 3148, 3036, 3909, 3955, 2390, 2373,
  523:      3966, 3118, 2338, 1742, 2298, 2129, 5604, 2743, 1825, 1738,
  524:      2219, 2153, 1825, 5604, 2062, 2083, 3130, 3172, 3276, 3281,
  525:      1984, 2880, 1920, 3360, 3192, 1912, 1877, 1858, 3274, 1744,
  526: 
  527:      2326, 2643, 2745, 3978, 3990, 4002, 1700, 1693, 4014, 1662,
  528:      1623, 2856, 2951, 3496, 3084, 4026,    0, 3508, 4072, 3556,
  529:      3074,    0, 1599, 1510, 1503, 3319, 1423, 2328, 5604, 3154,
  530:      2037, 5604, 2124, 3602, 3646, 1409, 1403, 4118, 2407, 2791,
  531:      4130, 2334, 4142, 4154, 3659, 3704, 1390, 1286, 1251, 3418,
  532:      1158, 1087, 3105, 1077, 1056, 4166,    0, 3568, 2499, 5604,
  533:      3270, 2220, 3751, 1014, 1005,  957, 3614, 2522, 4178, 4190,
  534:      4202, 3761, 3790, 3800,  684,    0,  683, 2685, 5604,  658,
  535:      2222, 5604,  522,  382, 4214, 4226, 2335, 4238, 4250, 3840,
  536:      5604, 3846, 3884, 3202, 5604, 3928,  374,  208,  117, 3716,
  537: 
  538:      4260, 4297, 4334, 4045, 4091, 4270,   59, 4371, 3941, 5604,
  539:      4280, 3771, 5604, 4423, 4444, 4465, 4486, 4507, 4528, 4549,
  540:      4570, 4591, 4600, 2074, 4620, 4641, 2383, 4662, 4683, 4704,
  541:      4725, 4746, 4767, 4788, 4809, 2337, 4830, 4839, 4847, 4856,
  542:      4876, 4897, 4918, 2474, 4939, 4960, 4981, 5002, 5011, 5030,
  543:      5039, 5048, 2421, 2516, 5056, 5064, 5072, 5081, 5089, 5096,
  544:      5104, 5112, 5121, 5131, 2600, 2694, 5139, 5147, 5155, 2695,
  545:      2757, 5164, 5174, 5194, 2798, 5203, 5211, 2799, 5220, 5230,
  546:      5250, 2228, 2615, 5259, 5271, 5280, 5290, 2803, 2825, 5299,
  547:      5309, 5318, 5338, 2700, 5347, 5359, 2841, 2872, 5368, 5378,
  548: 
  549:      2873, 5387, 5397, 5417, 5438, 5459, 3115, 3116, 5479, 3168,
  550:      5486, 5496, 2951, 2967, 5505, 2520, 5525, 3304, 3313, 5534,
  551:      5544, 3517, 3314, 3318, 5552, 5562, 5582, 3814, 3319, 3430
  552:     } ;
  553: 
  554: static yyconst short int yy_def[931] =
  555:     {   0,
  556:       813,    1,    1,    1,  814,  814,  815,  815,  816,  816,
  557:       817,  817,  813,   13,  813,  818,  813,  813,  813,  813,
  558:       819,  820,  813,  813,  821,  813,  822,  818,   28,   28,
  559:       823,  813,  813,  813,   34,   34,   34,   37,   37,   37,
  560:        37,   37,   37,  818,   28,  818,  813,  819,   34,   34,
  561:        37,   37,   37,  813,  824,  813,  825,   37,   37,  818,
  562:       826,  813,  826,  813,  826,  813,  819,  813,  827,  828,
  563:       813,  828,  813,  828,  813,  829,  830,  830,  830,  813,
  564:       813,  831,  832,  833,  813,   85,   85,   85,  813,   89,
  565:        89,   89,   92,   92,   92,   92,   85,   88,   88,  818,
  566: 
  567:       818,  813,  813,  834,  813,  835,  813,  820,  836,  831,
  568:       820,  821,  821,  822,  837,  818,  818,   28,  838,  118,
  569:       118,  118,  118,  839,  840,   37,  126,  127,  127,  127,
  570:       127,  127,  127,  127,  127,  127,  127,  818,  813,  818,
  571:       818,  813,  813,  813,  813,  813,  813,  834,  818,  118,
  572:       818,  818,  818,  813,  813,  813,  813,  841,  842,  818,
  573:       818,  843,  843,  813,  813,  813,  835,  813,  844,  845,
  574:       845,  813,  813,  845,  845,  830,  813,  830,  830,  813,
  575:       813,  831,  831,  831,  846,  847,   88,  846,  848,  813,
  576:       813,   85,  192,  192,  192,  192,  813,  197,  198,  849,
  577: 
  578:       198,  198,  198,  198,  198,   88,   88,  834,  850,  813,
  579:       813,  818,  212,  212,  118,  215,  851,  813,  852,  813,
  580:       127,  221,  222,  222,  222,  222,  222,  222,  222,  222,
  581:       222,  222,  222,  222,  818,  818,  813,  813,  813,  813,
  582:       813,  834,  818,  215,  818,  818,  818,  813,  818,  813,
  583:       853,  854,  813,   88,  254,  197,  198,  198,  198,  198,
  584:       198,  198,  198,  198,  198,   88,   88,  850,  818,  818,
  585:       212,  212,  212,  818,  855,  856,  856,  277,  857,  856,
  586:       858,  220,  813,  283,  283,  813,  283,  222,  222,  222,
  587:       222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
  588: 
  589:       818,  818,  818,  818,  813,  813,  813,  813,  813,  834,
  590:       818,  818,  818,  818,  813,  813,  853,  853,  813,  254,
  591:       197,  198,  859,  198,  198,  198,  198,  198,  198,   88,
  592:        88,   88,   88,  212,  212,  212,  813,  860,  860,  339,
  593:       860,  861,  862,  863,  813,  864,  286,  864,  813,  349,
  594:       864,  813,  352,  352,  813,  352,  813,  813,  222,  222,
  595:       222,  222,  222,  222,  222,  222,  222,  222,  818,  818,
  596:       818,  818,  818,  813,  813,  813,  834,  818,  818,  818,
  597:       865,  866,  813,   88,  321,  859,  859,  198,  198,  198,
  598:       198,  198,  198,   88,   88,   88,   88,   88,  818,  818,
  599: 
  600:       212,  212,  818,  867,  867,  868,  869,  813,  813,  870,
  601:       871,  813,  872,  872,  873,  355,  873,  813,  418,  873,
  602:       813,  421,  421,  813,  421,  813,  426,  426,  426,  426,
  603:       426,  426,  426,  426,  818,  818,  818,  818,  818,  813,
  604:       813,  874,  818,  818,  818,  813,  813,  875,  875,  813,
  605:       859,  859,  198,  859,  198,  198,  198,  198,   88,   88,
  606:        88,   88,   88,  818,  464,  464,  813,  876,  877,  408,
  607:       813,  471,  471,  813,  471,  813,  813,  878,  878,  813,
  608:       813,  879,  879,  880,  424,  880,  813,  487,  880,  813,
  609:       490,  490,  813,  490,  813,  495,  495,  813,  813,  495,
  610: 
  611:       495,  495,  495,  813,  813,  813,  813,  818,  813,  813,
  612:       881,  818,  818,  818,  882,  883,  813,  884,  884,  884,
  613:       884,  813,  522,  885,  818,  818,  818,  527,  527,  813,
  614:       886,  813,  887,  474,  887,  813,  536,  887,  813,  539,
  615:       539,  813,  539,  888,  889,  813,  813,  890,  890,  891,
  616:       892,  891,  813,  553,  891,  813,  556,  556,  556,  813,
  617:       560,  560,  560,  560,  560,  560,  818,  813,  813,  893,
  618:       818,  818,  818,  813,  813,  894,  894,  813,  895,  895,
  619:       895,  895,  813,  583,  896,  818,  586,  586,  586,  813,
  620:       897,  898,  813,  899,  899,  900,  542,  900,  813,  599,
  621: 
  622:       900,  813,  602,  602,  813,  602,  813,  813,  901,  901,
  623:       813,  813,  902,  902,  903,  903,  813,  617,  903,  560,
  624:       560,  560,  560,  560,  813,  813,  813,  813,  813,  813,
  625:       904,  893,  818,  905,  906,  907,  908,  813,  907,  909,
  626:       909,  909,  909,  818,  818,  818,  646,  646,  818,  813,
  627:       813,  910,  910,  813,  813,  911,  911,  912,  605,  912,
  628:       813,  661,  912,  813,  664,  664,  813,  664,  913,  914,
  629:       813,  813,  915,  915,  560,  813,  813,  560,  560,  560,
  630:       813,  904,  904,  813,  893,  818,  905,  905,  905,  905,
  631:       916,  905,  917,  917,  813,  813,  907,  907,  813,  813,
  632: 
  633:       909,  909,  909,  646,  646,  646,  918,  919,  813,  813,
  634:       920,  920,  921,  667,  921,  813,  716,  921,  813,  719,
  635:       719,  922,  813,  913,  913,  813,  813,  813,  813,  560,
  636:       560,  813,  893,  813,  813,  923,  924,  813,  909,  909,
  637:       646,  818,  646,  646,  818,  813,  813,  918,  918,  813,
  638:       813,  925,  925,  926,  926,  926,  756,  926,  813,  813,
  639:       560,  927,  813,  813,  923,  923,  813,  909,  646,  646,
  640:       646,  813,  813,  813,  813,  928,  928,  813,  813,  927,
  641:       927,  813,  929,  930,  813,  646,  818,  646,  646,  818,
  642:       813,  813,  813,  813,  813,  813,  813,  929,  929,  813,
  643: 
  644:       818,  818,  818,  813,  813,  813,  818,  818,  818,  813,
  645:       813,  813,    0,  813,  813,  813,  813,  813,  813,  813,
  646:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  647:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  648:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  649:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  650:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  651:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  652:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  653:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  654: 
  655:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  656:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
  657:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813
  658:     } ;
  659: 
  660: static yyconst short int yy_nxt[5675] =
  661:     {   0,
  662:        16,   17,   18,   19,   20,   21,   22,   23,   24,   16,
  663:        25,   26,   16,   16,   27,   28,   29,   30,   28,   28,
  664:        28,   28,   28,   28,   28,   31,   32,   33,   16,   34,
  665:        35,   35,   35,   36,   37,   37,   37,   37,   38,   37,
  666:        39,   37,   40,   41,   42,   43,   37,   37,   37,   37,
  667:        37,   44,   16,   45,   45,   45,   45,   45,   45,   16,
  668:        16,   16,   16,   16,   16,   16,   16,   46,   16,   16,
  669:        47,  532,   54,  130,   48,  135,   55,  127,  131,  127,
  670:        54,  127,   56,  534,   55,   57,   78,   18,   79,   80,
  671:        56,  109,  129,   57,  133,   17,   62,   63,  150,   64,
  672: 
  673:        49,   50,  149,  152,   51,   64,  168,  139,  134,   58,
  674:       101,  110,   52,   59,   37,   53,   37,   58,  154,   64,
  675:        65,   59,   37,  105,   37,   17,   62,   63,  155,   64,
  676:       796,   78,   18,   79,   80,   64,   81,  111,   60,  175,
  677:       139,  172,  101,  115,  115,   66,   60,  115,  115,   64,
  678:        65,  140,  142,  178,   17,   18,   19,   71,   67,  173,
  679:       141,  168,  139,   72,   73,   74,  171,  115,  122,  122,
  680:       122,  122,  122,  123,  179,   66,   17,   18,   19,   75,
  681:        67,   81,  143,  144,  171,  242,  145,  101,  101,  180,
  682:       181,  116,  176,  236,  146,  198,  140,  147,   17,   18,
  683: 
  684:        19,   71,   67,  177,   76,  161,  201,   72,   73,   74,
  685:       121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
  686:       101,  796,  177,   75,  179,  249,   68,   69,   69,   69,
  687:        69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
  688:        69,   69,   69,   69,   69,   17,   18,   19,   76,   67,
  689:       194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
  690:       195,  195,  195,  195,  195,  196,  206,  100,  119,  100,
  691:       100,  100,  177,  100,  100,  207,  101,  100,  107,  107,
  692:       107,  107,  107,  107,  107,  107,  107,  107,  101,  243,
  693:       235,  100,  100,  100,  101,   68,   69,   69,   69,   69,
  694: 
  695:        69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
  696:        69,   69,   69,   69,   33,   17,   18,   19,   33,   33,
  697:        82,   23,   24,   33,   83,   26,   33,   33,   84,   85,
  698:        86,   87,   85,   85,   85,   85,   85,   85,   85,   31,
  699:        88,   33,   33,   89,   90,   90,   90,   91,   92,   92,
  700:        92,   92,   93,   92,   94,   92,   95,   92,   96,   92,
  701:        92,   92,   92,   92,   92,   68,   33,   97,   97,   97,
  702:        97,   97,   97,   98,   98,   98,   98,   98,   98,   98,
  703:        98,   99,   98,   98,  105,  218,  101,  796,  109,  168,
  704:       139,  269,  247,  178,  106,  796,  220,  107,  107,  107,
  705: 
  706:       107,  107,  107,  107,  107,  107,  107,  117,  183,  118,
  707:       118,  118,  118,  118,  118,  118,  118,  118,  118,  119,
  708:       101,  180,  181,  120,  120,  120,  120,  120,  101,  101,
  709:       357,  159,  159,  246,  184,  159,  159,  216,  216,  216,
  710:       216,  216,  216,  177,  245,  101,  154,  120,  120,  120,
  711:       120,  120,  120,  100,  358,  159,  155,  127,  101,  100,
  712:       313,  563,  100,  100,  101,  100,  100,  100,  126,  126,
  713:       126,  126,  126,  126,  126,  126,  126,  126,  119,  160,
  714:       311,  100,  126,  126,  126,  126,  126,  127,  127,  127,
  715:       127,  128,  127,  127,  127,  127,  127,  127,  127,  127,
  716: 
  717:       127,  127,  127,  127,  101,  127,  120,  120,  120,  120,
  718:       120,  120,  100,  100,  100,  100,  100,  100,  100,  100,
  719:       100,  100,  100,  127,  127,  127,  127,  127,  127,  127,
  720:       127,  127,  127,  813,  218,  796,  105,  127,  127,  127,
  721:       127,  127,  101,  100,  101,  282,  127,  107,  107,  107,
  722:       107,  107,  107,  107,  107,  107,  107,  101,  304,  311,
  723:       372,  100,  100,  100,  100,  100,  100,  138,  139,  100,
  724:       100,  100,  311,  100,  100,  101,  378,  100,  216,  216,
  725:       216,  216,  216,  216,  216,  216,  216,  216,  244,  310,
  726:       813,  100,  100,  100,  100,  101,  120,  120,  120,  120,
  727: 
  728:       120,  120,  120,  120,  120,  120,  105,  164,  139,  165,
  729:       813,  166,  101,  109,  436,  165,  106,  166,  373,  107,
  730:       107,  107,  107,  107,  107,  107,  107,  107,  107,  226,
  731:       101,  166,  166,  813,  227,  311,  111,  218,  228,  170,
  732:       229,  185,  170,  170,  101,  168,  139,  185,  282,  170,
  733:       185,  115,  115,  185,  185,  115,  115,  166,  813,  184,
  734:       782,  371,  168,  139,  170,  148,  105,  187,  360,  185,
  735:       109,  301,  302,  361,  303,  115,  167,  101,  813,  813,
  736:       813,  813,  813,  813,  813,  813,  813,  813,  813,  101,
  737:       813,  314,  188,  185,  115,  101,  532,  115,  115,  116,
  738: 
  739:       115,  115,  115,  115,  184,  101,  115,  115,  108,  714,
  740:       108,  108,  171,  101,  108,  108,  184,  435,  108,  380,
  741:       187,  115,  115,  216,  216,  216,  216,  216,  216,  216,
  742:       216,  216,  216,  108,  108,  107,  107,  107,  107,  107,
  743:       107,  107,  107,  107,  107,  190,  115,  187,  105,  101,
  744:       191,  187,  192,  192,  192,  192,  192,  192,  192,  192,
  745:       192,  192,  119,  187,  357,  357,  193,  193,  193,  193,
  746:       193,  187,  187,  187,  187,  187,  187,  187,  187,  187,
  747:       187,  187,  187,  187,  187,  187,  187,  187,  358,  358,
  748:       193,  193,  193,  193,  193,  193,  187,  187,  187,  187,
  749: 
  750:       187,  187,  187,  187,  187,  187,  187,  813,  377,  187,
  751:       187,  187,  187,  187,  187,  187,  187,  187,  187,  813,
  752:       341,  341,  341,  187,  187,  187,  187,  187,  330,  331,
  753:       112,  332,  112,  112,  112,  394,  112,  112,  395,  437,
  754:       112,  255,  255,  255,  255,  255,  255,  187,  187,  187,
  755:       187,  187,  187,  187,  112,  112,  112,  187,  197,  197,
  756:       197,  197,  197,  197,  197,  197,  197,  197,  119,  187,
  757:       498,  101,  197,  197,  197,  197,  197,  198,  198,  198,
  758:       198,  199,  198,  198,  198,  198,  198,  198,  198,  198,
  759:       198,  198,  198,  198,  499,  200,  193,  193,  193,  193,
  760: 
  761:       193,  193,  187,  187,  187,  187,  187,  187,  187,  187,
  762:       187,  187,  187,  198,  198,  198,  198,  198,  198,  198,
  763:       198,  198,  198,  813,  105,  101,  443,  198,  198,  198,
  764:       198,  198,  260,  218,  159,  159,  198,  261,  159,  159,
  765:       386,  262,  513,  263,  282,  387,  369,  142,  101,  370,
  766:       504,  187,  187,  187,  187,  187,  187,  813,  159,  193,
  767:       193,  193,  193,  193,  193,  193,  193,  193,  193,  114,
  768:       763,  100,  100,  114,  505,  100,  100,  143,  144,  114,
  769:       101,  145,  160,  272,  272,  272,  272,  272,  273,  146,
  770:       438,  442,  147,  114,  114,  100,  212,  213,  214,  212,
  771: 
  772:       212,  212,  212,  212,  212,  212,  813,  813,  813,  813,
  773:       813,  813,  813,  813,  813,  813,  345,  218,  763,  158,
  774:       101,  100,  100,  158,  101,  100,  100,  763,  347,  158,
  775:       399,  444,  101,  215,  215,  215,  215,  215,  215,  215,
  776:       215,  215,  215,  158,  158,  100,  506,  215,  215,  215,
  777:       215,  215,  251,  252,  253,  251,  251,  251,  251,  251,
  778:       251,  251,  100,  100,  100,  100,  496,  127,  101,  813,
  779:       507,  215,  215,  215,  215,  215,  215,  221,  221,  221,
  780:       221,  221,  221,  221,  221,  221,  221,  119,  119,  498,
  781:       532,  221,  221,  221,  221,  221,  255,  255,  255,  255,
  782: 
  783:       255,  255,  255,  255,  255,  255,  350,  350,  350,  350,
  784:       350,  351,  714,  499,  101,  215,  215,  215,  215,  215,
  785:       215,  127,  127,  127,  127,  127,  127,  127,  127,  127,
  786:       127,  813,  379,  622,  127,  127,  127,  127,  127,  127,
  787:       182,  218,  182,  182,  101,  185,  182,  182,  101,  439,
  788:       182,  185,  282,  445,  185,  813,  218,  185,  185,  100,
  789:       100,  100,  100,  100,  100,  182,  182,  347,  218,  127,
  790:       127,  187,  497,  185,  185,  562,  185,  185,  185,  347,
  791:       185,  185,  498,  659,  185,  255,  255,  255,  255,  255,
  792:       255,  255,  255,  255,  255,  525,  188,  185,  185,  185,
  793: 
  794:       185,  115,  345,  218,  115,  115,  499,  115,  115,  115,
  795:       115,  115,  127,  115,  115,  115,  565,  502,  345,  218,
  796:       127,  115,  345,  218,  127,  504,  500,  187,  115,  115,
  797:       347,  501,  101,  127,  416,  115,  115,  211,  211,  211,
  798:       211,  211,  211,  211,  211,  211,  211,  503,  101,  505,
  799:       127,  198,  190,  115,  254,  254,  254,  254,  254,  254,
  800:       254,  254,  254,  254,  746,  567,  584,  127,  254,  254,
  801:       254,  254,  254,  211,  211,  211,  211,  211,  211,  211,
  802:       211,  211,  211,  315,  105,  316,  316,  316,  316,  316,
  803:       316,  101,  254,  254,  254,  254,  254,  254,  187,  746,
  804: 
  805:       101,  508,  187,  256,  256,  256,  256,  256,  256,  256,
  806:       256,  256,  256,  119,  187,  105,  572,  256,  256,  256,
  807:       256,  256,  198,  198,  198,  198,  198,  198,  198,  198,
  808:       198,  198,  198,  198,  198,  198,  198,  198,  198,  570,
  809:       200,  254,  254,  254,  254,  254,  254,  187,  187,  187,
  810:       187,  187,  187,  187,  187,  187,  187,  187,  198,  198,
  811:       198,  198,  198,  198,  198,  198,  198,  198,  813,  511,
  812:       504,  506,  198,  198,  198,  198,  198,  271,  271,  271,
  813:       271,  271,  271,  271,  271,  271,  271,  419,  419,  419,
  814:       419,  419,  420,  506,  505,  507,  187,  187,  187,  187,
  815: 
  816:       187,  187,  269,  746,  270,  270,  270,  270,  270,  270,
  817:       270,  270,  270,  270,  159,  520,  763,  507,  159,  101,
  818:       521,  621,  763,  127,  159,  287,  287,  287,  287,  287,
  819:       287,  287,  287,  287,  287,  127,  573,  218,  159,  159,
  820:       101,  100,  101,  274,  274,  274,  274,  274,  274,  274,
  821:       274,  274,  274,  512,  624,  627,  127,  274,  274,  274,
  822:       274,  274,  349,  349,  349,  349,  349,  349,  349,  349,
  823:       349,  349,  488,  488,  488,  488,  488,  489,  101,  628,
  824:       633,  274,  274,  274,  274,  274,  274,  276,  277,  278,
  825:       278,  278,  278,  278,  278,  278,  278,  279,  649,  649,
  826: 
  827:       649,  280,  280,  280,  280,  280,  381,  382,  383,  381,
  828:       381,  381,  381,  381,  381,  381,  446,  218,  447,  447,
  829:       447,  447,  447,  447,  218,  280,  280,  280,  280,  280,
  830:       280,  218,  283,  284,  285,  283,  283,  283,  283,  283,
  831:       283,  283,  286,  625,  813,  218,  287,  287,  287,  287,
  832:       287,  410,  411,  412,  410,  410,  410,  410,  410,  410,
  833:       410,  528,  528,  528,  528,  528,  529,  626,  679,  127,
  834:       287,  287,  287,  287,  287,  287,  288,  288,  288,  288,
  835:       288,  288,  288,  288,  288,  288,  119,  627,  625,  127,
  836:       288,  288,  288,  288,  288,  356,  356,  356,  356,  356,
  837: 
  838:       356,  356,  356,  356,  356,  537,  537,  537,  537,  537,
  839:       538,  628,  626,  218,  274,  274,  274,  274,  274,  274,
  840:       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
  841:       813,  683,  684,  127,  127,  127,  127,  127,  127,  345,
  842:       218,  414,  414,  414,  414,  414,  414,  678,  659,  127,
  843:       399,  347,  400,  400,  400,  400,  400,  400,  100,  100,
  844:       100,  100,  100,  100,  315,  627,  318,  318,  318,  318,
  845:       318,  319,  316,  316,  316,  316,  320,  320,  320,  320,
  846:       320,  320,  320,  320,  320,  320,  119,  597,  101,  628,
  847:       320,  320,  320,  320,  320,  418,  418,  418,  418,  418,
  848: 
  849:       418,  418,  418,  418,  418,  476,  746,  477,  477,  477,
  850:       477,  477,  477,  746,  320,  320,  320,  320,  320,  320,
  851:       321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
  852:       100,  100,  100,  100,  321,  321,  321,  321,  321,  425,
  853:       425,  425,  425,  425,  425,  425,  425,  425,  425,  554,
  854:       554,  554,  554,  554,  555,  345,  218,  695,  320,  320,
  855:       320,  320,  320,  320,  334,  335,  336,  334,  334,  334,
  856:       334,  334,  334,  334,  813,  218,  345,  218,  483,  483,
  857:       483,  483,  483,  483,  731,  127,  416,  813,  416,  487,
  858:       487,  487,  487,  487,  487,  487,  487,  487,  487,  534,
  859: 
  860:       101,  339,  339,  340,  341,  341,  341,  341,  341,  341,
  861:       341,  279,  345,  218,  346,  346,  346,  346,  346,  346,
  862:       346,  346,  346,  346,  347,  101,  683,  684,  348,  348,
  863:       348,  348,  348,  631,  105,  514,  515,  516,  517,  515,
  864:       515,  515,  515,  515,  515,  515,  600,  600,  600,  600,
  865:       600,  601,  348,  348,  348,  348,  348,  348,  218,  352,
  866:       353,  354,  352,  352,  352,  352,  352,  352,  352,  355,
  867:       730,  695,  127,  356,  356,  356,  356,  356,  527,  527,
  868:       527,  527,  527,  527,  527,  527,  527,  527,  632,  623,
  869:       695,  680,  675,  218,  127,  127,  127,  356,  356,  356,
  870: 
  871:       356,  356,  356,  813,  347,  348,  348,  348,  348,  348,
  872:       348,  348,  348,  348,  348,  384,  384,  384,  384,  384,
  873:       384,  384,  384,  384,  384,  695,  676,  676,  813,  384,
  874:       384,  384,  384,  384,  475,  475,  475,  475,  475,  475,
  875:       475,  475,  475,  475,  618,  618,  618,  618,  618,  619,
  876:       677,  677,  813,  384,  384,  384,  384,  384,  384,  385,
  877:       385,  385,  385,  385,  385,  385,  385,  385,  385,  703,
  878:       634,  694,  127,  385,  385,  385,  385,  385,  536,  536,
  879:       536,  536,  536,  536,  536,  536,  536,  536,  100,  100,
  880:       100,  100,  634,  218,  634,  634,  734,  384,  384,  384,
  881: 
  882:       384,  384,  384,  399,  416,  400,  400,  400,  400,  400,
  883:       400,  400,  400,  400,  400,  399,  532,  401,  401,  401,
  884:       401,  401,  401,  401,  401,  401,  401,  399,  534,  402,
  885:       402,  402,  402,  402,  403,  400,  400,  400,  400,  405,
  886:       405,  405,  405,  405,  405,  405,  405,  405,  405,  279,
  887:       345,  218,  414,  414,  414,  414,  414,  414,  414,  414,
  888:       414,  414,  347,  634,  105,  101,  413,  413,  413,  413,
  889:       413,  544,  545,  546,  544,  544,  544,  544,  544,  544,
  890:       544,  686,  761,  107,  127,  634,  107,  634,  635,  644,
  891:       413,  413,  413,  413,  413,  413,  345,  218,  415,  415,
  892: 
  893:       415,  415,  415,  415,  415,  415,  415,  415,  416,  345,
  894:       218,  101,  417,  417,  417,  417,  417,  345,  218,  813,
  895:       218,  416,  127,  127,  127,  762,  105,  101,  733,  485,
  896:       676,  485,  561,  564,  101,  566,  417,  417,  417,  417,
  897:       417,  417,  218,  421,  422,  423,  421,  421,  421,  421,
  898:       421,  421,  421,  424,  677,  684,  813,  425,  425,  425,
  899:       425,  425,  494,  494,  494,  494,  494,  494,  494,  494,
  900:       494,  494,  662,  662,  662,  662,  662,  663,  101,  105,
  901:       813,  425,  425,  425,  425,  425,  425,  813,  571,  417,
  902:       417,  417,  417,  417,  417,  417,  417,  417,  417,  446,
  903: 
  904:       701,  449,  449,  449,  449,  449,  450,  447,  447,  447,
  905:       447,  384,  384,  384,  384,  384,  384,  384,  384,  384,
  906:       384,  781,  782,  781,  782,  384,  384,  384,  384,  384,
  907:       345,  218,  549,  549,  549,  549,  549,  549,  685,  575,
  908:       575,  607,  485,  608,  608,  608,  608,  608,  608,  384,
  909:       384,  384,  384,  384,  384,  464,  465,  466,  464,  464,
  910:       464,  464,  464,  464,  464,  553,  553,  553,  553,  553,
  911:       553,  553,  553,  553,  553,  591,  592,  593,  591,  591,
  912:       591,  591,  591,  591,  591,  695,  732,  700,  700,  700,
  913:       644,  101,  399,  532,  400,  400,  400,  400,  400,  400,
  914: 
  915:       400,  400,  400,  400,  399,  597,  400,  400,  400,  400,
  916:       400,  400,  400,  400,  400,  400,  471,  472,  473,  471,
  917:       471,  471,  471,  471,  471,  471,  474,  728,  101,  728,
  918:       475,  475,  475,  475,  475,  543,  543,  543,  543,  543,
  919:       543,  543,  543,  543,  543,  127,  211,  741,  786,  211,
  920:       218,  729,  218,  729,  475,  475,  475,  475,  475,  475,
  921:       476,  416,  479,  479,  479,  479,  479,  480,  477,  477,
  922:       477,  477,  345,  218,  483,  483,  483,  483,  483,  483,
  923:       483,  483,  483,  483,  416,  101,  101,  218,  482,  482,
  924:       482,  482,  482,  532,  813,  595,  595,  595,  595,  595,
  925: 
  926:       595,  169,  169,  169,  218,  534,  597,  688,  759,  689,
  927:       690,  691,  482,  482,  482,  482,  482,  482,  345,  218,
  928:       484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
  929:       485,  316,  760,  316,  486,  486,  486,  486,  486,  599,
  930:       599,  599,  599,  599,  599,  599,  599,  599,  599,  574,
  931:       575,  575,  575,  575,  575,  575,  597,  692,  486,  486,
  932:       486,  486,  486,  486,  218,  490,  491,  492,  490,  490,
  933:       490,  490,  490,  490,  490,  493,  218,  345,  218,  494,
  934:       494,  494,  494,  494,  345,  218,  218,  485,  218,  485,
  935:       813,  218,  169,  169,  169,  534,  551,  485,  532,  551,
  936: 
  937:       759,  813,  551,  494,  494,  494,  494,  494,  494,  813,
  938:       597,  486,  486,  486,  486,  486,  486,  486,  486,  486,
  939:       486,  100,  650,  778,  760,  813,  317,  100,  317,  735,
  940:       100,  100,  735,  100,  100,  100,  127,  127,  127,  127,
  941:       127,  127,  127,  127,  127,  127,  702,  779,  650,  100,
  942:       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
  943:       127,  127,  127,  127,  495,  127,  127,  127,  127,  127,
  944:       127,  127,  101,  127,  100,  100,  100,  100,  100,  100,
  945:       100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
  946:       100,  525,  526,  526,  526,  526,  526,  526,  526,  526,
  947: 
  948:       526,  526,  345,  218,  614,  614,  614,  614,  614,  614,
  949:       447,  650,  447,  532,  551,  617,  617,  617,  617,  617,
  950:       617,  617,  617,  617,  617,  659,  576,  576,  101,  532,
  951:       813,  533,  533,  533,  533,  533,  533,  533,  533,  533,
  952:       533,  534,  659,  695,  813,  535,  535,  535,  535,  535,
  953:       636,  637,  638,  639,  636,  636,  636,  636,  636,  636,
  954:       345,  218,  674,  674,  674,  674,  674,  674,  813,  535,
  955:       535,  535,  535,  535,  535,  539,  540,  541,  539,  539,
  956:       539,  539,  539,  539,  539,  542,  778,  695,  739,  543,
  957:       543,  543,  543,  543,  646,  646,  646,  646,  646,  646,
  958: 
  959:       646,  646,  646,  646,  448,  477,  448,  477,  345,  218,
  960:       779,  575,  575,  543,  543,  543,  543,  543,  543,  813,
  961:       551,  535,  535,  535,  535,  535,  535,  535,  535,  535,
  962:       535,  345,  218,  549,  549,  549,  549,  549,  549,  549,
  963:       549,  549,  549,  485,  728,  681,  813,  548,  548,  548,
  964:       548,  548,  647,  647,  647,  647,  647,  648,  649,  649,
  965:       649,  649,  688,  607,  689,  690,  691,  478,  729,  478,
  966:       813,  548,  548,  548,  548,  548,  548,  345,  218,  550,
  967:       550,  550,  550,  550,  550,  550,  550,  550,  550,  551,
  968:       127,  740,  813,  552,  552,  552,  552,  552,  606,  606,
  969: 
  970:       606,  606,  606,  606,  606,  606,  606,  606,  447,  477,
  971:       447,  477,  694,  608,  607,  608,  813,  552,  552,  552,
  972:       552,  552,  552,  218,  556,  557,  558,  556,  556,  556,
  973:       556,  556,  556,  556,  607,  609,  768,  609,  559,  559,
  974:       559,  559,  559,  532,  534,  657,  657,  657,  657,  657,
  975:       657,  651,  650,  651,  650,  597,  651,  651,  651,  651,
  976:       651,  651,  559,  559,  559,  559,  559,  559,  813,  532,
  977:       552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
  978:       100,  659,  652,  608,  652,  608,  100,  687,  687,  100,
  979:       100,  687,  100,  100,  100,  127,  127,  127,  127,  127,
  980: 
  981:       127,  127,  127,  127,  127,  687,  687,  687,  100,  127,
  982:       127,  127,  127,  127,  127,  127,  560,  127,  127,  127,
  983:       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
  984:       127,  101,  127,  100,  100,  100,  100,  100,  100,  100,
  985:       100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
  986:       574,  577,  577,  577,  577,  577,  578,  575,  575,  575,
  987:       575,  187,  723,  723,  532,  187,  198,  198,  198,  198,
  988:       198,  198,  198,  198,  198,  198,  714,  187,  724,  724,
  989:       198,  198,  198,  583,  198,  198,  198,  198,  198,  198,
  990:       198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
  991: 
  992:       198,  198,  650,  200,  187,  187,  187,  187,  187,  187,
  993:       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
  994:       187,  586,  587,  588,  589,  586,  586,  586,  586,  586,
  995:       586,  661,  661,  661,  661,  661,  661,  661,  661,  661,
  996:       661,  669,  670,  671,  669,  669,  669,  669,  669,  669,
  997:       669,  717,  717,  717,  717,  717,  718,  101,  525,  526,
  998:       526,  526,  526,  526,  526,  526,  526,  526,  526,  707,
  999:       708,  709,  707,  707,  707,  707,  707,  707,  707,  668,
 1000:       668,  668,  668,  668,  668,  668,  668,  668,  668,  757,
 1001:       757,  757,  757,  757,  758,  101,  532,  813,  595,  595,
 1002: 
 1003:       595,  595,  595,  595,  595,  595,  595,  595,  534,  714,
 1004:       470,  643,  594,  594,  594,  594,  594,  532,  532,  712,
 1005:       712,  712,  712,  712,  712,  696,  697,  696,  697,  659,
 1006:       714,  813,  218,  813,  813,  813,  594,  594,  594,  594,
 1007:       594,  594,  532,  551,  596,  596,  596,  596,  596,  596,
 1008:       596,  596,  596,  596,  597,  759,  642,  641,  598,  598,
 1009:       598,  598,  598,  716,  716,  716,  716,  716,  716,  716,
 1010:       716,  716,  716,  688,  640,  689,  690,  691,  651,  760,
 1011:       651,  692,  598,  598,  598,  598,  598,  598,  602,  603,
 1012:       604,  602,  602,  602,  602,  602,  602,  602,  605,  574,
 1013: 
 1014:       574,  127,  606,  606,  606,  606,  606,  736,  737,  738,
 1015:       736,  736,  736,  736,  736,  736,  736,  791,  791,  791,
 1016:       791,  791,  791,  692,  574,  101,  606,  606,  606,  606,
 1017:       606,  606,  813,  630,  598,  598,  598,  598,  598,  598,
 1018:       598,  598,  598,  598,  607,  629,  610,  610,  610,  610,
 1019:       610,  611,  608,  608,  608,  608,  345,  218,  614,  614,
 1020:       614,  614,  614,  614,  614,  614,  614,  614,  551,  101,
 1021:       218,  778,  613,  613,  613,  613,  613,  813,  607,  689,
 1022:       690,  691,  813,  607,  813,  813,  691,  695,  470,  696,
 1023:       696,  696,  696,  696,  696,  779,  613,  613,  613,  613,
 1024: 
 1025:       613,  613,  345,  218,  615,  615,  615,  615,  615,  615,
 1026:       615,  615,  615,  615,  747,  343,  747,  127,  616,  616,
 1027:       616,  616,  616,  748,  764,  748,  764,  692,  765,  797,
 1028:       765,  797,  692,  218,  723,  723,  723,  723,  723,  723,
 1029:       585,  582,  616,  616,  616,  616,  616,  616,  813,  581,
 1030:       616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
 1031:       100,  693,  580,  693,  693,  693,  100,  693,  693,  100,
 1032:       100,  693,  100,  100,  100,  127,  127,  127,  127,  127,
 1033:       127,  127,  127,  127,  127,  693,  693,  693,  100,  127,
 1034:       127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
 1035: 
 1036:       127,  127,  127,  127,  127,  127,  127,  620,  127,  127,
 1037:       127,  101,  127,  100,  100,  100,  100,  100,  100,  100,
 1038:       100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
 1039:       625,  746,  579,  747,  747,  747,  747,  747,  747,  187,
 1040:       798,  574,  798,  187,  198,  198,  198,  198,  198,  198,
 1041:       198,  198,  198,  198,  626,  187,  574,  569,  198,  198,
 1042:       198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
 1043:       198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
 1044:       568,  200,  187,  187,  187,  187,  187,  187,  187,  187,
 1045:       187,  187,  187,  187,  187,  187,  187,  187,  187,  644,
 1046: 
 1047:       476,  645,  645,  645,  645,  645,  645,  645,  645,  645,
 1048:       645,  722,  722,  722,  722,  722,  722,  722,  722,  722,
 1049:       722,  532,  476,  753,  753,  753,  753,  753,  753,  755,
 1050:       476,  470,  755,  714,  343,  279,  755,  101,  650,  524,
 1051:       653,  653,  653,  653,  653,  654,  651,  651,  651,  651,
 1052:       532,  523,  657,  657,  657,  657,  657,  657,  657,  657,
 1053:       657,  657,  597,  522,  519,  518,  656,  656,  656,  656,
 1054:       656,  756,  756,  756,  756,  756,  756,  756,  756,  756,
 1055:       756,  532,  446,  777,  777,  777,  777,  777,  777,  446,
 1056:       656,  656,  656,  656,  656,  656,  532,  446,  658,  658,
 1057: 
 1058:       658,  658,  658,  658,  658,  658,  658,  658,  659,  510,
 1059:       509,  101,  660,  660,  660,  660,  660,  735,  735,  735,
 1060:       735,  735,  735,  735,  735,  735,  735,  763,  101,  764,
 1061:       764,  764,  764,  764,  764,  101,  660,  660,  660,  660,
 1062:       660,  660,  664,  665,  666,  664,  664,  664,  664,  664,
 1063:       664,  664,  667,  101,  476,  476,  668,  668,  668,  668,
 1064:       668,  735,  735,  735,  735,  735,  735,  735,  735,  735,
 1065:       735,  470,  741,  343,  742,  742,  742,  742,  742,  742,
 1066:       668,  668,  668,  668,  668,  668,  813,  279,  660,  660,
 1067:       660,  660,  660,  660,  660,  660,  660,  660,  345,  218,
 1068: 
 1069:       674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
 1070:       101,  279,  463,  462,  673,  673,  673,  673,  673,  772,
 1071:       773,  774,  772,  772,  772,  772,  772,  772,  772,  796,
 1072:       461,  797,  797,  797,  797,  797,  797,  460,  673,  673,
 1073:       673,  673,  673,  673,  695,  459,  698,  698,  698,  698,
 1074:       698,  699,  700,  700,  700,  700,  704,  705,  706,  704,
 1075:       704,  704,  704,  704,  704,  704,  783,  784,  785,  783,
 1076:       783,  783,  783,  783,  783,  783,  791,  791,  791,  791,
 1077:       791,  791,  791,  791,  791,  791,  810,  810,  810,  810,
 1078:       810,  810,  101,  644,  458,  645,  645,  645,  645,  645,
 1079: 
 1080:       645,  645,  645,  645,  645,  792,  792,  792,  792,  792,
 1081:       792,  792,  792,  792,  792,  793,  793,  793,  793,  793,
 1082:       794,  791,  791,  791,  791,  457,  795,  456,  455,  795,
 1083:       454,  101,  532,  795,  712,  712,  712,  712,  712,  712,
 1084:       712,  712,  712,  712,  659,  453,  452,  451,  711,  711,
 1085:       711,  711,  711,  786,  813,  787,  787,  787,  787,  787,
 1086:       787,  791,  791,  791,  791,  791,  791,  791,  791,  791,
 1087:       791,  446,  711,  711,  711,  711,  711,  711,  532,  446,
 1088:       713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
 1089:       714,  101,  374,  441,  715,  715,  715,  715,  715,  791,
 1090: 
 1091:       791,  791,  791,  791,  791,  791,  791,  791,  791,  440,
 1092:       434,  433,  432,  431,  430,  429,  428,  427,  715,  715,
 1093:       715,  715,  715,  715,  719,  720,  721,  719,  719,  719,
 1094:       719,  719,  719,  719,  426,  408,  343,  279,  722,  722,
 1095:       722,  722,  722,  804,  805,  806,  804,  804,  804,  804,
 1096:       804,  804,  804,  404,  279,  125,  807,  807,  807,  807,
 1097:       807,  807,  722,  722,  722,  722,  722,  722,  813,  398,
 1098:       715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
 1099:       218,  725,  725,  725,  725,  725,  726,  723,  723,  723,
 1100:       723,  741,  101,  742,  742,  742,  742,  742,  742,  742,
 1101: 
 1102:       742,  742,  742,  741,  397,  743,  743,  743,  743,  743,
 1103:       743,  743,  743,  743,  743,  741,  396,  744,  744,  744,
 1104:       744,  744,  745,  742,  742,  742,  742,  746,  393,  749,
 1105:       749,  749,  749,  749,  750,  747,  747,  747,  747,  532,
 1106:       392,  753,  753,  753,  753,  753,  753,  753,  753,  753,
 1107:       753,  714,  391,  390,  389,  752,  752,  752,  752,  752,
 1108:       810,  810,  810,  810,  810,  810,  810,  810,  810,  810,
 1109:       388,  315,  315,  315,  374,  376,  374,  375,  374,  752,
 1110:       752,  752,  752,  752,  752,  532,  368,  754,  754,  754,
 1111:       754,  754,  754,  754,  754,  754,  754,  367,  366,  365,
 1112: 
 1113:       364,  755,  755,  755,  755,  755,  804,  804,  804,  804,
 1114:       804,  804,  804,  804,  804,  804,  363,  362,  359,  119,
 1115:       279,  343,  279,  125,  105,  755,  755,  755,  755,  755,
 1116:       755,  763,  333,  766,  766,  766,  766,  766,  767,  764,
 1117:       764,  764,  764,  100,  329,  769,  770,  771,  769,  769,
 1118:       769,  769,  769,  769,  769,  741,  328,  742,  742,  742,
 1119:       742,  742,  742,  742,  742,  742,  742,  741,  327,  742,
 1120:       742,  742,  742,  742,  742,  742,  742,  742,  742,  532,
 1121:       326,  777,  777,  777,  777,  777,  777,  777,  777,  777,
 1122:       777,  786,  325,  787,  787,  787,  787,  787,  787,  787,
 1123: 
 1124:       787,  787,  787,  786,  324,  788,  788,  788,  788,  788,
 1125:       788,  788,  788,  788,  788,  786,  323,  789,  789,  789,
 1126:       789,  789,  790,  787,  787,  787,  787,  796,  322,  799,
 1127:       799,  799,  799,  799,  800,  797,  797,  797,  797,  100,
 1128:       191,  801,  802,  803,  801,  801,  801,  801,  801,  801,
 1129:       801,  786,  315,  787,  787,  787,  787,  787,  787,  787,
 1130:       787,  787,  787,  786,  315,  787,  787,  787,  787,  787,
 1131:       787,  787,  787,  787,  787,  807,  807,  807,  807,  807,
 1132:       807,  807,  807,  807,  807,  811,  811,  811,  811,  811,
 1133:       812,  810,  810,  810,  810,  810,  810,  810,  810,  810,
 1134: 
 1135:       810,  810,  810,  810,  810,  250,  312,  309,  308,  307,
 1136:       306,  101,  801,  801,  801,  801,  801,  801,  801,  801,
 1137:       801,  801,  305,  300,  299,  298,  297,  296,  295,  294,
 1138:       293,  292,  291,  290,  289,  125,  117,  105,  105,  267,
 1139:       266,  265,  264,  259,  258,  257,  813,  188,  101,  808,
 1140:       808,  808,  808,  808,  809,  807,  807,  807,  807,  250,
 1141:       176,  177,  171,  171,  163,  248,  157,  157,  241,  240,
 1142:       239,  238,  237,  234,  233,  232,  231,  230,  225,  224,
 1143:       223,  222,  125,  100,  125,  101,  807,  807,  807,  807,
 1144:       807,  807,  807,  807,  807,  807,  190,  113,  210,  105,
 1145: 
 1146:       103,  102,  101,  205,  204,  203,  202,  198,  177,  171,
 1147:       163,  133,  131,  157,  156,  153,  151,  137,  136,  135,
 1148:       132,  127,  101,   61,   61,   61,   61,   61,   61,   61,
 1149:        61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
 1150:        61,   61,   61,   61,   33,   33,   33,   33,   33,   33,
 1151:        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
 1152:        33,   33,   33,   33,   33,   70,   70,   70,   70,   70,
 1153:        70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
 1154:        70,   70,   70,   70,   70,   70,   77,   77,   77,   77,
 1155:        77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
 1156: 
 1157:        77,   77,   77,   77,   77,   77,   77,  100,  125,  113,
 1158:       103,  102,  101,  813,  100,  813,  100,  100,  100,  100,
 1159:       813,  813,  100,  100,  100,  100,  100,  100,  104,  104,
 1160:       104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
 1161:       104,  104,  104,  104,  104,  104,  104,  104,  104,  108,
 1162:       813,  813,  813,  813,  108,  813,  108,  813,  108,  108,
 1163:       108,  108,  108,  813,  108,  108,  108,  108,  108,  108,
 1164:       112,  813,  813,  813,  813,  813,  813,  112,  813,  112,
 1165:       112,  112,  112,  813,  813,  112,  112,  112,  112,  112,
 1166:       112,  114,  813,  813,  114,  114,  813,  114,  114,  813,
 1167: 
 1168:       114,  114,  114,  114,  813,  813,  114,  114,  114,  114,
 1169:       114,  114,  124,  124,  813,  124,  813,  813,  813,  124,
 1170:       158,  813,  813,  158,  158,  813,  158,  158,  813,  158,
 1171:       158,  158,  158,  813,  813,  158,  158,  158,  158,  158,
 1172:       158,  162,  813,  813,  162,  162,  813,  162,  162,  813,
 1173:       162,  162,  162,  162,  813,  162,  162,  162,  813,  162,
 1174:       162,  162,  170,  813,  813,  170,  813,  813,  170,  170,
 1175:       813,  170,  170,  170,  170,  170,  813,  170,  170,  170,
 1176:       170,  170,  170,  174,  174,  174,  174,  174,  174,  174,
 1177:       174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
 1178: 
 1179:       174,  174,  174,  174,  176,  176,  813,  176,  813,  176,
 1180:       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
 1181:       176,  176,  176,  176,  176,  182,  813,  813,  813,  813,
 1182:       182,  813,  182,  813,  182,  182,  182,  182,  182,  813,
 1183:       182,  182,  182,  182,  182,  182,  186,  813,  813,  813,
 1184:       813,  813,  813,  186,  813,  186,  186,  186,  186,  813,
 1185:       186,  186,  186,  186,  186,  186,  186,  189,  813,  813,
 1186:       189,  189,  813,  189,  189,  813,  189,  189,  189,  189,
 1187:       813,  189,  189,  189,  189,  189,  189,  189,  208,  208,
 1188:       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
 1189: 
 1190:       208,  208,  208,  208,  208,  208,  208,  208,  208,  209,
 1191:       209,  813,  209,  209,  209,  209,  209,  209,  209,  209,
 1192:       209,  209,  209,  209,  209,  209,  209,  209,  209,  209,
 1193:       115,  813,  813,  115,  115,  813,  115,  115,  813,  115,
 1194:       115,  115,  115,  813,  813,  115,  115,  115,  115,  115,
 1195:       115,  124,  124,  813,  124,  813,  813,  813,  124,  217,
 1196:       217,  813,  217,  813,  813,  813,  217,  219,  219,  219,
 1197:       813,  219,  813,  813,  813,  219,  158,  813,  813,  158,
 1198:       158,  813,  158,  158,  813,  158,  158,  158,  158,  813,
 1199:       813,  158,  158,  158,  158,  158,  158,  159,  813,  813,
 1200: 
 1201:       159,  159,  813,  159,  159,  813,  159,  159,  159,  159,
 1202:       813,  813,  159,  159,  159,  159,  159,  159,  162,  813,
 1203:       813,  162,  162,  813,  162,  162,  813,  162,  162,  162,
 1204:       162,  813,  162,  162,  162,  813,  162,  162,  162,  170,
 1205:       813,  813,  170,  813,  813,  170,  170,  813,  170,  170,
 1206:       170,  170,  170,  813,  170,  170,  170,  170,  170,  170,
 1207:       185,  813,  813,  813,  813,  813,  813,  185,  813,  185,
 1208:       185,  185,  185,  813,  813,  185,  185,  185,  185,  185,
 1209:       185,  186,  813,  813,  813,  813,  813,  813,  186,  813,
 1210:       186,  186,  186,  186,  813,  186,  186,  186,  186,  186,
 1211: 
 1212:       186,  186,  189,  813,  813,  189,  189,  813,  189,  189,
 1213:       813,  189,  189,  189,  189,  813,  189,  189,  189,  189,
 1214:       189,  189,  189,  200,  813,  813,  200,  200,  813,  200,
 1215:       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
 1216:       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
 1217:       268,  275,  275,  813,  275,  813,  813,  813,  275,  281,
 1218:       281,  281,  813,  281,  813,  813,  813,  281,  337,  337,
 1219:       813,  337,  813,  813,  813,  337,  338,  338,  813,  338,
 1220:       813,  813,  813,  338,  342,  342,  813,  342,  813,  813,
 1221:       813,  342,  344,  344,  344,  813,  344,  813,  813,  813,
 1222: 
 1223:       344,  200,  813,  813,  200,  200,  813,  200,  404,  404,
 1224:       813,  404,  813,  813,  813,  404,  406,  406,  813,  406,
 1225:       813,  813,  813,  406,  407,  407,  813,  407,  813,  813,
 1226:       813,  407,  409,  409,  409,  813,  409,  813,  813,  813,
 1227:       409,  413,  413,  413,  413,  813,  413,  813,  813,  813,
 1228:       413,  467,  467,  813,  467,  813,  813,  813,  467,  468,
 1229:       468,  813,  468,  813,  813,  813,  468,  469,  469,  813,
 1230:       469,  813,  813,  813,  469,  481,  481,  481,  813,  481,
 1231:       813,  813,  813,  481,  482,  482,  482,  482,  813,  482,
 1232:       813,  813,  813,  482,  208,  208,  208,  208,  208,  208,
 1233: 
 1234:       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
 1235:       208,  208,  208,  208,  208,  530,  530,  813,  530,  813,
 1236:       813,  813,  530,  531,  531,  813,  531,  813,  813,  813,
 1237:       531,  547,  547,  547,  813,  547,  813,  813,  813,  547,
 1238:       548,  548,  548,  548,  813,  548,  813,  813,  813,  548,
 1239:       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
 1240:       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
 1241:       208,  200,  813,  813,  200,  200,  813,  200,  187,  813,
 1242:       813,  813,  187,  187,  813,  187,  187,  187,  813,  813,
 1243:       187,  187,  590,  590,  813,  590,  813,  813,  813,  590,
 1244: 
 1245:       594,  813,  594,  594,  813,  594,  813,  813,  813,  594,
 1246:       612,  612,  612,  813,  612,  813,  813,  813,  612,  613,
 1247:       613,  613,  613,  813,  613,  813,  813,  813,  613,  559,
 1248:       559,  813,  813,  559,  813,  813,  813,  559,  208,  208,
 1249:       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
 1250:       208,  208,  208,  208,  208,  208,  208,  208,  208,  200,
 1251:       813,  813,  200,  200,  813,  200,  187,  813,  813,  813,
 1252:       187,  187,  813,  187,  187,  187,  813,  813,  187,  187,
 1253:       655,  655,  813,  655,  813,  813,  813,  655,  656,  813,
 1254:       656,  656,  813,  656,  813,  813,  813,  656,  672,  672,
 1255: 
 1256:       672,  813,  672,  813,  813,  813,  672,  673,  673,  673,
 1257:       813,  813,  673,  813,  813,  813,  673,  682,  682,  682,
 1258:       682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
 1259:       682,  682,  682,  682,  682,  682,  682,  682,  687,  687,
 1260:       813,  687,  687,  687,  813,  687,  813,  687,  687,  687,
 1261:       687,  813,  813,  687,  687,  687,  687,  687,  687,  693,
 1262:       693,  813,  693,  693,  693,  813,  693,  813,  693,  693,
 1263:       693,  693,  813,  813,  693,  693,  693,  693,  693,  693,
 1264:       200,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1265:       813,  200,  200,  813,  200,  200,  813,  200,  710,  710,
 1266: 
 1267:       813,  710,  813,  813,  813,  710,  711,  813,  711,  711,
 1268:       813,  711,  813,  813,  813,  711,  727,  727,  813,  813,
 1269:       727,  813,  813,  813,  727,  693,  813,  813,  813,  813,
 1270:       813,  813,  693,  813,  693,  693,  693,  693,  813,  813,
 1271:       693,  693,  693,  693,  693,  693,  751,  751,  813,  751,
 1272:       813,  813,  813,  751,  752,  813,  752,  752,  813,  752,
 1273:       813,  813,  813,  752,  775,  775,  813,  775,  813,  813,
 1274:       813,  775,  776,  813,  776,  813,  813,  776,  813,  813,
 1275:       813,  776,  780,  780,  780,  780,  780,  780,  780,  780,
 1276:       780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 1277: 
 1278:       780,  780,  780,   15,  813,  813,  813,  813,  813,  813,
 1279:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1280:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1281:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1282:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1283:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1284:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1285:       813,  813,  813,  813
 1286:     } ;
 1287: 
 1288: static yyconst short int yy_chk[5675] =
 1289:     {   0,
 1290:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1291:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1292:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1293:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1294:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1295:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1296:         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
 1297:         2,  533,    3,   38,    2,   52,    3,   49,   38,   50,
 1298:         4,   36,    3,  533,    4,    3,   11,   11,   11,   11,
 1299:         4,   22,   36,    4,   40,    5,    5,    5,   50,    5,
 1300: 
 1301:         2,    2,   49,   52,    2,    5,   68,   68,   40,    3,
 1302:       807,   22,    2,    3,    3,    2,    3,    4,   54,    5,
 1303:         5,    4,    4,  148,    4,    6,    6,    6,   54,    6,
 1304:       799,   12,   12,   12,   12,    6,   11,   22,    3,   76,
 1305:        76,   72,   46,   27,   27,    5,    4,   27,   27,    6,
 1306:         6,   46,   47,   78,    9,    9,    9,    9,    9,   74,
 1307:        46,  164,  164,    9,    9,    9,   72,   27,   30,   30,
 1308:        30,   30,   30,   30,   79,    6,    7,    7,    7,    9,
 1309:         7,   12,   47,   47,   74,  148,   47,   60,  141,   81,
 1310:        81,   27,   81,  141,   47,   91,   60,   47,   10,   10,
 1311: 
 1312:        10,   10,   10,   78,    9,   60,   91,   10,   10,   10,
 1313:        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
 1314:       161,  798,   79,   10,  179,  161,    7,    7,    7,    7,
 1315:         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
 1316:         7,    7,    7,    7,    7,    8,    8,    8,   10,    8,
 1317:        86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
 1318:        87,   87,   87,   87,   87,   87,   99,  101,  274,  101,
 1319:       101,  101,  179,  101,  101,   99,  149,  101,  106,  106,
 1320:       106,  106,  106,  106,  106,  106,  106,  106,  140,  149,
 1321:       140,  101,  101,  101,  274,    8,    8,    8,    8,    8,
 1322: 
 1323:         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
 1324:         8,    8,    8,    8,   13,   13,   13,   13,   13,   13,
 1325:        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 1326:        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 1327:        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 1328:        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 1329:        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 1330:        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
 1331:        13,   13,   13,   13,   21,  125,  153,  797,   82,  168,
 1332:       168,  270,  153,  178,   21,  784,  125,   21,   21,   21,
 1333: 
 1334:        21,   21,   21,   21,   21,   21,   21,   28,   82,   28,
 1335:        28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
 1336:       152,  180,  180,   28,   28,   28,   28,   28,  151,  270,
 1337:       289,   57,   57,  152,   82,   57,   57,  123,  123,  123,
 1338:       123,  123,  123,  178,  151,   28,  154,   28,   28,   28,
 1339:        28,   28,   28,   34,  289,   57,  154,  500,  246,   34,
 1340:       246,  500,   34,   34,  313,   34,   34,   34,   34,   34,
 1341:        34,   34,   34,   34,   34,   34,   34,   34,   34,   57,
 1342:       313,   34,   34,   34,   34,   34,   34,   34,   34,   34,
 1343:        34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
 1344: 
 1345:        34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
 1346:        34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
 1347:        34,   34,   34,   37,   37,   37,   37,   37,   37,   37,
 1348:        37,   37,   37,   37,  219,  783,  242,   37,   37,   37,
 1349:        37,   37,  245,  150,  236,  219,   37,  107,  107,  107,
 1350:       107,  107,  107,  107,  107,  107,  107,  247,  236,  245,
 1351:       303,   37,   37,   37,   37,   37,   37,   44,   44,   44,
 1352:        44,   44,  247,   44,   44,  311,  311,   44,  121,  121,
 1353:       121,  121,  121,  121,  121,  121,  121,  121,  150,  242,
 1354:       108,   44,   44,   44,   45,  303,   45,   45,   45,   45,
 1355: 
 1356:        45,   45,   45,   45,   45,   45,   48,   66,   66,   66,
 1357:       108,   66,  304,  110,  370,   66,   48,   66,  304,   48,
 1358:        48,   48,   48,   48,   48,   48,   48,   48,   48,  132,
 1359:       243,   66,   66,  110,  132,  243,  108,  281,  132,  171,
 1360:       132,   83,  171,  171,  370,  138,  138,   83,  281,  171,
 1361:        83,  114,  114,   83,   83,  114,  114,   66,  182,  110,
 1362:       780,  302,  175,  175,  171,   48,   67,   83,  291,   83,
 1363:       183,  235,  235,  291,  235,  114,   67,  249,  182,   67,
 1364:        67,   67,   67,   67,   67,   67,   67,   67,   67,  302,
 1365:       183,  249,   83,   83,   84,  138,  777,   84,   84,  114,
 1366: 
 1367:        84,   84,   84,   84,  182,  235,   84,   84,  111,  775,
 1368:       111,  111,  175,  314,  111,  111,  183,  369,  111,  314,
 1369:        84,   84,   84,  122,  122,  122,  122,  122,  122,  122,
 1370:       122,  122,  122,  111,  111,  156,  156,  156,  156,  156,
 1371:       156,  156,  156,  156,  156,   84,   84,   85,  310,  369,
 1372:        85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
 1373:        85,   85,   85,   85,  322,  357,   85,   85,   85,   85,
 1374:        85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
 1375:        85,   85,   85,   85,   85,   85,   85,   85,  322,  357,
 1376:        85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
 1377: 
 1378:        85,   85,   85,   85,   85,   85,   85,   88,  310,   88,
 1379:        88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
 1380:       278,  278,  278,   88,   88,   88,   88,   88,  266,  266,
 1381:       113,  266,  113,  113,  113,  330,  113,  113,  330,  371,
 1382:       113,  196,  196,  196,  196,  196,  196,   88,   88,   88,
 1383:        88,   88,   88,   89,  113,  113,  113,   89,   89,   89,
 1384:        89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
 1385:       453,  371,   89,   89,   89,   89,   89,   89,   89,   89,
 1386:        89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
 1387:        89,   89,   89,   89,  453,   89,   89,   89,   89,   89,
 1388: 
 1389:        89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
 1390:        89,   89,   89,   92,   92,   92,   92,   92,   92,   92,
 1391:        92,   92,   92,   92,  377,  444,  378,   92,   92,   92,
 1392:        92,   92,  203,  344,  158,  158,   92,  203,  158,  158,
 1393:       323,  203,  444,  203,  344,  323,  301,  142,  378,  301,
 1394:       457,   92,   92,   92,   92,   92,   92,   97,  158,   97,
 1395:        97,   97,   97,   97,   97,   97,   97,   97,   97,  116,
 1396:       766,  116,  116,  116,  457,  116,  116,  142,  142,  116,
 1397:       301,  142,  158,  214,  214,  214,  214,  214,  214,  142,
 1398:       372,  377,  142,  116,  116,  116,  117,  117,  117,  117,
 1399: 
 1400:       117,  117,  117,  117,  117,  117,  167,  167,  167,  167,
 1401:       167,  167,  167,  167,  167,  167,  346,  346,  765,  160,
 1402:       379,  160,  160,  160,  372,  160,  160,  764,  346,  160,
 1403:       400,  379,  117,  118,  118,  118,  118,  118,  118,  118,
 1404:       118,  118,  118,  160,  160,  160,  458,  118,  118,  118,
 1405:       118,  118,  191,  191,  191,  191,  191,  191,  191,  191,
 1406:       191,  191,  273,  273,  273,  273,  427,  427,  400,  755,
 1407:       458,  118,  118,  118,  118,  118,  118,  126,  126,  126,
 1408:       126,  126,  126,  126,  126,  126,  126,  126,  312,  498,
 1409:       754,  126,  126,  126,  126,  126,  194,  194,  194,  194,
 1410: 
 1411:       194,  194,  194,  194,  194,  194,  285,  285,  285,  285,
 1412:       285,  285,  752,  498,  312,  126,  126,  126,  126,  126,
 1413:       126,  127,  127,  127,  127,  127,  127,  127,  127,  127,
 1414:       127,  127,  312,  562,  562,  127,  127,  127,  127,  127,
 1415:       184,  409,  184,  184,  373,  186,  184,  184,  380,  373,
 1416:       184,  186,  409,  380,  186,  348,  348,  186,  186,  127,
 1417:       127,  127,  127,  127,  127,  184,  184,  348,  413,  497,
 1418:       428,  186,  428,  186,  188,  497,  188,  188,  188,  413,
 1419:       188,  188,  429,  751,  188,  195,  195,  195,  195,  195,
 1420:       195,  195,  195,  195,  195,  526,  186,  186,  188,  188,
 1421: 
 1422:       188,  189,  615,  615,  189,  189,  429,  189,  189,  189,
 1423:       189,  190,  431,  189,  189,  190,  502,  431,  414,  414,
 1424:       502,  190,  415,  415,  429,  433,  430,  189,  189,  189,
 1425:       414,  430,  526,  430,  415,  190,  190,  210,  210,  210,
 1426:       210,  210,  210,  210,  210,  210,  210,  432,  508,  433,
 1427:       432,  523,  189,  189,  192,  192,  192,  192,  192,  192,
 1428:       192,  192,  192,  192,  749,  508,  523,  433,  192,  192,
 1429:       192,  192,  192,  211,  211,  211,  211,  211,  211,  211,
 1430:       211,  211,  211,  319,  511,  319,  319,  319,  319,  319,
 1431:       319,  439,  192,  192,  192,  192,  192,  192,  197,  748,
 1432: 
 1433:       513,  439,  197,  197,  197,  197,  197,  197,  197,  197,
 1434:       197,  197,  197,  197,  197,  442,  513,  197,  197,  197,
 1435:       197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
 1436:       197,  197,  197,  197,  197,  197,  197,  197,  197,  511,
 1437:       197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
 1438:       197,  197,  197,  197,  197,  197,  197,  197,  198,  198,
 1439:       198,  198,  198,  198,  198,  198,  198,  198,  198,  442,
 1440:       504,  506,  198,  198,  198,  198,  198,  213,  213,  213,
 1441:       213,  213,  213,  213,  213,  213,  213,  354,  354,  354,
 1442:       354,  354,  354,  434,  504,  506,  198,  198,  198,  198,
 1443: 
 1444:       198,  198,  212,  747,  212,  212,  212,  212,  212,  212,
 1445:       212,  212,  212,  212,  248,  454,  737,  434,  248,  514,
 1446:       454,  561,  736,  561,  248,  282,  282,  282,  282,  282,
 1447:       282,  282,  282,  282,  282,  434,  514,  727,  248,  248,
 1448:       212,  215,  443,  215,  215,  215,  215,  215,  215,  215,
 1449:       215,  215,  215,  443,  564,  584,  564,  215,  215,  215,
 1450:       215,  215,  284,  284,  284,  284,  284,  284,  284,  284,
 1451:       284,  284,  423,  423,  423,  423,  423,  423,  571,  584,
 1452:       571,  215,  215,  215,  215,  215,  215,  218,  218,  218,
 1453:       218,  218,  218,  218,  218,  218,  218,  218,  589,  589,
 1454: 
 1455:       589,  218,  218,  218,  218,  218,  315,  315,  315,  315,
 1456:       315,  315,  315,  315,  315,  315,  450,  725,  450,  450,
 1457:       450,  450,  450,  450,  724,  218,  218,  218,  218,  218,
 1458:       218,  220,  220,  220,  220,  220,  220,  220,  220,  220,
 1459:       220,  220,  220,  565,  616,  616,  220,  220,  220,  220,
 1460:       220,  345,  345,  345,  345,  345,  345,  345,  345,  345,
 1461:       345,  466,  466,  466,  466,  466,  466,  565,  623,  623,
 1462:       220,  220,  220,  220,  220,  220,  221,  221,  221,  221,
 1463:       221,  221,  221,  221,  221,  221,  221,  566,  625,  565,
 1464:       221,  221,  221,  221,  221,  347,  347,  347,  347,  347,
 1465: 
 1466:       347,  347,  347,  347,  347,  473,  473,  473,  473,  473,
 1467:       473,  566,  625,  723,  221,  221,  221,  221,  221,  221,
 1468:       222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
 1469:       222,  631,  631,  566,  222,  222,  222,  222,  222,  351,
 1470:       351,  351,  351,  351,  351,  351,  351,  622,  711,  622,
 1471:       403,  351,  403,  403,  403,  403,  403,  403,  222,  222,
 1472:       222,  222,  222,  222,  253,  627,  253,  253,  253,  253,
 1473:       253,  253,  253,  253,  253,  253,  254,  254,  254,  254,
 1474:       254,  254,  254,  254,  254,  254,  254,  710,  403,  627,
 1475:       254,  254,  254,  254,  254,  353,  353,  353,  353,  353,
 1476: 
 1477:       353,  353,  353,  353,  353,  480,  708,  480,  480,  480,
 1478:       480,  480,  480,  707,  254,  254,  254,  254,  254,  254,
 1479:       256,  256,  256,  256,  256,  256,  256,  256,  256,  256,
 1480:       529,  529,  529,  529,  256,  256,  256,  256,  256,  416,
 1481:       416,  416,  416,  416,  416,  416,  416,  416,  416,  492,
 1482:       492,  492,  492,  492,  492,  674,  674,  700,  256,  256,
 1483:       256,  256,  256,  256,  269,  269,  269,  269,  269,  269,
 1484:       269,  269,  269,  269,  417,  417,  420,  420,  420,  420,
 1485:       420,  420,  420,  420,  680,  680,  417,  535,  420,  422,
 1486:       422,  422,  422,  422,  422,  422,  422,  422,  422,  535,
 1487: 
 1488:       269,  277,  277,  277,  277,  277,  277,  277,  277,  277,
 1489:       277,  277,  283,  283,  283,  283,  283,  283,  283,  283,
 1490:       283,  283,  283,  283,  283,  445,  683,  683,  283,  283,
 1491:       283,  283,  283,  570,  570,  445,  446,  446,  446,  446,
 1492:       446,  446,  446,  446,  446,  446,  541,  541,  541,  541,
 1493:       541,  541,  283,  283,  283,  283,  283,  283,  286,  286,
 1494:       286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
 1495:       679,  698,  679,  286,  286,  286,  286,  286,  465,  465,
 1496:       465,  465,  465,  465,  465,  465,  465,  465,  570,  563,
 1497:       697,  624,  620,  481,  563,  620,  624,  286,  286,  286,
 1498: 
 1499:       286,  286,  286,  287,  481,  287,  287,  287,  287,  287,
 1500:       287,  287,  287,  287,  287,  320,  320,  320,  320,  320,
 1501:       320,  320,  320,  320,  320,  696,  621,  640,  643,  320,
 1502:       320,  320,  320,  320,  470,  470,  470,  470,  470,  470,
 1503:       470,  470,  470,  470,  558,  558,  558,  558,  558,  558,
 1504:       621,  640,  643,  320,  320,  320,  320,  320,  320,  321,
 1505:       321,  321,  321,  321,  321,  321,  321,  321,  321,  643,
 1506:       630,  693,  621,  321,  321,  321,  321,  321,  472,  472,
 1507:       472,  472,  472,  472,  472,  472,  472,  472,  648,  648,
 1508:       648,  648,  630,  482,  630,  630,  691,  321,  321,  321,
 1509: 
 1510:       321,  321,  321,  334,  482,  334,  334,  334,  334,  334,
 1511:       334,  334,  334,  334,  334,  335,  595,  335,  335,  335,
 1512:       335,  335,  335,  335,  335,  335,  335,  336,  595,  336,
 1513:       336,  336,  336,  336,  336,  336,  336,  336,  336,  339,
 1514:       339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
 1515:       349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
 1516:       349,  349,  349,  572,  685,  633,  349,  349,  349,  349,
 1517:       349,  476,  476,  476,  476,  476,  476,  476,  476,  476,
 1518:       476,  633,  731,  824,  731,  572,  824,  572,  572,  645,
 1519:       349,  349,  349,  349,  349,  349,  352,  352,  352,  352,
 1520: 
 1521:       352,  352,  352,  352,  352,  352,  352,  352,  352,  483,
 1522:       483,  572,  352,  352,  352,  352,  352,  484,  484,  486,
 1523:       486,  483,  496,  501,  503,  733,  733,  645,  685,  484,
 1524:       676,  486,  496,  501,  686,  503,  352,  352,  352,  352,
 1525:       352,  352,  355,  355,  355,  355,  355,  355,  355,  355,
 1526:       355,  355,  355,  355,  676,  682,  641,  355,  355,  355,
 1527:       355,  355,  485,  485,  485,  485,  485,  485,  485,  485,
 1528:       485,  485,  604,  604,  604,  604,  604,  604,  512,  632,
 1529:       641,  355,  355,  355,  355,  355,  355,  356,  512,  356,
 1530:       356,  356,  356,  356,  356,  356,  356,  356,  356,  383,
 1531: 
 1532:       641,  383,  383,  383,  383,  383,  383,  383,  383,  383,
 1533:       383,  384,  384,  384,  384,  384,  384,  384,  384,  384,
 1534:       384,  762,  762,  781,  781,  384,  384,  384,  384,  384,
 1535:       489,  489,  489,  489,  489,  489,  489,  489,  632,  882,
 1536:       882,  611,  489,  611,  611,  611,  611,  611,  611,  384,
 1537:       384,  384,  384,  384,  384,  399,  399,  399,  399,  399,
 1538:       399,  399,  399,  399,  399,  491,  491,  491,  491,  491,
 1539:       491,  491,  491,  491,  491,  532,  532,  532,  532,  532,
 1540:       532,  532,  532,  532,  532,  639,  681,  639,  639,  639,
 1541:       649,  399,  401,  596,  401,  401,  401,  401,  401,  401,
 1542: 
 1543:       401,  401,  401,  401,  402,  596,  402,  402,  402,  402,
 1544:       402,  402,  402,  402,  402,  402,  408,  408,  408,  408,
 1545:       408,  408,  408,  408,  408,  408,  408,  701,  649,  728,
 1546:       408,  408,  408,  408,  408,  534,  534,  534,  534,  534,
 1547:       534,  534,  534,  534,  534,  675,  836,  742,  787,  836,
 1548:       547,  701,  673,  728,  408,  408,  408,  408,  408,  408,
 1549:       412,  547,  412,  412,  412,  412,  412,  412,  412,  412,
 1550:       412,  412,  418,  418,  418,  418,  418,  418,  418,  418,
 1551:       418,  418,  418,  418,  418,  742,  787,  670,  418,  418,
 1552:       418,  418,  418,  538,  598,  538,  538,  538,  538,  538,
 1553: 
 1554:       538,  827,  827,  827,  669,  538,  598,  634,  739,  634,
 1555:       634,  634,  418,  418,  418,  418,  418,  418,  421,  421,
 1556:       421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
 1557:       421,  853,  739,  853,  421,  421,  421,  421,  421,  540,
 1558:       540,  540,  540,  540,  540,  540,  540,  540,  540,  578,
 1559:       578,  578,  578,  578,  578,  578,  656,  634,  421,  421,
 1560:       421,  421,  421,  421,  424,  424,  424,  424,  424,  424,
 1561:       424,  424,  424,  424,  424,  424,  548,  549,  549,  424,
 1562:       424,  424,  424,  424,  550,  550,  612,  548,  613,  549,
 1563:       552,  552,  844,  844,  844,  655,  550,  612,  657,  613,
 1564: 
 1565:       759,  642,  552,  424,  424,  424,  424,  424,  424,  425,
 1566:       657,  425,  425,  425,  425,  425,  425,  425,  425,  425,
 1567:       425,  426,  653,  768,  759,  642,  854,  426,  854,  916,
 1568:       426,  426,  916,  426,  426,  426,  426,  426,  426,  426,
 1569:       426,  426,  426,  426,  426,  426,  642,  768,  652,  426,
 1570:       426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
 1571:       426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
 1572:       426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
 1573:       426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
 1574:       426,  464,  464,  464,  464,  464,  464,  464,  464,  464,
 1575: 
 1576:       464,  464,  555,  555,  555,  555,  555,  555,  555,  555,
 1577:       865,  651,  865,  658,  555,  557,  557,  557,  557,  557,
 1578:       557,  557,  557,  557,  557,  658,  883,  883,  464,  471,
 1579:       660,  471,  471,  471,  471,  471,  471,  471,  471,  471,
 1580:       471,  471,  660,  637,  702,  471,  471,  471,  471,  471,
 1581:       574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
 1582:       619,  619,  619,  619,  619,  619,  619,  619,  702,  471,
 1583:       471,  471,  471,  471,  471,  474,  474,  474,  474,  474,
 1584:       474,  474,  474,  474,  474,  474,  778,  636,  702,  474,
 1585:       474,  474,  474,  474,  587,  587,  587,  587,  587,  587,
 1586: 
 1587:       587,  587,  587,  587,  866,  870,  866,  870,  614,  614,
 1588:       778,  894,  894,  474,  474,  474,  474,  474,  474,  475,
 1589:       614,  475,  475,  475,  475,  475,  475,  475,  475,  475,
 1590:       475,  487,  487,  487,  487,  487,  487,  487,  487,  487,
 1591:       487,  487,  487,  487,  678,  629,  703,  487,  487,  487,
 1592:       487,  487,  588,  588,  588,  588,  588,  588,  588,  588,
 1593:       588,  588,  635,  610,  635,  635,  635,  871,  678,  871,
 1594:       703,  487,  487,  487,  487,  487,  487,  490,  490,  490,
 1595:       490,  490,  490,  490,  490,  490,  490,  490,  490,  490,
 1596:       678,  703,  740,  490,  490,  490,  490,  490,  597,  597,
 1597: 
 1598:       597,  597,  597,  597,  597,  597,  597,  597,  875,  878,
 1599:       875,  878,  635,  888,  609,  888,  740,  490,  490,  490,
 1600:       490,  490,  490,  493,  493,  493,  493,  493,  493,  493,
 1601:       493,  493,  493,  493,  608,  889,  740,  889,  493,  493,
 1602:       493,  493,  493,  601,  594,  601,  601,  601,  601,  601,
 1603:       601,  897,  592,  897,  654,  601,  654,  654,  654,  654,
 1604:       654,  654,  493,  493,  493,  493,  493,  493,  494,  712,
 1605:       494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
 1606:       495,  712,  898,  901,  898,  901,  495,  692,  692,  495,
 1607:       495,  692,  495,  495,  495,  495,  495,  495,  495,  495,
 1608: 
 1609:       495,  495,  495,  495,  495,  692,  692,  692,  495,  495,
 1610:       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
 1611:       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
 1612:       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
 1613:       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
 1614:       517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
 1615:       517,  522,  913,  913,  713,  522,  522,  522,  522,  522,
 1616:       522,  522,  522,  522,  522,  522,  713,  522,  914,  914,
 1617:       522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
 1618:       522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
 1619: 
 1620:       522,  522,  591,  522,  522,  522,  522,  522,  522,  522,
 1621:       522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
 1622:       522,  525,  525,  525,  525,  525,  525,  525,  525,  525,
 1623:       525,  603,  603,  603,  603,  603,  603,  603,  603,  603,
 1624:       603,  607,  607,  607,  607,  607,  607,  607,  607,  607,
 1625:       607,  666,  666,  666,  666,  666,  666,  525,  527,  527,
 1626:       527,  527,  527,  527,  527,  527,  527,  527,  527,  650,
 1627:       650,  650,  650,  650,  650,  650,  650,  650,  650,  659,
 1628:       659,  659,  659,  659,  659,  659,  659,  659,  659,  721,
 1629:       721,  721,  721,  721,  721,  527,  536,  715,  536,  536,
 1630: 
 1631:       536,  536,  536,  536,  536,  536,  536,  536,  536,  715,
 1632:       590,  582,  536,  536,  536,  536,  536,  663,  753,  663,
 1633:       663,  663,  663,  663,  663,  907,  908,  907,  908,  663,
 1634:       753,  687,  672,  687,  687,  687,  536,  536,  536,  536,
 1635:       536,  536,  539,  672,  539,  539,  539,  539,  539,  539,
 1636:       539,  539,  539,  539,  539,  730,  581,  580,  539,  539,
 1637:       539,  539,  539,  665,  665,  665,  665,  665,  665,  665,
 1638:       665,  665,  665,  688,  579,  688,  688,  688,  910,  730,
 1639:       910,  687,  539,  539,  539,  539,  539,  539,  542,  542,
 1640:       542,  542,  542,  542,  542,  542,  542,  542,  542,  577,
 1641: 
 1642:       576,  730,  542,  542,  542,  542,  542,  695,  695,  695,
 1643:       695,  695,  695,  695,  695,  695,  695,  794,  794,  794,
 1644:       794,  794,  794,  688,  575,  573,  542,  542,  542,  542,
 1645:       542,  542,  543,  569,  543,  543,  543,  543,  543,  543,
 1646:       543,  543,  543,  543,  546,  568,  546,  546,  546,  546,
 1647:       546,  546,  546,  546,  546,  546,  553,  553,  553,  553,
 1648:       553,  553,  553,  553,  553,  553,  553,  553,  553,  567,
 1649:       551,  761,  553,  553,  553,  553,  553,  689,  545,  689,
 1650:       689,  689,  690,  544,  690,  690,  690,  699,  531,  699,
 1651:       699,  699,  699,  699,  699,  761,  553,  553,  553,  553,
 1652: 
 1653:       553,  553,  556,  556,  556,  556,  556,  556,  556,  556,
 1654:       556,  556,  556,  556,  918,  530,  918,  761,  556,  556,
 1655:       556,  556,  556,  919,  923,  919,  923,  689,  924,  929,
 1656:       924,  929,  690,  726,  726,  726,  726,  726,  726,  726,
 1657:       524,  521,  556,  556,  556,  556,  556,  556,  559,  520,
 1658:       559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
 1659:       560,  694,  519,  694,  694,  694,  560,  694,  694,  560,
 1660:       560,  694,  560,  560,  560,  560,  560,  560,  560,  560,
 1661:       560,  560,  560,  560,  560,  694,  694,  694,  560,  560,
 1662:       560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
 1663: 
 1664:       560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
 1665:       560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
 1666:       560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
 1667:       583,  750,  518,  750,  750,  750,  750,  750,  750,  583,
 1668:       930,  516,  930,  583,  583,  583,  583,  583,  583,  583,
 1669:       583,  583,  583,  583,  583,  583,  515,  510,  583,  583,
 1670:       583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
 1671:       583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
 1672:       509,  583,  583,  583,  583,  583,  583,  583,  583,  583,
 1673:       583,  583,  583,  583,  583,  583,  583,  583,  583,  586,
 1674: 
 1675:       479,  586,  586,  586,  586,  586,  586,  586,  586,  586,
 1676:       586,  714,  714,  714,  714,  714,  714,  714,  714,  714,
 1677:       714,  718,  478,  718,  718,  718,  718,  718,  718,  922,
 1678:       477,  469,  922,  718,  468,  467,  922,  586,  593,  463,
 1679:       593,  593,  593,  593,  593,  593,  593,  593,  593,  593,
 1680:       599,  456,  599,  599,  599,  599,  599,  599,  599,  599,
 1681:       599,  599,  599,  455,  452,  451,  599,  599,  599,  599,
 1682:       599,  720,  720,  720,  720,  720,  720,  720,  720,  720,
 1683:       720,  758,  449,  758,  758,  758,  758,  758,  758,  448,
 1684:       599,  599,  599,  599,  599,  599,  602,  447,  602,  602,
 1685: 
 1686:       602,  602,  602,  602,  602,  602,  602,  602,  602,  441,
 1687:       440,  438,  602,  602,  602,  602,  602,  734,  734,  734,
 1688:       734,  734,  734,  734,  734,  734,  734,  767,  437,  767,
 1689:       767,  767,  767,  767,  767,  436,  602,  602,  602,  602,
 1690:       602,  602,  605,  605,  605,  605,  605,  605,  605,  605,
 1691:       605,  605,  605,  435,  411,  410,  605,  605,  605,  605,
 1692:       605,  735,  735,  735,  735,  735,  735,  735,  735,  735,
 1693:       735,  407,  745,  406,  745,  745,  745,  745,  745,  745,
 1694:       605,  605,  605,  605,  605,  605,  606,  405,  606,  606,
 1695:       606,  606,  606,  606,  606,  606,  606,  606,  617,  617,
 1696: 
 1697:       617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
 1698:       745,  404,  398,  397,  617,  617,  617,  617,  617,  746,
 1699:       746,  746,  746,  746,  746,  746,  746,  746,  746,  800,
 1700:       396,  800,  800,  800,  800,  800,  800,  395,  617,  617,
 1701:       617,  617,  617,  617,  638,  394,  638,  638,  638,  638,
 1702:       638,  638,  638,  638,  638,  638,  644,  644,  644,  644,
 1703:       644,  644,  644,  644,  644,  644,  763,  763,  763,  763,
 1704:       763,  763,  763,  763,  763,  763,  772,  772,  772,  772,
 1705:       772,  772,  772,  772,  772,  772,  812,  812,  812,  812,
 1706:       812,  812,  644,  646,  393,  646,  646,  646,  646,  646,
 1707: 
 1708:       646,  646,  646,  646,  646,  773,  773,  773,  773,  773,
 1709:       773,  773,  773,  773,  773,  774,  774,  774,  774,  774,
 1710:       774,  774,  774,  774,  774,  392,  928,  391,  390,  928,
 1711:       389,  646,  661,  928,  661,  661,  661,  661,  661,  661,
 1712:       661,  661,  661,  661,  661,  388,  387,  386,  661,  661,
 1713:       661,  661,  661,  790,  385,  790,  790,  790,  790,  790,
 1714:       790,  792,  792,  792,  792,  792,  792,  792,  792,  792,
 1715:       792,  382,  661,  661,  661,  661,  661,  661,  664,  381,
 1716:       664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
 1717:       664,  790,  376,  375,  664,  664,  664,  664,  664,  793,
 1718: 
 1719:       793,  793,  793,  793,  793,  793,  793,  793,  793,  374,
 1720:       368,  366,  365,  364,  363,  362,  361,  360,  664,  664,
 1721:       664,  664,  664,  664,  667,  667,  667,  667,  667,  667,
 1722:       667,  667,  667,  667,  359,  343,  342,  341,  667,  667,
 1723:       667,  667,  667,  796,  796,  796,  796,  796,  796,  796,
 1724:       796,  796,  796,  340,  338,  337,  809,  809,  809,  809,
 1725:       809,  809,  667,  667,  667,  667,  667,  667,  668,  333,
 1726:       668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
 1727:       671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
 1728:       671,  704,  809,  704,  704,  704,  704,  704,  704,  704,
 1729: 
 1730:       704,  704,  704,  705,  332,  705,  705,  705,  705,  705,
 1731:       705,  705,  705,  705,  705,  706,  331,  706,  706,  706,
 1732:       706,  706,  706,  706,  706,  706,  706,  709,  329,  709,
 1733:       709,  709,  709,  709,  709,  709,  709,  709,  709,  716,
 1734:       328,  716,  716,  716,  716,  716,  716,  716,  716,  716,
 1735:       716,  716,  327,  326,  325,  716,  716,  716,  716,  716,
 1736:       804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
 1737:       324,  318,  317,  316,  309,  308,  307,  306,  305,  716,
 1738:       716,  716,  716,  716,  716,  719,  299,  719,  719,  719,
 1739:       719,  719,  719,  719,  719,  719,  719,  297,  296,  295,
 1740: 
 1741:       294,  719,  719,  719,  719,  719,  805,  805,  805,  805,
 1742:       805,  805,  805,  805,  805,  805,  293,  292,  290,  288,
 1743:       280,  279,  276,  275,  268,  719,  719,  719,  719,  719,
 1744:       719,  738,  267,  738,  738,  738,  738,  738,  738,  738,
 1745:       738,  738,  738,  741,  265,  741,  741,  741,  741,  741,
 1746:       741,  741,  741,  741,  741,  743,  264,  743,  743,  743,
 1747:       743,  743,  743,  743,  743,  743,  743,  744,  263,  744,
 1748:       744,  744,  744,  744,  744,  744,  744,  744,  744,  756,
 1749:       262,  756,  756,  756,  756,  756,  756,  756,  756,  756,
 1750:       756,  769,  261,  769,  769,  769,  769,  769,  769,  769,
 1751: 
 1752:       769,  769,  769,  770,  260,  770,  770,  770,  770,  770,
 1753:       770,  770,  770,  770,  770,  771,  259,  771,  771,  771,
 1754:       771,  771,  771,  771,  771,  771,  771,  785,  258,  785,
 1755:       785,  785,  785,  785,  785,  785,  785,  785,  785,  786,
 1756:       255,  786,  786,  786,  786,  786,  786,  786,  786,  786,
 1757:       786,  788,  252,  788,  788,  788,  788,  788,  788,  788,
 1758:       788,  788,  788,  789,  251,  789,  789,  789,  789,  789,
 1759:       789,  789,  789,  789,  789,  801,  801,  801,  801,  801,
 1760:       801,  801,  801,  801,  801,  806,  806,  806,  806,  806,
 1761:       806,  806,  806,  806,  806,  811,  811,  811,  811,  811,
 1762: 
 1763:       811,  811,  811,  811,  811,  250,  244,  241,  240,  239,
 1764:       238,  801,  802,  802,  802,  802,  802,  802,  802,  802,
 1765:       802,  802,  237,  234,  233,  232,  231,  230,  229,  228,
 1766:       227,  226,  225,  224,  223,  217,  216,  209,  208,  207,
 1767:       206,  205,  204,  202,  201,  199,  193,  185,  802,  803,
 1768:       803,  803,  803,  803,  803,  803,  803,  803,  803,  181,
 1769:       177,  176,  174,  170,  163,  159,  157,  155,  147,  146,
 1770:       145,  144,  143,  137,  136,  135,  134,  133,  131,  130,
 1771:       129,  128,  124,  120,  119,  803,  808,  808,  808,  808,
 1772:       808,  808,  808,  808,  808,  808,  115,  112,  109,  104,
 1773: 
 1774:       103,  102,  100,   96,   95,   94,   93,   90,   77,   70,
 1775:        63,   59,   58,   56,   55,   53,   51,   43,   42,   41,
 1776:        39,   35,  808,  814,  814,  814,  814,  814,  814,  814,
 1777:       814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
 1778:       814,  814,  814,  814,  815,  815,  815,  815,  815,  815,
 1779:       815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
 1780:       815,  815,  815,  815,  815,  816,  816,  816,  816,  816,
 1781:       816,  816,  816,  816,  816,  816,  816,  816,  816,  816,
 1782:       816,  816,  816,  816,  816,  816,  817,  817,  817,  817,
 1783:       817,  817,  817,  817,  817,  817,  817,  817,  817,  817,
 1784: 
 1785:       817,  817,  817,  817,  817,  817,  817,  818,   31,   25,
 1786:        19,   17,   16,   15,  818,    0,  818,  818,  818,  818,
 1787:         0,    0,  818,  818,  818,  818,  818,  818,  819,  819,
 1788:       819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
 1789:       819,  819,  819,  819,  819,  819,  819,  819,  819,  820,
 1790:         0,    0,    0,    0,  820,    0,  820,    0,  820,  820,
 1791:       820,  820,  820,    0,  820,  820,  820,  820,  820,  820,
 1792:       821,    0,    0,    0,    0,    0,    0,  821,    0,  821,
 1793:       821,  821,  821,    0,    0,  821,  821,  821,  821,  821,
 1794:       821,  822,    0,    0,  822,  822,    0,  822,  822,    0,
 1795: 
 1796:       822,  822,  822,  822,    0,    0,  822,  822,  822,  822,
 1797:       822,  822,  823,  823,    0,  823,    0,    0,    0,  823,
 1798:       825,    0,    0,  825,  825,    0,  825,  825,    0,  825,
 1799:       825,  825,  825,    0,    0,  825,  825,  825,  825,  825,
 1800:       825,  826,    0,    0,  826,  826,    0,  826,  826,    0,
 1801:       826,  826,  826,  826,    0,  826,  826,  826,    0,  826,
 1802:       826,  826,  828,    0,    0,  828,    0,    0,  828,  828,
 1803:         0,  828,  828,  828,  828,  828,    0,  828,  828,  828,
 1804:       828,  828,  828,  829,  829,  829,  829,  829,  829,  829,
 1805:       829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
 1806: 
 1807:       829,  829,  829,  829,  830,  830,    0,  830,    0,  830,
 1808:       830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
 1809:       830,  830,  830,  830,  830,  831,    0,    0,    0,    0,
 1810:       831,    0,  831,    0,  831,  831,  831,  831,  831,    0,
 1811:       831,  831,  831,  831,  831,  831,  832,    0,    0,    0,
 1812:         0,    0,    0,  832,    0,  832,  832,  832,  832,    0,
 1813:       832,  832,  832,  832,  832,  832,  832,  833,    0,    0,
 1814:       833,  833,    0,  833,  833,    0,  833,  833,  833,  833,
 1815:         0,  833,  833,  833,  833,  833,  833,  833,  834,  834,
 1816:       834,  834,  834,  834,  834,  834,  834,  834,  834,  834,
 1817: 
 1818:       834,  834,  834,  834,  834,  834,  834,  834,  834,  835,
 1819:       835,    0,  835,  835,  835,  835,  835,  835,  835,  835,
 1820:       835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
 1821:       837,    0,    0,  837,  837,    0,  837,  837,    0,  837,
 1822:       837,  837,  837,    0,    0,  837,  837,  837,  837,  837,
 1823:       837,  838,  838,    0,  838,    0,    0,    0,  838,  839,
 1824:       839,    0,  839,    0,    0,    0,  839,  840,  840,  840,
 1825:         0,  840,    0,    0,    0,  840,  841,    0,    0,  841,
 1826:       841,    0,  841,  841,    0,  841,  841,  841,  841,    0,
 1827:         0,  841,  841,  841,  841,  841,  841,  842,    0,    0,
 1828: 
 1829:       842,  842,    0,  842,  842,    0,  842,  842,  842,  842,
 1830:         0,    0,  842,  842,  842,  842,  842,  842,  843,    0,
 1831:         0,  843,  843,    0,  843,  843,    0,  843,  843,  843,
 1832:       843,    0,  843,  843,  843,    0,  843,  843,  843,  845,
 1833:         0,    0,  845,    0,    0,  845,  845,    0,  845,  845,
 1834:       845,  845,  845,    0,  845,  845,  845,  845,  845,  845,
 1835:       846,    0,    0,    0,    0,    0,    0,  846,    0,  846,
 1836:       846,  846,  846,    0,    0,  846,  846,  846,  846,  846,
 1837:       846,  847,    0,    0,    0,    0,    0,    0,  847,    0,
 1838:       847,  847,  847,  847,    0,  847,  847,  847,  847,  847,
 1839: 
 1840:       847,  847,  848,    0,    0,  848,  848,    0,  848,  848,
 1841:         0,  848,  848,  848,  848,    0,  848,  848,  848,  848,
 1842:       848,  848,  848,  849,    0,    0,  849,  849,    0,  849,
 1843:       850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
 1844:       850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
 1845:       850,  851,  851,    0,  851,    0,    0,    0,  851,  852,
 1846:       852,  852,    0,  852,    0,    0,    0,  852,  855,  855,
 1847:         0,  855,    0,    0,    0,  855,  856,  856,    0,  856,
 1848:         0,    0,    0,  856,  857,  857,    0,  857,    0,    0,
 1849:         0,  857,  858,  858,  858,    0,  858,    0,    0,    0,
 1850: 
 1851:       858,  859,    0,    0,  859,  859,    0,  859,  860,  860,
 1852:         0,  860,    0,    0,    0,  860,  861,  861,    0,  861,
 1853:         0,    0,    0,  861,  862,  862,    0,  862,    0,    0,
 1854:         0,  862,  863,  863,  863,    0,  863,    0,    0,    0,
 1855:       863,  864,  864,  864,  864,    0,  864,    0,    0,    0,
 1856:       864,  867,  867,    0,  867,    0,    0,    0,  867,  868,
 1857:       868,    0,  868,    0,    0,    0,  868,  869,  869,    0,
 1858:       869,    0,    0,    0,  869,  872,  872,  872,    0,  872,
 1859:         0,    0,    0,  872,  873,  873,  873,  873,    0,  873,
 1860:         0,    0,    0,  873,  874,  874,  874,  874,  874,  874,
 1861: 
 1862:       874,  874,  874,  874,  874,  874,  874,  874,  874,  874,
 1863:       874,  874,  874,  874,  874,  876,  876,    0,  876,    0,
 1864:         0,    0,  876,  877,  877,    0,  877,    0,    0,    0,
 1865:       877,  879,  879,  879,    0,  879,    0,    0,    0,  879,
 1866:       880,  880,  880,  880,    0,  880,    0,    0,    0,  880,
 1867:       881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
 1868:       881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
 1869:       881,  884,    0,    0,  884,  884,    0,  884,  885,    0,
 1870:         0,    0,  885,  885,    0,  885,  885,  885,    0,    0,
 1871:       885,  885,  886,  886,    0,  886,    0,    0,    0,  886,
 1872: 
 1873:       887,    0,  887,  887,    0,  887,    0,    0,    0,  887,
 1874:       890,  890,  890,    0,  890,    0,    0,    0,  890,  891,
 1875:       891,  891,  891,    0,  891,    0,    0,    0,  891,  892,
 1876:       892,    0,    0,  892,    0,    0,    0,  892,  893,  893,
 1877:       893,  893,  893,  893,  893,  893,  893,  893,  893,  893,
 1878:       893,  893,  893,  893,  893,  893,  893,  893,  893,  895,
 1879:         0,    0,  895,  895,    0,  895,  896,    0,    0,    0,
 1880:       896,  896,    0,  896,  896,  896,    0,    0,  896,  896,
 1881:       899,  899,    0,  899,    0,    0,    0,  899,  900,    0,
 1882:       900,  900,    0,  900,    0,    0,    0,  900,  902,  902,
 1883: 
 1884:       902,    0,  902,    0,    0,    0,  902,  903,  903,  903,
 1885:         0,    0,  903,    0,    0,    0,  903,  904,  904,  904,
 1886:       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
 1887:       904,  904,  904,  904,  904,  904,  904,  904,  905,  905,
 1888:         0,  905,  905,  905,    0,  905,    0,  905,  905,  905,
 1889:       905,    0,    0,  905,  905,  905,  905,  905,  905,  906,
 1890:       906,    0,  906,  906,  906,    0,  906,    0,  906,  906,
 1891:       906,  906,    0,    0,  906,  906,  906,  906,  906,  906,
 1892:       909,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 1893:         0,  909,  909,    0,  909,  909,    0,  909,  911,  911,
 1894: 
 1895:         0,  911,    0,    0,    0,  911,  912,    0,  912,  912,
 1896:         0,  912,    0,    0,    0,  912,  915,  915,    0,    0,
 1897:       915,    0,    0,    0,  915,  917,    0,    0,    0,    0,
 1898:         0,    0,  917,    0,  917,  917,  917,  917,    0,    0,
 1899:       917,  917,  917,  917,  917,  917,  920,  920,    0,  920,
 1900:         0,    0,    0,  920,  921,    0,  921,  921,    0,  921,
 1901:         0,    0,    0,  921,  925,  925,    0,  925,    0,    0,
 1902:         0,  925,  926,    0,  926,    0,    0,  926,    0,    0,
 1903:         0,  926,  927,  927,  927,  927,  927,  927,  927,  927,
 1904:       927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
 1905: 
 1906:       927,  927,  927,  813,  813,  813,  813,  813,  813,  813,
 1907:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1908:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1909:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1910:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1911:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1912:       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 1913:       813,  813,  813,  813
 1914:     } ;
 1915: 
 1916: static yy_state_type yy_last_accepting_state;
 1917: static char *yy_last_accepting_cpos;
 1918: 
 1919: /* The intent behind this definition is that it'll catch
 1920:  * any uses of REJECT which flex missed.
 1921:  */
 1922: #define REJECT reject_used_but_not_detected
 1923: #define yymore() yymore_used_but_not_detected
 1924: #define YY_MORE_ADJ 0
 1925: #define YY_RESTORE_YY_MORE_OFFSET
 1926: char *yytext;
 1927: #line 1 "toke.l"
 1928: #define INITIAL 0
 1929: #line 2 "toke.l"
 1930: /*
 1931:  * Copyright (c) 1996, 1998-2005, 2007-2013
 1932:  *	Todd C. Miller <Todd.Miller@courtesan.com>
 1933:  *
 1934:  * Permission to use, copy, modify, and distribute this software for any
 1935:  * purpose with or without fee is hereby granted, provided that the above
 1936:  * copyright notice and this permission notice appear in all copies.
 1937:  *
 1938:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 1939:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 1940:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 1941:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 1942:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 1943:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 1944:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 1945:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 1946:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 1947:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 1948:  *
 1949:  * Sponsored in part by the Defense Advanced Research Projects
 1950:  * Agency (DARPA) and Air Force Research Laboratory, Air Force
 1951:  * Materiel Command, USAF, under agreement number F39502-99-1-0512.
 1952:  */
 1953: 
 1954: #include <config.h>
 1955: 
 1956: #include <sys/types.h>
 1957: #include <sys/stat.h>
 1958: #include <stdio.h>
 1959: #ifdef STDC_HEADERS
 1960: # include <stdlib.h>
 1961: # include <stddef.h>
 1962: #else
 1963: # ifdef HAVE_STDLIB_H
 1964: #  include <stdlib.h>
 1965: # endif
 1966: #endif /* STDC_HEADERS */
 1967: #ifdef HAVE_STRING_H
 1968: # include <string.h>
 1969: #endif /* HAVE_STRING_H */
 1970: #ifdef HAVE_STRINGS_H
 1971: # include <strings.h>
 1972: #endif /* HAVE_STRINGS_H */
 1973: #if defined(HAVE_STDINT_H)
 1974: # include <stdint.h>
 1975: #elif defined(HAVE_INTTYPES_H)
 1976: # include <inttypes.h>
 1977: #endif
 1978: #ifdef HAVE_UNISTD_H
 1979: # include <unistd.h>
 1980: #endif /* HAVE_UNISTD_H */
 1981: #if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS)
 1982: # include <malloc.h>
 1983: #endif /* HAVE_MALLOC_H && !STDC_HEADERS */
 1984: #ifdef HAVE_DIRENT_H
 1985: # include <dirent.h>
 1986: # define NAMLEN(dirent) strlen((dirent)->d_name)
 1987: #else
 1988: # define dirent direct
 1989: # define NAMLEN(dirent) (dirent)->d_namlen
 1990: # ifdef HAVE_SYS_NDIR_H
 1991: #  include <sys/ndir.h>
 1992: # endif
 1993: # ifdef HAVE_SYS_DIR_H
 1994: #  include <sys/dir.h>
 1995: # endif
 1996: # ifdef HAVE_NDIR_H
 1997: #  include <ndir.h>
 1998: # endif
 1999: #endif
 2000: #include <errno.h>
 2001: #include <ctype.h>
 2002: #include "sudoers.h"
 2003: #include "parse.h"
 2004: #include "toke.h"
 2005: #include <gram.h>
 2006: #include "lbuf.h"
 2007: #include "sha2.h"
 2008: #include "secure_path.h"
 2009: 
 2010: int sudolineno;			/* current sudoers line number. */
 2011: int last_token;			/* last token that was parsed. */
 2012: char *sudoers;			/* sudoers file being parsed. */
 2013: 
 2014: /* Default sudoers path, mode and owner (may be set via sudo.conf) */
 2015: const char *sudoers_file = _PATH_SUDOERS;
 2016: mode_t sudoers_mode = SUDOERS_MODE;
 2017: uid_t sudoers_uid = SUDOERS_UID;
 2018: gid_t sudoers_gid = SUDOERS_GID;
 2019: 
 2020: static bool continued, sawspace;
 2021: static int prev_state;
 2022: static int digest_len;
 2023: 
 2024: static bool _push_include(char *, bool);
 2025: static bool pop_include(void);
 2026: static char *parse_include(char *);
 2027: 
 2028: int (*trace_print)(const char *msg) = sudoers_trace_print;
 2029: 
 2030: #define LEXRETURN(n)	do {	\
 2031: 	last_token = (n);	\
 2032: 	return (n);		\
 2033: } while (0)
 2034: 
 2035: #define ECHO	ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout))
 2036: 
 2037: #define	push_include(_p)	(_push_include((_p), false))
 2038: #define	push_includedir(_p)	(_push_include((_p), true))
 2039: #define YY_NO_INPUT 1
 2040: #define YY_NO_UNPUT 1
 2041: #define GOTDEFS 1
 2042: 
 2043: #define GOTCMND 2
 2044: 
 2045: #define STARTDEFS 3
 2046: 
 2047: #define INDEFS 4
 2048: 
 2049: #define INSTR 5
 2050: 
 2051: #define WANTDIGEST 6
 2052: 
 2053: #line 2053 "lex.sudoers.c"
 2054: 
 2055: /* Macros after this point can all be overridden by user definitions in
 2056:  * section 1.
 2057:  */
 2058: 
 2059: #ifndef YY_SKIP_YYWRAP
 2060: #ifdef __cplusplus
 2061: extern "C" int yywrap YY_PROTO(( void ));
 2062: #else
 2063: extern int yywrap YY_PROTO(( void ));
 2064: #endif
 2065: #endif
 2066: 
 2067: #ifndef YY_NO_UNPUT
 2068: static void yyunput YY_PROTO(( int c, char *buf_ptr ));
 2069: #endif
 2070: 
 2071: #ifndef yytext_ptr
 2072: static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
 2073: #endif
 2074: 
 2075: #ifdef YY_NEED_STRLEN
 2076: static int yy_flex_strlen YY_PROTO(( yyconst char * ));
 2077: #endif
 2078: 
 2079: #ifndef YY_NO_INPUT
 2080: #ifdef __cplusplus
 2081: static int yyinput YY_PROTO(( void ));
 2082: #else
 2083: static int input YY_PROTO(( void ));
 2084: #endif
 2085: #endif
 2086: 
 2087: #if defined(YY_STACK_USED) && YY_STACK_USED
 2088: static int yy_start_stack_ptr = 0;
 2089: static int yy_start_stack_depth = 0;
 2090: static int *yy_start_stack = 0;
 2091: #ifndef YY_NO_PUSH_STATE
 2092: static void yy_push_state YY_PROTO(( int new_state ));
 2093: #endif
 2094: #ifndef YY_NO_POP_STATE
 2095: static void yy_pop_state YY_PROTO(( void ));
 2096: #endif
 2097: #ifndef YY_NO_TOP_STATE
 2098: static int yy_top_state YY_PROTO(( void ));
 2099: #endif
 2100: 
 2101: #else
 2102: #define YY_NO_PUSH_STATE 1
 2103: #define YY_NO_POP_STATE 1
 2104: #define YY_NO_TOP_STATE 1
 2105: #endif
 2106: 
 2107: #ifdef YY_MALLOC_DECL
 2108: YY_MALLOC_DECL
 2109: #else
 2110: #ifdef __STDC__
 2111: #ifndef __cplusplus
 2112: #include <stdlib.h>
 2113: #endif
 2114: #else
 2115: /* Just try to get by without declaring the routines.  This will fail
 2116:  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
 2117:  * or sizeof(void*) != sizeof(int).
 2118:  */
 2119: #endif
 2120: #endif
 2121: 
 2122: /* Amount of stuff to slurp up with each read. */
 2123: #ifndef YY_READ_BUF_SIZE
 2124: #define YY_READ_BUF_SIZE 8192
 2125: #endif
 2126: 
 2127: /* Copy whatever the last rule matched to the standard output. */
 2128: 
 2129: #ifndef ECHO
 2130: /* This used to be an fputs(), but since the string might contain NUL's,
 2131:  * we now use fwrite().
 2132:  */
 2133: #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
 2134: #endif
 2135: 
 2136: /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 2137:  * is returned in "result".
 2138:  */
 2139: #ifndef YY_INPUT
 2140: #define YY_INPUT(buf,result,max_size) \
 2141: 	if ( yy_current_buffer->yy_is_interactive ) \
 2142: 		{ \
 2143: 		int c = '*', n; \
 2144: 		for ( n = 0; n < max_size && \
 2145: 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 2146: 			buf[n] = (char) c; \
 2147: 		if ( c == '\n' ) \
 2148: 			buf[n++] = (char) c; \
 2149: 		if ( c == EOF && ferror( yyin ) ) \
 2150: 			YY_FATAL_ERROR( "input in flex scanner failed" ); \
 2151: 		result = n; \
 2152: 		} \
 2153: 	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
 2154: 		  && ferror( yyin ) ) \
 2155: 		YY_FATAL_ERROR( "input in flex scanner failed" );
 2156: #endif
 2157: 
 2158: /* No semi-colon after return; correct usage is to write "yyterminate();" -
 2159:  * we don't want an extra ';' after the "return" because that will cause
 2160:  * some compilers to complain about unreachable statements.
 2161:  */
 2162: #ifndef yyterminate
 2163: #define yyterminate() return YY_NULL
 2164: #endif
 2165: 
 2166: /* Number of entries by which start-condition stack grows. */
 2167: #ifndef YY_START_STACK_INCR
 2168: #define YY_START_STACK_INCR 25
 2169: #endif
 2170: 
 2171: /* Report a fatal error. */
 2172: #ifndef YY_FATAL_ERROR
 2173: #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
 2174: #endif
 2175: 
 2176: /* Default declaration of generated scanner - a define so the user can
 2177:  * easily add parameters.
 2178:  */
 2179: #ifndef YY_DECL
 2180: #define YY_DECL int yylex YY_PROTO(( void ))
 2181: #endif
 2182: 
 2183: /* Code executed at the beginning of each rule, after yytext and yyleng
 2184:  * have been set up.
 2185:  */
 2186: #ifndef YY_USER_ACTION
 2187: #define YY_USER_ACTION
 2188: #endif
 2189: 
 2190: /* Code executed at the end of each rule. */
 2191: #ifndef YY_BREAK
 2192: #define YY_BREAK break;
 2193: #endif
 2194: 
 2195: #define YY_RULE_SETUP \
 2196: 	if ( yyleng > 0 ) \
 2197: 		yy_current_buffer->yy_at_bol = \
 2198: 				(yytext[yyleng - 1] == '\n'); \
 2199: 	YY_USER_ACTION
 2200: 
 2201: YY_DECL
 2202: 	{
 2203: 	register yy_state_type yy_current_state;
 2204: 	register char *yy_cp, *yy_bp;
 2205: 	register int yy_act;
 2206: 
 2207: #line 137 "toke.l"
 2208: 
 2209: #line 2209 "lex.sudoers.c"
 2210: 
 2211: 	if ( yy_init )
 2212: 		{
 2213: 		yy_init = 0;
 2214: 
 2215: #ifdef YY_USER_INIT
 2216: 		YY_USER_INIT;
 2217: #endif
 2218: 
 2219: 		if ( ! yy_start )
 2220: 			yy_start = 1;	/* first start state */
 2221: 
 2222: 		if ( ! yyin )
 2223: 			yyin = stdin;
 2224: 
 2225: 		if ( ! yyout )
 2226: 			yyout = stdout;
 2227: 
 2228: 		if ( ! yy_current_buffer )
 2229: 			yy_current_buffer =
 2230: 				yy_create_buffer( yyin, YY_BUF_SIZE );
 2231: 
 2232: 		yy_load_buffer_state();
 2233: 		}
 2234: 
 2235: 	while ( 1 )		/* loops until end-of-file is reached */
 2236: 		{
 2237: 		yy_cp = yy_c_buf_p;
 2238: 
 2239: 		/* Support of yytext. */
 2240: 		*yy_cp = yy_hold_char;
 2241: 
 2242: 		/* yy_bp points to the position in yy_ch_buf of the start of
 2243: 		 * the current run.
 2244: 		 */
 2245: 		yy_bp = yy_cp;
 2246: 
 2247: 		yy_current_state = yy_start;
 2248: 		yy_current_state += YY_AT_BOL();
 2249: yy_match:
 2250: 		do
 2251: 			{
 2252: 			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
 2253: 			if ( yy_accept[yy_current_state] )
 2254: 				{
 2255: 				yy_last_accepting_state = yy_current_state;
 2256: 				yy_last_accepting_cpos = yy_cp;
 2257: 				}
 2258: 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 2259: 				{
 2260: 				yy_current_state = (int) yy_def[yy_current_state];
 2261: 				if ( yy_current_state >= 814 )
 2262: 					yy_c = yy_meta[(unsigned int) yy_c];
 2263: 				}
 2264: 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 2265: 			++yy_cp;
 2266: 			}
 2267: 		while ( yy_base[yy_current_state] != 5604 );
 2268: 
 2269: yy_find_action:
 2270: 		yy_act = yy_accept[yy_current_state];
 2271: 		if ( yy_act == 0 )
 2272: 			{ /* have to back up */
 2273: 			yy_cp = yy_last_accepting_cpos;
 2274: 			yy_current_state = yy_last_accepting_state;
 2275: 			yy_act = yy_accept[yy_current_state];
 2276: 			}
 2277: 
 2278: 		YY_DO_BEFORE_ACTION;
 2279: 
 2280: 
 2281: do_action:	/* This label is used only to access EOF actions. */
 2282: 
 2283: 
 2284: 		switch ( yy_act )
 2285: 	{ /* beginning of action switch */
 2286: 			case 0: /* must back up */
 2287: 			/* undo the effects of YY_DO_BEFORE_ACTION */
 2288: 			*yy_cp = yy_hold_char;
 2289: 			yy_cp = yy_last_accepting_cpos;
 2290: 			yy_current_state = yy_last_accepting_state;
 2291: 			goto yy_find_action;
 2292: 
 2293: case 1:
 2294: YY_RULE_SETUP
 2295: #line 138 "toke.l"
 2296: {
 2297: 			    LEXTRACE(", ");
 2298: 			    LEXRETURN(',');
 2299: 			}			/* return ',' */
 2300: 	YY_BREAK
 2301: case 2:
 2302: YY_RULE_SETUP
 2303: #line 143 "toke.l"
 2304: BEGIN STARTDEFS;
 2305: 	YY_BREAK
 2306: case 3:
 2307: YY_RULE_SETUP
 2308: #line 145 "toke.l"
 2309: {
 2310: 			    BEGIN INDEFS;
 2311: 			    LEXTRACE("DEFVAR ");
 2312: 			    if (!fill(sudoerstext, sudoersleng))
 2313: 				yyterminate();
 2314: 			    LEXRETURN(DEFVAR);
 2315: 			}
 2316: 	YY_BREAK
 2317: 
 2318: case 4:
 2319: YY_RULE_SETUP
 2320: #line 154 "toke.l"
 2321: {
 2322: 			    BEGIN STARTDEFS;
 2323: 			    LEXTRACE(", ");
 2324: 			    LEXRETURN(',');
 2325: 			}			/* return ',' */
 2326: 	YY_BREAK
 2327: case 5:
 2328: YY_RULE_SETUP
 2329: #line 160 "toke.l"
 2330: {
 2331: 			    LEXTRACE("= ");
 2332: 			    LEXRETURN('=');
 2333: 			}			/* return '=' */
 2334: 	YY_BREAK
 2335: case 6:
 2336: YY_RULE_SETUP
 2337: #line 165 "toke.l"
 2338: {
 2339: 			    LEXTRACE("+= ");
 2340: 			    LEXRETURN('+');
 2341: 			}			/* return '+' */
 2342: 	YY_BREAK
 2343: case 7:
 2344: YY_RULE_SETUP
 2345: #line 170 "toke.l"
 2346: {
 2347: 			    LEXTRACE("-= ");
 2348: 			    LEXRETURN('-');
 2349: 			}			/* return '-' */
 2350: 	YY_BREAK
 2351: case 8:
 2352: YY_RULE_SETUP
 2353: #line 175 "toke.l"
 2354: {
 2355: 			    LEXTRACE("BEGINSTR ");
 2356: 			    sudoerslval.string = NULL;
 2357: 			    prev_state = YY_START;
 2358: 			    BEGIN INSTR;
 2359: 			}
 2360: 	YY_BREAK
 2361: case 9:
 2362: YY_RULE_SETUP
 2363: #line 182 "toke.l"
 2364: {
 2365: 			    LEXTRACE("WORD(2) ");
 2366: 			    if (!fill(sudoerstext, sudoersleng))
 2367: 				yyterminate();
 2368: 			    LEXRETURN(WORD);
 2369: 			}
 2370: 	YY_BREAK
 2371: 
 2372: 
 2373: case 10:
 2374: YY_RULE_SETUP
 2375: #line 191 "toke.l"
 2376: {
 2377: 			    /* Line continuation char followed by newline. */
 2378: 			    sudolineno++;
 2379: 			    continued = true;
 2380: 			}
 2381: 	YY_BREAK
 2382: case 11:
 2383: YY_RULE_SETUP
 2384: #line 197 "toke.l"
 2385: {
 2386: 			    LEXTRACE("ENDSTR ");
 2387: 			    BEGIN prev_state;
 2388: 
 2389: 			    if (sudoerslval.string == NULL) {
 2390: 				LEXTRACE("ERROR "); /* empty string */
 2391: 				LEXRETURN(ERROR);
 2392: 			    }
 2393: 			    if (prev_state == INITIAL) {
 2394: 				switch (sudoerslval.string[0]) {
 2395: 				case '%':
 2396: 				    if (sudoerslval.string[1] == '\0' ||
 2397: 					(sudoerslval.string[1] == ':' &&
 2398: 					sudoerslval.string[2] == '\0')) {
 2399: 					LEXTRACE("ERROR "); /* empty group */
 2400: 					LEXRETURN(ERROR);
 2401: 				    }
 2402: 				    LEXTRACE("USERGROUP ");
 2403: 				    LEXRETURN(USERGROUP);
 2404: 				case '+':
 2405: 				    if (sudoerslval.string[1] == '\0') {
 2406: 					LEXTRACE("ERROR "); /* empty netgroup */
 2407: 					LEXRETURN(ERROR);
 2408: 				    }
 2409: 				    LEXTRACE("NETGROUP ");
 2410: 				    LEXRETURN(NETGROUP);
 2411: 				}
 2412: 			    }
 2413: 			    LEXTRACE("WORD(4) ");
 2414: 			    LEXRETURN(WORD);
 2415: 			}
 2416: 	YY_BREAK
 2417: case 12:
 2418: YY_RULE_SETUP
 2419: #line 229 "toke.l"
 2420: {
 2421: 			    LEXTRACE("BACKSLASH ");
 2422: 			    if (!append(sudoerstext, sudoersleng))
 2423: 				yyterminate();
 2424: 			}
 2425: 	YY_BREAK
 2426: case 13:
 2427: YY_RULE_SETUP
 2428: #line 235 "toke.l"
 2429: {
 2430: 			    LEXTRACE("STRBODY ");
 2431: 			    if (!append(sudoerstext, sudoersleng))
 2432: 				yyterminate();
 2433: 			}
 2434: 	YY_BREAK
 2435: 
 2436: 
 2437: case 14:
 2438: YY_RULE_SETUP
 2439: #line 243 "toke.l"
 2440: {
 2441: 			    /* quoted fnmatch glob char, pass verbatim */
 2442: 			    LEXTRACE("QUOTEDCHAR ");
 2443: 			    if (!fill_args(sudoerstext, 2, sawspace))
 2444: 				yyterminate();
 2445: 			    sawspace = false;
 2446: 			}
 2447: 	YY_BREAK
 2448: case 15:
 2449: YY_RULE_SETUP
 2450: #line 251 "toke.l"
 2451: {
 2452: 			    /* quoted sudoers special char, strip backslash */
 2453: 			    LEXTRACE("QUOTEDCHAR ");
 2454: 			    if (!fill_args(sudoerstext + 1, 1, sawspace))
 2455: 				yyterminate();
 2456: 			    sawspace = false;
 2457: 			}
 2458: 	YY_BREAK
 2459: case 16:
 2460: YY_RULE_SETUP
 2461: #line 259 "toke.l"
 2462: {
 2463: 			    BEGIN INITIAL;
 2464: 			    yyless(0);
 2465: 			    LEXRETURN(COMMAND);
 2466: 			}			/* end of command line args */
 2467: 	YY_BREAK
 2468: case 17:
 2469: YY_RULE_SETUP
 2470: #line 265 "toke.l"
 2471: {
 2472: 			    LEXTRACE("ARG ");
 2473: 			    if (!fill_args(sudoerstext, sudoersleng, sawspace))
 2474: 				yyterminate();
 2475: 			    sawspace = false;
 2476: 			}			/* a command line arg */
 2477: 	YY_BREAK
 2478: 
 2479: case 18:
 2480: YY_RULE_SETUP
 2481: #line 273 "toke.l"
 2482: {
 2483: 			    /* Only return DIGEST if the length is correct. */
 2484: 			    if (sudoersleng == digest_len * 2) {
 2485: 				if (!fill(sudoerstext, sudoersleng))
 2486: 				    yyterminate();
 2487: 				BEGIN INITIAL;
 2488: 				LEXTRACE("DIGEST ");
 2489: 				LEXRETURN(DIGEST);
 2490: 			    }
 2491: 			    BEGIN INITIAL;
 2492: 			    yyless(sudoersleng);
 2493: 			} /* hex digest */
 2494: 	YY_BREAK
 2495: case 19:
 2496: YY_RULE_SETUP
 2497: #line 286 "toke.l"
 2498: {
 2499: 			    /* Only return DIGEST if the length is correct. */
 2500: 			    int len;
 2501: 			    if (sudoerstext[sudoersleng - 1] == '=') {
 2502: 				/* use padding */
 2503: 				len = 4 * ((digest_len + 2) / 3);
 2504: 			    } else {
 2505: 				/* no padding */
 2506: 				len = (4 * digest_len + 2) / 3;
 2507: 			    }
 2508: 			    if (sudoersleng == len) {
 2509: 				if (!fill(sudoerstext, sudoersleng))
 2510: 				    yyterminate();
 2511: 				BEGIN INITIAL;
 2512: 				LEXTRACE("DIGEST ");
 2513: 				LEXRETURN(DIGEST);
 2514: 			    }
 2515: 			    BEGIN INITIAL;
 2516: 			    yyless(sudoersleng);
 2517: 			} /* base64 digest */
 2518: 	YY_BREAK
 2519: case 20:
 2520: YY_RULE_SETUP
 2521: #line 307 "toke.l"
 2522: {
 2523: 			    char *path;
 2524: 
 2525: 			    if (continued) {
 2526: 				LEXTRACE("ERROR ");
 2527: 				LEXRETURN(ERROR);
 2528: 			    }
 2529: 
 2530: 			    if ((path = parse_include(sudoerstext)) == NULL)
 2531: 				yyterminate();
 2532: 
 2533: 			    LEXTRACE("INCLUDE\n");
 2534: 
 2535: 			    /* Push current buffer and switch to include file */
 2536: 			    if (!push_include(path))
 2537: 				yyterminate();
 2538: 			}
 2539: 	YY_BREAK
 2540: case 21:
 2541: YY_RULE_SETUP
 2542: #line 325 "toke.l"
 2543: {
 2544: 			    char *path;
 2545: 
 2546: 			    if (continued) {
 2547: 				LEXTRACE("ERROR ");
 2548: 				LEXRETURN(ERROR);
 2549: 			    }
 2550: 
 2551: 			    if ((path = parse_include(sudoerstext)) == NULL)
 2552: 				yyterminate();
 2553: 
 2554: 			    LEXTRACE("INCLUDEDIR\n");
 2555: 
 2556: 			    /*
 2557: 			     * Push current buffer and switch to include file.
 2558: 			     * We simply ignore empty directories.
 2559: 			     */
 2560: 			    if (!push_includedir(path) && parse_error)
 2561: 				yyterminate();
 2562: 			}
 2563: 	YY_BREAK
 2564: case 22:
 2565: YY_RULE_SETUP
 2566: #line 346 "toke.l"
 2567: {
 2568: 			    char deftype;
 2569: 			    int n;
 2570: 
 2571: 			    if (continued) {
 2572: 				LEXTRACE("ERROR ");
 2573: 				LEXRETURN(ERROR);
 2574: 			    }
 2575: 
 2576: 			    for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
 2577: 				continue;
 2578: 			    n += sizeof("Defaults") - 1;
 2579: 			    if ((deftype = sudoerstext[n++]) != '\0') {
 2580: 				while (isblank((unsigned char)sudoerstext[n]))
 2581: 				    n++;
 2582: 			    }
 2583: 			    BEGIN GOTDEFS;
 2584: 			    switch (deftype) {
 2585: 				case ':':
 2586: 				    yyless(n);
 2587: 				    LEXTRACE("DEFAULTS_USER ");
 2588: 				    LEXRETURN(DEFAULTS_USER);
 2589: 				case '>':
 2590: 				    yyless(n);
 2591: 				    LEXTRACE("DEFAULTS_RUNAS ");
 2592: 				    LEXRETURN(DEFAULTS_RUNAS);
 2593: 				case '@':
 2594: 				    yyless(n);
 2595: 				    LEXTRACE("DEFAULTS_HOST ");
 2596: 				    LEXRETURN(DEFAULTS_HOST);
 2597: 				case '!':
 2598: 				    yyless(n);
 2599: 				    LEXTRACE("DEFAULTS_CMND ");
 2600: 				    LEXRETURN(DEFAULTS_CMND);
 2601: 				default:
 2602: 				    LEXTRACE("DEFAULTS ");
 2603: 				    LEXRETURN(DEFAULTS);
 2604: 			    }
 2605: 			}
 2606: 	YY_BREAK
 2607: case 23:
 2608: YY_RULE_SETUP
 2609: #line 386 "toke.l"
 2610: {
 2611: 			    int n;
 2612: 
 2613: 			    if (continued) {
 2614: 				LEXTRACE("ERROR ");
 2615: 				LEXRETURN(ERROR);
 2616: 			    }
 2617: 
 2618: 			    for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
 2619: 				continue;
 2620: 			    switch (sudoerstext[n]) {
 2621: 				case 'H':
 2622: 				    LEXTRACE("HOSTALIAS ");
 2623: 				    LEXRETURN(HOSTALIAS);
 2624: 				case 'C':
 2625: 				    LEXTRACE("CMNDALIAS ");
 2626: 				    LEXRETURN(CMNDALIAS);
 2627: 				case 'U':
 2628: 				    LEXTRACE("USERALIAS ");
 2629: 				    LEXRETURN(USERALIAS);
 2630: 				case 'R':
 2631: 				    LEXTRACE("RUNASALIAS ");
 2632: 				    LEXRETURN(RUNASALIAS);
 2633: 			    }
 2634: 			}
 2635: 	YY_BREAK
 2636: case 24:
 2637: YY_RULE_SETUP
 2638: #line 412 "toke.l"
 2639: {
 2640: 				/* cmnd does not require passwd for this user */
 2641: 			    	LEXTRACE("NOPASSWD ");
 2642: 			    	LEXRETURN(NOPASSWD);
 2643: 			}
 2644: 	YY_BREAK
 2645: case 25:
 2646: YY_RULE_SETUP
 2647: #line 418 "toke.l"
 2648: {
 2649: 				/* cmnd requires passwd for this user */
 2650: 			    	LEXTRACE("PASSWD ");
 2651: 			    	LEXRETURN(PASSWD);
 2652: 			}
 2653: 	YY_BREAK
 2654: case 26:
 2655: YY_RULE_SETUP
 2656: #line 424 "toke.l"
 2657: {
 2658: 			    	LEXTRACE("NOEXEC ");
 2659: 			    	LEXRETURN(NOEXEC);
 2660: 			}
 2661: 	YY_BREAK
 2662: case 27:
 2663: YY_RULE_SETUP
 2664: #line 429 "toke.l"
 2665: {
 2666: 			    	LEXTRACE("EXEC ");
 2667: 			    	LEXRETURN(EXEC);
 2668: 			}
 2669: 	YY_BREAK
 2670: case 28:
 2671: YY_RULE_SETUP
 2672: #line 434 "toke.l"
 2673: {
 2674: 			    	LEXTRACE("SETENV ");
 2675: 			    	LEXRETURN(SETENV);
 2676: 			}
 2677: 	YY_BREAK
 2678: case 29:
 2679: YY_RULE_SETUP
 2680: #line 439 "toke.l"
 2681: {
 2682: 			    	LEXTRACE("NOSETENV ");
 2683: 			    	LEXRETURN(NOSETENV);
 2684: 			}
 2685: 	YY_BREAK
 2686: case 30:
 2687: YY_RULE_SETUP
 2688: #line 444 "toke.l"
 2689: {
 2690: 			    	LEXTRACE("LOG_OUTPUT ");
 2691: 			    	LEXRETURN(LOG_OUTPUT);
 2692: 			}
 2693: 	YY_BREAK
 2694: case 31:
 2695: YY_RULE_SETUP
 2696: #line 449 "toke.l"
 2697: {
 2698: 			    	LEXTRACE("NOLOG_OUTPUT ");
 2699: 			    	LEXRETURN(NOLOG_OUTPUT);
 2700: 			}
 2701: 	YY_BREAK
 2702: case 32:
 2703: YY_RULE_SETUP
 2704: #line 454 "toke.l"
 2705: {
 2706: 			    	LEXTRACE("LOG_INPUT ");
 2707: 			    	LEXRETURN(LOG_INPUT);
 2708: 			}
 2709: 	YY_BREAK
 2710: case 33:
 2711: YY_RULE_SETUP
 2712: #line 459 "toke.l"
 2713: {
 2714: 			    	LEXTRACE("NOLOG_INPUT ");
 2715: 			    	LEXRETURN(NOLOG_INPUT);
 2716: 			}
 2717: 	YY_BREAK
 2718: case 34:
 2719: YY_RULE_SETUP
 2720: #line 464 "toke.l"
 2721: {
 2722: 			    /* empty group or netgroup */
 2723: 			    LEXTRACE("ERROR ");
 2724: 			    LEXRETURN(ERROR);
 2725: 			}
 2726: 	YY_BREAK
 2727: case 35:
 2728: YY_RULE_SETUP
 2729: #line 470 "toke.l"
 2730: {
 2731: 			    /* netgroup */
 2732: 			    if (!fill(sudoerstext, sudoersleng))
 2733: 				yyterminate();
 2734: 			    LEXTRACE("NETGROUP ");
 2735: 			    LEXRETURN(NETGROUP);
 2736: 			}
 2737: 	YY_BREAK
 2738: case 36:
 2739: YY_RULE_SETUP
 2740: #line 478 "toke.l"
 2741: {
 2742: 			    /* group */
 2743: 			    if (!fill(sudoerstext, sudoersleng))
 2744: 				yyterminate();
 2745: 			    LEXTRACE("USERGROUP ");
 2746: 			    LEXRETURN(USERGROUP);
 2747: 			}
 2748: 	YY_BREAK
 2749: case 37:
 2750: YY_RULE_SETUP
 2751: #line 486 "toke.l"
 2752: {
 2753: 			    if (!fill(sudoerstext, sudoersleng))
 2754: 				yyterminate();
 2755: 			    LEXTRACE("NTWKADDR ");
 2756: 			    LEXRETURN(NTWKADDR);
 2757: 			}
 2758: 	YY_BREAK
 2759: case 38:
 2760: YY_RULE_SETUP
 2761: #line 493 "toke.l"
 2762: {
 2763: 			    if (!fill(sudoerstext, sudoersleng))
 2764: 				yyterminate();
 2765: 			    LEXTRACE("NTWKADDR ");
 2766: 			    LEXRETURN(NTWKADDR);
 2767: 			}
 2768: 	YY_BREAK
 2769: case 39:
 2770: YY_RULE_SETUP
 2771: #line 500 "toke.l"
 2772: {
 2773: 			    if (!ipv6_valid(sudoerstext)) {
 2774: 				LEXTRACE("ERROR ");
 2775: 				LEXRETURN(ERROR);
 2776: 			    }
 2777: 			    if (!fill(sudoerstext, sudoersleng))
 2778: 				yyterminate();
 2779: 			    LEXTRACE("NTWKADDR ");
 2780: 			    LEXRETURN(NTWKADDR);
 2781: 			}
 2782: 	YY_BREAK
 2783: case 40:
 2784: YY_RULE_SETUP
 2785: #line 511 "toke.l"
 2786: {
 2787: 			    if (!ipv6_valid(sudoerstext)) {
 2788: 				LEXTRACE("ERROR ");
 2789: 				LEXRETURN(ERROR);
 2790: 			    }
 2791: 			    if (!fill(sudoerstext, sudoersleng))
 2792: 				yyterminate();
 2793: 			    LEXTRACE("NTWKADDR ");
 2794: 			    LEXRETURN(NTWKADDR);
 2795: 			}
 2796: 	YY_BREAK
 2797: case 41:
 2798: YY_RULE_SETUP
 2799: #line 522 "toke.l"
 2800: {
 2801: 			    LEXTRACE("ALL ");
 2802: 			    LEXRETURN(ALL);
 2803: 
 2804: 			}
 2805: 	YY_BREAK
 2806: case 42:
 2807: YY_RULE_SETUP
 2808: #line 528 "toke.l"
 2809: {
 2810: #ifdef HAVE_SELINUX
 2811: 			    LEXTRACE("ROLE ");
 2812: 			    LEXRETURN(ROLE);
 2813: #else
 2814: 			    goto got_alias;
 2815: #endif
 2816: 			}
 2817: 	YY_BREAK
 2818: case 43:
 2819: YY_RULE_SETUP
 2820: #line 537 "toke.l"
 2821: {
 2822: #ifdef HAVE_SELINUX
 2823: 			    LEXTRACE("TYPE ");
 2824: 			    LEXRETURN(TYPE);
 2825: #else
 2826: 			    goto got_alias;
 2827: #endif
 2828: 			}
 2829: 	YY_BREAK
 2830: case 44:
 2831: YY_RULE_SETUP
 2832: #line 545 "toke.l"
 2833: {
 2834: #ifdef HAVE_PRIV_SET
 2835: 			    LEXTRACE("PRIVS ");
 2836: 			    LEXRETURN(PRIVS);
 2837: #else
 2838: 			    goto got_alias;
 2839: #endif
 2840: 			}
 2841: 	YY_BREAK
 2842: case 45:
 2843: YY_RULE_SETUP
 2844: #line 554 "toke.l"
 2845: {
 2846: #ifdef HAVE_PRIV_SET
 2847: 			    LEXTRACE("LIMITPRIVS ");
 2848: 			    LEXRETURN(LIMITPRIVS);
 2849: #else
 2850: 			    goto got_alias;
 2851: #endif
 2852: 			}
 2853: 	YY_BREAK
 2854: case 46:
 2855: YY_RULE_SETUP
 2856: #line 563 "toke.l"
 2857: {
 2858: 			got_alias:
 2859: 			    if (!fill(sudoerstext, sudoersleng))
 2860: 				yyterminate();
 2861: 			    LEXTRACE("ALIAS ");
 2862: 			    LEXRETURN(ALIAS);
 2863: 			}
 2864: 	YY_BREAK
 2865: case 47:
 2866: YY_RULE_SETUP
 2867: #line 571 "toke.l"
 2868: {
 2869: 			    /* XXX - no way to specify digest for command */
 2870: 			    /* no command args allowed for Defaults!/path */
 2871: 			    if (!fill_cmnd(sudoerstext, sudoersleng))
 2872: 				yyterminate();
 2873: 			    LEXTRACE("COMMAND ");
 2874: 			    LEXRETURN(COMMAND);
 2875: 			}
 2876: 	YY_BREAK
 2877: case 48:
 2878: YY_RULE_SETUP
 2879: #line 580 "toke.l"
 2880: {
 2881: 			    digest_len = SHA224_DIGEST_LENGTH;
 2882: 			    BEGIN WANTDIGEST;
 2883: 			    LEXTRACE("SHA224 ");
 2884: 			    LEXRETURN(SHA224);
 2885: 			}
 2886: 	YY_BREAK
 2887: case 49:
 2888: YY_RULE_SETUP
 2889: #line 587 "toke.l"
 2890: {
 2891: 			    digest_len = SHA256_DIGEST_LENGTH;
 2892: 			    BEGIN WANTDIGEST;
 2893: 			    LEXTRACE("SHA256 ");
 2894: 			    LEXRETURN(SHA256);
 2895: 			}
 2896: 	YY_BREAK
 2897: case 50:
 2898: YY_RULE_SETUP
 2899: #line 594 "toke.l"
 2900: {
 2901: 			    digest_len = SHA384_DIGEST_LENGTH;
 2902: 			    BEGIN WANTDIGEST;
 2903: 			    LEXTRACE("SHA384 ");
 2904: 			    LEXRETURN(SHA384);
 2905: 			}
 2906: 	YY_BREAK
 2907: case 51:
 2908: YY_RULE_SETUP
 2909: #line 601 "toke.l"
 2910: {
 2911: 			    digest_len = SHA512_DIGEST_LENGTH;
 2912: 			    BEGIN WANTDIGEST;
 2913: 			    LEXTRACE("SHA512 ");
 2914: 			    LEXRETURN(SHA512);
 2915: 			}
 2916: 	YY_BREAK
 2917: case 52:
 2918: YY_RULE_SETUP
 2919: #line 608 "toke.l"
 2920: {
 2921: 			    BEGIN GOTCMND;
 2922: 			    LEXTRACE("COMMAND ");
 2923: 			    if (!fill_cmnd(sudoerstext, sudoersleng))
 2924: 				yyterminate();
 2925: 			}			/* sudo -e */
 2926: 	YY_BREAK
 2927: case 53:
 2928: YY_RULE_SETUP
 2929: #line 615 "toke.l"
 2930: {
 2931: 			    /* directories can't have args... */
 2932: 			    if (sudoerstext[sudoersleng - 1] == '/') {
 2933: 				LEXTRACE("COMMAND ");
 2934: 				if (!fill_cmnd(sudoerstext, sudoersleng))
 2935: 				    yyterminate();
 2936: 				LEXRETURN(COMMAND);
 2937: 			    } else {
 2938: 				BEGIN GOTCMND;
 2939: 				LEXTRACE("COMMAND ");
 2940: 				if (!fill_cmnd(sudoerstext, sudoersleng))
 2941: 				    yyterminate();
 2942: 			    }
 2943: 			}			/* a pathname */
 2944: 	YY_BREAK
 2945: case 54:
 2946: YY_RULE_SETUP
 2947: #line 630 "toke.l"
 2948: {
 2949: 			    LEXTRACE("BEGINSTR ");
 2950: 			    sudoerslval.string = NULL;
 2951: 			    prev_state = YY_START;
 2952: 			    BEGIN INSTR;
 2953: 			}
 2954: 	YY_BREAK
 2955: case 55:
 2956: YY_RULE_SETUP
 2957: #line 637 "toke.l"
 2958: {
 2959: 			    /* a word */
 2960: 			    if (!fill(sudoerstext, sudoersleng))
 2961: 				yyterminate();
 2962: 			    LEXTRACE("WORD(5) ");
 2963: 			    LEXRETURN(WORD);
 2964: 			}
 2965: 	YY_BREAK
 2966: case 56:
 2967: YY_RULE_SETUP
 2968: #line 645 "toke.l"
 2969: {
 2970: 			    LEXTRACE("( ");
 2971: 			    LEXRETURN('(');
 2972: 			}
 2973: 	YY_BREAK
 2974: case 57:
 2975: YY_RULE_SETUP
 2976: #line 650 "toke.l"
 2977: {
 2978: 			    LEXTRACE(") ");
 2979: 			    LEXRETURN(')');
 2980: 			}
 2981: 	YY_BREAK
 2982: case 58:
 2983: YY_RULE_SETUP
 2984: #line 655 "toke.l"
 2985: {
 2986: 			    LEXTRACE(", ");
 2987: 			    LEXRETURN(',');
 2988: 			}			/* return ',' */
 2989: 	YY_BREAK
 2990: case 59:
 2991: YY_RULE_SETUP
 2992: #line 660 "toke.l"
 2993: {
 2994: 			    LEXTRACE("= ");
 2995: 			    LEXRETURN('=');
 2996: 			}			/* return '=' */
 2997: 	YY_BREAK
 2998: case 60:
 2999: YY_RULE_SETUP
 3000: #line 665 "toke.l"
 3001: {
 3002: 			    LEXTRACE(": ");
 3003: 			    LEXRETURN(':');
 3004: 			}			/* return ':' */
 3005: 	YY_BREAK
 3006: case 61:
 3007: YY_RULE_SETUP
 3008: #line 670 "toke.l"
 3009: {
 3010: 			    if (sudoersleng & 1) {
 3011: 				LEXTRACE("!");
 3012: 				LEXRETURN('!');	/* return '!' */
 3013: 			    }
 3014: 			}
 3015: 	YY_BREAK
 3016: case 62:
 3017: YY_RULE_SETUP
 3018: #line 677 "toke.l"
 3019: {
 3020: 			    if (YY_START == INSTR) {
 3021: 				LEXTRACE("ERROR ");
 3022: 				LEXRETURN(ERROR);	/* line break in string */
 3023: 			    }
 3024: 			    BEGIN INITIAL;
 3025: 			    sudolineno++;
 3026: 			    continued = false;
 3027: 			    LEXTRACE("\n");
 3028: 			    LEXRETURN(COMMENT);
 3029: 			}			/* return newline */
 3030: 	YY_BREAK
 3031: case 63:
 3032: YY_RULE_SETUP
 3033: #line 689 "toke.l"
 3034: {			/* throw away space/tabs */
 3035: 			    sawspace = true;	/* but remember for fill_args */
 3036: 			}
 3037: 	YY_BREAK
 3038: case 64:
 3039: YY_RULE_SETUP
 3040: #line 693 "toke.l"
 3041: {
 3042: 			    sawspace = true;	/* remember for fill_args */
 3043: 			    sudolineno++;
 3044: 			    continued = true;
 3045: 			}			/* throw away EOL after \ */
 3046: 	YY_BREAK
 3047: case 65:
 3048: YY_RULE_SETUP
 3049: #line 699 "toke.l"
 3050: {
 3051: 			    if (sudoerstext[sudoersleng - 1] == '\n') {
 3052: 				/* comment ending in a newline */
 3053: 				BEGIN INITIAL;
 3054: 				sudolineno++;
 3055: 				continued = false;
 3056: 			    } else if (!feof(yyin)) {
 3057: 				LEXTRACE("ERROR ");
 3058: 				LEXRETURN(ERROR);
 3059: 			    }
 3060: 			    LEXTRACE("#\n");
 3061: 			    LEXRETURN(COMMENT);
 3062: 			}			/* comment, not uid/gid */
 3063: 	YY_BREAK
 3064: case 66:
 3065: YY_RULE_SETUP
 3066: #line 713 "toke.l"
 3067: {
 3068: 			    LEXTRACE("ERROR ");
 3069: 			    LEXRETURN(ERROR);
 3070: 			}	/* parse error */
 3071: 	YY_BREAK
 3072: case YY_STATE_EOF(INITIAL):
 3073: case YY_STATE_EOF(GOTDEFS):
 3074: case YY_STATE_EOF(GOTCMND):
 3075: case YY_STATE_EOF(STARTDEFS):
 3076: case YY_STATE_EOF(INDEFS):
 3077: case YY_STATE_EOF(INSTR):
 3078: case YY_STATE_EOF(WANTDIGEST):
 3079: #line 718 "toke.l"
 3080: {
 3081: 			    if (YY_START != INITIAL) {
 3082: 			    	BEGIN INITIAL;
 3083: 				LEXTRACE("ERROR ");
 3084: 				LEXRETURN(ERROR);
 3085: 			    }
 3086: 			    if (!pop_include())
 3087: 				yyterminate();
 3088: 			}
 3089: 	YY_BREAK
 3090: case 67:
 3091: YY_RULE_SETUP
 3092: #line 728 "toke.l"
 3093: ECHO;
 3094: 	YY_BREAK
 3095: #line 3095 "lex.sudoers.c"
 3096: 
 3097: 	case YY_END_OF_BUFFER:
 3098: 		{
 3099: 		/* Amount of text matched not including the EOB char. */
 3100: 		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
 3101: 
 3102: 		/* Undo the effects of YY_DO_BEFORE_ACTION. */
 3103: 		*yy_cp = yy_hold_char;
 3104: 		YY_RESTORE_YY_MORE_OFFSET
 3105: 
 3106: 		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
 3107: 			{
 3108: 			/* We're scanning a new file or input source.  It's
 3109: 			 * possible that this happened because the user
 3110: 			 * just pointed yyin at a new source and called
 3111: 			 * yylex().  If so, then we have to assure
 3112: 			 * consistency between yy_current_buffer and our
 3113: 			 * globals.  Here is the right place to do so, because
 3114: 			 * this is the first action (other than possibly a
 3115: 			 * back-up) that will match for the new input source.
 3116: 			 */
 3117: 			yy_n_chars = yy_current_buffer->yy_n_chars;
 3118: 			yy_current_buffer->yy_input_file = yyin;
 3119: 			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
 3120: 			}
 3121: 
 3122: 		/* Note that here we test for yy_c_buf_p "<=" to the position
 3123: 		 * of the first EOB in the buffer, since yy_c_buf_p will
 3124: 		 * already have been incremented past the NUL character
 3125: 		 * (since all states make transitions on EOB to the
 3126: 		 * end-of-buffer state).  Contrast this with the test
 3127: 		 * in input().
 3128: 		 */
 3129: 		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
 3130: 			{ /* This was really a NUL. */
 3131: 			yy_state_type yy_next_state;
 3132: 
 3133: 			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
 3134: 
 3135: 			yy_current_state = yy_get_previous_state();
 3136: 
 3137: 			/* Okay, we're now positioned to make the NUL
 3138: 			 * transition.  We couldn't have
 3139: 			 * yy_get_previous_state() go ahead and do it
 3140: 			 * for us because it doesn't know how to deal
 3141: 			 * with the possibility of jamming (and we don't
 3142: 			 * want to build jamming into it because then it
 3143: 			 * will run more slowly).
 3144: 			 */
 3145: 
 3146: 			yy_next_state = yy_try_NUL_trans( yy_current_state );
 3147: 
 3148: 			yy_bp = yytext_ptr + YY_MORE_ADJ;
 3149: 
 3150: 			if ( yy_next_state )
 3151: 				{
 3152: 				/* Consume the NUL. */
 3153: 				yy_cp = ++yy_c_buf_p;
 3154: 				yy_current_state = yy_next_state;
 3155: 				goto yy_match;
 3156: 				}
 3157: 
 3158: 			else
 3159: 				{
 3160: 				yy_cp = yy_c_buf_p;
 3161: 				goto yy_find_action;
 3162: 				}
 3163: 			}
 3164: 
 3165: 		else switch ( yy_get_next_buffer() )
 3166: 			{
 3167: 			case EOB_ACT_END_OF_FILE:
 3168: 				{
 3169: 				yy_did_buffer_switch_on_eof = 0;
 3170: 
 3171: 				if ( yywrap() )
 3172: 					{
 3173: 					/* Note: because we've taken care in
 3174: 					 * yy_get_next_buffer() to have set up
 3175: 					 * yytext, we can now set up
 3176: 					 * yy_c_buf_p so that if some total
 3177: 					 * hoser (like flex itself) wants to
 3178: 					 * call the scanner after we return the
 3179: 					 * YY_NULL, it'll still work - another
 3180: 					 * YY_NULL will get returned.
 3181: 					 */
 3182: 					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
 3183: 
 3184: 					yy_act = YY_STATE_EOF(YY_START);
 3185: 					goto do_action;
 3186: 					}
 3187: 
 3188: 				else
 3189: 					{
 3190: 					if ( ! yy_did_buffer_switch_on_eof )
 3191: 						YY_NEW_FILE;
 3192: 					}
 3193: 				break;
 3194: 				}
 3195: 
 3196: 			case EOB_ACT_CONTINUE_SCAN:
 3197: 				yy_c_buf_p =
 3198: 					yytext_ptr + yy_amount_of_matched_text;
 3199: 
 3200: 				yy_current_state = yy_get_previous_state();
 3201: 
 3202: 				yy_cp = yy_c_buf_p;
 3203: 				yy_bp = yytext_ptr + YY_MORE_ADJ;
 3204: 				goto yy_match;
 3205: 
 3206: 			case EOB_ACT_LAST_MATCH:
 3207: 				yy_c_buf_p =
 3208: 				&yy_current_buffer->yy_ch_buf[yy_n_chars];
 3209: 
 3210: 				yy_current_state = yy_get_previous_state();
 3211: 
 3212: 				yy_cp = yy_c_buf_p;
 3213: 				yy_bp = yytext_ptr + YY_MORE_ADJ;
 3214: 				goto yy_find_action;
 3215: 			}
 3216: 		break;
 3217: 		}
 3218: 
 3219: 	default:
 3220: 		YY_FATAL_ERROR(
 3221: 			"fatal flex scanner internal error--no action found" );
 3222: 	} /* end of action switch */
 3223: 		} /* end of scanning one token */
 3224: 	} /* end of yylex */
 3225: 
 3226: 
 3227: /* yy_get_next_buffer - try to read in a new buffer
 3228:  *
 3229:  * Returns a code representing an action:
 3230:  *	EOB_ACT_LAST_MATCH -
 3231:  *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 3232:  *	EOB_ACT_END_OF_FILE - end of file
 3233:  */
 3234: 
 3235: static int yy_get_next_buffer YY_PROTO(( void ))
 3236: 	{
 3237: 	register char *dest = yy_current_buffer->yy_ch_buf;
 3238: 	register char *source = yytext_ptr;
 3239: 	register int number_to_move, i;
 3240: 	int ret_val;
 3241: 
 3242: 	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
 3243: 		YY_FATAL_ERROR(
 3244: 		"fatal flex scanner internal error--end of buffer missed" );
 3245: 
 3246: 	if ( yy_current_buffer->yy_fill_buffer == 0 )
 3247: 		{ /* Don't try to fill the buffer, so this is an EOF. */
 3248: 		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
 3249: 			{
 3250: 			/* We matched a single character, the EOB, so
 3251: 			 * treat this as a final EOF.
 3252: 			 */
 3253: 			return EOB_ACT_END_OF_FILE;
 3254: 			}
 3255: 
 3256: 		else
 3257: 			{
 3258: 			/* We matched some text prior to the EOB, first
 3259: 			 * process it.
 3260: 			 */
 3261: 			return EOB_ACT_LAST_MATCH;
 3262: 			}
 3263: 		}
 3264: 
 3265: 	/* Try to read more data. */
 3266: 
 3267: 	/* First move last chars to start of buffer. */
 3268: 	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
 3269: 
 3270: 	for ( i = 0; i < number_to_move; ++i )
 3271: 		*(dest++) = *(source++);
 3272: 
 3273: 	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
 3274: 		/* don't do the read, it's not guaranteed to return an EOF,
 3275: 		 * just force an EOF
 3276: 		 */
 3277: 		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
 3278: 
 3279: 	else
 3280: 		{
 3281: 		int num_to_read =
 3282: 			yy_current_buffer->yy_buf_size - number_to_move - 1;
 3283: 
 3284: 		while ( num_to_read <= 0 )
 3285: 			{ /* Not enough room in the buffer - grow it. */
 3286: #ifdef YY_USES_REJECT
 3287: 			YY_FATAL_ERROR(
 3288: "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
 3289: #else
 3290: 
 3291: 			/* just a shorter name for the current buffer */
 3292: 			YY_BUFFER_STATE b = yy_current_buffer;
 3293: 
 3294: 			int yy_c_buf_p_offset =
 3295: 				(int) (yy_c_buf_p - b->yy_ch_buf);
 3296: 
 3297: 			if ( b->yy_is_our_buffer )
 3298: 				{
 3299: 				int new_size = b->yy_buf_size * 2;
 3300: 
 3301: 				if ( new_size <= 0 )
 3302: 					b->yy_buf_size += b->yy_buf_size / 8;
 3303: 				else
 3304: 					b->yy_buf_size *= 2;
 3305: 
 3306: 				b->yy_ch_buf = (char *)
 3307: 					/* Include room in for 2 EOB chars. */
 3308: 					yy_flex_realloc( (void *) b->yy_ch_buf,
 3309: 							 b->yy_buf_size + 2 );
 3310: 				}
 3311: 			else
 3312: 				/* Can't grow it, we don't own it. */
 3313: 				b->yy_ch_buf = 0;
 3314: 
 3315: 			if ( ! b->yy_ch_buf )
 3316: 				YY_FATAL_ERROR(
 3317: 				"fatal error - scanner input buffer overflow" );
 3318: 
 3319: 			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
 3320: 
 3321: 			num_to_read = yy_current_buffer->yy_buf_size -
 3322: 						number_to_move - 1;
 3323: #endif
 3324: 			}
 3325: 
 3326: 		if ( num_to_read > YY_READ_BUF_SIZE )
 3327: 			num_to_read = YY_READ_BUF_SIZE;
 3328: 
 3329: 		/* Read in more data. */
 3330: 		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
 3331: 			yy_n_chars, num_to_read );
 3332: 
 3333: 		yy_current_buffer->yy_n_chars = yy_n_chars;
 3334: 		}
 3335: 
 3336: 	if ( yy_n_chars == 0 )
 3337: 		{
 3338: 		if ( number_to_move == YY_MORE_ADJ )
 3339: 			{
 3340: 			ret_val = EOB_ACT_END_OF_FILE;
 3341: 			yyrestart( yyin );
 3342: 			}
 3343: 
 3344: 		else
 3345: 			{
 3346: 			ret_val = EOB_ACT_LAST_MATCH;
 3347: 			yy_current_buffer->yy_buffer_status =
 3348: 				YY_BUFFER_EOF_PENDING;
 3349: 			}
 3350: 		}
 3351: 
 3352: 	else
 3353: 		ret_val = EOB_ACT_CONTINUE_SCAN;
 3354: 
 3355: 	yy_n_chars += number_to_move;
 3356: 	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
 3357: 	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
 3358: 
 3359: 	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
 3360: 
 3361: 	return ret_val;
 3362: 	}
 3363: 
 3364: 
 3365: /* yy_get_previous_state - get the state just before the EOB char was reached */
 3366: 
 3367: static yy_state_type yy_get_previous_state YY_PROTO(( void ))
 3368: 	{
 3369: 	register yy_state_type yy_current_state;
 3370: 	register char *yy_cp;
 3371: 
 3372: 	yy_current_state = yy_start;
 3373: 	yy_current_state += YY_AT_BOL();
 3374: 
 3375: 	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
 3376: 		{
 3377: 		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
 3378: 		if ( yy_accept[yy_current_state] )
 3379: 			{
 3380: 			yy_last_accepting_state = yy_current_state;
 3381: 			yy_last_accepting_cpos = yy_cp;
 3382: 			}
 3383: 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 3384: 			{
 3385: 			yy_current_state = (int) yy_def[yy_current_state];
 3386: 			if ( yy_current_state >= 814 )
 3387: 				yy_c = yy_meta[(unsigned int) yy_c];
 3388: 			}
 3389: 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 3390: 		}
 3391: 
 3392: 	return yy_current_state;
 3393: 	}
 3394: 
 3395: 
 3396: /* yy_try_NUL_trans - try to make a transition on the NUL character
 3397:  *
 3398:  * synopsis
 3399:  *	next_state = yy_try_NUL_trans( current_state );
 3400:  */
 3401: 
 3402: #ifdef YY_USE_PROTOS
 3403: static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
 3404: #else
 3405: static yy_state_type yy_try_NUL_trans( yy_current_state )
 3406: yy_state_type yy_current_state;
 3407: #endif
 3408: 	{
 3409: 	register int yy_is_jam;
 3410: 	register char *yy_cp = yy_c_buf_p;
 3411: 
 3412: 	register YY_CHAR yy_c = 1;
 3413: 	if ( yy_accept[yy_current_state] )
 3414: 		{
 3415: 		yy_last_accepting_state = yy_current_state;
 3416: 		yy_last_accepting_cpos = yy_cp;
 3417: 		}
 3418: 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 3419: 		{
 3420: 		yy_current_state = (int) yy_def[yy_current_state];
 3421: 		if ( yy_current_state >= 814 )
 3422: 			yy_c = yy_meta[(unsigned int) yy_c];
 3423: 		}
 3424: 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 3425: 	yy_is_jam = (yy_current_state == 813);
 3426: 
 3427: 	return yy_is_jam ? 0 : yy_current_state;
 3428: 	}
 3429: 
 3430: 
 3431: #ifndef YY_NO_UNPUT
 3432: #ifdef YY_USE_PROTOS
 3433: static void yyunput( int c, register char *yy_bp )
 3434: #else
 3435: static void yyunput( c, yy_bp )
 3436: int c;
 3437: register char *yy_bp;
 3438: #endif
 3439: 	{
 3440: 	register char *yy_cp = yy_c_buf_p;
 3441: 
 3442: 	/* undo effects of setting up yytext */
 3443: 	*yy_cp = yy_hold_char;
 3444: 
 3445: 	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
 3446: 		{ /* need to shift things up to make room */
 3447: 		/* +2 for EOB chars. */
 3448: 		register int number_to_move = yy_n_chars + 2;
 3449: 		register char *dest = &yy_current_buffer->yy_ch_buf[
 3450: 					yy_current_buffer->yy_buf_size + 2];
 3451: 		register char *source =
 3452: 				&yy_current_buffer->yy_ch_buf[number_to_move];
 3453: 
 3454: 		while ( source > yy_current_buffer->yy_ch_buf )
 3455: 			*--dest = *--source;
 3456: 
 3457: 		yy_cp += (int) (dest - source);
 3458: 		yy_bp += (int) (dest - source);
 3459: 		yy_current_buffer->yy_n_chars =
 3460: 			yy_n_chars = yy_current_buffer->yy_buf_size;
 3461: 
 3462: 		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
 3463: 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
 3464: 		}
 3465: 
 3466: 	*--yy_cp = (char) c;
 3467: 
 3468: 
 3469: 	yytext_ptr = yy_bp;
 3470: 	yy_hold_char = *yy_cp;
 3471: 	yy_c_buf_p = yy_cp;
 3472: 	}
 3473: #endif	/* ifndef YY_NO_UNPUT */
 3474: 
 3475: 
 3476: #ifndef YY_NO_INPUT
 3477: #ifdef __cplusplus
 3478: static int yyinput YY_PROTO(( void ))
 3479: #else
 3480: static int input YY_PROTO(( void ))
 3481: #endif
 3482: 	{
 3483: 	int c;
 3484: 
 3485: 	*yy_c_buf_p = yy_hold_char;
 3486: 
 3487: 	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
 3488: 		{
 3489: 		/* yy_c_buf_p now points to the character we want to return.
 3490: 		 * If this occurs *before* the EOB characters, then it's a
 3491: 		 * valid NUL; if not, then we've hit the end of the buffer.
 3492: 		 */
 3493: 		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
 3494: 			/* This was really a NUL. */
 3495: 			*yy_c_buf_p = '\0';
 3496: 
 3497: 		else
 3498: 			{ /* need more input */
 3499: 			int offset = yy_c_buf_p - yytext_ptr;
 3500: 			++yy_c_buf_p;
 3501: 
 3502: 			switch ( yy_get_next_buffer() )
 3503: 				{
 3504: 				case EOB_ACT_LAST_MATCH:
 3505: 					/* This happens because yy_g_n_b()
 3506: 					 * sees that we've accumulated a
 3507: 					 * token and flags that we need to
 3508: 					 * try matching the token before
 3509: 					 * proceeding.  But for input(),
 3510: 					 * there's no matching to consider.
 3511: 					 * So convert the EOB_ACT_LAST_MATCH
 3512: 					 * to EOB_ACT_END_OF_FILE.
 3513: 					 */
 3514: 
 3515: 					/* Reset buffer status. */
 3516: 					yyrestart( yyin );
 3517: 
 3518: 					/* fall through */
 3519: 
 3520: 				case EOB_ACT_END_OF_FILE:
 3521: 					{
 3522: 					if ( yywrap() )
 3523: 						return EOF;
 3524: 
 3525: 					if ( ! yy_did_buffer_switch_on_eof )
 3526: 						YY_NEW_FILE;
 3527: #ifdef __cplusplus
 3528: 					return yyinput();
 3529: #else
 3530: 					return input();
 3531: #endif
 3532: 					}
 3533: 
 3534: 				case EOB_ACT_CONTINUE_SCAN:
 3535: 					yy_c_buf_p = yytext_ptr + offset;
 3536: 					break;
 3537: 				}
 3538: 			}
 3539: 		}
 3540: 
 3541: 	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
 3542: 	*yy_c_buf_p = '\0';	/* preserve yytext */
 3543: 	yy_hold_char = *++yy_c_buf_p;
 3544: 
 3545: 	yy_current_buffer->yy_at_bol = (c == '\n');
 3546: 
 3547: 	return c;
 3548: 	}
 3549: #endif	/* ifndef YY_NO_INPUT */
 3550: 
 3551: 
 3552: #ifdef YY_USE_PROTOS
 3553: void yyrestart( FILE *input_file )
 3554: #else
 3555: void yyrestart( input_file )
 3556: FILE *input_file;
 3557: #endif
 3558: 	{
 3559: 	if ( ! yy_current_buffer )
 3560: 		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
 3561: 
 3562: 	yy_init_buffer( yy_current_buffer, input_file );
 3563: 	yy_load_buffer_state();
 3564: 	}
 3565: 
 3566: 
 3567: #ifdef YY_USE_PROTOS
 3568: void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
 3569: #else
 3570: void yy_switch_to_buffer( new_buffer )
 3571: YY_BUFFER_STATE new_buffer;
 3572: #endif
 3573: 	{
 3574: 	if ( yy_current_buffer == new_buffer )
 3575: 		return;
 3576: 
 3577: 	if ( yy_current_buffer )
 3578: 		{
 3579: 		/* Flush out information for old buffer. */
 3580: 		*yy_c_buf_p = yy_hold_char;
 3581: 		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
 3582: 		yy_current_buffer->yy_n_chars = yy_n_chars;
 3583: 		}
 3584: 
 3585: 	yy_current_buffer = new_buffer;
 3586: 	yy_load_buffer_state();
 3587: 
 3588: 	/* We don't actually know whether we did this switch during
 3589: 	 * EOF (yywrap()) processing, but the only time this flag
 3590: 	 * is looked at is after yywrap() is called, so it's safe
 3591: 	 * to go ahead and always set it.
 3592: 	 */
 3593: 	yy_did_buffer_switch_on_eof = 1;
 3594: 	}
 3595: 
 3596: 
 3597: #ifdef YY_USE_PROTOS
 3598: void yy_load_buffer_state( void )
 3599: #else
 3600: void yy_load_buffer_state()
 3601: #endif
 3602: 	{
 3603: 	yy_n_chars = yy_current_buffer->yy_n_chars;
 3604: 	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
 3605: 	yyin = yy_current_buffer->yy_input_file;
 3606: 	yy_hold_char = *yy_c_buf_p;
 3607: 	}
 3608: 
 3609: 
 3610: #ifdef YY_USE_PROTOS
 3611: YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
 3612: #else
 3613: YY_BUFFER_STATE yy_create_buffer( file, size )
 3614: FILE *file;
 3615: int size;
 3616: #endif
 3617: 	{
 3618: 	YY_BUFFER_STATE b;
 3619: 
 3620: 	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
 3621: 	if ( ! b )
 3622: 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 3623: 
 3624: 	b->yy_buf_size = size;
 3625: 
 3626: 	/* yy_ch_buf has to be 2 characters longer than the size given because
 3627: 	 * we need to put in 2 end-of-buffer characters.
 3628: 	 */
 3629: 	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
 3630: 	if ( ! b->yy_ch_buf )
 3631: 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
 3632: 
 3633: 	b->yy_is_our_buffer = 1;
 3634: 
 3635: 	yy_init_buffer( b, file );
 3636: 
 3637: 	return b;
 3638: 	}
 3639: 
 3640: 
 3641: #ifdef YY_USE_PROTOS
 3642: void yy_delete_buffer( YY_BUFFER_STATE b )
 3643: #else
 3644: void yy_delete_buffer( b )
 3645: YY_BUFFER_STATE b;
 3646: #endif
 3647: 	{
 3648: 	if ( ! b )
 3649: 		return;
 3650: 
 3651: 	if ( b == yy_current_buffer )
 3652: 		yy_current_buffer = (YY_BUFFER_STATE) 0;
 3653: 
 3654: 	if ( b->yy_is_our_buffer )
 3655: 		yy_flex_free( (void *) b->yy_ch_buf );
 3656: 
 3657: 	yy_flex_free( (void *) b );
 3658: 	}
 3659: 
 3660: 
 3661: #ifndef YY_ALWAYS_INTERACTIVE
 3662: #ifndef YY_NEVER_INTERACTIVE
 3663: #include <unistd.h>
 3664: #endif
 3665: #endif
 3666: 
 3667: #ifdef YY_USE_PROTOS
 3668: void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
 3669: #else
 3670: void yy_init_buffer( b, file )
 3671: YY_BUFFER_STATE b;
 3672: FILE *file;
 3673: #endif
 3674: 
 3675: 
 3676: 	{
 3677: 	int oerrno = errno;
 3678: 
 3679: 	yy_flush_buffer( b );
 3680: 
 3681: 	b->yy_input_file = file;
 3682: 	b->yy_fill_buffer = 1;
 3683: 
 3684: #if defined(YY_ALWAYS_INTERACTIVE) && YY_ALWAYS_INTERACTIVE
 3685: 	b->yy_is_interactive = 1;
 3686: #else
 3687: #if defined(YY_NEVER_INTERACTIVE) && YY_NEVER_INTERACTIVE
 3688: 	b->yy_is_interactive = 0;
 3689: #else
 3690: 	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
 3691: #endif
 3692: #endif
 3693: 	errno = oerrno;
 3694: 	}
 3695: 
 3696: 
 3697: #ifdef YY_USE_PROTOS
 3698: void yy_flush_buffer( YY_BUFFER_STATE b )
 3699: #else
 3700: void yy_flush_buffer( b )
 3701: YY_BUFFER_STATE b;
 3702: #endif
 3703: 
 3704: 	{
 3705: 	if ( ! b )
 3706: 		return;
 3707: 
 3708: 	b->yy_n_chars = 0;
 3709: 
 3710: 	/* We always need two end-of-buffer characters.  The first causes
 3711: 	 * a transition to the end-of-buffer state.  The second causes
 3712: 	 * a jam in that state.
 3713: 	 */
 3714: 	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
 3715: 	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
 3716: 
 3717: 	b->yy_buf_pos = &b->yy_ch_buf[0];
 3718: 
 3719: 	b->yy_at_bol = 1;
 3720: 	b->yy_buffer_status = YY_BUFFER_NEW;
 3721: 
 3722: 	if ( b == yy_current_buffer )
 3723: 		yy_load_buffer_state();
 3724: 	}
 3725: 
 3726: 
 3727: #ifndef YY_NO_SCAN_BUFFER
 3728: #ifdef YY_USE_PROTOS
 3729: YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
 3730: #else
 3731: YY_BUFFER_STATE yy_scan_buffer( base, size )
 3732: char *base;
 3733: yy_size_t size;
 3734: #endif
 3735: 	{
 3736: 	YY_BUFFER_STATE b;
 3737: 
 3738: 	if ( size < 2 ||
 3739: 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
 3740: 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
 3741: 		/* They forgot to leave room for the EOB's. */
 3742: 		return 0;
 3743: 
 3744: 	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
 3745: 	if ( ! b )
 3746: 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
 3747: 
 3748: 	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
 3749: 	b->yy_buf_pos = b->yy_ch_buf = base;
 3750: 	b->yy_is_our_buffer = 0;
 3751: 	b->yy_input_file = 0;
 3752: 	b->yy_n_chars = b->yy_buf_size;
 3753: 	b->yy_is_interactive = 0;
 3754: 	b->yy_at_bol = 1;
 3755: 	b->yy_fill_buffer = 0;
 3756: 	b->yy_buffer_status = YY_BUFFER_NEW;
 3757: 
 3758: 	yy_switch_to_buffer( b );
 3759: 
 3760: 	return b;
 3761: 	}
 3762: #endif
 3763: 
 3764: 
 3765: #ifndef YY_NO_SCAN_STRING
 3766: #ifdef YY_USE_PROTOS
 3767: YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
 3768: #else
 3769: YY_BUFFER_STATE yy_scan_string( yy_str )
 3770: yyconst char *yy_str;
 3771: #endif
 3772: 	{
 3773: 	int len;
 3774: 	for ( len = 0; yy_str[len]; ++len )
 3775: 		;
 3776: 
 3777: 	return yy_scan_bytes( yy_str, len );
 3778: 	}
 3779: #endif
 3780: 
 3781: 
 3782: #ifndef YY_NO_SCAN_BYTES
 3783: #ifdef YY_USE_PROTOS
 3784: YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
 3785: #else
 3786: YY_BUFFER_STATE yy_scan_bytes( bytes, len )
 3787: yyconst char *bytes;
 3788: int len;
 3789: #endif
 3790: 	{
 3791: 	YY_BUFFER_STATE b;
 3792: 	char *buf;
 3793: 	yy_size_t n;
 3794: 	int i;
 3795: 
 3796: 	/* Get memory for full buffer, including space for trailing EOB's. */
 3797: 	n = len + 2;
 3798: 	buf = (char *) yy_flex_alloc( n );
 3799: 	if ( ! buf )
 3800: 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
 3801: 
 3802: 	for ( i = 0; i < len; ++i )
 3803: 		buf[i] = bytes[i];
 3804: 
 3805: 	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
 3806: 
 3807: 	b = yy_scan_buffer( buf, n );
 3808: 	if ( ! b )
 3809: 		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
 3810: 
 3811: 	/* It's okay to grow etc. this buffer, and we should throw it
 3812: 	 * away when we're done.
 3813: 	 */
 3814: 	b->yy_is_our_buffer = 1;
 3815: 
 3816: 	return b;
 3817: 	}
 3818: #endif
 3819: 
 3820: 
 3821: #ifndef YY_NO_PUSH_STATE
 3822: #ifdef YY_USE_PROTOS
 3823: static void yy_push_state( int new_state )
 3824: #else
 3825: static void yy_push_state( new_state )
 3826: int new_state;
 3827: #endif
 3828: 	{
 3829: 	if ( yy_start_stack_ptr >= yy_start_stack_depth )
 3830: 		{
 3831: 		yy_size_t new_size;
 3832: 
 3833: 		yy_start_stack_depth += YY_START_STACK_INCR;
 3834: 		new_size = yy_start_stack_depth * sizeof( int );
 3835: 
 3836: 		if ( ! yy_start_stack )
 3837: 			yy_start_stack = (int *) yy_flex_alloc( new_size );
 3838: 
 3839: 		else
 3840: 			yy_start_stack = (int *) yy_flex_realloc(
 3841: 					(void *) yy_start_stack, new_size );
 3842: 
 3843: 		if ( ! yy_start_stack )
 3844: 			YY_FATAL_ERROR(
 3845: 			"out of memory expanding start-condition stack" );
 3846: 		}
 3847: 
 3848: 	yy_start_stack[yy_start_stack_ptr++] = YY_START;
 3849: 
 3850: 	BEGIN(new_state);
 3851: 	}
 3852: #endif
 3853: 
 3854: 
 3855: #ifndef YY_NO_POP_STATE
 3856: static void yy_pop_state YY_PROTO(( void ))
 3857: 	{
 3858: 	if ( --yy_start_stack_ptr < 0 )
 3859: 		YY_FATAL_ERROR( "start-condition stack underflow" );
 3860: 
 3861: 	BEGIN(yy_start_stack[yy_start_stack_ptr]);
 3862: 	}
 3863: #endif
 3864: 
 3865: 
 3866: #ifndef YY_NO_TOP_STATE
 3867: static int yy_top_state YY_PROTO(( void ))
 3868: 	{
 3869: 	return yy_start_stack[yy_start_stack_ptr - 1];
 3870: 	}
 3871: #endif
 3872: 
 3873: #ifndef YY_EXIT_FAILURE
 3874: #define YY_EXIT_FAILURE 2
 3875: #endif
 3876: 
 3877: #ifdef YY_USE_PROTOS
 3878: static void yy_fatal_error( yyconst char msg[] )
 3879: #else
 3880: static void yy_fatal_error( msg )
 3881: char msg[];
 3882: #endif
 3883: 	{
 3884: 	(void) fprintf( stderr, "%s\n", msg );
 3885: 	exit( YY_EXIT_FAILURE );
 3886: 	}
 3887: 
 3888: 
 3889: 
 3890: /* Redefine yyless() so it works in section 3 code. */
 3891: 
 3892: #undef yyless
 3893: #define yyless(n) \
 3894: 	do \
 3895: 		{ \
 3896: 		/* Undo effects of setting up yytext. */ \
 3897: 		yytext[yyleng] = yy_hold_char; \
 3898: 		yy_c_buf_p = yytext + n; \
 3899: 		yy_hold_char = *yy_c_buf_p; \
 3900: 		*yy_c_buf_p = '\0'; \
 3901: 		yyleng = n; \
 3902: 		} \
 3903: 	while ( 0 )
 3904: 
 3905: 
 3906: /* Internal utility routines. */
 3907: 
 3908: #ifndef yytext_ptr
 3909: #ifdef YY_USE_PROTOS
 3910: static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
 3911: #else
 3912: static void yy_flex_strncpy( s1, s2, n )
 3913: char *s1;
 3914: yyconst char *s2;
 3915: int n;
 3916: #endif
 3917: 	{
 3918: 	register int i;
 3919: 	for ( i = 0; i < n; ++i )
 3920: 		s1[i] = s2[i];
 3921: 	}
 3922: #endif
 3923: 
 3924: #ifdef YY_NEED_STRLEN
 3925: #ifdef YY_USE_PROTOS
 3926: static int yy_flex_strlen( yyconst char *s )
 3927: #else
 3928: static int yy_flex_strlen( s )
 3929: yyconst char *s;
 3930: #endif
 3931: 	{
 3932: 	register int n;
 3933: 	for ( n = 0; s[n]; ++n )
 3934: 		;
 3935: 
 3936: 	return n;
 3937: 	}
 3938: #endif
 3939: 
 3940: 
 3941: #ifdef YY_USE_PROTOS
 3942: static void *yy_flex_alloc( yy_size_t size )
 3943: #else
 3944: static void *yy_flex_alloc( size )
 3945: yy_size_t size;
 3946: #endif
 3947: 	{
 3948: 	return (void *) malloc( size );
 3949: 	}
 3950: 
 3951: #ifdef YY_USE_PROTOS
 3952: static void *yy_flex_realloc( void *ptr, yy_size_t size )
 3953: #else
 3954: static void *yy_flex_realloc( ptr, size )
 3955: void *ptr;
 3956: yy_size_t size;
 3957: #endif
 3958: 	{
 3959: 	/* The cast to (char *) in the following accommodates both
 3960: 	 * implementations that use char* generic pointers, and those
 3961: 	 * that use void* generic pointers.  It works with the latter
 3962: 	 * because both ANSI C and C++ allow castless assignment from
 3963: 	 * any pointer type to void*, and deal with argument conversions
 3964: 	 * as though doing an assignment.
 3965: 	 */
 3966: 	return (void *) realloc( (char *) ptr, size );
 3967: 	}
 3968: 
 3969: #ifdef YY_USE_PROTOS
 3970: static void yy_flex_free( void *ptr )
 3971: #else
 3972: static void yy_flex_free( ptr )
 3973: void *ptr;
 3974: #endif
 3975: 	{
 3976: 	free( ptr );
 3977: 	}
 3978: 
 3979: #if defined(YY_MAIN) && YY_MAIN
 3980: int main()
 3981: 	{
 3982: 	yylex();
 3983: 	return 0;
 3984: 	}
 3985: #endif
 3986: #line 728 "toke.l"
 3987: 
 3988: struct path_list {
 3989:     SLIST_ENTRY(path_list) entries;
 3990:     char *path;
 3991: };
 3992: 
 3993: SLIST_HEAD(path_list_head, path_list);
 3994: 
 3995: struct include_stack {
 3996:     YY_BUFFER_STATE bs;
 3997:     char *path;
 3998:     struct path_list_head more; /* more files in case of includedir */
 3999:     int lineno;
 4000:     bool keepopen;
 4001: };
 4002: 
 4003: /*
 4004:  * Compare two struct path_list structs in reverse order.
 4005:  */
 4006: static int
 4007: pl_compare(const void *v1, const void *v2)
 4008: {
 4009:     const struct path_list * const *p1 = v1;
 4010:     const struct path_list * const *p2 = v2;
 4011: 
 4012:     return strcmp((*p2)->path, (*p1)->path);
 4013: }
 4014: 
 4015: static char *
 4016: switch_dir(struct include_stack *stack, char *dirpath)
 4017: {
 4018:     DIR *dir;
 4019:     unsigned int i, count = 0;
 4020:     unsigned int max_paths = 32;
 4021:     char *path = NULL;
 4022:     struct dirent *dent;
 4023:     struct stat sb;
 4024:     struct path_list *pl, **paths = NULL;
 4025:     debug_decl(switch_dir, SUDO_DEBUG_PARSER)
 4026: 
 4027:     if (!(dir = opendir(dirpath))) {
 4028: 	if (errno != ENOENT) {
 4029: 	    warning("%s", dirpath);
 4030: 	    sudoerserror(NULL);
 4031: 	}
 4032: 	goto done;
 4033:     }
 4034:     paths = malloc(sizeof(*paths) * max_paths);
 4035:     if (paths == NULL) {
 4036: 	closedir(dir);
 4037: 	goto bad;
 4038:     }
 4039:     while ((dent = readdir(dir))) {
 4040: 	/* Ignore files that end in '~' or have a '.' in them. */
 4041: 	if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~'
 4042: 	    || strchr(dent->d_name, '.') != NULL) {
 4043: 	    continue;
 4044: 	}
 4045: 	if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) {
 4046: 	    closedir(dir);
 4047: 	    goto bad;
 4048: 	}
 4049: 	if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) {
 4050: 	    efree(path);
 4051: 	    path = NULL;
 4052: 	    continue;
 4053: 	}
 4054: 	pl = malloc(sizeof(*pl));
 4055: 	if (pl == NULL)
 4056: 	    goto bad;
 4057: 	pl->path = path;
 4058: 	if (count >= max_paths) {
 4059: 	    struct path_list **tmp;
 4060: 	    max_paths <<= 1;
 4061: 	    tmp = realloc(paths, sizeof(*paths) * max_paths);
 4062: 	    if (tmp == NULL) {
 4063: 		closedir(dir);
 4064: 		goto bad;
 4065: 	    }
 4066: 	    paths = tmp;
 4067: 	}
 4068: 	paths[count++] = pl;
 4069: 	path = NULL;
 4070:     }
 4071:     closedir(dir);
 4072: 
 4073:     if (count == 0)
 4074: 	goto done;
 4075: 
 4076:     /* Sort the list as an array in reverse order. */
 4077:     qsort(paths, count, sizeof(*paths), pl_compare);
 4078: 
 4079:     /* Build up the list in sorted order. */
 4080:     for (i = 0; i < count; i++) {
 4081: 	SLIST_INSERT_HEAD(&stack->more, paths[i], entries);
 4082:     }
 4083: 
 4084:     /* Pull out the first element for parsing, leave the rest for later. */
 4085:     pl = SLIST_FIRST(&stack->more);
 4086:     SLIST_REMOVE_HEAD(&stack->more, entries);
 4087:     path = pl->path;
 4088:     efree(pl);
 4089: done:
 4090:     efree(paths);
 4091:     efree(dirpath);
 4092:     debug_return_str(path);
 4093: bad:
 4094:     for (i = 0; i < count; i++) {
 4095: 	efree(paths[i]->path);
 4096: 	efree(paths[i]);
 4097:     }
 4098:     efree(paths);
 4099:     efree(dirpath);
 4100:     efree(path);
 4101:     debug_return_str(NULL);
 4102: }
 4103: 
 4104: #define MAX_SUDOERS_DEPTH	128
 4105: #define SUDOERS_STACK_INCREMENT	16
 4106: 
 4107: static size_t istacksize, idepth;
 4108: static struct include_stack *istack;
 4109: static bool keepopen;
 4110: 
 4111: void
 4112: init_lexer(void)
 4113: {
 4114:     struct path_list *pl;
 4115:     debug_decl(init_lexer, SUDO_DEBUG_PARSER)
 4116: 
 4117:     while (idepth) {
 4118: 	idepth--;
 4119: 	while ((pl = SLIST_FIRST(&istack[idepth].more)) != NULL) {
 4120: 	    SLIST_REMOVE_HEAD(&istack[idepth].more, entries);
 4121: 	    efree(pl->path);
 4122: 	    efree(pl);
 4123: 	}
 4124: 	efree(istack[idepth].path);
 4125: 	if (idepth && !istack[idepth].keepopen)
 4126: 	    fclose(istack[idepth].bs->yy_input_file);
 4127: 	sudoers_delete_buffer(istack[idepth].bs);
 4128:     }
 4129:     efree(istack);
 4130:     istack = NULL;
 4131:     istacksize = idepth = 0;
 4132:     sudolineno = 1;
 4133:     keepopen = false;
 4134:     sawspace = false;
 4135:     continued = false;
 4136:     prev_state = INITIAL;
 4137: 
 4138:     debug_return;
 4139: }
 4140: 
 4141: static bool
 4142: _push_include(char *path, bool isdir)
 4143: {
 4144:     struct path_list *pl;
 4145:     FILE *fp;
 4146:     debug_decl(_push_include, SUDO_DEBUG_PARSER)
 4147: 
 4148:     /* push current state onto stack */
 4149:     if (idepth >= istacksize) {
 4150: 	struct include_stack *new_istack;
 4151: 
 4152: 	if (idepth > MAX_SUDOERS_DEPTH) {
 4153: 	    sudoerserror(N_("too many levels of includes"));
 4154: 	    debug_return_bool(false);
 4155: 	}
 4156: 	istacksize += SUDOERS_STACK_INCREMENT;
 4157: 	new_istack = (struct include_stack *) realloc(istack,
 4158: 	    sizeof(*istack) * istacksize);
 4159: 	if (new_istack == NULL) {
 4160: 	    warning(NULL);
 4161: 	    sudoerserror(NULL);
 4162: 	    debug_return_bool(false);
 4163: 	}
 4164: 	istack = new_istack;
 4165:     }
 4166:     SLIST_INIT(&istack[idepth].more);
 4167:     if (isdir) {
 4168: 	struct stat sb;
 4169: 	switch (sudo_secure_dir(path, sudoers_uid, sudoers_gid, &sb)) {
 4170: 	    case SUDO_PATH_SECURE:
 4171: 		break;
 4172: 	    case SUDO_PATH_MISSING:
 4173: 		debug_return_bool(false);
 4174: 	    case SUDO_PATH_BAD_TYPE:
 4175: 		errno = ENOTDIR;
 4176: 		if (sudoers_warnings) {
 4177: 		    warning("%s", path);
 4178: 		}
 4179: 		debug_return_bool(false);
 4180: 	    case SUDO_PATH_WRONG_OWNER:
 4181: 		if (sudoers_warnings) {
 4182: 		    warningx(U_("%s is owned by uid %u, should be %u"),   
 4183: 			path, (unsigned int) sb.st_uid,
 4184: 			(unsigned int) sudoers_uid);
 4185: 		}
 4186: 		debug_return_bool(false);
 4187: 	    case SUDO_PATH_WORLD_WRITABLE:
 4188: 		if (sudoers_warnings) {
 4189: 		    warningx(U_("%s is world writable"), path);
 4190: 		}
 4191: 		debug_return_bool(false);
 4192: 	    case SUDO_PATH_GROUP_WRITABLE:
 4193: 		if (sudoers_warnings) {
 4194: 		    warningx(U_("%s is owned by gid %u, should be %u"),
 4195: 			path, (unsigned int) sb.st_gid,
 4196: 			(unsigned int) sudoers_gid);
 4197: 		}
 4198: 		debug_return_bool(false);
 4199: 	    default:
 4200: 		/* NOTREACHED */
 4201: 		debug_return_bool(false);
 4202: 	}
 4203: 	if (!(path = switch_dir(&istack[idepth], path))) {
 4204: 	    /* switch_dir() called sudoerserror() for us */
 4205: 	    debug_return_bool(false);
 4206: 	}
 4207: 	while ((fp = open_sudoers(path, false, &keepopen)) == NULL) {
 4208: 	    /* Unable to open path in includedir, go to next one, if any. */
 4209: 	    efree(path);
 4210: 	    if ((pl = SLIST_FIRST(&istack[idepth].more)) == NULL)
 4211: 		debug_return_bool(false);
 4212: 	    SLIST_REMOVE_HEAD(&istack[idepth].more, entries);
 4213: 	    path = pl->path;
 4214: 	    efree(pl);
 4215: 	}
 4216:     } else {
 4217: 	if ((fp = open_sudoers(path, true, &keepopen)) == NULL) {
 4218: 	    /* The error was already printed by open_sudoers() */
 4219: 	    sudoerserror(NULL);
 4220: 	    debug_return_bool(false);
 4221: 	}
 4222:     }
 4223:     /* Push the old (current) file and open the new one. */
 4224:     istack[idepth].path = sudoers; /* push old path */
 4225:     istack[idepth].bs = YY_CURRENT_BUFFER;
 4226:     istack[idepth].lineno = sudolineno;
 4227:     istack[idepth].keepopen = keepopen;
 4228:     idepth++;
 4229:     sudolineno = 1;
 4230:     sudoers = path;
 4231:     sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
 4232: 
 4233:     debug_return_bool(true);
 4234: }
 4235: 
 4236: static bool
 4237: pop_include(void)
 4238: {
 4239:     struct path_list *pl;
 4240:     FILE *fp;
 4241:     debug_decl(pop_include, SUDO_DEBUG_PARSER)
 4242: 
 4243:     if (idepth == 0)
 4244: 	debug_return_bool(false);
 4245: 
 4246:     if (!keepopen)
 4247: 	fclose(YY_CURRENT_BUFFER->yy_input_file);
 4248:     sudoers_delete_buffer(YY_CURRENT_BUFFER);
 4249:     /* If we are in an include dir, move to the next file. */
 4250:     while ((pl = SLIST_FIRST(&istack[idepth - 1].more)) != NULL) {
 4251: 	SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries);
 4252: 	fp = open_sudoers(pl->path, false, &keepopen);
 4253: 	if (fp != NULL) {
 4254: 	    efree(sudoers);
 4255: 	    sudoers = pl->path;
 4256: 	    sudolineno = 1;
 4257: 	    sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
 4258: 	    efree(pl);
 4259: 	    break;
 4260: 	}
 4261: 	/* Unable to open path in include dir, go to next one. */
 4262: 	efree(pl->path);
 4263: 	efree(pl);
 4264:     }
 4265:     /* If no path list, just pop the last dir on the stack. */
 4266:     if (pl == NULL) {
 4267: 	idepth--;
 4268: 	sudoers_switch_to_buffer(istack[idepth].bs);
 4269: 	efree(sudoers);
 4270: 	sudoers = istack[idepth].path;
 4271: 	sudolineno = istack[idepth].lineno;
 4272: 	keepopen = istack[idepth].keepopen;
 4273:     }
 4274:     debug_return_bool(true);
 4275: }
 4276: 
 4277: static char *
 4278: parse_include(char *base)
 4279: {
 4280:     char *cp, *ep, *path, *pp;
 4281:     int dirlen = 0, len = 0, subst = 0;
 4282:     size_t shost_len = 0;
 4283:     debug_decl(parse_include, SUDO_DEBUG_PARSER)
 4284: 
 4285:     /* Pull out path from #include line. */
 4286:     cp = base + sizeof("#include");
 4287:     if (*cp == 'i')
 4288: 	cp += 3; /* includedir */
 4289:     while (isblank((unsigned char) *cp))
 4290: 	cp++;
 4291:     ep = cp;
 4292:     while (*ep != '\0' && !isspace((unsigned char) *ep)) {
 4293: 	if (ep[0] == '%' && ep[1] == 'h') {
 4294: 	    shost_len = strlen(user_shost);
 4295: 	    len += shost_len - 2;
 4296: 	    subst = 1;
 4297: 	}
 4298: 	ep++;
 4299:     }
 4300: 
 4301:     /* Relative paths are located in the same dir as the sudoers file. */
 4302:     if (*cp != '/') {
 4303: 	char *dirend = strrchr(sudoers, '/');
 4304: 	if (dirend != NULL)
 4305: 	    dirlen = (int)(dirend - sudoers) + 1;
 4306:     }
 4307: 
 4308:     /* Make a copy of the fully-qualified path and return it. */
 4309:     len += (int)(ep - cp);
 4310:     path = pp = malloc(len + dirlen + 1);
 4311:     if (path == NULL) {
 4312: 	warning(NULL);
 4313: 	sudoerserror(NULL);
 4314: 	debug_return_str(NULL);
 4315:     }
 4316:     if (dirlen) {
 4317: 	memcpy(path, sudoers, dirlen);
 4318: 	pp += dirlen;
 4319:     }
 4320:     if (subst) {
 4321: 	/* substitute for %h */
 4322: 	while (cp < ep) {
 4323: 	    if (cp[0] == '%' && cp[1] == 'h') {
 4324: 		memcpy(pp, user_shost, shost_len);
 4325: 		pp += shost_len;
 4326: 		cp += 2;
 4327: 		continue;
 4328: 	    }
 4329: 	    *pp++ = *cp++;
 4330: 	}
 4331: 	*pp = '\0';
 4332:     } else {
 4333: 	memcpy(pp, cp, len);
 4334: 	pp[len] = '\0';
 4335:     }
 4336: 
 4337:     /* Push any excess characters (e.g. comment, newline) back to the lexer */
 4338:     if (*ep != '\0')
 4339: 	yyless((int)(ep - base));
 4340: 
 4341:     debug_return_str(path);
 4342: }
 4343: 
 4344: #ifdef TRACELEXER
 4345: int
 4346: sudoers_trace_print(const char *msg)
 4347: {
 4348:     return fputs(msg, stderr);
 4349: }
 4350: #else
 4351: int
 4352: sudoers_trace_print(const char *msg)
 4353: {
 4354:     static bool initialized;
 4355:     static struct lbuf lbuf;
 4356: 
 4357:     if (!initialized) {
 4358: 	initialized = true;
 4359: 	lbuf_init(&lbuf, NULL, 0, NULL, 0);
 4360:     }
 4361: 
 4362:     lbuf_append(&lbuf, "%s", msg);
 4363:     /* XXX - assumes a final newline */
 4364:     if (strchr(msg, '\n') != NULL)
 4365:     {
 4366: 	sudo_debug_printf2(NULL, NULL, 0, SUDO_DEBUG_PARSER|SUDO_DEBUG_DEBUG,
 4367: 	    "%s:%d %s", sudoers, sudolineno, lbuf.buf);
 4368: 	lbuf.len = 0;
 4369:     }
 4370:     return 0;
 4371: }
 4372: #endif /* TRACELEXER */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>