#line 1 "tools/widl/parser.yy.c"

#line 3 "tools/widl/parser.yy.c"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define yy_create_buffer parser__create_buffer
#define yy_delete_buffer parser__delete_buffer
#define yy_scan_buffer parser__scan_buffer
#define yy_scan_string parser__scan_string
#define yy_scan_bytes parser__scan_bytes
#define yy_init_buffer parser__init_buffer
#define yy_flush_buffer parser__flush_buffer
#define yy_load_buffer_state parser__load_buffer_state
#define yy_switch_to_buffer parser__switch_to_buffer
#define yypush_buffer_state parser_push_buffer_state
#define yypop_buffer_state parser_pop_buffer_state
#define yyensure_buffer_stack parser_ensure_buffer_stack
#define yy_flex_debug parser__flex_debug
#define yyin parser_in
#define yyleng parser_leng
#define yylex parser_lex
#define yylineno parser_lineno
#define yyout parser_out
#define yyrestart parser_restart
#define yytext parser_text
#define yywrap parser_wrap
#define yyalloc parser_alloc
#define yyrealloc parser_realloc
#define yyfree parser_free

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

#ifdef yy_create_buffer
#define parser__create_buffer_ALREADY_DEFINED
#else
#define yy_create_buffer parser__create_buffer
#endif

#ifdef yy_delete_buffer
#define parser__delete_buffer_ALREADY_DEFINED
#else
#define yy_delete_buffer parser__delete_buffer
#endif

#ifdef yy_scan_buffer
#define parser__scan_buffer_ALREADY_DEFINED
#else
#define yy_scan_buffer parser__scan_buffer
#endif

#ifdef yy_scan_string
#define parser__scan_string_ALREADY_DEFINED
#else
#define yy_scan_string parser__scan_string
#endif

#ifdef yy_scan_bytes
#define parser__scan_bytes_ALREADY_DEFINED
#else
#define yy_scan_bytes parser__scan_bytes
#endif

#ifdef yy_init_buffer
#define parser__init_buffer_ALREADY_DEFINED
#else
#define yy_init_buffer parser__init_buffer
#endif

#ifdef yy_flush_buffer
#define parser__flush_buffer_ALREADY_DEFINED
#else
#define yy_flush_buffer parser__flush_buffer
#endif

#ifdef yy_load_buffer_state
#define parser__load_buffer_state_ALREADY_DEFINED
#else
#define yy_load_buffer_state parser__load_buffer_state
#endif

#ifdef yy_switch_to_buffer
#define parser__switch_to_buffer_ALREADY_DEFINED
#else
#define yy_switch_to_buffer parser__switch_to_buffer
#endif

#ifdef yypush_buffer_state
#define parser_push_buffer_state_ALREADY_DEFINED
#else
#define yypush_buffer_state parser_push_buffer_state
#endif

#ifdef yypop_buffer_state
#define parser_pop_buffer_state_ALREADY_DEFINED
#else
#define yypop_buffer_state parser_pop_buffer_state
#endif

#ifdef yyensure_buffer_stack
#define parser_ensure_buffer_stack_ALREADY_DEFINED
#else
#define yyensure_buffer_stack parser_ensure_buffer_stack
#endif

#ifdef yylex
#define parser_lex_ALREADY_DEFINED
#else
#define yylex parser_lex
#endif

#ifdef yyrestart
#define parser_restart_ALREADY_DEFINED
#else
#define yyrestart parser_restart
#endif

#ifdef yylex_init
#define parser_lex_init_ALREADY_DEFINED
#else
#define yylex_init parser_lex_init
#endif

#ifdef yylex_init_extra
#define parser_lex_init_extra_ALREADY_DEFINED
#else
#define yylex_init_extra parser_lex_init_extra
#endif

#ifdef yylex_destroy
#define parser_lex_destroy_ALREADY_DEFINED
#else
#define yylex_destroy parser_lex_destroy
#endif

#ifdef yyget_debug
#define parser_get_debug_ALREADY_DEFINED
#else
#define yyget_debug parser_get_debug
#endif

#ifdef yyset_debug
#define parser_set_debug_ALREADY_DEFINED
#else
#define yyset_debug parser_set_debug
#endif

#ifdef yyget_extra
#define parser_get_extra_ALREADY_DEFINED
#else
#define yyget_extra parser_get_extra
#endif

#ifdef yyset_extra
#define parser_set_extra_ALREADY_DEFINED
#else
#define yyset_extra parser_set_extra
#endif

#ifdef yyget_in
#define parser_get_in_ALREADY_DEFINED
#else
#define yyget_in parser_get_in
#endif

#ifdef yyset_in
#define parser_set_in_ALREADY_DEFINED
#else
#define yyset_in parser_set_in
#endif

#ifdef yyget_out
#define parser_get_out_ALREADY_DEFINED
#else
#define yyget_out parser_get_out
#endif

#ifdef yyset_out
#define parser_set_out_ALREADY_DEFINED
#else
#define yyset_out parser_set_out
#endif

#ifdef yyget_leng
#define parser_get_leng_ALREADY_DEFINED
#else
#define yyget_leng parser_get_leng
#endif

#ifdef yyget_text
#define parser_get_text_ALREADY_DEFINED
#else
#define yyget_text parser_get_text
#endif

#ifdef yyget_lineno
#define parser_get_lineno_ALREADY_DEFINED
#else
#define yyget_lineno parser_get_lineno
#endif

#ifdef yyset_lineno
#define parser_set_lineno_ALREADY_DEFINED
#else
#define yyset_lineno parser_set_lineno
#endif

#ifdef yywrap
#define parser_wrap_ALREADY_DEFINED
#else
#define yywrap parser_wrap
#endif

#ifdef yyget_lval
#define parser_get_lval_ALREADY_DEFINED
#else
#define yyget_lval parser_get_lval
#endif

#ifdef yyset_lval
#define parser_set_lval_ALREADY_DEFINED
#else
#define yyset_lval parser_set_lval
#endif

#ifdef yyget_lloc
#define parser_get_lloc_ALREADY_DEFINED
#else
#define yyget_lloc parser_get_lloc
#endif

#ifdef yyset_lloc
#define parser_set_lloc_ALREADY_DEFINED
#else
#define yyset_lloc parser_set_lloc
#endif

#ifdef yyalloc
#define parser_alloc_ALREADY_DEFINED
#else
#define yyalloc parser_alloc
#endif

#ifdef yyrealloc
#define parser_realloc_ALREADY_DEFINED
#else
#define yyrealloc parser_realloc
#endif

#ifdef yyfree
#define parser_free_ALREADY_DEFINED
#else
#define yyfree parser_free
#endif

#ifdef yytext
#define parser_text_ALREADY_DEFINED
#else
#define yytext parser_text
#endif

#ifdef yyleng
#define parser_leng_ALREADY_DEFINED
#else
#define yyleng parser_leng
#endif

#ifdef yyin
#define parser_in_ALREADY_DEFINED
#else
#define yyin parser_in
#endif

#ifdef yyout
#define parser_out_ALREADY_DEFINED
#else
#define yyout parser_out
#endif

#ifdef yy_flex_debug
#define parser__flex_debug_ALREADY_DEFINED
#else
#define yy_flex_debug parser__flex_debug
#endif

#ifdef yylineno
#define parser_lineno_ALREADY_DEFINED
#else
#define yylineno parser_lineno
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C++ systems might need __STDC_LIMIT_MACROS defined before including
 * <stdint.h>, if you want the limit (max/min) macros for int types.
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#ifndef SIZE_MAX
#define SIZE_MAX               (~(size_t)0)
#endif

#endif /* ! C99 */

#endif /* ! FLEXINT_H */

/* begin standard C++ headers. */

/* TODO: this is always defined, so inline it */
#define yyconst const

#if defined(__GNUC__) && __GNUC__ >= 3
#define yynoreturn __attribute__((__noreturn__))
#else
#define yynoreturn
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an
 *   integer in range [0..255] for use as an array index.
 */
#define YY_SC_TO_UI(c) ((YY_CHAR) (c))

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin  )
#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k.
 * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
 * Ditto for the __ia64__ case accordingly.
 */
#define YY_BUF_SIZE 32768
#else
#define YY_BUF_SIZE 16384
#endif /* __ia64__ */
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

extern int yyleng;

extern FILE *yyin, *yyout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
    
    #define YY_LESS_LINENO(n)
    #define YY_LINENO_REWIND_TO(ptr)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )
#define unput(c) yyunput( c, (yytext_ptr)  )

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	int yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */

	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via yyrestart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                          : NULL)
/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]

/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
static int yy_n_chars;		/* number of characters read into yy_ch_buf */
int yyleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = NULL;
static int yy_init = 0;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void yyrestart ( FILE *input_file  );
void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size  );
void yy_delete_buffer ( YY_BUFFER_STATE b  );
void yy_flush_buffer ( YY_BUFFER_STATE b  );
void yypush_buffer_state ( YY_BUFFER_STATE new_buffer  );
void yypop_buffer_state ( void );

static void yyensure_buffer_stack ( void );
static void yy_load_buffer_state ( void );
static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file  );
#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER )

YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size  );
YY_BUFFER_STATE yy_scan_string ( const char *yy_str  );
YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len  );

void *yyalloc ( yy_size_t  );
void *yyrealloc ( void *, yy_size_t  );
void yyfree ( void *  );

#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        yyensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer( yyin, YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}
#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        yyensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer( yyin, YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}
#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define parser_wrap() (/*CONSTCOND*/1)
#define YY_SKIP_YYWRAP
typedef flex_uint8_t YY_CHAR;

FILE *yyin = NULL, *yyout = NULL;

typedef int yy_state_type;

extern int yylineno;
int yylineno = 1;

