#define yy_create_buffer filt_create_buffer #define yy_delete_buffer filt_delete_buffer #define yy_scan_buffer filt_scan_buffer #define yy_scan_string filt_scan_string #define yy_scan_bytes filt_scan_bytes #define yy_flex_debug filt_flex_debug #define yy_init_buffer filt_init_buffer #define yy_flush_buffer filt_flush_buffer #define yy_load_buffer_state filt_load_buffer_state #define yy_switch_to_buffer filt_switch_to_buffer #define yyin filtin #define yyleng filtleng #define yylex filtlex #define yyout filtout #define yyrestart filtrestart #define yytext filttext #define yywrap filtwrap /* A lexical scanner generated by flex*/ /* Scanner skeleton version: * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #include #include /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ #ifdef c_plusplus #ifndef __cplusplus #define __cplusplus #endif #endif #ifdef __cplusplus #include /* Use prototypes in function declarations. */ #define YY_USE_PROTOS /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_PROTOS #define YY_USE_CONST #endif /* __STDC__ */ #endif /* ! __cplusplus */ #ifdef __TURBOC__ #pragma warn -rch #pragma warn -use #include #include #define YY_USE_CONST #define YY_USE_PROTOS #endif #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned 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. */ #define YY_BUF_SIZE 16384 typedef struct yy_buffer_state *YY_BUFFER_STATE; 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 /* The funky do-while in the following #define is used to turn the definition * int a single C statement (which needs a semi-colon terminator). This * avoids problems with code like: * * if ( condition_holds ) * yyless( 5 ); * else * do_something_else(); * * Prior to using the do-while the compiler would get upset at the * "else" because it interpreted the "if" statement as being all * done when it reached the ';' after the yyless() call. */ /* Return all but the first 'n' matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ *yy_cp = yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, filttext_ptr ) /* Some routines like yy_flex_realloc() are emitted as static but are not called by all lexers. This generates warnings in some compilers, notably GCC. Arrange to suppress these. */ #ifdef __GNUC__ #define YY_MAY_BE_UNUSED __attribute__((unused)) #else #define YY_MAY_BE_UNUSED #endif /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ typedef unsigned int yy_size_t; 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. */ yy_size_t 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; /* 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 }; static YY_BUFFER_STATE yy_current_buffer = 0; /* 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". */ #define YY_CURRENT_BUFFER yy_current_buffer /* 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 = (char *) 0; static int yy_init = 1; /* 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 YY_PROTO(( FILE *input_file )); void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); void yy_load_buffer_state YY_PROTO(( void )); YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); static void *yy_flex_alloc YY_PROTO(( yy_size_t )); static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED; static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (yy_current_buffer->yy_at_bol) #define YY_USES_REJECT typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern char yytext[]; static yy_state_type yy_get_previous_state YY_PROTO(( void )); static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); static int yy_get_next_buffer YY_PROTO(( void )); static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ filttext_ptr = yy_bp; \ yyleng = (int) (yy_cp - yy_bp); \ yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ if ( yyleng >= YYLMAX ) \ YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \ yy_flex_strncpy( yytext, filttext_ptr, yyleng + 1 ); \ yy_c_buf_p = yy_cp; #define YY_NUM_RULES 68 #define YY_END_OF_BUFFER 69 static yyconst short int yy_acclist[1847] = { 0, 60, 60, 60, 60, 60, 60, 60, 60, 69, 67, 68, 60, 67, 68, 66, 68, 67, 68, 67, 68, 6, 67, 68, 63, 67, 68, 63, 67, 68, 67, 68, 64, 67, 68, 65, 67, 68, 63, 67, 68, 66, 67, 68, 67, 68, 62, 67, 68, 62, 67, 68, 63, 67, 68, 63, 67, 68, 63, 67, 68, 58, 67, 68, 67, 68, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 59, 67, 68,16425,16426, 63, 67, 68, 53, 66, 68,16433,16434, 67, 68, 52, 63, 67, 68, 52, 63, 67, 68, 51, 65, 67, 68, 52, 63, 67, 68, 48, 66, 67, 68,16433,16434, 67, 68, 46, 62, 67, 68, 46, 62, 67, 68, 67, 68, 53, 66, 67, 68,16433,16434, 52, 63, 67, 68, 47, 52, 63, 67, 68, 52, 63, 67, 68, 67, 68, 52, 63, 67, 68, 56, 64, 67, 68, 57, 65, 67, 68, 55, 66, 67, 68, 60, 67, 68, 40, 66, 68, 67, 68, 39, 63, 67, 68, 39, 63, 67, 68, 36, 64, 67, 68, 38, 65, 67, 68, 39, 63, 67, 68, 34, 66, 67, 68, 67, 68, 23, 62, 67, 68,16416, 23, 62, 67, 68,16416, 40, 66, 67, 68, 39, 63, 67, 68, 39, 63, 67, 68, 39, 63, 67, 68, 33, 58, 67, 68, 67, 68, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 59, 67, 68, 16425,16426, 59, 67, 68,16425,16426, 67, 68, 39, 63, 67, 68, 68, 17, 68, 18, 68, 16, 68, 19, 68, 15, 68, 9, 68, 7, 68, 9, 68, 60, 63, 61, 62, 62, 62, 62, 62, 58, 66, 16425,16426, 54, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426,16433,16434, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 52, 63, 46, 62, 46, 62, 46, 62, 46, 62, 45, 46, 62, 44, 44, 53, 66,16433,16434, 60, 39, 63, 23, 62,16416, 23, 62,16416, 23, 62,16416, 30, 8224, 8224, 29, 23, 62,16416, 8224, 8224, 8224, 27, 24, 23, 62,16416, 25, 28, 8224, 33, 58, 40, 66, 33, 33, 59,16425,16426, 33, 33, 33, 33, 33, 59,16425,16426,16425,16426, 33, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 15, 8, 62, 62, 62, 58, 8234, 8234, 8233, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 2, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 8242, 8241, 8242, 8242, 8242, 8242, 8241, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 43, 43, 46, 62, 46, 62, 46, 62, 44, 44, 44, 44, 27, 23, 62,16416, 23, 62,16416, 23, 62,16416, 33, 58, 59,16425,16426, 31, 8234, 31, 8234, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 2, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 35, 15, 62, 62, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233,16425,16426, 54, 59,16425,16426,16405,16406,16425,16426, 54,16405,16406, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 2, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 4, 59,16425,16426, 59,16425,16426, 8242, 8242, 8241, 8242, 8241, 8241, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 46, 62, 43, 43, 43, 43, 46, 62, 44, 44, 44, 37, 23, 62,16416, 23, 27, 62,16416, 23, 62,16416,16425,16426, 33, 33, 54, 33, 33, 33, 33, 31, 8234, 31, 8234, 31, 31, 8234, 31, 8234, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 4, 59,16425,16426, 59,16425,16426,16405,16406,16405,16406, 1, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233, 8234, 8234, 8233, 59,16425,16426, 8213, 8213, 8214,16405,16406, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 20, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 16425,16426, 54, 59,16425,16426, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8241, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 43, 43, 43, 44, 44, 26, 26, 26, 26, 26, 26, 8224, 23, 62,16416, 23, 62,16416, 8234, 8234, 8233, 31, 8234, 31, 8234, 31, 8234, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 20, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426, 20, 8234, 8234, 8234, 8234, 8234, 8233, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233, 59,16425,16426, 8213, 8213, 8213, 8213, 8214, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 20,16405,16406,16425,16426, 20, 54,16405,16406, 59,16425,16426, 3, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59,16425,16426,16425, 16426, 54,16425,16426, 10, 54, 59,16425,16426, 8242, 8242, 8242, 8242, 8242, 8242, 8242, 43, 43, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 23, 62,16416, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233, 31, 8234, 31, 8234, 59,16425,16426, 59,16425,16426, 59,16425,16426, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 3, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 20,16405,16406, 20,16405,16406, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 59,16425,16426, 8213, 8213, 8213, 8214, 5, 59,16425,16426, 59,16425,16426, 59,16425,16426, 20,16405,16406, 59,16425,16426, 59,16425,16426, 59, 16425,16426,16425,16426, 12, 54, 8234, 8234, 8233, 10, 16425,16426, 54, 8242, 8242, 8242, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 59,16425,16426, 5, 59, 16425,16426, 59,16425,16426, 59,16425,16426, 59,16425, 16426, 59,16425,16426, 59,16425,16426, 8234, 8234, 8234, 8234, 8234, 59,16425,16426, 8213, 8213, 59,16425,16426, 8234, 8234, 8233, 12, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233,16425,16426, 11, 54, 26, 26, 26, 26, 26, 26, 26, 26, 26, 8234, 8234, 8234, 8234, 8234, 59,16425,16426, 59,16425,16426, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 8234, 8234, 59,16425,16426, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 10, 8233, 8234, 8234, 8233, 11, 26, 8234, 8234, 59, 16425,16426, 59,16425,16426, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 12, 8233, 8234, 8234, 8234, 8234, 8234, 10, 8233, 10, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233, 26, 59,16425,16426, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,16425,16426, 54, 8234, 8234, 8234, 8234, 8234, 12, 8233, 12, 8234, 8234, 10, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 11, 8233,16425,16426, 13, 54, 8234, 8234, 12, 8234, 8234, 8234, 8234, 8234, 11, 8233, 11, 8234, 8234, 8233, 13, 8234, 8234, 11, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 8233, 8234, 8234, 8234, 8234, 8234, 8234, 8234, 8233, 13, 8233, 8234, 8234, 8234, 8234, 8234, 13, 8233, 13, 8234, 8234, 13 } ; static yyconst short int yy_accept[1689] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 9, 9, 9, 9, 9, 10, 12, 15, 17, 19, 21, 24, 27, 30, 32, 35, 38, 41, 44, 46, 49, 52, 55, 58, 61, 64, 66, 71, 76, 81, 86, 91, 96, 101, 106, 111, 116, 121, 126, 131, 136, 141, 146, 149, 154, 156, 160, 164, 168, 172, 178, 180, 184, 188, 190, 196, 200, 205, 209, 211, 215, 219, 223, 227, 230, 233, 235, 239, 243, 247, 251, 255, 259, 261, 266, 271, 275, 279, 283, 287, 291, 293, 298, 303, 308, 313, 318, 323, 328, 333, 338, 343, 348, 353, 358, 363, 368, 373, 378, 380, 384, 385, 387, 389, 391, 393, 395, 397, 399, 401, 402, 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, 405, 406, 406, 406, 406, 406, 406, 407, 408, 408, 408, 409, 409, 410, 410, 411, 413, 414, 417, 417, 417, 420, 423, 426, 429, 432, 435, 438, 441, 444, 447, 450, 453, 456, 459, 462, 465, 468, 471, 474, 477, 480, 483, 486, 489, 492, 495, 498, 501, 504, 507, 509, 509, 509, 509, 509, 509, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 521, 521, 523, 525, 527, 527, 529, 530, 530, 530, 532, 532, 532, 532, 532, 533, 534, 538, 539, 539, 541, 541, 541, 541, 544, 547, 550, 550, 550, 551, 552, 553, 554, 557, 557, 558, 559, 560, 560, 561, 561, 561, 562, 565, 566, 567, 567, 568, 570, 570, 572, 572, 573, 574, 577, 578, 579, 580, 580, 581, 585, 587, 588, 591, 594, 597, 600, 603, 606, 609, 612, 615, 618, 621, 624, 627, 630, 633, 636, 639, 642, 645, 648, 651, 654, 657, 660, 663, 666, 669, 672, 675, 678, 678, 678, 678, 679, 679, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, 681, 681, 682, 683, 683, 684, 684, 684, 684, 684, 685, 686, 686, 687, 687, 690, 693, 696, 699, 702, 705, 708, 711, 714, 717, 720, 723, 726, 729, 733, 736, 739, 742, 745, 748, 751, 754, 757, 760, 763, 766, 769, 772, 775, 778, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 781, 782, 784, 784, 784, 785, 786, 787, 787, 787, 787, 787, 789, 790, 790, 791, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 804, 804, 804, 804, 805, 806, 808, 808, 810, 812, 813, 814, 815, 815, 815, 816, 816, 816, 816, 816, 817, 817, 817, 817, 817, 817, 817, 820, 820, 820, 820, 820, 820, 823, 823, 823, 823, 823, 826, 826, 828, 828, 831, 831, 831, 831, 831, 833, 835, 838, 841, 844, 847, 850, 853, 856, 859, 862, 865, 868, 871, 874, 878, 881, 884, 887, 890, 893, 896, 899, 902, 905, 908, 911, 914, 917, 920, 923, 926, 926, 926, 927, 927, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, 929, 930, 931, 932, 933, 933, 933, 934, 934, 934, 934, 935, 936, 937, 938, 938, 940, 941, 941, 944, 948, 951, 954, 957, 960, 963, 966, 969, 972, 975, 978, 981, 984, 985, 988, 991, 994, 997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1028, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1032, 1032, 1032, 1032, 1032, 1032, 1033, 1033, 1035, 1036, 1037, 1037, 1037, 1037, 1037, 1037, 1038, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1052, 1054, 1055, 1056, 1057, 1057, 1057, 1058, 1058, 1060, 1060, 1061, 1061, 1062, 1063, 1063, 1063, 1064, 1064, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1071, 1074, 1076, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1085, 1087, 1088, 1090, 1090, 1090, 1092, 1092, 1095, 1098, 1101, 1104, 1107, 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1134, 1137, 1140, 1143, 1146, 1149, 1152, 1155, 1158, 1161, 1164, 1167, 1171, 1174, 1174, 1176, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1180, 1180, 1181, 1182, 1183, 1184, 1185, 1185, 1185, 1186, 1186, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188, 1189, 1190, 1190, 1191, 1194, 1194, 1194, 1195, 1196, 1197, 1199, 1202, 1205, 1208, 1211, 1214, 1217, 1220, 1223, 1226, 1230, 1233, 1236, 1239, 1242, 1245, 1248, 1251, 1253, 1254, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1271, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1282, 1283, 1283, 1284, 1285, 1285, 1286, 1287, 1287, 1287, 1287, 1287, 1288, 1289, 1289, 1289, 1289, 1289, 1290, 1291, 1291, 1291, 1291, 1291, 1292, 1293, 1293, 1293, 1294, 1297, 1300, 1300, 1300, 1300, 1300, 1300, 1301, 1302, 1302, 1303, 1303, 1305, 1305, 1307, 1309, 1312, 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1343, 1346, 1349, 1352, 1355, 1358, 1361, 1364, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1369, 1370, 1370, 1371, 1371, 1372, 1373, 1373, 1374, 1375, 1376, 1377, 1377, 1377, 1378, 1378, 1378, 1378, 1379, 1380, 1381, 1382, 1385, 1386, 1387, 1388, 1388, 1388, 1389, 1389, 1390, 1390, 1393, 1396, 1399, 1402, 1405, 1410, 1414, 1417, 1421, 1424, 1427, 1430, 1432, 1433, 1433, 1435, 1436, 1437, 1437, 1437, 1437, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1447, 1448, 1449, 1449, 1450, 1451, 1452, 1453, 1453, 1453, 1454, 1455, 1455, 1455, 1456, 1457, 1458, 1459, 1459, 1459, 1460, 1460, 1460, 1461, 1462, 1463, 1464, 1464, 1464, 1465, 1466, 1466, 1466, 1466, 1466, 1469, 1470, 1471, 1472, 1472, 1472, 1473, 1473, 1473, 1473, 1474, 1475, 1476, 1477, 1477, 1479, 1481, 1484, 1487, 1490, 1493, 1496, 1499, 1502, 1506, 1509, 1512, 1515, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1521, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1524, 1525, 1526, 1526, 1527, 1527, 1528, 1529, 1530, 1531, 1532, 1532, 1532, 1533, 1533, 1534, 1537, 1537, 1538, 1538, 1539, 1540, 1540, 1541, 1545, 1548, 1551, 1554, 1557, 1560, 1563, 1563, 1565, 1566, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1567, 1568, 1569, 1569, 1570, 1571, 1573, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1575, 1576, 1577, 1577, 1578, 1578, 1579, 1580, 1580, 1581, 1581, 1582, 1583, 1583, 1584, 1584, 1585, 1586, 1586, 1586, 1587, 1588, 1588, 1589, 1589, 1590, 1591, 1592, 1593, 1594, 1594, 1594, 1595, 1595, 1596, 1599, 1603, 1606, 1609, 1612, 1615, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1619, 1620, 1620, 1621, 1621, 1622, 1623, 1626, 1626, 1627, 1628, 1631, 1631, 1631, 1631, 1631, 1632, 1633, 1633, 1634, 1635, 1636, 1637, 1638, 1638, 1638, 1639, 1639, 1639, 1639, 1640, 1641, 1642, 1643, 1643, 1643, 1645, 1646, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1648, 1649, 1649, 1650, 1651, 1651, 1652, 1653, 1654, 1655, 1656, 1656, 1656, 1657, 1658, 1658, 1659, 1659, 1660, 1661, 1664, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1681, 1682, 1685, 1686, 1687, 1688, 1688, 1688, 1689, 1689, 1689, 1689, 1690, 1691, 1692, 1693, 1693, 1693, 1694, 1694, 1695, 1696, 1697, 1698, 1699, 1699, 1699, 1700, 1700, 1701, 1701, 1701, 1702, 1702, 1703, 1703, 1703, 1703, 1703, 1704, 1705, 1705, 1706, 1707, 1708, 1708, 1709, 1710, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1716, 1716, 1717, 1717, 1718, 1719, 1720, 1721, 1722, 1722, 1722, 1723, 1723, 1724, 1724, 1724, 1725, 1725, 1726, 1726, 1727, 1728, 1728, 1729, 1729, 1730, 1731, 1731, 1732, 1732, 1733, 1734, 1735, 1736, 1737, 1737, 1737, 1738, 1738, 1738, 1738, 1739, 1740, 1741, 1742, 1742, 1743, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1772, 1772, 1772, 1772, 1772, 1774, 1775, 1775, 1776, 1777, 1777, 1778, 1778, 1779, 1780, 1780, 1781, 1781, 1782, 1783, 1783, 1784, 1785, 1786, 1786, 1787, 1787, 1788, 1789, 1790, 1791, 1792, 1792, 1792, 1793, 1793, 1794, 1794, 1794, 1795, 1795, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1798, 1799, 1800, 1800, 1800, 1800, 1800, 1801, 1802, 1803, 1803, 1804, 1805, 1805, 1806, 1806, 1807, 1808, 1808, 1809, 1809, 1810, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1812, 1813, 1813, 1814, 1815, 1815, 1816, 1817, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1819, 1820, 1821, 1821, 1821, 1822, 1822, 1822, 1822, 1823, 1824, 1825, 1826, 1826, 1826, 1826, 1826, 1827, 1827, 1828, 1829, 1830, 1831, 1832, 1832, 1832, 1833, 1833, 1834, 1834, 1834, 1835, 1835, 1836, 1836, 1836, 1836, 1837, 1838, 1838, 1839, 1839, 1840, 1841, 1841, 1842, 1842, 1843, 1844, 1844, 1844, 1844, 1845, 1846, 1847, 1847, 1847 } ; static yyconst int yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 20, 20, 20, 23, 24, 25, 26, 27, 28, 1, 29, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 56, 30, 31, 32, 7, 33, 1, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 56, 59, 60, 61, 62, 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 yyconst int yy_meta[63] = { 0, 1, 2, 3, 4, 1, 1, 4, 4, 1, 5, 6, 7, 8, 9, 10, 11, 12, 12, 12, 12, 12, 12, 12, 13, 1, 4, 14, 4, 1, 15, 1, 1, 16, 17, 17, 17, 17, 18, 17, 16, 16, 16, 16, 16, 19, 20, 16, 16, 16, 16, 16, 21, 16, 16, 16, 16, 22, 16, 1, 4, 23, 24 } ; static yyconst short int yy_base[1846] = { 0, 0, 0, 60, 0, 79, 83, 122, 0, 184, 0, 237, 0, 66, 67, 7752,14226, 7745,14226, 68, 7741, 14226,14226, 7737, 7735, 215,14226, 281,14226, 288, 322, 64, 39, 7716, 73, 7712, 7693, 319, 323, 345, 354, 378, 385, 356, 380, 399, 409, 421, 430, 431, 440, 463, 472, 7552, 509, 541,14226, 7603,14226, 577, 0, 584, 606, 278, 662, 0, 82, 7579, 83, 7558, 7544, 595,14226,14226, 253,14226, 621,14226, 7593, 0, 259, 594,14226, 669, 691, 316,14226, 88, 7567, 231, 7559, 7540, 752, 813, 406, 449, 276, 430, 441, 331, 216, 391, 461, 371, 742, 315, 345, 536, 468, 780, 7526, 14226,14226,14226,14226,14226, 7543,14226,14226, 7523, 7564, 14226, 7518, 217, 63, 204, 7520, 7514, 470, 7501, 7547, 14226, 7532, 341, 479, 487, 605, 456, 606, 632, 691, 752, 7504, 0, 7496, 627, 7474, 7489, 7488, 788, 813, 310, 835,14226, 0, 7495, 7491,14226, 583,14226, 714, 874, 7473, 836, 720, 860, 872, 898, 903, 904, 908, 909, 910, 914, 941, 725, 943, 947, 956, 970, 979, 985, 980, 989, 1001, 1012, 1016, 1022, 1027, 1038, 1045, 1054, 1061, 0, 1051, 1101, 1110, 1087, 1159, 317, 7465, 7464, 359, 492, 355, 539, 226, 414, 873, 390,14226, 1117, 7450, 411, 699, 618, 826, 1220, 516, 1188, 641, 0, 0, 1208, 1227, 1236, 611, 0, 457, 1265,14226, 579, 1277, 1243, 7439, 637, 1297, 1036, 7446,14226,14226, 7455,14226, 7423, 1139, 510, 7433, 543, 555, 1140, 1333, 1181,14226, 1358,14226,14226, 0, 7399, 7428, 7425,14226, 7419,14226, 7435, 1419, 626, 1480, 718, 7409, 7377, 1506, 899, 1567, 7387, 7381, 7395, 7355, 7374, 7354, 7345, 7355, 7331, 7334, 7331, 7341, 7331, 736, 7323, 7314, 7310, 7320, 7318, 7286, 7284, 7260, 7275, 74, 7263, 7261, 7243, 7226, 7229, 7229, 1309, 704, 1358, 7234, 7230,14226, 7145, 7131, 7153, 7135, 7151, 7107, 7117, 7112, 7094, 7093, 7096, 689, 7084, 0, 609, 7098, 831, 783, 774, 948, 1004, 975, 933, 7075, 7060, 7062, 7042, 7038, 1394, 768, 1370, 1419, 7018, 7026, 7023, 7025, 1162, 1433, 1440, 1576, 810, 1622, 7014, 7009, 1186, 1466, 1513, 1515, 1331, 1517, 1519, 1395, 1529, 1590, 1605, 1621, 1599, 1628, 1548, 1647, 1652, 1550, 1658, 1659, 1665, 1670, 1681, 1691, 1692, 1702, 1704, 1713, 1714, 1725, 1726, 6990, 770, 829, 694, 6978, 6975, 1032, 6954, 1765, 1452, 1814, 912, 1875, 1936, 1997, 6971,14226, 6987, 985, 6954, 842, 6962, 852, 905, 1466, 1022, 0, 6928, 6957, 6954, 6819, 6814, 937, 267, 747, 308, 761, 417, 847, 786, 978, 1032, 918, 1120, 930, 1752, 2058, 1774, 1843, 2067, 941, 1319, 1887, 1949, 1145, 1265, 1904, 1959, 1075, 1971,14226, 0, 1997, 1467, 2010,14226, 2022, 1610, 1745, 2029, 2123, 6788, 2177, 1836, 2044, 2238, 6782, 2074, 2096, 1855, 2109, 2294, 6781, 2350, 6802, 6800, 6799, 2411, 2472, 2495, 2133, 2116, 2518, 1060, 2574, 2635, 1552, 6762, 1137, 666, 1758, 1145, 2000, 1707, 999, 1170, 613, 2162, 2156, 1845, 2147, 2157, 2161, 1040, 1089, 2190, 1221, 1215, 2210, 1161, 2196, 2215, 2211, 2220, 6754, 0,14226, 6782, 6781, 2221, 1210, 1561, 1392, 1603, 1422, 1796, 1608, 1807, 1528, 1809, 1668, 1654, 1203, 6779, 1336, 1707, 1277, 1899, 1814, 1838, 1898, 1700, 1871, 6764, 6768, 6749, 6747, 2259, 2268,14226, 2209, 2281, 2303, 1094, 2315,14226, 0, 2327, 2385, 2683, 1235, 6769, 6767, 6750, 2414, 6742, 2740, 2418, 2801, 2827, 2420, 2432, 2442, 2453, 2451, 2520, 2498, 2519, 2521, 2542, 2581, 1962, 2585, 2583, 2595, 2597, 2596, 2630, 2642, 2646, 2648, 2644, 2681, 2683, 2705, 2804, 2825, 6725, 6713, 6726, 6704, 6720, 6708, 6716, 6516, 6505, 6489, 6480, 1356, 6465, 2872, 2933, 6504, 6470, 1448, 2839, 2994, 0, 6446, 2901,14226, 6495, 6438, 2556, 2846, 2884, 3055, 6463, 6443, 6438, 6437, 818, 6438, 1479, 1242, 1523, 1341, 1718, 990, 1366, 1511, 1828, 667, 1574, 2945, 2955, 2679, 2965, 2994, 1488, 3016,14226, 0, 1340, 3028, 1648, 3084, 3091, 6391, 6367, 0,14226, 3101, 3121, 1800, 3182, 1915, 0, 2172, 3204, 2205, 0, 2246, 3226, 2307, 0, 3248, 3309, 2906, 1678, 6395, 1244, 6393, 1904, 3371, 1749, 1639, 3432, 3157, 6414, 3169, 1867, 3284, 6411, 0, 3488, 3549, 1901, 1768, 6366, 1538, 1958, 1398, 1295, 1324, 1963, 2061, 1976, 1900, 1614, 1990, 2430, 1992, 1778, 2054, 1874, 2063, 2065, 1574, 2261, 6349, 2008, 1053, 3610, 2160, 6346, 6352, 6266, 6273, 6260, 6270, 6263, 6265, 6245, 6257, 6258, 925, 1930, 6256, 3637, 2222, 2352, 2513,14226, 2387, 3155, 2796, 6248, 6246, 6232, 2236, 6234, 3345, 2051, 3133, 3192, 6235, 3216, 3309, 3418, 2103, 3445,14226, 0, 6232, 6224, 6223, 6220, 3699, 2295, 3461, 3321, 3747, 1500, 3804, 3866, 3058, 3488, 3502, 3914, 1949, 6213, 2373, 3537, 2997, 3542, 3544, 3556, 3568, 3583, 3928, 3761, 3587, 3937, 3938, 3943, 3952, 3959, 3974, 3770, 3771, 2665, 3975, 6186,14226, 6184, 6194, 6174, 6177, 6170, 6166, 6166, 6165, 6152, 6139, 6154, 3514, 4025, 3582, 3994, 4086, 4001, 4141,14226, 2669, 1709, 2074, 1809, 2146, 2130, 2172, 2206, 2143, 1014, 1128, 2428, 4042, 2105, 4027, 4049, 6141, 4056, 4115,14226, 2013, 4200, 4150, 4122, 4222, 4278, 2924, 4329, 4159, 4166, 4351, 4407, 3041, 4458, 4175, 4186, 4480, 4536, 3234, 4587, 4208, 4627, 6128, 4689, 0, 2466, 4231, 4285, 4737, 2210, 4794, 4856, 4264, 2486, 4292, 4316, 2388, 4917, 4978, 1376, 2256, 535, 2154, 2254, 2307, 2276, 2360, 2823, 2326, 2055, 2342, 1754, 1636, 1834, 2828, 2400, 6122, 6116, 6126, 6120, 6122, 6102, 6117, 6102, 2354, 5039, 5989, 2261, 5089, 2590, 2547, 2679, 2901, 2979, 2552, 5984, 2710, 3941, 3972, 5968, 4337, 4358,14226, 4393, 2418, 4414, 4421, 5964, 5975, 5973, 5137, 4488, 4544, 2705, 5183, 5970, 5199, 4598, 4744, 5224, 2374, 5281, 5343, 3998, 3277, 4445, 4522, 2439, 4573,14226, 0, 5966, 5939, 4028, 4444, 4520, 4570, 4089, 5404, 5430, 4924, 4245, 4459, 4928, 4930, 4263, 4126, 2628, 4392,14226, 4231, 5457, 2994, 4233, 4391, 5910, 5917, 5907, 5914, 5901, 5911, 5902, 5899, 5879, 5882, 5882, 4766, 5518, 5579, 1437, 2472, 2695, 2525, 2447, 2531, 2497, 4950, 4978,14226, 5854, 5640, 487, 2540, 2873, 2713, 4995, 2627,14226, 0, 2934, 5696, 3093, 2664, 3094, 2721, 5007, 2876, 0, 3196, 5752, 3257, 2894, 3318, 2787, 5038, 2937,14226, 0, 3467, 4490, 5808, 5830, 5878, 5047, 5145, 2853, 5924, 5882, 5940, 5532, 5167, 5965, 2775, 6022, 6084, 5190, 5253, 5911, 6145, 6206, 5842, 2760, 2459, 2189, 2939, 5839, 2537, 2953, 3000, 3571, 5830, 5842, 5831, 6267, 4914, 5830, 3031, 3085, 2945, 5831, 5828, 3507, 5813, 3292, 3485, 6317, 3221, 4522, 4071, 4352, 6378, 6400, 5802, 4657, 4488, 5405, 4546, 3155, 5206, 5231,14226, 6412, 3426, 5539, 5579, 6428, 6459, 5595, 5602, 3428, 6505, 5813, 6521, 6560, 5230, 5631, 3081, 5647, 5654, 5798, 5809, 5808, 5151, 5677, 5407, 0, 5693, 5679, 5700, 3537, 5563,14226, 4654, 6622, 5167, 5008, 6684, 3159, 6744, 6773, 6802, 3125, 6859, 6921, 3557, 5730, 5408, 5779, 5790, 5783, 5784, 5756, 5771, 5751, 3187, 3199, 2608, 5764, 3939, 5794, 5866, 4275, 5907, 4985, 5830, 5947, 4340, 5994, 5029, 5842, 6146, 4404, 6982, 6159, 7004, 3243, 7050, 3454, 5885, 5972, 7066, 7097, 6171, 6206, 3456, 7143, 5766, 7159, 7198, 7259, 7320, 5744, 5756, 5727, 5715, 5683, 5665, 5644, 5665, 5645, 5659, 5646, 5656, 5645, 5635, 5609, 5609, 2425, 5597, 4004, 7381, 4485, 7430, 3605, 5736, 5766, 5594, 5410, 5601, 5733, 5606, 6228, 6255, 5603, 7469, 3758, 6272, 6420, 5584, 5729, 6364, 6386,14226, 5678, 0, 3582, 7499, 7528, 7557, 3440, 7614, 7676, 4086, 5575, 7736, 7772, 5017, 7808, 4207, 7837, 7874, 7903, 7920, 7963, 8020, 0, 5545, 4649, 6482,14226, 5719, 8082, 5906, 5909, 5540, 5551, 5538, 6436, 6766, 3782, 6512, 6991, 3940, 6528, 7013, 3944, 5549, 6160, 6213, 0, 7058, 7074, 5510, 8133, 3769, 7104, 7126, 5486, 5477, 5408, 5401,14226, 5407, 5393, 5381, 5238, 5231, 5221, 5192, 5159, 5133, 5025, 5020, 0, 4257, 1868, 3745, 4355, 4593, 3249, 3313, 5596, 2877, 0, 4766, 2379, 4313, 4537, 4626, 3757, 3918, 5652, 2991, 2870, 4963, 6799, 4988, 6746, 6239, 7151, 7259, 4949, 5971, 4943, 8163, 8199, 6236, 8235, 5051, 8264, 8301, 8330, 8347, 8390, 8447, 0, 6283, 8507, 6469, 8536, 8565, 4894, 8582, 8637, 8673, 6825, 8709, 6232, 8724, 0, 6458, 6748, 4792, 7269, 6823, 0, 3624, 8761, 8790, 8819, 3952, 8876, 8938, 6468, 7014, 7285, 7320, 4749, 4672, 4625, 4596, 4581, 4566, 4535, 4533, 4448, 4357, 4311, 4284, 4254, 2562, 2972, 2910, 3410, 3130, 872, 3201, 2603, 3023, 3495, 3026, 4287, 3946, 4049, 3231, 3320, 3555, 3467, 2682, 3511, 3135, 4063, 4083, 3961, 4595, 3949, 3483, 5527, 7126, 5789, 7342, 7282, 4079, 5735, 8998, 7342, 9027, 9056, 4052, 9073, 9128, 9164, 7346, 9200, 6778, 9215, 0, 7015, 7326, 4051, 7367, 7371, 9252, 9281, 6805, 9310, 7404, 9339, 9368, 3989, 7408, 3931, 7420, 7424, 7468, 3768, 9397, 9433, 7479, 9469, 7026, 9498, 9535, 9564, 9581, 9624, 9681, 0, 7481, 7107, 4145, 3675, 3633, 3570, 3414, 3349, 3315, 3264, 4003, 3245, 4293, 3583, 4351, 4124, 4352, 3316, 4054, 3746, 4551, 2785, 4415, 4121, 3198, 4745, 4118, 4888, 4416, 4890, 4168, 4290, 4179, 4914, 4721, 4452, 3152, 3037, 3013, 2977, 4189, 7530, 7363, 9741, 9770, 7107, 9799, 7566, 9828, 9857, 2882, 7504, 2865, 7738, 7512, 7568, 9886, 9915, 7265, 7578, 9944, 7747, 9973,10002, 2838, 10019,10074,10110, 7781,10146, 7267,10161, 0, 7777, 7811, 2808, 7820, 7877, 2718, 2643, 2623, 4484, 4289, 4489, 4418, 4741, 4491, 4541, 4236, 4335, 4582, 4645, 4891, 4649, 4896, 4952, 4742, 5012, 5139, 4257, 4570, 5031, 5048, 2498, 2290, 2185, 2113, 7942, 7422, 7375, 7944,14226, 7565,10200, 7757, 7746,10260,10289, 7445, 7885,10318,10347, 7582,10376, 7945, 10405,10434, 2038, 7963, 1990, 8143, 7984, 7987, 4492, 4419, 5141, 5140, 3084, 5159, 2548, 4739, 5229, 5226, 5233, 4368, 5245, 4456, 1935, 1767, 1685, 1552, 8167, 7813, 0, 5436, 10463,10492,10521, 4988,10578,10640, 7748,10700,10729, 7793, 8175, 4910, 5489, 5040, 5491, 5536, 5535, 1466, 1225, 1285, 1273,10758,10794, 8208,10830, 7887,10859,10896,10925,10942, 10985,11042, 0, 8210, 1154, 4980,11102, 8245,11131,11160, 1024,11177,11232,11268, 8247,11304, 7926,11319, 0, 8243, 8304, 962, 8312, 8368, 789, 586,11356,11385, 7928,11414, 8355,11443,11472, 404, 8371, 390, 8391, 8411, 8414, 3527, 295,11501,11530, 7971, 8510, 5522,14226,11561,11585,11609, 11618,11632,11655,11671,11694,11707,11724, 5734,11748,11771, 11793,11809,11822,11845, 5776,11862,11873,11884, 5789,11888, 11912,11935,11959,11972,11984,12008,12017,12032,12056,12069, 12088,12106,12117,12141,12164, 5857,12180,12204,12217,12241, 12264,12274, 6183,12285,12307,12318,12329,12341,12365,12388, 12409, 6484,12433,12452,12476,12493,12508, 6493,12519,12532, 12556,12580,12603,12626, 6503,12648,12672,12685,12700, 6740, 12711, 6840, 6973, 7036, 7172,12730, 7297,12753,12766,12784, 12808,12827,12840,12850, 7308,12861,12885,12909,12933,12956, 12969,12993,13006,13019,13027,13049,13068,13087,13107,13130, 13148,13172,13189,13213,13226,13245,13269,13292,13307, 7369, 13318,13342,13365,13387,13400,13423, 7392,13443, 7460,13463, 7491,13484,13507,13531,13555,13574,13597,13619,13643,13667, 13690,13703,13722,13746,13759,13782,13802,13822,13843,13866, 13890,13914,13937,13961, 7546,13985,14009,14033,14057,14081, 14105,14129,14153,14177,14201 } ; static yyconst short int yy_def[1846] = { 0, 1687, 1, 1, 3, 1, 1, 1687, 7, 1687, 9, 9, 11, 1688, 1688, 1687, 1687, 1687, 1687, 1687, 1689, 1687, 1687, 1687, 1690, 1691, 1687, 1687, 1687, 1687, 1687, 30, 1687, 1687, 1687, 1692, 1687, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1687, 1687, 1687, 1687, 1687, 1687, 27, 54, 1687, 1687, 62, 1687, 54, 1687, 1687, 1687, 1687, 1687, 1691, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 71, 1687, 27, 1687, 1687, 1687, 84, 1687, 1687, 1687, 1687, 1694, 1687, 1695, 1695, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1696, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1689, 1687, 1690, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1687, 30, 31, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1698, 1692, 1699, 1687, 1687, 1687, 1693, 1700, 1701, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 54, 1687, 54, 1687, 1687, 1687, 198, 1702, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1687, 1687, 62, 62, 1704, 1687, 1704, 1687, 1687, 1687, 1687, 1705, 64, 1687, 1687, 1687, 225, 54, 1687, 1687, 1687, 1687, 1687, 1687, 84, 84, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 236, 1706, 1687, 1687, 1687, 1687, 1707, 1687, 1708, 1687, 1687, 1687, 1687, 1709, 1687, 1710, 1711, 1687, 1687, 1687, 1687, 1712, 1687, 1700, 1687, 1713, 1687, 1712, 1687, 266, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 1687, 1714, 1687, 1715, 1716, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1717, 1718, 1719, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1720, 1721, 1721, 266, 266, 1687, 1687, 1687, 348, 1722, 1723, 1724, 1724, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 394, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 397, 1687, 1687, 1687, 1687, 1687, 398, 1726, 1687, 1727, 1728, 1729, 1730, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1687, 1687, 1687, 1687, 1687, 433, 1687, 1687, 1687, 1731, 1732, 1687, 1687, 1687, 1687, 1687, 1733, 1687, 1734, 1687, 1687, 1687, 1735, 1736, 1687, 1687, 454, 1687, 1735, 1687, 1687, 459, 1687, 456, 1737, 1687, 1687, 465, 1687, 1738, 1738, 1739, 1739, 1740, 1740, 1687, 1687, 1687, 476, 1741, 1741, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 1687, 1742, 1687, 1743, 1743, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1744, 1745, 1745, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1747, 1687, 1687, 1687, 1687, 1687, 1748, 1687, 1687, 1687, 553, 1749, 1750, 1751, 1752, 1752, 1687, 1753, 1754, 1754, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1687, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 605, 1687, 1687, 1687, 1755, 1687, 1687, 1687, 1687, 1687, 610, 1687, 617, 1687, 1756, 1756, 1757, 1757, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1687, 1687, 1759, 1687, 1687, 1687, 1687, 1687, 1760, 1687, 1687, 1687, 1687, 1687, 1761, 1687, 1762, 1687, 1687, 1687, 1687, 1687, 1687, 1763, 1687, 1687, 1687, 1764, 1687, 1687, 1687, 1765, 1687, 1687, 1766, 1766, 1766, 1766, 1766, 1766, 1687, 1766, 1766, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1767, 1768, 1768, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, 1769, 1754, 717, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1770, 1771, 1687, 1772, 1772, 1772, 1687, 1772, 1772, 1772, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1773, 1774, 1687, 1687, 1687, 1687, 1687, 1775, 1776, 1777, 1778, 1778, 1687, 762, 1779, 1779, 1779, 766, 1687, 1687, 1780, 1687, 1687, 1687, 773, 1781, 717, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1782, 1782, 1780, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 811, 1687, 1687, 811, 1687, 811, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1687, 1687, 1687, 1687, 1784, 1687, 1687, 1687, 1785, 1687, 1687, 1687, 1687, 1687, 1786, 1687, 1687, 1687, 1687, 1687, 1787, 1687, 1687, 1687, 1687, 1687, 1788, 1687, 1687, 1687, 859, 1687, 861, 861, 1789, 1789, 1789, 866, 1687, 1687, 1687, 1687, 1687, 1687, 1790, 1791, 1791, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 876, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1792, 1792, 1687, 1793, 1793, 1793, 1793, 1793, 1687, 1687, 1687, 1794, 1794, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1795, 1796, 1796, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 937, 1687, 1687, 1798, 1799, 1687, 1687, 1687, 1687, 1687, 1800, 1801, 1802, 1798, 1798, 1798, 1798, 1798, 1803, 1803, 1798, 1798, 1798, 1798, 1798, 1804, 1804, 1794, 1794, 1687, 1794, 1687, 1794, 1794, 1798, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1687, 1687, 1687, 1687, 1687, 1806, 1687, 1806, 1687, 1687, 1687, 1687, 1807, 1687, 1687, 1808, 1687, 1808, 1687, 1687, 1687, 1809, 1687, 1687, 1810, 1687, 1810, 1687, 1687, 1687, 1687, 1811, 1687, 1687, 1687, 1687, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1039, 1687, 1687, 1687, 1687, 1687, 1813, 1813, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1814, 1815, 1687, 1816, 1816, 1816, 1816, 1817, 1817, 1687, 1818, 1818, 1819, 1819, 1687, 1687, 1687, 1687, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1687, 1821, 1687, 1687, 1687, 1687, 1822, 1823, 1823, 1821, 1821, 1821, 1079, 1821, 1821, 1821, 1818, 1818, 1687, 1818, 1687, 1818, 1818, 1687, 1124, 1819, 1819, 1819, 1128, 1687, 1687, 1819, 1824, 1824, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1825, 1825, 1825, 1687, 1687, 1687, 1687, 1826, 1687, 1687, 1687, 1687, 1827, 1687, 1687, 1687, 1687, 1828, 1687, 1687, 1687, 1162, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1687, 1830, 1830, 1178, 1178, 1178, 1178, 1178, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1831, 1831, 1832, 1832, 1833, 1833, 1833, 1687, 1818, 1818, 1824, 1824, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1100, 1821, 1687, 1687, 1687, 1821, 1121, 1121, 1818, 1818, 1818, 1226, 1687, 1687, 1818, 1128, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1128, 1128, 1687, 1131, 1834, 1824, 1824, 1687, 1824, 1687, 1824, 1824, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1162, 1687, 1687, 1835, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1175, 1178, 1178, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1198, 1198, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1200, 1200, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1687, 1833, 1833, 1687, 1824, 1824, 1820, 1820, 1820, 1821, 1226, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1226, 1226, 1687, 1229, 1836, 1819, 1819, 1819, 1819, 1237, 1128, 1819, 1819, 1819, 1819, 1819, 1237, 1242, 1837, 1834, 1838, 1834, 1834, 1249, 1249, 1824, 1824, 1824, 1357, 1687, 1687, 1824, 1835, 1829, 1829, 1829, 1178, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1687, 1687, 1833, 1833, 1833, 1833, 1687, 1821, 1818, 1818, 1818, 1818, 1327, 1226, 1818, 1818, 1818, 1818, 1818, 1327, 1332, 1839, 1836, 1838, 1836, 1836, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1346, 1837, 1840, 1837, 1837, 1834, 1357, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1357, 1357, 1687, 1360, 1841, 1687, 1178, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1687, 1687, 1687, 1687, 1687, 1842, 1842, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1423, 1839, 1840, 1839, 1839, 1836, 1819, 1819, 1819, 1837, 1824, 1824, 1824, 1824, 1449, 1357, 1824, 1824, 1824, 1824, 1824, 1449, 1454, 1843, 1841, 1838, 1841, 1841, 1687, 1687, 1687, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1687, 1687, 1687, 1687, 1842, 1842, 1842, 1842, 1687, 1842, 1687, 1842, 1842, 1818, 1818, 1818, 1839, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1527, 1843, 1840, 1843, 1843, 1841, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1687, 1687, 1687, 1687, 1842, 1842, 1569, 1569, 1842, 1842, 1842, 1613, 1687, 1687, 1842, 1824, 1824, 1824, 1843, 1831, 1831, 1831, 1832, 1832, 1832, 1687, 1687, 1687, 1613, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1613, 1613, 1687, 1616, 1844, 1687, 1687, 1842, 1842, 1842, 1842, 1637, 1613, 1842, 1842, 1842, 1842, 1842, 1637, 1642, 1845, 1844, 1838, 1844, 1844, 1687, 1687, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1658, 1845, 1840, 1845, 1845, 1844, 1687, 1687, 1842, 1842, 1842, 1845, 1687, 0, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687 } ; static yyconst short int yy_nxt[14289] = { 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 27, 29, 22, 30, 31, 31, 31, 31, 31, 31, 16, 28, 32, 33, 34, 35, 16, 36, 16, 37, 38, 39, 40, 41, 42, 43, 44, 37, 45, 46, 37, 47, 37, 37, 37, 48, 49, 50, 37, 51, 37, 52, 37, 37, 37, 16, 53, 16, 22, 54, 55, 121, 121, 56, 57, 118, 118, 58, 59, 60, 59, 61, 56, 62, 63, 63, 63, 63, 63, 63, 64, 65, 66, 67, 68, 71, 72, 69, 73, 71, 72, 121, 73, 119, 119, 1687, 121, 121, 122, 123, 124, 312, 125, 126, 210, 210, 210, 210, 313, 127, 230, 230, 500, 128, 129, 501, 70, 1687, 56, 16, 74, 75, 76, 20, 21, 77, 78, 24, 79, 80, 81, 82, 81, 83, 77, 84, 85, 85, 85, 85, 85, 85, 16, 86, 87, 88, 89, 90, 16, 91, 16, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 100, 103, 100, 100, 100, 104, 105, 106, 100, 107, 100, 108, 100, 100, 100, 109, 110, 16, 77, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 113, 111, 114, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 115, 111, 111, 111, 111, 111, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 111, 111, 111, 111, 111, 111, 314, 111, 134, 135, 315, 136, 228, 415, 137, 230, 230, 138, 231, 264, 264, 111, 310, 311, 139, 423, 140, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 141, 415, 142, 143, 143, 143, 143, 143, 143, 149, 149, 149, 149, 149, 149, 149, 229, 1687, 281, 122, 123, 124, 232, 125, 144, 158, 264, 264, 626, 158, 127, 338, 338, 159, 145, 129, 146, 159, 147, 1687, 148, 150, 415, 143, 143, 143, 143, 143, 143, 143, 161, 158, 1686, 162, 161, 1687, 1687, 162, 322, 159, 158, 151, 158, 628, 152, 264, 264, 165, 159, 287, 159, 153, 298, 163, 164, 324, 161, 1687, 1687, 162, 288, 264, 264, 154, 158, 161, 158, 161, 162, 415, 162, 158, 159, 415, 159, 264, 264, 166, 167, 159, 168, 419, 175, 299, 176, 158, 169, 170, 420, 161, 416, 161, 162, 159, 162, 158, 161, 292, 177, 162, 171, 264, 264, 159, 415, 172, 927, 158, 275, 178, 161, 289, 181, 162, 173, 159, 158, 158, 174, 179, 161, 290, 264, 162, 159, 159, 158, 428, 415, 180, 1687, 415, 161, 1684, 159, 162, 264, 264, 276, 277, 424, 161, 161, 228, 162, 162, 630, 182, 183, 158, 282, 161, 1687, 322, 162, 184, 185, 159, 158, 283, 264, 264, 186, 284, 291, 187, 159, 285, 188, 286, 324, 264, 264, 1000, 161, 278, 322, 162, 189, 264, 264, 279, 280, 161, 322, 190, 162, 328, 318, 191, 302, 264, 264, 324, 192, 193, 319, 194, 264, 264, 229, 324, 320, 195, 325, 196, 415, 196, 197, 1145, 198, 199, 199, 199, 199, 199, 199, 435, 435, 326, 240, 240, 200, 1005, 417, 418, 201, 202, 203, 204, 201, 205, 206, 201, 201, 201, 201, 201, 207, 201, 201, 201, 208, 209, 201, 201, 201, 201, 201, 201, 201, 201, 210, 415, 240, 240, 456, 456, 300, 122, 123, 124, 301, 125, 126, 231, 264, 264, 421, 158, 127, 1048, 422, 264, 128, 129, 211, 159, 212, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 215, 233, 161, 234, 235, 235, 235, 235, 235, 235, 322, 322, 215, 216, 322, 213, 213, 213, 213, 213, 213, 213, 217, 134, 135, 1681, 136, 324, 324, 137, 232, 324, 138, 218, 217, 215, 219, 322, 1687, 139, 230, 140, 327, 220, 262, 262, 329, 122, 123, 124, 700, 125, 126, 318, 324, 221, 222, 217, 127, 264, 1687, 319, 128, 129, 1687, 330, 223, 320, 223, 224, 333, 225, 226, 226, 226, 226, 226, 226, 236, 236, 236, 236, 236, 236, 236, 237, 1687, 238, 239, 415, 240, 241, 242, 215, 693, 240, 322, 240, 243, 240, 235, 235, 235, 235, 235, 235, 235, 244, 158, 245, 246, 247, 264, 324, 158, 217, 159, 828, 248, 158, 249, 250, 159, 523, 251, 252, 524, 159, 253, 429, 331, 596, 254, 161, 255, 597, 162, 262, 262, 161, 256, 508, 162, 257, 161, 240, 158, 162, 261, 491, 491, 262, 263, 509, 159, 366, 262, 510, 262, 355, 262, 149, 149, 149, 149, 149, 149, 149, 293, 415, 265, 266, 267, 627, 268, 294, 295, 338, 338, 322, 264, 264, 296, 415, 303, 297, 303, 629, 322, 304, 305, 305, 305, 305, 305, 305, 324, 149, 149, 149, 149, 149, 149, 149, 269, 324, 270, 271, 415, 261, 592, 593, 262, 263, 531, 159, 632, 262, 337, 262, 215, 262, 149, 149, 149, 149, 149, 149, 149, 530, 158, 265, 272, 267, 1680, 268, 322, 1687, 159, 339, 415, 339, 217, 152, 340, 340, 340, 340, 340, 340, 340, 273, 274, 324, 158, 161, 219, 529, 162, 1687, 400, 400, 159, 594, 819, 269, 158, 270, 344, 415, 595, 400, 400, 631, 159, 356, 345, 354, 346, 161, 346, 347, 162, 348, 349, 349, 349, 349, 349, 349, 350, 161, 158, 271, 162, 415, 905, 158, 158, 425, 159, 159, 158, 158, 158, 159, 159, 426, 158, 1471, 159, 159, 159, 427, 617, 617, 159, 161, 472, 902, 162, 357, 161, 161, 358, 162, 162, 161, 161, 161, 162, 162, 162, 161, 361, 158, 162, 158, 322, 1687, 415, 158, 360, 159, 903, 159, 359, 363, 626, 159, 158, 364, 415, 322, 362, 324, 367, 367, 159, 415, 161, 1687, 161, 162, 158, 162, 161, 365, 1687, 162, 324, 637, 159, 158, 158, 161, 625, 535, 162, 158, 322, 159, 159, 158, 368, 615, 761, 159, 402, 161, 1687, 159, 162, 532, 372, 158, 369, 324, 161, 161, 415, 162, 162, 159, 161, 371, 158, 162, 161, 322, 158, 162, 415, 370, 159, 534, 158, 633, 159, 373, 161, 158, 401, 162, 159, 402, 324, 825, 374, 159, 237, 161, 158, 698, 162, 161, 415, 616, 162, 158, 159, 161, 357, 533, 162, 264, 161, 159, 158, 162, 376, 375, 244, 377, 415, 158, 159, 161, 600, 626, 162, 1669, 378, 159, 161, 451, 601, 162, 379, 251, 705, 634, 602, 161, 411, 380, 162, 384, 385, 386, 161, 387, 388, 162, 649, 649, 264, 1687, 389, 383, 894, 382, 390, 391, 381, 1687, 397, 397, 397, 397, 397, 397, 397, 747, 747, 392, 510, 392, 393, 1687, 394, 395, 395, 395, 395, 395, 395, 197, 706, 396, 199, 199, 199, 199, 199, 199, 214, 214, 214, 214, 214, 214, 214, 452, 457, 264, 384, 385, 386, 215, 387, 388, 415, 453, 458, 453, 458, 389, 454, 459, 415, 390, 391, 398, 635, 399, 1687, 636, 400, 401, 993, 217, 402, 400, 1687, 400, 403, 400, 199, 199, 199, 199, 199, 199, 199, 463, 692, 404, 405, 406, 558, 1687, 647, 264, 695, 464, 407, 464, 559, 408, 465, 264, 436, 1665, 436, 711, 409, 437, 437, 437, 437, 437, 437, 437, 717, 560, 730, 264, 410, 699, 353, 411, 718, 400, 430, 224, 264, 439, 226, 226, 226, 226, 226, 226, 431, 732, 431, 432, 737, 433, 434, 434, 434, 434, 434, 434, 440, 440, 440, 440, 440, 440, 440, 441, 674, 226, 226, 226, 226, 226, 226, 226, 236, 236, 236, 236, 236, 236, 236, 1645, 708, 264, 1687, 442, 415, 709, 443, 264, 471, 303, 821, 303, 441, 444, 304, 305, 305, 305, 305, 305, 305, 446, 322, 446, 1687, 445, 447, 448, 448, 448, 448, 448, 448, 238, 239, 443, 240, 241, 242, 324, 1565, 240, 444, 240, 735, 240, 236, 236, 236, 236, 236, 236, 236, 215, 445, 245, 246, 247, 304, 305, 305, 305, 305, 305, 305, 562, 449, 450, 435, 435, 1646, 252, 264, 563, 215, 217, 882, 461, 254, 461, 255, 733, 462, 462, 462, 462, 462, 462, 462, 257, 161, 240, 237, 162, 238, 239, 217, 240, 241, 242, 528, 264, 240, 415, 240, 883, 240, 305, 305, 305, 305, 305, 305, 305, 244, 823, 245, 246, 247, 340, 340, 340, 340, 340, 340, 340, 717, 249, 415, 158, 807, 251, 252, 808, 718, 508, 626, 159, 541, 254, 541, 255, 481, 542, 542, 542, 542, 542, 542, 542, 257, 510, 240, 158, 161, 261, 717, 162, 262, 263, 721, 159, 264, 262, 718, 262, 881, 262, 340, 340, 340, 340, 340, 340, 340, 264, 568, 265, 266, 267, 347, 268, 544, 349, 349, 349, 349, 349, 349, 545, 545, 545, 545, 545, 545, 545, 723, 811, 811, 415, 158, 605, 605, 605, 605, 605, 605, 605, 159, 737, 618, 269, 618, 270, 344, 619, 619, 619, 619, 619, 619, 619, 345, 1142, 346, 161, 346, 347, 162, 348, 349, 349, 349, 349, 349, 349, 350, 831, 831, 262, 158, 415, 261, 561, 653, 262, 263, 562, 159, 158, 262, 562, 262, 562, 262, 563, 654, 159, 820, 563, 655, 563, 717, 562, 265, 266, 267, 352, 268, 565, 718, 563, 161, 415, 161, 162, 161, 162, 161, 162, 826, 162, 158, 575, 158, 415, 158, 567, 161, 352, 159, 162, 159, 575, 159, 717, 566, 726, 269, 564, 270, 473, 822, 718, 879, 575, 691, 161, 569, 161, 162, 474, 162, 474, 475, 264, 476, 477, 477, 477, 477, 477, 477, 546, 158, 349, 349, 349, 349, 349, 349, 349, 159, 562, 367, 1630, 415, 717, 264, 158, 720, 563, 717, 547, 457, 718, 548, 159, 829, 161, 718, 264, 162, 549, 458, 562, 458, 892, 161, 459, 570, 162, 562, 563, 161, 550, 551, 162, 551, 552, 563, 553, 554, 554, 554, 554, 554, 554, 573, 571, 161, 158, 722, 162, 491, 725, 158, 161, 717, 159, 162, 264, 158, 158, 159, 572, 718, 649, 649, 562, 159, 159, 717, 471, 562, 574, 161, 563, 579, 162, 718, 161, 563, 576, 162, 158, 1055, 161, 161, 577, 162, 162, 264, 159, 161, 562, 562, 162, 729, 161, 578, 674, 162, 563, 563, 580, 158, 674, 562, 581, 161, 158, 471, 162, 159, 322, 563, 158, 158, 159, 161, 161, 322, 162, 162, 159, 159, 1629, 728, 158, 158, 161, 324, 161, 162, 582, 162, 159, 159, 324, 583, 415, 161, 161, 740, 162, 162, 585, 586, 452, 415, 697, 584, 587, 161, 161, 987, 162, 162, 453, 734, 453, 158, 264, 454, 589, 638, 824, 638, 588, 159, 639, 639, 639, 639, 639, 639, 639, 674, 674, 737, 590, 393, 471, 604, 395, 395, 395, 395, 395, 395, 432, 1054, 640, 434, 434, 434, 434, 434, 434, 717, 384, 385, 386, 658, 387, 388, 877, 718, 694, 264, 717, 389, 717, 264, 264, 390, 391, 398, 718, 399, 718, 889, 400, 606, 264, 659, 737, 400, 322, 400, 607, 400, 395, 395, 395, 395, 395, 395, 395, 457, 415, 404, 405, 406, 724, 324, 514, 659, 158, 458, 608, 458, 322, 609, 459, 989, 159, 727, 463, 415, 610, 641, 641, 641, 641, 641, 641, 641, 464, 324, 464, 1056, 611, 465, 717, 612, 827, 400, 398, 738, 399, 702, 718, 400, 401, 871, 871, 402, 400, 264, 400, 403, 400, 199, 199, 199, 199, 199, 199, 199, 264, 905, 404, 405, 406, 437, 437, 437, 437, 437, 437, 437, 322, 322, 408, 890, 1378, 741, 658, 491, 264, 409, 440, 440, 440, 440, 440, 440, 440, 324, 324, 674, 674, 410, 736, 887, 411, 471, 400, 398, 659, 399, 730, 648, 400, 401, 264, 264, 402, 400, 739, 400, 215, 400, 397, 397, 397, 397, 397, 397, 397, 732, 659, 404, 405, 406, 575, 437, 437, 437, 437, 437, 437, 437, 217, 613, 575, 440, 440, 440, 440, 440, 440, 440, 650, 1687, 650, 1628, 575, 651, 651, 651, 651, 651, 651, 651, 880, 411, 443, 400, 398, 884, 399, 158, 264, 400, 606, 1687, 491, 264, 400, 159, 400, 886, 400, 447, 448, 448, 448, 448, 448, 448, 264, 927, 404, 405, 406, 481, 448, 448, 448, 448, 448, 448, 448, 656, 264, 656, 264, 696, 657, 657, 657, 657, 657, 657, 657, 454, 455, 455, 455, 455, 455, 455, 264, 264, 653, 893, 612, 997, 400, 430, 459, 460, 460, 460, 460, 460, 460, 747, 747, 431, 655, 431, 432, 655, 433, 434, 434, 434, 434, 434, 434, 642, 1620, 434, 434, 434, 434, 434, 434, 434, 462, 462, 462, 462, 462, 462, 462, 885, 264, 1053, 891, 643, 481, 415, 644, 264, 481, 264, 264, 264, 988, 645, 462, 462, 462, 462, 462, 462, 462, 922, 922, 831, 831, 646, 658, 465, 466, 466, 466, 466, 466, 466, 682, 682, 682, 682, 682, 682, 682, 455, 455, 455, 455, 455, 455, 455, 659, 475, 158, 681, 477, 477, 477, 477, 477, 477, 159, 158, 158, 415, 1606, 776, 158, 158, 575, 159, 159, 660, 659, 1687, 159, 159, 415, 662, 575, 415, 626, 704, 991, 661, 238, 239, 990, 240, 241, 242, 575, 481, 240, 701, 240, 158, 240, 456, 456, 663, 703, 158, 491, 159, 264, 415, 245, 246, 247, 159, 662, 264, 992, 264, 264, 158, 158, 449, 264, 264, 158, 663, 252, 159, 159, 158, 717, 546, 159, 254, 481, 255, 663, 159, 718, 1605, 737, 712, 322, 415, 257, 915, 240, 662, 264, 707, 626, 264, 470, 916, 548, 666, 714, 264, 663, 324, 710, 549, 460, 460, 460, 460, 460, 460, 460, 663, 794, 264, 264, 550, 470, 713, 264, 667, 795, 1071, 715, 264, 719, 542, 542, 542, 542, 542, 542, 542, 664, 663, 542, 542, 542, 542, 542, 542, 542, 667, 905, 481, 665, 666, 352, 545, 545, 545, 545, 545, 545, 545, 352, 264, 1049, 264, 666, 264, 466, 466, 466, 466, 466, 466, 466, 667, 746, 545, 545, 545, 545, 545, 545, 545, 748, 1051, 748, 264, 667, 749, 749, 749, 749, 749, 749, 749, 668, 667, 548, 552, 1604, 751, 554, 554, 554, 554, 554, 554, 669, 237, 667, 238, 239, 902, 240, 241, 242, 1050, 264, 240, 1687, 240, 322, 240, 467, 467, 467, 467, 467, 467, 467, 244, 776, 245, 246, 247, 1052, 264, 903, 324, 1687, 467, 467, 467, 670, 467, 467, 683, 251, 252, 491, 481, 671, 264, 907, 737, 254, 322, 255, 752, 752, 752, 752, 752, 752, 752, 352, 257, 528, 240, 672, 264, 673, 558, 324, 674, 675, 158, 676, 158, 674, 559, 674, 1391, 674, 159, 909, 159, 352, 562, 1045, 158, 922, 922, 677, 678, 679, 563, 560, 159, 471, 158, 161, 353, 161, 162, 367, 162, 1057, 159, 158, 264, 158, 1104, 1104, 415, 161, 770, 159, 162, 159, 888, 777, 626, 1288, 470, 161, 1289, 680, 162, 674, 473, 264, 470, 415, 161, 778, 161, 162, 345, 162, 474, 780, 474, 475, 683, 476, 477, 477, 477, 477, 477, 477, 350, 473, 779, 1143, 158, 1180, 415, 871, 871, 345, 626, 474, 159, 474, 475, 264, 476, 477, 477, 477, 477, 477, 477, 350, 683, 158, 158, 158, 1687, 161, 322, 415, 162, 159, 159, 159, 1603, 684, 782, 477, 477, 477, 477, 477, 477, 477, 1000, 324, 158, 1144, 161, 161, 161, 162, 162, 162, 159, 685, 1078, 415, 686, 781, 737, 626, 322, 415, 1079, 687, 401, 626, 908, 402, 783, 161, 784, 1182, 162, 617, 617, 688, 158, 324, 261, 785, 905, 262, 263, 158, 159, 158, 262, 158, 262, 264, 262, 159, 1005, 159, 905, 159, 1624, 158, 562, 158, 265, 266, 267, 322, 268, 159, 563, 159, 161, 1466, 161, 162, 161, 162, 367, 162, 411, 788, 786, 689, 324, 787, 161, 161, 161, 162, 162, 162, 1074, 1000, 789, 967, 158, 367, 269, 905, 270, 562, 415, 261, 159, 1473, 262, 263, 158, 563, 158, 262, 158, 262, 158, 262, 159, 967, 159, 626, 159, 161, 159, 970, 162, 265, 266, 267, 357, 268, 1010, 971, 967, 161, 1279, 161, 162, 161, 162, 161, 162, 401, 162, 1005, 402, 1279, 792, 158, 790, 158, 1687, 1687, 791, 690, 967, 159, 322, 159, 642, 269, 970, 270, 753, 357, 554, 554, 554, 554, 554, 554, 554, 794, 161, 324, 161, 162, 1081, 162, 528, 795, 1005, 644, 754, 357, 1082, 755, 1090, 1090, 645, 415, 1075, 1484, 756, 411, 1146, 1146, 161, 626, 793, 162, 646, 353, 1151, 1151, 757, 352, 762, 352, 352, 352, 352, 352, 352, 352, 763, 352, 764, 352, 764, 765, 352, 766, 767, 767, 767, 767, 767, 767, 768, 352, 352, 352, 352, 352, 1279, 352, 353, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 352, 352, 352, 352, 562, 1156, 1156, 158, 1687, 1179, 322, 470, 563, 264, 771, 159, 771, 772, 905, 773, 774, 774, 774, 774, 774, 774, 956, 324, 158, 161, 776, 963, 161, 470, 957, 162, 159, 911, 1687, 964, 771, 761, 771, 772, 1546, 773, 774, 774, 774, 774, 774, 774, 812, 161, 812, 1687, 162, 813, 813, 813, 813, 813, 813, 813, 619, 619, 619, 619, 619, 619, 619, 1165, 1165, 1311, 796, 398, 1000, 399, 264, 1010, 400, 606, 737, 264, 1578, 400, 471, 400, 607, 400, 395, 395, 395, 395, 395, 395, 395, 1019, 927, 404, 405, 406, 619, 619, 619, 619, 619, 619, 619, 672, 905, 609, 1003, 737, 815, 322, 815, 676, 610, 816, 816, 816, 816, 816, 816, 816, 1005, 658, 1574, 1005, 611, 1390, 324, 612, 861, 400, 398, 658, 399, 471, 1019, 400, 606, 905, 1076, 1468, 400, 1024, 400, 659, 400, 605, 605, 605, 605, 605, 605, 605, 215, 659, 404, 405, 406, 639, 639, 639, 639, 639, 639, 639, 1007, 659, 810, 639, 639, 639, 639, 639, 639, 639, 217, 659, 1181, 641, 641, 641, 641, 641, 641, 641, 1024, 1189, 264, 322, 612, 1190, 400, 398, 967, 399, 158, 481, 400, 606, 830, 905, 264, 400, 159, 400, 324, 400, 641, 641, 641, 641, 641, 641, 641, 1562, 967, 404, 405, 406, 528, 161, 970, 1077, 162, 832, 1467, 832, 357, 644, 833, 833, 833, 833, 833, 833, 833, 835, 1132, 835, 662, 1403, 836, 836, 836, 836, 836, 836, 836, 264, 1183, 612, 905, 400, 398, 905, 399, 158, 1561, 400, 401, 1467, 663, 402, 400, 159, 400, 1474, 400, 620, 620, 620, 620, 620, 620, 620, 1185, 1186, 404, 405, 406, 1560, 161, 1016, 663, 162, 620, 620, 620, 620, 620, 620, 1010, 1010, 941, 1104, 1104, 818, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 651, 411, 905, 400, 657, 657, 657, 657, 657, 657, 657, 238, 239, 1187, 240, 241, 242, 1150, 1013, 240, 1188, 240, 1623, 240, 657, 657, 657, 657, 657, 657, 657, 1005, 1005, 245, 246, 247, 749, 749, 749, 749, 749, 749, 749, 1207, 449, 683, 965, 965, 905, 252, 1470, 1208, 1687, 528, 322, 965, 254, 683, 255, 1486, 682, 682, 682, 682, 682, 682, 682, 257, 965, 240, 839, 324, 682, 682, 682, 682, 682, 682, 682, 1559, 840, 870, 840, 841, 662, 842, 843, 843, 843, 843, 843, 843, 845, 686, 910, 749, 749, 749, 749, 749, 749, 749, 846, 415, 846, 847, 663, 848, 849, 849, 849, 849, 849, 849, 851, 415, 528, 753, 737, 905, 322, 1472, 666, 626, 852, 626, 852, 853, 663, 854, 855, 855, 855, 855, 855, 855, 857, 324, 238, 239, 755, 240, 241, 242, 667, 1019, 858, 756, 858, 528, 240, 859, 860, 860, 860, 860, 860, 860, 244, 757, 245, 246, 247, 905, 1687, 1026, 667, 905, 467, 467, 467, 670, 467, 467, 1480, 251, 252, 1385, 944, 671, 1197, 1155, 872, 254, 872, 255, 1687, 873, 873, 873, 873, 873, 873, 873, 257, 1024, 240, 237, 1536, 238, 239, 946, 240, 241, 242, 1198, 1019, 240, 947, 240, 905, 240, 752, 752, 752, 752, 752, 752, 752, 244, 948, 245, 246, 247, 929, 929, 929, 929, 929, 929, 929, 905, 249, 921, 905, 1279, 251, 252, 528, 353, 1481, 1386, 1022, 918, 254, 918, 255, 1543, 919, 919, 919, 919, 919, 919, 919, 257, 1024, 240, 470, 862, 470, 470, 470, 470, 470, 470, 470, 863, 470, 864, 470, 864, 865, 470, 866, 867, 867, 867, 867, 867, 867, 868, 470, 470, 674, 470, 470, 1535, 470, 471, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 470, 470, 470, 470, 683, 752, 752, 752, 752, 752, 752, 752, 905, 1090, 1090, 1213, 1213, 684, 1279, 477, 477, 477, 477, 477, 477, 477, 755, 923, 353, 923, 353, 1469, 924, 924, 924, 924, 924, 924, 924, 666, 686, 1165, 1165, 1272, 1272, 1117, 765, 687, 928, 767, 767, 767, 767, 767, 767, 1404, 471, 1199, 471, 688, 158, 667, 261, 353, 737, 262, 263, 1117, 159, 528, 262, 1483, 262, 772, 262, 942, 774, 774, 774, 774, 774, 774, 1200, 667, 265, 266, 267, 528, 268, 943, 943, 943, 943, 943, 943, 943, 984, 905, 984, 1311, 875, 985, 985, 985, 985, 985, 985, 985, 737, 158, 1119, 1193, 1475, 528, 158, 1485, 158, 159, 269, 1194, 270, 158, 159, 261, 159, 1195, 262, 263, 158, 159, 967, 262, 1119, 262, 161, 262, 159, 162, 1122, 161, 158, 161, 162, 1133, 162, 265, 266, 267, 159, 268, 357, 1134, 967, 161, 1117, 158, 162, 528, 970, 956, 357, 951, 1117, 159, 876, 161, 952, 957, 162, 813, 813, 813, 813, 813, 813, 813, 1482, 1311, 1279, 269, 161, 270, 717, 162, 161, 905, 737, 162, 322, 1539, 718, 953, 771, 264, 771, 772, 1245, 773, 774, 774, 774, 774, 774, 774, 1245, 324, 954, 1687, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1279, 527, 528, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 527, 527, 527, 527, 352, 762, 352, 352, 352, 352, 352, 352, 352, 763, 352, 764, 352, 764, 765, 352, 766, 767, 767, 767, 767, 767, 767, 768, 352, 352, 352, 352, 352, 1534, 352, 353, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 352, 352, 352, 352, 930, 158, 767, 767, 767, 767, 767, 767, 767, 159, 963, 966, 967, 1213, 1213, 905, 905, 353, 964, 968, 931, 1544, 1000, 932, 1272, 1272, 161, 528, 353, 162, 933, 1379, 1380, 357, 967, 161, 969, 1398, 162, 471, 970, 1245, 934, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 935, 352, 935, 936, 352, 937, 938, 938, 938, 938, 938, 938, 352, 352, 352, 352, 352, 352, 1005, 352, 353, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 940, 940, 940, 940, 940, 940, 940, 352, 352, 352, 352, 352, 352, 557, 352, 353, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 352, 352, 352, 940, 944, 158, 774, 774, 774, 774, 774, 774, 774, 159, 158, 158, 1000, 1010, 1083, 967, 158, 1019, 159, 159, 945, 528, 1084, 946, 159, 158, 161, 1146, 1146, 162, 947, 1399, 158, 159, 927, 161, 161, 967, 162, 162, 159, 161, 948, 970, 162, 971, 967, 158, 158, 905, 161, 955, 528, 162, 959, 159, 159, 161, 1245, 960, 162, 958, 1005, 1005, 528, 367, 1478, 1024, 967, 1491, 1480, 158, 161, 161, 970, 162, 162, 1197, 961, 159, 1245, 962, 813, 813, 813, 813, 813, 813, 813, 816, 816, 816, 816, 816, 816, 816, 161, 972, 398, 162, 399, 158, 1198, 400, 606, 1514, 905, 905, 400, 159, 400, 1102, 400, 811, 811, 833, 833, 833, 833, 833, 833, 833, 404, 405, 406, 994, 161, 994, 1537, 162, 995, 995, 995, 995, 995, 995, 995, 833, 833, 833, 833, 833, 833, 833, 836, 836, 836, 836, 836, 836, 836, 357, 528, 1687, 761, 322, 612, 905, 400, 398, 1119, 399, 158, 1467, 400, 606, 528, 1479, 1501, 400, 159, 400, 324, 400, 814, 814, 814, 814, 814, 814, 814, 1487, 1119, 404, 405, 406, 528, 161, 1122, 1202, 162, 814, 814, 814, 814, 814, 814, 1496, 357, 1123, 1119, 1488, 986, 836, 836, 836, 836, 836, 836, 836, 999, 999, 999, 999, 999, 999, 999, 612, 1497, 400, 401, 528, 1119, 402, 528, 1550, 1498, 905, 1122, 816, 816, 816, 816, 816, 816, 816, 841, 1541, 998, 843, 843, 843, 843, 843, 843, 847, 1548, 1008, 849, 849, 849, 849, 849, 849, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 853, 1563, 1017, 855, 855, 855, 855, 855, 855, 1564, 528, 411, 839, 1018, 1018, 1018, 1018, 1018, 1018, 1018, 967, 528, 840, 1554, 840, 841, 1555, 842, 843, 843, 843, 843, 843, 843, 1000, 459, 460, 460, 460, 460, 460, 460, 967, 971, 967, 971, 967, 1001, 970, 843, 843, 843, 843, 843, 843, 843, 865, 158, 1030, 867, 867, 867, 867, 867, 867, 159, 967, 1002, 967, 904, 1003, 904, 970, 471, 970, 1118, 1119, 1004, 905, 904, 1467, 904, 161, 1120, 1005, 162, 1043, 1000, 1043, 1006, 1000, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1119, 528, 1121, 1480, 1279, 1001, 1122, 843, 843, 843, 843, 843, 843, 843, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 873, 873, 873, 873, 873, 873, 873, 1003, 471, 683, 905, 1257, 905, 528, 1004, 1465, 905, 1590, 1005, 1480, 1476, 1005, 845, 1477, 873, 873, 873, 873, 873, 873, 873, 1538, 846, 1010, 846, 847, 528, 848, 849, 849, 849, 849, 849, 849, 1010, 919, 919, 919, 919, 919, 919, 919, 1392, 1393, 1687, 1279, 322, 1011, 905, 849, 849, 849, 849, 849, 849, 849, 919, 919, 919, 919, 919, 919, 919, 324, 905, 905, 1260, 1012, 905, 1467, 1013, 1203, 1279, 1005, 1133, 966, 967, 1014, 1381, 1540, 1542, 528, 1134, 968, 1005, 1382, 1086, 1019, 1086, 1015, 1010, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 967, 161, 969, 1626, 162, 1011, 970, 849, 849, 849, 849, 849, 849, 849, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 1013, 158, 905, 528, 1263, 905, 905, 1014, 1467, 159, 1592, 1024, 1547, 1552, 1005, 851, 158, 943, 943, 943, 943, 943, 943, 943, 159, 852, 161, 852, 853, 162, 854, 855, 855, 855, 855, 855, 855, 1019, 1103, 528, 1279, 161, 1199, 528, 162, 1123, 1119, 1027, 1115, 1558, 1020, 1110, 855, 855, 855, 855, 855, 855, 855, 1627, 929, 929, 929, 929, 929, 929, 929, 1200, 1119, 1028, 1021, 905, 528, 1022, 1122, 353, 905, 158, 905, 905, 1023, 1089, 451, 1594, 1589, 159, 251, 1024, 1687, 1591, 322, 663, 1025, 1019, 943, 943, 943, 943, 943, 943, 943, 1622, 161, 971, 967, 162, 1020, 324, 855, 855, 855, 855, 855, 855, 855, 946, 929, 929, 929, 929, 929, 929, 929, 1111, 528, 1464, 967, 158, 905, 1022, 1201, 353, 970, 1467, 1394, 159, 1023, 932, 905, 1463, 1105, 1395, 1105, 1024, 857, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 161, 1545, 458, 162, 458, 528, 1462, 459, 460, 460, 460, 460, 460, 460, 244, 1112, 936, 905, 1094, 938, 938, 938, 938, 938, 938, 1595, 1480, 451, 905, 1461, 528, 251, 1027, 353, 238, 239, 1460, 240, 241, 242, 1489, 1383, 240, 1490, 240, 1384, 240, 860, 860, 860, 860, 860, 860, 860, 1028, 1247, 245, 246, 247, 1123, 1119, 528, 1205, 1119, 467, 467, 467, 670, 467, 467, 1206, 251, 252, 1459, 1396, 1029, 663, 1247, 1397, 254, 905, 255, 1119, 1250, 528, 1119, 1467, 665, 1122, 1597, 257, 1122, 240, 470, 862, 470, 470, 470, 470, 470, 470, 470, 863, 470, 864, 470, 864, 865, 470, 866, 867, 867, 867, 867, 867, 867, 868, 470, 470, 470, 470, 470, 1458, 470, 471, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 470, 470, 470, 470, 1032, 528, 867, 867, 867, 867, 867, 867, 867, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 527, 471, 527, 528, 1033, 905, 528, 1034, 353, 528, 527, 1557, 527, 471, 1035, 985, 985, 985, 985, 985, 985, 985, 1593, 1600, 1549, 1625, 1036, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1037, 470, 1037, 1038, 470, 1039, 1040, 1040, 1040, 1040, 1040, 1040, 470, 470, 470, 470, 470, 470, 761, 470, 471, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 470, 470, 470, 470, 470, 470, 557, 470, 471, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 470, 470, 470, 1042, 158, 528, 261, 528, 528, 262, 263, 158, 159, 528, 262, 158, 262, 158, 262, 159, 1551, 1596, 1553, 159, 1432, 159, 1598, 905, 265, 266, 267, 528, 268, 1063, 1064, 1065, 161, 1066, 1067, 162, 161, 1046, 161, 162, 1068, 162, 1556, 1467, 1069, 1070, 1404, 1114, 995, 995, 995, 995, 995, 995, 995, 737, 357, 322, 269, 1117, 270, 158, 353, 261, 1116, 528, 262, 263, 1010, 159, 1599, 262, 737, 262, 324, 262, 995, 995, 995, 995, 995, 995, 995, 1151, 1151, 265, 266, 267, 1147, 268, 1147, 1123, 1119, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1152, 967, 1152, 1666, 1565, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1019, 1047, 1119, 1336, 1336, 1410, 1005, 269, 1122, 270, 1061, 967, 1062, 528, 1565, 1156, 1156, 970, 1601, 1157, 1062, 1157, 1062, 1119, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1377, 528, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1602, 905, 1063, 1064, 1065, 1119, 1066, 1067, 471, 528, 1024, 1122, 1376, 1068, 1164, 1480, 1467, 1069, 1070, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1072, 527, 527, 527, 527, 527, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 527, 527, 527, 527, 527, 527, 732, 527, 528, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 527, 527, 527, 1073, 930, 158, 767, 767, 767, 767, 767, 767, 767, 159, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 353, 1119, 528, 905, 905, 1467, 932, 1480, 471, 161, 1467, 1375, 162, 933, 1034, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 905, 1119, 1467, 934, 1091, 1374, 1091, 1122, 471, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1230, 353, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1279, 353, 158, 1093, 1093, 1093, 1093, 1093, 1093, 1096, 159, 938, 938, 938, 938, 938, 938, 938, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 683, 353, 161, 528, 1097, 162, 528, 1098, 1480, 1480, 528, 1373, 1480, 1217, 1099, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 528, 1372, 1480, 1371, 1100, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 352, 352, 352, 352, 352, 352, 759, 352, 353, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 352, 352, 352, 1101, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 940, 940, 940, 940, 940, 940, 940, 352, 352, 352, 352, 352, 352, 557, 352, 353, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 352, 352, 352, 940, 956, 1083, 967, 158, 1251, 1247, 1205, 1119, 957, 1084, 771, 159, 771, 772, 1206, 773, 774, 774, 774, 774, 774, 774, 1370, 1369, 967, 161, 1113, 1247, 161, 1119, 970, 162, 1565, 1250, 1687, 1122, 771, 367, 771, 772, 1565, 773, 774, 774, 774, 774, 774, 774, 1368, 1367, 1366, 1687, 965, 1124, 967, 965, 965, 965, 965, 965, 965, 1125, 965, 1126, 965, 1126, 1127, 965, 1128, 1129, 1129, 1129, 1129, 1129, 1129, 1130, 967, 965, 965, 965, 965, 965, 970, 965, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 965, 965, 965, 965, 398, 905, 399, 528, 1404, 400, 606, 1467, 491, 1405, 400, 1365, 400, 737, 400, 985, 985, 985, 985, 985, 985, 985, 471, 1480, 404, 405, 406, 1038, 1350, 1169, 1040, 1040, 1040, 1040, 1040, 1040, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1492, 471, 1118, 1119, 528, 528, 1493, 1350, 353, 1494, 1120, 1480, 965, 1351, 1352, 612, 1495, 400, 398, 1480, 399, 1687, 798, 400, 606, 1119, 798, 1121, 400, 798, 400, 1122, 400, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1123, 1119, 404, 405, 406, 1251, 1247, 965, 353, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1119, 353, 905, 1319, 1387, 1247, 1122, 1212, 353, 353, 1314, 1250, 1388, 612, 1098, 400, 1000, 1218, 1389, 1218, 1290, 1279, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1001, 1287, 843, 843, 843, 843, 843, 843, 843, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1003, 158, 158, 158, 1286, 1285, 528, 1004, 1400, 159, 159, 159, 1284, 1283, 1005, 1282, 1401, 158, 1281, 1006, 1010, 1280, 1402, 1279, 158, 159, 161, 161, 161, 162, 162, 162, 159, 1011, 1278, 849, 849, 849, 849, 849, 849, 849, 161, 1251, 1247, 162, 367, 1277, 1320, 161, 367, 367, 162, 158, 1246, 1247, 1013, 1315, 1247, 1497, 1687, 159, 1248, 1014, 1221, 1316, 1247, 1498, 341, 1687, 1005, 322, 1250, 341, 341, 1015, 1019, 1247, 161, 1249, 1247, 162, 491, 1250, 161, 491, 1250, 162, 324, 1020, 1687, 855, 855, 855, 855, 855, 855, 855, 1255, 1687, 1255, 322, 367, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 438, 1312, 1022, 1687, 491, 438, 438, 491, 324, 1023, 471, 1254, 1687, 467, 322, 1313, 1024, 798, 467, 467, 1253, 1025, 1160, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 798, 324, 1161, 798, 1161, 847, 798, 1162, 1163, 1163, 1163, 1163, 1163, 1163, 1027, 1252, 238, 239, 328, 240, 241, 242, 1109, 1109, 240, 1220, 240, 353, 240, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1028, 1204, 245, 246, 247, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1196, 249, 1000, 620, 1192, 251, 252, 1191, 620, 620, 663, 1184, 514, 254, 514, 255, 514, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 257, 264, 240, 1032, 1178, 867, 867, 867, 867, 867, 867, 867, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1247, 471, 1251, 1247, 683, 471, 655, 1034, 471, 1005, 1258, 798, 1258, 1141, 1035, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1247, 798, 798, 1247, 1036, 1166, 1250, 1166, 798, 1250, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1140, 1010, 1139, 1138, 1137, 1361, 1136, 1135, 471, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1109, 471, 158, 1168, 1168, 1168, 1168, 1168, 1168, 1171, 159, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 950, 471, 161, 1005, 1172, 162, 353, 1173, 471, 927, 1261, 927, 1261, 1088, 1174, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 1411, 1085, 1080, 905, 1175, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 470, 470, 470, 470, 470, 470, 759, 470, 471, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 470, 470, 470, 1176, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 470, 470, 470, 470, 470, 470, 557, 470, 471, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 470, 470, 470, 1042, 158, 1019, 261, 1060, 514, 262, 263, 1059, 159, 514, 262, 514, 262, 514, 262, 1265, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1058, 265, 266, 267, 847, 268, 1264, 1163, 1163, 1163, 1163, 1163, 1163, 510, 659, 1687, 996, 1177, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 652, 983, 982, 1024, 981, 652, 652, 980, 471, 798, 269, 659, 270, 158, 1271, 261, 979, 1005, 262, 263, 1265, 159, 978, 262, 977, 262, 976, 262, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 975, 974, 265, 266, 267, 967, 268, 659, 471, 1119, 973, 1251, 1247, 950, 1173, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 761, 1413, 1413, 761, 927, 967, 481, 659, 353, 1119, 759, 970, 1247, 1005, 269, 1122, 270, 1061, 1250, 1062, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1062, 920, 1062, 917, 914, 913, 912, 1427, 353, 905, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 514, 901, 514, 514, 514, 1063, 1064, 1065, 353, 1066, 1067, 900, 1427, 899, 898, 897, 1068, 1117, 1428, 1429, 1069, 1070, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1072, 527, 527, 527, 527, 527, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 527, 527, 527, 527, 527, 527, 732, 527, 528, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 527, 527, 527, 1073, 1078, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1079, 896, 771, 895, 771, 772, 264, 773, 774, 774, 774, 774, 774, 774, 1113, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1687, 878, 771, 683, 771, 772, 683, 773, 774, 774, 774, 774, 774, 774, 1209, 471, 1209, 471, 655, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 837, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 353, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 353, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 353, 1439, 1093, 1093, 1093, 1093, 1093, 1093, 415, 624, 624, 1247, 967, 1211, 1096, 622, 938, 938, 938, 938, 938, 938, 938, 1439, 1246, 1247, 1336, 1336, 965, 1440, 1441, 353, 1248, 1247, 967, 622, 716, 1098, 817, 1250, 970, 716, 716, 817, 1099, 750, 400, 1247, 609, 1249, 750, 750, 400, 1250, 809, 814, 1100, 1214, 798, 1214, 814, 814, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 806, 353, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 805, 353, 804, 1216, 1216, 1216, 1216, 1216, 1216, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 352, 352, 352, 352, 352, 352, 759, 352, 353, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 352, 352, 352, 1101, 1117, 1222, 1119, 1117, 1117, 1117, 1117, 1117, 1117, 1223, 1117, 1224, 1117, 1224, 1225, 1117, 1226, 1227, 1227, 1227, 1227, 1227, 1227, 1228, 1119, 1117, 1117, 1117, 1117, 1117, 1122, 1117, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1117, 1117, 1117, 1117, 965, 1124, 967, 965, 965, 965, 965, 965, 965, 1125, 965, 1126, 965, 1126, 1127, 965, 1128, 1129, 1129, 1129, 1129, 1129, 1129, 1130, 967, 965, 965, 965, 965, 965, 970, 965, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 965, 965, 965, 965, 967, 1315, 1247, 803, 1350, 834, 802, 801, 800, 1316, 834, 834, 1127, 799, 1231, 1129, 1129, 1129, 1129, 1129, 1129, 1000, 967, 798, 1247, 797, 1350, 353, 970, 967, 1250, 965, 1351, 1352, 1119, 761, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 557, 967, 759, 745, 1405, 744, 1119, 970, 967, 743, 742, 967, 1122, 1687, 528, 322, 512, 512, 510, 264, 1233, 1005, 1129, 1129, 1129, 1129, 1129, 1129, 1129, 1350, 967, 967, 324, 967, 471, 469, 970, 469, 1406, 970, 1234, 1687, 1687, 1235, 1407, 1434, 1434, 1408, 1687, 624, 1236, 1350, 415, 967, 1409, 838, 965, 1351, 1352, 970, 838, 838, 1237, 965, 965, 967, 965, 965, 965, 965, 965, 965, 965, 965, 1238, 965, 1238, 1239, 965, 1240, 1241, 1241, 1241, 1241, 1241, 1241, 965, 967, 965, 965, 965, 965, 965, 970, 965, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 965, 965, 965, 965, 965, 965, 967, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 965, 967, 965, 965, 965, 965, 1244, 970, 965, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 1243, 965, 965, 965, 1243, 1160, 844, 622, 413, 614, 400, 844, 844, 408, 1010, 1161, 614, 1161, 847, 400, 1162, 1163, 1163, 1163, 1163, 1163, 1163, 1265, 603, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1019, 1265, 599, 1508, 1011, 598, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 659, 1247, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 591, 659, 1012, 1508, 353, 1013, 1005, 557, 1117, 1509, 1510, 850, 1266, 659, 1247, 1687, 850, 850, 343, 1005, 1250, 343, 1457, 659, 1267, 1268, 543, 1268, 1024, 1005, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 540, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 471, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 471, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 471, 539, 1168, 1168, 1168, 1168, 1168, 1168, 471, 538, 537, 1265, 1119, 1270, 1171, 536, 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1687, 471, 528, 659, 1119, 525, 514, 1173, 471, 1687, 1122, 322, 522, 521, 1174, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 520, 519, 518, 659, 1175, 1273, 324, 1273, 471, 1005, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 325, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 471, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 353, 856, 517, 516, 515, 514, 856, 856, 471, 513, 1275, 1275, 1275, 1275, 1275, 1275, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 470, 470, 470, 470, 470, 470, 759, 470, 471, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 470, 470, 470, 1176, 158, 512, 261, 307, 507, 262, 263, 967, 159, 1247, 262, 1350, 262, 506, 262, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 505, 1687, 265, 266, 267, 504, 268, 967, 353, 1247, 1687, 1350, 322, 970, 1276, 1250, 965, 1351, 1352, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 874, 503, 502, 324, 481, 874, 874, 1442, 471, 499, 269, 925, 270, 158, 330, 261, 925, 925, 262, 263, 1427, 159, 498, 262, 497, 262, 496, 262, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1687, 1119, 265, 266, 267, 1119, 268, 1427, 471, 1687, 495, 322, 1117, 1428, 1429, 1413, 1413, 494, 493, 1503, 1503, 1571, 1567, 1119, 492, 490, 1427, 1119, 324, 1122, 1427, 489, 488, 1122, 1567, 487, 269, 1107, 270, 1291, 486, 1292, 1107, 1107, 1567, 485, 329, 484, 1427, 1292, 1570, 1292, 1427, 1117, 1428, 1429, 1567, 1117, 1428, 1429, 1149, 483, 1570, 967, 482, 1149, 1149, 1439, 481, 905, 1511, 1293, 1294, 1295, 480, 1296, 1297, 1434, 1434, 1439, 1571, 1567, 1298, 1439, 479, 967, 1299, 1300, 1301, 1439, 1302, 970, 478, 262, 965, 1440, 1441, 471, 1302, 262, 1302, 1439, 262, 1567, 1119, 1439, 965, 1440, 1441, 1570, 965, 1440, 1441, 469, 259, 240, 240, 250, 528, 240, 1303, 1304, 1305, 1515, 1306, 1307, 1119, 1350, 1154, 240, 1687, 1308, 1122, 1154, 1154, 1309, 1310, 1317, 1247, 1317, 1531, 1687, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1350, 415, 413, 1517, 1517, 965, 1351, 1352, 353, 1119, 1159, 1247, 353, 1531, 1508, 1159, 1159, 1250, 1245, 1532, 1533, 1225, 1508, 1321, 1227, 1227, 1227, 1227, 1227, 1227, 343, 1119, 156, 336, 335, 334, 1508, 1122, 1119, 1566, 1567, 1117, 1509, 1510, 1508, 332, 1687, 1568, 131, 1117, 1509, 1510, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 131, 1119, 321, 1567, 317, 1569, 1362, 1122, 1119, 1570, 316, 1362, 1362, 309, 120, 1571, 1567, 1119, 308, 1427, 1323, 307, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1439, 1119, 1503, 1503, 1247, 230, 260, 1122, 259, 1567, 1119, 1324, 1427, 230, 1325, 1570, 1122, 1117, 1428, 1429, 230, 1326, 1439, 210, 227, 210, 1247, 965, 1440, 1441, 210, 121, 1250, 1327, 1117, 1117, 1119, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1328, 1117, 1328, 1329, 1117, 1330, 1331, 1331, 1331, 1331, 1331, 1331, 1117, 1119, 1117, 1117, 1117, 1117, 1117, 1122, 1117, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1117, 1117, 1117, 1117, 1117, 1117, 1119, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1117, 1119, 1117, 1117, 1117, 1117, 1334, 1122, 1117, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1117, 1117, 1117, 1333, 967, 157, 1508, 156, 121, 131, 121, 131, 120, 1571, 1567, 1247, 1567, 1687, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1567, 967, 1687, 1508, 1517, 1517, 1687, 970, 1117, 1509, 1510, 1567, 1247, 1567, 1335, 967, 1687, 1570, 1250, 1570, 1585, 1687, 1567, 1687, 1247, 1575, 1687, 1687, 1570, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1247, 967, 1580, 1580, 1687, 1687, 1585, 970, 1617, 1687, 1247, 1245, 1586, 1587, 1235, 967, 1250, 1687, 1531, 1571, 1567, 1687, 1247, 1687, 1337, 1687, 1337, 1531, 1250, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1687, 967, 1687, 1687, 1531, 1687, 1567, 970, 967, 1245, 1532, 1533, 1570, 1531, 1687, 1687, 1687, 1687, 1245, 1532, 1533, 1687, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1687, 967, 1687, 1687, 1687, 1687, 1588, 970, 1687, 1687, 1339, 1339, 1339, 1339, 1339, 1339, 967, 1687, 1687, 1531, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1508, 1239, 1567, 1340, 1241, 1241, 1241, 1241, 1241, 1241, 1687, 967, 1687, 1687, 1531, 1687, 1687, 970, 967, 1245, 1532, 1533, 1508, 1687, 1567, 1687, 1687, 1117, 1509, 1510, 1570, 1687, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1687, 967, 1567, 1687, 1567, 1687, 1687, 970, 1342, 1687, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1607, 1567, 1566, 1567, 1247, 1687, 1687, 1567, 1608, 1567, 1568, 1343, 1687, 1570, 1344, 1570, 1687, 1687, 1580, 1580, 1687, 1345, 1585, 1567, 1687, 1567, 1247, 1569, 1687, 1570, 1567, 1570, 1250, 1346, 1342, 1687, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1585, 1585, 1687, 1531, 1687, 1687, 1245, 1586, 1587, 1567, 1687, 965, 1687, 1687, 1344, 1570, 1687, 1687, 1687, 1687, 1687, 1345, 1585, 1687, 1687, 1531, 1687, 1245, 1586, 1587, 1245, 1532, 1533, 965, 965, 965, 967, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 965, 967, 965, 965, 965, 965, 1348, 970, 965, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 965, 965, 965, 1347, 1245, 1353, 1247, 1245, 1245, 1245, 1245, 1245, 1245, 1354, 1245, 1355, 1245, 1355, 1356, 1245, 1357, 1358, 1358, 1358, 1358, 1358, 1358, 1359, 1247, 1245, 1245, 1245, 1245, 1245, 1250, 1245, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1245, 1245, 1245, 1245, 1363, 1585, 1363, 1687, 1687, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 471, 1119, 1687, 1585, 1607, 1567, 1687, 1687, 1245, 1586, 1587, 1687, 1608, 1585, 1687, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1687, 1119, 1687, 1621, 1687, 1567, 1687, 1122, 1687, 1687, 1687, 1570, 1687, 1585, 1412, 1119, 1687, 1687, 1245, 1586, 1587, 1687, 1687, 1687, 1567, 1687, 1662, 1687, 1687, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1687, 1119, 1648, 1648, 1687, 1687, 1687, 1122, 1687, 1687, 1567, 1687, 1662, 1687, 1325, 1119, 1570, 1565, 1663, 1664, 1687, 1687, 1687, 1676, 1414, 1567, 1414, 1567, 1687, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1687, 1119, 1687, 1648, 1648, 1671, 1671, 1122, 1119, 1676, 1687, 1567, 1687, 1567, 1565, 1677, 1678, 1570, 1687, 1570, 1687, 1687, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1687, 1687, 1416, 1416, 1416, 1416, 1416, 1416, 1119, 1687, 1687, 1662, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1662, 1329, 1687, 1417, 1331, 1331, 1331, 1331, 1331, 1331, 1687, 1119, 1687, 1687, 1662, 1687, 1687, 1122, 1119, 1565, 1663, 1664, 1662, 1687, 1687, 1687, 1687, 1565, 1663, 1664, 1687, 1687, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1687, 1119, 1687, 1687, 1567, 1679, 1687, 1122, 1419, 1687, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1662, 1671, 1671, 1676, 1687, 1687, 1687, 1687, 1687, 1567, 1687, 1420, 1687, 1687, 1421, 1570, 1687, 1687, 1687, 1687, 1687, 1422, 1662, 1676, 1687, 1676, 1687, 1565, 1663, 1664, 1565, 1677, 1678, 1423, 1419, 1687, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1676, 1687, 1676, 1662, 1687, 1687, 1687, 1565, 1677, 1678, 1687, 1117, 1687, 1687, 1421, 1687, 1687, 1687, 1687, 1687, 1687, 1422, 1676, 1687, 1685, 1662, 1687, 1565, 1677, 1678, 1565, 1663, 1664, 1117, 1117, 1117, 1119, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1117, 1119, 1117, 1117, 1117, 1117, 1425, 1122, 1117, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1117, 1117, 1117, 1424, 967, 1687, 1687, 1676, 1687, 1687, 1687, 1687, 1687, 1430, 1687, 1430, 1687, 1687, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1687, 967, 1687, 1687, 1676, 1687, 1687, 970, 967, 1565, 1677, 1678, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 1342, 1687, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 965, 1687, 1687, 1344, 1687, 1687, 1687, 1687, 1687, 1687, 1345, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1346, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 1687, 1687, 1687, 1687, 1687, 1687, 1433, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 1687, 1687, 1687, 1687, 1687, 1687, 1344, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1435, 1687, 1435, 1687, 1687, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1437, 1437, 1437, 1437, 1437, 1437, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1356, 1687, 1443, 1358, 1358, 1358, 1358, 1358, 1358, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1445, 1687, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1687, 1687, 1687, 1446, 1687, 1687, 1447, 1687, 1687, 1687, 1687, 1687, 1687, 1448, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1449, 1245, 1245, 1247, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1450, 1245, 1450, 1451, 1245, 1452, 1453, 1453, 1453, 1453, 1453, 1453, 1245, 1247, 1245, 1245, 1245, 1245, 1245, 1250, 1245, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1245, 1245, 1245, 1245, 1245, 1245, 1247, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1245, 1247, 1245, 1245, 1245, 1245, 1456, 1250, 1245, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1455, 1245, 1245, 1245, 1455, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1499, 1687, 1499, 1687, 1687, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1419, 1687, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1117, 1687, 1687, 1421, 1687, 1687, 1687, 1687, 1687, 1687, 1422, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1423, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1687, 1687, 1687, 1687, 1687, 1687, 1502, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1687, 1687, 1687, 1687, 1687, 1687, 1421, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1504, 1687, 1504, 1687, 1687, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1506, 1506, 1506, 1506, 1506, 1506, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1512, 1687, 1512, 1687, 1687, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1687, 1687, 1687, 1687, 1687, 1687, 1516, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1687, 1687, 1687, 1687, 1687, 1687, 1447, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1518, 1687, 1518, 1687, 1687, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1687, 1687, 1520, 1520, 1520, 1520, 1520, 1520, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1451, 1687, 1521, 1453, 1453, 1453, 1453, 1453, 1453, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1523, 1687, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1524, 1687, 1687, 1525, 1687, 1687, 1687, 1687, 1687, 1687, 1526, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1527, 1523, 1687, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1245, 1687, 1687, 1525, 1687, 1687, 1687, 1687, 1687, 1687, 1526, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1245, 1245, 1245, 1247, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1245, 1247, 1245, 1245, 1245, 1245, 1529, 1250, 1245, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1245, 1245, 1245, 1528, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1572, 1687, 1572, 1687, 1687, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 967, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1687, 967, 1687, 1687, 1687, 1687, 1687, 970, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1576, 1687, 1576, 1687, 1687, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1523, 1687, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1245, 1687, 1687, 1525, 1687, 1687, 1687, 1687, 1687, 1687, 1526, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1527, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1687, 1687, 1687, 1687, 1687, 1687, 1579, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1687, 1687, 1687, 1687, 1687, 1687, 1525, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1581, 1687, 1581, 1687, 1687, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1583, 1583, 1583, 1583, 1583, 1583, 1565, 1609, 1567, 1565, 1565, 1565, 1565, 1565, 1565, 1610, 1565, 1611, 1565, 1611, 1612, 1565, 1613, 1614, 1614, 1614, 1614, 1614, 1614, 1615, 1567, 1565, 1565, 1565, 1565, 1565, 1570, 1565, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1565, 1565, 1565, 1565, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1119, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 1687, 1119, 1687, 1687, 1687, 1687, 1687, 1122, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1618, 1687, 1618, 1687, 1687, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1612, 1687, 1631, 1614, 1614, 1614, 1614, 1614, 1614, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1633, 1687, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1687, 1687, 1687, 1634, 1687, 1687, 1635, 1687, 1687, 1687, 1687, 1687, 1687, 1636, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1637, 1565, 1565, 1567, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1638, 1565, 1638, 1639, 1565, 1640, 1641, 1641, 1641, 1641, 1641, 1641, 1565, 1567, 1565, 1565, 1565, 1565, 1565, 1570, 1565, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1565, 1565, 1565, 1565, 1565, 1565, 1567, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1565, 1567, 1565, 1565, 1565, 1565, 1644, 1570, 1565, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1565, 1565, 1565, 1643, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1247, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1687, 1247, 1687, 1687, 1687, 1687, 1687, 1250, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1687, 1687, 1687, 1687, 1687, 1687, 1647, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1687, 1687, 1687, 1687, 1687, 1687, 1635, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1649, 1687, 1649, 1687, 1687, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1687, 1687, 1651, 1651, 1651, 1651, 1651, 1651, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1639, 1687, 1652, 1641, 1641, 1641, 1641, 1641, 1641, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1654, 1687, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1655, 1687, 1687, 1656, 1687, 1687, 1687, 1687, 1687, 1687, 1657, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1658, 1654, 1687, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1565, 1687, 1687, 1656, 1687, 1687, 1687, 1687, 1687, 1687, 1657, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1565, 1565, 1565, 1567, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1565, 1567, 1565, 1565, 1565, 1565, 1660, 1570, 1565, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1565, 1565, 1565, 1659, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1667, 1687, 1667, 1687, 1687, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1654, 1687, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1565, 1687, 1687, 1656, 1687, 1687, 1687, 1687, 1687, 1687, 1657, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1658, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1687, 1687, 1687, 1687, 1687, 1687, 1670, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1687, 1687, 1687, 1687, 1687, 1687, 1656, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1672, 1687, 1672, 1687, 1687, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1674, 1674, 1674, 1674, 1674, 1674, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1682, 1687, 1682, 1687, 1687, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 1567, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1687, 1567, 1687, 1687, 1687, 1687, 1687, 1570, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 155, 155, 155, 155, 1687, 1687, 155, 155, 155, 155, 155, 155, 155, 155, 1687, 155, 160, 1687, 1687, 160, 1687, 1687, 1687, 1687, 1687, 1687, 160, 1687, 160, 160, 160, 160, 160, 160, 160, 160, 160, 1687, 160, 258, 258, 258, 258, 1687, 1687, 258, 258, 258, 258, 258, 258, 258, 258, 1687, 258, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 306, 1687, 1687, 306, 306, 306, 306, 306, 306, 306, 306, 1687, 306, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 342, 342, 1687, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 351, 1687, 1687, 351, 1687, 351, 1687, 351, 351, 1687, 351, 351, 1687, 1687, 351, 351, 351, 351, 351, 351, 351, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1687, 352, 352, 352, 352, 352, 352, 352, 352, 352, 412, 412, 412, 412, 1687, 1687, 412, 412, 412, 412, 412, 412, 412, 412, 1687, 412, 414, 1687, 1687, 414, 414, 414, 414, 414, 414, 414, 414, 1687, 414, 214, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 214, 214, 1687, 1687, 1687, 1687, 214, 455, 1687, 1687, 1687, 1687, 455, 1687, 455, 1687, 1687, 455, 460, 1687, 1687, 1687, 1687, 460, 1687, 460, 1687, 1687, 460, 466, 1687, 1687, 1687, 1687, 466, 1687, 466, 1687, 1687, 466, 258, 258, 258, 258, 1687, 1687, 258, 258, 258, 258, 258, 258, 258, 258, 1687, 258, 468, 468, 1687, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1687, 470, 470, 470, 470, 470, 470, 470, 470, 470, 305, 1687, 1687, 1687, 1687, 1687, 1687, 305, 1687, 1687, 305, 305, 306, 1687, 1687, 306, 306, 306, 306, 306, 306, 306, 306, 1687, 306, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 1687, 511, 511, 511, 511, 511, 511, 511, 511, 511, 526, 526, 526, 526, 526, 526, 526, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1687, 527, 527, 527, 527, 527, 527, 527, 527, 527, 341, 1687, 1687, 1687, 1687, 341, 341, 341, 342, 342, 1687, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 342, 555, 1687, 555, 555, 1687, 555, 1687, 1687, 1687, 555, 555, 555, 555, 555, 555, 555, 556, 1687, 1687, 556, 556, 556, 556, 556, 556, 556, 556, 1687, 556, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1687, 352, 352, 352, 352, 352, 352, 352, 352, 352, 160, 1687, 1687, 160, 1687, 1687, 1687, 1687, 1687, 1687, 160, 1687, 160, 160, 160, 160, 160, 160, 160, 160, 160, 1687, 160, 412, 412, 412, 412, 1687, 1687, 412, 412, 412, 412, 412, 412, 412, 412, 1687, 412, 621, 621, 1687, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 414, 1687, 1687, 414, 414, 414, 414, 414, 414, 414, 414, 1687, 414, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 1687, 623, 623, 623, 623, 623, 623, 623, 623, 623, 438, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 438, 438, 1687, 1687, 1687, 438, 438, 438, 226, 1687, 226, 1687, 1687, 1687, 1687, 1687, 226, 226, 1687, 1687, 226, 448, 1687, 1687, 1687, 1687, 1687, 1687, 448, 1687, 1687, 448, 448, 460, 1687, 1687, 1687, 1687, 460, 1687, 460, 1687, 1687, 460, 455, 1687, 1687, 1687, 1687, 455, 1687, 455, 1687, 1687, 455, 466, 1687, 1687, 1687, 1687, 466, 1687, 466, 1687, 1687, 466, 468, 468, 1687, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1687, 470, 470, 470, 470, 470, 470, 470, 470, 470, 351, 1687, 1687, 351, 1687, 351, 1687, 351, 351, 1687, 351, 351, 1687, 1687, 351, 351, 351, 351, 351, 351, 351, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 1687, 511, 511, 511, 511, 511, 511, 511, 511, 511, 731, 1687, 1687, 1687, 1687, 1687, 731, 1687, 1687, 731, 731, 731, 731, 731, 731, 731, 731, 1687, 731, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1687, 527, 527, 527, 527, 527, 527, 527, 527, 527, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 349, 1687, 349, 1687, 1687, 1687, 1687, 1687, 349, 349, 1687, 1687, 349, 758, 1687, 1687, 758, 758, 758, 758, 758, 758, 758, 758, 1687, 758, 556, 1687, 1687, 556, 556, 556, 556, 556, 556, 556, 556, 1687, 556, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 1687, 760, 760, 760, 760, 760, 760, 760, 760, 760, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1687, 352, 352, 352, 352, 352, 352, 352, 352, 352, 160, 1687, 1687, 160, 1687, 1687, 1687, 1687, 1687, 1687, 160, 1687, 160, 160, 160, 160, 160, 160, 160, 160, 160, 1687, 160, 775, 1687, 1687, 775, 1687, 775, 1687, 775, 775, 1687, 775, 1687, 775, 1687, 775, 775, 775, 775, 775, 775, 775, 621, 621, 1687, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 1687, 623, 623, 623, 623, 623, 623, 623, 623, 623, 414, 1687, 1687, 414, 414, 414, 414, 414, 414, 414, 414, 1687, 414, 434, 1687, 434, 1687, 1687, 1687, 1687, 1687, 434, 434, 1687, 1687, 434, 652, 1687, 1687, 1687, 1687, 652, 652, 652, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1687, 470, 470, 470, 470, 470, 470, 470, 470, 470, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 716, 1687, 1687, 1687, 1687, 716, 716, 716, 1687, 1687, 1687, 716, 731, 1687, 1687, 1687, 1687, 1687, 731, 1687, 1687, 731, 731, 731, 731, 731, 731, 731, 731, 1687, 731, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 1687, 904, 904, 904, 904, 904, 904, 904, 904, 904, 323, 1687, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 750, 1687, 1687, 1687, 1687, 750, 750, 750, 554, 1687, 554, 1687, 1687, 1687, 1687, 1687, 554, 554, 1687, 1687, 554, 758, 1687, 1687, 758, 758, 758, 758, 758, 758, 758, 758, 1687, 758, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 1687, 926, 926, 926, 926, 926, 926, 926, 926, 926, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 1687, 760, 760, 760, 760, 760, 760, 760, 760, 760, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1687, 352, 352, 352, 352, 352, 352, 352, 352, 352, 160, 1687, 1687, 160, 1687, 1687, 1687, 1687, 1687, 1687, 160, 1687, 160, 160, 160, 160, 160, 160, 160, 160, 160, 1687, 160, 949, 1687, 1687, 949, 949, 949, 949, 949, 949, 949, 949, 1687, 949, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 414, 1687, 1687, 414, 414, 414, 414, 414, 414, 414, 414, 1687, 414, 834, 1687, 1687, 1687, 1687, 834, 834, 834, 838, 1687, 1687, 1687, 1687, 838, 838, 838, 1687, 1687, 1687, 838, 844, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 844, 844, 1687, 1687, 1687, 844, 844, 844, 844, 850, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 850, 850, 1687, 1687, 1687, 850, 850, 850, 850, 856, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 856, 856, 1687, 1687, 1687, 856, 856, 856, 856, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1687, 470, 470, 470, 470, 470, 470, 470, 470, 470, 874, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 874, 1687, 1687, 1687, 1687, 874, 874, 874, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 1687, 904, 904, 904, 904, 904, 904, 904, 904, 904, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 925, 1687, 1687, 1687, 1687, 925, 925, 925, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 1687, 926, 926, 926, 926, 926, 926, 926, 926, 926, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1687, 352, 352, 352, 352, 352, 352, 352, 352, 352, 160, 1687, 1687, 160, 1687, 1687, 1687, 1687, 1687, 1687, 160, 1687, 160, 160, 160, 160, 160, 160, 160, 160, 160, 1687, 160, 774, 1687, 774, 1687, 1687, 1687, 1687, 1687, 774, 774, 1687, 1687, 774, 949, 1687, 1687, 949, 949, 949, 949, 949, 949, 949, 949, 1687, 949, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1687, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 775, 1687, 1687, 775, 1687, 775, 1687, 775, 775, 1687, 775, 1687, 775, 1687, 775, 775, 775, 775, 775, 775, 775, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 414, 1687, 1687, 414, 414, 414, 414, 414, 414, 414, 414, 1687, 414, 999, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 999, 1687, 1687, 1687, 1687, 1687, 999, 1687, 1687, 999, 1009, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1009, 1687, 1687, 1687, 1687, 1687, 1009, 1687, 1687, 1009, 1018, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1018, 1687, 1687, 1687, 1687, 1687, 1018, 1687, 1687, 1018, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1687, 470, 470, 470, 470, 470, 470, 470, 470, 470, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 1687, 904, 904, 904, 904, 904, 904, 904, 904, 904, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1687, 527, 527, 527, 527, 527, 527, 527, 527, 527, 323, 1687, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 775, 1687, 1687, 775, 1687, 775, 1687, 775, 775, 1687, 775, 1687, 1687, 1687, 775, 775, 775, 775, 775, 775, 775, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 352, 1687, 352, 352, 352, 352, 352, 352, 352, 352, 352, 160, 1687, 1687, 160, 1687, 1687, 1687, 1687, 1687, 1687, 160, 1687, 160, 160, 160, 160, 160, 160, 160, 160, 160, 1687, 160, 1107, 1687, 1687, 1687, 1687, 1107, 1107, 1107, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1687, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 1245, 414, 1687, 1687, 414, 414, 414, 414, 414, 414, 414, 414, 1687, 414, 1149, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1149, 1687, 1687, 1687, 1687, 1149, 1149, 1149, 1687, 1149, 1154, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1154, 1687, 1687, 1687, 1687, 1154, 1154, 1154, 1687, 1154, 1159, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1159, 1687, 1687, 1687, 1687, 1159, 1159, 1159, 1687, 1159, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 1687, 470, 470, 470, 470, 470, 470, 470, 470, 470, 264, 1687, 264, 264, 1687, 264, 1687, 264, 1687, 264, 264, 1687, 264, 264, 264, 264, 264, 264, 264, 264, 264, 1687, 264, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, 1687, 904, 904, 904, 904, 904, 904, 904, 904, 904, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 1687, 527, 527, 527, 527, 527, 527, 527, 527, 527, 323, 1687, 1687, 1687, 323, 1687, 323, 1687, 1687, 1687, 323, 1687, 1687, 323, 323, 323, 323, 323, 323, 323, 323, 1687, 323, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 1687, 760, 760, 760, 760, 760, 760, 760, 760, 760, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 1687, 926, 926, 926, 926, 926, 926, 926, 926, 926, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1530, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 15, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687 } ; static yyconst short int yy_chk[14289] = { 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, 3, 3, 32, 32, 3, 3, 13, 14, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 3, 5, 6, 6, 19, 6, 13, 14, 31, 34, 34, 19, 19, 19, 124, 19, 19, 66, 66, 68, 68, 124, 19, 87, 87, 296, 19, 19, 296, 3, 31, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 125, 11, 25, 25, 125, 25, 74, 206, 25, 89, 89, 25, 80, 100, 100, 11, 123, 123, 25, 206, 25, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 27, 417, 27, 27, 27, 27, 27, 27, 27, 29, 29, 29, 29, 29, 29, 29, 74, 63, 96, 27, 27, 27, 80, 27, 27, 37, 96, 96, 417, 38, 27, 151, 151, 37, 27, 27, 27, 38, 27, 63, 27, 30, 419, 30, 30, 30, 30, 30, 30, 30, 37, 39, 1681, 37, 38, 85, 199, 38, 133, 39, 40, 30, 43, 419, 30, 105, 105, 39, 40, 99, 43, 30, 105, 38, 38, 133, 39, 85, 199, 39, 99, 99, 99, 30, 41, 40, 44, 43, 40, 204, 43, 42, 41, 202, 44, 106, 106, 39, 39, 42, 40, 204, 43, 106, 43, 45, 40, 40, 204, 41, 202, 44, 41, 45, 44, 46, 42, 103, 44, 42, 41, 103, 103, 46, 209, 42, 1676, 47, 94, 44, 45, 101, 46, 45, 42, 47, 48, 49, 42, 45, 46, 101, 101, 46, 48, 49, 50, 209, 207, 45, 213, 421, 47, 1674, 50, 47, 94, 94, 94, 94, 207, 48, 49, 228, 48, 49, 421, 47, 48, 51, 97, 50, 213, 137, 50, 48, 48, 51, 52, 97, 97, 97, 48, 97, 102, 48, 52, 98, 49, 98, 137, 98, 98, 999, 51, 95, 134, 51, 50, 95, 95, 95, 95, 52, 135, 51, 52, 137, 128, 51, 108, 102, 102, 134, 52, 54, 128, 54, 108, 108, 228, 135, 128, 54, 134, 54, 203, 54, 54, 999, 54, 54, 54, 54, 54, 54, 54, 218, 218, 135, 245, 245, 54, 999, 203, 203, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 205, 247, 247, 248, 248, 107, 55, 55, 55, 107, 55, 55, 231, 107, 107, 205, 158, 55, 879, 205, 879, 55, 55, 59, 158, 59, 59, 59, 59, 59, 59, 59, 61, 61, 61, 61, 61, 61, 61, 62, 81, 158, 81, 81, 81, 81, 81, 81, 81, 136, 138, 215, 62, 323, 62, 62, 62, 62, 62, 62, 62, 62, 71, 71, 1666, 71, 136, 138, 71, 231, 323, 71, 62, 215, 220, 62, 139, 226, 71, 76, 71, 136, 62, 265, 265, 138, 76, 76, 76, 490, 76, 76, 145, 139, 62, 64, 220, 76, 490, 226, 145, 76, 76, 235, 139, 64, 145, 64, 64, 145, 64, 64, 64, 64, 64, 64, 64, 83, 83, 83, 83, 83, 83, 83, 84, 235, 84, 84, 636, 84, 84, 84, 214, 483, 84, 140, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 160, 84, 84, 84, 483, 140, 164, 214, 160, 636, 84, 175, 84, 84, 164, 320, 84, 84, 320, 175, 84, 214, 140, 387, 84, 160, 84, 387, 160, 267, 267, 164, 84, 304, 164, 84, 175, 84, 92, 175, 92, 286, 286, 92, 92, 304, 92, 175, 92, 304, 92, 164, 92, 141, 141, 141, 141, 141, 141, 141, 104, 418, 92, 92, 92, 418, 92, 104, 104, 338, 338, 327, 104, 104, 104, 420, 109, 104, 109, 420, 326, 109, 109, 109, 109, 109, 109, 109, 327, 149, 149, 149, 149, 149, 149, 149, 92, 326, 92, 93, 423, 93, 385, 385, 93, 93, 327, 93, 423, 93, 149, 93, 216, 93, 150, 150, 150, 150, 150, 150, 150, 326, 163, 93, 93, 93, 1665, 93, 325, 349, 163, 152, 625, 152, 216, 150, 152, 152, 152, 152, 152, 152, 152, 93, 93, 325, 165, 163, 216, 325, 163, 349, 404, 404, 165, 386, 625, 93, 166, 93, 161, 422, 386, 406, 406, 422, 166, 165, 161, 163, 161, 165, 161, 161, 165, 161, 161, 161, 161, 161, 161, 161, 161, 166, 167, 271, 166, 208, 1383, 168, 169, 208, 167, 271, 170, 171, 172, 168, 169, 208, 173, 1383, 170, 171, 172, 208, 407, 407, 173, 167, 271, 730, 167, 166, 168, 169, 167, 168, 169, 170, 171, 172, 170, 171, 172, 173, 170, 174, 173, 176, 331, 395, 426, 177, 169, 174, 730, 176, 168, 172, 426, 177, 178, 173, 428, 328, 171, 331, 176, 176, 178, 416, 174, 395, 176, 174, 179, 176, 177, 174, 434, 177, 328, 428, 179, 180, 182, 178, 416, 331, 178, 181, 330, 180, 182, 183, 177, 402, 1662, 181, 402, 179, 434, 183, 179, 328, 181, 184, 178, 330, 180, 182, 424, 180, 182, 184, 181, 180, 185, 181, 183, 329, 186, 183, 632, 179, 185, 330, 187, 424, 186, 182, 184, 188, 409, 184, 187, 409, 329, 632, 183, 188, 237, 185, 189, 488, 185, 186, 827, 402, 186, 190, 189, 187, 185, 329, 187, 488, 188, 190, 191, 188, 186, 184, 237, 186, 425, 192, 191, 189, 390, 827, 189, 1651, 187, 192, 190, 237, 390, 190, 188, 237, 497, 425, 390, 191, 409, 189, 191, 194, 194, 194, 192, 194, 194, 192, 442, 442, 497, 477, 194, 192, 716, 191, 194, 194, 190, 195, 197, 197, 197, 197, 197, 197, 197, 547, 547, 195, 716, 195, 195, 477, 195, 195, 195, 195, 195, 195, 195, 196, 498, 196, 196, 196, 196, 196, 196, 196, 211, 211, 211, 211, 211, 211, 211, 244, 249, 498, 196, 196, 196, 438, 196, 196, 427, 244, 249, 244, 249, 196, 244, 249, 828, 196, 196, 198, 427, 198, 345, 427, 198, 198, 828, 438, 198, 198, 345, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 251, 482, 198, 198, 198, 353, 345, 438, 482, 485, 251, 198, 251, 353, 198, 251, 485, 219, 1645, 219, 503, 198, 219, 219, 219, 219, 219, 219, 219, 514, 353, 526, 503, 198, 489, 353, 198, 514, 198, 217, 223, 489, 223, 223, 223, 223, 223, 223, 223, 217, 526, 217, 217, 1629, 217, 217, 217, 217, 217, 217, 217, 224, 224, 224, 224, 224, 224, 224, 225, 675, 225, 225, 225, 225, 225, 225, 225, 233, 233, 233, 233, 233, 233, 233, 1629, 500, 501, 554, 225, 628, 501, 225, 500, 675, 229, 628, 229, 439, 225, 229, 229, 229, 229, 229, 229, 229, 232, 530, 232, 554, 225, 232, 232, 232, 232, 232, 232, 232, 236, 236, 439, 236, 236, 236, 530, 1631, 236, 439, 236, 530, 236, 236, 236, 236, 236, 236, 236, 236, 435, 439, 236, 236, 236, 303, 303, 303, 303, 303, 303, 303, 357, 236, 236, 435, 435, 1630, 236, 697, 357, 647, 435, 697, 250, 236, 250, 236, 528, 250, 250, 250, 250, 250, 250, 250, 236, 357, 236, 253, 357, 253, 253, 647, 253, 253, 253, 528, 698, 253, 630, 253, 698, 253, 305, 305, 305, 305, 305, 305, 305, 253, 630, 253, 253, 253, 339, 339, 339, 339, 339, 339, 339, 516, 253, 633, 360, 602, 253, 253, 602, 516, 305, 633, 360, 337, 253, 337, 253, 877, 337, 337, 337, 337, 337, 337, 337, 253, 305, 253, 264, 360, 264, 518, 360, 264, 264, 516, 264, 877, 264, 518, 264, 696, 264, 340, 340, 340, 340, 340, 340, 340, 696, 360, 264, 264, 264, 346, 264, 346, 346, 346, 346, 346, 346, 346, 347, 347, 347, 347, 347, 347, 347, 518, 608, 608, 987, 354, 393, 393, 393, 393, 393, 393, 393, 354, 1628, 408, 264, 408, 264, 266, 408, 408, 408, 408, 408, 408, 408, 266, 987, 266, 354, 266, 266, 354, 266, 266, 266, 266, 266, 266, 266, 266, 643, 643, 266, 270, 627, 270, 354, 447, 270, 270, 355, 270, 356, 270, 358, 270, 359, 270, 355, 447, 356, 627, 358, 447, 359, 522, 361, 270, 270, 270, 767, 270, 356, 522, 361, 355, 634, 356, 355, 358, 356, 359, 358, 634, 359, 367, 367, 370, 629, 480, 359, 361, 767, 367, 361, 370, 367, 480, 515, 358, 522, 270, 355, 270, 272, 629, 515, 694, 367, 480, 367, 361, 370, 367, 272, 370, 272, 272, 694, 272, 272, 272, 272, 272, 272, 272, 348, 362, 348, 348, 348, 348, 348, 348, 348, 362, 365, 370, 1606, 637, 517, 480, 363, 515, 365, 520, 348, 451, 517, 348, 363, 637, 362, 520, 712, 362, 348, 451, 364, 451, 712, 365, 451, 362, 365, 366, 364, 363, 348, 350, 363, 350, 350, 366, 350, 350, 350, 350, 350, 350, 350, 365, 363, 364, 368, 517, 364, 703, 520, 369, 366, 525, 368, 366, 703, 371, 372, 369, 364, 525, 649, 649, 373, 371, 372, 524, 680, 374, 366, 368, 373, 372, 368, 524, 369, 374, 368, 369, 375, 890, 371, 372, 369, 371, 372, 890, 375, 373, 376, 377, 373, 525, 374, 371, 680, 374, 376, 377, 373, 378, 673, 379, 374, 375, 487, 673, 375, 378, 535, 379, 380, 381, 487, 376, 377, 529, 376, 377, 380, 381, 1605, 524, 382, 383, 378, 535, 379, 378, 375, 379, 382, 383, 529, 376, 819, 380, 381, 535, 380, 381, 378, 379, 452, 631, 487, 377, 380, 382, 383, 819, 382, 383, 452, 529, 452, 484, 487, 452, 382, 429, 631, 429, 381, 484, 429, 429, 429, 429, 429, 429, 429, 679, 679, 1604, 383, 392, 679, 392, 392, 392, 392, 392, 392, 392, 431, 889, 431, 431, 431, 431, 431, 431, 431, 519, 392, 392, 392, 658, 392, 392, 692, 519, 484, 889, 521, 392, 523, 484, 692, 392, 392, 394, 521, 394, 523, 707, 394, 394, 707, 658, 532, 394, 532, 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, 457, 821, 394, 394, 394, 519, 532, 521, 658, 493, 457, 394, 457, 533, 394, 457, 821, 493, 523, 463, 635, 394, 432, 432, 432, 432, 432, 432, 432, 463, 533, 463, 891, 394, 463, 536, 394, 635, 394, 396, 533, 396, 493, 536, 396, 396, 685, 685, 396, 396, 891, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 493, 1293, 396, 396, 396, 436, 436, 436, 436, 436, 436, 436, 534, 531, 396, 709, 1293, 536, 660, 691, 709, 396, 440, 440, 440, 440, 440, 440, 440, 534, 531, 677, 677, 396, 531, 702, 396, 677, 396, 397, 660, 397, 731, 440, 397, 397, 702, 691, 397, 397, 534, 397, 437, 397, 397, 397, 397, 397, 397, 397, 397, 731, 660, 397, 397, 397, 575, 437, 437, 437, 437, 437, 437, 437, 437, 397, 575, 441, 441, 441, 441, 441, 441, 441, 443, 774, 443, 1603, 575, 443, 443, 443, 443, 443, 443, 443, 695, 397, 441, 397, 398, 699, 398, 486, 695, 398, 398, 774, 704, 699, 398, 486, 398, 701, 398, 446, 446, 446, 446, 446, 446, 446, 701, 1585, 398, 398, 398, 706, 448, 448, 448, 448, 448, 448, 448, 450, 704, 450, 706, 486, 450, 450, 450, 450, 450, 450, 450, 453, 453, 453, 453, 453, 453, 453, 715, 486, 448, 715, 398, 838, 398, 430, 458, 458, 458, 458, 458, 458, 458, 747, 747, 430, 448, 430, 430, 838, 430, 430, 430, 430, 430, 430, 430, 433, 1583, 433, 433, 433, 433, 433, 433, 433, 461, 461, 461, 461, 461, 461, 461, 700, 708, 887, 710, 433, 711, 820, 433, 700, 708, 710, 887, 711, 820, 433, 462, 462, 462, 462, 462, 462, 462, 754, 754, 831, 831, 433, 454, 464, 464, 464, 464, 464, 464, 464, 475, 475, 475, 475, 475, 475, 475, 454, 454, 454, 454, 454, 454, 454, 454, 474, 494, 474, 474, 474, 474, 474, 474, 474, 494, 492, 495, 823, 1562, 718, 496, 491, 491, 492, 495, 454, 454, 718, 496, 491, 826, 662, 491, 822, 826, 496, 823, 454, 456, 456, 822, 456, 456, 456, 491, 880, 456, 492, 456, 499, 456, 456, 456, 662, 495, 504, 494, 499, 494, 824, 456, 456, 456, 504, 664, 880, 824, 492, 495, 502, 506, 456, 496, 491, 505, 662, 456, 502, 506, 507, 513, 544, 505, 456, 1051, 456, 664, 507, 513, 1561, 734, 504, 734, 825, 456, 744, 456, 459, 1051, 499, 825, 499, 867, 744, 544, 666, 506, 504, 664, 734, 502, 544, 459, 459, 459, 459, 459, 459, 459, 459, 713, 502, 506, 544, 867, 505, 505, 666, 713, 905, 507, 507, 513, 541, 541, 541, 541, 541, 541, 541, 459, 459, 542, 542, 542, 542, 542, 542, 542, 666, 905, 878, 459, 465, 763, 545, 545, 545, 545, 545, 545, 545, 763, 713, 881, 881, 668, 878, 465, 465, 465, 465, 465, 465, 465, 465, 545, 546, 546, 546, 546, 546, 546, 546, 548, 883, 548, 883, 668, 548, 548, 548, 548, 548, 548, 548, 465, 465, 546, 551, 1560, 551, 551, 551, 551, 551, 551, 551, 465, 467, 668, 467, 467, 902, 467, 467, 467, 882, 882, 467, 735, 467, 735, 467, 467, 467, 467, 467, 467, 467, 467, 467, 776, 467, 467, 467, 886, 886, 902, 735, 776, 467, 467, 467, 467, 467, 467, 874, 467, 467, 888, 884, 467, 888, 735, 738, 467, 738, 467, 552, 552, 552, 552, 552, 552, 552, 938, 467, 1303, 467, 471, 884, 471, 558, 738, 471, 471, 561, 471, 564, 471, 558, 471, 1303, 471, 561, 738, 564, 938, 705, 874, 565, 922, 922, 471, 471, 471, 705, 558, 565, 471, 566, 561, 558, 564, 561, 565, 564, 893, 566, 568, 893, 567, 945, 945, 829, 565, 561, 568, 565, 567, 705, 564, 829, 1195, 863, 566, 1195, 471, 566, 471, 472, 705, 863, 991, 568, 566, 567, 568, 472, 567, 472, 568, 472, 472, 871, 472, 472, 472, 472, 472, 472, 472, 472, 473, 567, 991, 570, 1050, 988, 871, 871, 473, 988, 473, 570, 473, 473, 1050, 473, 473, 473, 473, 473, 473, 473, 473, 476, 571, 569, 572, 736, 570, 736, 993, 570, 571, 569, 572, 1559, 476, 570, 476, 476, 476, 476, 476, 476, 476, 1000, 736, 573, 993, 571, 569, 572, 571, 569, 572, 573, 476, 912, 990, 476, 569, 908, 990, 908, 992, 912, 476, 617, 992, 736, 617, 571, 573, 572, 1054, 573, 617, 617, 476, 478, 908, 478, 573, 1595, 478, 478, 574, 478, 577, 478, 576, 478, 1054, 478, 574, 1000, 577, 1378, 576, 1595, 578, 580, 579, 478, 478, 478, 907, 478, 578, 580, 579, 574, 1378, 577, 574, 576, 577, 579, 576, 617, 577, 574, 478, 907, 576, 578, 580, 579, 578, 580, 579, 907, 1004, 580, 965, 581, 578, 478, 1385, 478, 479, 1144, 479, 581, 1385, 479, 479, 582, 479, 585, 479, 583, 479, 584, 479, 582, 965, 585, 1144, 583, 581, 584, 965, 581, 479, 479, 479, 581, 479, 1010, 795, 795, 582, 1536, 585, 582, 583, 585, 584, 583, 818, 584, 1004, 818, 1535, 585, 586, 582, 587, 818, 818, 584, 479, 795, 586, 909, 587, 640, 479, 795, 479, 553, 583, 553, 553, 553, 553, 553, 553, 553, 588, 586, 909, 587, 586, 914, 587, 1396, 588, 1010, 640, 553, 586, 914, 553, 931, 931, 640, 989, 909, 1396, 553, 818, 1002, 1002, 588, 989, 587, 588, 640, 931, 1012, 1012, 553, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1534, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 562, 1021, 1021, 589, 740, 1049, 740, 1040, 562, 1049, 562, 589, 562, 562, 1477, 562, 562, 562, 562, 562, 562, 562, 885, 740, 590, 562, 563, 892, 589, 1040, 885, 589, 590, 740, 563, 892, 563, 1531, 563, 563, 1477, 563, 563, 563, 563, 563, 563, 563, 609, 590, 609, 563, 590, 609, 609, 609, 609, 609, 609, 609, 618, 618, 618, 618, 618, 618, 618, 1033, 1033, 1311, 590, 604, 1001, 604, 885, 1014, 604, 604, 1311, 892, 1520, 604, 1033, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 1019, 1508, 604, 604, 604, 619, 619, 619, 619, 619, 619, 619, 672, 1300, 604, 1001, 910, 613, 910, 613, 672, 604, 613, 613, 613, 613, 613, 613, 613, 1001, 844, 1506, 1014, 604, 1300, 910, 604, 672, 604, 605, 1007, 605, 672, 1023, 605, 605, 1380, 910, 1380, 605, 1019, 605, 844, 605, 605, 605, 605, 605, 605, 605, 605, 639, 1007, 605, 605, 605, 638, 638, 638, 638, 638, 638, 638, 844, 844, 605, 639, 639, 639, 639, 639, 639, 639, 639, 1007, 1052, 641, 641, 641, 641, 641, 641, 641, 1023, 1066, 1052, 911, 605, 1066, 605, 610, 970, 610, 778, 1055, 610, 610, 641, 1379, 1055, 610, 778, 610, 911, 610, 642, 642, 642, 642, 642, 642, 642, 1495, 970, 610, 610, 610, 1310, 778, 970, 911, 778, 644, 1379, 644, 778, 642, 644, 644, 644, 644, 644, 644, 644, 648, 970, 648, 850, 1310, 648, 648, 648, 648, 648, 648, 648, 1056, 1056, 610, 1386, 610, 620, 1388, 620, 770, 1494, 620, 620, 1388, 850, 620, 620, 770, 620, 1386, 620, 620, 620, 620, 620, 620, 620, 620, 1064, 1064, 620, 620, 620, 1493, 770, 850, 850, 770, 620, 620, 620, 620, 620, 620, 1009, 1011, 770, 1104, 1104, 620, 650, 650, 650, 650, 650, 650, 650, 651, 651, 651, 651, 651, 651, 651, 620, 1593, 620, 656, 656, 656, 656, 656, 656, 656, 657, 657, 1065, 657, 657, 657, 1009, 1011, 657, 1065, 657, 1593, 657, 657, 657, 657, 657, 657, 657, 657, 1009, 1011, 657, 657, 657, 748, 748, 748, 748, 748, 748, 748, 1085, 657, 682, 1129, 1125, 1382, 657, 1382, 1085, 739, 1398, 739, 1125, 657, 684, 657, 1398, 682, 682, 682, 682, 682, 682, 682, 657, 1129, 657, 659, 739, 684, 684, 684, 684, 684, 684, 684, 1492, 659, 682, 659, 659, 1016, 659, 659, 659, 659, 659, 659, 659, 663, 684, 739, 749, 749, 749, 749, 749, 749, 749, 663, 1142, 663, 663, 1016, 663, 663, 663, 663, 663, 663, 663, 667, 1143, 1480, 751, 1074, 1384, 1074, 1384, 856, 1143, 667, 1142, 667, 667, 1016, 667, 667, 667, 667, 667, 667, 667, 670, 1074, 670, 670, 751, 670, 670, 670, 856, 1018, 670, 751, 670, 1392, 670, 670, 670, 670, 670, 670, 670, 670, 670, 751, 670, 670, 670, 1467, 1163, 856, 856, 1297, 670, 670, 670, 670, 670, 670, 1392, 670, 670, 1297, 942, 670, 1071, 1018, 686, 670, 686, 670, 1163, 686, 686, 686, 686, 686, 686, 686, 670, 1018, 670, 671, 1465, 671, 671, 942, 671, 671, 671, 1071, 1020, 671, 942, 671, 1071, 671, 752, 752, 752, 752, 752, 752, 752, 671, 942, 671, 671, 671, 765, 765, 765, 765, 765, 765, 765, 1298, 671, 752, 1473, 1464, 671, 671, 1393, 765, 1393, 1298, 1020, 746, 671, 746, 671, 1473, 746, 746, 746, 746, 746, 746, 746, 671, 1020, 671, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 1463, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 678, 681, 753, 753, 753, 753, 753, 753, 753, 1381, 1090, 1090, 1097, 1097, 681, 1462, 681, 681, 681, 681, 681, 681, 681, 753, 755, 1090, 755, 1097, 1381, 755, 755, 755, 755, 755, 755, 755, 1026, 681, 1165, 1165, 1172, 1172, 1227, 764, 681, 764, 764, 764, 764, 764, 764, 764, 1404, 1165, 1072, 1172, 681, 689, 1026, 689, 764, 1404, 689, 689, 1227, 689, 1395, 689, 1395, 689, 771, 689, 771, 771, 771, 771, 771, 771, 771, 1072, 1026, 689, 689, 689, 1072, 689, 772, 772, 772, 772, 772, 772, 772, 810, 1387, 810, 1680, 689, 810, 810, 810, 810, 810, 810, 810, 1680, 777, 1117, 1069, 1387, 1397, 779, 1397, 780, 777, 689, 1069, 689, 690, 779, 690, 780, 1069, 690, 690, 781, 690, 1132, 690, 1117, 690, 777, 690, 781, 777, 1117, 779, 782, 780, 779, 1057, 780, 690, 690, 690, 782, 690, 779, 1057, 1132, 781, 1223, 783, 781, 1394, 1132, 786, 781, 777, 1223, 783, 690, 782, 780, 786, 782, 812, 812, 812, 812, 812, 812, 812, 1394, 1201, 1461, 690, 783, 690, 717, 783, 786, 1469, 1201, 786, 1201, 1469, 717, 782, 717, 1057, 717, 717, 1354, 717, 717, 717, 717, 717, 717, 717, 1354, 1201, 783, 717, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 1460, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 1459, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 762, 766, 785, 766, 766, 766, 766, 766, 766, 766, 785, 793, 794, 794, 1213, 1213, 1294, 1475, 766, 793, 794, 766, 1475, 1257, 766, 1272, 1272, 785, 1307, 1213, 785, 766, 1294, 1294, 785, 794, 793, 794, 1307, 793, 1272, 794, 1443, 766, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 1257, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 773, 784, 773, 773, 773, 773, 773, 773, 773, 784, 787, 788, 1146, 1260, 915, 915, 789, 1263, 787, 788, 773, 1308, 915, 773, 789, 790, 784, 1146, 1146, 784, 773, 1308, 791, 790, 1439, 787, 788, 915, 787, 788, 791, 789, 773, 915, 789, 916, 916, 792, 796, 1390, 790, 784, 1403, 790, 788, 792, 796, 791, 1358, 790, 791, 787, 1146, 1260, 1401, 789, 1390, 1263, 916, 1403, 1401, 941, 792, 796, 916, 792, 796, 1197, 791, 941, 1358, 792, 813, 813, 813, 813, 813, 813, 813, 815, 815, 815, 815, 815, 815, 815, 941, 796, 811, 941, 811, 951, 1197, 811, 811, 1437, 1466, 1197, 811, 951, 811, 941, 811, 811, 811, 832, 832, 832, 832, 832, 832, 832, 811, 811, 811, 830, 951, 830, 1466, 951, 830, 830, 830, 830, 830, 830, 830, 833, 833, 833, 833, 833, 833, 833, 835, 835, 835, 835, 835, 835, 835, 951, 1391, 1076, 1427, 1076, 811, 1474, 811, 814, 1230, 814, 955, 1474, 814, 814, 1399, 1391, 1416, 814, 955, 814, 1076, 814, 814, 814, 814, 814, 814, 814, 814, 1399, 1230, 814, 814, 814, 1400, 955, 1230, 1076, 955, 814, 814, 814, 814, 814, 814, 1410, 955, 964, 964, 1400, 814, 836, 836, 836, 836, 836, 836, 836, 841, 841, 841, 841, 841, 841, 841, 814, 1458, 814, 816, 1482, 964, 816, 1479, 1482, 1458, 1471, 964, 816, 816, 816, 816, 816, 816, 816, 840, 1471, 840, 840, 840, 840, 840, 840, 840, 846, 1479, 846, 846, 846, 846, 846, 846, 846, 847, 847, 847, 847, 847, 847, 847, 852, 1496, 852, 852, 852, 852, 852, 852, 852, 1496, 1486, 816, 839, 853, 853, 853, 853, 853, 853, 853, 1236, 1488, 839, 1486, 839, 839, 1488, 839, 839, 839, 839, 839, 839, 839, 842, 858, 858, 858, 858, 858, 858, 858, 1236, 968, 968, 971, 971, 842, 1236, 842, 842, 842, 842, 842, 842, 842, 864, 959, 864, 864, 864, 864, 864, 864, 864, 959, 968, 842, 971, 1292, 842, 1292, 968, 864, 971, 963, 963, 842, 1544, 1292, 1544, 1292, 959, 963, 842, 959, 870, 1149, 870, 842, 843, 870, 870, 870, 870, 870, 870, 870, 963, 1555, 963, 1555, 1377, 843, 963, 843, 843, 843, 843, 843, 843, 843, 865, 865, 865, 865, 865, 865, 865, 872, 872, 872, 872, 872, 872, 872, 843, 865, 873, 1389, 1149, 1538, 1487, 843, 1376, 1468, 1538, 1149, 1487, 1389, 843, 845, 1389, 873, 873, 873, 873, 873, 873, 873, 1468, 845, 1154, 845, 845, 1304, 845, 845, 845, 845, 845, 845, 845, 848, 918, 918, 918, 918, 918, 918, 918, 1304, 1304, 1077, 1375, 1077, 848, 1545, 848, 848, 848, 848, 848, 848, 848, 919, 919, 919, 919, 919, 919, 919, 1077, 1470, 1472, 1154, 848, 1295, 1545, 848, 1077, 1374, 1154, 972, 966, 966, 848, 1295, 1470, 1472, 1600, 972, 966, 848, 1295, 921, 1159, 921, 848, 849, 921, 921, 921, 921, 921, 921, 921, 966, 972, 966, 1600, 972, 849, 966, 849, 849, 849, 849, 849, 849, 849, 923, 923, 923, 923, 923, 923, 923, 924, 924, 924, 924, 924, 924, 924, 849, 952, 1478, 1484, 1159, 1540, 1590, 849, 1590, 952, 1540, 1159, 1478, 1484, 849, 851, 960, 943, 943, 943, 943, 943, 943, 943, 960, 851, 952, 851, 851, 952, 851, 851, 851, 851, 851, 851, 851, 854, 943, 1491, 1373, 960, 1199, 1602, 960, 1082, 1082, 1027, 960, 1491, 854, 952, 854, 854, 854, 854, 854, 854, 854, 1602, 929, 929, 929, 929, 929, 929, 929, 1199, 1082, 1027, 854, 1537, 1199, 854, 1082, 929, 1539, 953, 1542, 1589, 854, 929, 1027, 1542, 1537, 953, 1027, 854, 1075, 1539, 1075, 1027, 854, 855, 944, 944, 944, 944, 944, 944, 944, 1589, 953, 1084, 1084, 953, 855, 1075, 855, 855, 855, 855, 855, 855, 855, 944, 930, 930, 930, 930, 930, 930, 930, 953, 1305, 1372, 1084, 954, 1543, 855, 1075, 930, 1084, 1543, 1305, 954, 855, 930, 1476, 1371, 946, 1305, 946, 855, 857, 946, 946, 946, 946, 946, 946, 946, 954, 1476, 857, 954, 857, 1556, 1370, 857, 857, 857, 857, 857, 857, 857, 857, 954, 935, 1546, 935, 935, 935, 935, 935, 935, 935, 1546, 1556, 857, 1296, 1369, 1402, 857, 859, 935, 859, 859, 1368, 859, 859, 859, 1402, 1296, 859, 1402, 859, 1296, 859, 859, 859, 859, 859, 859, 859, 859, 859, 1245, 859, 859, 859, 1120, 1120, 1306, 1081, 1081, 859, 859, 859, 859, 859, 859, 1081, 859, 859, 1367, 1306, 859, 859, 1245, 1306, 859, 1547, 859, 1120, 1245, 1549, 1081, 1547, 859, 1120, 1549, 859, 1081, 859, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 1366, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, 866, 1490, 866, 866, 866, 866, 866, 866, 866, 936, 936, 936, 936, 936, 936, 936, 1302, 866, 1302, 1596, 866, 1541, 1552, 866, 936, 1481, 1302, 1490, 1302, 1365, 866, 984, 984, 984, 984, 984, 984, 984, 1541, 1552, 1481, 1596, 866, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 1350, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, 875, 1483, 875, 1485, 1548, 875, 875, 958, 875, 1550, 875, 961, 875, 962, 875, 958, 1483, 1548, 1485, 961, 1339, 962, 1550, 1622, 875, 875, 875, 1489, 875, 1062, 1062, 1062, 958, 1062, 1062, 958, 961, 875, 962, 961, 1062, 962, 1489, 1622, 1062, 1062, 1312, 958, 994, 994, 994, 994, 994, 994, 994, 1312, 961, 1312, 875, 1321, 875, 876, 1319, 876, 962, 1551, 876, 876, 1151, 876, 1551, 876, 1646, 876, 1312, 876, 995, 995, 995, 995, 995, 995, 995, 1151, 1151, 876, 876, 876, 1003, 876, 1003, 1123, 1123, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1013, 1234, 1013, 1646, 1614, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1156, 876, 1123, 1234, 1234, 1314, 1151, 876, 1123, 876, 903, 1234, 903, 1553, 1614, 1156, 1156, 1234, 1553, 1022, 903, 1022, 903, 1326, 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1290, 1557, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1557, 1624, 903, 903, 903, 1326, 903, 903, 1031, 1558, 1156, 1326, 1289, 903, 1031, 1558, 1624, 903, 903, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, 928, 1110, 928, 928, 928, 928, 928, 928, 928, 1110, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 928, 1122, 1554, 1592, 1591, 1592, 928, 1554, 1032, 1110, 1591, 1288, 1110, 928, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1594, 1122, 1594, 928, 932, 1287, 932, 1122, 1038, 932, 932, 932, 932, 932, 932, 932, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1122, 932, 934, 934, 934, 934, 934, 934, 934, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1286, 934, 1102, 934, 934, 934, 934, 934, 934, 937, 1102, 937, 937, 937, 937, 937, 937, 937, 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1044, 937, 1102, 1598, 937, 1102, 1597, 937, 1597, 1598, 1599, 1285, 1599, 1102, 937, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1601, 1284, 1601, 1283, 937, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, 956, 1083, 1083, 1112, 1134, 1134, 1205, 1205, 956, 1083, 956, 1112, 956, 956, 1205, 956, 956, 956, 956, 956, 956, 956, 1282, 1281, 1083, 956, 957, 1134, 1112, 1205, 1083, 1112, 1610, 1134, 957, 1205, 957, 1112, 957, 957, 1610, 957, 957, 957, 957, 957, 957, 957, 1280, 1278, 1277, 957, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 985, 1623, 985, 1625, 1686, 985, 985, 1623, 1276, 1405, 985, 1275, 985, 1686, 985, 985, 985, 985, 985, 985, 985, 985, 1270, 1625, 985, 985, 985, 1037, 1244, 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1405, 1037, 1118, 1118, 1627, 1626, 1405, 1244, 1091, 1405, 1118, 1626, 1244, 1244, 1244, 985, 1405, 985, 986, 1627, 986, 1264, 1254, 986, 986, 1118, 1253, 1118, 986, 1252, 986, 1118, 986, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1206, 1206, 986, 986, 986, 1208, 1208, 1231, 1092, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1206, 1095, 1299, 1216, 1299, 1208, 1206, 1095, 1096, 1211, 1204, 1208, 1299, 986, 1096, 986, 998, 1103, 1299, 1103, 1196, 1194, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 998, 1193, 998, 998, 998, 998, 998, 998, 998, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 998, 1111, 1221, 1115, 1192, 1191, 1309, 998, 1309, 1111, 1221, 1115, 1190, 1189, 998, 1188, 1309, 1114, 1187, 998, 1008, 1186, 1309, 1185, 1116, 1114, 1111, 1221, 1115, 1111, 1221, 1115, 1116, 1008, 1184, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1114, 1248, 1248, 1114, 1115, 1183, 1221, 1116, 1111, 1114, 1116, 1217, 1133, 1133, 1008, 1207, 1207, 1411, 1202, 1217, 1133, 1008, 1116, 1207, 1248, 1411, 1698, 1202, 1008, 1202, 1248, 1698, 1698, 1008, 1017, 1133, 1217, 1133, 1207, 1217, 1182, 1133, 1411, 1181, 1207, 1411, 1202, 1017, 1203, 1017, 1017, 1017, 1017, 1017, 1017, 1017, 1145, 1203, 1145, 1203, 1217, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1705, 1202, 1017, 1407, 1180, 1705, 1705, 1179, 1203, 1017, 1174, 1141, 1407, 1709, 1407, 1203, 1017, 1140, 1709, 1709, 1139, 1017, 1028, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1138, 1407, 1028, 1137, 1028, 1028, 1136, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1029, 1135, 1029, 1029, 1407, 1029, 1029, 1029, 1109, 1108, 1029, 1107, 1029, 1099, 1029, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1029, 1080, 1029, 1029, 1029, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1070, 1029, 1148, 1726, 1068, 1029, 1029, 1067, 1726, 1726, 1029, 1063, 1060, 1029, 1059, 1029, 1058, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1029, 1053, 1029, 1030, 1048, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1250, 1030, 1251, 1251, 1045, 1035, 997, 1030, 1166, 1148, 1150, 983, 1150, 982, 1030, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1250, 981, 980, 1251, 1030, 1034, 1250, 1034, 979, 1251, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 978, 1153, 977, 976, 975, 1250, 974, 973, 1034, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 950, 1036, 1320, 1036, 1036, 1036, 1036, 1036, 1036, 1039, 1320, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 949, 1039, 1320, 1153, 1039, 1320, 933, 1039, 1167, 927, 1155, 926, 1155, 925, 1039, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1320, 917, 913, 904, 1039, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1046, 1158, 1046, 901, 900, 1046, 1046, 899, 1046, 898, 1046, 897, 1046, 896, 1046, 1265, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 895, 1046, 1046, 1046, 1161, 1046, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 894, 1265, 860, 834, 1046, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1733, 809, 808, 1158, 807, 1733, 1733, 806, 1170, 805, 1046, 1265, 1046, 1047, 1170, 1047, 804, 1265, 1047, 1047, 1266, 1047, 803, 1047, 802, 1047, 801, 1047, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 800, 799, 1047, 1047, 1047, 1345, 1047, 1266, 1171, 1324, 797, 1316, 1316, 775, 1171, 1209, 1209, 1209, 1209, 1209, 1209, 1209, 761, 1324, 1324, 760, 759, 1345, 1047, 1266, 1209, 1324, 758, 1345, 1316, 1266, 1047, 1324, 1047, 1061, 1316, 1061, 1210, 1210, 1210, 1210, 1210, 1210, 1210, 1061, 750, 1061, 745, 743, 742, 741, 1334, 1210, 732, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 729, 728, 727, 726, 725, 1061, 1061, 1061, 1214, 1061, 1061, 724, 1334, 723, 722, 721, 1061, 1334, 1334, 1334, 1061, 1061, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1078, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1078, 720, 1078, 719, 1078, 1078, 714, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1079, 1219, 1219, 1219, 1219, 1219, 1219, 1219, 1079, 693, 1079, 687, 1079, 1079, 683, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1089, 676, 1089, 674, 653, 1089, 1089, 1089, 1089, 1089, 1089, 1089, 652, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1089, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1215, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1093, 1348, 1093, 1093, 1093, 1093, 1093, 1093, 626, 624, 623, 1361, 1336, 1093, 1094, 622, 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1348, 1246, 1246, 1336, 1336, 1348, 1348, 1348, 1094, 1246, 1361, 1336, 621, 1742, 1094, 616, 1361, 1336, 1742, 1742, 615, 1094, 1748, 612, 1246, 607, 1246, 1748, 1748, 606, 1246, 603, 1755, 1094, 1098, 601, 1098, 1755, 1755, 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1258, 1258, 1258, 1258, 1258, 1258, 1258, 600, 1098, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 599, 1100, 598, 1100, 1100, 1100, 1100, 1100, 1100, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1126, 1315, 1315, 597, 1349, 1760, 596, 595, 594, 1315, 1760, 1760, 1126, 593, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1256, 1126, 592, 1315, 591, 1349, 559, 1126, 1127, 1315, 1349, 1349, 1349, 1422, 557, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 556, 1127, 555, 540, 1313, 539, 1422, 1127, 1128, 538, 537, 1432, 1422, 1313, 527, 1313, 512, 511, 508, 481, 1128, 1256, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1352, 1128, 1343, 1313, 1432, 470, 469, 1128, 468, 1313, 1432, 1128, 466, 460, 1128, 1313, 1343, 1343, 1313, 455, 415, 1128, 1352, 414, 1343, 1313, 1762, 1352, 1352, 1352, 1343, 1762, 1762, 1128, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1160, 1763, 413, 412, 411, 405, 1763, 1763, 403, 1259, 1160, 401, 1160, 1160, 399, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1162, 391, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1262, 1362, 389, 1425, 1162, 388, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1448, 1262, 1262, 1262, 1262, 1262, 1262, 1262, 384, 1362, 1162, 1425, 352, 1162, 1259, 351, 1425, 1425, 1425, 1764, 1162, 1162, 1448, 344, 1764, 1764, 343, 1162, 1448, 342, 1362, 1362, 1162, 1164, 341, 1164, 1262, 1362, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 336, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1164, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1268, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1168, 335, 1168, 1168, 1168, 1168, 1168, 1168, 1269, 334, 333, 1457, 1501, 1168, 1169, 332, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1406, 1169, 324, 1457, 1501, 321, 319, 1169, 1273, 1406, 1501, 1406, 318, 317, 1169, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 316, 315, 314, 1457, 1169, 1173, 1406, 1173, 1274, 1457, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1406, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1173, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1317, 1765, 313, 312, 311, 310, 1765, 1765, 1175, 309, 1175, 1175, 1175, 1175, 1175, 1175, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 307, 1177, 306, 302, 1177, 1177, 1514, 1177, 1526, 1177, 1351, 1177, 301, 1177, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 300, 1409, 1177, 1177, 1177, 299, 1177, 1514, 1318, 1526, 1409, 1351, 1409, 1514, 1177, 1526, 1351, 1351, 1351, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1767, 298, 297, 1409, 295, 1767, 1767, 1351, 1363, 294, 1177, 1775, 1177, 1178, 1409, 1178, 1775, 1775, 1178, 1178, 1426, 1178, 293, 1178, 292, 1178, 291, 1178, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1408, 1413, 1178, 1178, 1178, 1420, 1178, 1426, 1364, 1408, 290, 1408, 1426, 1426, 1426, 1413, 1413, 289, 288, 1420, 1420, 1498, 1498, 1413, 287, 285, 1428, 1420, 1408, 1413, 1429, 284, 283, 1420, 1565, 282, 1178, 1800, 1178, 1198, 281, 1198, 1800, 1800, 1498, 280, 1408, 279, 1428, 1198, 1498, 1198, 1429, 1428, 1428, 1428, 1565, 1429, 1429, 1429, 1807, 278, 1565, 1434, 277, 1807, 1807, 1438, 276, 1198, 1428, 1198, 1198, 1198, 275, 1198, 1198, 1434, 1434, 1440, 1564, 1564, 1198, 1441, 274, 1434, 1198, 1198, 1200, 1438, 1200, 1434, 273, 269, 1438, 1438, 1438, 268, 1200, 263, 1200, 1440, 261, 1564, 1574, 1441, 1440, 1440, 1440, 1564, 1441, 1441, 1441, 259, 258, 257, 246, 243, 1200, 241, 1200, 1200, 1200, 1440, 1200, 1200, 1574, 1442, 1809, 238, 234, 1200, 1574, 1809, 1809, 1200, 1200, 1212, 1446, 1212, 1456, 212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1442, 201, 200, 1446, 1446, 1442, 1442, 1442, 1212, 1224, 1811, 1446, 162, 1456, 1507, 1811, 1811, 1446, 1456, 1456, 1456, 1224, 1510, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 156, 1224, 155, 148, 147, 146, 1507, 1224, 1225, 1497, 1497, 1507, 1507, 1507, 1510, 144, 142, 1497, 132, 1510, 1510, 1510, 1225, 1225, 1225, 1225, 1225, 1225, 1225, 130, 1225, 129, 1497, 127, 1497, 1835, 1225, 1226, 1497, 126, 1835, 1835, 122, 120, 1568, 1568, 1503, 119, 1511, 1226, 116, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1515, 1226, 1503, 1503, 1578, 110, 91, 1226, 90, 1568, 1503, 1226, 1511, 88, 1226, 1568, 1503, 1511, 1511, 1511, 78, 1226, 1515, 70, 69, 67, 1578, 1515, 1515, 1515, 57, 53, 1578, 1226, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1229, 1232, 36, 1509, 35, 33, 24, 23, 20, 17, 1571, 1571, 1517, 1617, 15, 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1570, 1232, 0, 1509, 1517, 1517, 0, 1232, 1509, 1509, 1509, 1571, 1517, 1617, 1232, 1233, 0, 1571, 1517, 1617, 1529, 0, 1570, 0, 1524, 1509, 0, 0, 1570, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1620, 1233, 1524, 1524, 0, 0, 1529, 1233, 1570, 0, 1524, 1529, 1529, 1529, 1233, 1235, 1524, 0, 1530, 1608, 1608, 0, 1620, 0, 1235, 0, 1235, 1532, 1620, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 0, 1235, 0, 0, 1530, 0, 1608, 1235, 1237, 1530, 1530, 1530, 1608, 1532, 0, 0, 0, 0, 1532, 1532, 1532, 0, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 0, 1237, 0, 0, 0, 0, 1532, 1237, 0, 0, 1237, 1237, 1237, 1237, 1237, 1237, 1238, 0, 0, 1533, 0, 0, 0, 0, 0, 0, 0, 1575, 1238, 1636, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 0, 1238, 0, 0, 1533, 0, 0, 1238, 1239, 1533, 1533, 1533, 1575, 0, 1636, 0, 0, 1575, 1575, 1575, 1636, 0, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 0, 1239, 1657, 0, 1669, 0, 0, 1239, 1240, 0, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1563, 1563, 1566, 1566, 1580, 0, 0, 1657, 1563, 1669, 1566, 1240, 0, 1657, 1240, 1669, 0, 0, 1580, 1580, 0, 1240, 1584, 1563, 0, 1566, 1580, 1566, 0, 1563, 1684, 1566, 1580, 1240, 1241, 0, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1587, 1584, 0, 1588, 0, 0, 1584, 1584, 1584, 1684, 0, 1241, 0, 0, 1241, 1684, 0, 0, 0, 0, 0, 1241, 1587, 0, 0, 1588, 0, 1587, 1587, 1587, 1588, 1588, 1588, 1241, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1271, 1586, 1271, 0, 0, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 0, 0, 0, 0, 0, 0, 0, 0, 1271, 1322, 0, 1586, 1607, 1607, 0, 0, 1586, 1586, 1586, 0, 1607, 1621, 0, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 0, 1322, 0, 1586, 0, 1607, 0, 1322, 0, 0, 0, 1607, 0, 1621, 1322, 1323, 0, 0, 1621, 1621, 1621, 0, 0, 0, 1634, 0, 1644, 0, 0, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 0, 1323, 1634, 1634, 0, 0, 0, 1323, 0, 0, 1634, 0, 1644, 0, 1323, 1325, 1634, 1644, 1644, 1644, 0, 0, 0, 1660, 1325, 1648, 1325, 1655, 0, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 0, 1325, 0, 1648, 1648, 1655, 1655, 1325, 1327, 1660, 0, 1648, 0, 1655, 1660, 1660, 1660, 1648, 0, 1655, 0, 0, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 0, 1327, 0, 0, 0, 0, 0, 1327, 0, 0, 1327, 1327, 1327, 1327, 1327, 1327, 1328, 0, 0, 1661, 0, 0, 0, 0, 0, 0, 0, 1663, 1328, 0, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 0, 1328, 0, 0, 1661, 0, 0, 1328, 1329, 1661, 1661, 1661, 1663, 0, 0, 0, 0, 1663, 1663, 1663, 0, 0, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 0, 1329, 0, 0, 1671, 1663, 0, 1329, 1330, 0, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1664, 1671, 1671, 1675, 0, 0, 0, 0, 0, 1671, 0, 1330, 0, 0, 1330, 1671, 0, 0, 0, 0, 0, 1330, 1664, 1677, 0, 1675, 0, 1664, 1664, 1664, 1675, 1675, 1675, 1330, 1331, 0, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1678, 0, 1677, 1679, 0, 0, 0, 1677, 1677, 1677, 0, 1331, 0, 0, 1331, 0, 0, 0, 0, 0, 0, 1331, 1678, 0, 1677, 1679, 0, 1678, 1678, 1678, 1679, 1679, 1679, 1331, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1335, 0, 0, 1685, 0, 0, 0, 0, 0, 1335, 0, 1335, 0, 0, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 0, 1335, 0, 0, 1685, 0, 0, 1335, 1337, 1685, 1685, 1685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 0, 1337, 0, 0, 0, 0, 0, 1337, 1338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 0, 1338, 0, 0, 0, 0, 0, 1338, 1340, 0, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1340, 0, 0, 1340, 0, 0, 0, 0, 0, 0, 1340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1340, 1341, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 0, 1341, 0, 0, 0, 0, 0, 1341, 0, 0, 0, 0, 0, 0, 1341, 1342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 0, 1342, 0, 0, 0, 0, 0, 1342, 0, 0, 0, 0, 0, 0, 1342, 1344, 0, 0, 0, 0, 0, 0, 0, 0, 1344, 0, 1344, 0, 0, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 0, 1344, 0, 0, 0, 0, 0, 1344, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1346, 1346, 1346, 1346, 1346, 1346, 1355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1355, 0, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 0, 1355, 0, 0, 0, 0, 0, 1355, 1356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 0, 1356, 0, 0, 0, 0, 0, 1356, 1357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1357, 0, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 0, 1357, 0, 0, 0, 0, 0, 1357, 0, 0, 0, 1357, 0, 0, 1357, 0, 0, 0, 0, 0, 0, 1357, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1357, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1412, 0, 0, 0, 0, 0, 0, 0, 0, 1412, 0, 1412, 0, 0, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 0, 1412, 0, 0, 0, 0, 0, 1412, 1414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 0, 1414, 0, 0, 0, 0, 0, 1414, 1415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 0, 1415, 0, 0, 0, 0, 0, 1415, 1417, 0, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1417, 0, 0, 1417, 0, 0, 0, 0, 0, 0, 1417, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1417, 1418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 0, 1418, 0, 0, 0, 0, 0, 1418, 0, 0, 0, 0, 0, 0, 1418, 1419, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 0, 1419, 0, 0, 0, 0, 0, 1419, 0, 0, 0, 0, 0, 0, 1419, 1421, 0, 0, 0, 0, 0, 0, 0, 0, 1421, 0, 1421, 0, 0, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 0, 1421, 0, 0, 0, 0, 0, 1421, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1423, 1423, 1423, 1423, 1423, 1423, 1430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 0, 1430, 0, 0, 0, 0, 0, 1430, 1431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1431, 1431, 1431, 1431, 1431, 1431, 1431, 0, 1431, 0, 0, 0, 0, 0, 1431, 1433, 0, 0, 0, 0, 0, 0, 0, 0, 1433, 0, 1433, 0, 0, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 0, 1433, 0, 0, 0, 0, 0, 1433, 1435, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 0, 1435, 0, 0, 0, 0, 0, 1435, 1436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 0, 1436, 0, 0, 0, 0, 0, 1436, 1444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 0, 1444, 0, 0, 0, 0, 0, 1444, 0, 0, 0, 0, 0, 0, 1444, 1445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1445, 1445, 1445, 1445, 1445, 1445, 1445, 0, 1445, 0, 0, 0, 0, 0, 1445, 0, 0, 0, 0, 0, 0, 1445, 1447, 0, 0, 0, 0, 0, 0, 0, 0, 1447, 0, 1447, 0, 0, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 0, 1447, 0, 0, 0, 0, 0, 1447, 1449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1449, 1449, 1449, 1449, 1449, 1449, 1449, 0, 1449, 0, 0, 0, 0, 0, 1449, 0, 0, 1449, 1449, 1449, 1449, 1449, 1449, 1450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1450, 0, 1450, 1450, 1450, 1450, 1450, 1450, 1450, 0, 1450, 0, 0, 0, 0, 0, 1450, 1451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1451, 1451, 1451, 1451, 1451, 1451, 1451, 0, 1451, 0, 0, 0, 0, 0, 1451, 1452, 0, 1452, 1452, 1452, 1452, 1452, 1452, 1452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1452, 0, 0, 1452, 0, 0, 0, 0, 0, 0, 1452, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1452, 1453, 0, 1453, 1453, 1453, 1453, 1453, 1453, 1453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1453, 0, 0, 1453, 0, 0, 0, 0, 0, 0, 1453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1453, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 0, 1499, 0, 0, 0, 0, 0, 1499, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 0, 1500, 0, 0, 0, 0, 0, 1500, 1502, 0, 0, 0, 0, 0, 0, 0, 0, 1502, 0, 1502, 0, 0, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 0, 1502, 0, 0, 0, 0, 0, 1502, 1504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 0, 1504, 0, 0, 0, 0, 0, 1504, 1505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 0, 1505, 0, 0, 0, 0, 0, 1505, 1512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 0, 1512, 0, 0, 0, 0, 0, 1512, 1513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 0, 1513, 0, 0, 0, 0, 0, 1513, 1516, 0, 0, 0, 0, 0, 0, 0, 0, 1516, 0, 1516, 0, 0, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 0, 1516, 0, 0, 0, 0, 0, 1516, 1518, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 0, 1518, 0, 0, 0, 0, 0, 1518, 1519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 0, 1519, 0, 0, 0, 0, 0, 1519, 1521, 0, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1521, 0, 0, 1521, 0, 0, 0, 0, 0, 0, 1521, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1521, 1522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1522, 1522, 1522, 1522, 1522, 1522, 1522, 0, 1522, 0, 0, 0, 0, 0, 1522, 0, 0, 0, 0, 0, 0, 1522, 1523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1523, 1523, 1523, 1523, 1523, 1523, 1523, 0, 1523, 0, 0, 0, 0, 0, 1523, 0, 0, 0, 0, 0, 0, 1523, 1525, 0, 0, 0, 0, 0, 0, 0, 0, 1525, 0, 1525, 0, 0, 1525, 1525, 1525, 1525, 1525, 1525, 1525, 0, 1525, 0, 0, 0, 0, 0, 1525, 1527, 1527, 1527, 1527, 1527, 1527, 1527, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1527, 1527, 1527, 1527, 1527, 1527, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1569, 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1572, 1572, 1572, 1572, 1572, 1572, 1572, 0, 1572, 0, 0, 0, 0, 0, 1572, 1573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1573, 1573, 1573, 1573, 1573, 1573, 1573, 0, 1573, 0, 0, 0, 0, 0, 1573, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1576, 1576, 1576, 1576, 1576, 1576, 1576, 0, 1576, 0, 0, 0, 0, 0, 1576, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 0, 1577, 0, 0, 0, 0, 0, 1577, 1579, 0, 0, 0, 0, 0, 0, 0, 0, 1579, 0, 1579, 0, 0, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 0, 1579, 0, 0, 0, 0, 0, 1579, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 0, 1581, 0, 0, 0, 0, 0, 1581, 1582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 0, 1582, 0, 0, 0, 0, 0, 1582, 1611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1611, 0, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 0, 1611, 0, 0, 0, 0, 0, 1611, 1612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 0, 1612, 0, 0, 0, 0, 0, 1612, 1613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1613, 0, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 0, 1613, 0, 0, 0, 0, 0, 1613, 0, 0, 0, 1613, 0, 0, 1613, 0, 0, 0, 0, 0, 0, 1613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1613, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 0, 1618, 0, 0, 0, 0, 0, 1618, 1619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 0, 1619, 0, 0, 0, 0, 0, 1619, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 0, 1632, 0, 0, 0, 0, 0, 1632, 0, 0, 0, 0, 0, 0, 1632, 1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 0, 1633, 0, 0, 0, 0, 0, 1633, 0, 0, 0, 0, 0, 0, 1633, 1635, 0, 0, 0, 0, 0, 0, 0, 0, 1635, 0, 1635, 0, 0, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 0, 1635, 0, 0, 0, 0, 0, 1635, 1637, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 0, 1637, 0, 0, 0, 0, 0, 1637, 0, 0, 1637, 1637, 1637, 1637, 1637, 1637, 1638, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1638, 0, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 0, 1638, 0, 0, 0, 0, 0, 1638, 1639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 0, 1639, 0, 0, 0, 0, 0, 1639, 1640, 0, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1640, 0, 0, 1640, 0, 0, 0, 0, 0, 0, 1640, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1640, 1641, 0, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1641, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 1641, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1641, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1647, 0, 0, 0, 0, 0, 0, 0, 0, 1647, 0, 1647, 0, 0, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 0, 1647, 0, 0, 0, 0, 0, 1647, 1649, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 0, 1649, 0, 0, 0, 0, 0, 1649, 1650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 0, 1650, 0, 0, 0, 0, 0, 1650, 1652, 0, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1652, 0, 0, 1652, 0, 0, 0, 0, 0, 0, 1652, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1652, 1653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 0, 1653, 0, 0, 0, 0, 0, 1653, 0, 0, 0, 0, 0, 0, 1653, 1654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 0, 1654, 0, 0, 0, 0, 0, 1654, 0, 0, 0, 0, 0, 0, 1654, 1656, 0, 0, 0, 0, 0, 0, 0, 0, 1656, 0, 1656, 0, 0, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 0, 1656, 0, 0, 0, 0, 0, 1656, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1658, 1658, 1658, 1658, 1658, 1658, 1667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 0, 1667, 0, 0, 0, 0, 0, 1667, 1668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 0, 1668, 0, 0, 0, 0, 0, 1668, 1670, 0, 0, 0, 0, 0, 0, 0, 0, 1670, 0, 1670, 0, 0, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 0, 1670, 0, 0, 0, 0, 0, 1670, 1672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 0, 1672, 0, 0, 0, 0, 0, 1672, 1673, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 0, 1673, 0, 0, 0, 0, 0, 1673, 1682, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 0, 1682, 0, 0, 0, 0, 0, 1682, 1683, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 0, 1683, 0, 0, 0, 0, 0, 1683, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1692, 1692, 1692, 1692, 0, 0, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 0, 1692, 1693, 0, 0, 1693, 0, 0, 0, 0, 0, 0, 1693, 0, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 0, 1693, 1694, 1694, 1694, 1694, 0, 0, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 0, 1694, 1695, 0, 1695, 1695, 0, 1695, 0, 1695, 0, 1695, 1695, 0, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 0, 1695, 1696, 0, 0, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 0, 1696, 1697, 0, 0, 0, 1697, 0, 0, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 0, 1697, 1699, 1699, 0, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1700, 0, 0, 1700, 0, 1700, 0, 1700, 1700, 0, 1700, 1700, 0, 0, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 0, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1702, 1702, 1702, 1702, 0, 0, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 0, 1702, 1703, 0, 0, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 0, 1703, 1704, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1704, 1704, 0, 0, 0, 0, 1704, 1706, 0, 0, 0, 0, 1706, 0, 1706, 0, 0, 1706, 1707, 0, 0, 0, 0, 1707, 0, 1707, 0, 0, 1707, 1708, 0, 0, 0, 0, 1708, 0, 1708, 0, 0, 1708, 1710, 1710, 1710, 1710, 0, 0, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 0, 1710, 1711, 1711, 0, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1712, 0, 1712, 1712, 0, 1712, 0, 1712, 0, 1712, 1712, 0, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 0, 1712, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 0, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1714, 0, 0, 0, 0, 0, 0, 1714, 0, 0, 1714, 1714, 1715, 0, 0, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 0, 1715, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 0, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1718, 0, 0, 0, 1718, 0, 0, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 0, 1718, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 0, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1720, 0, 0, 0, 0, 1720, 1720, 1720, 1721, 1721, 0, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1722, 0, 1722, 1722, 0, 1722, 0, 0, 0, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1723, 0, 0, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 0, 1723, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 0, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1725, 0, 0, 1725, 0, 0, 0, 0, 0, 0, 1725, 0, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 0, 1725, 1727, 1727, 1727, 1727, 0, 0, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 0, 1727, 1728, 1728, 0, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1729, 0, 0, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 0, 1729, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 0, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1731, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1731, 1731, 0, 0, 0, 1731, 1731, 1731, 1732, 0, 1732, 0, 0, 0, 0, 0, 1732, 1732, 0, 0, 1732, 1734, 0, 0, 0, 0, 0, 0, 1734, 0, 0, 1734, 1734, 1735, 0, 0, 0, 0, 1735, 0, 1735, 0, 0, 1735, 1736, 0, 0, 0, 0, 1736, 0, 1736, 0, 0, 1736, 1737, 0, 0, 0, 0, 1737, 0, 1737, 0, 0, 1737, 1738, 1738, 0, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 0, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1740, 0, 0, 1740, 0, 1740, 0, 1740, 1740, 0, 1740, 1740, 0, 0, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1741, 0, 1741, 1741, 0, 1741, 0, 1741, 0, 1741, 1741, 0, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 0, 1741, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 0, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1744, 0, 0, 0, 0, 0, 1744, 0, 0, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 0, 1744, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 0, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1746, 0, 0, 0, 1746, 0, 0, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 0, 1746, 1747, 0, 1747, 0, 0, 0, 0, 0, 1747, 1747, 0, 0, 1747, 1749, 0, 0, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 0, 1749, 1750, 0, 0, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 0, 1750, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 0, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 0, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1753, 0, 0, 1753, 0, 0, 0, 0, 0, 0, 1753, 0, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 0, 1753, 1754, 0, 0, 1754, 0, 1754, 0, 1754, 1754, 0, 1754, 0, 1754, 0, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1756, 1756, 0, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 0, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1758, 0, 0, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 0, 1758, 1759, 0, 1759, 0, 0, 0, 0, 0, 1759, 1759, 0, 0, 1759, 1761, 0, 0, 0, 0, 1761, 1761, 1761, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 0, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1768, 0, 1768, 1768, 0, 1768, 0, 1768, 0, 1768, 1768, 0, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 0, 1768, 1769, 0, 0, 0, 0, 1769, 1769, 1769, 0, 0, 0, 1769, 1770, 0, 0, 0, 0, 0, 1770, 0, 0, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 0, 1770, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 0, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1772, 0, 1772, 0, 0, 0, 1772, 0, 0, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 0, 1772, 1773, 0, 0, 0, 0, 1773, 1773, 1773, 1774, 0, 1774, 0, 0, 0, 0, 0, 1774, 1774, 0, 0, 1774, 1776, 0, 0, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 0, 1776, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 0, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 0, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 0, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1780, 0, 0, 1780, 0, 0, 0, 0, 0, 0, 1780, 0, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 0, 1780, 1781, 0, 0, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 0, 1781, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1783, 0, 0, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 0, 1783, 1784, 0, 0, 0, 0, 1784, 1784, 1784, 1785, 0, 0, 0, 0, 1785, 1785, 1785, 0, 0, 0, 1785, 1786, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1786, 1786, 0, 0, 0, 1786, 1786, 1786, 1786, 1787, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1787, 1787, 0, 0, 0, 1787, 1787, 1787, 1787, 1788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1788, 1788, 0, 0, 0, 1788, 1788, 1788, 1788, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 0, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1790, 0, 0, 0, 0, 1790, 1790, 1790, 1791, 0, 1791, 1791, 0, 1791, 0, 1791, 0, 1791, 1791, 0, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 0, 1791, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 0, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1793, 0, 0, 0, 1793, 0, 0, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 0, 1793, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1795, 0, 0, 0, 0, 1795, 1795, 1795, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 0, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 0, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1798, 0, 0, 1798, 0, 0, 0, 0, 0, 0, 1798, 0, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 0, 1798, 1799, 0, 1799, 0, 0, 0, 0, 0, 1799, 1799, 0, 0, 1799, 1801, 0, 0, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 0, 1801, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 0, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1803, 0, 0, 1803, 0, 1803, 0, 1803, 1803, 0, 1803, 0, 1803, 0, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1805, 0, 0, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 0, 1805, 1806, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1806, 0, 0, 0, 0, 0, 1806, 0, 0, 1806, 1808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1808, 0, 0, 0, 0, 0, 1808, 0, 0, 1808, 1810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1810, 0, 0, 0, 0, 0, 1810, 0, 0, 1810, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 0, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1813, 0, 1813, 1813, 0, 1813, 0, 1813, 0, 1813, 1813, 0, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 0, 1813, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 0, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 0, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1816, 0, 1816, 0, 0, 0, 1816, 0, 0, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 0, 1816, 1817, 0, 0, 1817, 0, 1817, 0, 1817, 1817, 0, 1817, 0, 0, 0, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 0, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1821, 0, 0, 1821, 0, 0, 0, 0, 0, 0, 1821, 0, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 0, 1821, 1822, 0, 0, 0, 0, 1822, 1822, 1822, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 0, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1825, 0, 0, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 0, 1825, 1826, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1826, 0, 0, 0, 0, 1826, 1826, 1826, 0, 1826, 1827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1827, 0, 0, 0, 0, 1827, 1827, 1827, 0, 1827, 1828, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1828, 0, 0, 0, 0, 1828, 1828, 1828, 0, 1828, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 0, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1830, 0, 1830, 1830, 0, 1830, 0, 1830, 0, 1830, 1830, 0, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 0, 1830, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 0, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 0, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1833, 0, 0, 0, 1833, 0, 1833, 0, 0, 0, 1833, 0, 0, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 0, 1833, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 0, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 0, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687 } ; static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr; static char *yy_full_match; static int yy_lp; static int yy_looking_for_trail_begin = 0; static int yy_full_lp; static int *yy_full_state; #define YY_TRAILING_MASK 0x2000 #define YY_TRAILING_HEAD_MASK 0x4000 #define REJECT \ { \ *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \ yy_cp = yy_full_match; /* restore poss. backed-over text */ \ yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \ yy_state_ptr = yy_full_state; /* restore orig. state */ \ yy_current_state = *yy_state_ptr; /* restore curr. state */ \ ++yy_lp; \ goto find_rule; \ } #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #ifndef YYLMAX #define YYLMAX 8192 #endif char yytext[YYLMAX]; char *filttext_ptr; #line 1 "filt.l" #define INITIAL 0 #line 5 "filt.l" #include #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #include #include #include #include #define MAX_INCLUDE_DEPTH 100 #define SEGINC 1024 #define MASKINC 1024 #define LARGE_NUMBER 65536 /* must match regions.h */ #define PSTOP -142857.142857 /* stolen from fitsy/xos.h */ #define X__PI 3.14159265358979323846 #define X_2PI ( 2 * X__PI ) #define X_R2D (X_2PI / 360.0) #define X_R2H (X_2PI / 24.0) #define X_H2D (360.0 / 24.0) #define r2h(r) ( (r) / X_R2H ) #define h2r(d) ( (d) * X_R2H ) #define r2d(r) ( (r) / X_R2D ) #define d2r(d) ( (d) * X_R2D ) #define h2d(r) ( (r) * X_H2D ) #define d2h(d) ( (d) / X_H2D ) /* region types */ #define TY_ANNULUS 1 #define TY_BOX 2 #define TY_CIRCLE 3 #define TY_ELLIPSE 4 #define TY_FIELD 5 #define TY_LINE 6 #define TY_PANDA 7 #define TY_BPANDA 8 #define TY_CPANDA 9 #define TY_EPANDA 10 #define TY_PIE 11 #define TY_QTPIE 11 #define TY_POINT 12 #define TY_POLYGON 13 #define TY_IMAGEMASK 14 /* oft-used checks on argument and coord types */ #define XARG ((narg % 2) == 1) #define YARG ((narg % 2) == 0) #define POSARG ((regid == TY_POLYGON) || (regid == TY_LINE) || (narg<=2)) #define ANGARG (((regid == TY_PANDA) && (narg==3)) || \ ((regid == TY_PANDA) && (narg==4)) || \ ((regid == TY_BPANDA) && (narg==3)) || \ ((regid == TY_BPANDA) && (narg==4)) || \ ((regid == TY_CPANDA) && (narg==3)) || \ ((regid == TY_CPANDA) && (narg==4)) || \ ((regid == TY_EPANDA) && (narg==3)) || \ ((regid == TY_EPANDA) && (narg==4)) || \ ((regid == TY_PIE) && (narg>=3)) ) #define NUMARG (((regid == TY_PANDA) && (narg==5)) || \ ((regid == TY_PANDA) && (narg==8)) || \ ((regid == TY_BPANDA) && (narg==5)) || \ ((regid == TY_BPANDA) && (narg==10)) || \ ((regid == TY_CPANDA) && (narg==5)) || \ ((regid == TY_CPANDA) && (narg==8)) || \ ((regid == TY_EPANDA) && (narg==5)) || \ ((regid == TY_EPANDA) && (narg==10)) ) #define SAVEANG ((regid == TY_BOX) || (regid == TY_ELLIPSE)) #define USEPHYS (filt->fhd->table && \ (filt->type == TYPE_EVENTS) && !filt->evsect) #define USEWCS (gcoordsys && \ strcmp(gcoordsys, "image") && strcmp(gcoordsys, "physical")) #define IMFLIP (USEWCS && wcs->imflip) #define WCSSIZE (iswcs(wcs) && (cdelt1!=0) && (cdelt2!=0)) /* format statements */ #define DFMT1 ",%f" #define DFMT2 ",%f,%f" #define DFMT4 ",%f,%f,%f,%f" #define SFMT1 ",%s" #define IFMT1 ",%d" /* flex is not thread-safe, so we did not put any effort into avoiding globals, i.e. by putting read-write variables below into a struct */ static YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; static int include_stack_ptr = 0; static int parse_error = 0; static int colargs; static int filtlen; static int radanglen; static int initbindefs; static int regtype; static int regid; static int laststart; static int maxfiltseg; static int setargs; static int inexpr; static int macropass; static int narg; static int nparen; static int nsparen; static int nrparen; static int nfiltseg; static int nrange; static int nroutine; static int nshape; static int nregion; static int nmask; static int got; static int offscl; static int xtype, ytype; static int tltyp[2]; static double lastd1; static double lastd2; static double xpos, ypos; static double xpix, ypix; static double cdelt1, cdelt2, crot; static double dval, dval2; static double tlmin[2]; static double tlmax[2]; static double binsiz[2]; static char lastarg[SZ_LINE]; static char regname[SZ_LINE]; static char colnames[2][SZ_LINE]; static char wcsnames[2][SZ_LINE]; static char macrobuf[SZ_LINE]; static char rangename[SZ_LINE]; static char sbuf[SZ_LINE]; static char saveang[SZ_LINE]; static char *fcoordsys=NULL; static char *gcoordsys=NULL; static char *filter=NULL; static char *radang=NULL; static struct WorldCoor *wcs=NULL; static FiltSeg *filtseg=NULL; static Filter filt=NULL; /* these are read-only */ static char *rnames[] = {"annulus", "box", "circle", "ellipse", "line", "panda", "pie", "qtpie", "point", "polygon", "field", "bpanda", "cpanda", "epanda", "imagemask", NULL}; static int rargs[] = {4, 5, 3, 5, 4, 8, 4, 4, 2, 6, 0, 11, 8, 11, 0, 0}; static int vargs[] = {'y', 'o', 'y', 'o', 'n', 'n', 'y', 'n', 'e', 'e', 'n', 'n', 'n', 'n', 'n', '\0'}; static int _FiltLexTypeCmp(const void *s1, const void *s2); static int _FiltLexTypeMatch(int ftype, int ttype); static int _FiltLexAccel _PRx((int n)); static int _FiltLexRegionPanda _PRx((void)); static int _FiltLexLcx _PRx((void)); static int _FiltLexArgCheck _PRx((char *name, int args)); static int _FiltLexNeedOp _PRx((int i, char *s)); static void _FiltLexOp _PRx((char *s)); static void _FiltLexTypeSet _PRx((int type)); static void _FiltLexNew _PRx((void)); static void _FiltLexParen _PRx((char *s)); static void _FiltLexCat _PRx((char *s)); static void _FiltLexRegionStart _PRx((int docols)); static void _FiltLexRegionVal _PRx((char *s)); static void _FiltLexRegionEnd _PRx((void)); static void _FiltLexRangeAdd _PRx((char *xname, char *str, int type, int n, int maxlen)); static void _FiltLexArgSave _PRx((double dval)); static void _FiltLexSetWcs _PRx((char *s)); static void _FiltLexWcsCols _PRx((FITSHead header, char *name1, char *name2)); static void _FiltLexNum _PRx((int lcx)); static void _FiltLexEnd _PRx((void)); static void _FiltLexMake _PRx((void)); static char *_FiltLexGetWcs _PRx((void)); static int _FiltIncMask(FilterMask masks, int maxmask, int nmask); static int _FiltFitsMask(char *filename, FilterMask *rmasks, FITSHead *rhead, int *nreg); static void bin2num(char *d, char *s, int maxlen); int _filterror _PRx((char *msg)); #define RLIST 1 #define RTINE 2 #define REG 3 #define AREG 4 #define INCLUDE 5 #define COMM 6 #line 4563 "lex.filt.c" /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap YY_PROTO(( void )); #else extern int yywrap YY_PROTO(( void )); #endif #endif #ifndef YY_NO_UNPUT static void yyunput YY_PROTO(( int c, char *buf_ptr )); #endif #ifndef filttext_ptr static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen YY_PROTO(( yyconst char * )); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput YY_PROTO(( void )); #else static int input YY_PROTO(( void )); #endif #endif #if YY_STACK_USED static int yy_start_stack_ptr = 0; static int yy_start_stack_depth = 0; static int *yy_start_stack = 0; #ifndef YY_NO_PUSH_STATE static void yy_push_state YY_PROTO(( int new_state )); #endif #ifndef YY_NO_POP_STATE static void yy_pop_state YY_PROTO(( void )); #endif #ifndef YY_NO_TOP_STATE static int yy_top_state YY_PROTO(( void )); #endif #else #define YY_NO_PUSH_STATE 1 #define YY_NO_POP_STATE 1 #define YY_NO_TOP_STATE 1 #endif #ifdef YY_MALLOC_DECL YY_MALLOC_DECL #else #if __STDC__ #ifndef __cplusplus #include #endif #else /* Just try to get by without declaring the routines. This will fail * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) * or sizeof(void*) != sizeof(int). */ #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #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 (void) fwrite( yytext, yyleng, 1, yyout ) #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->yy_is_interactive ) \ { \ int c = '*', 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 if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #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 /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL int yylex YY_PROTO(( void )) #endif /* 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 break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION YY_DECL { register yy_state_type yy_current_state; register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; #line 247 "filt.l" #line 4717 "lex.filt.c" if ( yy_init ) { yy_init = 0; #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 ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_load_buffer_state(); } while ( 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_state_ptr = yy_state_buf; *yy_state_ptr++ = yy_current_state; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*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 >= 1688 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; ++yy_cp; } while ( yy_base[yy_current_state] != 14226 ); yy_find_action: yy_current_state = *--yy_state_ptr; yy_lp = yy_accept[yy_current_state]; find_rule: /* we branch to this label when backing up */ for ( ; ; ) /* until we find what rule we matched */ { if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] ) { yy_act = yy_acclist[yy_lp]; if ( yy_act & YY_TRAILING_HEAD_MASK || yy_looking_for_trail_begin ) { if ( yy_act == yy_looking_for_trail_begin ) { yy_looking_for_trail_begin = 0; yy_act &= ~YY_TRAILING_HEAD_MASK; break; } } else if ( yy_act & YY_TRAILING_MASK ) { yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK; yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK; } else { yy_full_match = yy_cp; yy_full_state = yy_state_ptr; yy_full_lp = yy_lp; break; } ++yy_lp; goto find_rule; } --yy_cp; yy_current_state = *--yy_state_ptr; yy_lp = 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 1: YY_RULE_SETUP #line 249 "filt.l" { _FiltLexCat(yytext); } YY_BREAK case 2: YY_RULE_SETUP #line 251 "filt.l" { _FiltLexSetWcs(yytext); } YY_BREAK case 3: YY_RULE_SETUP #line 253 "filt.l" { BEGIN COMM; } YY_BREAK case 4: YY_RULE_SETUP #line 254 "filt.l" { BEGIN COMM; } YY_BREAK case 5: YY_RULE_SETUP #line 255 "filt.l" { BEGIN COMM; } YY_BREAK case 6: YY_RULE_SETUP #line 256 "filt.l" { /* comment acts like EOL */ if( YY_START == REG ){ _FiltLexRegionEnd(); _FiltLexNew(); } else if( YY_START == RLIST ){ _FiltLexParen(")"); _FiltLexNew(); } else{ _FiltLexNew(); } BEGIN COMM; } YY_BREAK case 7: YY_RULE_SETUP #line 271 "filt.l" { BEGIN INITIAL; } YY_BREAK case 8: YY_RULE_SETUP #line 272 "filt.l" { BEGIN INITIAL; } YY_BREAK case 9: YY_RULE_SETUP #line 273 "filt.l" { /* ignore comments up to eol */ ; } YY_BREAK case 10: YY_RULE_SETUP #line 275 "filt.l" { ; /* ignore */ } YY_BREAK case 11: YY_RULE_SETUP #line 276 "filt.l" { ; /* ignore */ } YY_BREAK case 12: YY_RULE_SETUP #line 277 "filt.l" { ; /* ignore */ } YY_BREAK case 13: YY_RULE_SETUP #line 278 "filt.l" { ; /* ignore */ } YY_BREAK case 14: *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ yy_c_buf_p = yy_cp = yy_bp + 1; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP #line 280 "filt.l" { if( YY_START == REG ){ _FiltLexRegionEnd(); _FiltLexNew(); } /* Found an asc-style region */ colargs = 0; laststart = YY_START; BEGIN AREG; } YY_BREAK case 15: YY_RULE_SETUP #line 290 "filt.l" { if( colargs > 2 ) _filterror("illegal Chandra region (too many column args)"); if( !FilterSymbolEnter(filt, yytext, &got) ){ switch(got){ case -1: _filterror("missing column or header parameter"); break; case -2: _filterror("column is not an array"); break; case -3: _filterror("internal error while processing column"); break; } } strcpy(colnames[colargs],yytext); colargs++; } YY_BREAK case 16: YY_RULE_SETUP #line 309 "filt.l" { ; } YY_BREAK case 17: YY_RULE_SETUP #line 310 "filt.l" { ; } YY_BREAK case 18: YY_RULE_SETUP #line 311 "filt.l" { ; } YY_BREAK case 19: YY_RULE_SETUP #line 312 "filt.l" { /* end of asc part of region */ if( colargs != 2 ) _filterror("illegal Chandra region (wrong number of cols)"); BEGIN INITIAL; } YY_BREAK case 20: #line 320 "filt.l" case 21: YY_RULE_SETUP #line 320 "filt.l" { /* finish off previous */ if( YY_START == REG ){ _FiltLexRegionEnd(); _FiltLexNew(); } /* Found a region */ BEGIN REG; if( filt->type == TYPE_EVENTS ){ /* if asc-style, re-do wcs for specified columns */ if( colargs == 2 ){ _FiltLexRegionStart(2); _FiltLexWcsCols(filt->fhd, colnames[0], colnames[1]); } /* set up default columns */ else{ _FiltLexRegionStart(1); } } /* its an image */ else{ _FiltLexRegionStart(0); } } YY_BREAK case 22: YY_RULE_SETUP #line 344 "filt.l" { /* can't happen */ _filterror("invalid characters following the region name"); } YY_BREAK case 23: YY_RULE_SETUP #line 348 "filt.l" { narg++; /* process this pure number in the current coord system */ _FiltLexNum(_FiltLexLcx()); } YY_BREAK case 24: YY_RULE_SETUP #line 353 "filt.l" { narg++; /* remove trailing unit character */ yytext[strlen(yytext)-1] = '\0'; /* process this as a pure number in image coord sys */ _FiltLexNum(LCX_IMAGE); } YY_BREAK case 25: YY_RULE_SETUP #line 360 "filt.l" { narg++; /* remove trailing unit character */ yytext[strlen(yytext)-1] = '\0'; /* process this as a pure number in physical coord sys */ _FiltLexNum(LCX_PHYS); } YY_BREAK case 26: YY_RULE_SETUP #line 367 "filt.l" { char *coordsys; if( nowcs(wcs) ) _filterror("no WCS information in file"); narg++; /* save x value for processing with y next time */ if( XARG ){ xpos = SAOstrtod(yytext,NULL); xtype = SAOdtype; if( (xtype !=0) && (xtype != '.') && (xtype != 'd') ){ coordsys = _FiltLexGetWcs(); /* arg1 coords are hms, but ecliptic, galactic are deg */ if( !coordsys || (strncasecmp(coordsys, "ecl", 3) && strncasecmp(coordsys, "gal", 3)) ){ xpos = h2d(xpos); } } } else{ ypos = SAOstrtod(yytext,NULL); ytype = SAOdtype; /* convert wcs to image pixels */ wcsc2pix(wcs, xpos,ypos, _FiltLexGetWcs(), &xpix,&ypix, &offscl); /* convert to physical for single event filtering */ if( USEPHYS ){ xpix = tli2p(xpix, tlmin[0], binsiz[0], tltyp[0]); ypix = tli2p(ypix, tlmin[1], binsiz[1], tltyp[1]); } snprintf(sbuf, SZ_LINE, DFMT2, xpix, ypix); _FiltLexCat(sbuf); } } YY_BREAK case 27: YY_RULE_SETUP #line 401 "filt.l" { narg++; /* handle position arguments */ if( POSARG ){ if( nowcs(wcs) ) _filterror("no WCS information in file"); /* save x value for processing with y next time */ if( XARG ){ xpos = strtod(yytext,NULL); } else{ ypos = strtod(yytext,NULL); /* convert wcs to image pixels */ wcsc2pix(wcs, xpos, ypos, _FiltLexGetWcs(), &xpix, &ypix, &offscl); /* convert to physical for single event filtering */ if( USEPHYS ){ xpix = tli2p(xpix, tlmin[0], binsiz[0], tltyp[0]); ypix = tli2p(ypix, tlmin[1], binsiz[1], tltyp[1]); } snprintf(sbuf, SZ_LINE, DFMT2, xpix, ypix); _FiltLexCat(sbuf); } } /* angle arguments are just passed along, with updated crot */ else if( ANGARG ){ dval = strtod(yytext,NULL); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* panda numeric args are just passed along */ else if( NUMARG ){ dval = strtod(yytext,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* handle size arguments */ else{ if( !WCSSIZE ) _filterror("no WCS (or CDELT) information in file"); if( SAVEANG ){ dval = strtod(yytext,NULL); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(saveang, SZ_LINE, DFMT1, dval); } /* arg 1 is ra, arg2 is dec */ if( XARG ) dval = ABS(strtod(yytext,NULL)/cdelt1); else dval = ABS(strtod(yytext,NULL)/cdelt2); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } } YY_BREAK case 28: YY_RULE_SETUP #line 459 "filt.l" { narg++; /* handle position arguments */ if( POSARG ){ if( nowcs(wcs) ) _filterror("no WCS information in file"); /* save x value for processing with y next time */ if( XARG ){ xpos = r2d(strtod(yytext,NULL)); } else{ ypos = r2d(strtod(yytext,NULL)); /* convert wcs to image pixels */ wcsc2pix(wcs, xpos, ypos, _FiltLexGetWcs(), &xpix, &ypix, &offscl); /* convert to physical for single event filtering */ if( USEPHYS ){ xpix = tli2p(xpix, tlmin[0], binsiz[0], tltyp[0]); ypix = tli2p(ypix, tlmin[1], binsiz[1], tltyp[1]); } snprintf(sbuf, SZ_LINE, DFMT2, xpix, ypix); _FiltLexCat(sbuf); } } /* angle arguments are just passed along, with updated crot */ else if( ANGARG ){ dval = r2d(strtod(yytext,NULL)); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* panda numeric args are just passed along */ else if( NUMARG ){ dval = strtod(yytext,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* handle size arguments */ else{ if( !WCSSIZE ) _filterror("no WCS (or CDELT) information in file"); if( SAVEANG ){ dval = r2d(strtod(yytext,NULL)); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(saveang, SZ_LINE, DFMT1, dval); } /* arg 1 is ra, arg2 is dec */ if( XARG ) dval = r2d(ABS(strtod(yytext,NULL)/cdelt1)); else dval = r2d(ABS(strtod(yytext,NULL)/cdelt2)); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } } YY_BREAK case 29: YY_RULE_SETUP #line 517 "filt.l" { if( !WCSSIZE ) _filterror("no WCS (or CDELT) information in file"); narg++; /* arg 1 is ra, arg2 is dec */ if( XARG ) dval = ABS(strtod(yytext,NULL)/(cdelt1*60.0)); else dval = ABS(strtod(yytext,NULL)/(cdelt2*60.0)); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } YY_BREAK case 30: YY_RULE_SETUP #line 530 "filt.l" { if( !WCSSIZE ) _filterror("no WCS (or CDELT) information in file"); narg++; /* arg 1 is ra, arg2 is dec */ if( XARG ) dval = ABS(strtod(yytext,NULL)/(cdelt1*3600.0)); else dval = ABS(strtod(yytext,NULL)/(cdelt2*3600.0)); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } YY_BREAK case 31: YY_RULE_SETUP #line 543 "filt.l" { int n; n = strtol(strchr(yytext, '=')+1, NULL, 10); if( n <=0 ){ _filterror("invalid region accelerator"); } else{ if( !_FiltLexAccel(n) ){ _filterror("invalid region accelerator"); } } } YY_BREAK case 32: YY_RULE_SETUP #line 555 "filt.l" { if( _FiltLexArgCheck(regname, narg) == 0 ){ /* new expression without an expression separator ... sigh */ _FiltLexRegionEnd(); _FiltLexNew(); BEGIN INITIAL; yyless(0); } else { narg++; /* process this pure number in the current coord system */ _FiltLexNum(_FiltLexLcx()); } } YY_BREAK case 33: YY_RULE_SETUP #line 568 "filt.l" { /* new expression without an expression separator ... sigh */ _FiltLexRegionEnd(); _FiltLexNew(); BEGIN INITIAL; yyless(0); } YY_BREAK case 34: YY_RULE_SETUP #line 575 "filt.l" { /* explicit rule avoids the _FiltLexNew of general rule */ ; } YY_BREAK case 35: YY_RULE_SETUP #line 579 "filt.l" { _FiltLexRegionVal(yytext); if( !nsparen ){ _FiltLexRegionEnd(); BEGIN INITIAL; } } YY_BREAK case 36: YY_RULE_SETUP #line 586 "filt.l" { nsparen++; } YY_BREAK case 37: YY_RULE_SETUP #line 589 "filt.l" { _FiltLexRegionVal(yytext+1); if( nsparen ){ nsparen--; if( !nsparen ){ _FiltLexRegionEnd(); BEGIN INITIAL; } } else { _FiltLexRegionEnd(); BEGIN INITIAL; /* REJECT; */ /* explicit execution of general rule instead of REJECT */ nparen--; _FiltLexNew(); _FiltLexCat(")"); _FiltLexNew(); } } YY_BREAK case 38: YY_RULE_SETUP #line 608 "filt.l" { if( nsparen ){ nsparen--; if( !nsparen ){ _FiltLexRegionEnd(); BEGIN INITIAL; } } else { _FiltLexRegionEnd(); BEGIN INITIAL; /* REJECT; */ /* explicit execution of general rule instead of REJECT */ nparen--; _FiltLexNew(); _FiltLexCat(")"); _FiltLexNew(); } } YY_BREAK case 39: YY_RULE_SETUP #line 626 "filt.l" { _FiltLexRegionEnd(); _FiltLexOp(yytext); BEGIN INITIAL; } YY_BREAK case 40: YY_RULE_SETUP #line 631 "filt.l" { _FiltLexRegionEnd(); _FiltLexNew(); BEGIN INITIAL; } YY_BREAK case 41: YY_RULE_SETUP #line 637 "filt.l" { _filterror("you must use == to compare two columns,"); } YY_BREAK case 42: YY_RULE_SETUP #line 641 "filt.l" { if( YY_START == REG ){ _FiltLexRegionEnd(); } _FiltLexParen("("); BEGIN RLIST; narg = 0; _FiltLexTypeSet(TOK_RLIST); nrange = 0; if( !FilterSymbolEnter(filt, yytext, &got) ){ switch(got){ case -1: _filterror("missing column or header parameter"); break; case -2: _filterror("column is not an array"); break; case -3: _filterror("internal error while processing column"); break; } } strncpy(rangename, yytext, SZ_LINE-1); } YY_BREAK case 43: YY_RULE_SETUP #line 665 "filt.l" { _FiltLexRangeAdd(rangename, yytext, 3, nrange++, SZ_LINE); } YY_BREAK case 44: YY_RULE_SETUP #line 668 "filt.l" { _FiltLexRangeAdd(rangename, yytext, 1, nrange++, SZ_LINE); } YY_BREAK case 45: YY_RULE_SETUP #line 671 "filt.l" { _FiltLexRangeAdd(rangename, yytext, 4, nrange++, SZ_LINE); } YY_BREAK case 46: YY_RULE_SETUP #line 674 "filt.l" { _FiltLexRangeAdd(rangename, yytext, 2, nrange++, SZ_LINE); } YY_BREAK case 47: YY_RULE_SETUP #line 677 "filt.l" { ; } YY_BREAK case 48: YY_RULE_SETUP #line 678 "filt.l" { ; } YY_BREAK case 49: YY_RULE_SETUP #line 679 "filt.l" { ; } YY_BREAK case 50: YY_RULE_SETUP #line 680 "filt.l" { _FiltLexParen(")"); _FiltLexNew(); BEGIN INITIAL; } YY_BREAK case 51: YY_RULE_SETUP #line 685 "filt.l" { _FiltLexParen(")"); _FiltLexNew(); _FiltLexParen(")"); _FiltLexNew(); BEGIN INITIAL; } YY_BREAK case 52: YY_RULE_SETUP #line 692 "filt.l" { _FiltLexParen(")"); _FiltLexOp(yytext); BEGIN INITIAL; } YY_BREAK case 53: YY_RULE_SETUP #line 697 "filt.l" { _FiltLexParen(")"); _FiltLexNew(); BEGIN INITIAL; } YY_BREAK case 54: *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 703 "filt.l" { /* Found a routine */ laststart = YY_START; BEGIN RTINE; narg = 0; nrparen = 0; _FiltLexTypeSet(TOK_RTINE); _FiltLexCat(FilterLexRoutine1(filt, yytext)); nroutine++; } YY_BREAK case 55: YY_RULE_SETUP #line 713 "filt.l" { /* explicit rule avoids the _FiltLexNew of general rule */ _FiltLexCat(","); } YY_BREAK case 56: YY_RULE_SETUP #line 717 "filt.l" { nrparen++; _FiltLexCat("("); } YY_BREAK case 57: YY_RULE_SETUP #line 721 "filt.l" { nrparen--; if( nrparen ){ _FiltLexCat(")"); } else{ /* end of routine */ BEGIN laststart; _FiltLexCat(FilterLexRoutine2(filt, ")")); } } YY_BREAK case 58: YY_RULE_SETUP #line 733 "filt.l" { /* Found an include file */ char *s, *t; if( YY_START == REG ){ _FiltLexRegionEnd(); _FiltLexNew(); } /* handle FITS mask file specially */ filt->nmask = _FiltFitsMask(yytext+1, &(filt->masks), &(filt->maskhd), &(filt->nmaskreg)); /* filt->nmask == -1 => its not a FITS file */ if( filt->nmask != -1 ){ switch(filt->nmask){ case -2: _filterror("FITS image mask must be image data -"); break; case -3: _filterror("Invalid dimensions for FITS image mask -"); break; case -4: _filterror("FITS image mask cannot contain negative values -"); break; default: if( (filt->type != TYPE_IMAGE) && !filt->evsect ){ _filterror("FITS image mask is valid for image filtering only -"); } else{ if( nmask ) _filterror("only one FITS image mask allowed at a time -"); else nmask++; } break; } } else{ if ( include_stack_ptr >= MAX_INCLUDE_DEPTH ) { _filterror("include files are nested too deeply"); } if( (s = (char *)FileContents(yytext+1, 0, NULL)) == NULL ){ _filterror("can't access include file"); } /* ignore empty include file */ else if( *s == '\0' ){ ; } else { t = FilterClip(s); xfree(s); if( t && *t ){ include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; _FiltLexNew(); _FiltLexParen("("); FiltScanString(t); xfree(t); } } } } YY_BREAK case 59: YY_RULE_SETUP #line 795 "filt.l" { if( !FilterSymbolEnter(filt, yytext, &got) ){ switch(got){ case -1: _filterror("missing column or header parameter"); break; case -2: _filterror("column is not an array"); break; case -3: _filterror("internal error while processing column"); break; } } else{ narg++; /* add if initial condition (not region, routine, etc.) */ if( YY_START == INITIAL ) _FiltLexTypeSet(TOK_NAME); _FiltLexCat(FilterLexName(filt,yytext)); } } YY_BREAK case 60: YY_RULE_SETUP #line 817 "filt.l" { ; /* ignore white space */ } YY_BREAK case 61: YY_RULE_SETUP #line 819 "filt.l" { narg++; _FiltLexCat(yytext); } YY_BREAK case 62: YY_RULE_SETUP #line 821 "filt.l" { char tbuf[SZ_LINE]; bin2num(tbuf, yytext, SZ_LINE-1); narg++; _FiltLexCat(tbuf); } YY_BREAK case 63: YY_RULE_SETUP #line 828 "filt.l" { _FiltLexOp(yytext); if( YY_START != RTINE ) BEGIN INITIAL; } YY_BREAK case 64: YY_RULE_SETUP #line 833 "filt.l" { nparen++; _FiltLexNew(); _FiltLexCat(yytext); _FiltLexNew(); } YY_BREAK case 65: YY_RULE_SETUP #line 839 "filt.l" { nparen--; _FiltLexNew(); _FiltLexCat(yytext); _FiltLexNew(); } YY_BREAK case 66: YY_RULE_SETUP #line 845 "filt.l" { _FiltLexNew(); BEGIN INITIAL; } YY_BREAK case 67: YY_RULE_SETUP #line 850 "filt.l" { _FiltLexCat(yytext); } YY_BREAK case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(RLIST): case YY_STATE_EOF(RTINE): case YY_STATE_EOF(REG): case YY_STATE_EOF(AREG): case YY_STATE_EOF(INCLUDE): case YY_STATE_EOF(COMM): #line 852 "filt.l" { if ( --include_stack_ptr < 0 ){ _FiltLexMake(); yy_delete_buffer( YY_CURRENT_BUFFER ); yyterminate(); } else { _FiltLexParen(")"); _FiltLexNew(); yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer(include_stack[include_stack_ptr] ); } } YY_BREAK case 68: YY_RULE_SETUP #line 865 "filt.l" ECHO; YY_BREAK #line 5704 "lex.filt.c" case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - filttext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( yy_current_buffer->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->yy_n_chars; yy_current_buffer->yy_input_file = yyin; yy_current_buffer->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->yy_ch_buf[yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yy_c_buf_p = filttext_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 = filttext_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_c_buf_p; 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 = filttext_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 = filttext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = filttext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yy_c_buf_p = &yy_current_buffer->yy_ch_buf[yy_n_chars]; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = filttext_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 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() { register char *dest = yy_current_buffer->yy_ch_buf; register char *source = filttext_ptr; register int number_to_move, i; int ret_val; if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( yy_current_buffer->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yy_c_buf_p - filttext_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 - filttext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( yy_current_buffer->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->yy_n_chars = yy_n_chars = 0; else { int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ #ifdef YY_USES_REJECT YY_FATAL_ERROR( "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); #else /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = yy_current_buffer; 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. */ yy_flex_realloc( (void *) b->yy_ch_buf, b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; 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->yy_buf_size - number_to_move - 1; #endif } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), yy_n_chars, num_to_read ); yy_current_buffer->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->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; yy_n_chars += number_to_move; yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; filttext_ptr = &yy_current_buffer->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() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = yy_start; yy_state_ptr = yy_state_buf; *yy_state_ptr++ = yy_current_state; for ( yy_cp = filttext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); 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 >= 1688 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; *yy_state_ptr++ = yy_current_state; } 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 ); */ #ifdef YY_USE_PROTOS static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) #else static yy_state_type yy_try_NUL_trans( yy_current_state ) yy_state_type yy_current_state; #endif { register int yy_is_jam; register YY_CHAR yy_c = 1; 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 >= 1688 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 1687); if ( ! yy_is_jam ) *yy_state_ptr++ = yy_current_state; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #ifdef YY_USE_PROTOS static void yyunput( int c, register char *yy_bp ) #else static void yyunput( c, yy_bp ) int c; register char *yy_bp; #endif { register char *yy_cp = yy_c_buf_p; /* undo effects of setting up yytext */ *yy_cp = yy_hold_char; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = yy_n_chars + 2; register char *dest = &yy_current_buffer->yy_ch_buf[ yy_current_buffer->yy_buf_size + 2]; register char *source = &yy_current_buffer->yy_ch_buf[number_to_move]; while ( source > yy_current_buffer->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); yy_current_buffer->yy_n_chars = yy_n_chars = yy_current_buffer->yy_buf_size; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; filttext_ptr = yy_bp; yy_hold_char = *yy_cp; yy_c_buf_p = yy_cp; } #endif /* ifndef YY_NO_UNPUT */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput() #else static int input() #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->yy_ch_buf[yy_n_chars] ) /* This was really a NUL. */ *yy_c_buf_p = '\0'; else { /* need more input */ int offset = yy_c_buf_p - filttext_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 ); /* fall through */ case EOB_ACT_END_OF_FILE: { if ( yywrap() ) return EOF; 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 = filttext_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; return c; } #endif /* YY_NO_INPUT */ #ifdef YY_USE_PROTOS void yyrestart( FILE *input_file ) #else void yyrestart( input_file ) FILE *input_file; #endif { if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_init_buffer( yy_current_buffer, input_file ); yy_load_buffer_state(); } #ifdef YY_USE_PROTOS void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) #else void yy_switch_to_buffer( new_buffer ) YY_BUFFER_STATE new_buffer; #endif { 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->yy_buf_pos = yy_c_buf_p; yy_current_buffer->yy_n_chars = yy_n_chars; } yy_current_buffer = 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; } #ifdef YY_USE_PROTOS void yy_load_buffer_state( void ) #else void yy_load_buffer_state() #endif { yy_n_chars = yy_current_buffer->yy_n_chars; filttext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; yyin = yy_current_buffer->yy_input_file; yy_hold_char = *yy_c_buf_p; } #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) #else YY_BUFFER_STATE yy_create_buffer( file, size ) FILE *file; int size; #endif { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yy_flex_alloc( 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 *) yy_flex_alloc( 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; } #ifdef YY_USE_PROTOS void yy_delete_buffer( YY_BUFFER_STATE b ) #else void yy_delete_buffer( b ) YY_BUFFER_STATE b; #endif { if ( ! b ) return; if ( b == yy_current_buffer ) yy_current_buffer = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yy_flex_free( (void *) b->yy_ch_buf ); yy_flex_free( (void *) b ); } #ifdef YY_USE_PROTOS void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) #else void yy_init_buffer( b, file ) YY_BUFFER_STATE b; FILE *file; #endif { yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; #if YY_ALWAYS_INTERACTIVE b->yy_is_interactive = 1; #else #if YY_NEVER_INTERACTIVE b->yy_is_interactive = 0; #else b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; #endif #endif } #ifdef YY_USE_PROTOS void yy_flush_buffer( YY_BUFFER_STATE b ) #else void yy_flush_buffer( b ) YY_BUFFER_STATE b; #endif { 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(); } #ifndef YY_NO_SCAN_BUFFER #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) #else YY_BUFFER_STATE yy_scan_buffer( base, size ) char *base; yy_size_t size; #endif { 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 0; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = 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 = 0; 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; } #endif #ifndef YY_NO_SCAN_STRING #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) #else YY_BUFFER_STATE yy_scan_string( yy_str ) yyconst char *yy_str; #endif { int len; for ( len = 0; yy_str[len]; ++len ) ; return yy_scan_bytes( yy_str, len ); } #endif #ifndef YY_NO_SCAN_BYTES #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) #else YY_BUFFER_STATE yy_scan_bytes( bytes, len ) yyconst char *bytes; int len; #endif { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = len + 2; buf = (char *) yy_flex_alloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < len; ++i ) buf[i] = bytes[i]; buf[len] = buf[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; } #endif #ifndef YY_NO_PUSH_STATE #ifdef YY_USE_PROTOS static void yy_push_state( int new_state ) #else static void yy_push_state( new_state ) int new_state; #endif { 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_start_stack_depth * sizeof( int ); if ( ! yy_start_stack ) yy_start_stack = (int *) yy_flex_alloc( new_size ); else yy_start_stack = (int *) yy_flex_realloc( (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); } #endif #ifndef YY_NO_POP_STATE static void yy_pop_state() { if ( --yy_start_stack_ptr < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN(yy_start_stack[yy_start_stack_ptr]); } #endif #ifndef YY_NO_TOP_STATE static int yy_top_state() { return yy_start_stack[yy_start_stack_ptr - 1]; } #endif #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif #ifdef YY_USE_PROTOS static void yy_fatal_error( yyconst char msg[] ) #else static void yy_fatal_error( msg ) char msg[]; #endif { (void) 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. */ \ yytext[yyleng] = yy_hold_char; \ yy_c_buf_p = yytext + n; \ yy_hold_char = *yy_c_buf_p; \ *yy_c_buf_p = '\0'; \ yyleng = n; \ } \ while ( 0 ) /* Internal utility routines. */ #ifndef filttext_ptr #ifdef YY_USE_PROTOS static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) #else static void yy_flex_strncpy( s1, s2, n ) char *s1; yyconst char *s2; int n; #endif { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN #ifdef YY_USE_PROTOS static int yy_flex_strlen( yyconst char *s ) #else static int yy_flex_strlen( s ) yyconst char *s; #endif { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif #ifdef YY_USE_PROTOS static void *yy_flex_alloc( yy_size_t size ) #else static void *yy_flex_alloc( size ) yy_size_t size; #endif { return (void *) malloc( size ); } #ifdef YY_USE_PROTOS static void *yy_flex_realloc( void *ptr, yy_size_t size ) #else static void *yy_flex_realloc( ptr, size ) void *ptr; yy_size_t size; #endif { /* 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 (void *) realloc( (char *) ptr, size ); } #ifdef YY_USE_PROTOS static void yy_flex_free( void *ptr ) #else static void yy_flex_free( ptr ) void *ptr; #endif { free( ptr ); } #if YY_MAIN int main() { yylex(); return 0; } #endif #line 865 "filt.l" /* * * Private Routines * * */ #ifdef YY_USE_PROTOS static void floatprefix(void) #else static void floatprefix() #endif { if( filt->method == METHOD_C ) _FiltLexCat("(double)"); } #ifdef YY_USE_PROTOS static void floatsuffix(void) #else static void floatsuffix() #endif { return; } #ifdef YY_USE_PROTOS static void bin2num(char *d, char *s, int maxlen) #else static void bin2num(d, s, maxlen) char *d; char *s; int maxlen; #endif { unsigned long bits; char *p=NULL; if( strlen(s) < 2 ){ if( d != s ) strncpy(d, s, maxlen-1); } else{ if( (*s=='0') && (*(s+1)=='b') ){ bits = strtoul(s+2, &p, 2); if( *p != '\0' ) _filterror("invalid binary value"); snprintf(d, maxlen, "%lx", bits); if( (strlen(d) <2) || (*d!='0') || ((*(d+1)!='x')&&((*(d+1)!='X'))) ){ snprintf(d, maxlen, "0x%lx", bits); } } else{ if( d != s ) strncpy(d, s, maxlen-1); } } } /* * * _FiltLexNew -- finish last start and set up new filter segment * */ #ifdef YY_USE_PROTOS static void _FiltLexNew(void) #else static void _FiltLexNew() #endif { int i; int last; if( nfiltseg >= maxfiltseg ){ last = maxfiltseg; if( maxfiltseg == 0 ){ maxfiltseg = SEGINC; filtseg = (FiltSeg *)xmalloc(maxfiltseg * sizeof(FiltSeg)); } else{ maxfiltseg += SEGINC; filtseg = (FiltSeg *)xrealloc(filtseg, maxfiltseg * sizeof(FiltSeg)); } /* clear the unused records */ for(i=last; is) ){ filtseg[nfiltseg] = (FiltSeg)xcalloc(1, sizeof(FiltSegRec)); nfiltseg++; } filtseg[nfiltseg-1]->n = nfiltseg-1; filtseg[nfiltseg-1]->nregion = 0; } /* * * _FiltLexParen -- add a paren to the filter string buffer * */ #ifdef YY_USE_PROTOS static void _FiltLexParen(char *str) #else static void _FiltLexParen(str) char *str; #endif { /* _FiltLexNew(); */ _FiltLexCat(str); /* _FiltLexNew(); */ } /* * * __FiltLexCat -- add a string to the filter string buffer * */ #ifdef YY_USE_PROTOS static void __FiltLexCat(char *str, char **ostr, int *olen) #else static void __FiltLexCat(str, ostr, olen) char *str; char **ostr; int *olen; #endif { int blen; int slen; if( (str == NULL) || (*str == '\0') ) return; else slen = strlen(str) + 1; if( (*ostr == NULL) || (**ostr == '\0') ) blen = 0; else blen = strlen(*ostr); while( (blen + slen) >= *olen ){ *olen += SEGINC; } if( blen == 0 ) *ostr = (char *)xcalloc(*olen, sizeof(char)); else *ostr = (char *)xrealloc(*ostr, *olen); strcat(*ostr, str); } /* * * _FiltLexCat -- add a string to the filter string buffer * */ #ifdef YY_USE_PROTOS static void _FiltLexCat(char *str) #else static void _FiltLexCat(str) char *str; #endif { char *s; if( !str || !*str ) return; if( nfiltseg ==0 ) _FiltLexNew(); s = xmalloc(strlen(str)+1); nowhite(str, s); __FiltLexCat(s, &(filtseg[nfiltseg-1]->s), &(filtseg[nfiltseg-1]->len)); if( s ) xfree(s); } /* * * _FiltLexArgSave -- save a radius or angle value to the temp string: * this is a special hack for funcnts * */ #ifdef YY_USE_PROTOS static void _FiltLexArgSave(double dval) #else static void _FiltLexArgSave(dval) double dval; #endif { char tbuf[SZ_LINE]; if( narg < 3 ) return; snprintf(tbuf, SZ_LINE, DFMT1, dval); if( narg == 3 ){ *lastarg = '\0'; lastd1 = 0.0; lastd2 = 0.0; if( filtseg[nfiltseg-1]->radang ){ xfree(filtseg[nfiltseg-1]->radang); filtseg[nfiltseg-1]->radang = NULL; filtseg[nfiltseg-1]->ralen = 0; } } switch(regid){ case TY_ANNULUS: case TY_CIRCLE: if( *lastarg ){ __FiltLexCat(lastarg, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); if( narg > 3 ){ __FiltLexCat(",NA,NA\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); strcpy(lastarg, tbuf); } lastd1 = lastd2; lastd2 = dval; break; case TY_BOX: case TY_ELLIPSE: if( (narg%2) == 1 ){ if( *lastarg ){ __FiltLexCat(lastarg, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); if( narg > 3 ){ __FiltLexCat(",NA,NA\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); strcpy(lastarg, tbuf); } lastd1 = lastd2; lastd2 = dval; } break; case TY_PIE: if( narg == 3 ){ __FiltLexCat("NA,NA", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } else if( *lastarg ){ __FiltLexCat("NA,NA,", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); __FiltLexCat(lastarg, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); if( narg > 3 ){ __FiltLexCat("\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); strcpy(lastarg, tbuf); } lastd1 = lastd2; lastd2 = dval; break; case TY_POINT: /* we have to process this here if its is a varargs */ /* so, for the 3rd arg, we add a line for initial x, y pair */ if( narg == 3 ){ __FiltLexCat("NA,NA,NA,NA\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } /* and for every even arg, add a line for the preceeding x,y pair */ else if( (narg % 2) == 0 ){ __FiltLexCat("NA,NA,NA,NA\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } break; default: return; } } /* * * _FiltLexAccel -- appply acceleration to a segment * */ #ifdef YY_USE_PROTOS static int _FiltLexAccel(int n) #else static int _FiltLexAccel(n) int n; #endif { int i; char tbuf[SZ_LINE]; char *s; double dinc; /* check region type */ switch(regid){ case TY_ANNULUS: break; case TY_BOX: narg -= 2; break; case TY_CIRCLE: narg -= 1; break; case TY_ELLIPSE: narg -= 2; break; case TY_PIE: break; default: _filterror("annulus, box, circle, ellipse, pie accelerators only - "); break; } /* add the argument */ snprintf(tbuf, SZ_LINE, IFMT1, n); _FiltLexCat(tbuf); /* change the name of the routine we will call */ if( filtseg[nfiltseg-1]->s0 ){ if( (s = xstrdup(&filtseg[nfiltseg-1]->s[filtseg[nfiltseg-1]->s0])) ){ filtseg[nfiltseg-1]->s[filtseg[nfiltseg-1]->s0] = '\0'; _FiltLexCat("n"); _FiltLexCat(s); snprintf(tbuf, SZ_LINE, "%d ", n); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->regions), &(filtseg[nfiltseg-1]->nr)); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->shapes), &(filtseg[nfiltseg-1]->ns)); setargs = 1; free (s); } if( filtseg[nfiltseg-1]->radang ){ xfree(filtseg[nfiltseg-1]->radang); filtseg[nfiltseg-1]->radang = NULL; filtseg[nfiltseg-1]->ralen = 0; } switch(regid){ case TY_ANNULUS: case TY_BOX: case TY_CIRCLE: case TY_ELLIPSE: dinc = (lastd2 - lastd1)/n; for(i=1; i<=n; i++){ snprintf(tbuf, SZ_LINE, DFMT2, lastd1+((i-1)*dinc), lastd1+(i*dinc)); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); __FiltLexCat(",NA,NA", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); __FiltLexCat("\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } break; case TY_PIE: dinc = (lastd2 - lastd1)/n; for(i=1; i<=n; i++){ snprintf(tbuf, SZ_LINE, DFMT2, lastd1+((i-1)*dinc), lastd1+(i*dinc)); __FiltLexCat("NA,NA", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); __FiltLexCat("\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); } break; default: _filterror("annulus, box, circle, ellipse, pie accelerators only - "); break; } _FiltLexTypeSet(TOK_ACCEL); } else{ _filterror("misplaced accelerator"); } return(n); } /* * * _FiltLexTypeSet -- add type info to the filter segment record * */ #ifdef YY_USE_PROTOS static void _FiltLexTypeSet(int type) #else static void _FiltLexTypeSet(type) int type; #endif { if( nfiltseg ==0 ) _FiltLexNew(); filtseg[nfiltseg-1]->type |= type; } /* * * _FiltLexOp -- add an operator to the filter segment record * */ #ifdef YY_USE_PROTOS static void _FiltLexOp(char *op) #else static void _FiltLexOp(op) char *op; #endif { _FiltLexCat(op); filtseg[nfiltseg-1]->ops += 1; } #ifdef YY_USE_PROTOS static void _FiltLexRegionStart(int docols) #else static void _FiltLexRegionStart(docols) int docols; #endif { char *s, *t; char tbuf[SZ_LINE]; /* sanity check -- 1D images do not support regions */ if( (filt->type == TYPE_IMAGE) && (ft_naxes(filt->fhd)==1) ){ _filterror("2D region filters invalid for 1D images"); } narg = 0; setargs=0; s = xmalloc(strlen(yytext)+1); nowhite(yytext, s); if( *s == '+' ){ regtype = TOK_IREG; strcpy(regname, s+1); } else if( *s == '-' ){ regtype = TOK_EREG; strcpy(regname, s+1); } else if( *s == '!' ){ regtype = TOK_NREG; strcpy(regname, s+1); } else{ regtype = TOK_IREG; strcpy(regname, s); } _FiltLexTypeSet(regtype); if( !(t=strchr(regname, '(')) ){ nsparen=0; } /* remove the paren from the regname string -- we will explicitly add it */ else{ *t = '\0'; nsparen=1; } /* convert to lower case, remove white space */ culc(regname); nowhite(regname, s); strcpy(regname, s); /* convert abbrev to region */ if( !strncmp(regname, "ann", 3) ){ strcpy(regname, "annulus"); regid = TY_ANNULUS; } else if( !strncmp(regname, "box", 3) ){ strcpy(regname, "box"); regid = TY_BOX; } else if( !strncmp(regname, "cir", 3) ){ strcpy(regname, "circle"); regid = TY_CIRCLE; } else if( !strncmp(regname, "ell", 3) ){ strcpy(regname, "ellipse"); regid = TY_ELLIPSE; } else if( !strncmp(regname, "fie", 3) ){ strcpy(regname, "field"); regid = TY_FIELD; } else if( !strncmp(regname, "lin", 3) ){ strcpy(regname, "line"); regid = TY_LINE; } else if( !strncmp(regname, "pan", 3) ){ strcpy(regname, "panda"); regid = TY_PANDA; } else if( !strncmp(regname, "bpa", 3) ){ strcpy(regname, "bpanda"); regid = TY_BPANDA; } else if( !strncmp(regname, "cpa", 3) ){ strcpy(regname, "cpanda"); regid = TY_CPANDA; } else if( !strncmp(regname, "epa", 3) ){ strcpy(regname, "epanda"); regid = TY_EPANDA; } else if( !strncmp(regname, "pie", 3) ){ strcpy(regname, "pie"); regid = TY_PIE; } else if( !strncmp(regname, "qtp", 3) ){ strcpy(regname, "qtpie"); regid = TY_PIE; } else if( !strncmp(regname, "poi", 3) ){ strcpy(regname, "point"); regid = TY_POINT; } else if( !strncmp(regname, "pol", 3) ){ strcpy(regname, "polygon"); regid = TY_POLYGON; } else if( !strcmp(regname, "imagemask") ){ regid = TY_IMAGEMASK; } /* append filter-type prefix */ switch( filt->type ){ case TYPE_EVENTS: /* normally, we filter rows analytically using evregions.o */ if( !filt->evsect ) _FiltLexCat("ev"); /* if evsect=xxx is specified, we filter by image pixels */ else _FiltLexCat("im"); break; case TYPE_IMAGE: /* image are filtered by image pixels */ _FiltLexCat("im"); break; } /* no region value to start */ filtseg[nfiltseg-1]->regval = 0; /* save size of current string so we can get back to the region string */ filtseg[nfiltseg-1]->s0 = strlen(filtseg[nfiltseg-1]->s); /* append region */ _FiltLexCat(FilterLexRegion1(filt,regname)); /* append standard args */ _FiltLexCat("(g,$RS,"); /* add include/exclude and whether we mark y lines for this region (we don't mark y on excludes as an optimization) */ switch(regtype){ case TOK_IREG: snprintf(tbuf, SZ_LINE, "1,%d", TOK_IREG); _FiltLexCat(tbuf); break; case TOK_NREG: snprintf(tbuf, SZ_LINE, "0,%d", TOK_NREG); _FiltLexCat(tbuf); break; case TOK_EREG: snprintf(tbuf, SZ_LINE, "0,%d", TOK_EREG); _FiltLexCat(tbuf); break; } switch(docols){ case 0: /* initialize default columns for tables -- but don't enter symbols yet */ FilterSymbolDefaults(filt, 0); /* initialize wcs for default image case */ _FiltLexWcsCols(filt->fhd, filt->xbin, filt->ybin); _FiltLexCat(","); floatprefix(); _FiltLexCat("x"); floatsuffix(); _FiltLexCat(","); floatprefix(); _FiltLexCat("y"); floatsuffix(); break; case 1: if( !initbindefs ){ /* initialize default columns for tables and enter symbols */ FilterSymbolDefaults(filt, 1); /* initialize wcs for default table case */ _FiltLexWcsCols(filt->fhd, filt->xbin, filt->ybin); initbindefs++; } if( !filt->xbin || !filt->ybin ){ _filterror("two binning columns are required for regions"); } _FiltLexCat(","); floatprefix(); _FiltLexCat(filt->xbin); floatsuffix(); _FiltLexCat(","); floatprefix(); _FiltLexCat(filt->ybin); floatsuffix(); break; case 2: _FiltLexCat(","); floatprefix(); _FiltLexCat(colnames[0]); floatsuffix(); _FiltLexCat(","); floatprefix(); _FiltLexCat(colnames[1]); floatsuffix(); break; } if( s ) xfree(s); } #ifdef YY_USE_PROTOS static void _FiltLexRegionVal(char *s) #else static void _FiltLexRegionVal(s) char *s; #endif { char *t=NULL; if( (t=strchr(s, '{')) ){ t++; } else{ t = s; } filtseg[nfiltseg-1]->regval = atoi(t); } #ifdef YY_USE_PROTOS static void _FiltLexRegionEnd(void) #else static void _FiltLexRegionEnd() #endif { int n; char *s; char ebuf[SZ_LINE]; char tbuf[SZ_LINE]; /* add final arguments as required */ switch( regid ){ case TY_BOX: if( (narg%2) == 0 ){ _FiltLexCat(",0.0"); narg++; } else{ /* if we saved an angle arg, we need to replace the last position arg */ if( *saveang ){ if( (s=strrchr(filtseg[nfiltseg-1]->s, ',')) ){ *s = '\0'; _FiltLexCat(saveang); } } } break; case TY_ELLIPSE: if( (narg%2) == 0 ){ _FiltLexCat(",0.0"); narg++; } else{ /* if we saved an angle arg, we need to replace the last position arg */ if( *saveang ){ if( (s=strrchr(filtseg[nfiltseg-1]->s, ',')) ){ *s = '\0'; _FiltLexCat(saveang); } } } break; case TY_BPANDA: case TY_EPANDA: if( (narg%2) == 0 ){ _FiltLexCat(",0.0"); narg++; } /* drop through here to process panda */ case TY_PANDA: case TY_CPANDA: _FiltLexRegionPanda(); setargs = 1; break; default: break; } /* argument check */ if( (n=_FiltLexArgCheck(regname, narg)) > 0 ){ /* don't bother printing where we are in region */ *yytext = '\0'; switch( vargs[n-1] ){ case 'n': snprintf(ebuf, SZ_LINE, "'%s' requires %d args (%d found)", rnames[n-1], rargs[n-1], narg); break; case 'e': snprintf(ebuf, SZ_LINE, "'%s' requires at least %d (even) args (%d found)", rnames[n-1], rargs[n-1], narg); break; case 'o': snprintf(ebuf, SZ_LINE, "'%s' requires at least %d (odd) args (%d found)", rnames[n-1], rargs[n-1], narg); break; case 'y': default: snprintf(ebuf, SZ_LINE, "'%s' requires %d args (%d found)", rnames[n-1], rargs[n-1], narg); break; } _filterror(ebuf); } /* process varargs */ if( (n < 0) || (regid == TY_POLYGON) ){ if( filtseg[nfiltseg-1]->type & TOK_ACCEL ){ _filterror("n= and variable arglist cannot be combined -"); } /* if its a varargs, we need to end with PSTOP values */ snprintf(sbuf, SZ_LINE, DFMT2, PSTOP, PSTOP); _FiltLexCat(sbuf); /* change the name of the routine we will call */ if( regid != TY_POLYGON ){ if( filtseg[nfiltseg-1]->s0 ){ if((s = xstrdup(&filtseg[nfiltseg-1]->s[filtseg[nfiltseg-1]->s0]))){ filtseg[nfiltseg-1]->s[filtseg[nfiltseg-1]->s0] = '\0'; _FiltLexCat("v"); _FiltLexCat(s); switch(regid){ case TY_ANNULUS: n = narg - 3; break; case TY_BOX: n = (narg - 5)/2; break; case TY_CIRCLE: n = narg - 3; break; case TY_ELLIPSE: n = (narg - 5)/2; break; case TY_PIE: n = narg - 3; break; case TY_POINT: n = narg/2; break; default: _filterror("varargs: annulus, box, circle, ellipse, pie, point;"); break; } snprintf(tbuf, SZ_LINE, "%d ", n); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->regions), &(filtseg[nfiltseg-1]->nr)); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->shapes), &(filtseg[nfiltseg-1]->ns)); setargs = 1; free (s); } _FiltLexTypeSet(TOK_VARARGS); } else{ _filterror("invalid varargs"); } } } /* set number of regions and shapes, if not already done */ if( !setargs ){ snprintf(tbuf, SZ_LINE, "%d ", 1); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->regions), &(filtseg[nfiltseg-1]->nr)); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->shapes), &(filtseg[nfiltseg-1]->ns)); } /* finish off region string */ _FiltLexCat(FilterLexRegion2(filt,")")); /* no column arguments */ colargs = 0; /* arguments are not set */ setargs = 0; /* save angle not set */ *saveang = 0; } #ifdef YY_USE_PROTOS static int _FiltLexRegionPanda(void) #else static int _FiltLexRegionPanda() #endif { int i; int n=0; int got=0; int a, r; int ahi=0, rhi=0; int hi=0; double d[11]; double ainc=0.0, rinc=0.0; char tbuf[SZ_LINE]; char *s=NULL; char *t, *u; switch(regid){ case TY_PANDA: case TY_CPANDA: hi = 7; break; case TY_BPANDA: case TY_EPANDA: hi = 10; break; default: _filterror("unknown panda type -- contact saord@cfa.harvard.edu"); break; } s = xstrdup(filtseg[nfiltseg-1]->s); for(i=hi; i>=0; i--){ /* look for last comma */ t = strrchr(s, ','); if( !t ) goto done; /* null it out from base string */ *t = '\0'; /* point past comma and get double value */ t++; d[i] = strtod(t, &u); if( t == u ) goto done; } switch(regid){ case TY_PANDA: case TY_CPANDA: ainc = (d[3] - d[2])/d[4]; ahi = (int)d[4]; rinc = (d[6] - d[5])/d[7]; rhi = (int)d[7]; break; case TY_BPANDA: case TY_EPANDA: ainc = (d[3] - d[2])/d[4]; ahi = (int)d[4]; rinc = (d[7] - d[5])/d[9]; rhi = (int)d[9]; break; default: _filterror("unknown panda type -- contact saord@cfa.harvard.edu"); break; } /* process limits arguments */ for(a=1; a<=ahi; a++){ for(r=1; r<=rhi; r++){ snprintf(tbuf, SZ_LINE, DFMT4, d[5]+((r-1)*rinc), d[5]+(r*rinc), d[2]+((a-1)*ainc), d[2]+(a*ainc)); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); __FiltLexCat("\n", &(filtseg[nfiltseg-1]->radang), &(filtseg[nfiltseg-1]->ralen)); n++; } } /* adjust region and shape count */ snprintf(tbuf, SZ_LINE, "%d ", n); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->regions), &(filtseg[nfiltseg-1]->nr)); snprintf(tbuf, SZ_LINE, "%d ", 2*n); __FiltLexCat(tbuf, &(filtseg[nfiltseg-1]->shapes), &(filtseg[nfiltseg-1]->ns)); _FiltLexTypeSet(TOK_ACCEL); /* success */ got = 1; done: if( s ) xfree(s); return got; } /* * * _FiltLexRangeAdd -- add a rangelist string to the filter string buffer * */ #ifdef YY_USE_PROTOS static void _FiltLexRangeAdd(char *xname, char *str, int type, int n, int maxlen) #else static void _FiltLexRangeAdd(xname, str, type, n, maxlen) char *xname; char *str; int type; int n; int maxlen; #endif { char tbuf[SZ_LINE]; char tbuf2[SZ_LINE]; char *s; char *t; char *t2; char *name; /* get "in-expression" name for current technique */ name = FilterLexName(filt, xname); /* initialize pointers */ s = str; t = tbuf; /* clear working buffer */ memset(t, 0, SZ_LINE); /* if this is not the beginning, we first need to OR with prev */ if( n != 0 ) strncat(t, "||", maxlen-1); /* put in parens for safety */ strncat(t, "(", maxlen-1); /* add the name */ strncat(t, name, maxlen-1); /* add the rangelist */ switch(type){ case 1: strncat(t, "<=", maxlen-1); /* skip past : */ s++; /* append value */ t2 = tbuf2; while( *s ){ *t2++ = *s++; } *t2 = '\0'; bin2num(tbuf2, tbuf2, maxlen-1); strncat(t, tbuf2, maxlen-1); break; case 2: strncat(t, "==", maxlen-1); /* append upper value */ t2 = tbuf2; while( *s ){ *t2++ = *s++; } *t2 = '\0'; bin2num(tbuf2, tbuf2, maxlen-1); strncat(t, tbuf2, maxlen-1); break; case 3: strncat(t, ">=", maxlen-1); /* append lower value */ t2 = tbuf2; while( *s && (*s != ':') ){ *t2++ = *s++; } *t2 = '\0'; bin2num(tbuf2, tbuf2, maxlen-1); strncat(t, tbuf2, maxlen-1); /* skip past : */ s++; strncat(t, "&&", maxlen-1); strncat(t, name, maxlen-1); strncat(t, "<=", maxlen-1); /* append upper value */ t2 = tbuf2; while( *s ){ *t2++ = *s++; } *t2 = '\0'; bin2num(tbuf2, tbuf2, maxlen-1); strncat(t, tbuf2, maxlen-1); break; case 4: strncat(t, ">=", maxlen-1); /* append lower value */ t2 = tbuf2; while( *s && (*s != ':') ){ *t2++ = *s++; } *t2 = '\0'; bin2num(tbuf2, tbuf2, maxlen-1); strncat(t, tbuf2, maxlen-1); break; } strncat(t, ")", maxlen-1); _FiltLexCat(tbuf); } /* * * _FiltLexTypeCmp -- compare routine for qsort * */ #ifdef YY_USE_PROTOS static int _FiltLexTypeCmp(const void *s1, const void *s2) #else static int _FiltLexTypeCmp(s1, s2) const void *s1; const void *s2; #endif { FiltSeg *f1 = (FiltSeg *)s1; FiltSeg *f2 = (FiltSeg *)s2; /* check for broken qsort */ if( !*f1 || !*f2 ){ _filterror("qsort is broken -- contact saord@cfa.harvard.edu"); /* will not happen */ return 0; } /* make sure null string is at the end */ if( !(*f1)->s && !(*f2)->s ) return 0; else if( !(*f1)->s ) return 1; else if( !(*f2)->s ) return -1; /* paint: reverse order and make excludes local */ if( filt->paint ){ /* if both are regions, reverse order */ if( ((*f1)->type & TOK_REG) && ((*f2)->type & TOK_REG) ){ if( (*f1)->n < (*f2)->n ) return 1; else if( (*f1)->n > (*f2)->n ) return -1; else return 0; } /* keep same order */ else{ if( (*f1)->n < (*f2)->n ) return -1; else if( (*f1)->n > (*f2)->n ) return 1; else return 0; } } else{ /* if both or neither are eregions, keep them in the same order */ if( ((*f1)->type & TOK_EREG) == ((*f2)->type & TOK_EREG) ){ if( (*f1)->n < (*f2)->n ) return -1; else if( (*f1)->n > (*f2)->n ) return 1; else return 0; } /* exactly one is an eregion -- and we want eregions last */ else{ if( (*f1)->type & TOK_EREG ) return 1; else if( (*f2)->type & TOK_EREG ) return -1; /* should not happen */ else return 0; } } } /* * * _FiltLexTypeMatch -- see if the type of filtering we are doing * matches the type of token we have * */ #ifdef YY_USE_PROTOS int _FiltLexTypeMatch(int ftype, int ttype) #else int _FiltLexTypeMatch(ftype, ttype) int ftype; int ttype; #endif { switch(ftype){ case TYPE_IMAGE: /* we don't allow range list and col names in image filters */ if( (ttype & TOK_RLIST) || (ttype & TOK_NAME) ) return 0; /* everything else is fine */ else return 1; case TYPE_EVENTS: return 1; default: return 1; } } #ifdef YY_USE_PROTOS static int _FiltLexArgCheck(char *name, int args) #else static int _FiltLexArgCheck(name, args) char *name; int args; #endif { int i; for(i=0; rnames[i]; i++){ if( !strcmp(name, rnames[i]) ){ if( args == rargs[i] ){ return(0); } else{ /* less than required min */ if( args < rargs[i] ) return(i+1); /* more than min args -- could be varargs */ else{ /* check args allowed in varargs */ switch(vargs[i]){ case 'e': if( (args%2) == 0 ) return(-1); else return(i+1); case 'o': if( (args%2) == 1 ) return(-1); else return(i+1); case 'y': return(-1); default: return(i+1); } } } } } return(0); } #ifdef YY_USE_PROTOS static void _FiltLexSetWcs(char *s) #else static void _FiltLexSetWcs(s) char *s; #endif { char name[SZ_LINE]; int ip=0; newdtable(",=;"); /* get name of global coordsys */ if( word(s, name, &ip) ){ if( gcoordsys ) xfree(gcoordsys); gcoordsys = xstrdup(name); culc(gcoordsys); } /* restore old delim table */ freedtable(); } #ifdef YY_USE_PROTOS static char * _FiltLexCB(char *name, void *client_data) #else static char *_FiltLexCB(name, client_data) char *name; void *client_data; #endif { FiltSeg f=(FiltSeg)client_data; int ip=0; int nr=0; int ns=0; char *s; char tbuf[SZ_LINE]; if( !strcmp(name, "RS") ){ /* exclude regions get no region value first time around */ if( (macropass==0) && (f->type & TOK_EREG) ){ return NULL; } /* get next region value and remove from string */ if( word(f->regions, tbuf, &ip) ){ nr = atoi(tbuf); s = xstrdup(&(f->regions[ip])); xfree(f->regions); f->regions = s; } else{ _filterror("internal error: no region string specified"); return(NULL); } if( !inexpr || (f->type & (TOK_ACCEL|TOK_VARARGS)) ){ if( f->regval ){ snprintf(macrobuf, SZ_LINE, "%d,", f->regval); } else{ snprintf(macrobuf, SZ_LINE, "%d,", nregion+1); } nregion += nr; f->nregion += nr; inexpr = 1; } else{ if( f->regval ){ snprintf(macrobuf, SZ_LINE, "%d,", f->regval); } else{ snprintf(macrobuf, SZ_LINE, "%d,", nregion); } } /* get next shape value and remove from string */ ip = 0; if( word(f->shapes, tbuf, &ip) ){ ns = atoi(tbuf); s = xstrdup(&(f->shapes[ip])); xfree(f->shapes); f->shapes = s; } else{ _filterror("internal error: no shape string specified"); return(NULL); } /* concat shape value */ nshape++; snprintf(tbuf, SZ_LINE, "%d", nshape); strcat(macrobuf, tbuf); /* set new shape value */ nshape += (ns-1); /* return macro value */ return(macrobuf); } else{ return NULL; } } /* * * _FiltLexNeedOp -- determine if we add a connecting operator for this segment * */ #ifdef YY_USE_PROTOS static int _FiltLexNeedOp(int i, char *s) #else static int _FiltLexNeedOp(i, s) int i; char *s; #endif { int c; /* check for operator in current string */ if( s && *s ){ c = *s; switch(c){ case '&': case '|': case '=': case '!': case '<': case '>': return 0; default: break; } } /* not in this string check for operator in previous */ for(i=i-1; i>=0; i--){ if( !filtseg[i] || !filtseg[i]->s ) continue; if( strcmp(filtseg[i]->s, "(") && strcmp(filtseg[i]->s, ")") ) break; } if( i >= 0 ){ c = filtseg[i]->s[strlen(filtseg[i]->s)-1]; switch(c){ case '&': case '|': case '=': case '!': case '<': case '>': return 0; default: return 1; } } else{ return 0; } } /* * * _FiltLexMake -- generate filter from filter segments * */ #ifdef YY_USE_PROTOS static void _FiltLexMake(void) #else static void _FiltLexMake() #endif { int i, j, k, l; int x, xtot; int type=0; int ltype=0; int opar=0; char *s; /* debugging */ if( filt->debug ){ for(i=0; is ) fprintf(stderr, "unsorted #%d %s\n", filtseg[i]->n, filtseg[i]->s); else fprintf(stderr, "unsorted #%d %d is empty\n", i, filtseg[i]->n); } } /* look for bad region expressions and determine how many regions we have */ for(i=0, j=0, k=0, l=0; is ) continue; type = filtseg[i]->type; /* make sure we want the type being offered */ if( !_FiltLexTypeMatch(filt->type, type) ){ _filterror("column filters not permitted in an image filter expression"); } /* look for bad combinations */ if( (type & TOK_NREG) && !(type & TOK_IREG) ) _filterror("!region must be combined with another region (e.g., field()&&!region)"); if( (type & TOK_EREG) && (type & TOK_IREG) ) _filterror("-region must not be combined with another region (use !region instead)"); if( (type & TOK_EREG) && (type & TOK_NAME) ) _filterror("-region must not be combined with filters (use !region instead)"); if( (type & TOK_EREG) && (type & TOK_RLIST) ) _filterror("-region must not be combined with range lists (use !region instead)"); if( (type & TOK_EREG) && (type & TOK_RTINE) ) _filterror("-region must not be combined with routines (use !region instead)"); /* count region types */ if( filtseg[i]->type & TOK_IREG ) j++; if( filtseg[i]->type & TOK_NREG ) k++; if( filtseg[i]->type & TOK_EREG ) l++; } /* check for fits image mask and process specially */ if( filt->masks ){ /* can't have fits mask and ascii regions */ if( j || k || l ){ _filterror("FITS image masks cannot be combined with ASCII regions"); } /* image filtering of events uses a imagemask special routine */ if( (filt->type == TYPE_EVENTS) && filt->evsect ){ strcpy(yytext, "imagemask"); _FiltLexRegionStart(1); _FiltLexRegionEnd(); } else{ __FiltLexCat("imagemask", &filter, &filtlen); nregion = filt->nmaskreg; return; } } /* if we have only exclude regions, add field */ if( !j && !k && l ){ strcpy(yytext, "field"); if( filt->type == TYPE_EVENTS ) _FiltLexRegionStart(1); else _FiltLexRegionStart(0); _FiltLexRegionEnd(); } /* reset region and shape counts */ nregion=0; nshape=0; /* expand macro before reordering, to maintain region numbers in sequence */ for(i=0; is ){ if( _FiltLexNeedOp(i, NULL) ) inexpr=0; macropass=0; s = ExpandMacro(filtseg[i]->s, NULL, NULL, 0, _FiltLexCB, filtseg[i]); xfree(filtseg[i]->s); filtseg[i]->s = s; } } /* we want descending order so that eregions are last in the expression */ qsort(filtseg, nfiltseg, sizeof(FiltSeg), _FiltLexTypeCmp); if( filt->debug ){ for(i=0; is ) fprintf(stderr, "sorted #%d %s\n", filtseg[i]->n, filtseg[i]->s); else fprintf(stderr, "sorted #%d %d is empty\n", i, filtseg[i]->n); } } /* add open paren and mark that we did it */ __FiltLexCat("(", &filter, &filtlen); opar = 1; /* run through segments, inserting proper boolean connectors */ ltype = 0; for(i=0; is ){ /* no type probably means its a paren, so just add it and jump out */ if( !filtseg[i]->type ){ __FiltLexCat(filtseg[i]->s, &filter, &filtlen); /* remove empty parens, if we just make them */ x = strlen(filter); if( (filter[x-2] == '(') && (filter[x-1] == ')') ) filter[x-2] = '\0'; i++; continue; } type = filtseg[i]->type; if( _FiltLexNeedOp(i, NULL) ) inexpr=0; macropass=1; s = ExpandMacro(filtseg[i]->s, NULL, NULL, 0, _FiltLexCB, filtseg[i]); if( _FiltLexNeedOp(i, s) ){ /* remove trailing open parens from prev. segment (add back later) */ for(xtot=0, x=strlen(filter)-1; x>=0; x--){ if( filter[x] != '(' ) break; filter[x] = '\0'; xtot++; } if( (ltype & TOK_IREG) && (type & TOK_IREG) ){ __FiltLexCat("||", &filter, &filtlen); } else if( (ltype & TOK_IREG) && (type & TOK_EREG) ){ if( opar > 0 ){ __FiltLexCat(")", &filter, &filtlen); opar--; } if( filt->paint ){ if( opar > 0 ){ __FiltLexCat(")", &filter, &filtlen); opar --; } __FiltLexCat("||", &filter, &filtlen); } else{ __FiltLexCat("&&", &filter, &filtlen); } __FiltLexCat("(", &filter, &filtlen); opar++; } else if( (ltype & TOK_EREG) && (type & TOK_EREG) ){ __FiltLexCat("&&", &filter, &filtlen); } else if( (ltype & TOK_EREG) && (type & TOK_IREG) ){ if( filt->paint && (opar > 0) ){ __FiltLexCat(")", &filter, &filtlen); opar --; } __FiltLexCat("&&", &filter, &filtlen); __FiltLexCat("(", &filter, &filtlen); opar ++; if( filt->paint ){ __FiltLexCat("(", &filter, &filtlen); opar++; } } /* otherwise implied operator is AND */ else{ __FiltLexCat("&&", &filter, &filtlen); } /* add back parens */ for(x=0; xpaint && (i==0) ){ __FiltLexCat("((", &filter, &filtlen); opar +=2; } } __FiltLexCat(s, &filter, &filtlen); if( s ) xfree(s); if( filtseg[i]->radang ){ if( *filtseg[i]->radang == ',' ) __FiltLexCat(filtseg[i]->radang+1, &radang, &radanglen); else __FiltLexCat(filtseg[i]->radang, &radang, &radanglen); } else{ __FiltLexCat("NA,NA,NA,NA\n", &radang, &radanglen); } i++; for(; (itype==type); ){ if( _FiltLexNeedOp(i, NULL) ) inexpr=0; s = ExpandMacro(filtseg[i]->s, NULL, NULL, 0, _FiltLexCB, filtseg[i]); if( _FiltLexNeedOp(i, s) ){ for(xtot=0, x=strlen(filter)-1; x>=0; x--){ if( filter[x] != '(' ) break; filter[x] = '\0'; xtot++; } /* if lhs and rhs are regions, implied operator is OR */ if( type & TOK_IREG ) __FiltLexCat("||", &filter, &filtlen); /* otherwise implied operator is AND */ else __FiltLexCat("&&", &filter, &filtlen); for(x=0; xradang ){ if( *filtseg[i]->radang == ',' ) __FiltLexCat(filtseg[i]->radang+1, &radang, &radanglen); else __FiltLexCat(filtseg[i]->radang, &radang, &radanglen); } else{ __FiltLexCat("NA,NA,NA,NA\n", &radang, &radanglen); } i++; } } /* ignore invalid arguments */ else{ i++; } /* save last type */ ltype = type; } /* if last segment was an exclude and we are in paint mode, ignore it */ if( filt->paint && (ltype & TOK_EREG) ){ __FiltLexCat("&&0", &filter, &filtlen); } /* close off open parens (lots could be needed in paint mode) */ while( opar-- ){ __FiltLexCat(")", &filter, &filtlen); } /* check for even number of parens */ l = strlen(filter); for(i=0, j=0; idebug ) fprintf(stderr, "paren error %d: %s\n", j, filter); _filterror("unbalanced parentheses"); } if( filt->debug ) fprintf(stderr, "filter: %s\n", filter); } /* * * _FiltLexEnd -- cleanup from parsing regions * */ #ifdef YY_USE_PROTOS static void _FiltLexEnd(void) #else static void _FiltLexEnd() #endif { int i; /* reset state variables */ colargs = 0; initbindefs = 0; include_stack_ptr = 0; nroutine = 0; nshape = 0; nmask = 0; nparen = 0; parse_error = 0; filtlen = 0; radanglen = 0; regid = 0; regtype = 0; inexpr = 0; *regname = '\0'; *saveang = 0; *(wcsnames[0]) = '\0'; *(wcsnames[1]) = '\0'; binsiz[0] = 1; binsiz[1] = 1; /* free up previous filter */ if( filter ){ xfree(filter); filter = NULL; } /* free up previous radang string */ if( radang ){ xfree(radang); radang = NULL; } /* free up wcs */ if( wcs ){ wcsfree (wcs); wcs = NULL; } /* no segments */ if( filtseg ){ for(i=0; is ) xfree(filtseg[i]->s); if( filtseg[i]->regions ) xfree(filtseg[i]->regions); if( filtseg[i]->shapes ) xfree(filtseg[i]->shapes); if( filtseg[i]->radang ) xfree(filtseg[i]->radang); xfree(filtseg[i]); } } xfree(filtseg); filtseg = NULL; } maxfiltseg = 0; nfiltseg = 0; if( gcoordsys ){ xfree(gcoordsys); gcoordsys = NULL; } if( fcoordsys ){ xfree(fcoordsys); fcoordsys = NULL; } cdelt1 = 0.0; cdelt2 = 0.0; crot = 0.0; } /* * * _FiltLexGetWcs -- determine the WCS coord system to use for wcsc translation * */ #ifdef YY_USE_PROTOS static char * _FiltLexGetWcs(void) #else static char *_FiltLexGetWcs() #endif { if( gcoordsys && strcmp(gcoordsys, "image") && strcmp(gcoordsys, "physical") ) return gcoordsys; if( fcoordsys && strcmp(fcoordsys, "image") && strcmp(fcoordsys, "physical") ) return fcoordsys; return NULL; } /* * * _FiltLexWcsCols -- reset WCS for these columns * */ #ifdef YY_USE_PROTOS static void _FiltLexWcsCols(FITSHead iheader, char *name0, char *name1) #else static void _FiltLexWcsCols(iheader, name0, name1) FITSHead iheader; char *name0; char *name1; #endif { int i, which, ival; int simple=1; double dval, dval2; char *s; FITSHead oheader; FITSCard card; /* make sure we have something to process */ if( !iheader ) return; if( filt->fhd->image ){ /* free up old wcs */ if( wcs ) wcsfree (wcs); /* init new wcs */ hlength(ft_cards(filt->fhd),0); wcs = wcsinit(ft_cards(filt->fhd)); tltyp[0] = 0; tltyp[1] = 0; } /* for tables, we can init wcs only the specified columns */ else if( name0 && *name0 && name1 && *name1 ){ /* see if these are the same as the last set of columns */ if( (*(wcsnames[0]) && !strcasecmp(name0,wcsnames[0])) && (*(wcsnames[1]) && !strcasecmp(name1,wcsnames[1])) && wcs ){ return; } /* gather up important tl info about the binning columns */ for(i=1; i<=iheader->table->tfields; i++){ /* determine which bincol we are processing */ if( !strcasecmp(iheader->table->col[i-1].name, name0) ) which = 0; else if( !strcasecmp(iheader->table->col[i-1].name, name1) ) which = 1; else continue; /* set tlinfo values for this column */ tlmin[which] = ft_headgetr(iheader, "TLMIN", i, 1.0, &card); tlmax[which] = ft_headgetr(iheader, "TLMAX", i, 1.0, &card); binsiz[which] = ft_headgetr(iheader, "TDBIN", i, 1.0, &card); tltyp[which] = iheader->table->col[i-1].type; } /* free up old wcs */ if( wcs ) wcsfree (wcs); /* make a copy of the header */ oheader = ft_headcopy(iheader); /* make sure this is a primary FITS file */ ft_cardfmt((FITSCard)oheader->cards, "SIMPLE", 0, FT_LOGICAL, &simple, 0, "Standard FITS"); /* set dimension info, used by wcs code */ ft_headseti(oheader, "NAXIS", 0, 2, "number of axes", 1); /* set dimension info */ for(i=0; i<=1; i++){ ival = (int)tldim(tlmin[i], tlmax[i], binsiz[i], tltyp[i]); ft_headseti(oheader, "NAXIS", i+1, ival, "axis dimension", 1); } /* set bitpix */ ft_headseti(oheader, "BITPIX", 0, 32, "bits/pixel", 1); /* synchronize the header and the cards after any changes */ ft_syncdata(oheader); /* transform WCS cards for the specified columns, if we have such */ for(i=1; i<=iheader->table->tfields; i++){ /* determine which bincol we are processing */ if( !strcasecmp(iheader->table->col[i-1].name, name0) ) which = 0; else if( !strcasecmp(iheader->table->col[i-1].name, name1) ) which = 1; else continue; /* convert event wcs header info image wcs info */ if( (s=ft_headgets(iheader, "TCTYP", i, NULL, &card)) && card ){ ft_headapps(oheader, "CTYPE", which+1, s, NULL); xfree(s); } if( (s=ft_headgets(iheader, "TCRVL", i, NULL, &card)) && card ){ ft_headappv(oheader, "CRVAL", which+1, s, NULL); xfree(s); } if( (s=ft_headgets(iheader, "TCDLT", i, NULL, &card)) && card ){ ft_headappv(oheader, "CDELT", which+1, s, NULL); xfree(s); } if( (s=ft_headgets(iheader, "TCROT", i, NULL, &card)) && card ){ ft_headappv(oheader, "CROTA", which+1, s, NULL); xfree(s); } /* this value gets converted from physical to image */ if( (dval=ft_headgetr(iheader, "TCRPX", i, 0.0, &card)) && card ){ dval2 = tlp2i(dval, tlmin[which], binsiz[which], tltyp[which]); ft_headsetr(oheader, "CRPIX", which+1, dval2, 7, NULL, 1); } } /* init new wcs */ hlength(ft_cards(oheader),0); wcs = wcsinit(ft_cards(oheader)); ft_headfree(oheader, 1); /* save names for next time */ strcpy(wcsnames[0], name0); strcpy(wcsnames[1], name1); } /* set some extra wcs parameters */ if( wcs && iswcs(wcs) ){ if( fcoordsys ) xfree(fcoordsys); fcoordsys = xstrdup(wcs->radecin); culc(fcoordsys); if( !wcs->coorflip ){ cdelt1 = wcs->cdelt[0]; cdelt2 = wcs->cdelt[1]; } else{ cdelt1 = wcs->cdelt[1]; cdelt2 = wcs->cdelt[0]; } if ( wcs->imflip ) { crot = -wcs->rot; } else { crot = wcs->rot; } } else{ cdelt1 = 0.0; cdelt2 = 0.0; crot = 0.0; } /* set global coord system first time through */ if( !gcoordsys ){ if( (gcoordsys=xstrdup(getenv("COORDSYS"))) == NULL ) gcoordsys = xstrdup(DEFAULT_COORDSYS); } } /* * * _FiltLexLcx -- determine if we have a linear-type WCS * */ #ifdef YY_USE_PROTOS static int _FiltLexLcx(void) #else static int _FiltLexLcx() #endif { char *coordsys; coordsys = gcoordsys; if( !coordsys || !*coordsys ) return 0; if( !strcasecmp(coordsys, "image") ) return LCX_IMAGE; if( !strcasecmp(coordsys, "physical") ) return LCX_PHYS; if( !strcasecmp(coordsys, "amplifier") ) return LCX_AMP; if( !strcasecmp(coordsys, "detector") ) return LCX_DET; return 0; } #ifdef YY_USE_PROTOS static void _FiltLexNum(int lcx) #else static void _FiltLexNum(lcx) int lcx; #endif { char tbuf[SZ_LINE]; /* process binary number, if necessary */ bin2num(tbuf, yytext, SZ_LINE); /* for linear coordinate systems (physical, amps, etc.), we have to convert to image coords or physical coords, depending on the type of data and type of filtering */ if( lcx ){ /* data is in a table: we can use image or physical coords */ if( filt->fhd->table ){ /* if we want to use physical coordinates ... */ if( USEPHYS ){ /* convert image positions to physical coords */ if( lcx == LCX_IMAGE ){ if( POSARG ){ dval = tli2p(strtod(tbuf,NULL), tlmin[(narg+1)%2], binsiz[(narg+1)%2], tltyp[(narg+1)%2]); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } /* angle arguments are just passed along */ else if( ANGARG ){ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } /* panda numeric args are just passed along */ else if( NUMARG ){ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* size arguments have to be converted using the binsize */ else{ if( SAVEANG ){ dval = strtod(tbuf,NULL); snprintf(saveang, SZ_LINE, DFMT1, dval); } dval = strtod(tbuf,NULL) * binsiz[(narg+1)%2]; snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } } /* already in physical -- just pass along args */ else{ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } } /* we are using image coords (image-style filtering) */ else{ /* convert non-image positions to image coords */ if( lcx != LCX_IMAGE ){ if( POSARG ){ dval = tlp2i(strtod(tbuf,NULL), tlmin[(narg+1)%2], binsiz[(narg+1)%2], tltyp[(narg+1)%2]); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } /* angle arguments are just passed along */ else if( ANGARG ){ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } /* panda numeric args are just passed along */ else if( NUMARG ){ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* size arguments have to be converted using the binsize */ else{ if( SAVEANG ){ dval = strtod(tbuf,NULL); snprintf(saveang, SZ_LINE, DFMT1, dval); } dval = strtod(tbuf,NULL) / binsiz[(narg+1)%2]; snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } } /* already in image -- just pass along args */ else{ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); _FiltLexArgSave(dval); } } } /* data is in an image: we use image coords */ else{ /* convert positional arguments to image */ if( POSARG ){ /* save x value for processing with y next time */ if( XARG ){ xpos = SAOstrtod(tbuf,NULL); } else{ ypos = SAOstrtod(tbuf,NULL); switch(lcx){ case LCX_IMAGE: xpix = xpos; ypix = ypos; break; case LCX_PHYS: ft_phy2img(filt->fhd, xpos, ypos, &xpix, &ypix); break; case LCX_AMP: ft_amp2phy(filt->fhd, xpos, ypos, &dval, &dval2); ft_phy2img(filt->fhd, dval, dval2, &xpix, &ypix); break; case LCX_DET: ft_det2phy(filt->fhd, xpos, ypos, &dval, &dval2); ft_phy2img(filt->fhd, dval, dval2, &xpix, &ypix); break; } snprintf(sbuf, SZ_LINE, DFMT2, xpix, ypix); _FiltLexCat(sbuf); } } /* angle arguments are just passed along, with updated crot */ else if( ANGARG ){ dval = strtod(tbuf,NULL); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* panda numeric args are just passed along */ else if( NUMARG ){ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* convert size args, which may or may not be in pairs */ else{ if( SAVEANG ){ dval = strtod(tbuf,NULL); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(saveang, SZ_LINE, DFMT1, dval); } /* arg 1 is associated with ra, arg2 with dec */ if( XARG ){ xpos = ABS(strtod(tbuf,NULL)); ypos = 0.0; switch(lcx){ case LCX_IMAGE: xpix = xpos; break; case LCX_PHYS: ft_phy2img_size(filt->fhd, xpos, ypos, &xpix, &ypix); break; case LCX_AMP: ft_amp2phy_size(filt->fhd, xpos,ypos, &dval,&dval2); ft_phy2img_size(filt->fhd, dval,dval2, &xpix,&ypix); break; case LCX_DET: ft_det2phy_size(filt->fhd, xpos,ypos, &dval,&dval2); ft_phy2img_size(filt->fhd, dval,dval2, &xpix,&ypix); break; } snprintf(sbuf, SZ_LINE, DFMT1, xpix); _FiltLexArgSave(xpix); } else{ xpos = 0.0; ypos = ABS(strtod(tbuf,NULL)); switch(lcx){ case LCX_IMAGE: ypix = ypos; break; case LCX_PHYS: ft_phy2img_size(filt->fhd, xpos, ypos, &xpix, &ypix); break; case LCX_AMP: ft_amp2phy_size(filt->fhd, xpos,ypos, &dval,&dval2); ft_phy2img_size(filt->fhd, dval,dval2, &xpix,&ypix); break; case LCX_DET: ft_det2phy_size(filt->fhd, xpos,ypos, &dval,&dval2); ft_phy2img_size(filt->fhd, dval,dval2, &xpix,&ypix); break; } snprintf(sbuf, SZ_LINE, DFMT1, ypix); _FiltLexArgSave(ypix); } _FiltLexCat(sbuf); } } } /* not lcx -- angle arguments are just passed along with updated crot */ else if( ANGARG ){ dval = strtod(tbuf,NULL); if( USEWCS ) dval += crot; if( IMFLIP ) dval = -dval; snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* panda numeric args are just passed along */ else if( NUMARG ){ dval = strtod(tbuf,NULL); snprintf(sbuf, SZ_LINE, DFMT1, dval); _FiltLexCat(sbuf); } /* not lcx -- everything else is assumed to be in units of "degrees" in the default system. add 'd' and put back for reparsing */ else{ int i; char *yycopy = xstrdup(tbuf); unput('d'); for(i=yyleng-1; i>=0; --i) unput(yycopy[i]); xfree(yycopy); narg--; } } #ifdef YY_USE_PROTOS static int _FiltIncMask(FilterMask masks, int maxmask, int nmask) #else static int _FiltIncMask(masks, maxmask, nmask) FilterMask masks; int maxmask; int nmask; #endif { int omax; nmask++; if( nmask >= maxmask ){ omax = maxmask; maxmask += MASKINC; masks = (FilterMask)xrealloc(masks, maxmask*sizeof(FilterMaskRec)); memset(masks+omax, 0, (maxmask-omax)*sizeof(FilterMaskRec)); } return nmask; } #ifdef YY_USE_PROTOS static int _FiltFitsMask(char *filename, FilterMask *rmasks, FITSHead *rhead, int *nreg) #else static int _FiltFitsMask(filename, rmasks, rhead, nreg) char *filename; FilterMask *rmasks; FITSHead *rhead; int *nreg; #endif { short *dptr; short *data=NULL; int x, y; int maxreg=-1; int maxmask; /* max masks allocated thus far */ int nmask=0; /* number of mask segments */ FilterMask masks=NULL; /* array valid region masks for one row */ FITSHead head=NULL; /* read fits image */ if( !ft_simpleimageread(filename, &head, (void *)&data, NULL, 16) ){ return(-1); } if( !head->image ){ if( data ) xfree(data); if( head ) ft_headfree(head, 1); return(-2); } if( !ft_naxes(head) || !ft_naxis(head, 1) || !ft_naxis(head, 2) ){ if( data ) xfree(data); if( head ) ft_headfree(head, 1); return(-3); } /* allocate an array of masks, which will be returned to caller */ maxmask = MASKINC; masks = (FilterMask)xcalloc(maxmask, sizeof(FilterMaskRec)); /* seed the first region mask value */ masks[nmask].region = 0; /* loop through y rows */ for(y=1; y<=ft_naxis(head, 2); y++){ dptr = data + ((y-1) * ft_naxis(head, 1)); /* to start this line, we make a seed mask with no region */ if( masks[nmask].region ){ nmask = _FiltIncMask(masks, maxmask, nmask); masks[nmask].region = 0; } /* process each pixel in the row */ for(x=1; x<=ft_naxis(head, 1); x++, dptr++){ /* we do not allow negative values */ if( *dptr < 0 ){ if( data ) xfree(data); if( head ) ft_headfree(head, 1); if( masks ) xfree(masks); return(-4); } /* set max region as needed */ if( *dptr > maxreg ) maxreg = *dptr; /* look for a change in the mask */ if( *dptr != masks[nmask].region ){ /* if previous was non-zero region, finish it and bump to next */ if( masks[nmask].region ){ masks[nmask].xstop = x - 1; nmask = _FiltIncMask(masks, maxmask, nmask); } masks[nmask].y = y; masks[nmask].region = *dptr; masks[nmask].xstart = x; } } /* finish last non-zero segment, inc number of mask segs */ if( masks[nmask].region ){ masks[nmask].xstop = x; nmask = _FiltIncMask(masks, maxmask, nmask); } } /* free up data space */ if( data ) xfree(data); /* allocate just enough mask space */ masks = (FilterMask)xrealloc(masks, nmask*sizeof(FilterMaskRec)); if( rmasks ) *rmasks = masks; else xfree(masks); if( rhead ) *rhead = head; else ft_headfree(head, 1); if( nreg ) *nreg = maxreg; return(nmask); } /* * * Semi-public Routines * * */ /* * * _FilterString -- return output filter from lexer * */ #ifdef YY_USE_PROTOS char * _FilterString(void) #else char *_FilterString() #endif { if( filtlen <= 0 ) _FiltLexMake(); return(filter); } #ifdef YY_USE_PROTOS int FilterRoutineCount(void) #else int FilterRoutineCount() #endif { return(nroutine); } #ifdef YY_USE_PROTOS int FilterShapeCount(void) #else int FilterShapeCount() #endif { return(nshape); } #ifdef YY_USE_PROTOS int FilterRegionCount(int type) #else int FilterRegionCount(type) int type; #endif { int i, j; /* handle fits image masks specially */ if( nmask ){ if( type & TOK_IREG ) return(nregion); else return(0); } /* normal regions */ for(i=0, j=0; itype & type ){ j += filtseg[i]->nregion; } } return(j); } #ifdef YY_USE_PROTOS char * FilterRadAng(void) #else char *FilterRadAng() #endif { return(radang); } #ifdef YY_USE_PROTOS int FilterParseError(void) #else int FilterParseError() #endif { return(parse_error); } #ifdef YY_USE_PROTOS int FilterTlInfo(double *tlmins, double *binsizs, int *tltyps) #else int FilterTlInfo(tlmins, binsizs, tltyps) double *tlmins; double *binsizs; int *tltyps; #endif { tlmins[0] = tlmin[0]; tlmins[1] = tlmin[1]; binsizs[0] = binsiz[0]; binsizs[1] = binsiz[1]; tltyps[0] = tltyp[0]; tltyps[1] = tltyp[1]; return 1; } #ifdef YY_USE_PROTOS void FiltInitParser(void) #else void FiltInitParser() #endif { static int parser = 0; /* make sure we free'd up all space from last time */ _FiltLexEnd(); /* set up some convenience variables */ filt = FilterDefault(); /* if( parser ) yyrestart(NULL); */ BEGIN INITIAL; parser++; laststart=INITIAL; } #ifdef YY_USE_PROTOS void FiltScanString(char *s) #else void FiltScanString(s) char *s; #endif { int i; char *t; /* make sure there is an explicit delim at end so we are done before lex finds EOF -- otherwise panda shapes don't get processed */ i = strlen(s); t = xmalloc(i+2); strcpy(t, s); if( (t[i-1] != ';') && (t[i-1] != '\n') ) strcat(t, "\n"); yy_scan_string(t); if( t ) xfree(t); } /* yyerror -- renamed to _filterror because flex -P does not change this */ #ifdef YY_USE_PROTOS int _filterror(char *msg) #else int _filterror(msg) char *msg; #endif { if( *yytext ) gerror(stderr, "%s while parsing filter at: %s\n", msg ? msg : "filterr", yytext); else gerror(stderr, "%s\n", msg ? msg : "filterr"); YY_FLUSH_BUFFER; parse_error = 1; yyterminate(); } #ifdef YY_USE_PROTOS int yywrap(void) #else int yywrap() #endif { return 1; }