extern char *yytext;
#ifdef yytext_ptr
#undef yytext_ptr
#endif
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state ( void );
static yy_state_type yy_try_NUL_trans ( yy_state_type current_state  );
static int yy_get_next_buffer ( void );
static void yynoreturn yy_fatal_error ( const char* msg  );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
	yyleng = (int) (yy_cp - yy_bp); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
	(yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 218
#define YY_END_OF_BUFFER 219
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static const flex_int16_t yy_accept[1464] =
    {   0,
        0,    0,    0,    0,    0,    0,    0,    0,    4,    4,
      219,  217,  206,  205,  217,  217,  217,  217,  217,  217,
      201,  201,  217,  217,  217,  199,  199,  199,  199,  199,
      199,  143,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  217,  206,  142,  199,  217,  201,  201,  199,  199,
        8,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      206,  142,  218,    5,    7,  218,    4,    4,    4,  211,
        0,  203,    0,  215,    0,  204,    0,  209,    0,    0,

      201,  201,  201,    0,  207,  213,  210,  212,  208,  199,
      199,    0,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  214,    0,  142,
        0,  142,    0,  199,    0,  201,    0,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,   67,

      199,  199,  199,   73,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,    0,  142,  142,    5,    5,    7,    0,    6,    0,
        4,    4,    4,  216,  140,  201,  201,  200,  199,    0,
      202,    0,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      176,  199,  199,  199,  199,  199,  199,  199,  199,  199,

      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,    0,    0,  199,    0,  201,    0,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,   83,  199,  199,  199,  199,
      199,   93,  199,  199,   97,  199,  199,  199,  199,  107,
      199,  199,  199,  111,  199,  199,  199,  199,  199,  199,

      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,    6,    4,    4,    0,  200,
      200,  199,  145,  199,  146,  199,  199,  199,  199,  156,
      157,  199,  158,  199,  199,  199,  199,  199,  199,  199,
      199,  167,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  179,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  197,  199,    0,    0,  199,    0,  201,    0,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,   22,  199,  156,  199,  199,   27,  199,  199,  199,

      199,  199,  199,  199,  199,  199,  199,  199,   47,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,   59,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
       76,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,   88,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  132,  199,  199,  199,  199,  199,    4,
        4,    0,  140,  200,  200,  144,  199,  199,  199,  199,
      199,  147,  199,  160,  199,  199,  199,  199,  199,  199,

      199,  199,  170,  199,  172,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  187,  199,  199,
      190,  199,  199,  199,  199,  199,  195,  199,  199,    0,
        0,  199,    0,  201,    0,  199,  199,  199,   12,  199,
      199,  199,  199,  199,   18,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,   51,  199,  199,  199,
      199,   57,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,   79,  199,   81,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,

      199,  199,  199,  199,  199,  199,  199,  199,  106,  199,
      109,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,    4,    3,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  166,
      199,  169,  199,  173,  175,  199,  199,  199,  181,  199,
      148,  199,  199,  199,  199,  188,  189,  191,  199,  192,
      193,  199,  199,  199,    0,    0,  199,    0,  201,    0,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,

       36,   37,  199,  199,  199,  199,  199,  199,  199,   49,
      199,  199,  199,  199,  199,  199,  199,   60,  199,  199,
      199,   66,  199,   69,   70,  199,  199,  199,  199,  199,
      199,  199,  199,  199,   85,  199,  199,  199,   90,   92,
      199,  199,  199,  199,  199,  199,  101,  199,  199,  199,
      108,  199,  199,  199,  199,  115,  116,  199,  119,  199,
      121,  199,  123,  193,  199,  199,  199,  129,  199,  199,
      199,  134,  199,  199,  199,    4,    3,    3,  199,  151,
      153,  199,  199,  155,  159,  199,  162,  163,  199,  199,
      199,  199,  199,  199,  178,  180,  199,  199,  199,  199,

      199,  149,  194,  199,  198,    0,    0,  199,    0,  201,
        0,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,   25,  199,  199,  199,  199,  199,
       35,  163,  199,  199,  199,   45,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
      199,   74,  199,  199,  199,  199,   82,   84,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  102,  103,
      199,  199,  199,  199,  199,  199,  118,  199,  199,  199,
      199,  199,  199,  199,  199,  133,  135,  199,  199,    4,
        3,  199,  199,  199,  199,  199,  164,  199,  199,  171,

      199,  199,  199,  199,  184,  185,  199,  196,    0,  138,
      199,    0,  201,    0,  199,  199,  199,  199,   14,  199,
      199,  199,  199,  199,   21,  199,  199,   26,  199,  199,
      199,   33,  199,  199,  199,  199,  199,  199,  199,  199,
       50,   52,  199,  199,  199,  199,  199,  199,   62,  199,
      199,  199,  199,  199,  199,   78,  199,  199,  199,  199,
      199,  199,   95,   96,   98,  199,  199,  199,  199,  110,
      199,  199,  199,  199,  120,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,    4,    3,  199,  152,  150,
      199,  161,  199,  199,  174,  177,  182,  199,  199,    0,

      199,    0,    0,  201,  199,  199,   13,  199,   16,   17,
      199,  199,   23,  199,  199,  199,  199,  199,  199,  199,
      199,  199,  199,  199,  199,   46,  199,  199,  199,  199,
      199,  199,  199,  199,  199,  199,  199,  199,   77,  199,
      199,  199,  199,  199,  199,  199,  199,  199,  105,  199,
      199,  199,  199,  199,  124,  199,  126,  199,  128,  199,
      199,  136,  199,    4,    3,    0,  141,  199,  199,  199,
      183,  199,    0,  199,    0,    0,  199,  199,   15,   19,
      199,   24,  199,   29,  199,  199,  199,  199,  199,  199,
       42,  199,  199,  199,  199,  199,  199,  199,  199,  199,

       63,   68,  199,  199,   75,  199,  199,  199,  199,  199,
      199,  199,  199,  104,  199,  199,  114,  199,  199,  199,
      199,  199,  199,  199,    1,    3,  154,  199,  199,  199,
        0,  199,    0,    0,   10,  199,   20,   28,  199,  199,
       38,  199,  199,  199,  199,   44,  199,   53,   54,  199,
      199,  199,   61,  199,  199,  199,  199,  199,  199,  199,
      199,   91,  199,  199,  199,  199,  113,  117,  199,  125,
      127,  199,  199,  199,    3,  199,  199,  186,    0,    0,
        0,    0,   11,  199,  199,  199,   40,  199,  199,  199,
      199,   56,  199,  199,  199,  199,  199,  199,   86,   87,

      199,  199,  199,  199,  112,  199,  130,  199,  137,    3,
      165,  199,    0,    0,    0,  199,  199,  199,   41,  199,
      199,  199,  199,  199,   65,   71,  199,  199,   89,   94,
      199,  199,  199,  199,    3,  168,    0,    0,    0,   30,
      199,  199,  199,  199,  199,   58,  199,  199,  199,   99,
      199,  199,  199,    3,    0,    0,    0,  199,   34,   39,
      199,   48,   55,  199,   72,  199,  100,  199,  199,    2,
        0,    0,    0,  199,  199,  199,  199,  199,  199,  131,
        2,    0,    0,    0,  199,  199,  199,   64,  199,  199,
        0,    0,    0,  199,  199,  199,  199,  199,  139,    0,

        0,  199,  199,  199,   80,  199,    0,    0,  199,  199,
      199,  199,    0,    0,  199,  199,  199,  122,    0,    0,
      199,  199,  199,    0,    0,  199,  199,  199,    0,    0,
      199,   32,  199,    0,    0,  199,   43,    0,    0,   31,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    9,
        0,    9,    0
    } ;

static const YY_CHAR yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    2,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    4,    5,    6,    1,    1,    7,    8,    9,
        1,    1,   10,    1,   11,   12,    1,   13,   14,   15,
       16,   17,   18,   19,   18,   18,   18,    1,    1,   20,
       21,   22,    1,    1,   23,   24,   24,   24,   25,   26,
       27,   27,   27,   27,   27,   28,   27,   29,   27,   27,
       27,   30,   31,   32,   33,   27,   27,   34,   35,   27,
       36,   37,   38,    1,   39,    1,   40,   41,   42,   43,

       44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
       54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
       64,   65,    1,   66,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static const YY_CHAR yy_meta[67] =
    {   0,
        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    3,    3,    3,    3,    3,    3,    3,    1,
        1,    1,    3,    3,    3,    3,    4,    4,    4,    4,
        4,    4,    4,    4,    4,    1,    1,    1,    4,    3,
        3,    3,    3,    3,    3,    4,    4,    4,    4,    4,
        4,    4,    4,    4,    4,    4,    4,    4,    4,    4,
        4,    4,    4,    4,    4,    1
    } ;

static const flex_int16_t yy_base[1507] =
    {   0,
        0,   65,  113,   66,   60,   67, 2481, 2480,   88,   90,
     2484, 2487, 2487, 2487, 2462,   64, 2475,   62, 2459, 2468,
      164,   53,   68, 2458,   73,    0, 2455, 2472, 2443, 2452,
     2444, 2487,   64, 2418,   36,  146,   48,   51, 2421,   57,
       58,   59,   61, 2431,   84,   89,  143, 2406, 2416, 2414,
     2425, 2400,  157,  132,  140,  223,  256,  151,  307, 2442,
     2487,  165,  165,  248,  309,  198,  287,  186,  313,  292,
      314,  177,  321,  252,  218,  331,  188,  257,  356,  162,
      141, 2462, 2487,  399,    0,  207,    0, 2415, 2414, 2487,
      248, 2487, 2458, 2487,  195, 2487, 2457, 2487, 2447,  406,

      220,   65,   84,    0, 2487, 2487, 2487, 2487, 2487,    0,
     2430,  281, 2429, 2430, 2422,  329, 2411, 2413, 2412, 2392,
     2402, 2395, 2389, 2389, 2402, 2405,  234, 2389,  344, 2385,
     2382, 2381, 2383, 2380, 2384, 2384, 2381, 2380,  278, 2393,
     2380, 2373, 2388, 2378, 2371, 2374,  150, 2374, 2372,  248,
     2385,  105, 2376, 2368,  185, 2374, 2374, 2487,  386,  144,
     2372,  312, 2362, 2375,  426,  459,    0,  507, 2389, 2357,
      297, 2364, 2361,  351, 2349, 2353, 2358,  321, 2356, 2350,
      277, 2364,  355, 2349,  463, 2348, 2354,  349, 2364,  387,
     2359,  406, 2342,  439, 2344, 2356, 2346, 2347, 2354, 2352,

     2342, 2351,   68,  456, 2345, 2339,  215,  251,  369,  373,
     2351, 2330,  352, 2340, 2337, 2343, 2327, 2326, 2340,  377,
     2335, 2328, 2324, 2339, 2326,  498,  444, 2318,  502, 2329,
     2319, 2335, 2331,  405, 2329, 2324, 2332, 2313, 2312, 2329,
     2310,  452, 2364, 2363, 2362,  553,    0,  423, 2361,  433,
        0, 2319, 2308, 2487,  560, 2487, 2487,  429, 2329,  451,
     2487, 2356, 2330, 2332, 2331, 2302, 2296, 2310, 2310, 2300,
     2306, 2305, 2306, 2290, 2295, 2287, 2305, 2292, 2302, 2297,
     2285, 2298, 2286, 2283, 2292, 2295, 2291, 2289, 2278, 2283,
     2286, 2272, 2282, 2280, 2266, 2281, 2282, 2268, 2274, 2261,

     2261, 2262, 2265, 2273, 2265, 2256, 2272, 2253, 2253, 2267,
     2256, 2261, 2265, 2267, 2263, 2265, 2253,  592,  625,    0,
      673, 2255, 2245, 2250,  442, 2246, 2242, 2244, 2244, 2242,
     2252, 2247, 2253, 2248, 2240, 2248, 2245,  287,  454, 2229,
      440, 2247, 2229,  506, 2232, 2225, 2232, 2241, 2227, 2225,
     2222, 2225, 2226, 2225, 2224, 2228, 2231, 2228, 2228, 2215,
     2226, 2216, 2213, 2225, 2216,  483, 2201, 2188, 2201, 2168,
     2169, 2172, 2153, 2169, 2151,    0, 2149, 2153,  521, 2158,
     2161,    0, 2164, 2155,    0, 2145, 2138, 2143,  534,    0,
     2144, 2135, 2137,    0, 2122, 2118, 2118, 2115, 2129, 2130,

     2116,  476,  468, 2113, 2127, 2117, 2125,  485,  524, 2121,
     2119, 2122, 2090, 2092, 2102, 2143, 2093, 2086,  609,  404,
      489, 2117,    0, 2118,    0, 2081, 2080, 2084, 2093,    0,
        0, 2085,    0, 2091, 2071, 2073, 2075, 2054, 2067, 2064,
     2060,    0, 2053, 2052, 2049, 2056, 2049, 2048, 2051, 2046,
     2058,    0, 2043, 2045, 2024, 2041, 2036, 2021, 2030, 2029,
     2017, 2031, 2020, 2022, 2024, 2031, 2028, 2023, 2021, 2010,
     2003,    0, 1991, 1996, 2000, 2006,  706,  739,    0,  787,
     1983, 1999, 1998, 1988, 1998, 1980, 1979, 1996, 1990, 1992,
     1990,    0, 1973, 1976,  519, 1963,    0, 1974, 1958,  539,

     1957, 1967, 1949, 1964, 1966,  536, 1966, 1966,    0, 1953,
     1956, 1944, 1933, 1924, 1922, 1933, 1921, 1921, 1934,    0,
     1926,  556, 1932, 1920, 1917, 1925, 1929, 1923, 1918, 1906,
        0, 1905, 1897, 1898, 1901, 1903, 1906, 1888, 1901, 1886,
     1885, 1878, 1895, 1897, 1878,  534, 1882, 1884, 1872, 1869,
      548, 1872, 1851, 1866, 1869, 1858, 1867,  411, 1853, 1869,
     1857,  591, 1865, 1863, 1857,  549, 1858, 1859, 1840, 1839,
     1823, 1843, 1835,    0, 1827, 1822, 1830, 1820, 1837, 1836,
     1815,  664,  801, 2487, 2487,    0, 1843,  636, 1830, 1814,
     1826,    0, 1807,    0, 1791, 1793, 1798, 1808, 1794, 1802,

     1806, 1791,    0, 1799,    0, 1783, 1797, 1795, 1782, 1791,
     1789, 1777, 1767, 1760, 1757, 1758, 1762,    0, 1770, 1767,
        0, 1769, 1759, 1750, 1761, 1763,    0, 1753, 1762, 1761,
     1747, 1730,  833,  866,    0,  914, 1744, 1737,    0, 1728,
     1741, 1740, 1727, 1729, 1738, 1729, 1734, 1732, 1731, 1728,
     1727, 1708, 1694, 1688,  559, 1698, 1705, 1697, 1705, 1695,
     1705, 1692, 1698, 1698, 1697, 1692,    0,  555, 1677, 1692,
     1694,    0, 1680, 1674, 1663, 1668, 1656, 1661, 1659, 1668,
     1653, 1662, 1667, 1655, 1668, 1655, 1643,    0, 1660,    0,
     1640, 1645, 1640, 1629, 1638, 1622, 1616, 1620, 1619, 1629,

     1623, 1621, 1634, 1625, 1625, 1623, 1593, 1610,    0,  127,
        0,  155,  219,  297,  355,  447,  462,  479,  492,  524,
      548,  541,  575,  582,  588,  594,  607,  610,  604,  613,
      599,  614,  607,  608,  611,  620,  669,  642,  658,  657,
      635,  625,  640,  636,  641,  656,  642,  643,  644,    0,
      646,    0,  666,  655,    0,  667,  644,  651,    0,  670,
        0,  652,  668,  682,  683,    0,    0,    0,  677,    0,
        0,  688,  690,  676,  681,  697,  681,  947,  980,    0,
     1028,  680,  700,  698,  683,  684,  700,  701,  699,  720,
      710,  726,  714,  711,  728,  712,  733,  715,  733,  725,

        0,    0,  718,  738,  741,  722,  743,  731,  750,    0,
      738,  749,  749,  746,  747,  738,  757,  759,  754,  757,
      752,    0,  762,    0,    0,  782,  775,  780,  767,  794,
      790,  784,  792,  786,    0,  776,  799,  796,  802,    0,
      788,  778,  804,  813,  803,  798,    0,  801,  802,  803,
        0,  812,  820,  806,  824,    0,  828,  810,    0,  812,
        0,  831,    0,  832,  824,  838,  827,    0,  848,  834,
      843,    0,  843,  851,  858,  858,    0,  899,  879,  884,
        0,  853,  848,    0,    0,  853,    0,    0,  869,  870,
      856,  857,  870,  877,    0,    0,  878,  873,  865,  865,

      882,    0,    0,  882,    0,  877,  933,  896, 1061, 1094,
        0, 1142,  901,  883,  899,  900,  897,  893,  905,  888,
      896,  906,  893,  893,    0,  917,  928,  928,  935,  916,
        0,  939,  917,  938,  937,    0,  935,  942,  924,  941,
      933,  925,  942,  943,  956,  950,  966,  963,  968,  955,
      956,    0,  952,  969,  975,  971,    0,    0,  968,  968,
      975,  984,  978,  988,  982,  991,  996,  997,    0,  980,
      994,  975,  995, 1005,  991, 1002,    0, 1013, 1015, 1033,
     1005, 1000, 1009, 1004, 1011,    0,    0, 1015, 1007, 1018,
     1008, 1032, 1065, 1032, 1048, 1045,    0, 1033, 1051,    0,

     1052, 1050, 1051, 1052,    0,    0, 1046,    0, 1058, 1097,
     1054, 1175, 1210, 1103, 1104, 1075, 1081, 1065,    0, 1070,
     1066, 1067, 1080, 1086,    0, 1071, 1078,    0, 1073, 1082,
     1093, 1080, 1094, 1089, 1104, 1102, 1105, 1100, 1105, 1099,
        0,    0, 1097, 1108, 1114, 1122, 1113, 1125,    0, 1117,
     1118, 1128, 1134, 1121, 1117,    0, 1123, 1137, 1138, 1121,
     1129, 1141,    0,    0,    0, 1147, 1153, 1153, 1159,    0,
     1144, 1161, 1161, 1152,    0, 1153, 1150, 1145, 1164, 1172,
     1153, 1155, 1174, 1179, 1172, 1177, 1193, 1231,    0,    0,
     1192,    0, 1190, 1177,    0,    0,    0, 1179, 1199, 1195,

     1190, 1260,    0, 1233, 1194, 1205,    0, 1194,    0,    0,
     1205, 1198,    0, 1191, 1191, 1208, 1213, 1210, 1202, 1205,
     1206, 1218, 1216, 1206, 1209,    0, 1212, 1203, 1206, 1219,
     1208, 1214, 1206, 1226, 1221, 1240, 1235, 1245,    0, 1242,
     1248, 1249, 1243, 1252, 1234, 1248, 1251, 1251,    0, 1258,
     1250, 1256, 1263, 1254,    0, 1253,    0, 1269,    0, 1263,
     1253,    0, 1265, 1304, 1259, 1313, 2487, 1257, 1277, 1258,
        0, 1261, 1268, 1281, 1310,    0, 1286, 1280,    0,    0,
     1288,    0, 1279,    0, 1285, 1282, 1297, 1290, 1282, 1302,
        0, 1291, 1302, 1292, 1303, 1294, 1309, 1296, 1315, 1299,

     1317,    0, 1313, 1322,    0, 1324, 1313, 1314, 1325, 1321,
     1320, 1316, 1325,    0, 1331, 1313,    0, 1329, 1315, 1331,
     1318, 1337, 1319, 1339,    0, 1323,    0, 1339, 1324, 1325,
     1344, 1383, 1373,    0,    0, 1349,    0,    0, 1351, 1337,
        0, 1356, 1357, 1351, 1345,    0, 1362,    0,    0, 1352,
     1348, 1367,    0, 1354, 1358, 1357, 1358, 1371, 1375, 1376,
     1370,    0, 1368, 1369, 1384, 1367,    0,    0, 1382,    0,
        0, 1376, 1384, 1378, 1386, 1387, 1393,    0, 1431, 1432,
     1482,    0,    0, 1384, 1388, 1386,    0, 1394, 1391, 1400,
     1398,    0, 1383, 1390, 1393, 1402, 1403, 1403,    0,    0,

     1404, 1396, 1393, 1391,    0, 1389,    0, 1396,    0, 1409,
        0, 1396, 1416, 1515, 1446, 1414, 1405, 1416,    0, 1403,
     1403, 1412, 1420, 1406,    0,    0, 1415, 1420,    0,    0,
     1424, 1418, 1411, 1414, 1424,    0, 1416, 1463,    0, 1436,
     1423, 1425, 1419, 1435, 1436,    0, 1437, 1438, 1443,    0,
     1425, 1446, 1432, 1424, 1435, 1548,    0, 1451,    0,    0,
     1445,    0,    0, 1427,    0, 1430,    0, 1445, 1436,    0,
     1454, 1581,    0, 1449, 1466, 1458, 1453, 1465, 1474,    0,
        0, 1462, 1614,    0, 1458, 1460, 1476,    0, 1465, 1467,
     1475, 1647, 1524, 1492, 1489, 1478, 1486, 1501, 2487, 1534,

        0, 1489, 1507, 1509,    0, 1498, 1680,    0, 1502, 1500,
     1510, 1509, 1713,    0, 1514, 1520, 1522,    0, 1746,    0,
     1519, 1510, 1532, 1779, 1566, 1530, 1535, 1538, 1570,    0,
     1517,    0, 1533, 1812,    0, 1540,    0, 1845,    0,    0,
     1878,    0, 1911,    0, 1944,    0, 1977,    0, 2010,    0,
     2043,    0, 2076,    0, 2109,    0, 2142,    0, 2175, 2487,
     1597, 2487, 2487, 2220, 2224, 2228, 2232, 2236, 2238, 2242,
     2246, 2250, 1582, 2254, 1583, 1584, 1598, 1600, 2258, 1606,
     1607, 1608, 1609, 1610, 1611, 1612, 1613, 2262, 1614, 1615,
     1616, 1617, 1631, 1632, 1633, 1638, 1639, 1640, 1641, 1642,

     1643, 1644, 1645, 1646, 1647, 1648
    } ;

static const flex_int16_t yy_def[1507] =
    {   0,
     1463,    1,    1,    3, 1464, 1464, 1465, 1465, 1466, 1466,
     1463, 1463, 1463, 1463, 1463, 1467, 1463, 1468, 1463, 1463,
     1463,   21, 1463, 1463, 1463, 1469, 1469, 1469, 1469, 1469,
     1469, 1463, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1463, 1463, 1463, 1469, 1467, 1463,   57, 1469,   59,
     1463,   59,   59,   59,   59,   59,   59, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1463, 1463, 1463, 1463, 1470, 1471, 1472, 1472, 1472, 1463,
     1467, 1463, 1467, 1463, 1468, 1463, 1468, 1463, 1463, 1463,

       21, 1463, 1463, 1473, 1463, 1463, 1463, 1463, 1463, 1469,
     1469, 1474, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1463, 1463, 1463,
     1463, 1463, 1463, 1469,   56, 1463, 1475, 1469,  168,  168,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
      168,  168, 1469, 1469,  168, 1469, 1469, 1469, 1469, 1469,
     1469, 1469,  168, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1463, 1463, 1463, 1463, 1463, 1470, 1471, 1463, 1471,
     1472, 1472, 1472, 1463, 1463, 1463, 1463, 1473, 1469, 1474,
     1463, 1474, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1463, 1463, 1469,   56, 1463, 1476,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469,  321, 1469, 1469, 1469, 1469,
      321,  321, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1463, 1472, 1472, 1463, 1463,
     1463, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1463, 1463, 1469,   56, 1463, 1477, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469,  480, 1469, 1469, 1469, 1469,

     1469, 1469,  480, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1472,
     1472, 1463, 1463, 1463, 1463, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1463,
     1463, 1469,   56, 1463, 1478, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1472, 1479, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1463, 1463, 1469,   56, 1463, 1480,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1472, 1479, 1479, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1463, 1463, 1469,   56, 1463,
     1481, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1472,
     1479, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1463, 1463,
     1469,   56, 1463, 1463, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1472, 1479, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1463,

     1469,   56, 1482, 1013, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1472, 1479, 1463, 1463, 1469, 1469, 1469,
     1469, 1469, 1463, 1469,   56, 1483, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1472, 1479, 1469, 1469, 1469, 1469,
     1463, 1469,   56, 1484, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1479, 1469, 1469, 1469, 1463, 1463,
       56, 1485, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,

     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1479,
     1469, 1469, 1463,   56, 1463, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1479, 1469, 1463, 1102, 1486, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1469, 1469, 1469, 1479, 1463,   56, 1487, 1469, 1469, 1469,
     1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1488,
     1463,   56, 1489, 1469, 1469, 1469, 1469, 1469, 1469, 1469,
     1488, 1463,   56, 1490, 1469, 1469, 1469, 1469, 1469, 1469,
     1463,   56, 1463, 1469, 1469, 1469, 1469, 1469, 1463, 1102,

     1491, 1469, 1469, 1469, 1469, 1469,   56, 1492, 1469, 1469,
     1469, 1469,   56, 1493, 1469, 1469, 1469, 1469,   56, 1494,
     1469, 1469, 1469,   56, 1463, 1469, 1469, 1469, 1102, 1495,
     1469, 1469, 1469,   56, 1496, 1469, 1469,   56, 1497, 1469,
       56, 1498,   56, 1499,   56, 1500,   56, 1501,   56, 1502,
       56, 1503,   56, 1504,   56, 1505,   56, 1506,   56, 1463,
     1102, 1463,    0, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,

     1463, 1463, 1463, 1463, 1463, 1463
    } ;

static const flex_int16_t yy_nxt[2554] =
    {   0,
       12,   13,   14,   15,   16,   12,   17,   18,   12,   12,
       19,   20,   21,   22,   22,   22,   22,   22,   22,   23,
       24,   25,   26,   26,   26,   27,   26,   28,   29,   26,
       30,   31,   26,   26,   26,   32,   12,   12,   33,   34,
       35,   36,   37,   38,   39,   26,   40,   41,   26,   26,
       42,   43,   44,   26,   45,   26,   46,   47,   48,   49,
       50,   51,   26,   26,   26,   52,   53,   81,   92,   96,
       54,   82,   84,   84,   84,   84,   84,   84,   84,   84,
       84,   84,   84,   84,   84,   84, 1463,  105,  106,  122,
       83,  129,   83,  108,  109,  130,  136,  256,   97,  123,

       93,  131,  116,  132,  142,  117,  140,  133,  118,  138,
      139,  257,  141,  134,  143, 1463,   55,   56,  119,  365,
      137,  120,  366,  145,  256,   57,   58,   58,   58,   58,
       58,   58,  147,  162,  257,   59,   59,   59,   60,   88,
      146,   88,  242,   26,  306,  162,  243,  307,  148,   89,
       61,   89,   62,   63,   64,   65,   66,   67,  159,   68,
       69,  308,  160,   70,   71,   72,   73,   74,  851,   75,
       76,   77,   78,   79,   80,  100,  101,  101,  101,  101,
      101,  101,  101,  142, 1463,  124,  163,  164,  125,  149,
      150,  102,  126,  143,  151,  299,  103,  104,  163,  127,

      128,  152,   96,  157,  153,  300,  170,  852,  161,  241,
      171,  249,  177, 1463,  102,  172,  144,  173,  178,  174,
      212,  179,  175,  103,  176,  197,  104,   92,  180,  198,
      213,   97,  311,  199,  231,  165,  165,  165,  165,  165,
      165,  165,  312,  250,  232,  165,  165,  165,  165,  137,
      190,  154,   92, 1463,  133,  292,  371,  225,  191,   93,
      192,  226,  165,  165,  165,  165,  165,  165,  166,  166,
      166,  166,  166,  166,  166,  275,  853,  148,  167,  167,
      167,  167, 1463,  102,   93,  261,  276,  181,  103,  104,
      182,  220,  372,  303,  126,  167,  167,  167,  167,  167,

      167,  183,  128,  293,  233,  221,  102,  184,  222,  234,
      223,  224,  304,  162,  235,  103,  236,  262,  104,  168,
      168,  168,  168,  168,  168,  168,  193,  335,  290,  168,
      168,  168,  168,  205,  272,  206,  291,  194,  498,  207,
      195,  499,  323,  196,  324,  208,  168,  168,  168,  168,
      168,  168,  185,  209,  854,  200,  186,  210,  201,  187,
      202,  214,  188,  215,  203,  204,  163,  143,  189,  237,
      117,  216,  211,  118,  270,  217,  266,  149,  227,  332,
      218,  219,  151,  119,  228,  278,  120,  159,  279,  229,
      327,  160,  230,  378,  280,  238,  275,  337,  269,  239,

      245,  346,  855,  240,  379,  328,  338,  339,  282,  156,
      380,  246,  246,  246,  246,  246,  246,  246,  255,  255,
      255,  255,  255,  255,  255,  373,  348,  249,  349,  350,
      375,  294,  374,  387,  297,  248,  584,  161,  318,  318,
      318,  318,  318,  318,  318,  351,  283,  353,  318,  318,
      318,  318,  408,  242,  714,  261,  420,  243,  616,  250,
      354,  421,  312,  584,  285,  318,  318,  318,  318,  318,
      318,  319,  319,  319,  319,  319,  319,  319,  356,  420,
      484,  320,  320,  320,  320, 1463,  102,  262,  421,  303,
      437,  103,  286,  502,  367,  485,  399,  856,  320,  320,

      320,  320,  320,  320,  341,  857,  290,  342,  400,  102,
      368,  435,  500,  280,  291,  566,  585,  343,  103,  321,
      321,  321,  321,  321,  321,  321,  858,  467,  564,  321,
      321,  321,  321,  528,  565,  859,  448,  393,  470,  585,
      571,  402,  394,  299,  307,  505,  321,  321,  321,  321,
      321,  321,  395,  396,  245,  397,  398,  650,  403,  651,
      506,  540,  541,  860,  542,  246,  246,  246,  246,  246,
      246,  246,  255,  255,  255,  255,  255,  255,  255,  550,
      572,  573,  654,  599,  419,  700,  661,  701,  551,  861,
      722,  614,  552,  706,  812,  655,  553,  675,  799,  862,

      676,  723,  707,  419,  477,  477,  477,  477,  477,  477,
      477,  813,  800,  677,  477,  477,  477,  477,  582,  582,
      863,  583,  583,  583,  583,  583,  583,  583,  864,  718,
      865,  477,  477,  477,  477,  477,  477,  478,  478,  478,
      478,  478,  478,  478,  620,  866,  867,  479,  479,  479,
      479,  739,  102,  868,  740,  869,  870,  103,  871,  872,
      873,  874,  875,  876,  479,  479,  479,  479,  479,  479,
      878,  879,  880,  881,  882,  102,  583,  583,  583,  583,
      583,  583,  583,  883,  103,  480,  480,  480,  480,  480,
      480,  480,  884,  885,  886,  480,  480,  480,  480,  887,

      888,  889,  890,  891,  892,  893,  894,  895,  896,  897,
      898,  899,  480,  480,  480,  480,  480,  480,  633,  633,
      633,  633,  633,  633,  633,  900,  901,  902,  633,  633,
      633,  633,  903,  904,  905,  906,  907,  908,  913,  914,
      915,  916,  917,  918,  919,  633,  633,  633,  633,  633,
      633,  634,  634,  634,  634,  634,  634,  634,  920,  921,
      922,  635,  635,  635,  635,  923,  102,  924,  925,  926,
      927,  103,  928,  929,  930,  931,  932,  933,  635,  635,
      635,  635,  635,  635,  934,  935,  936,  937,  938,  102,
      939,  940,  941,  942,  943,  944,  945,  892,  103,  636,

      636,  636,  636,  636,  636,  636,  946,  947,  948,  636,
      636,  636,  636,  583,  583,  583,  583,  583,  583,  583,
      949,  950,  951,  952,  953,  419,  636,  636,  636,  636,
      636,  636,  954,  955,  956,  957,  958,  959,  960,  961,
      962,  963,  964,  965,  419,  778,  778,  778,  778,  778,
      778,  778,  966,  967,  968,  778,  778,  778,  778,  969,
      970,  971,  972,  973,  974,  975,  976,  977,  978,  979,
      980,  981,  778,  778,  778,  778,  778,  778,  779,  779,
      779,  779,  779,  779,  779,  982,  983,  984,  780,  780,
      780,  780,  985,  102,  986,  987,  988,  989,  103,  990,

      878,  992,  993,  994,  995,  780,  780,  780,  780,  780,
      780,  996,  997,  998,  999, 1000,  102, 1001, 1002, 1003,
     1004, 1005, 1006, 1007, 1008,  103,  781,  781,  781,  781,
      781,  781,  781, 1009, 1010, 1011,  781,  781,  781,  781,
     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
     1026,  991, 1027,  781,  781,  781,  781,  781,  781,  909,
      909,  909,  909,  909,  909,  909, 1028, 1029, 1030,  909,
      909,  909,  909, 1031, 1032, 1036, 1037, 1038, 1039, 1033,
     1034, 1040, 1041, 1042, 1043, 1044,  909,  909,  909,  909,
      909,  909,  910,  910,  910,  910,  910,  910,  910, 1035,

     1045, 1046,  911,  911,  911,  911, 1047,  102, 1048, 1049,
     1050, 1051,  103, 1052, 1053, 1054, 1055, 1056, 1057,  911,
      911,  911,  911,  911,  911, 1058, 1059, 1060, 1061, 1062,
      102, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070,  103,
      912,  912,  912,  912,  912,  912,  912, 1071, 1072, 1073,
      912,  912,  912,  912, 1074, 1075, 1076, 1079, 1080, 1081,
     1082, 1083, 1084, 1085, 1086, 1087, 1088,  912,  912,  912,
      912,  912,  912, 1012, 1012, 1012, 1012, 1012, 1012, 1012,
     1077, 1089, 1090, 1012, 1012, 1012, 1012, 1091, 1092, 1093,
     1094, 1078, 1095, 1096, 1097, 1098, 1099, 1100, 1010, 1101,

     1012, 1012, 1012, 1012, 1012, 1012, 1013, 1013, 1013, 1013,
     1013, 1013, 1013, 1103, 1103, 1105, 1014, 1014, 1014, 1014,
     1106,  102, 1107, 1108, 1109, 1110,  103, 1111, 1112, 1113,
     1114, 1115, 1116, 1014, 1014, 1014, 1014, 1014, 1014, 1117,
     1118, 1119, 1120, 1121,  102, 1123, 1124, 1125, 1126, 1127,
     1128, 1129, 1130,  103, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1131, 1122, 1132, 1015, 1015, 1015, 1015, 1133, 1134,
     1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144,
     1145, 1015, 1015, 1015, 1015, 1015, 1015, 1102, 1102, 1102,
     1102, 1102, 1102, 1102, 1146, 1147, 1148, 1102, 1102, 1102,

     1102, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157,
     1158, 1159, 1160, 1161, 1102, 1102, 1102, 1102, 1102, 1102,
     1103, 1162, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1163,
     1164, 1165, 1166, 1168, 1169, 1170, 1171,  102, 1172, 1167,
     1173, 1174,  103, 1463, 1177, 1178, 1179, 1180, 1181, 1182,
     1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192,
      102, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200,  103,
     1175, 1201,   91,   91,   91,   91,   91,   91,   91, 1202,
     1203, 1204,   91,   91,   91,   91, 1205, 1206, 1207, 1208,
     1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217,   91,

       91,   91,   91,   91,   91, 1218, 1219, 1220, 1221, 1222,
     1223, 1224, 1225, 1226, 1166, 1227, 1228, 1229, 1230, 1231,
     1232, 1167, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1235,
     1236, 1237, 1233, 1233, 1233, 1233, 1238, 1239, 1240, 1241,
     1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1233,
     1233, 1233, 1233, 1233, 1233, 1251, 1252, 1253, 1254, 1255,
     1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265,
     1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275,
     1276, 1277, 1278, 1279, 1280, 1281, 1281, 1281, 1281, 1281,
     1281, 1281, 1283, 1284, 1285, 1281, 1281, 1281, 1281, 1286,

     1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296,
     1297, 1298, 1281, 1281, 1281, 1281, 1281, 1281, 1299, 1300,
     1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310,
     1311, 1312, 1280, 1280, 1316, 1317, 1318, 1319, 1320, 1321,
     1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331,
     1332, 1333, 1334, 1335, 1336, 1337, 1339, 1340, 1341, 1342,
     1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352,
     1353, 1354, 1355, 1356, 1358, 1359, 1360, 1361, 1362, 1363,
     1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1376, 1377,
     1378, 1379, 1380, 1313, 1314, 1314, 1314, 1314, 1314, 1314,

     1314, 1382, 1385, 1374, 1314, 1314, 1314, 1314, 1375, 1386,
     1387, 1388, 1389, 1390, 1391, 1394, 1395, 1396, 1397, 1398,
     1399, 1314, 1314, 1314, 1314, 1314, 1314, 1338, 1338, 1338,
     1338, 1338, 1338, 1338, 1401, 1402, 1403, 1338, 1338, 1338,
     1338, 1404, 1405, 1406, 1407, 1409, 1410, 1411, 1412, 1415,
     1416, 1417, 1418, 1421, 1338, 1338, 1338, 1338, 1338, 1338,
     1372, 1372, 1372, 1372, 1372, 1372, 1372, 1422, 1423, 1426,
     1372, 1372, 1372, 1372, 1427, 1428, 1430, 1431, 1432, 1433,
     1434, 1436, 1437, 1440,  258,  320,  479, 1372, 1372, 1372,
     1372, 1372, 1372, 1383, 1383, 1383, 1383, 1383, 1383, 1383,

      635, 1462,  780, 1383, 1383, 1383, 1383,   91,  911, 1014,
     1176, 1234, 1282, 1315, 1357, 1373, 1384, 1393, 1408, 1414,
     1383, 1383, 1383, 1383, 1383, 1383, 1392, 1392, 1392, 1392,
     1392, 1392, 1392, 1420, 1425, 1435, 1392, 1392, 1392, 1392,
     1439, 1442, 1444, 1446, 1448, 1450, 1452, 1454, 1456, 1458,
     1460,  850,  849, 1392, 1392, 1392, 1392, 1392, 1392, 1400,
     1400, 1400, 1400, 1400, 1400, 1400,  848,  847,  846, 1400,
     1400, 1400, 1400,  845,  844,  843,  842,  841,  840,  839,
      838,  837,  836,  835,  834,  833, 1400, 1400, 1400, 1400,
     1400, 1400, 1413, 1413, 1413, 1413, 1413, 1413, 1413,  832,

      831,  830, 1413, 1413, 1413, 1413,  829,  828,  827,  826,
      825,  824,  823,  822,  821,  820,  819,  818,  817, 1413,
     1413, 1413, 1413, 1413, 1413, 1419, 1419, 1419, 1419, 1419,
     1419, 1419,  816,  815,  814, 1419, 1419, 1419, 1419,  811,
      810,  809,  808,  807,  806,  805,  804,  803,  802,  801,
      798,  797, 1419, 1419, 1419, 1419, 1419, 1419, 1424, 1424,
     1424, 1424, 1424, 1424, 1424,  796,  795,  794, 1424, 1424,
     1424, 1424,  793,  792,  791,  790,  789,  788,  787,  786,
      785,  784,  783,  782,  777, 1424, 1424, 1424, 1424, 1424,
     1424, 1429, 1429, 1429, 1429, 1429, 1429, 1429,  776,  775,

      774, 1429, 1429, 1429, 1429,  773,  772,  771,  770,  769,
      768,  767,  766,  765,  764,  763,  762,  761, 1429, 1429,
     1429, 1429, 1429, 1429, 1438, 1438, 1438, 1438, 1438, 1438,
     1438,  760,  759,  758, 1438, 1438, 1438, 1438,  757,  756,
      755,  754,  753,  752,  751,  750,  749,  748,  747,  746,
      745, 1438, 1438, 1438, 1438, 1438, 1438, 1441, 1441, 1441,
     1441, 1441, 1441, 1441,  744,  743,  742, 1441, 1441, 1441,
     1441,  741,  738,  737,  736,  735,  734,  733,  732,  731,
      730,  729,  728,  727, 1441, 1441, 1441, 1441, 1441, 1441,
     1443, 1443, 1443, 1443, 1443, 1443, 1443,  726,  725,  724,

     1443, 1443, 1443, 1443,  721,  720,  719,  717,  716,  715,
      713,  712,  711,  710,  709,  708,  705, 1443, 1443, 1443,
     1443, 1443, 1443, 1445, 1445, 1445, 1445, 1445, 1445, 1445,
      704,  703,  702, 1445, 1445, 1445, 1445,  699,  698,  697,
      696,  695,  694,  693,  692,  691,  690,  689,  688,  687,
     1445, 1445, 1445, 1445, 1445, 1445, 1447, 1447, 1447, 1447,
     1447, 1447, 1447,  686,  685,  684, 1447, 1447, 1447, 1447,
      683,  682,  681,  680,  679,  678,  674,  673,  672,  671,
      670,  669,  668, 1447, 1447, 1447, 1447, 1447, 1447, 1449,
     1449, 1449, 1449, 1449, 1449, 1449,  667,  666,  665, 1449,

     1449, 1449, 1449,  664,  663,  662,  660,  659,  658,  657,
      656,  653,  652,  592,  649,  648, 1449, 1449, 1449, 1449,
     1449, 1449, 1451, 1451, 1451, 1451, 1451, 1451, 1451,  647,
      646,  645, 1451, 1451, 1451, 1451,  644,  643,  642,  641,
      640,  639,  638,  637,  632,  631,  630,  629,  628, 1451,
     1451, 1451, 1451, 1451, 1451, 1453, 1453, 1453, 1453, 1453,
     1453, 1453,  627,  626,  625, 1453, 1453, 1453, 1453,  624,
      623,  622,  621,  620,  619,  618,  617,  616,  615,  614,
      613,  612, 1453, 1453, 1453, 1453, 1453, 1453, 1455, 1455,
     1455, 1455, 1455, 1455, 1455,  611,  610,  609, 1455, 1455,

     1455, 1455,  608,  607,  606,  605,  604,  603,  602,  601,
      600,  599,  598,  597,  596, 1455, 1455, 1455, 1455, 1455,
     1455, 1457, 1457, 1457, 1457, 1457, 1457, 1457,  595,  594,
      593, 1457, 1457, 1457, 1457,  592,  591,  590,  589,  588,
      587,  586,  581,  580,  416,  579,  578,  577, 1457, 1457,
     1457, 1457, 1457, 1457, 1459, 1459, 1459, 1459, 1459, 1459,
     1459,  576,  575,  574, 1459, 1459, 1459, 1459,  570,  569,
      568,  567,  563,  562,  561,  560,  559,  558,  557,  556,
      555, 1459, 1459, 1459, 1459, 1459, 1459, 1461, 1461, 1461,
     1461, 1461, 1461, 1461,  554,  549,  548, 1461, 1461, 1461,

     1461,  547,  546,  545,  544,  543,  539,  538,  537,  536,
      535,  534,  533,  532, 1461, 1461, 1461, 1461, 1461, 1461,
       83,   83,   83,   83,   85,   85,   85,   85,   87,   87,
       87,   87,   91,   91,   91,   91,   95,   95,   95,   95,
      110,  110,  247,  531,  247,  247,  248,  530,  248,  248,
      251,  529,  251,  251,  260,  260,  260,  260,  877,  527,
      877,  877, 1381,  526, 1381, 1381,  525,  524,  523,  522,
      521,  520,  519,  518,  517,  516,  515,  514,  513,  512,
      511,  510,  509,  508,  507,  504,  503,  501,  497,  496,
      495,  494,  493,  492,  491,  490,  489,  488,  487,  486,

      483,  482,  481,  476,  475,  474,  473,  472,  471,  470,
      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
      459,  458,  457,  456,  455,  454,  453,  452,  451,  450,
      449,  448,  447,  446,  445,  444,  443,  442,  441,  440,
      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,
      429,  428,  307,  427,  426,  425,  424,  423, 1463,  422,
      418,  417,  416,  245,  244,  244,  415,  414,  413,  412,
      411,  410,  409,  407,  406,  405,  404,  401,  392,  391,
      390,  389,  388,  386,  385,  384,  383,  382,  381,  377,
      376,  370,  369,  364,  363,  362,  361,  360,  359,  358,

      357,  355,  352,  347,  345,  344,  340,  336,  334,  333,
      331,  330,  329,  326,  325,  322,  259,  317,  316,  315,
      314,  313,  310,  309,  305,  302,  301,  298,  297,  296,
      295,  294,  293,  292,  289,  288,  287,  286,  285,  284,
      283,  282,  281,  277,  274,  273,  272,  271,  270,  269,
      268,  145,  267,  125,  265,  264,  263,  259,  254, 1463,
     1463,  253,  252,  244,  169,  158,  157,  156,  155,  154,
      144,  135,  121,  115,  114,  113,  112,  111,  107,   99,
       98,   94,   90, 1463,   86,   86,   11, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,

     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463
    } ;

static const flex_int16_t yy_chk[2554] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    2,    4,   16,   18,
        2,    4,    5,    5,    5,    5,    5,    5,    5,    6,
        6,    6,    6,    6,    6,    6,   22,   23,   23,   35,
        9,   37,   10,   25,   25,   37,   40,  102,   18,   35,

       16,   37,   33,   38,   43,   33,   42,   38,   33,   41,
       41,  103,   42,   38,   43,   22,    2,    3,   33,  203,
       40,   33,  203,   45,  102,    3,    3,    3,    3,    3,
        3,    3,   46,   54,  103,    3,    3,    3,    3,    9,
       45,   10,   81,    3,  152,  160,   81,  152,   46,    9,
        3,   10,    3,    3,    3,    3,    3,    3,   53,    3,
        3,  152,   53,    3,    3,    3,    3,    3,  710,    3,
        3,    3,    3,    3,    3,   21,   21,   21,   21,   21,
       21,   21,   21,   55,   58,   36,   54,   55,   36,   47,
       47,   21,   36,   55,   47,  147,   21,   21,  160,   36,

       36,   47,   95,   80,   47,  147,   62,  712,   53,   80,
       62,   86,   63,   58,   21,   62,   72,   62,   63,   62,
       72,   63,   62,   21,   62,   68,   21,   56,   63,   68,
       72,   95,  155,   68,   77,   56,   56,   56,   56,   56,
       56,   56,  155,   86,   77,   56,   56,   56,   56,   68,
       66,   77,   91,  101,   66,  207,  207,   75,   66,   56,
       66,   75,   56,   56,   56,   56,   56,   56,   57,   57,
       57,   57,   57,   57,   57,  127,  713,   75,   57,   57,
       57,   57,  101,   57,   91,  112,  127,   64,   57,   57,
       64,   74,  208,  150,   64,   57,   57,   57,   57,   57,

       57,   64,   64,  208,   78,   74,   57,   64,   74,   78,
       74,   74,  150,  162,   78,   57,   78,  112,   57,   59,
       59,   59,   59,   59,   59,   59,   67,  181,  139,   59,
       59,   59,   59,   70,  181,   70,  139,   67,  338,   70,
       67,  338,  171,   67,  171,   70,   59,   59,   59,   59,
       59,   59,   65,   71,  714,   69,   65,   71,   69,   65,
       69,   73,   65,   73,   69,   69,  162,   71,   65,   79,
      116,   73,   71,  116,  178,   73,  116,   76,   76,  178,
       73,   73,   76,  116,   76,  129,  116,  159,  129,   76,
      174,  159,   76,  213,  129,   79,  183,  183,  174,   79,

       84,  188,  715,   79,  213,  174,  183,  183,  188,   79,
      213,   84,   84,   84,   84,   84,   84,   84,  100,  100,
      100,  100,  100,  100,  100,  209,  190,  248,  190,  190,
      210,  210,  209,  220,  220,  250,  420,  159,  165,  165,
      165,  165,  165,  165,  165,  190,  190,  192,  165,  165,
      165,  165,  234,  242,  558,  260,  258,  242,  558,  248,
      192,  258,  234,  420,  192,  165,  165,  165,  165,  165,
      165,  166,  166,  166,  166,  166,  166,  166,  194,  258,
      325,  166,  166,  166,  166,  250,  166,  260,  258,  227,
      341,  166,  194,  341,  204,  325,  227,  716,  166,  166,

      166,  166,  166,  166,  185,  717,  204,  185,  227,  166,
      204,  339,  339,  185,  204,  403,  421,  185,  166,  168,
      168,  168,  168,  168,  168,  168,  718,  403,  402,  168,
      168,  168,  168,  366,  402,  719,  366,  226,  408,  421,
      408,  229,  226,  226,  229,  344,  168,  168,  168,  168,
      168,  168,  226,  226,  246,  226,  226,  495,  229,  495,
      344,  379,  379,  720,  379,  246,  246,  246,  246,  246,
      246,  246,  255,  255,  255,  255,  255,  255,  255,  389,
      409,  409,  500,  506,  255,  546,  506,  546,  389,  721,
      566,  551,  389,  551,  668,  500,  389,  522,  655,  722,

      522,  566,  551,  255,  318,  318,  318,  318,  318,  318,
      318,  668,  655,  522,  318,  318,  318,  318,  419,  419,
      723,  419,  419,  419,  419,  419,  419,  419,  724,  562,
      725,  318,  318,  318,  318,  318,  318,  319,  319,  319,
      319,  319,  319,  319,  562,  726,  727,  319,  319,  319,
      319,  588,  319,  728,  588,  729,  730,  319,  731,  732,
      733,  734,  735,  736,  319,  319,  319,  319,  319,  319,
      737,  738,  739,  740,  741,  319,  582,  582,  582,  582,
      582,  582,  582,  742,  319,  321,  321,  321,  321,  321,
      321,  321,  743,  744,  745,  321,  321,  321,  321,  746,

      747,  748,  749,  751,  753,  754,  756,  757,  758,  760,
      762,  763,  321,  321,  321,  321,  321,  321,  477,  477,
      477,  477,  477,  477,  477,  764,  765,  769,  477,  477,
      477,  477,  772,  773,  774,  775,  776,  777,  782,  783,
      784,  785,  786,  787,  788,  477,  477,  477,  477,  477,
      477,  478,  478,  478,  478,  478,  478,  478,  789,  790,
      791,  478,  478,  478,  478,  792,  478,  793,  794,  795,
      796,  478,  797,  798,  799,  800,  803,  804,  478,  478,
      478,  478,  478,  478,  805,  806,  807,  808,  809,  478,
      811,  812,  813,  814,  815,  816,  817,  818,  478,  480,

      480,  480,  480,  480,  480,  480,  819,  820,  821,  480,
      480,  480,  480,  583,  583,  583,  583,  583,  583,  583,
      823,  826,  827,  828,  829,  583,  480,  480,  480,  480,
      480,  480,  830,  831,  832,  833,  834,  836,  837,  838,
      839,  841,  842,  843,  583,  633,  633,  633,  633,  633,
      633,  633,  844,  845,  846,  633,  633,  633,  633,  848,
      849,  850,  852,  853,  854,  855,  857,  858,  860,  862,
      864,  865,  633,  633,  633,  633,  633,  633,  634,  634,
      634,  634,  634,  634,  634,  866,  867,  869,  634,  634,
      634,  634,  870,  634,  871,  873,  874,  875,  634,  876,

      878,  879,  880,  882,  883,  634,  634,  634,  634,  634,
      634,  886,  889,  890,  891,  892,  634,  893,  894,  897,
      898,  899,  900,  901,  904,  634,  636,  636,  636,  636,
      636,  636,  636,  906,  907,  908,  636,  636,  636,  636,
      913,  914,  915,  916,  917,  918,  919,  920,  921,  922,
      923,  878,  924,  636,  636,  636,  636,  636,  636,  778,
      778,  778,  778,  778,  778,  778,  926,  927,  928,  778,
      778,  778,  778,  929,  930,  933,  934,  935,  937,  932,
      932,  938,  939,  940,  941,  942,  778,  778,  778,  778,
      778,  778,  779,  779,  779,  779,  779,  779,  779,  932,

      943,  944,  779,  779,  779,  779,  945,  779,  946,  947,
      948,  949,  779,  950,  951,  953,  954,  955,  956,  779,
      779,  779,  779,  779,  779,  959,  960,  961,  962,  963,
      779,  964,  965,  966,  967,  968,  970,  971,  972,  779,
      781,  781,  781,  781,  781,  781,  781,  973,  974,  975,
      781,  781,  781,  781,  976,  978,  979,  981,  982,  983,
      984,  985,  988,  989,  990,  991,  992,  781,  781,  781,
      781,  781,  781,  909,  909,  909,  909,  909,  909,  909,
      980,  993,  994,  909,  909,  909,  909,  995,  996,  998,
      999,  980, 1001, 1002, 1003, 1004, 1007, 1009, 1010, 1011,

      909,  909,  909,  909,  909,  909,  910,  910,  910,  910,
      910,  910,  910, 1014, 1015, 1016,  910,  910,  910,  910,
     1017,  910, 1018, 1020, 1021, 1022,  910, 1023, 1024, 1026,
     1027, 1029, 1030,  910,  910,  910,  910,  910,  910, 1031,
     1032, 1033, 1034, 1035,  910, 1036, 1037, 1038, 1039, 1040,
     1043, 1044, 1045,  910,  912,  912,  912,  912,  912,  912,
      912, 1046, 1035, 1047,  912,  912,  912,  912, 1048, 1050,
     1051, 1052, 1053, 1054, 1055, 1057, 1058, 1059, 1060, 1061,
     1062,  912,  912,  912,  912,  912,  912, 1012, 1012, 1012,
     1012, 1012, 1012, 1012, 1066, 1067, 1068, 1012, 1012, 1012,

     1012, 1069, 1071, 1072, 1073, 1074, 1076, 1077, 1078, 1079,
     1080, 1081, 1082, 1083, 1012, 1012, 1012, 1012, 1012, 1012,
     1013, 1084, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1085,
     1086, 1087, 1088, 1091, 1093, 1094, 1098, 1013, 1099, 1088,
     1100, 1101, 1013, 1104, 1105, 1106, 1108, 1111, 1112, 1114,
     1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124,
     1013, 1125, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1013,
     1102, 1134, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1135,
     1136, 1137, 1102, 1102, 1102, 1102, 1138, 1140, 1141, 1142,
     1143, 1144, 1145, 1146, 1147, 1148, 1150, 1151, 1152, 1102,

     1102, 1102, 1102, 1102, 1102, 1153, 1154, 1156, 1158, 1160,
     1161, 1163, 1164, 1165, 1166, 1168, 1169, 1170, 1172, 1173,
     1174, 1166, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1177,
     1178, 1181, 1175, 1175, 1175, 1175, 1183, 1185, 1186, 1187,
     1188, 1189, 1190, 1192, 1193, 1194, 1195, 1196, 1197, 1175,
     1175, 1175, 1175, 1175, 1175, 1198, 1199, 1200, 1201, 1201,
     1203, 1204, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213,
     1215, 1216, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1226,
     1228, 1229, 1230, 1231, 1232, 1233, 1233, 1233, 1233, 1233,
     1233, 1233, 1236, 1239, 1240, 1233, 1233, 1233, 1233, 1242,

     1243, 1244, 1245, 1247, 1250, 1251, 1252, 1254, 1255, 1256,
     1257, 1258, 1233, 1233, 1233, 1233, 1233, 1233, 1259, 1260,
     1261, 1263, 1264, 1265, 1266, 1269, 1272, 1273, 1274, 1275,
     1276, 1277, 1279, 1280, 1284, 1285, 1286, 1288, 1289, 1290,
     1291, 1293, 1294, 1295, 1296, 1297, 1298, 1301, 1302, 1303,
     1304, 1306, 1308, 1310, 1312, 1313, 1315, 1316, 1317, 1318,
     1320, 1321, 1322, 1323, 1324, 1327, 1328, 1331, 1332, 1333,
     1334, 1335, 1337, 1338, 1340, 1341, 1342, 1343, 1344, 1345,
     1347, 1348, 1349, 1351, 1352, 1353, 1354, 1355, 1361, 1364,
     1366, 1368, 1369, 1280, 1281, 1281, 1281, 1281, 1281, 1281,

     1281, 1371, 1374, 1358, 1281, 1281, 1281, 1281, 1358, 1375,
     1376, 1377, 1378, 1379, 1382, 1385, 1386, 1387, 1389, 1390,
     1391, 1281, 1281, 1281, 1281, 1281, 1281, 1314, 1314, 1314,
     1314, 1314, 1314, 1314, 1393, 1394, 1395, 1314, 1314, 1314,
     1314, 1396, 1397, 1398, 1400, 1402, 1403, 1404, 1406, 1409,
     1410, 1411, 1412, 1415, 1314, 1314, 1314, 1314, 1314, 1314,
     1356, 1356, 1356, 1356, 1356, 1356, 1356, 1416, 1417, 1421,
     1356, 1356, 1356, 1356, 1422, 1423, 1425, 1426, 1427, 1428,
     1429, 1431, 1433, 1436, 1473, 1475, 1476, 1356, 1356, 1356,
     1356, 1356, 1356, 1372, 1372, 1372, 1372, 1372, 1372, 1372,

     1477, 1461, 1478, 1372, 1372, 1372, 1372, 1461, 1480, 1481,
     1482, 1483, 1484, 1485, 1486, 1487, 1489, 1490, 1491, 1492,
     1372, 1372, 1372, 1372, 1372, 1372, 1383, 1383, 1383, 1383,
     1383, 1383, 1383, 1493, 1494, 1495, 1383, 1383, 1383, 1383,
     1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505,
     1506,  708,  707, 1383, 1383, 1383, 1383, 1383, 1383, 1392,
     1392, 1392, 1392, 1392, 1392, 1392,  706,  705,  704, 1392,
     1392, 1392, 1392,  703,  702,  701,  700,  699,  698,  697,
      696,  695,  694,  693,  692,  691, 1392, 1392, 1392, 1392,
     1392, 1392, 1407, 1407, 1407, 1407, 1407, 1407, 1407,  689,

      687,  686, 1407, 1407, 1407, 1407,  685,  684,  683,  682,
      681,  680,  679,  678,  677,  676,  675,  674,  673, 1407,
     1407, 1407, 1407, 1407, 1407, 1413, 1413, 1413, 1413, 1413,
     1413, 1413,  671,  670,  669, 1413, 1413, 1413, 1413,  666,
      665,  664,  663,  662,  661,  660,  659,  658,  657,  656,
      654,  653, 1413, 1413, 1413, 1413, 1413, 1413, 1419, 1419,
     1419, 1419, 1419, 1419, 1419,  652,  651,  650, 1419, 1419,
     1419, 1419,  649,  648,  647,  646,  645,  644,  643,  642,
      641,  640,  638,  637,  632, 1419, 1419, 1419, 1419, 1419,
     1419, 1424, 1424, 1424, 1424, 1424, 1424, 1424,  631,  630,

      629, 1424, 1424, 1424, 1424,  628,  626,  625,  624,  623,
      622,  620,  619,  617,  616,  615,  614,  613, 1424, 1424,
     1424, 1424, 1424, 1424, 1434, 1434, 1434, 1434, 1434, 1434,
     1434,  612,  611,  610, 1434, 1434, 1434, 1434,  609,  608,
      607,  606,  604,  602,  601,  600,  599,  598,  597,  596,
      595, 1434, 1434, 1434, 1434, 1434, 1434, 1438, 1438, 1438,
     1438, 1438, 1438, 1438,  593,  591,  590, 1438, 1438, 1438,
     1438,  589,  587,  581,  580,  579,  578,  577,  576,  575,
      573,  572,  571,  570, 1438, 1438, 1438, 1438, 1438, 1438,
     1441, 1441, 1441, 1441, 1441, 1441, 1441,  569,  568,  567,

     1441, 1441, 1441, 1441,  565,  564,  563,  561,  560,  559,
      557,  556,  555,  554,  553,  552,  550, 1441, 1441, 1441,
     1441, 1441, 1441, 1443, 1443, 1443, 1443, 1443, 1443, 1443,
      549,  548,  547, 1443, 1443, 1443, 1443,  545,  544,  543,
      542,  541,  540,  539,  538,  537,  536,  535,  534,  533,
     1443, 1443, 1443, 1443, 1443, 1443, 1445, 1445, 1445, 1445,
     1445, 1445, 1445,  532,  530,  529, 1445, 1445, 1445, 1445,
      528,  527,  526,  525,  524,  523,  521,  519,  518,  517,
      516,  515,  514, 1445, 1445, 1445, 1445, 1445, 1445, 1447,
     1447, 1447, 1447, 1447, 1447, 1447,  513,  512,  511, 1447,

     1447, 1447, 1447,  510,  508,  507,  505,  504,  503,  502,
      501,  499,  498,  496,  494,  493, 1447, 1447, 1447, 1447,
     1447, 1447, 1449, 1449, 1449, 1449, 1449, 1449, 1449,  491,
      490,  489, 1449, 1449, 1449, 1449,  488,  487,  486,  485,
      484,  483,  482,  481,  476,  475,  474,  473,  471, 1449,
     1449, 1449, 1449, 1449, 1449, 1451, 1451, 1451, 1451, 1451,
     1451, 1451,  470,  469,  468, 1451, 1451, 1451, 1451,  467,
      466,  465,  464,  463,  462,  461,  460,  459,  458,  457,
      456,  455, 1451, 1451, 1451, 1451, 1451, 1451, 1453, 1453,
     1453, 1453, 1453, 1453, 1453,  454,  453,  451, 1453, 1453,

     1453, 1453,  450,  449,  448,  447,  446,  445,  444,  443,
      441,  440,  439,  438,  437, 1453, 1453, 1453, 1453, 1453,
     1453, 1455, 1455, 1455, 1455, 1455, 1455, 1455,  436,  435,
      434, 1455, 1455, 1455, 1455,  432,  429,  428,  427,  426,
      424,  422,  418,  417,  416,  415,  414,  413, 1455, 1455,
     1455, 1455, 1455, 1455, 1457, 1457, 1457, 1457, 1457, 1457,
     1457,  412,  411,  410, 1457, 1457, 1457, 1457,  407,  406,
      405,  404,  401,  400,  399,  398,  397,  396,  395,  393,
      392, 1457, 1457, 1457, 1457, 1457, 1457, 1459, 1459, 1459,
     1459, 1459, 1459, 1459,  391,  388,  387, 1459, 1459, 1459,

     1459,  386,  384,  383,  381,  380,  378,  377,  375,  374,
      373,  372,  371,  370, 1459, 1459, 1459, 1459, 1459, 1459,
     1464, 1464, 1464, 1464, 1465, 1465, 1465, 1465, 1466, 1466,
     1466, 1466, 1467, 1467, 1467, 1467, 1468, 1468, 1468, 1468,
     1469, 1469, 1470,  369, 1470, 1470, 1471,  368, 1471, 1471,
     1472,  367, 1472, 1472, 1474, 1474, 1474, 1474, 1479,  365,
     1479, 1479, 1488,  364, 1488, 1488,  363,  362,  361,  360,
      359,  358,  357,  356,  355,  354,  353,  352,  351,  350,
      349,  348,  347,  346,  345,  343,  342,  340,  337,  336,
      335,  334,  333,  332,  331,  330,  329,  328,  327,  326,

      324,  323,  322,  317,  316,  315,  314,  313,  312,  311,
      310,  309,  308,  307,  306,  305,  304,  303,  302,  301,
      300,  299,  298,  297,  296,  295,  294,  293,  292,  291,
      290,  289,  288,  287,  286,  285,  284,  283,  282,  281,
      280,  279,  278,  277,  276,  275,  274,  273,  272,  271,
      270,  269,  268,  267,  266,  265,  264,  263,  262,  259,
      253,  252,  249,  245,  244,  243,  241,  240,  239,  238,
      237,  236,  235,  233,  232,  231,  230,  228,  225,  224,
      223,  222,  221,  219,  218,  217,  216,  215,  214,  212,
      211,  206,  205,  202,  201,  200,  199,  198,  197,  196,

      195,  193,  191,  189,  187,  186,  184,  182,  180,  179,
      177,  176,  175,  173,  172,  170,  169,  164,  163,  161,
      157,  156,  154,  153,  151,  149,  148,  146,  145,  144,
      143,  142,  141,  140,  138,  137,  136,  135,  134,  133,
      132,  131,  130,  128,  126,  125,  124,  123,  122,  121,
      120,  119,  118,  117,  115,  114,  113,  111,   99,   97,
       93,   89,   88,   82,   60,   52,   51,   50,   49,   48,
       44,   39,   34,   31,   30,   29,   28,   27,   24,   20,
       19,   17,   15,   11,    8,    7, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,

     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463,
     1463, 1463, 1463
    } ;

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

extern int yy_flex_debug;
int yy_flex_debug = 0;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "tools/widl/parser.l"
/* -*-C-*-
 * IDL Compiler
 *
 * Copyright 2002 Ove Kaaven
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */
#define YY_NO_INPUT 1




#line 38 "tools/widl/parser.l"

#include "config.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <errno.h>
#include <limits.h>
#define YY_NO_UNISTD_H

#include "widl.h"
#include "utils.h"
#include "parser.h"
#include "wpp_private.h"

#define YYerror PARSER_error
#define YYSTYPE PARSER_STYPE
#define YYLTYPE PARSER_LTYPE
#define YYUNDEF PARSER_UNDEF
#define yyerror parser_error

#include "parser.tab.h"

static void reset_location( struct location *where, const char *input_name );
static void update_location( struct location *where, const char *yytext );
static void end_of_line( struct location *where );

#define YY_USER_INIT    reset_location( yylloc, input_name )
#define YY_USER_ACTION  update_location( yylloc, yytext );

static void switch_to_acf(void);

static warning_list_t *disabled_warnings = NULL;

struct import_state
{
    YY_BUFFER_STATE buffer;
    char *input_name;
    struct location where;
    struct list entry;
};
static struct list import_stack = LIST_INIT( import_stack );
int parse_only = 0;

struct import
{
    const char *name;
    struct list entry;
};
static struct list imports = LIST_INIT( imports );
static struct location previous_location;

/* converts an integer in string form to an unsigned long and prints an error
 * on overflow */
static unsigned int xstrtoul(const char *nptr, char **endptr, int base)
{
    unsigned long val;

    errno = 0;
    val = strtoul(nptr, endptr, base);
    if ((val == ULONG_MAX && errno == ERANGE) || ((unsigned int)val != val))
        error_loc("integer constant %s is too large\n", nptr);
    return val;
}

static int token_uuid( const char *str, YYSTYPE *yylval )
{
    struct uuid *uuid;
    char tmp[3] = {0};

    if (*str == '\"') str++;

    uuid = xmalloc( sizeof(*uuid) );
    uuid->Data1 = strtoul( str , NULL, 16 );
    uuid->Data2 = strtoul( str + 9, NULL, 16 );
    uuid->Data3 = strtoul( str + 14, NULL, 16 );
    memcpy( tmp, str + 19, 2 );
    uuid->Data4[0] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 21, 2 );
    uuid->Data4[1] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 24, 2 );
    uuid->Data4[2] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 26, 2 );
    uuid->Data4[3] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 28, 2 );
    uuid->Data4[4] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 30, 2 );
    uuid->Data4[5] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 32, 2 );
    uuid->Data4[6] = strtoul( tmp, NULL, 16 );
    memcpy( tmp, str + 34, 2 );
    uuid->Data4[7] = strtoul( tmp, NULL, 16 );

    yylval->uuid = uuid;
    return aUUID;
}

static int token_str( int token, const char *str, YYSTYPE *yylval )
{
    char *tmp = xstrdup( str );

    if (token == aWSTRING || token == aSTRING || token == aSQSTRING)
    {
        char *src, *dst;
        src = dst = ++tmp; /* skip first quote */
        while (*src)
        {
            if (*src == '\\') src++;
            *dst++ = *src++;
        }
        dst[-1] = 0; /* strip last quote */
    }

    yylval->str = tmp;
    return token;
}

static int token_num( int token, const char *yytext, YYSTYPE *yylval )
{
    yylval->num = xstrtoul( yytext, NULL, 0 );
    return token;
}

static int token_ident( const char *str, YYSTYPE *yylval )
{
    return token_str( is_type( str ) ? aKNOWNTYPE : aIDENTIFIER, str, yylval );
}

static int token_winrt( int token, const char *str, YYSTYPE *yylval )
{
    if (winrt_mode) return token;
    return token_ident( str, yylval );
}

static void winrt_enable( int ns_prefix )
{
    if (!list_empty( &import_stack ) && !winrt_mode) error_loc( "WinRT IDL file imported in non-winrt mode.\n" );

    use_abi_namespace = ns_prefix;
    winrt_mode = TRUE;
}

#line 1953 "tools/widl/parser.yy.c"
/*
 **************************************************************************
 * The flexer starts here
 **************************************************************************
 */
#line 1959 "tools/widl/parser.yy.c"

#define INITIAL 0
#define ATTR 1
#define PP_LINE 2
#define PP_FILE 3
#define PP_PRAGMA 4

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
#include <unistd.h>
#endif

#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

static int yy_init_globals ( void );

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int yylex_destroy ( void );

int yyget_debug ( void );

void yyset_debug ( int debug_flag  );

YY_EXTRA_TYPE yyget_extra ( void );

void yyset_extra ( YY_EXTRA_TYPE user_defined  );

FILE *yyget_in ( void );

void yyset_in  ( FILE * _in_str  );

FILE *yyget_out ( void );

void yyset_out  ( FILE * _out_str  );

			int yyget_leng ( void );

char *yyget_text ( void );

int yyget_lineno ( void );

void yyset_lineno ( int _line_number  );

YYSTYPE * yyget_lval ( void );

void yyset_lval ( YYSTYPE * yylval_param  );

       YYLTYPE *yyget_lloc ( void );
    
        void yyset_lloc ( YYLTYPE * yylloc_param  );
    
/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap ( void );
#else
extern int yywrap ( void );
#endif
#endif

#ifndef YY_NO_UNPUT
    
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy ( char *, const char *, int );
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen ( const char * );
#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput ( void );
#else
static int input ( void );
#endif

#endif

        static int yy_start_stack_ptr = 0;
        static int yy_start_stack_depth = 0;
        static int *yy_start_stack = NULL;
    
    static void yy_push_state ( int _new_state );
    
    static void yy_pop_state ( void );
    
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#ifdef __ia64__
/* On IA-64, the buffer size is 16k, not 8k */
#define YY_READ_BUF_SIZE 16384
#else
#define YY_READ_BUF_SIZE 8192
#endif /* __ia64__ */
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		int n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(yyin); \
			} \
		}\
\

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int yylex \
               (YYSTYPE * yylval_param, YYLTYPE * yylloc_param );

#define YY_DECL int yylex \
               (YYSTYPE * yylval_param, YYLTYPE * yylloc_param )
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK /*LINTED*/break;
#endif

#define YY_RULE_SETUP \
	if ( yyleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(yytext[yyleng - 1] == '\n'); \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	yy_state_type yy_current_state;
	char *yy_cp, *yy_bp;
	int yy_act;
    
        YYSTYPE * yylval;
    
        YYLTYPE * yylloc;
    
    yylval = yylval_param;

    yylloc = yylloc_param;

	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! (yy_start) )
			(yy_start) = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			yyensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				yy_create_buffer( yyin, YY_BUF_SIZE );
		}

		yy_load_buffer_state(  );
		}

	{
#line 189 "tools/widl/parser.l"

#line 2209 "tools/widl/parser.yy.c"

	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
		{
		yy_cp = (yy_c_buf_p);

		/* Support of yytext. */
		*yy_cp = (yy_hold_char);

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = (yy_start);
		yy_current_state += YY_AT_BOL();
yy_match:
		do
			{
			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
			if ( yy_accept[yy_current_state] )
				{
				(yy_last_accepting_state) = yy_current_state;
				(yy_last_accepting_cpos) = yy_cp;
				}
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 1464 )
					yy_c = yy_meta[yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
			++yy_cp;
			}
		while ( yy_current_state != 1463 );
		yy_cp = (yy_last_accepting_cpos);
		yy_current_state = (yy_last_accepting_state);

yy_find_action:
		yy_act = yy_accept[yy_current_state];

		YY_DO_BEFORE_ACTION;

do_action:	/* This label is used only to access EOF actions. */

		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = (yy_hold_char);
			yy_cp = (yy_last_accepting_cpos);
			yy_current_state = (yy_last_accepting_state);
			goto yy_find_action;

case 1:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp = yy_bp + 9;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 191 "tools/widl/parser.l"
{
                                                    yy_pop_state();
                                                    yylloc->first_line -= 1;
                                                    return tCPPQUOTE;
                                                }
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 196 "tools/widl/parser.l"
{
                                                    yy_pop_state();
                                                    yylloc->first_line -= 1;
                                                    winrt_enable( TRUE );
                                                }
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 201 "tools/widl/parser.l"
{
                                                    yy_pop_state();
                                                    yylloc->first_line -= 1;
                                                    winrt_enable( FALSE );
                                                }
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 206 "tools/widl/parser.l"
{
                                                    yy_pop_state();
                                                    yylloc->first_line -= 1;
                                                    return token_str( aPRAGMA, yytext, yylval );
                                                }
	YY_BREAK

case 5:
YY_RULE_SETUP
#line 212 "tools/widl/parser.l"
{
                                                    yylloc->first_line = strtoul( yytext, NULL, 10 ) - 1;
                                                    yylloc->last_line = yylloc->first_line;
                                                    yy_pop_state();
                                                    yy_push_state(PP_FILE);
                                                }
	YY_BREAK
case 6:
/* rule 6 can match eol */
YY_RULE_SETUP
#line 218 "tools/widl/parser.l"
{
                                                    input_name = xstrdup( yytext + 1 );
                                                    *strchr( input_name, '"' ) = 0;
                                                    yylloc->input_name = input_name;
                                                }
	YY_BREAK
case 7:
/* rule 7 can match eol */
YY_RULE_SETUP
#line 223 "tools/widl/parser.l"
{ yy_pop_state(); }
	YY_BREAK

case 8:
YY_RULE_SETUP
#line 226 "tools/widl/parser.l"
{ yy_pop_state(); return ']'; }
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 228 "tools/widl/parser.l"
{ return token_uuid( yytext, yylval ); }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 229 "tools/widl/parser.l"
{ return token_winrt( tACTIVATABLE, yytext, yylval ); }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 230 "tools/widl/parser.l"
{ return tAGGREGATABLE; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 231 "tools/widl/parser.l"
{ return token_winrt( tAGILE, yytext, yylval ); }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 232 "tools/widl/parser.l"
{ return tALLNODES; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 233 "tools/widl/parser.l"
{ return tALLOCATE; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 234 "tools/widl/parser.l"
{ return tANNOTATION; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 235 "tools/widl/parser.l"
{ return tAPARTMENT; }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 236 "tools/widl/parser.l"
{ return tAPPOBJECT; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 237 "tools/widl/parser.l"
{ return tASYNC; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 238 "tools/widl/parser.l"
{ return tASYNCUUID; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 239 "tools/widl/parser.l"
{ return tAUTOHANDLE; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 240 "tools/widl/parser.l"
{ return tBINDABLE; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 241 "tools/widl/parser.l"
{ return tBOTH; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 242 "tools/widl/parser.l"
{ return tBROADCAST; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 243 "tools/widl/parser.l"
{ return tBYTECOUNT; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 244 "tools/widl/parser.l"
{ return tCALLAS; }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 245 "tools/widl/parser.l"
{ return tCALLBACK; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 246 "tools/widl/parser.l"
{ return tCODE; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 247 "tools/widl/parser.l"
{ return tCOMMSTATUS; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 248 "tools/widl/parser.l"
{ return token_winrt( tCOMPOSABLE, yytext, yylval ); }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 249 "tools/widl/parser.l"
{ return tCONTEXTHANDLE; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 250 "tools/widl/parser.l"
{ return tCONTEXTHANDLENOSERIALIZE; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 251 "tools/widl/parser.l"
{ return tCONTEXTHANDLENOSERIALIZE; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 252 "tools/widl/parser.l"
{ return token_winrt( tCONTRACT, yytext, yylval ); }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 253 "tools/widl/parser.l"
{ return token_winrt( tCONTRACTVERSION, yytext, yylval ); }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 254 "tools/widl/parser.l"
{ return tCONTROL; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 255 "tools/widl/parser.l"
{ return tCUSTOM; }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 256 "tools/widl/parser.l"
{ return tDECODE; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 257 "tools/widl/parser.l"
{ return tDEFAULTBIND; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 258 "tools/widl/parser.l"
{ return tDEFAULTCOLLELEM; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 259 "tools/widl/parser.l"
{ return tDEFAULTVALUE; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 260 "tools/widl/parser.l"
{ return tDEFAULTVTABLE; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 261 "tools/widl/parser.l"
{ return token_winrt( tDEPRECATED, yytext, yylval ); }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 262 "tools/widl/parser.l"
{ return tDISABLECONSISTENCYCHECK; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 263 "tools/widl/parser.l"
{ return tDISPLAYBIND; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 264 "tools/widl/parser.l"
{ return tDLLNAME; }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 265 "tools/widl/parser.l"
{ return tDONTFREE; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 266 "tools/widl/parser.l"
{ return tDUAL; }
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 267 "tools/widl/parser.l"
{ return tENABLEALLOCATE; }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 268 "tools/widl/parser.l"
{ return tENCODE; }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 269 "tools/widl/parser.l"
{ return tENDPOINT; }
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 270 "tools/widl/parser.l"
{ return tENTRY; }
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 271 "tools/widl/parser.l"
{ return token_winrt( tEVENTADD, yytext, yylval ); }
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 272 "tools/widl/parser.l"
{ return token_winrt( tEVENTREMOVE, yytext, yylval ); }
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 273 "tools/widl/parser.l"
{ return token_winrt( tEXCLUSIVETO, yytext, yylval ); }
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 274 "tools/widl/parser.l"
{ return tEXPLICITHANDLE; }
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 275 "tools/widl/parser.l"
{ return tFAULTSTATUS; }
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 276 "tools/widl/parser.l"
{ return token_winrt( tFLAGS, yytext, yylval ); }
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 277 "tools/widl/parser.l"
{ return tFORCEALLOCATE; }
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 278 "tools/widl/parser.l"
{ return tFREE; }
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 279 "tools/widl/parser.l"
{ return tHANDLE; }
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 280 "tools/widl/parser.l"
{ return tHELPCONTEXT; }
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 281 "tools/widl/parser.l"
{ return tHELPFILE; }
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 282 "tools/widl/parser.l"
{ return tHELPSTRING; }
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 283 "tools/widl/parser.l"
{ return tHELPSTRINGCONTEXT; }
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 284 "tools/widl/parser.l"
{ return tHELPSTRINGDLL; }
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 285 "tools/widl/parser.l"
{ return tHIDDEN; }
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 286 "tools/widl/parser.l"
{ return tID; }
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 287 "tools/widl/parser.l"
{ return tIDEMPOTENT; }
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 288 "tools/widl/parser.l"
{ return tIGNORE; }
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 289 "tools/widl/parser.l"
{ return tIIDIS; }
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 290 "tools/widl/parser.l"
{ return tIMMEDIATEBIND; }
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 291 "tools/widl/parser.l"
{ return tIMPLICITHANDLE; }
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 292 "tools/widl/parser.l"
{ return tIN; }
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 293 "tools/widl/parser.l"
{ return tIN_LINE; }
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 294 "tools/widl/parser.l"
{ return tINPUTSYNC; }
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 295 "tools/widl/parser.l"
{ return tLCID; }
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 296 "tools/widl/parser.l"
{ return tLENGTHIS; }
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 297 "tools/widl/parser.l"
{ return tLICENSED; }
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 298 "tools/widl/parser.l"
{ return tLOCAL; }
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 299 "tools/widl/parser.l"
{ return token_winrt( tMARSHALINGBEHAVIOR, yytext, yylval ); }
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 300 "tools/widl/parser.l"
{ return tMAYBE; }
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 301 "tools/widl/parser.l"
{ return tMESSAGE; }
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 302 "tools/widl/parser.l"
{ return tMTA; }
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 303 "tools/widl/parser.l"
{ return tNEUTRAL; }
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 304 "tools/widl/parser.l"
{ return tNOCODE; }
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 305 "tools/widl/parser.l"
{ return tNONBROWSABLE; }
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 306 "tools/widl/parser.l"
{ return tNONCREATABLE; }
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 307 "tools/widl/parser.l"
{ return token_winrt( tNONE, yytext, yylval ); }
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 308 "tools/widl/parser.l"
{ return tNONEXTENSIBLE; }
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 309 "tools/widl/parser.l"
{ return tNOTIFY; }
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 310 "tools/widl/parser.l"
{ return tNOTIFYFLAG; }
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 311 "tools/widl/parser.l"
{ return tOBJECT; }
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 312 "tools/widl/parser.l"
{ return tODL; }
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 313 "tools/widl/parser.l"
{ return tOLEAUTOMATION; }
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 314 "tools/widl/parser.l"
{ return tOPTIMIZE; }
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 315 "tools/widl/parser.l"
{ return tOPTIONAL; }
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 316 "tools/widl/parser.l"
{ return tOUT; }
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 317 "tools/widl/parser.l"
{ return tOVERLOAD; }
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 318 "tools/widl/parser.l"
{ return tPARTIALIGNORE; }
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 319 "tools/widl/parser.l"
{ return tPOINTERDEFAULT; }
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 320 "tools/widl/parser.l"
{ return tPROGID; }
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 321 "tools/widl/parser.l"
{ return tPROPGET; }
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 322 "tools/widl/parser.l"
{ return tPROPPUT; }
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 323 "tools/widl/parser.l"
{ return tPROPPUTREF; }
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 324 "tools/widl/parser.l"
{ return tPROTECTED; }
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 325 "tools/widl/parser.l"
{ return tPROXY; }
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 326 "tools/widl/parser.l"
{ return tPTR; }
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 327 "tools/widl/parser.l"
{ return tPUBLIC; }
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 328 "tools/widl/parser.l"
{ return tRANGE; }
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 329 "tools/widl/parser.l"
{ return tREADONLY; }
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 330 "tools/widl/parser.l"
{ return tREF; }
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 331 "tools/widl/parser.l"
{ return tREPRESENTAS; }
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 332 "tools/widl/parser.l"
{ return tREQUESTEDIT; }
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 333 "tools/widl/parser.l"
{ return tRESTRICTED; }
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 334 "tools/widl/parser.l"
{ return tRETVAL; }
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 335 "tools/widl/parser.l"
{ return tSINGLE; }
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 336 "tools/widl/parser.l"
{ return tSINGLENODE; }
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 337 "tools/widl/parser.l"
{ return tSIZEIS; }
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 338 "tools/widl/parser.l"
{ return tSOURCE; }
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 339 "tools/widl/parser.l"
{ return token_winrt( tSTANDARD, yytext, yylval ); }
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 340 "tools/widl/parser.l"
{ return token_winrt( tSTATIC, yytext, yylval ); }
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 341 "tools/widl/parser.l"
{ return tSTRICTCONTEXTHANDLE; }
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 342 "tools/widl/parser.l"
{ return tSTRING; }
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 343 "tools/widl/parser.l"
{ return tSWITCHIS; }
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 344 "tools/widl/parser.l"
{ return tSWITCHTYPE; }
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 345 "tools/widl/parser.l"
{ return tTHREADING; }
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 346 "tools/widl/parser.l"
{ return tTRANSMITAS; }
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 347 "tools/widl/parser.l"
{ return tUIDEFAULT; }
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 348 "tools/widl/parser.l"
{ return tUNIQUE; }
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 349 "tools/widl/parser.l"
{ return tUSERMARSHAL; }
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 350 "tools/widl/parser.l"
{ return tUSESGETLASTERROR; }
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 351 "tools/widl/parser.l"
{ return tUUID; }
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 352 "tools/widl/parser.l"
{ return tV1ENUM; }
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 353 "tools/widl/parser.l"
{ return tVARARG; }
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 354 "tools/widl/parser.l"
{ return tVERSION; }
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 355 "tools/widl/parser.l"
{ return tVIPROGID; }
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 356 "tools/widl/parser.l"
{ return tWIREMARSHAL; }
	YY_BREAK


case 138:
YY_RULE_SETUP
#line 360 "tools/widl/parser.l"
{ yy_push_state( PP_PRAGMA ); }
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 361 "tools/widl/parser.l"
{ return tPRAGMA_WARNING; }
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 363 "tools/widl/parser.l"
{
                                                    yylval->dbl = strtod( yytext, NULL );
                                                    return aDOUBLE;
                                                }
	YY_BREAK

case 141:
*yy_cp = (yy_hold_char); /* undo effects of setting up yytext */
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 369 "tools/widl/parser.l"
return tSAFEARRAY;
	YY_BREAK

case 142:
YY_RULE_SETUP
#line 372 "tools/widl/parser.l"
{ yy_push_state(PP_LINE); }
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 373 "tools/widl/parser.l"
{ yy_push_state(ATTR); return '['; }
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 375 "tools/widl/parser.l"
{ return tFALSE; }
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 376 "tools/widl/parser.l"
{ return tNULL; }
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 377 "tools/widl/parser.l"
{ return tTRUE; }
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 378 "tools/widl/parser.l"
{ return token_str( tCDECL, "__cdecl", yylval ); }
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 379 "tools/widl/parser.l"
{ return token_str( tPASCAL, "__pascal", yylval ); }
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 380 "tools/widl/parser.l"
{ return token_str( tSTDCALL, "__stdcall", yylval ); }
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 381 "tools/widl/parser.l"
{ return token_str( tFASTCALL, "__fastcall", yylval ); }
	YY_BREAK
case 151:
YY_RULE_SETUP
#line 382 "tools/widl/parser.l"
{ return tINT32; }
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 383 "tools/widl/parser.l"
{ return tINT3264; }
	YY_BREAK
case 153:
YY_RULE_SETUP
#line 384 "tools/widl/parser.l"
{ return tINT64; }
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 385 "tools/widl/parser.l"
{ return token_winrt( tAPICONTRACT, yytext, yylval ); }
	YY_BREAK
case 155:
YY_RULE_SETUP
#line 386 "tools/widl/parser.l"
{ return tBOOLEAN; }
	YY_BREAK
case 156:
YY_RULE_SETUP
#line 387 "tools/widl/parser.l"
{ return tBYTE; }
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 388 "tools/widl/parser.l"
{ return tCASE; }
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 389 "tools/widl/parser.l"
{ return tCHAR; }
	YY_BREAK
case 159:
YY_RULE_SETUP
#line 390 "tools/widl/parser.l"
{ return tCOCLASS; }
	YY_BREAK
case 160:
YY_RULE_SETUP
#line 391 "tools/widl/parser.l"
{ return tCONST; }
	YY_BREAK
case 161:
YY_RULE_SETUP
#line 392 "tools/widl/parser.l"
{ return tCPPQUOTE; }
	YY_BREAK
case 162:
YY_RULE_SETUP
#line 393 "tools/widl/parser.l"
{ return token_winrt( tDECLARE, yytext, yylval ); }
	YY_BREAK
case 163:
YY_RULE_SETUP
#line 394 "tools/widl/parser.l"
{ return tDEFAULT; }
	YY_BREAK
case 164:
YY_RULE_SETUP
#line 395 "tools/widl/parser.l"
{ return token_winrt( tDELEGATE, yytext, yylval ); }
	YY_BREAK
case 165:
YY_RULE_SETUP
#line 396 "tools/widl/parser.l"
{ return tDISPINTERFACE; }
	YY_BREAK
case 166:
YY_RULE_SETUP
#line 397 "tools/widl/parser.l"
{ return tDOUBLE; }
	YY_BREAK
case 167:
YY_RULE_SETUP
#line 398 "tools/widl/parser.l"
{ return tENUM; }
	YY_BREAK
case 168:
YY_RULE_SETUP
#line 399 "tools/widl/parser.l"
{ return tERRORSTATUST; }
	YY_BREAK
case 169:
YY_RULE_SETUP
#line 400 "tools/widl/parser.l"
{ return tEXTERN; }
	YY_BREAK
case 170:
YY_RULE_SETUP
#line 401 "tools/widl/parser.l"
{ return tFLOAT; }
	YY_BREAK
case 171:
YY_RULE_SETUP
#line 402 "tools/widl/parser.l"
{ return tHANDLET; }
	YY_BREAK
case 172:
YY_RULE_SETUP
#line 403 "tools/widl/parser.l"
{ return tHYPER; }
	YY_BREAK
case 173:
YY_RULE_SETUP
#line 404 "tools/widl/parser.l"
{ return tIMPORT; }
	YY_BREAK
case 174:
YY_RULE_SETUP
#line 405 "tools/widl/parser.l"
{ return tIMPORTLIB; }
	YY_BREAK
case 175:
YY_RULE_SETUP
#line 406 "tools/widl/parser.l"
{ return tINLINE; }
	YY_BREAK
case 176:
YY_RULE_SETUP
#line 407 "tools/widl/parser.l"
{ return tINT; }
	YY_BREAK
case 177:
YY_RULE_SETUP
#line 408 "tools/widl/parser.l"
{ return tINTERFACE; }
	YY_BREAK
case 178:
YY_RULE_SETUP
#line 409 "tools/widl/parser.l"
{ return tLIBRARY; }
	YY_BREAK
case 179:
YY_RULE_SETUP
#line 410 "tools/widl/parser.l"
{ return tLONG; }
	YY_BREAK
case 180:
YY_RULE_SETUP
#line 411 "tools/widl/parser.l"
{ return tMETHODS; }
	YY_BREAK
case 181:
YY_RULE_SETUP
#line 412 "tools/widl/parser.l"
{ return tMODULE; }
	YY_BREAK
case 182:
YY_RULE_SETUP
#line 413 "tools/widl/parser.l"
{ return token_winrt( tNAMESPACE, yytext, yylval ); }
	YY_BREAK
case 183:
YY_RULE_SETUP
#line 414 "tools/widl/parser.l"
{ return tPROPERTIES; }
	YY_BREAK
case 184:
YY_RULE_SETUP
#line 415 "tools/widl/parser.l"
{ return tREGISTER; }
	YY_BREAK
case 185:
YY_RULE_SETUP
#line 416 "tools/widl/parser.l"
{ return token_winrt( tREQUIRES, yytext, yylval ); }
	YY_BREAK
case 186:
YY_RULE_SETUP
#line 417 "tools/widl/parser.l"
{ return token_winrt( tRUNTIMECLASS, yytext, yylval ); }
	YY_BREAK
case 187:
YY_RULE_SETUP
#line 418 "tools/widl/parser.l"
{ return tSHORT; }
	YY_BREAK
case 188:
YY_RULE_SETUP
#line 419 "tools/widl/parser.l"
{ return tSIGNED; }
	YY_BREAK
case 189:
YY_RULE_SETUP
#line 420 "tools/widl/parser.l"
{ return tSIZEOF; }
	YY_BREAK
case 190:
YY_RULE_SETUP
#line 421 "tools/widl/parser.l"
{ return tSMALL; }
	YY_BREAK
case 191:
YY_RULE_SETUP
#line 422 "tools/widl/parser.l"
{ return tSTATIC; }
	YY_BREAK
case 192:
YY_RULE_SETUP
#line 423 "tools/widl/parser.l"
{ return tSTRUCT; }
	YY_BREAK
case 193:
YY_RULE_SETUP
#line 424 "tools/widl/parser.l"
{ return tSWITCH; }
	YY_BREAK
case 194:
YY_RULE_SETUP
#line 425 "tools/widl/parser.l"
{ return tTYPEDEF; }
	YY_BREAK
case 195:
YY_RULE_SETUP
#line 426 "tools/widl/parser.l"
{ return tUNION; }
	YY_BREAK
case 196:
YY_RULE_SETUP
#line 427 "tools/widl/parser.l"
{ return tUNSIGNED; }
	YY_BREAK
case 197:
YY_RULE_SETUP
#line 428 "tools/widl/parser.l"
{ return tVOID; }
	YY_BREAK
case 198:
YY_RULE_SETUP
#line 429 "tools/widl/parser.l"
{ return tWCHAR; }
	YY_BREAK
case 199:
YY_RULE_SETUP
#line 431 "tools/widl/parser.l"
{ return token_ident( yytext, yylval ); }
	YY_BREAK
case 200:
YY_RULE_SETUP
#line 433 "tools/widl/parser.l"
{ return token_num( aHEXNUM, yytext, yylval ); }
	YY_BREAK
case 201:
YY_RULE_SETUP
#line 434 "tools/widl/parser.l"
{ return token_num( aNUM, yytext, yylval ); }
	YY_BREAK
case 202:
/* rule 202 can match eol */
YY_RULE_SETUP
#line 436 "tools/widl/parser.l"
{ return token_str( aWSTRING, yytext + 1, yylval ); }
	YY_BREAK
case 203:
/* rule 203 can match eol */
YY_RULE_SETUP
#line 437 "tools/widl/parser.l"
{ return token_str( aSTRING, yytext, yylval ); }
	YY_BREAK
case 204:
/* rule 204 can match eol */
YY_RULE_SETUP
#line 438 "tools/widl/parser.l"
{ return token_str( aSQSTRING, yytext, yylval ); }
	YY_BREAK
case 205:
/* rule 205 can match eol */
YY_RULE_SETUP
#line 440 "tools/widl/parser.l"
{ end_of_line( yylloc ); }
	YY_BREAK
case 206:
YY_RULE_SETUP
#line 441 "tools/widl/parser.l"
{}
	YY_BREAK
case 207:
YY_RULE_SETUP
#line 442 "tools/widl/parser.l"
{ return SHL; }
	YY_BREAK
case 208:
YY_RULE_SETUP
#line 443 "tools/widl/parser.l"
{ return SHR; }
	YY_BREAK
case 209:
YY_RULE_SETUP
#line 444 "tools/widl/parser.l"
{ return MEMBERPTR; }
	YY_BREAK
case 210:
YY_RULE_SETUP
#line 445 "tools/widl/parser.l"
{ return EQUALITY; }
	YY_BREAK
case 211:
YY_RULE_SETUP
#line 446 "tools/widl/parser.l"
{ return INEQUALITY; }
	YY_BREAK
case 212:
YY_RULE_SETUP
#line 447 "tools/widl/parser.l"
{ return GREATEREQUAL; }
	YY_BREAK
case 213:
YY_RULE_SETUP
#line 448 "tools/widl/parser.l"
{ return LESSEQUAL; }
	YY_BREAK
case 214:
YY_RULE_SETUP
#line 449 "tools/widl/parser.l"
{ return LOGICALOR; }
	YY_BREAK
case 215:
YY_RULE_SETUP
#line 450 "tools/widl/parser.l"
{ return LOGICALAND; }
	YY_BREAK
case 216:
YY_RULE_SETUP
#line 451 "tools/widl/parser.l"
{ return ELLIPSIS; }
	YY_BREAK
case 217:
YY_RULE_SETUP
#line 452 "tools/widl/parser.l"
{ return yytext[0]; }
	YY_BREAK

case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(ATTR):
case YY_STATE_EOF(PP_LINE):
case YY_STATE_EOF(PP_FILE):
case YY_STATE_EOF(PP_PRAGMA):
#line 455 "tools/widl/parser.l"
{
                            if (!list_empty( &import_stack ))
                                return aEOF;
                            if (acf_name)
                            {
                                switch_to_acf();
                                return aACF;
                            }
                            yyterminate();
			}
	YY_BREAK
case 218:
YY_RULE_SETUP
#line 465 "tools/widl/parser.l"
ECHO;
	YY_BREAK
#line 3417 "tools/widl/parser.yy.c"

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = (yy_hold_char);
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state(  );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = (yytext_ptr) + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++(yy_c_buf_p);
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = (yy_last_accepting_cpos);
				yy_current_state = (yy_last_accepting_state);
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer(  ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				(yy_did_buffer_switch_on_eof) = 0;

				if ( yywrap(  ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				(yy_c_buf_p) =
					(yytext_ptr) + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				(yy_c_buf_p) =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
	} /* end of user's declarations */
} /* end of yylex */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
static int yy_get_next_buffer (void)
{
    	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	char *source = (yytext_ptr);
	int number_to_move, i;
	int ret_val;

	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1);

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;

	else
		{
			int num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;

			int yy_c_buf_p_offset =
				(int) ((yy_c_buf_p) - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				int new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					yyrealloc( (void *) b->yy_ch_buf,
							 (yy_size_t) (b->yy_buf_size + 2)  );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = NULL;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
						number_to_move - 1;

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			(yy_n_chars), num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	if ( (yy_n_chars) == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			yyrestart( yyin  );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
			(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size  );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
		/* "- 2" to take care of EOB's */
		YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
	}

	(yy_n_chars) += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;

	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

    static yy_state_type yy_get_previous_state (void)
{
	yy_state_type yy_current_state;
	char *yy_cp;
    
	yy_current_state = (yy_start);
	yy_current_state += YY_AT_BOL();

	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
		{
		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			(yy_last_accepting_state) = yy_current_state;
			(yy_last_accepting_cpos) = yy_cp;
			}
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 1464 )
				yy_c = yy_meta[yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
{
	int yy_is_jam;
    	char *yy_cp = (yy_c_buf_p);

	YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		(yy_last_accepting_state) = yy_current_state;
		(yy_last_accepting_cpos) = yy_cp;
		}
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 1464 )
			yy_c = yy_meta[yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
	yy_is_jam = (yy_current_state == 1463);

		return yy_is_jam ? 0 : yy_current_state;
}

#ifndef YY_NO_UNPUT

#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (void)
#else
    static int input  (void)
#endif

{
	int c;
    
	*(yy_c_buf_p) = (yy_hold_char);

	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			/* This was really a NUL. */
			*(yy_c_buf_p) = '\0';

		else
			{ /* need more input */
			int offset = (int) ((yy_c_buf_p) - (yytext_ptr));
			++(yy_c_buf_p);

			switch ( yy_get_next_buffer(  ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					yyrestart( yyin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap(  ) )
						return 0;

					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					(yy_c_buf_p) = (yytext_ptr) + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
	*(yy_c_buf_p) = '\0';	/* preserve yytext */
	(yy_hold_char) = *++(yy_c_buf_p);

	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void yyrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        yyensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            yy_create_buffer( yyin, YY_BUF_SIZE );
	}

	yy_init_buffer( YY_CURRENT_BUFFER, input_file );
	yy_load_buffer_state(  );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		yypop_buffer_state();
	 *		yypush_buffer_state(new_buffer);
     */
	yyensure_buffer_stack ();
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	yy_load_buffer_state(  );

	/* We don't actually know whether we did this switch during
	 * EOF (yywrap()) processing, but the only time this flag
	 * is looked at is after yywrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	(yy_did_buffer_switch_on_eof) = 1;
}

static void yy_load_buffer_state  (void)
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(yy_c_buf_p);
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * 
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2)  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_is_our_buffer = 1;

	yy_init_buffer( b, file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with yy_create_buffer()
 * 
 */
    void yy_delete_buffer (YY_BUFFER_STATE  b )
{
    
	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yyfree( (void *) b->yy_ch_buf  );

	yyfree( (void *) b  );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a yyrestart() or at EOF.
 */
    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )

{
	int oerrno = errno;
    
	yy_flush_buffer( b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then yy_init_buffer was _probably_
     * called from yyrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * 
 */
    void yy_flush_buffer (YY_BUFFER_STATE  b )
{
    	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		yy_load_buffer_state(  );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  
 */
void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == NULL)
		return;

	yyensure_buffer_stack();

	/* This block is copied from yy_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		(yy_buffer_stack_top)++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from yy_switch_to_buffer. */
	yy_load_buffer_state(  );
	(yy_did_buffer_switch_on_eof) = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
void yypop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

	yy_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		yy_load_buffer_state(  );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void yyensure_buffer_stack (void)
{
	yy_size_t num_to_alloc;
    
	if (!(yy_buffer_stack)) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
      num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));

		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){

		/* Increase the buffer to prepare for a possible push. */
		yy_size_t grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(yy_buffer_stack_max) = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return NULL;

	b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

	b->yy_buf_size = (int) (size - 2);	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = NULL;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	yy_switch_to_buffer( b  );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to yylex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * 
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       yy_scan_bytes() instead.
 */
YY_BUFFER_STATE yy_scan_string (const char * yystr )
{
    
	return yy_scan_bytes( yystr, (int) strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
 * scan from a @e copy of @a bytes.
 * @param yybytes the byte buffer to scan
 * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_bytes  (const char * yybytes, int  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = (yy_size_t) (_yybytes_len + 2);
	buf = (char *) yyalloc( n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = yy_scan_buffer( buf, n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}

    static void yy_push_state (int  _new_state )
{
    	if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
		{
		yy_size_t new_size;

		(yy_start_stack_depth) += YY_START_STACK_INCR;
		new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int );

		if ( ! (yy_start_stack) )
			(yy_start_stack) = (int *) yyalloc( new_size  );

		else
			(yy_start_stack) = (int *) yyrealloc(
					(void *) (yy_start_stack), new_size  );

		if ( ! (yy_start_stack) )
			YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
		}

	(yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;

	BEGIN(_new_state);
}

    static void yy_pop_state  (void)
{
    	if ( --(yy_start_stack_ptr) < 0 )
		YY_FATAL_ERROR( "start-condition stack underflow" );

	BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yynoreturn yy_fatal_error (const char* msg )
{
			fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		yytext[yyleng] = (yy_hold_char); \
		(yy_c_buf_p) = yytext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		yyleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the current line number.
 * 
 */
int yyget_lineno  (void)
{
    
    return yylineno;
}

/** Get the input stream.
 * 
 */
FILE *yyget_in  (void)
{
        return yyin;
}

/** Get the output stream.
 * 
 */
FILE *yyget_out  (void)
{
        return yyout;
}

/** Get the length of the current token.
 * 
 */
int yyget_leng  (void)
{
        return yyleng;
}

/** Get the current token.
 * 
 */

char *yyget_text  (void)
{
        return yytext;
}

/** Set the current line number.
 * @param _line_number line number
 * 
 */
void yyset_lineno (int  _line_number )
{
    
    yylineno = _line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param _in_str A readable stream.
 * 
 * @see yy_switch_to_buffer
 */
void yyset_in (FILE *  _in_str )
{
        yyin = _in_str ;
}

void yyset_out (FILE *  _out_str )
{
        yyout = _out_str ;
}

int yyget_debug  (void)
{
        return yy_flex_debug;
}

void yyset_debug (int  _bdebug )
{
        yy_flex_debug = _bdebug ;
}

static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from yylex_destroy(), so don't allocate here.
     */

    (yy_buffer_stack) = NULL;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = NULL;
    (yy_init) = 0;
    (yy_start) = 0;

    (yy_start_stack_ptr) = 0;
    (yy_start_stack_depth) = 0;
    (yy_start_stack) =  NULL;

/* Defined in main.c */
#ifdef YY_STDINIT
    yyin = stdin;
    yyout = stdout;
#else
    yyin = NULL;
    yyout = NULL;
#endif

    /* For future reference: Set errno on error, since we are called by
     * yylex_init()
     */
    return 0;
}

/* yylex_destroy is for both reentrant and non-reentrant scanners. */
int yylex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		yy_delete_buffer( YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		yypop_buffer_state();
	}

	/* Destroy the stack itself. */
	yyfree((yy_buffer_stack) );
	(yy_buffer_stack) = NULL;

    /* Destroy the start condition stack. */
        yyfree( (yy_start_stack)  );
        (yy_start_stack) = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * yylex() is called, initialization will occur. */
    yy_init_globals( );

    return 0;
}

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, const char * s2, int n )
{
		
	int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (const char * s )
{
	int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *yyalloc (yy_size_t  size )
{
			return malloc(size);
}

void *yyrealloc  (void * ptr, yy_size_t  size )
{
		
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return realloc(ptr, size);
}

void yyfree (void * ptr )
{
			free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 465 "tools/widl/parser.l"


static void print_imports(void)
{
    struct import_state *state, *next;

    if (list_empty( &import_stack )) return;

    fprintf( stderr, "In file included from " );
    LIST_FOR_EACH_ENTRY_SAFE_REV( state, next, &import_stack, struct import_state, entry )
    {
        if (&next->entry == &import_stack) break;
        fprintf( stderr, "%s:%d,\n", state->input_name, state->where.first_line );
        fprintf( stderr, "                 from ");
    }
    fprintf( stderr, "%s:%d:\n", state->input_name, state->where.first_line );
}

void pop_import( struct location *where )
{
    struct list *entry = list_head( &import_stack );
    struct import_state *state;
    assert( entry );

    state = LIST_ENTRY( entry, struct import_state, entry );
    list_remove( &state->entry );
    parse_only = !list_empty( &import_stack );

    if (yyin) fclose( yyin );
    yy_delete_buffer( YY_CURRENT_BUFFER );
    yy_switch_to_buffer( state->buffer );

    input_name = state->input_name;
    *where = state->where;
    free( state );
}

void push_import( const char *import_name, struct location *where )
{
    struct import_state *state;
    struct import *import;
    FILE *file;

    state = xmalloc( sizeof(struct import_state ));
    list_add_head( &import_stack, &state->entry );
    parse_only = !list_empty( &import_stack );

    state->buffer = YY_CURRENT_BUFFER;
    state->input_name = input_name;
    state->where = *where;
    input_name = NULL;

    /* reset buffer for <<EOF>>, in case import fails or already imported */
    yy_scan_string( "" );

    LIST_FOR_EACH_ENTRY( import, &imports, struct import, entry )
        if (!strcmp( import->name, import_name )) return;  /* already imported */

    import = xmalloc( sizeof(struct import) );
    import->name = xstrdup( import_name );
    list_add_tail( &imports, &import->entry );

    input_name = find_input_file( import_name, state->input_name );
    file = open_input_file( input_name );
    reset_location( where, input_name );

    yy_switch_to_buffer( yy_create_buffer( file, YY_BUF_SIZE ) );
}

static void switch_to_acf(void)
{
    FILE *file;

    if (yyin) fclose( yyin );
    yy_delete_buffer( YY_CURRENT_BUFFER );

    input_name = xstrdup( acf_name );
    file = open_input_file( input_name );
    acf_name = NULL;

    yy_switch_to_buffer( yy_create_buffer( file, YY_BUF_SIZE ) );
}

static void reset_location( struct location *where, const char *input_name )
{
    where->first_line = 1;
    where->last_line = 1;
    where->first_column = 1;
    where->last_column = 1;
    where->input_name = xstrdup( input_name );
}

static void update_location( struct location *where, const char *yytext )
{
    int len = strlen( yytext );
    previous_location = *where;
    where->first_column = where->last_column;
    where->last_column += len;
}

static void end_of_line( struct location *where )
{
    where->first_line++;
    where->last_line++;
    where->first_column = 1;
    where->last_column = 1;
}

void init_location( struct location *where, const struct location *begin, const struct location *end )
{
    if (!begin) begin = &previous_location;
    *where = *begin;

    if (end)
    {
        where->last_line   = end->last_line;
        where->last_column = end->last_column;
    }
    else
    {
        where->first_line   = begin->last_line;
        where->first_column = begin->last_column;
    }
}

static void diagnostic( const struct location *where, const char *type, const char *message )
{
    char buffer[1024], *line = NULL;
    FILE *file;
    int i;

    if (!where) where = &previous_location;

    print_imports();

    fprintf( stderr, "%s:%d:%d: %s: %s\n", where->input_name, where->first_line, where->first_column, type, message );

    if (!where->input_name || !(file = fopen( where->input_name, "r" ))) return;
    for (i = 0; i < where->first_line; i++) if (!(line = fgets( buffer, sizeof(buffer), file ))) break;
    fclose( file );
    if (!line) return;
    fprintf( stderr, "%s", line );

    line = buffer;
    for (i = 0; i < where->first_column - 1; i++) line += sprintf( line, " " );
    line += sprintf( line, "^" );
    for (i = where->first_column + 1; i < where->last_column; i++) line += sprintf( line, "~" );
    fprintf( stderr, "%s\n", buffer );
}

void parser_error( const struct location *where, const char *message )
{
    diagnostic( where, "error", message );
}

void parser_warning( const struct location *where, const char *message )
{
    diagnostic( where, "warning", message );
}

static void warning_disable(int warning)
{
    warning_t *warning_entry;
    LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry)
        if(warning_entry->num == warning)
            return;
    warning_entry = xmalloc( sizeof(*warning_entry) );
    warning_entry->num = warning;
    list_add_tail(disabled_warnings, &warning_entry->entry);
}

static void warning_enable(int warning)
{
    warning_t *warning_entry;
    LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry)
        if(warning_entry->num == warning)
        {
            list_remove(&warning_entry->entry);
            free(warning_entry);
            break;
        }
}

int do_warning(const char *toggle, warning_list_t *wnum)
{
    warning_t *warning, *next;
    int ret = 1;
    if(!disabled_warnings)
    {
        disabled_warnings = xmalloc( sizeof(*disabled_warnings) );
        list_init( disabled_warnings );
    }

    if(!strcmp(toggle, "disable"))
        LIST_FOR_EACH_ENTRY(warning, wnum, warning_t, entry)
            warning_disable(warning->num);
    else if(!strcmp(toggle, "enable") || !strcmp(toggle, "default"))
        LIST_FOR_EACH_ENTRY(warning, wnum, warning_t, entry)
            warning_enable(warning->num);
    else
        ret = 0;

    LIST_FOR_EACH_ENTRY_SAFE(warning, next, wnum, warning_t, entry)
        free(warning);
    return ret;
}

int is_warning_enabled(int warning)
{
    warning_t *warning_entry;
    if(!disabled_warnings)
        return 1;
    LIST_FOR_EACH_ENTRY(warning_entry, disabled_warnings, warning_t, entry)
        if(warning_entry->num == warning)
            return 0;
    return 1;
}

